зеркало из https://github.com/mozilla/gecko-dev.git
Bug 1636656 - land NSS e2061fe522f5 UPGRADE_NSS_RELEASE, r=kjacobs
2020-05-12 Kevin Jacobs <kjacobs@mozilla.com> * gtests/freebl_gtest/mpi_unittest.cc: Bug 1561331 - Additional modular inverse test r=jcj [e2061fe522f5] [tip] 2020-05-08 Jan-Marek Glogowski <glogow@fbihome.de> * coreconf/rules.mk, lib/ckfw/builtins/Makefile, lib/ckfw/builtins/testlib/Makefile, lib/ckfw/capi/Makefile, lib/dev/Makefile, lib/freebl/Makefile, lib/pk11wrap/Makefile, lib/softoken/Makefile: Bug 1629553 Use order-prereq for $(MAKE_OBJDIR) r=rrelyea Introduces a simple "%/d" rule to create directories using $(MAKE_OBJDIR) and replace all explicit $(MAKE_OBJDIR) calls with an order-only-prerequisites. To expand the $(@D) prerequisite, this needs .SECONDEXPANSION. [c3f11da5acfc] 2020-05-05 Jan-Marek Glogowski <glogow@fbihome.de> * coreconf/IRIX.mk, coreconf/OS2.mk, coreconf/README, coreconf/SunOS4.1.3_U1.mk, coreconf/SunOS5.mk, coreconf/UNIX.mk, coreconf/WIN32.mk, coreconf/config.mk, coreconf/location.mk, coreconf/mkdepend/Makefile, coreconf/mkdepend/cppsetup.c, coreconf/mkdepend/def.h, coreconf/mkdepend/ifparser.c, coreconf/mkdepend/ifparser.h, coreconf/mkdepend/imakemdep.h, coreconf/mkdepend/include.c, coreconf/mkdepend/main.c, coreconf/mkdepend/mkdepend.man, coreconf/mkdepend/parse.c, coreconf/mkdepend/pr.c, coreconf/rules.mk: Bug 1438431 Remove mkdepend tool and targets r=rrelyea [6c5f91e098a1] * coreconf/README, coreconf/rules.mk: Bug 1629553 Drop duplicate header DIR variables r=rrelyea [d1f954627260] * coreconf/OpenUNIX.mk, coreconf/README, coreconf/SCO_SV3.2.mk, coreconf/config.mk, coreconf/cpdist.pl, coreconf/import.pl, coreconf/jdk.mk, coreconf/jniregen.pl, coreconf/module.mk, coreconf/outofdate.pl, coreconf/release.pl, coreconf/rules.mk, coreconf/ruleset.mk, coreconf/source.mk, coreconf/version.mk: Bug 1629553 Drop coreconf java support r=rrelyea There aren't an Java sources in NSS, so just drop all the stuff referencing java, jars, jni, etc. I didn't try to remove it from tests. [7d285fe69c8c] * cmd/crmf-cgi/Makefile, cmd/crmf-cgi/config.mk, cmd/crmftest/Makefile, cmd/crmftest/config.mk, cmd/lib/Makefile, cmd/lib/config.mk, cmd/lib/manifest.mn, cmd/libpkix/config.mk, cmd/libpkix/perf/Makefile, cmd/libpkix/perf/manifest.mn, cmd/libpkix/pkix/Makefile, cmd/libpkix/pkix/certsel/Makefile, cmd/libpkix/pkix/certsel/manifest.mn, cmd/libpkix/pkix/checker/Makefile, cmd/libpkix/pkix/checker/manifest.mn, cmd/libpkix/pkix/crlsel/Makefile, cmd/libpkix/pkix/crlsel/manifest.mn, cmd/libpkix/pkix/params/Makefile, cmd/libpkix/pkix/params/manifest.mn, cmd/libpkix/pkix/results/Makefile, cmd/libpkix/pkix/results/manifest.mn, cmd/libpkix/pkix/store/Makefile, cmd/libpkix/pkix/store/manifest.mn, cmd/libpkix/pkix/top/Makefile, cmd/libpkix/pkix/top/manifest.mn, cmd/libpkix/pkix/util/Makefile, cmd/libpkix/pkix/util/manifest.mn, cmd/libpkix/pkix_pl/Makefile, cmd/libpkix/pkix_pl/module/Makefile, cmd/libpkix/pkix_pl/module/manifest.mn, cmd/libpkix/pkix_pl/pki/Makefile, cmd/libpkix/pkix_pl/pki/manifest.mn, cmd/libpkix/pkix_pl/system/Makefile, cmd/libpkix/pkix_pl/system/manifest.mn, cmd/libpkix/testutil/manifest.mn, cpputil/Makefile, cpputil/config.mk, cpputil/manifest.mn, lib/base/Makefile, lib/base/config.mk, lib/base/manifest.mn, lib/certdb/Makefile, lib/certdb/config.mk, lib/certdb/manifest.mn, lib/certhigh/Makefile, lib/certhigh/config.mk, lib/certhigh/manifest.mn, lib/ckfw/Makefile, lib/ckfw/builtins/Makefile, lib/ckfw/builtins/config.mk, lib/ckfw/builtins/manifest.mn, lib/ckfw/builtins/testlib/Makefile, lib/ckfw/builtins/testlib/config.mk, lib/ckfw/builtins/testlib/manifest.mn, lib/ckfw/capi/Makefile, lib/ckfw/capi/config.mk, lib/ckfw/capi/manifest.mn, lib/ckfw/config.mk, lib/ckfw/dbm/Makefile, lib/ckfw/dbm/config.mk, lib/ckfw/dbm/manifest.mn, lib/ckfw/manifest.mn, lib/crmf/Makefile, lib/crmf/config.mk, lib/crmf/manifest.mn, lib/cryptohi/Makefile, lib/cryptohi/config.mk, lib/cryptohi/manifest.mn, lib/dbm/src/config.mk, lib/dbm/src/manifest.mn, lib/dev/Makefile, lib/dev/config.mk, lib/dev/manifest.mn, lib/jar/Makefile, lib/jar/config.mk, lib/jar/manifest.mn, lib/libpkix/Makefile, lib/libpkix/config.mk, lib/libpkix/include/Makefile, lib/libpkix/include/config.mk, lib/libpkix/pkix/Makefile, lib/libpkix/pkix/certsel/Makefile, lib/libpkix/pkix/certsel/config.mk, lib/libpkix/pkix/certsel/manifest.mn, lib/libpkix/pkix/checker/Makefile, lib/libpkix/pkix/checker/config.mk, lib/libpkix/pkix/checker/manifest.mn, lib/libpkix/pkix/config.mk, lib/libpkix/pkix/crlsel/Makefile, lib/libpkix/pkix/crlsel/config.mk, lib/libpkix/pkix/crlsel/manifest.mn, lib/libpkix/pkix/params/Makefile, lib/libpkix/pkix/params/config.mk, lib/libpkix/pkix/params/manifest.mn, lib/libpkix/pkix/results/Makefile, lib/libpkix/pkix/results/config.mk, lib/libpkix/pkix/results/manifest.mn, lib/libpkix/pkix/store/Makefile, lib/libpkix/pkix/store/config.mk, lib/libpkix/pkix/store/manifest.mn, lib/libpkix/pkix/top/Makefile, lib/libpkix/pkix/top/config.mk, lib/libpkix/pkix/top/manifest.mn, lib/libpkix/pkix/util/Makefile, lib/libpkix/pkix/util/config.mk, lib/libpkix/pkix/util/manifest.mn, lib/libpkix/pkix_pl_nss/Makefile, lib/libpkix/pkix_pl_nss/config.mk, lib/libpkix/pkix_pl_nss/module/Makefile, lib/libpkix/pkix_pl_nss/module/config.mk, lib/libpkix/pkix_pl_nss/module/manifest.mn, lib/libpkix/pkix_pl_nss/pki/Makefile, lib/libpkix/pkix_pl_nss/pki/config.mk, lib/libpkix/pkix_pl_nss/pki/manifest.mn, lib/libpkix/pkix_pl_nss/system/Makefile, lib/libpkix/pkix_pl_nss/system/config.mk, lib/libpkix/pkix_pl_nss/system/manifest.mn, lib/pk11wrap/Makefile, lib/pk11wrap/config.mk, lib/pk11wrap/manifest.mn, lib/pkcs12/Makefile, lib/pkcs12/config.mk, lib/pkcs12/manifest.mn, lib/pkcs7/Makefile, lib/pkcs7/config.mk, lib/pkcs7/manifest.mn, lib/pki/Makefile, lib/pki/config.mk, lib/pki/manifest.mn, lib/sqlite/Makefile, lib/sysinit/Makefile, lib/util/Makefile, lib/zlib/Makefile, lib/zlib/config.mk, lib/zlib/manifest.mn: Bug 1629553 Merge simple config.mk files r=rrelyea There is really no good reason to explicitly change the TARGET variable. And the empty SHARED_LIBRARY variable should also be in the manifest.mn to begin with. All the other empty variables start empty or undefined, so there is also no need to explicitly set them empty. [dc1ef0faf4a6] * cmd/libpkix/testutil/config.mk, coreconf/OS2.mk, coreconf/WIN32.mk, coreconf/ruleset.mk, coreconf/suffix.mk, gtests/common/Makefile, gtests/common/manifest.mn, gtests/google_test/Makefile, gtests/google_test/manifest.mn, gtests/pkcs11testmodule/Makefile, gtests/pkcs11testmodule/config.mk, gtests/pkcs11testmodule/manifest.mn, lib/ckfw/builtins/config.mk, lib/ckfw/builtins/manifest.mn, lib/ckfw/builtins/testlib/config.mk, lib/ckfw/capi/config.mk, lib/ckfw/capi/manifest.mn, lib/freebl/config.mk, lib/nss/config.mk, lib/nss/manifest.mn, lib/smime/config.mk, lib/smime/manifest.mn, lib/softoken/config.mk, lib/softoken/legacydb/config.mk, lib/softoken/legacydb/manifest.mn, lib/softoken/manifest.mn, lib/sqlite/config.mk, lib/sqlite/manifest.mn, lib/ssl/config.mk, lib/ssl/manifest.mn, lib/sysinit/config.mk, lib/sysinit/manifest.mn, lib/util/config.mk, lib/util/manifest.mn: Bug 1629553 Rework the LIBRARY_NAME ruleset r=rrelyea * Drop the WIN% "32" default DLL suffix * Add default resource file handling => drop default RES * Generate IMPORT_LIBRARY based on IMPORT_LIB_SUFFIX and SHARED_LIBRARY, so we can drop all the explicit empty IMPORT_LIBRARY lines Originally this patch also tried to add a default MAPFILE rule, but this fails, because the ARCH makefiles set linker flags based on an existing MAPFILE variable. [877d721d93cd] * coreconf/rules.mk: Bug 1629553 Use an eval template for C++ compile rules r=rrelyea These pattern rules already had a comment to keep both in sync, so just use an eval template to enforce this. [9b628d9c57e5] * lib/freebl/Makefile: Bug 1629553 Use an eval template for freebl libs r=rrelyea [71dd05b782e4] * coreconf/rules.mk: Bug 1629553 Use an eval template for export targets r=rrelyea [45db681898be] * lib/pk11wrap/manifest.mn, lib/pk11wrap/pk11load.c, lib/pk11wrap/pk11wrap.gyp: Bug 1629553 Prefix pk11wrap (SHLIB|LIBRARY)_VERSION with NSS_ r=rrelyea In the manifest.mn the LIBRARY_VERSION is normally used to define the major version of the build shared library. This ust works for the pk11wrap case, because pk11wrap is a static library. But it's still very confusing when reading the manifest.mn. Also the referenced define in the code is just named SHLIB_VERSION. So this prefixes the defines and the variables with NSS_, because it tries to load the NSS library, just as the SOFTOKEN_.*_VERSION is used to load the versioned softokn library. [cbb737bc6c0c] * Makefile, cmd/Makefile, cmd/shlibsign/Makefile, cmd/smimetools/rules.mk, coreconf/rules.mk, gtests/manifest.mn, lib/freebl/Makefile, lib/manifest.mn, manifest.mn: Bug 290526 Drop double-colon usage and add directory depends r=rrelyea Double-colon rule behaviour isn't really compatible with parallel build. This gets rid of all of them, so we can codify the directory dependencies. This leaves just three problems, which aren't really fixable with the current build system without completely replacing it: * everything depends on nsinstall * everything depends on installed headers * ckfw child directories depend on the build parent libs This is handled by the prepare_build target. Overall this allows most if the build to run in parallel. P.S. the release_md:: has to stay :-( P.P.S. no clue, why freebl must use libs: instead of using the TARGETS and .PHONY variables [f3a0ef69c056] * coreconf/WIN32.mk, gtests/certdb_gtest/manifest.mn, gtests/common/Makefile, gtests/google_test/Makefile, gtests/google_test/manifest.mn, gtests/pkcs11testmodule/Makefile: Bug 290526 Fix gtests build for WIN% targets r=rrelyea The google_test gtest build doesn't provide any exports for the shared library on Windows and the gyp build also builds just a static library. So build gtest and gtestutil libraries as static. For whatever reason, the Windows linker doesn't find the main function inside the gtestutil library, if we don't tell it to build a console executable. But linking works fine, if the object file is used directly. But since we can have different main() objects based on build flags, we enforce building console applications binaries. [a82a55886c1d] * cmd/bltest/manifest.mn, cmd/chktest/manifest.mn, cmd/crmf- cgi/manifest.mn, cmd/crmftest/manifest.mn, cmd/fipstest/manifest.mn, cmd/lib/Makefile, cmd/libpkix/testutil/Makefile, cmd/lowhashtest/manifest.mn, cmd/modutil/manifest.mn, cmd/pk11gcmtest/manifest.mn, cmd/pk11mode/manifest.mn, cmd/rsapoptst/manifest.mn, cmd/signtool/manifest.mn, cmd/ssltap/manifest.mn, coreconf/README, coreconf/rules.mk, cpputil/manifest.mn, gtests/google_test/manifest.mn, gtests/pkcs11testmodule/Makefile, lib/base/Makefile, lib/certdb/Makefile, lib/certhigh/Makefile, lib/ckfw/Makefile, lib/crmf/Makefile, lib/cryptohi/Makefile, lib/dbm/include/Makefile, lib/dev/Makefile, lib/dev/manifest.mn, lib/freebl/Makefile, lib/libpkix/Makefile, lib/libpkix/include/Makefile, lib/libpkix/include/manifest.mn, lib/libpkix/pkix/Makefile, lib/libpkix/pkix/certsel/Makefile, lib/libpkix/pkix/certsel/manifest.mn, lib/libpkix/pkix/checker/Makefile, lib/libpkix/pkix/checker/manifest.mn, lib/libpkix/pkix/crlsel/Makefile, lib/libpkix/pkix/crlsel/manifest.mn, lib/libpkix/pkix/params/Makefile, lib/libpkix/pkix/params/manifest.mn, lib/libpkix/pkix/results/Makefile, lib/libpkix/pkix/results/manifest.mn, lib/libpkix/pkix/store/Makefile, lib/libpkix/pkix/store/manifest.mn, lib/libpkix/pkix/top/Makefile, lib/libpkix/pkix/top/manifest.mn, lib/libpkix/pkix/util/Makefile, lib/libpkix/pkix/util/manifest.mn, lib/libpkix/pkix_pl_nss/Makefile, lib/libpkix/pkix_pl_nss/module/Makefile, lib/libpkix/pkix_pl_nss/module/manifest.mn, lib/libpkix/pkix_pl_nss/pki/Makefile, lib/libpkix/pkix_pl_nss/pki/manifest.mn, lib/libpkix/pkix_pl_nss/system/Makefile, lib/libpkix/pkix_pl_nss/system/manifest.mn, lib/nss/Makefile, lib/pk11wrap/Makefile, lib/pki/Makefile, lib/pki/manifest.mn, lib/softoken/Makefile, lib/softoken/legacydb/Makefile, lib/sqlite/Makefile, lib/sqlite/manifest.mn, lib/ssl/Makefile, lib/util/Makefile, lib/zlib/Makefile: Bug 290526 Drop recursive private_exports r=rrelyea Copying private headers is now simply included in the exports target, as these headers use an extra directory anyway. [989ecbd870f3] * Makefile, cmd/shlibsign/Makefile, coreconf/Makefile, coreconf/README, coreconf/nsinstall/Makefile, coreconf/rules.mk, coreconf/ruleset.mk, lib/Makefile, lib/ckfw/Makefile: Bug 290526 Parallelize part of the NSS build r=rrelyea This still serializes many targets, but at least these targets themself run their build in parallel. The main serialization happens in nss/Makefile and nss/coreconf/rules.mk's all target. We can't add these as real dependencies, as all Makefile snippets use the same variable names. I tried to always run sub-makes to hack in the depndencies, but these don't know of each other, so targets very often run twice, and this breaks the build. Having a tests:: target and a tests directory leads to misery (and doesn't work), so it's renamed to check. This just works with NSS_DISABLE_GTESTS=1 specified and is fixed by a follow up patch, which removes the double-colon usage and adds the directory dependencies! [5d0bfa092e0f] * coreconf/UNIX.mk, coreconf/WIN32.mk, coreconf/mkdepend/Makefile, coreconf/nsinstall/Makefile, coreconf/ruleset.mk: Bug 290526 Don't delete directories r=rrelyea If these files exist and aren't directories, there might be other problems. Trying to "fix" them by removing will break the build. [fb377d36262d] * coreconf/rules.mk: Bug 290526 Handle empty install variables r=rrelyea Originally I added the install commands to the individual build targets. But this breaks the incremental build, because there is actually no dependency for the install. But it turns out, that in the end it's enough to ignore empty defined variables, so just do this. [585942b1d556] * coreconf/rules.mk: Bug 290526 Handle parallel PROGRAM and PROGRAMS r=rrelyea I have no real clue, why PROGRAMS is actually working in the sequence build. There is no special make code really handling it, except for the install target. This patches code is inspired by the $(eval ...) example in the GNU make documentation. It generates a program specific make target and maps the programs objects based on the defined variables. [d30a6953b897] Differential Revision: https://phabricator.services.mozilla.com/D75385
This commit is contained in:
Родитель
2048225636
Коммит
74a8ec946b
|
@ -1 +1 @@
|
|||
e3444f4cc638
|
||||
e2061fe522f5
|
|
@ -0,0 +1,5 @@
|
|||
--- TAG-INFO
|
||||
+++ TAG-INFO
|
||||
@@ -1,1 +1,1 @@
|
||||
-e2061fe522f5
|
||||
+e3444f4cc638
|
|
@ -1,16 +0,0 @@
|
|||
#
|
||||
# This Source Code Form is subject to the terms of the Mozilla Public
|
||||
# License, v. 2.0. If a copy of the MPL was not distributed with this
|
||||
# file, You can obtain one at http://mozilla.org/MPL/2.0/.
|
||||
|
||||
|
||||
#
|
||||
# Override TARGETS variable so that only static libraries
|
||||
# are specifed as dependencies within rules.mk.
|
||||
#
|
||||
|
||||
TARGETS = $(PROGRAM)
|
||||
SHARED_LIBRARY =
|
||||
IMPORT_LIBRARY =
|
||||
LIBRARY =
|
||||
|
|
@ -1,15 +0,0 @@
|
|||
#
|
||||
# This Source Code Form is subject to the terms of the Mozilla Public
|
||||
# License, v. 2.0. If a copy of the MPL was not distributed with this
|
||||
# file, You can obtain one at http://mozilla.org/MPL/2.0/.
|
||||
|
||||
#
|
||||
# Override TARGETS variable so that only static libraries
|
||||
# are specifed as dependencies within rules.mk.
|
||||
#
|
||||
|
||||
TARGETS = $(PROGRAM)
|
||||
SHARED_LIBRARY =
|
||||
IMPORT_LIBRARY =
|
||||
LIBRARY =
|
||||
|
|
@ -1,15 +0,0 @@
|
|||
#
|
||||
# This Source Code Form is subject to the terms of the Mozilla Public
|
||||
# License, v. 2.0. If a copy of the MPL was not distributed with this
|
||||
# file, You can obtain one at http://mozilla.org/MPL/2.0/.
|
||||
|
||||
#
|
||||
# Override TARGETS variable so that only static libraries
|
||||
# are specifed as dependencies within rules.mk.
|
||||
#
|
||||
|
||||
TARGETS = $(LIBRARY)
|
||||
SHARED_LIBRARY =
|
||||
IMPORT_LIBRARY =
|
||||
PROGRAM =
|
||||
|
|
@ -1,9 +0,0 @@
|
|||
#
|
||||
# This Source Code Form is subject to the terms of the Mozilla Public
|
||||
# License, v. 2.0. If a copy of the MPL was not distributed with this
|
||||
# file, You can obtain one at http://mozilla.org/MPL/2.0/.
|
||||
|
||||
TARGETS = $(LIBRARY)
|
||||
SHARED_LIBRARY =
|
||||
IMPORT_LIBRARY =
|
||||
PROGRAM =
|
|
@ -1,167 +0,0 @@
|
|||
#! /usr/local/bin/perl
|
||||
#
|
||||
# This Source Code Form is subject to the terms of the Mozilla Public
|
||||
# License, v. 2.0. If a copy of the MPL was not distributed with this
|
||||
# file, You can obtain one at http://mozilla.org/MPL/2.0/.
|
||||
require('coreconf.pl');
|
||||
|
||||
#######-- read in variables on command line into %var
|
||||
|
||||
&parse_argv;
|
||||
|
||||
### do the copy
|
||||
|
||||
print STDERR "RELEASE TREE / MODULE = $var{RELEASE_TREE} $var{MODULE}\n";
|
||||
|
||||
|
||||
|
||||
# 1
|
||||
if ($var{RELEASE} eq "") { exit; } # Can't do release here, so exit.
|
||||
|
||||
# 2
|
||||
#if (! ($var{RELEASE} =~ /\//)) { # if no specific version is specified in RELEASE variable
|
||||
# $component = $var{RELEASE};
|
||||
#}
|
||||
#else { # if a subcomponent/version is given in the RELEASE variable
|
||||
# $var{RELEASE} =~ m|^([^/]*)/|;
|
||||
# $component = $1; # everything before the first slash;
|
||||
# }
|
||||
|
||||
# 3
|
||||
$path = $var{RELEASE};
|
||||
|
||||
|
||||
# 4
|
||||
# find out what directory we would create for 'today'
|
||||
|
||||
$year = (localtime)[5] + 1900;
|
||||
$month = (localtime)[4] + 1;
|
||||
$day = (localtime)[3];
|
||||
$today = sprintf( "%d%02d%02d", $year, $month, $day );
|
||||
|
||||
# 5
|
||||
# if version is null, then set the version to today.
|
||||
if ($var{"RELEASE_VERSION"} eq "") {
|
||||
$var{"RELEASE_VERSION"} = $today;
|
||||
}
|
||||
|
||||
#6
|
||||
$version = $var{"RELEASE_VERSION"}; # set RELEASE_VERSION to passed in variable
|
||||
|
||||
#7
|
||||
# if version is today, then we will want to make a 'current' link.
|
||||
|
||||
if ($version eq $today) {
|
||||
$create_current = 1;
|
||||
}
|
||||
|
||||
#8
|
||||
# version can be a) passed in value from command line, b) value in manifest.mn
|
||||
# or c) computed value such as '19970909'
|
||||
|
||||
|
||||
$dir = "$var{'RELEASE_TREE'}/$path";
|
||||
|
||||
#9
|
||||
if (! (-e "$dir/$version" && -d "$dir/$version")) {
|
||||
print "making dir $dir \n";
|
||||
&rec_mkdir("$dir/$version");
|
||||
}
|
||||
|
||||
|
||||
|
||||
print "version = $version\n";
|
||||
print "path = $path\n";
|
||||
print "var{release_tree} = $var{'RELEASE_TREE'}\n";
|
||||
print "dir = $dir = RELEASE_TREE/path\n";
|
||||
|
||||
|
||||
#10
|
||||
if ($create_current == 1) {
|
||||
|
||||
# unlinking and linking always occurs, even if the link is correct
|
||||
print "unlinking $dir/current\n";
|
||||
unlink("$dir/current");
|
||||
|
||||
print "putting version number $today into 'current' file..";
|
||||
|
||||
open(FILE,">$dir/current") || die " couldn't open current\n";
|
||||
print FILE "$today\n";
|
||||
close(FILE);
|
||||
print " ..done\n"
|
||||
|
||||
}
|
||||
|
||||
&rec_mkdir("$dir/$version/$var{'RELEASE_MD_DIR'}");
|
||||
&rec_mkdir("$dir/$version/$var{'RELEASE_XP_DIR'}");
|
||||
|
||||
|
||||
|
||||
|
||||
foreach $jarfile (split(/ /,$var{FILES}) ) {
|
||||
print STDERR "---------------------------------------------\n";
|
||||
|
||||
$jarinfo = $var{$jarfile};
|
||||
|
||||
($jardir,$jaropts) = split(/\|/,$jarinfo);
|
||||
|
||||
if ($jaropts =~ /f/) {
|
||||
print STDERR "Copying files $jardir....\n";
|
||||
}
|
||||
else {
|
||||
print STDERR "Copying jar file $jarfile....\n";
|
||||
}
|
||||
|
||||
print "jaropts = $jaropts\n";
|
||||
|
||||
if ($jaropts =~ /m/) {
|
||||
$destdir = $var{"RELEASE_MD_DIR"};
|
||||
print "found m, using MD dir $destdir\n";
|
||||
}
|
||||
elsif ($jaropts =~ /x/) {
|
||||
$destdir = $var{"RELEASE_XP_DIR"};
|
||||
print "found x, using XP dir $destdir\n";
|
||||
}
|
||||
else {
|
||||
die "Error: must specify m or x in jar options in $jarinfo line\n";
|
||||
}
|
||||
|
||||
|
||||
$distdir = "$dir/$version/$destdir";
|
||||
|
||||
|
||||
|
||||
if ($jaropts =~ /f/) {
|
||||
|
||||
print "splitting: \"$jardir\"\n";
|
||||
for $srcfile (split(/ /,$jardir)) {
|
||||
|
||||
#if srcfile has a slash
|
||||
if ($srcfile =~ m|/|) {
|
||||
#pull out everything before the last slash into $1
|
||||
$srcfile =~ m|(.*)/|;
|
||||
$distsubdir = "/$1";
|
||||
print "making dir $distdir$distsubdir\n";
|
||||
&rec_mkdir("$distdir$distsubdir");
|
||||
}
|
||||
print "copy: from $srcfile\n";
|
||||
print " to $distdir$distsubdir\n";
|
||||
$srcprefix = "";
|
||||
if ($jaropts =~/m/) {
|
||||
$srcprefix = "$var{'PLATFORM'}/";
|
||||
}
|
||||
system("cp $srcprefix$srcfile $distdir$distsubdir");
|
||||
}
|
||||
}
|
||||
else {
|
||||
$srcfile = "$var{SOURCE_RELEASE_PREFIX}/$jardir/$jarfile";
|
||||
|
||||
print "copy: from $srcfile\n";
|
||||
print " to $distdir\n";
|
||||
|
||||
system("cp $srcfile $distdir");
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
|
|
@ -1,189 +0,0 @@
|
|||
#! /usr/local/bin/perl
|
||||
#
|
||||
# This Source Code Form is subject to the terms of the Mozilla Public
|
||||
# License, v. 2.0. If a copy of the MPL was not distributed with this
|
||||
# file, You can obtain one at http://mozilla.org/MPL/2.0/.
|
||||
|
||||
print STDERR "import.pl\n";
|
||||
|
||||
require('coreconf.pl');
|
||||
|
||||
|
||||
$returncode =0;
|
||||
|
||||
|
||||
#######-- read in variables on command line into %var
|
||||
|
||||
$var{UNZIP} = "unzip -o";
|
||||
|
||||
&parse_argv;
|
||||
|
||||
if (! ($var{IMPORTS} =~ /\w/)) {
|
||||
print STDERR "nothing to import\n";
|
||||
}
|
||||
|
||||
######-- Do the import!
|
||||
|
||||
foreach $import (split(/ /,$var{IMPORTS}) ) {
|
||||
|
||||
print STDERR "\n\nIMPORTING .... $import\n-----------------------------\n";
|
||||
|
||||
|
||||
# if a specific version specified in IMPORT variable
|
||||
# (if $import has a slash in it)
|
||||
|
||||
if ($import =~ /\//) {
|
||||
# $component=everything before the first slash of $import
|
||||
|
||||
$import =~ m|^([^/]*)/|;
|
||||
$component = $1;
|
||||
|
||||
$import =~ m|^(.*)/([^/]*)$|;
|
||||
|
||||
# $path=everything before the last slash of $import
|
||||
$path = $1;
|
||||
|
||||
# $version=everything after the last slash of $import
|
||||
$version = $2;
|
||||
|
||||
if ($var{VERSION} ne "current") {
|
||||
$version = $var{VERSION};
|
||||
}
|
||||
}
|
||||
else {
|
||||
$component = $import;
|
||||
$path = $import;
|
||||
$version = $var{VERSION};
|
||||
}
|
||||
|
||||
$releasejardir = "$var{RELEASE_TREE}/$path";
|
||||
if ($version eq "current") {
|
||||
print STDERR "Current version specified. Reading 'current' file ... \n";
|
||||
|
||||
open(CURRENT,"$releasejardir/current") || die "NO CURRENT FILE\n";
|
||||
$version = <CURRENT>;
|
||||
$version =~ s/(\r?\n)*$//; # remove any trailing [CR/]LF's
|
||||
close(CURRENT);
|
||||
print STDERR "Using version $version\n";
|
||||
if ( $version eq "") {
|
||||
die "Current version file empty. Stopping\n";
|
||||
}
|
||||
}
|
||||
|
||||
$releasejardir = "$releasejardir/$version";
|
||||
if ( ! -d $releasejardir) {
|
||||
die "$releasejardir doesn't exist (Invalid Version?)\n";
|
||||
}
|
||||
foreach $jarfile (split(/ /,$var{FILES})) {
|
||||
|
||||
($relpath,$distpath,$options) = split(/\|/, $var{$jarfile});
|
||||
|
||||
if ($var{'OVERRIDE_IMPORT_CHECK'} eq 'YES') {
|
||||
$options =~ s/v//g;
|
||||
}
|
||||
|
||||
if ( $relpath ne "") { $releasejarpathname = "$releasejardir/$relpath";}
|
||||
else { $releasejarpathname = $releasejardir; }
|
||||
|
||||
# If a component doesn't have IDG versions, import the DBG ones
|
||||
if( ! -e "$releasejarpathname/$jarfile" ) {
|
||||
if( $relpath =~ /IDG\.OBJ$/ ) {
|
||||
$relpath =~ s/IDG.OBJ/DBG.OBJ/;
|
||||
$releasejarpathname = "$releasejardir/$relpath";
|
||||
} elsif( $relpath =~ /IDG\.OBJD$/ ) {
|
||||
$relpath =~ s/IDG.OBJD/DBG.OBJD/;
|
||||
$releasejarpathname = "$releasejardir/$relpath";
|
||||
}
|
||||
}
|
||||
|
||||
if (-e "$releasejarpathname/$jarfile") {
|
||||
print STDERR "\nWorking on jarfile: $jarfile\n";
|
||||
|
||||
if ($distpath =~ m|/$|) {
|
||||
$distpathname = "$distpath$component";
|
||||
}
|
||||
else {
|
||||
$distpathname = "$distpath";
|
||||
}
|
||||
|
||||
|
||||
#the block below is used to determine whether or not the xp headers have
|
||||
#already been imported for this component
|
||||
|
||||
$doimport = 1;
|
||||
if ($options =~ /v/) { # if we should check the imported version
|
||||
print STDERR "Checking if version file exists $distpathname/version\n";
|
||||
if (-e "$distpathname/version") {
|
||||
open( VFILE, "<$distpathname/version") ||
|
||||
die "Cannot open $distpathname/version for reading. Permissions?\n";
|
||||
$importversion = <VFILE>;
|
||||
close (VFILE);
|
||||
$importversion =~ s/\r?\n$//; # Strip off any trailing CR/LF
|
||||
if ($version eq $importversion) {
|
||||
print STDERR "$distpathname version '$importversion' already imported. Skipping...\n";
|
||||
$doimport =0;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if ($doimport == 1) {
|
||||
if (! -d "$distpathname") {
|
||||
&rec_mkdir("$distpathname");
|
||||
}
|
||||
# delete the stuff in there already.
|
||||
# (this should really be recursive delete.)
|
||||
|
||||
if ($options =~ /v/) {
|
||||
$remheader = "\nREMOVING files in '$distpathname/' :";
|
||||
opendir(DIR,"$distpathname") ||
|
||||
die ("Cannot read directory $distpathname\n");
|
||||
@filelist = readdir(DIR);
|
||||
closedir(DIR);
|
||||
foreach $file ( @filelist ) {
|
||||
if (! ($file =~ m!/.?.$!) ) {
|
||||
if (! (-d $file)) {
|
||||
$file =~ m!([^/]*)$!;
|
||||
print STDERR "$remheader $1";
|
||||
$remheader = " ";
|
||||
unlink "$distpathname/$file";
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
print STDERR "\n\n";
|
||||
|
||||
print STDERR "\nExtracting jarfile '$jarfile' to local directory $distpathname/\n";
|
||||
|
||||
print STDERR "$var{UNZIP} $releasejarpathname/$jarfile -d $distpathname\n";
|
||||
system("$var{UNZIP} $releasejarpathname/$jarfile -d $distpathname");
|
||||
|
||||
$r = $?;
|
||||
|
||||
if ($options =~ /v/) {
|
||||
if ($r == 0) {
|
||||
unlink ("$distpathname/version");
|
||||
if (open(VFILE,">$distpathname/version")) {
|
||||
print VFILE "$version\n";
|
||||
close(VFILE);
|
||||
}
|
||||
}
|
||||
else {
|
||||
print STDERR "Could not create '$distpathname/version'. Permissions?\n";
|
||||
$returncode ++;
|
||||
}
|
||||
}
|
||||
} # if (doimport)
|
||||
} # if (-e releasejarpathname/jarfile)
|
||||
} # foreach jarfile)
|
||||
} # foreach IMPORT
|
||||
|
||||
|
||||
|
||||
exit($returncode);
|
||||
|
||||
|
||||
|
||||
|
||||
|
|
@ -1,504 +0,0 @@
|
|||
#
|
||||
# This Source Code Form is subject to the terms of the Mozilla Public
|
||||
# License, v. 2.0. If a copy of the MPL was not distributed with this
|
||||
# file, You can obtain one at http://mozilla.org/MPL/2.0/.
|
||||
|
||||
ifdef NS_USE_JDK
|
||||
#######################################################################
|
||||
# [1] Define preliminary JDK "Core Components" toolset options #
|
||||
#######################################################################
|
||||
|
||||
# set default JDK java threading model
|
||||
ifeq ($(JDK_THREADING_MODEL),)
|
||||
JDK_THREADING_MODEL = native_threads
|
||||
# no such thing as -native flag
|
||||
JDK_THREADING_MODEL_OPT =
|
||||
endif
|
||||
|
||||
#######################################################################
|
||||
# [2] Define platform-independent JDK "Core Components" options #
|
||||
#######################################################################
|
||||
|
||||
# set default location of the java classes repository
|
||||
ifeq ($(JAVA_DESTPATH),)
|
||||
ifdef BUILD_OPT
|
||||
JAVA_DESTPATH = $(SOURCE_CLASSES_DIR)
|
||||
else
|
||||
JAVA_DESTPATH = $(SOURCE_CLASSES_DBG_DIR)
|
||||
endif
|
||||
endif
|
||||
|
||||
# set default location of the package under the java classes repository
|
||||
# note that this overrides the default package value in ruleset.mk
|
||||
ifeq ($(PACKAGE),)
|
||||
PACKAGE = .
|
||||
endif
|
||||
|
||||
# set default location of the java source code repository
|
||||
ifeq ($(JAVA_SOURCEPATH),)
|
||||
JAVA_SOURCEPATH = .
|
||||
endif
|
||||
|
||||
# add JNI directory to default include search path
|
||||
ifneq ($(JNI_GEN),)
|
||||
ifdef NSBUILDROOT
|
||||
INCLUDES += -I$(JNI_GEN_DIR) -I$(SOURCE_XP_DIR)
|
||||
else
|
||||
INCLUDES += -I$(JNI_GEN_DIR)
|
||||
endif
|
||||
endif
|
||||
|
||||
#######################################################################
|
||||
# [3] Define platform-dependent JDK "Core Components" options #
|
||||
#######################################################################
|
||||
|
||||
# set [Microsoft Windows] platforms
|
||||
ifeq ($(OS_ARCH), WINNT)
|
||||
JAVA_CLASSES = $(JAVA_HOME)/jre/lib/rt.jar
|
||||
|
||||
ifeq ($(JRE_HOME),)
|
||||
JRE_HOME = $(JAVA_HOME)
|
||||
JRE_CLASSES = $(JAVA_CLASSES)
|
||||
else
|
||||
ifeq ($(JRE_CLASSES),)
|
||||
JRE_CLASSES = $(JRE_HOME)/lib/rt.jar
|
||||
endif
|
||||
endif
|
||||
|
||||
PATH_SEPARATOR = ;
|
||||
|
||||
# (2) specify "header" information
|
||||
JAVA_ARCH = win32
|
||||
|
||||
INCLUDES += -I$(JAVA_HOME)/include
|
||||
INCLUDES += -I$(JAVA_HOME)/include/$(JAVA_ARCH)
|
||||
|
||||
# currently, disable JIT option on this platform
|
||||
JDK_JIT_OPT = -nojit
|
||||
endif
|
||||
|
||||
# set [Sun Solaris] platforms
|
||||
ifeq ($(OS_ARCH), SunOS)
|
||||
JAVA_CLASSES = $(JAVA_HOME)/jre/lib/rt.jar
|
||||
|
||||
ifeq ($(JRE_HOME),)
|
||||
JRE_HOME = $(JAVA_HOME)
|
||||
JRE_CLASSES = $(JAVA_CLASSES)
|
||||
else
|
||||
ifeq ($(JRE_CLASSES),)
|
||||
JRE_CLASSES = $(JRE_HOME)/lib/rt.jar
|
||||
endif
|
||||
endif
|
||||
|
||||
PATH_SEPARATOR = :
|
||||
|
||||
# (2) specify "header" information
|
||||
JAVA_ARCH = solaris
|
||||
|
||||
INCLUDES += -I$(JAVA_HOME)/include
|
||||
INCLUDES += -I$(JAVA_HOME)/include/$(JAVA_ARCH)
|
||||
|
||||
# currently, disable JIT option on this platform
|
||||
JDK_JIT_OPT =
|
||||
endif
|
||||
|
||||
# set [Hewlett Packard HP-UX] platforms
|
||||
ifeq ($(OS_ARCH), HP-UX)
|
||||
JAVA_CLASSES = $(JAVA_HOME)/jre/lib/rt.jar
|
||||
|
||||
ifeq ($(JRE_HOME),)
|
||||
JRE_HOME = $(JAVA_HOME)
|
||||
JRE_CLASSES = $(JAVA_CLASSES)
|
||||
else
|
||||
ifeq ($(JRE_CLASSES),)
|
||||
JRE_CLASSES = $(JRE_HOME)/lib/rt.jar
|
||||
endif
|
||||
endif
|
||||
|
||||
PATH_SEPARATOR = :
|
||||
|
||||
# (2) specify "header" information
|
||||
JAVA_ARCH = hp-ux
|
||||
|
||||
INCLUDES += -I$(JAVA_HOME)/include
|
||||
INCLUDES += -I$(JAVA_HOME)/include/$(JAVA_ARCH)
|
||||
|
||||
# no JIT option available on this platform
|
||||
JDK_JIT_OPT =
|
||||
endif
|
||||
|
||||
# set [Redhat Linux] platforms
|
||||
ifeq ($(OS_ARCH), Linux)
|
||||
JAVA_CLASSES = $(JAVA_HOME)/jre/lib/rt.jar
|
||||
|
||||
ifeq ($(JRE_HOME),)
|
||||
JRE_HOME = $(JAVA_HOME)
|
||||
JRE_CLASSES = $(JAVA_CLASSES)
|
||||
else
|
||||
ifeq ($(JRE_CLASSES),)
|
||||
JRE_CLASSES = $(JRE_HOME)/lib/rt.jar
|
||||
endif
|
||||
endif
|
||||
|
||||
PATH_SEPARATOR = :
|
||||
|
||||
# (2) specify "header" information
|
||||
JAVA_ARCH = linux
|
||||
|
||||
INCLUDES += -I$(JAVA_HOME)/include
|
||||
INCLUDES += -I$(JAVA_HOME)/include/$(JAVA_ARCH)
|
||||
|
||||
# no JIT option available on this platform
|
||||
JDK_JIT_OPT =
|
||||
endif
|
||||
|
||||
# set [Mac OS X] platforms
|
||||
ifeq ($(OS_ARCH), Darwin)
|
||||
JAVA_CLASSES = $(JAVA_HOME)/../Classes/classes.jar
|
||||
|
||||
ifeq ($(JRE_HOME),)
|
||||
JRE_HOME = $(JAVA_HOME)
|
||||
JRE_CLASSES = $(JAVA_CLASSES)
|
||||
else
|
||||
ifeq ($(JRE_CLASSES),)
|
||||
JRE_CLASSES = $(JRE_HOME)/../Classes/classes.jar
|
||||
endif
|
||||
endif
|
||||
|
||||
PATH_SEPARATOR = :
|
||||
|
||||
# (2) specify "header" information
|
||||
JAVA_ARCH = darwin
|
||||
|
||||
INCLUDES += -I$(JAVA_HOME)/include
|
||||
INCLUDES += -I$(JAVA_HOME)/include/$(JAVA_ARCH)
|
||||
|
||||
# no JIT option available on this platform
|
||||
JDK_JIT_OPT =
|
||||
endif
|
||||
|
||||
# set [IBM AIX] platforms
|
||||
ifeq ($(OS_ARCH), AIX)
|
||||
JAVA_CLASSES = $(JAVA_HOME)/jre/lib/rt.jar
|
||||
|
||||
ifeq ($(JRE_HOME),)
|
||||
JRE_HOME = $(JAVA_HOME)
|
||||
JRE_CLASSES = $(JAVA_CLASSES)
|
||||
else
|
||||
ifeq ($(JRE_CLASSES),)
|
||||
JRE_CLASSES = $(JRE_HOME)/lib/rt.jar
|
||||
endif
|
||||
endif
|
||||
|
||||
PATH_SEPARATOR = :
|
||||
|
||||
# (2) specify "header" information
|
||||
JAVA_ARCH = aix
|
||||
|
||||
INCLUDES += -I$(JAVA_HOME)/include
|
||||
INCLUDES += -I$(JAVA_HOME)/include/$(JAVA_ARCH)
|
||||
|
||||
# no JIT option available on this platform
|
||||
JDK_JIT_OPT =
|
||||
endif
|
||||
|
||||
# set [Digital UNIX] platforms
|
||||
ifeq ($(OS_ARCH), OSF1)
|
||||
JAVA_CLASSES = $(JAVA_HOME)/jre/lib/rt.jar
|
||||
|
||||
ifeq ($(JRE_HOME),)
|
||||
JRE_HOME = $(JAVA_HOME)
|
||||
JRE_CLASSES = $(JAVA_CLASSES)
|
||||
else
|
||||
ifeq ($(JRE_CLASSES),)
|
||||
JRE_CLASSES = $(JRE_HOME)/lib/rt.jar
|
||||
endif
|
||||
endif
|
||||
|
||||
PATH_SEPARATOR = :
|
||||
|
||||
# (2) specify "header" information
|
||||
JAVA_ARCH = alpha
|
||||
|
||||
INCLUDES += -I$(JAVA_HOME)/include
|
||||
INCLUDES += -I$(JAVA_HOME)/include/$(JAVA_ARCH)
|
||||
|
||||
# no JIT option available on this platform
|
||||
JDK_JIT_OPT =
|
||||
endif
|
||||
|
||||
# set [Silicon Graphics IRIX] platforms
|
||||
ifeq ($(OS_ARCH), IRIX)
|
||||
JAVA_CLASSES = $(JAVA_HOME)/lib/dev.jar:$(JAVA_HOME)/lib/rt.jar
|
||||
|
||||
ifeq ($(JRE_HOME),)
|
||||
JRE_HOME = $(JAVA_HOME)
|
||||
JRE_CLASSES = $(JAVA_CLASSES)
|
||||
else
|
||||
ifeq ($(JRE_CLASSES),)
|
||||
JRE_CLASSES = $(JRE_HOME)/lib/dev.jar:$(JRE_HOME)/lib/rt.jar
|
||||
endif
|
||||
endif
|
||||
|
||||
PATH_SEPARATOR = :
|
||||
|
||||
# (2) specify "header" information
|
||||
JAVA_ARCH = irix
|
||||
|
||||
INCLUDES += -I$(JAVA_HOME)/include
|
||||
INCLUDES += -I$(JAVA_HOME)/include/$(JAVA_ARCH)
|
||||
|
||||
# no JIT option available on this platform
|
||||
JDK_JIT_OPT =
|
||||
endif
|
||||
|
||||
#######################################################################
|
||||
# [4] Define remaining JDK "Core Components" default toolset options #
|
||||
#######################################################################
|
||||
|
||||
# set JDK optimization model
|
||||
ifeq ($(BUILD_OPT),1)
|
||||
JDK_OPTIMIZER_OPT = -O
|
||||
else
|
||||
JDK_OPTIMIZER_OPT = -g
|
||||
endif
|
||||
|
||||
# set minimal JDK debugging model
|
||||
ifeq ($(JDK_DEBUG),1)
|
||||
JDK_DEBUG_OPT = -debug
|
||||
else
|
||||
JDK_DEBUG_OPT =
|
||||
endif
|
||||
|
||||
# set default path to repository for JDK classes
|
||||
ifeq ($(JDK_CLASS_REPOSITORY_OPT),)
|
||||
JDK_CLASS_REPOSITORY_OPT = -d $(JAVA_DESTPATH)
|
||||
endif
|
||||
|
||||
# define a default JDK classpath
|
||||
ifeq ($(JDK_CLASSPATH),)
|
||||
JDK_CLASSPATH = '$(JAVA_DESTPATH)$(PATH_SEPARATOR)$(JAVA_SOURCEPATH)$(PATH_SEPARATOR)$(JAVA_CLASSES)'
|
||||
endif
|
||||
|
||||
# by default, override CLASSPATH environment variable using the JDK classpath option with $(JDK_CLASSPATH)
|
||||
ifeq ($(JDK_CLASSPATH_OPT),)
|
||||
JDK_CLASSPATH_OPT = -classpath $(JDK_CLASSPATH)
|
||||
endif
|
||||
|
||||
ifeq ($(USE_64), 1)
|
||||
JDK_USE_64 = -d64
|
||||
endif
|
||||
|
||||
endif
|
||||
|
||||
|
||||
#######################################################################
|
||||
# [5] Define JDK "Core Components" toolset; #
|
||||
# (always allow a user to override these values) #
|
||||
#######################################################################
|
||||
|
||||
#
|
||||
# (1) appletviewer
|
||||
#
|
||||
|
||||
ifeq ($(APPLETVIEWER),)
|
||||
APPLETVIEWER_PROG = $(JAVA_HOME)/bin/appletviewer$(PROG_SUFFIX)
|
||||
APPLETVIEWER_FLAGS = $(JDK_THREADING_MODEL_OPT)
|
||||
APPLETVIEWER_FLAGS += $(JDK_DEBUG_OPT)
|
||||
APPLETVIEWER_FLAGS += $(JDK_JIT_OPT)
|
||||
APPLETVIEWER = $(APPLETVIEWER_PROG) $(APPLETVIEWER_FLAGS)
|
||||
endif
|
||||
|
||||
#
|
||||
# (2) jar
|
||||
#
|
||||
|
||||
ifeq ($(JAR),)
|
||||
JAR_PROG = $(JAVA_HOME)/bin/jar$(PROG_SUFFIX)
|
||||
JAR_FLAGS = $(JDK_THREADING_MODEL_OPT)
|
||||
JAR = $(JAR_PROG) $(JAR_FLAGS)
|
||||
endif
|
||||
|
||||
#
|
||||
# (3) java
|
||||
#
|
||||
|
||||
ifeq ($(JAVA),)
|
||||
JAVA_PROG = $(JAVA_HOME)/bin/java$(PROG_SUFFIX)
|
||||
JAVA_FLAGS = $(JDK_THREADING_MODEL_OPT)
|
||||
JAVA_FLAGS += $(JDK_DEBUG_OPT)
|
||||
JAVA_FLAGS += $(JDK_CLASSPATH_OPT)
|
||||
JAVA_FLAGS += $(JDK_JIT_OPT)
|
||||
JAVA_FLAGS += $(JDK_USE_64)
|
||||
JAVA = $(JAVA_PROG) $(JAVA_FLAGS)
|
||||
endif
|
||||
|
||||
#
|
||||
# (4) javac
|
||||
#
|
||||
|
||||
ifeq ($(JAVAC),)
|
||||
JAVAC_PROG = $(JAVA_HOME)/bin/javac$(PROG_SUFFIX)
|
||||
JAVAC_FLAGS = $(JDK_THREADING_MODEL_OPT)
|
||||
JAVAC_FLAGS += $(JDK_OPTIMIZER_OPT)
|
||||
JAVAC_FLAGS += $(JDK_DEBUG_OPT)
|
||||
JAVAC_FLAGS += $(JDK_CLASSPATH_OPT)
|
||||
JAVAC_FLAGS += $(JDK_CLASS_REPOSITORY_OPT)
|
||||
JAVAC_FLAGS += $(JDK_USE_64)
|
||||
JAVAC = $(JAVAC_PROG) $(JAVAC_FLAGS)
|
||||
endif
|
||||
|
||||
#
|
||||
# (5) javadoc
|
||||
#
|
||||
|
||||
ifeq ($(JAVADOC),)
|
||||
JAVADOC_PROG = $(JAVA_HOME)/bin/javadoc$(PROG_SUFFIX)
|
||||
JAVADOC_FLAGS = $(JDK_THREADING_MODEL_OPT)
|
||||
JAVADOC_FLAGS += $(JDK_CLASSPATH_OPT)
|
||||
JAVADOC = $(JAVADOC_PROG) $(JAVADOC_FLAGS)
|
||||
endif
|
||||
|
||||
#
|
||||
# (6) javah
|
||||
#
|
||||
|
||||
ifeq ($(JAVAH),)
|
||||
JAVAH_PROG = $(JAVA_HOME)/bin/javah$(PROG_SUFFIX)
|
||||
JAVAH_FLAGS = $(JDK_THREADING_MODEL_OPT)
|
||||
JAVAH_FLAGS += $(JDK_CLASSPATH_OPT)
|
||||
JAVAH = $(JAVAH_PROG) $(JAVAH_FLAGS)
|
||||
endif
|
||||
|
||||
#
|
||||
# (7) javakey
|
||||
#
|
||||
|
||||
ifeq ($(JAVAKEY),)
|
||||
JAVAKEY_PROG = $(JAVA_HOME)/bin/javakey$(PROG_SUFFIX)
|
||||
JAVAKEY_FLAGS = $(JDK_THREADING_MODEL_OPT)
|
||||
JAVAKEY = $(JAVAKEY_PROG) $(JAVAKEY_FLAGS)
|
||||
endif
|
||||
|
||||
#
|
||||
# (8) javap
|
||||
#
|
||||
|
||||
ifeq ($(JAVAP),)
|
||||
JAVAP_PROG = $(JAVA_HOME)/bin/javap$(PROG_SUFFIX)
|
||||
JAVAP_FLAGS = $(JDK_THREADING_MODEL_OPT)
|
||||
JAVAP_FLAGS += $(JDK_CLASSPATH_OPT)
|
||||
JAVAP = $(JAVAP_PROG) $(JAVAP_FLAGS)
|
||||
endif
|
||||
|
||||
#
|
||||
# (9) javat
|
||||
#
|
||||
|
||||
ifeq ($(JAVAT),)
|
||||
JAVAT_PROG = $(JAVA_HOME)/bin/javat$(PROG_SUFFIX)
|
||||
JAVAT_FLAGS = $(JDK_THREADING_MODEL_OPT)
|
||||
JAVAT = $(JAVAT_PROG) $(JAVAT_FLAGS)
|
||||
endif
|
||||
|
||||
#
|
||||
# (10) javaverify
|
||||
#
|
||||
|
||||
ifeq ($(JAVAVERIFY),)
|
||||
JAVAVERIFY_PROG = $(JAVA_HOME)/bin/javaverify$(PROG_SUFFIX)
|
||||
JAVAVERIFY_FLAGS = $(JDK_THREADING_MODEL_OPT)
|
||||
JAVAVERIFY = $(JAVAVERIFY_PROG) $(JAVAVERIFY_FLAGS)
|
||||
endif
|
||||
|
||||
#
|
||||
# (11) javaw
|
||||
#
|
||||
|
||||
ifeq ($(JAVAW),)
|
||||
jJAVAW_PROG = $(JAVA_HOME)/bin/javaw$(PROG_SUFFIX)
|
||||
jJAVAW_FLAGS = $(JDK_THREADING_MODEL_OPT)
|
||||
jJAVAW_FLAGS += $(JDK_DEBUG_OPT)
|
||||
jJAVAW_FLAGS += $(JDK_CLASSPATH_OPT)
|
||||
jJAVAW_FLAGS += $(JDK_JIT_OPT)
|
||||
jJAVAW = $(JAVAW_PROG) $(JAVAW_FLAGS)
|
||||
endif
|
||||
|
||||
#
|
||||
# (12) jdb
|
||||
#
|
||||
|
||||
ifeq ($(JDB),)
|
||||
JDB_PROG = $(JAVA_HOME)/bin/jdb$(PROG_SUFFIX)
|
||||
JDB_FLAGS = $(JDK_THREADING_MODEL_OPT)
|
||||
JDB_FLAGS += $(JDK_DEBUG_OPT)
|
||||
JDB_FLAGS += $(JDK_CLASSPATH_OPT)
|
||||
JDB_FLAGS += $(JDK_JIT_OPT)
|
||||
JDB = $(JDB_PROG) $(JDB_FLAGS)
|
||||
endif
|
||||
|
||||
#
|
||||
# (13) jre
|
||||
#
|
||||
|
||||
ifeq ($(JRE),)
|
||||
JRE_PROG = $(JAVA_HOME)/bin/jre$(PROG_SUFFIX)
|
||||
JRE_FLAGS = $(JDK_THREADING_MODEL_OPT)
|
||||
JRE_FLAGS += $(JDK_CLASSPATH_OPT)
|
||||
JRE_FLAGS += $(JDK_JIT_OPT)
|
||||
JRE = $(JRE_PROG) $(JRE_FLAGS)
|
||||
endif
|
||||
|
||||
#
|
||||
# (14) jrew
|
||||
#
|
||||
|
||||
ifeq ($(JREW),)
|
||||
JREW_PROG = $(JAVA_HOME)/bin/jrew$(PROG_SUFFIX)
|
||||
JREW_FLAGS = $(JDK_THREADING_MODEL_OPT)
|
||||
JREW_FLAGS += $(JDK_CLASSPATH_OPT)
|
||||
JREW_FLAGS += $(JDK_JIT_OPT)
|
||||
JREW = $(JREW_PROG) $(JREW_FLAGS)
|
||||
endif
|
||||
|
||||
#
|
||||
# (15) native2ascii
|
||||
#
|
||||
|
||||
ifeq ($(NATIVE2ASCII),)
|
||||
NATIVE2ASCII_PROG = $(JAVA_HOME)/bin/native2ascii$(PROG_SUFFIX)
|
||||
NATIVE2ASCII_FLAGS = $(JDK_THREADING_MODEL_OPT)
|
||||
NATIVE2ASCII = $(NATIVE2ASCII_PROG) $(NATIVE2ASCII_FLAGS)
|
||||
endif
|
||||
|
||||
#
|
||||
# (16) rmic
|
||||
#
|
||||
|
||||
ifeq ($(RMIC),)
|
||||
RMIC_PROG = $(JAVA_HOME)/bin/rmic$(PROG_SUFFIX)
|
||||
RMIC_FLAGS = $(JDK_THREADING_MODEL_OPT)
|
||||
RMIC_FLAGS += $(JDK_OPTIMIZER_OPT)
|
||||
RMIC_FLAGS += $(JDK_CLASSPATH_OPT)
|
||||
RMIC = $(RMIC_PROG) $(RMIC_FLAGS)
|
||||
endif
|
||||
|
||||
#
|
||||
# (17) rmiregistry
|
||||
#
|
||||
|
||||
ifeq ($(RMIREGISTRY),)
|
||||
RMIREGISTRY_PROG = $(JAVA_HOME)/bin/rmiregistry$(PROG_SUFFIX)
|
||||
RMIREGISTRY_FLAGS = $(JDK_THREADING_MODEL_OPT)
|
||||
RMIREGISTRY = $(RMIREGISTRY_PROG) $(RMIREGISTRY_FLAGS)
|
||||
endif
|
||||
|
||||
#
|
||||
# (18) serialver
|
||||
#
|
||||
|
||||
ifeq ($(SERIALVER),)
|
||||
SERIALVER_PROG = $(JAVA_HOME)/bin/serialver$(PROG_SUFFIX)
|
||||
SERIALVER_FLAGS = $(JDK_THREADING_MODEL_OPT)
|
||||
SERIALVER = $(SERIALVER_PROG) $(SERIALVER_FLAGS)
|
||||
endif
|
|
@ -1,79 +0,0 @@
|
|||
#!/usr/local/bin/perl
|
||||
#
|
||||
# This Source Code Form is subject to the terms of the Mozilla Public
|
||||
# License, v. 2.0. If a copy of the MPL was not distributed with this
|
||||
# file, You can obtain one at http://mozilla.org/MPL/2.0/.
|
||||
|
||||
# Input: -d dir -j javahcmd foo1 foo2 . . .
|
||||
# Compares generated "_jni/foo1.h" file with "foo1.class", and
|
||||
# generated "_jni/foo2.h" file with "foo2.class", etc.
|
||||
# (NOTE: unlike its closely related cousin, outofdate.pl,
|
||||
# the "-d dir" must always be specified)
|
||||
# Runs the javahcmd on all files that are different.
|
||||
#
|
||||
# Returns: list of headers which are OLDER than corresponding class
|
||||
# files (non-existent class files are considered to be real old :-)
|
||||
|
||||
my $javah = "";
|
||||
my $classdir = "";
|
||||
|
||||
while(1) {
|
||||
if ($ARGV[0] eq '-d') {
|
||||
$classdir = $ARGV[1];
|
||||
$classdir .= "/";
|
||||
shift;
|
||||
shift;
|
||||
} elsif($ARGV[0] eq '-j') {
|
||||
$javah = $ARGV[1];
|
||||
shift;
|
||||
shift;
|
||||
} else {
|
||||
last;
|
||||
}
|
||||
}
|
||||
|
||||
if( $javah eq "") {
|
||||
die "Must specify -j <javah command>";
|
||||
}
|
||||
if( $classdir eq "") {
|
||||
die "Must specify -d <classdir>";
|
||||
}
|
||||
|
||||
foreach $filename (@ARGV)
|
||||
{
|
||||
$headerfilename = "_jni/";
|
||||
$headerfilename .= $filename;
|
||||
$headerfilename =~ s/\./_/g;
|
||||
$headerfilename .= ".h";
|
||||
|
||||
$classfilename = $filename;
|
||||
$classfilename =~ s|\.|/|g;
|
||||
$classfilename .= ".class";
|
||||
|
||||
$classfilename = $classdir . $classfilename;
|
||||
|
||||
|
||||
( $dev, $ino, $mode, $nlink, $uid, $gid, $rdev, $size, $atime, $headermtime,
|
||||
$ctime, $blksize, $blocks ) = stat( $headerfilename );
|
||||
|
||||
( $dev, $ino, $mode, $nlink, $uid, $gid, $rdev, $size, $atime, $classmtime,
|
||||
$ctime, $blksize, $blocks ) = stat( $classfilename );
|
||||
|
||||
if( $headermtime < $classmtime )
|
||||
{
|
||||
# NOTE: Since this is used by "javah", and "javah" refuses to overwrite
|
||||
# an existing file, we force an unlink from this script, since
|
||||
# we actually want to regenerate the header file at this time.
|
||||
unlink $headerfilename;
|
||||
push @filelist, $filename;
|
||||
}
|
||||
}
|
||||
|
||||
if( @filelist ) {
|
||||
$cmd = "$javah " . join(" ",@filelist);
|
||||
$cmd =~ s/\'/\"/g; # because windows doesn't understand single quote
|
||||
print "$cmd\n";
|
||||
exit (system($cmd) >> 8);
|
||||
} else {
|
||||
print "All JNI header files up to date.\n"
|
||||
}
|
|
@ -1,60 +0,0 @@
|
|||
# This Source Code Form is subject to the terms of the Mozilla Public
|
||||
# License, v. 2.0. If a copy of the MPL was not distributed with this
|
||||
# file, You can obtain one at http://mozilla.org/MPL/2.0/.
|
||||
|
||||
DEPTH = ../..
|
||||
CORE_DEPTH = ../..
|
||||
|
||||
MODULE = coreconf
|
||||
|
||||
CSRCS = \
|
||||
cppsetup.c \
|
||||
ifparser.c \
|
||||
include.c \
|
||||
main.c \
|
||||
parse.c \
|
||||
pr.c
|
||||
|
||||
PROGRAM = mkdepend
|
||||
|
||||
# Indicate that this directory builds build tools.
|
||||
INTERNAL_TOOLS = 1
|
||||
|
||||
|
||||
include $(DEPTH)/coreconf/config.mk
|
||||
|
||||
TARGETS = $(PROGRAM)
|
||||
ifeq (,$(filter-out OS2 WIN%,$(OS_TARGET)))
|
||||
DEFINES += -DNO_X11
|
||||
else
|
||||
INSTALL = true
|
||||
endif
|
||||
|
||||
ifdef NATIVE_CC
|
||||
CC=$(NATIVE_CC)
|
||||
endif
|
||||
|
||||
ifdef NATIVE_FLAGS
|
||||
OS_CFLAGS=$(NATIVE_FLAGS)
|
||||
endif
|
||||
|
||||
include $(DEPTH)/coreconf/rules.mk
|
||||
|
||||
ifdef GNU_CC
|
||||
OPTIMIZER = -O3
|
||||
else
|
||||
ifeq ($(OS_ARCH),SunOS)
|
||||
OPTIMIZER = -fast
|
||||
endif
|
||||
ifeq ($(OS_ARCH),WINNT)
|
||||
OPTIMIZER = -Ox
|
||||
endif
|
||||
endif
|
||||
|
||||
DEFINES += -DINCLUDEDIR=\"/usr/include\" -DOBJSUFFIX=\".$(OBJ_SUFFIX)\"
|
||||
|
||||
# Redefine MAKE_OBJDIR for just this directory
|
||||
define MAKE_OBJDIR
|
||||
if test ! -d $(@D); then rm -rf $(@D); mkdir $(@D); fi
|
||||
endef
|
||||
|
|
@ -1,233 +0,0 @@
|
|||
/* $Xorg: cppsetup.c,v 1.5 2001/02/09 02:03:16 xorgcvs Exp $ */
|
||||
/*
|
||||
|
||||
Copyright (c) 1993, 1994, 1998 The Open Group
|
||||
|
||||
Permission to use, copy, modify, distribute, and sell this software and its
|
||||
documentation for any purpose is hereby granted without fee, provided that
|
||||
the above copyright notice appear in all copies and that both that
|
||||
copyright notice and this permission notice appear in supporting
|
||||
documentation.
|
||||
|
||||
The above copyright notice and this permission notice shall be included in
|
||||
all copies or substantial portions of the Software.
|
||||
|
||||
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
||||
OPEN GROUP BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN
|
||||
AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
|
||||
CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
||||
|
||||
Except as contained in this notice, the name of The Open Group shall not be
|
||||
used in advertising or otherwise to promote the sale, use or other dealings
|
||||
in this Software without prior written authorization from The Open Group.
|
||||
|
||||
*/
|
||||
/* $XFree86: xc/config/makedepend/cppsetup.c,v 3.11 2001/12/17 20:52:22 dawes Exp $ */
|
||||
|
||||
#include "def.h"
|
||||
|
||||
#ifdef CPP
|
||||
/*
|
||||
* This file is strictly for the sake of cpy.y and yylex.c (if
|
||||
* you indeed have the source for cpp).
|
||||
*/
|
||||
#define IB 1
|
||||
#define SB 2
|
||||
#define NB 4
|
||||
#define CB 8
|
||||
#define QB 16
|
||||
#define WB 32
|
||||
#define SALT '#'
|
||||
#if defined(pdp11) || defined(vax) || defined(ns16000) || defined(mc68000) || defined(ibm032)
|
||||
#define COFF 128
|
||||
#else
|
||||
#define COFF 0
|
||||
#endif
|
||||
/*
|
||||
* These variables used by cpy.y and yylex.c
|
||||
*/
|
||||
extern char *outp, *inp, *newp, *pend;
|
||||
extern char *ptrtab;
|
||||
extern char fastab[];
|
||||
extern char slotab[];
|
||||
|
||||
/*
|
||||
* cppsetup
|
||||
*/
|
||||
struct filepointer *currentfile;
|
||||
struct inclist *currentinc;
|
||||
|
||||
int
|
||||
cppsetup(char *line, struct filepointer *filep, struct inclist *inc)
|
||||
{
|
||||
char *p, savec;
|
||||
static boolean setupdone = FALSE;
|
||||
boolean value;
|
||||
|
||||
if (!setupdone) {
|
||||
cpp_varsetup();
|
||||
setupdone = TRUE;
|
||||
}
|
||||
|
||||
currentfile = filep;
|
||||
currentinc = inc;
|
||||
inp = newp = line;
|
||||
for (p=newp; *p; p++)
|
||||
;
|
||||
|
||||
/*
|
||||
* put a newline back on the end, and set up pend, etc.
|
||||
*/
|
||||
*p++ = '\n';
|
||||
savec = *p;
|
||||
*p = '\0';
|
||||
pend = p;
|
||||
|
||||
ptrtab = slotab+COFF;
|
||||
*--inp = SALT;
|
||||
outp=inp;
|
||||
value = yyparse();
|
||||
*p = savec;
|
||||
return(value);
|
||||
}
|
||||
|
||||
struct symtab **lookup(symbol)
|
||||
char *symbol;
|
||||
{
|
||||
static struct symtab *undefined;
|
||||
struct symtab **sp;
|
||||
|
||||
sp = isdefined(symbol, currentinc, NULL);
|
||||
if (sp == NULL) {
|
||||
sp = &undefined;
|
||||
(*sp)->s_value = NULL;
|
||||
}
|
||||
return (sp);
|
||||
}
|
||||
|
||||
pperror(tag, x0,x1,x2,x3,x4)
|
||||
int tag,x0,x1,x2,x3,x4;
|
||||
{
|
||||
warning("\"%s\", line %d: ", currentinc->i_file, currentfile->f_line);
|
||||
warning(x0,x1,x2,x3,x4);
|
||||
}
|
||||
|
||||
|
||||
yyerror(s)
|
||||
register char *s;
|
||||
{
|
||||
fatalerr("Fatal error: %s\n", s);
|
||||
}
|
||||
#else /* not CPP */
|
||||
|
||||
#include "ifparser.h"
|
||||
struct _parse_data {
|
||||
struct filepointer *filep;
|
||||
struct inclist *inc;
|
||||
char *filename;
|
||||
const char *line;
|
||||
};
|
||||
|
||||
static const char *
|
||||
my_if_errors (IfParser *ip, const char *cp, const char *expecting)
|
||||
{
|
||||
struct _parse_data *pd = (struct _parse_data *) ip->data;
|
||||
int lineno = pd->filep->f_line;
|
||||
char *filename = pd->filename;
|
||||
char prefix[300];
|
||||
int prefixlen;
|
||||
int i;
|
||||
|
||||
sprintf (prefix, "\"%s\":%d", filename, lineno);
|
||||
prefixlen = strlen(prefix);
|
||||
fprintf (stderr, "%s: %s", prefix, pd->line);
|
||||
i = cp - pd->line;
|
||||
if (i > 0 && pd->line[i-1] != '\n') {
|
||||
putc ('\n', stderr);
|
||||
}
|
||||
for (i += prefixlen + 3; i > 0; i--) {
|
||||
putc (' ', stderr);
|
||||
}
|
||||
fprintf (stderr, "^--- expecting %s\n", expecting);
|
||||
return NULL;
|
||||
}
|
||||
|
||||
|
||||
#define MAXNAMELEN 256
|
||||
|
||||
static struct symtab **
|
||||
lookup_variable (IfParser *ip, const char *var, int len)
|
||||
{
|
||||
char tmpbuf[MAXNAMELEN + 1];
|
||||
struct _parse_data *pd = (struct _parse_data *) ip->data;
|
||||
|
||||
if (len > MAXNAMELEN)
|
||||
return 0;
|
||||
|
||||
strncpy (tmpbuf, var, len);
|
||||
tmpbuf[len] = '\0';
|
||||
return isdefined (tmpbuf, pd->inc, NULL);
|
||||
}
|
||||
|
||||
|
||||
static int
|
||||
my_eval_defined (IfParser *ip, const char *var, int len)
|
||||
{
|
||||
if (lookup_variable (ip, var, len))
|
||||
return 1;
|
||||
else
|
||||
return 0;
|
||||
}
|
||||
|
||||
#define isvarfirstletter(ccc) (isalpha(ccc) || (ccc) == '_')
|
||||
|
||||
static long
|
||||
my_eval_variable (IfParser *ip, const char *var, int len)
|
||||
{
|
||||
long val;
|
||||
struct symtab **s;
|
||||
|
||||
s = lookup_variable (ip, var, len);
|
||||
if (!s)
|
||||
return 0;
|
||||
do {
|
||||
var = (*s)->s_value;
|
||||
if (!isvarfirstletter(*var) || !strcmp((*s)->s_name, var))
|
||||
break;
|
||||
s = lookup_variable (ip, var, strlen(var));
|
||||
} while (s);
|
||||
|
||||
var = ParseIfExpression(ip, var, &val);
|
||||
if (var && *var) debug(4, ("extraneous: '%s'\n", var));
|
||||
return val;
|
||||
}
|
||||
|
||||
int
|
||||
cppsetup(char *filename,
|
||||
char *line,
|
||||
struct filepointer *filep,
|
||||
struct inclist *inc)
|
||||
{
|
||||
IfParser ip;
|
||||
struct _parse_data pd;
|
||||
long val = 0;
|
||||
|
||||
pd.filep = filep;
|
||||
pd.inc = inc;
|
||||
pd.line = line;
|
||||
pd.filename = filename;
|
||||
ip.funcs.handle_error = my_if_errors;
|
||||
ip.funcs.eval_defined = my_eval_defined;
|
||||
ip.funcs.eval_variable = my_eval_variable;
|
||||
ip.data = (char *) &pd;
|
||||
|
||||
(void) ParseIfExpression (&ip, line, &val);
|
||||
if (val)
|
||||
return IF;
|
||||
else
|
||||
return IFFALSE;
|
||||
}
|
||||
#endif /* CPP */
|
||||
|
|
@ -1,184 +0,0 @@
|
|||
/* $Xorg: def.h,v 1.4 2001/02/09 02:03:16 xorgcvs Exp $ */
|
||||
/*
|
||||
|
||||
Copyright (c) 1993, 1994, 1998 The Open Group.
|
||||
|
||||
Permission to use, copy, modify, distribute, and sell this software and its
|
||||
documentation for any purpose is hereby granted without fee, provided that
|
||||
the above copyright notice appear in all copies and that both that
|
||||
copyright notice and this permission notice appear in supporting
|
||||
documentation.
|
||||
|
||||
The above copyright notice and this permission notice shall be included in
|
||||
all copies or substantial portions of the Software.
|
||||
|
||||
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
||||
OPEN GROUP BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN
|
||||
AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
|
||||
CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
||||
|
||||
Except as contained in this notice, the name of The Open Group shall not be
|
||||
used in advertising or otherwise to promote the sale, use or other dealings
|
||||
in this Software without prior written authorization from The Open Group.
|
||||
|
||||
*/
|
||||
/* $XFree86: xc/config/makedepend/def.h,v 3.14 2003/01/17 17:09:49 tsi Exp $ */
|
||||
|
||||
#ifndef NO_X11
|
||||
#include <X11/Xos.h>
|
||||
#include <X11/Xfuncproto.h>
|
||||
#endif
|
||||
#include <stdlib.h>
|
||||
#include <stdio.h>
|
||||
#include <string.h>
|
||||
#include <ctype.h>
|
||||
#if 0
|
||||
#ifndef X_NOT_POSIX
|
||||
#ifndef _POSIX_SOURCE
|
||||
#define _POSIX_SOURCE
|
||||
#endif
|
||||
#endif
|
||||
#endif
|
||||
#include <sys/types.h>
|
||||
#include <fcntl.h>
|
||||
#include <sys/stat.h>
|
||||
|
||||
#define MAXDEFINES 512
|
||||
#define MAXFILES 1024
|
||||
#define MAXINCFILES 256 /* "-include" files */
|
||||
#define MAXDIRS 1024
|
||||
#define SYMTABINC 10 /* must be > 1 for define() to work right */
|
||||
#define TRUE 1
|
||||
#define FALSE 0
|
||||
|
||||
/* the following must match the directives table in main.c */
|
||||
#define IF 0
|
||||
#define IFDEF 1
|
||||
#define IFNDEF 2
|
||||
#define ELSE 3
|
||||
#define ENDIF 4
|
||||
#define DEFINE 5
|
||||
#define UNDEF 6
|
||||
#define INCLUDE 7
|
||||
#define LINE 8
|
||||
#define PRAGMA 9
|
||||
#define ERROR 10
|
||||
#define IDENT 11
|
||||
#define SCCS 12
|
||||
#define ELIF 13
|
||||
#define EJECT 14
|
||||
#define WARNING 15
|
||||
#define INCLUDENEXT 16
|
||||
#define IFFALSE 17 /* pseudo value --- never matched */
|
||||
#define ELIFFALSE 18 /* pseudo value --- never matched */
|
||||
#define INCLUDEDOT 19 /* pseudo value --- never matched */
|
||||
#define IFGUESSFALSE 20 /* pseudo value --- never matched */
|
||||
#define ELIFGUESSFALSE 21 /* pseudo value --- never matched */
|
||||
#define INCLUDENEXTDOT 22 /* pseudo value --- never matched */
|
||||
|
||||
#ifdef DEBUG
|
||||
extern int _debugmask;
|
||||
/*
|
||||
* debug levels are:
|
||||
*
|
||||
* 0 show ifn*(def)*,endif
|
||||
* 1 trace defined/!defined
|
||||
* 2 show #include
|
||||
* 3 show #include SYMBOL
|
||||
* 4-6 unused
|
||||
*/
|
||||
#define debug(level,arg) { if (_debugmask & (1 << level)) warning arg; }
|
||||
#else
|
||||
#define debug(level,arg) /**/
|
||||
#endif /* DEBUG */
|
||||
|
||||
typedef unsigned char boolean;
|
||||
|
||||
struct symtab {
|
||||
char *s_name;
|
||||
char *s_value;
|
||||
};
|
||||
|
||||
/* possible i_flag */
|
||||
#define DEFCHECKED (1<<0) /* whether defines have been checked */
|
||||
#define NOTIFIED (1<<1) /* whether we have revealed includes */
|
||||
#define MARKED (1<<2) /* whether it's in the makefile */
|
||||
#define SEARCHED (1<<3) /* whether we have read this */
|
||||
#define FINISHED (1<<4) /* whether we are done reading this */
|
||||
#define INCLUDED_SYM (1<<5) /* whether #include SYMBOL was found
|
||||
Can't use i_list if TRUE */
|
||||
struct inclist {
|
||||
char *i_incstring; /* string from #include line */
|
||||
char *i_file; /* path name of the include file */
|
||||
struct inclist **i_list; /* list of files it itself includes */
|
||||
int i_listlen; /* length of i_list */
|
||||
struct symtab **i_defs; /* symbol table for this file and its
|
||||
children when merged */
|
||||
int i_ndefs; /* current # defines */
|
||||
boolean *i_merged; /* whether we have merged child
|
||||
defines */
|
||||
unsigned char i_flags;
|
||||
};
|
||||
|
||||
struct filepointer {
|
||||
char *f_name;
|
||||
char *f_p;
|
||||
char *f_base;
|
||||
char *f_end;
|
||||
long f_len;
|
||||
long f_line;
|
||||
long cmdinc_count;
|
||||
char **cmdinc_list;
|
||||
long cmdinc_line;
|
||||
};
|
||||
|
||||
#include <stdlib.h>
|
||||
#if defined(macII) && !defined(__STDC__) /* stdlib.h fails to define these */
|
||||
char *malloc(), *realloc();
|
||||
#endif /* macII */
|
||||
|
||||
char *copy(char *str);
|
||||
int match(char *str, char **list);
|
||||
char *base_name(char *file);
|
||||
char *getnextline(struct filepointer *fp);
|
||||
struct symtab **slookup(char *symbol, struct inclist *file);
|
||||
struct symtab **isdefined(char *symbol, struct inclist *file,
|
||||
struct inclist **srcfile);
|
||||
struct symtab **fdefined(char *symbol, struct inclist *file,
|
||||
struct inclist **srcfile);
|
||||
struct filepointer *getfile(char *file);
|
||||
void included_by(struct inclist *ip,
|
||||
struct inclist *newfile);
|
||||
struct inclist *newinclude(char *newfile, char *incstring);
|
||||
void inc_clean (void);
|
||||
struct inclist *inc_path(char *file, char *include, int type);
|
||||
|
||||
void freefile(struct filepointer *fp);
|
||||
|
||||
void define2(char *name, char *val, struct inclist *file);
|
||||
void define(char *def, struct inclist *file);
|
||||
void undefine(char *symbol, struct inclist *file);
|
||||
int find_includes(struct filepointer *filep,
|
||||
struct inclist *file,
|
||||
struct inclist *file_red,
|
||||
int recursion, boolean failOK);
|
||||
|
||||
void recursive_pr_include(struct inclist *head,
|
||||
char *file, char *base);
|
||||
void add_include(struct filepointer *filep,
|
||||
struct inclist *file,
|
||||
struct inclist *file_red,
|
||||
char *include, int type,
|
||||
boolean failOK);
|
||||
|
||||
int cppsetup(char *filename,
|
||||
char *line,
|
||||
struct filepointer *filep,
|
||||
struct inclist *inc);
|
||||
|
||||
|
||||
extern void fatalerr(char *, ...);
|
||||
extern void warning(char *, ...);
|
||||
extern void warning1(char *, ...);
|
|
@ -1,551 +0,0 @@
|
|||
/*
|
||||
* $Xorg: ifparser.c,v 1.3 2000/08/17 19:41:50 cpqbld Exp $
|
||||
*
|
||||
* Copyright 1992 Network Computing Devices, Inc.
|
||||
*
|
||||
* Permission to use, copy, modify, and distribute this software and its
|
||||
* documentation for any purpose and without fee is hereby granted, provided
|
||||
* that the above copyright notice appear in all copies and that both that
|
||||
* copyright notice and this permission notice appear in supporting
|
||||
* documentation, and that the name of Network Computing Devices may not be
|
||||
* used in advertising or publicity pertaining to distribution of the software
|
||||
* without specific, written prior permission. Network Computing Devices makes
|
||||
* no representations about the suitability of this software for any purpose.
|
||||
* It is provided ``as is'' without express or implied warranty.
|
||||
*
|
||||
* NETWORK COMPUTING DEVICES DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS
|
||||
* SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS,
|
||||
* IN NO EVENT SHALL NETWORK COMPUTING DEVICES BE LIABLE FOR ANY SPECIAL,
|
||||
* INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM
|
||||
* LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE
|
||||
* OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
|
||||
* PERFORMANCE OF THIS SOFTWARE.
|
||||
*
|
||||
* Author: Jim Fulton
|
||||
* Network Computing Devices, Inc.
|
||||
*
|
||||
* Simple if statement processor
|
||||
*
|
||||
* This module can be used to evaluate string representations of C language
|
||||
* if constructs. It accepts the following grammar:
|
||||
*
|
||||
* EXPRESSION := VALUE
|
||||
* | VALUE BINOP EXPRESSION
|
||||
* | VALUE '?' EXPRESSION ':' EXPRESSION
|
||||
*
|
||||
* VALUE := '(' EXPRESSION ')'
|
||||
* | '!' VALUE
|
||||
* | '-' VALUE
|
||||
* | '+' VALUE
|
||||
* | '~' VALUE
|
||||
* | 'defined' '(' variable ')'
|
||||
* | 'defined' variable
|
||||
* | # variable '(' variable-list ')'
|
||||
* | variable
|
||||
* | number
|
||||
*
|
||||
* BINOP := '*' | '/' | '%'
|
||||
* | '+' | '-'
|
||||
* | '<<' | '>>'
|
||||
* | '<' | '>' | '<=' | '>='
|
||||
* | '==' | '!='
|
||||
* | '&' | '^' | '|'
|
||||
* | '&&' | '||'
|
||||
*
|
||||
* The normal C order of precedence is supported.
|
||||
*
|
||||
*
|
||||
* External Entry Points:
|
||||
*
|
||||
* ParseIfExpression parse a string for #if
|
||||
*/
|
||||
/* $XFree86: xc/config/makedepend/ifparser.c,v 3.11 2002/09/23 01:48:08 tsi Exp $ */
|
||||
|
||||
#include "ifparser.h"
|
||||
#include <ctype.h>
|
||||
#include <stdlib.h>
|
||||
#include <string.h>
|
||||
|
||||
/****************************************************************************
|
||||
Internal Macros and Utilities for Parser
|
||||
****************************************************************************/
|
||||
|
||||
#define DO(val) if (!(val)) return NULL
|
||||
#define CALLFUNC(ggg,fff) (*((ggg)->funcs.fff))
|
||||
#define SKIPSPACE(ccc) while (isspace(*ccc)) ccc++
|
||||
#define isvarfirstletter(ccc) (isalpha(ccc) || (ccc) == '_')
|
||||
|
||||
|
||||
static const char *
|
||||
parse_variable (IfParser *g, const char *cp, const char **varp)
|
||||
{
|
||||
SKIPSPACE (cp);
|
||||
|
||||
if (!isvarfirstletter (*cp))
|
||||
return CALLFUNC(g, handle_error) (g, cp, "variable name");
|
||||
|
||||
*varp = cp;
|
||||
/* EMPTY */
|
||||
for (cp++; isalnum(*cp) || *cp == '_'; cp++) ;
|
||||
return cp;
|
||||
}
|
||||
|
||||
|
||||
static const char *
|
||||
parse_number (IfParser *g, const char *cp, long *valp)
|
||||
{
|
||||
long base = 10;
|
||||
SKIPSPACE (cp);
|
||||
|
||||
if (!isdigit(*cp))
|
||||
return CALLFUNC(g, handle_error) (g, cp, "number");
|
||||
|
||||
*valp = 0;
|
||||
|
||||
if (*cp == '0') {
|
||||
cp++;
|
||||
if ((*cp == 'x') || (*cp == 'X')) {
|
||||
base = 16;
|
||||
cp++;
|
||||
} else {
|
||||
base = 8;
|
||||
}
|
||||
}
|
||||
|
||||
/* Ignore overflows and assume ASCII, what source is usually written in */
|
||||
while (1) {
|
||||
int increment = -1;
|
||||
if (base == 8) {
|
||||
if ((*cp >= '0') && (*cp <= '7'))
|
||||
increment = *cp++ - '0';
|
||||
} else if (base == 16) {
|
||||
if ((*cp >= '0') && (*cp <= '9'))
|
||||
increment = *cp++ - '0';
|
||||
else if ((*cp >= 'A') && (*cp <= 'F'))
|
||||
increment = *cp++ - ('A' - 10);
|
||||
else if ((*cp >= 'a') && (*cp <= 'f'))
|
||||
increment = *cp++ - ('a' - 10);
|
||||
} else { /* Decimal */
|
||||
if ((*cp >= '0') && (*cp <= '9'))
|
||||
increment = *cp++ - '0';
|
||||
}
|
||||
if (increment < 0)
|
||||
break;
|
||||
*valp = (*valp * base) + increment;
|
||||
}
|
||||
|
||||
/* Skip trailing qualifiers */
|
||||
while (*cp == 'U' || *cp == 'u' || *cp == 'L' || *cp == 'l') cp++;
|
||||
return cp;
|
||||
}
|
||||
|
||||
static const char *
|
||||
parse_character (IfParser *g, const char *cp, long *valp)
|
||||
{
|
||||
char val;
|
||||
|
||||
SKIPSPACE (cp);
|
||||
if (*cp == '\\')
|
||||
switch (cp[1]) {
|
||||
case 'n': val = '\n'; break;
|
||||
case 't': val = '\t'; break;
|
||||
case 'v': val = '\v'; break;
|
||||
case 'b': val = '\b'; break;
|
||||
case 'r': val = '\r'; break;
|
||||
case 'f': val = '\f'; break;
|
||||
case 'a': val = '\a'; break;
|
||||
case '\\': val = '\\'; break;
|
||||
case '?': val = '\?'; break;
|
||||
case '\'': val = '\''; break;
|
||||
case '\"': val = '\"'; break;
|
||||
case 'x': val = (char) strtol (cp + 2, NULL, 16); break;
|
||||
default: val = (char) strtol (cp + 1, NULL, 8); break;
|
||||
}
|
||||
else
|
||||
val = *cp;
|
||||
while (*cp != '\'') cp++;
|
||||
*valp = (long) val;
|
||||
return cp;
|
||||
}
|
||||
|
||||
static const char *
|
||||
parse_value (IfParser *g, const char *cp, long *valp)
|
||||
{
|
||||
const char *var, *varend;
|
||||
|
||||
*valp = 0;
|
||||
|
||||
SKIPSPACE (cp);
|
||||
if (!*cp)
|
||||
return cp;
|
||||
|
||||
switch (*cp) {
|
||||
case '(':
|
||||
DO (cp = ParseIfExpression (g, cp + 1, valp));
|
||||
SKIPSPACE (cp);
|
||||
if (*cp != ')')
|
||||
return CALLFUNC(g, handle_error) (g, cp, ")");
|
||||
|
||||
return cp + 1; /* skip the right paren */
|
||||
|
||||
case '!':
|
||||
DO (cp = parse_value (g, cp + 1, valp));
|
||||
*valp = !(*valp);
|
||||
return cp;
|
||||
|
||||
case '-':
|
||||
DO (cp = parse_value (g, cp + 1, valp));
|
||||
*valp = -(*valp);
|
||||
return cp;
|
||||
|
||||
case '+':
|
||||
DO (cp = parse_value (g, cp + 1, valp));
|
||||
return cp;
|
||||
|
||||
case '~':
|
||||
DO (cp = parse_value (g, cp + 1, valp));
|
||||
*valp = ~(*valp);
|
||||
return cp;
|
||||
|
||||
case '#':
|
||||
DO (cp = parse_variable (g, cp + 1, &var));
|
||||
SKIPSPACE (cp);
|
||||
if (*cp != '(')
|
||||
return CALLFUNC(g, handle_error) (g, cp, "(");
|
||||
do {
|
||||
DO (cp = parse_variable (g, cp + 1, &var));
|
||||
SKIPSPACE (cp);
|
||||
} while (*cp && *cp != ')');
|
||||
if (*cp != ')')
|
||||
return CALLFUNC(g, handle_error) (g, cp, ")");
|
||||
*valp = 1; /* XXX */
|
||||
return cp + 1;
|
||||
|
||||
case '\'':
|
||||
DO (cp = parse_character (g, cp + 1, valp));
|
||||
if (*cp != '\'')
|
||||
return CALLFUNC(g, handle_error) (g, cp, "'");
|
||||
return cp + 1;
|
||||
|
||||
case 'd':
|
||||
if (strncmp (cp, "defined", 7) == 0 && !isalnum(cp[7])) {
|
||||
int paren = 0;
|
||||
int len;
|
||||
|
||||
cp += 7;
|
||||
SKIPSPACE (cp);
|
||||
if (*cp == '(') {
|
||||
paren = 1;
|
||||
cp++;
|
||||
}
|
||||
DO (cp = parse_variable (g, cp, &var));
|
||||
len = cp - var;
|
||||
SKIPSPACE (cp);
|
||||
if (paren && *cp != ')')
|
||||
return CALLFUNC(g, handle_error) (g, cp, ")");
|
||||
*valp = (*(g->funcs.eval_defined)) (g, var, len);
|
||||
return cp + paren; /* skip the right paren */
|
||||
}
|
||||
/* fall out */
|
||||
}
|
||||
|
||||
if (isdigit(*cp)) {
|
||||
DO (cp = parse_number (g, cp, valp));
|
||||
} else if (!isvarfirstletter(*cp))
|
||||
return CALLFUNC(g, handle_error) (g, cp, "variable or number");
|
||||
else {
|
||||
DO (cp = parse_variable (g, cp, &var));
|
||||
varend = cp;
|
||||
SKIPSPACE(cp);
|
||||
if (*cp != '(') {
|
||||
*valp = (*(g->funcs.eval_variable)) (g, var, varend - var);
|
||||
} else {
|
||||
do {
|
||||
long dummy;
|
||||
DO (cp = ParseIfExpression (g, cp + 1, &dummy));
|
||||
SKIPSPACE(cp);
|
||||
if (*cp == ')')
|
||||
break;
|
||||
if (*cp != ',')
|
||||
return CALLFUNC(g, handle_error) (g, cp, ",");
|
||||
} while (1);
|
||||
|
||||
*valp = 1; /* XXX */
|
||||
cp++;
|
||||
}
|
||||
}
|
||||
|
||||
return cp;
|
||||
}
|
||||
|
||||
|
||||
|
||||
static const char *
|
||||
parse_product (IfParser *g, const char *cp, long *valp)
|
||||
{
|
||||
long rightval;
|
||||
|
||||
DO (cp = parse_value (g, cp, valp));
|
||||
SKIPSPACE (cp);
|
||||
|
||||
switch (*cp) {
|
||||
case '*':
|
||||
DO (cp = parse_product (g, cp + 1, &rightval));
|
||||
*valp = (*valp * rightval);
|
||||
break;
|
||||
|
||||
case '/':
|
||||
DO (cp = parse_product (g, cp + 1, &rightval));
|
||||
if (rightval == 0)
|
||||
return CALLFUNC(g, handle_error) (g, cp, "0");
|
||||
*valp = (*valp / rightval);
|
||||
break;
|
||||
|
||||
case '%':
|
||||
DO (cp = parse_product (g, cp + 1, &rightval));
|
||||
*valp = (*valp % rightval);
|
||||
break;
|
||||
}
|
||||
return cp;
|
||||
}
|
||||
|
||||
|
||||
static const char *
|
||||
parse_sum (IfParser *g, const char *cp, long *valp)
|
||||
{
|
||||
long rightval;
|
||||
|
||||
DO (cp = parse_product (g, cp, valp));
|
||||
SKIPSPACE (cp);
|
||||
|
||||
switch (*cp) {
|
||||
case '+':
|
||||
DO (cp = parse_sum (g, cp + 1, &rightval));
|
||||
*valp = (*valp + rightval);
|
||||
break;
|
||||
|
||||
case '-':
|
||||
DO (cp = parse_sum (g, cp + 1, &rightval));
|
||||
*valp = (*valp - rightval);
|
||||
break;
|
||||
}
|
||||
return cp;
|
||||
}
|
||||
|
||||
|
||||
static const char *
|
||||
parse_shift (IfParser *g, const char *cp, long *valp)
|
||||
{
|
||||
long rightval;
|
||||
|
||||
DO (cp = parse_sum (g, cp, valp));
|
||||
SKIPSPACE (cp);
|
||||
|
||||
switch (*cp) {
|
||||
case '<':
|
||||
if (cp[1] == '<') {
|
||||
DO (cp = parse_shift (g, cp + 2, &rightval));
|
||||
*valp = (*valp << rightval);
|
||||
}
|
||||
break;
|
||||
|
||||
case '>':
|
||||
if (cp[1] == '>') {
|
||||
DO (cp = parse_shift (g, cp + 2, &rightval));
|
||||
*valp = (*valp >> rightval);
|
||||
}
|
||||
break;
|
||||
}
|
||||
return cp;
|
||||
}
|
||||
|
||||
|
||||
static const char *
|
||||
parse_inequality (IfParser *g, const char *cp, long *valp)
|
||||
{
|
||||
long rightval;
|
||||
|
||||
DO (cp = parse_shift (g, cp, valp));
|
||||
SKIPSPACE (cp);
|
||||
|
||||
switch (*cp) {
|
||||
case '<':
|
||||
if (cp[1] == '=') {
|
||||
DO (cp = parse_inequality (g, cp + 2, &rightval));
|
||||
*valp = (*valp <= rightval);
|
||||
} else {
|
||||
DO (cp = parse_inequality (g, cp + 1, &rightval));
|
||||
*valp = (*valp < rightval);
|
||||
}
|
||||
break;
|
||||
|
||||
case '>':
|
||||
if (cp[1] == '=') {
|
||||
DO (cp = parse_inequality (g, cp + 2, &rightval));
|
||||
*valp = (*valp >= rightval);
|
||||
} else {
|
||||
DO (cp = parse_inequality (g, cp + 1, &rightval));
|
||||
*valp = (*valp > rightval);
|
||||
}
|
||||
break;
|
||||
}
|
||||
return cp;
|
||||
}
|
||||
|
||||
|
||||
static const char *
|
||||
parse_equality (IfParser *g, const char *cp, long *valp)
|
||||
{
|
||||
long rightval;
|
||||
|
||||
DO (cp = parse_inequality (g, cp, valp));
|
||||
SKIPSPACE (cp);
|
||||
|
||||
switch (*cp) {
|
||||
case '=':
|
||||
if (cp[1] == '=')
|
||||
cp++;
|
||||
DO (cp = parse_equality (g, cp + 1, &rightval));
|
||||
*valp = (*valp == rightval);
|
||||
break;
|
||||
|
||||
case '!':
|
||||
if (cp[1] != '=')
|
||||
break;
|
||||
DO (cp = parse_equality (g, cp + 2, &rightval));
|
||||
*valp = (*valp != rightval);
|
||||
break;
|
||||
}
|
||||
return cp;
|
||||
}
|
||||
|
||||
|
||||
static const char *
|
||||
parse_band (IfParser *g, const char *cp, long *valp)
|
||||
{
|
||||
long rightval;
|
||||
|
||||
DO (cp = parse_equality (g, cp, valp));
|
||||
SKIPSPACE (cp);
|
||||
|
||||
switch (*cp) {
|
||||
case '&':
|
||||
if (cp[1] != '&') {
|
||||
DO (cp = parse_band (g, cp + 1, &rightval));
|
||||
*valp = (*valp & rightval);
|
||||
}
|
||||
break;
|
||||
}
|
||||
return cp;
|
||||
}
|
||||
|
||||
|
||||
static const char *
|
||||
parse_bxor (IfParser *g, const char *cp, long *valp)
|
||||
{
|
||||
long rightval;
|
||||
|
||||
DO (cp = parse_band (g, cp, valp));
|
||||
SKIPSPACE (cp);
|
||||
|
||||
switch (*cp) {
|
||||
case '^':
|
||||
DO (cp = parse_bxor (g, cp + 1, &rightval));
|
||||
*valp = (*valp ^ rightval);
|
||||
break;
|
||||
}
|
||||
return cp;
|
||||
}
|
||||
|
||||
|
||||
static const char *
|
||||
parse_bor (IfParser *g, const char *cp, long *valp)
|
||||
{
|
||||
long rightval;
|
||||
|
||||
DO (cp = parse_bxor (g, cp, valp));
|
||||
SKIPSPACE (cp);
|
||||
|
||||
switch (*cp) {
|
||||
case '|':
|
||||
if (cp[1] != '|') {
|
||||
DO (cp = parse_bor (g, cp + 1, &rightval));
|
||||
*valp = (*valp | rightval);
|
||||
}
|
||||
break;
|
||||
}
|
||||
return cp;
|
||||
}
|
||||
|
||||
|
||||
static const char *
|
||||
parse_land (IfParser *g, const char *cp, long *valp)
|
||||
{
|
||||
long rightval;
|
||||
|
||||
DO (cp = parse_bor (g, cp, valp));
|
||||
SKIPSPACE (cp);
|
||||
|
||||
switch (*cp) {
|
||||
case '&':
|
||||
if (cp[1] != '&')
|
||||
return CALLFUNC(g, handle_error) (g, cp, "&&");
|
||||
DO (cp = parse_land (g, cp + 2, &rightval));
|
||||
*valp = (*valp && rightval);
|
||||
break;
|
||||
}
|
||||
return cp;
|
||||
}
|
||||
|
||||
|
||||
static const char *
|
||||
parse_lor (IfParser *g, const char *cp, long *valp)
|
||||
{
|
||||
long rightval;
|
||||
|
||||
DO (cp = parse_land (g, cp, valp));
|
||||
SKIPSPACE (cp);
|
||||
|
||||
switch (*cp) {
|
||||
case '|':
|
||||
if (cp[1] != '|')
|
||||
return CALLFUNC(g, handle_error) (g, cp, "||");
|
||||
DO (cp = parse_lor (g, cp + 2, &rightval));
|
||||
*valp = (*valp || rightval);
|
||||
break;
|
||||
}
|
||||
return cp;
|
||||
}
|
||||
|
||||
|
||||
static const char *
|
||||
parse_cond(IfParser *g, const char *cp, long *valp)
|
||||
{
|
||||
long trueval, falseval;
|
||||
|
||||
DO (cp = parse_lor (g, cp, valp));
|
||||
SKIPSPACE (cp);
|
||||
|
||||
switch (*cp) {
|
||||
case '?':
|
||||
DO (cp = parse_cond (g, cp + 1, &trueval));
|
||||
SKIPSPACE (cp);
|
||||
if (*cp != ':')
|
||||
return CALLFUNC(g, handle_error) (g, cp, ":");
|
||||
DO (cp = parse_cond (g, cp + 1, &falseval));
|
||||
*valp = (*valp ? trueval : falseval);
|
||||
break;
|
||||
}
|
||||
return cp;
|
||||
}
|
||||
|
||||
|
||||
/****************************************************************************
|
||||
External Entry Points
|
||||
****************************************************************************/
|
||||
|
||||
const char *
|
||||
ParseIfExpression (IfParser *g, const char *cp, long *valp)
|
||||
{
|
||||
return parse_cond (g, cp, valp);
|
||||
}
|
|
@ -1,83 +0,0 @@
|
|||
/*
|
||||
* $Xorg: ifparser.h,v 1.3 2000/08/17 19:41:51 cpqbld Exp $
|
||||
*
|
||||
* Copyright 1992 Network Computing Devices, Inc.
|
||||
*
|
||||
* Permission to use, copy, modify, and distribute this software and its
|
||||
* documentation for any purpose and without fee is hereby granted, provided
|
||||
* that the above copyright notice appear in all copies and that both that
|
||||
* copyright notice and this permission notice appear in supporting
|
||||
* documentation, and that the name of Network Computing Devices may not be
|
||||
* used in advertising or publicity pertaining to distribution of the software
|
||||
* without specific, written prior permission. Network Computing Devices makes
|
||||
* no representations about the suitability of this software for any purpose.
|
||||
* It is provided ``as is'' without express or implied warranty.
|
||||
*
|
||||
* NETWORK COMPUTING DEVICES DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS
|
||||
* SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS,
|
||||
* IN NO EVENT SHALL NETWORK COMPUTING DEVICES BE LIABLE FOR ANY SPECIAL,
|
||||
* INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM
|
||||
* LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE
|
||||
* OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
|
||||
* PERFORMANCE OF THIS SOFTWARE.
|
||||
*
|
||||
* Author: Jim Fulton
|
||||
* Network Computing Devices, Inc.
|
||||
*
|
||||
* Simple if statement processor
|
||||
*
|
||||
* This module can be used to evaluate string representations of C language
|
||||
* if constructs. It accepts the following grammar:
|
||||
*
|
||||
* EXPRESSION := VALUE
|
||||
* | VALUE BINOP EXPRESSION
|
||||
* | VALUE '?' EXPRESSION ':' EXPRESSION
|
||||
*
|
||||
* VALUE := '(' EXPRESSION ')'
|
||||
* | '!' VALUE
|
||||
* | '-' VALUE
|
||||
* | '~' VALUE
|
||||
* | 'defined' '(' variable ')'
|
||||
* | variable
|
||||
* | number
|
||||
*
|
||||
* BINOP := '*' | '/' | '%'
|
||||
* | '+' | '-'
|
||||
* | '<<' | '>>'
|
||||
* | '<' | '>' | '<=' | '>='
|
||||
* | '==' | '!='
|
||||
* | '&' | '^' | '|'
|
||||
* | '&&' | '||'
|
||||
*
|
||||
* The normal C order of precedence is supported.
|
||||
*
|
||||
*
|
||||
* External Entry Points:
|
||||
*
|
||||
* ParseIfExpression parse a string for #if
|
||||
*/
|
||||
|
||||
/* $XFree86: xc/config/makedepend/ifparser.h,v 3.5 2001/07/25 15:04:40 dawes Exp $ */
|
||||
|
||||
#include <stdio.h>
|
||||
|
||||
typedef int Bool;
|
||||
#define False 0
|
||||
#define True 1
|
||||
|
||||
typedef struct _if_parser {
|
||||
struct { /* functions */
|
||||
const char *(*handle_error) (struct _if_parser *, const char *,
|
||||
const char *);
|
||||
long (*eval_variable) (struct _if_parser *, const char *, int);
|
||||
int (*eval_defined) (struct _if_parser *, const char *, int);
|
||||
} funcs;
|
||||
char *data;
|
||||
} IfParser;
|
||||
|
||||
const char *ParseIfExpression (
|
||||
IfParser *,
|
||||
const char *,
|
||||
long *
|
||||
);
|
||||
|
|
@ -1,782 +0,0 @@
|
|||
|
||||
/* $XConsortium: imakemdep.h,v 1.83 95/04/07 19:47:46 kaleb Exp $ */
|
||||
/* $XFree86: xc/config/imake/imakemdep.h,v 3.12 1995/07/08 10:22:17 dawes Exp $ */
|
||||
/*
|
||||
|
||||
Copyright (c) 1993, 1994 X Consortium
|
||||
|
||||
Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||
of this software and associated documentation files (the "Software"), to deal
|
||||
in the Software without restriction, including without limitation the rights
|
||||
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
||||
copies of the Software, and to permit persons to whom the Software is
|
||||
furnished to do so, subject to the following conditions:
|
||||
|
||||
The above copyright notice and this permission notice shall be included in
|
||||
all copies or substantial portions of the Software.
|
||||
|
||||
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
||||
X CONSORTIUM BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN
|
||||
AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
|
||||
CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
||||
|
||||
Except as contained in this notice, the name of the X Consortium shall not be
|
||||
used in advertising or otherwise to promote the sale, use or other dealings
|
||||
in this Software without prior written authorization from the X Consortium.
|
||||
|
||||
*/
|
||||
|
||||
|
||||
/*
|
||||
* This file contains machine-dependent constants for the imake utility.
|
||||
* When porting imake, read each of the steps below and add in any necessary
|
||||
* definitions. In general you should *not* edit ccimake.c or imake.c!
|
||||
*/
|
||||
|
||||
#ifdef CCIMAKE
|
||||
/*
|
||||
* Step 1: imake_ccflags
|
||||
* Define any special flags that will be needed to get imake.c to compile.
|
||||
* These will be passed to the compile along with the contents of the
|
||||
* make variable BOOTSTRAPCFLAGS.
|
||||
*/
|
||||
#ifdef hpux
|
||||
#ifdef hp9000s800
|
||||
#define imake_ccflags "-DSYSV"
|
||||
#else
|
||||
#define imake_ccflags "-Wc,-Nd4000,-Ns3000 -DSYSV"
|
||||
#endif
|
||||
#endif
|
||||
|
||||
#if defined(macII) || defined(_AUX_SOURCE)
|
||||
#define imake_ccflags "-DmacII -DSYSV"
|
||||
#endif
|
||||
|
||||
#ifdef stellar
|
||||
#define imake_ccflags "-DSYSV"
|
||||
#endif
|
||||
|
||||
#if defined(USL) || defined(Oki) || defined(NCR)
|
||||
#define imake_ccflags "-Xc -DSVR4"
|
||||
#endif
|
||||
|
||||
#ifdef sony
|
||||
#if defined(SYSTYPE_SYSV) || defined(_SYSTYPE_SYSV)
|
||||
#define imake_ccflags "-DSVR4"
|
||||
#else
|
||||
#include <sys/param.h>
|
||||
#if NEWSOS < 41
|
||||
#define imake_ccflags "-Dbsd43 -DNOSTDHDRS"
|
||||
#else
|
||||
#if NEWSOS < 42
|
||||
#define imake_ccflags "-Dbsd43"
|
||||
#endif
|
||||
#endif
|
||||
#endif
|
||||
#endif
|
||||
|
||||
#ifdef _CRAY
|
||||
#define imake_ccflags "-DSYSV -DUSG"
|
||||
#endif
|
||||
|
||||
#if defined(_IBMR2) || defined(aix)
|
||||
#define imake_ccflags "-Daix -DSYSV"
|
||||
#endif
|
||||
|
||||
#ifdef Mips
|
||||
# if defined(SYSTYPE_BSD) || defined(BSD) || defined(BSD43)
|
||||
# define imake_ccflags "-DBSD43"
|
||||
# else
|
||||
# define imake_ccflags "-DSYSV"
|
||||
# endif
|
||||
#endif
|
||||
|
||||
#ifdef is68k
|
||||
#define imake_ccflags "-Dluna -Duniosb"
|
||||
#endif
|
||||
|
||||
#ifdef SYSV386
|
||||
# ifdef SVR4
|
||||
# define imake_ccflags "-Xc -DSVR4"
|
||||
# else
|
||||
# define imake_ccflags "-DSYSV"
|
||||
# endif
|
||||
#endif
|
||||
|
||||
#ifdef SVR4
|
||||
# ifdef i386
|
||||
# define imake_ccflags "-Xc -DSVR4"
|
||||
# endif
|
||||
#endif
|
||||
|
||||
#ifdef SYSV
|
||||
# ifdef i386
|
||||
# define imake_ccflags "-DSYSV"
|
||||
# endif
|
||||
#endif
|
||||
|
||||
#ifdef __convex__
|
||||
#define imake_ccflags "-fn -tm c1"
|
||||
#endif
|
||||
|
||||
#ifdef apollo
|
||||
#define imake_ccflags "-DX_NOT_POSIX"
|
||||
#endif
|
||||
|
||||
#ifdef WIN32
|
||||
#define imake_ccflags "-nologo -batch -D__STDC__"
|
||||
#endif
|
||||
|
||||
#ifdef __uxp__
|
||||
#define imake_ccflags "-DSVR4 -DANSICPP"
|
||||
#endif
|
||||
|
||||
#ifdef __sxg__
|
||||
#define imake_ccflags "-DSYSV -DUSG -DNOSTDHDRS"
|
||||
#endif
|
||||
|
||||
#ifdef sequent
|
||||
#define imake_ccflags "-DX_NOT_STDC_ENV -DX_NOT_POSIX"
|
||||
#endif
|
||||
|
||||
#ifdef _SEQUENT_
|
||||
#define imake_ccflags "-DSYSV -DUSG"
|
||||
#endif
|
||||
|
||||
#if defined(SX) || defined(PC_UX)
|
||||
#define imake_ccflags "-DSYSV"
|
||||
#endif
|
||||
|
||||
#ifdef nec_ews_svr2
|
||||
#define imake_ccflags "-DUSG"
|
||||
#endif
|
||||
|
||||
#if defined(nec_ews_svr4) || defined(_nec_ews_svr4) || defined(_nec_up) || defined(_nec_ft)
|
||||
#define imake_ccflags "-DSVR4"
|
||||
#endif
|
||||
|
||||
#ifdef MACH
|
||||
#define imake_ccflags "-DNOSTDHDRS"
|
||||
#endif
|
||||
|
||||
/* this is for OS/2 under EMX. This won't work with DOS */
|
||||
#if defined(__EMX__)
|
||||
#define imake_ccflags "-DBSD43"
|
||||
#endif
|
||||
|
||||
#else /* not CCIMAKE */
|
||||
#ifndef MAKEDEPEND
|
||||
/*
|
||||
* Step 2: dup2
|
||||
* If your OS doesn't have a dup2() system call to duplicate one file
|
||||
* descriptor onto another, define such a mechanism here (if you don't
|
||||
* already fall under the existing category(ies).
|
||||
*/
|
||||
#if defined(SYSV) && !defined(_CRAY) && !defined(Mips) && !defined(_SEQUENT_)
|
||||
#define dup2(fd1,fd2) ((fd1 == fd2) ? fd1 : (close(fd2), \
|
||||
fcntl(fd1, F_DUPFD, fd2)))
|
||||
#endif
|
||||
|
||||
|
||||
/*
|
||||
* Step 3: FIXUP_CPP_WHITESPACE
|
||||
* If your cpp collapses tabs macro expansions into a single space and
|
||||
* replaces escaped newlines with a space, define this symbol. This will
|
||||
* cause imake to attempt to patch up the generated Makefile by looking
|
||||
* for lines that have colons in them (this is why the rules file escapes
|
||||
* all colons). One way to tell if you need this is to see whether or not
|
||||
* your Makefiles have no tabs in them and lots of @@ strings.
|
||||
*/
|
||||
#if defined(sun) || defined(SYSV) || defined(SVR4) || defined(hcx) || defined(WIN32) || (defined(AMOEBA) && defined(CROSS_COMPILE))
|
||||
#define FIXUP_CPP_WHITESPACE
|
||||
#endif
|
||||
#ifdef WIN32
|
||||
#define REMOVE_CPP_LEADSPACE
|
||||
#define INLINE_SYNTAX
|
||||
#define MAGIC_MAKE_VARS
|
||||
#endif
|
||||
#ifdef __minix_vmd
|
||||
#define FIXUP_CPP_WHITESPACE
|
||||
#endif
|
||||
|
||||
/*
|
||||
* Step 4: USE_CC_E, DEFAULT_CC, DEFAULT_CPP
|
||||
* If you want to use cc -E instead of cpp, define USE_CC_E.
|
||||
* If use cc -E but want a different compiler, define DEFAULT_CC.
|
||||
* If the cpp you need is not in /lib/cpp, define DEFAULT_CPP.
|
||||
*/
|
||||
#ifdef hpux
|
||||
#define USE_CC_E
|
||||
#endif
|
||||
#ifdef WIN32
|
||||
#define USE_CC_E
|
||||
#define DEFAULT_CC "cl"
|
||||
#endif
|
||||
#ifdef apollo
|
||||
#define DEFAULT_CPP "/usr/lib/cpp"
|
||||
#endif
|
||||
#if defined(_IBMR2) && !defined(DEFAULT_CPP)
|
||||
#define DEFAULT_CPP "/usr/lpp/X11/Xamples/util/cpp/cpp"
|
||||
#endif
|
||||
#if defined(sun) && defined(SVR4)
|
||||
#define DEFAULT_CPP "/usr/ccs/lib/cpp"
|
||||
#endif
|
||||
#ifdef __bsdi__
|
||||
#define DEFAULT_CPP "/usr/bin/cpp"
|
||||
#endif
|
||||
#ifdef __uxp__
|
||||
#define DEFAULT_CPP "/usr/ccs/lib/cpp"
|
||||
#endif
|
||||
#ifdef __sxg__
|
||||
#define DEFAULT_CPP "/usr/lib/cpp"
|
||||
#endif
|
||||
#ifdef _CRAY
|
||||
#define DEFAULT_CPP "/lib/pcpp"
|
||||
#endif
|
||||
#if defined(__386BSD__) || defined(__NetBSD__) || defined(__FreeBSD__) || defined(__OpenBSD__)
|
||||
#define DEFAULT_CPP "/usr/libexec/cpp"
|
||||
#endif
|
||||
#ifdef MACH
|
||||
#define USE_CC_E
|
||||
#endif
|
||||
#ifdef __minix_vmd
|
||||
#define DEFAULT_CPP "/usr/lib/cpp"
|
||||
#endif
|
||||
#if defined(__EMX__)
|
||||
/* expects cpp in PATH */
|
||||
#define DEFAULT_CPP "cpp"
|
||||
#endif
|
||||
|
||||
/*
|
||||
* Step 5: cpp_argv
|
||||
* The following table contains the flags that should be passed
|
||||
* whenever a Makefile is being generated. If your preprocessor
|
||||
* doesn't predefine any unique symbols, choose one and add it to the
|
||||
* end of this table. Then, do the following:
|
||||
*
|
||||
* a. Use this symbol in Imake.tmpl when setting MacroFile.
|
||||
* b. Put this symbol in the definition of BootstrapCFlags in your
|
||||
* <platform>.cf file.
|
||||
* c. When doing a make World, always add "BOOTSTRAPCFLAGS=-Dsymbol"
|
||||
* to the end of the command line.
|
||||
*
|
||||
* Note that you may define more than one symbol (useful for platforms
|
||||
* that support multiple operating systems).
|
||||
*/
|
||||
|
||||
#define ARGUMENTS 50 /* number of arguments in various arrays */
|
||||
char *cpp_argv[ARGUMENTS] = {
|
||||
"cc", /* replaced by the actual program to exec */
|
||||
"-I.", /* add current directory to include path */
|
||||
#ifdef unix
|
||||
"-Uunix", /* remove unix symbol so that filename unix.c okay */
|
||||
#endif
|
||||
#if defined(__386BSD__) || defined(__NetBSD__) || defined(__FreeBSD__) || defined(__OpenBSD__) || defined(MACH)
|
||||
# ifdef __i386__
|
||||
"-D__i386__",
|
||||
# endif
|
||||
# ifdef __x86_64__
|
||||
"-D__x86_64__",
|
||||
# endif
|
||||
# ifdef __GNUC__
|
||||
"-traditional",
|
||||
# endif
|
||||
#endif
|
||||
#ifdef M4330
|
||||
"-DM4330", /* Tektronix */
|
||||
#endif
|
||||
#ifdef M4310
|
||||
"-DM4310", /* Tektronix */
|
||||
#endif
|
||||
#if defined(macII) || defined(_AUX_SOURCE)
|
||||
"-DmacII", /* Apple A/UX */
|
||||
#endif
|
||||
#ifdef USL
|
||||
"-DUSL", /* USL */
|
||||
#endif
|
||||
#ifdef sony
|
||||
"-Dsony", /* Sony */
|
||||
#if !defined(SYSTYPE_SYSV) && !defined(_SYSTYPE_SYSV) && NEWSOS < 42
|
||||
"-Dbsd43",
|
||||
#endif
|
||||
#endif
|
||||
#ifdef _IBMR2
|
||||
"-D_IBMR2", /* IBM RS-6000 (we ensured that aix is defined above */
|
||||
#ifndef aix
|
||||
#define aix /* allow BOOTSTRAPCFLAGS="-D_IBMR2" */
|
||||
#endif
|
||||
#endif /* _IBMR2 */
|
||||
#ifdef aix
|
||||
"-Daix", /* AIX instead of AOS */
|
||||
#ifndef ibm
|
||||
#define ibm /* allow BOOTSTRAPCFLAGS="-Daix" */
|
||||
#endif
|
||||
#endif /* aix */
|
||||
#ifdef ibm
|
||||
"-Dibm", /* IBM PS/2 and RT under both AOS and AIX */
|
||||
#endif
|
||||
#ifdef luna
|
||||
"-Dluna", /* OMRON luna 68K and 88K */
|
||||
#ifdef luna1
|
||||
"-Dluna1",
|
||||
#endif
|
||||
#ifdef luna88k /* need not on UniOS-Mach Vers. 1.13 */
|
||||
"-traditional", /* for some older version */
|
||||
#endif /* instead of "-DXCOMM=\\#" */
|
||||
#ifdef uniosb
|
||||
"-Duniosb",
|
||||
#endif
|
||||
#ifdef uniosu
|
||||
"-Duniosu",
|
||||
#endif
|
||||
#endif /* luna */
|
||||
#ifdef _CRAY /* Cray */
|
||||
"-Ucray",
|
||||
#endif
|
||||
#ifdef Mips
|
||||
"-DMips", /* Define and use Mips for Mips Co. OS/mach. */
|
||||
# if defined(SYSTYPE_BSD) || defined(BSD) || defined(BSD43)
|
||||
"-DBSD43", /* Mips RISCOS supports two environments */
|
||||
# else
|
||||
"-DSYSV", /* System V environment is the default */
|
||||
# endif
|
||||
#endif /* Mips */
|
||||
#ifdef MOTOROLA
|
||||
"-DMOTOROLA", /* Motorola Delta Systems */
|
||||
# ifdef SYSV
|
||||
"-DSYSV",
|
||||
# endif
|
||||
# ifdef SVR4
|
||||
"-DSVR4",
|
||||
# endif
|
||||
#endif /* MOTOROLA */
|
||||
#ifdef i386
|
||||
"-Di386",
|
||||
# ifdef SVR4
|
||||
"-DSVR4",
|
||||
# endif
|
||||
# ifdef SYSV
|
||||
"-DSYSV",
|
||||
# ifdef ISC
|
||||
"-DISC",
|
||||
# ifdef ISC40
|
||||
"-DISC40", /* ISC 4.0 */
|
||||
# else
|
||||
# ifdef ISC202
|
||||
"-DISC202", /* ISC 2.0.2 */
|
||||
# else
|
||||
# ifdef ISC30
|
||||
"-DISC30", /* ISC 3.0 */
|
||||
# else
|
||||
"-DISC22", /* ISC 2.2.1 */
|
||||
# endif
|
||||
# endif
|
||||
# endif
|
||||
# endif
|
||||
# ifdef SCO
|
||||
"-DSCO",
|
||||
# ifdef SCO324
|
||||
"-DSCO324",
|
||||
# endif
|
||||
# endif
|
||||
# endif
|
||||
# ifdef ESIX
|
||||
"-DESIX",
|
||||
# endif
|
||||
# ifdef ATT
|
||||
"-DATT",
|
||||
# endif
|
||||
# ifdef DELL
|
||||
"-DDELL",
|
||||
# endif
|
||||
#endif
|
||||
#ifdef SYSV386 /* System V/386 folks, obsolete */
|
||||
"-Di386",
|
||||
# ifdef SVR4
|
||||
"-DSVR4",
|
||||
# endif
|
||||
# ifdef ISC
|
||||
"-DISC",
|
||||
# ifdef ISC40
|
||||
"-DISC40", /* ISC 4.0 */
|
||||
# else
|
||||
# ifdef ISC202
|
||||
"-DISC202", /* ISC 2.0.2 */
|
||||
# else
|
||||
# ifdef ISC30
|
||||
"-DISC30", /* ISC 3.0 */
|
||||
# else
|
||||
"-DISC22", /* ISC 2.2.1 */
|
||||
# endif
|
||||
# endif
|
||||
# endif
|
||||
# endif
|
||||
# ifdef SCO
|
||||
"-DSCO",
|
||||
# ifdef SCO324
|
||||
"-DSCO324",
|
||||
# endif
|
||||
# endif
|
||||
# ifdef ESIX
|
||||
"-DESIX",
|
||||
# endif
|
||||
# ifdef ATT
|
||||
"-DATT",
|
||||
# endif
|
||||
# ifdef DELL
|
||||
"-DDELL",
|
||||
# endif
|
||||
#endif
|
||||
#ifdef __osf__
|
||||
"-D__osf__",
|
||||
# ifdef __mips__
|
||||
"-D__mips__",
|
||||
# endif
|
||||
# ifdef __alpha
|
||||
"-D__alpha",
|
||||
# endif
|
||||
# ifdef __i386__
|
||||
"-D__i386__",
|
||||
# endif
|
||||
# ifdef __GNUC__
|
||||
"-traditional",
|
||||
# endif
|
||||
#endif
|
||||
#ifdef Oki
|
||||
"-DOki",
|
||||
#endif
|
||||
#ifdef sun
|
||||
#ifdef SVR4
|
||||
"-DSVR4",
|
||||
#endif
|
||||
#endif
|
||||
#ifdef WIN32
|
||||
"-DWIN32",
|
||||
"-nologo",
|
||||
"-batch",
|
||||
"-D__STDC__",
|
||||
#endif
|
||||
#ifdef NCR
|
||||
"-DNCR", /* NCR */
|
||||
#endif
|
||||
#ifdef linux
|
||||
"-traditional",
|
||||
"-Dlinux",
|
||||
#endif
|
||||
#ifdef __uxp__
|
||||
"-D__uxp__",
|
||||
#endif
|
||||
#ifdef __sxg__
|
||||
"-D__sxg__",
|
||||
#endif
|
||||
#ifdef nec_ews_svr2
|
||||
"-Dnec_ews_svr2",
|
||||
#endif
|
||||
#ifdef AMOEBA
|
||||
"-DAMOEBA",
|
||||
# ifdef CROSS_COMPILE
|
||||
"-DCROSS_COMPILE",
|
||||
# ifdef CROSS_i80386
|
||||
"-Di80386",
|
||||
# endif
|
||||
# ifdef CROSS_sparc
|
||||
"-Dsparc",
|
||||
# endif
|
||||
# ifdef CROSS_mc68000
|
||||
"-Dmc68000",
|
||||
# endif
|
||||
# else
|
||||
# ifdef i80386
|
||||
"-Di80386",
|
||||
# endif
|
||||
# ifdef sparc
|
||||
"-Dsparc",
|
||||
# endif
|
||||
# ifdef mc68000
|
||||
"-Dmc68000",
|
||||
# endif
|
||||
# endif
|
||||
#endif
|
||||
#ifdef __minix_vmd
|
||||
"-Dminix",
|
||||
#endif
|
||||
|
||||
#if defined(__EMX__)
|
||||
"-traditional",
|
||||
"-Demxos2",
|
||||
#endif
|
||||
|
||||
};
|
||||
#else /* else MAKEDEPEND */
|
||||
/*
|
||||
* Step 6: predefs
|
||||
* If your compiler and/or preprocessor define any specific symbols, add
|
||||
* them to the the following table. The definition of struct symtab is
|
||||
* in util/makedepend/def.h.
|
||||
*/
|
||||
#define QUOTEIT(x) #x
|
||||
#define QUOTEEXPANSION(x) QUOTEIT(x)
|
||||
|
||||
struct symtab predefs[] = {
|
||||
#ifdef apollo
|
||||
{"apollo", "1"},
|
||||
#endif
|
||||
#ifdef ibm032
|
||||
{"ibm032", "1"},
|
||||
#endif
|
||||
#ifdef ibm
|
||||
{"ibm", "1"},
|
||||
#endif
|
||||
#ifdef aix
|
||||
{"aix", "1"},
|
||||
#endif
|
||||
#ifdef sun
|
||||
{"sun", "1"},
|
||||
#endif
|
||||
#ifdef sun2
|
||||
{"sun2", "1"},
|
||||
#endif
|
||||
#ifdef sun3
|
||||
{"sun3", "1"},
|
||||
#endif
|
||||
#ifdef sun4
|
||||
{"sun4", "1"},
|
||||
#endif
|
||||
#ifdef sparc
|
||||
{"sparc", "1"},
|
||||
#endif
|
||||
#ifdef __sparc__
|
||||
{"__sparc__", "1"},
|
||||
#endif
|
||||
#ifdef hpux
|
||||
{"hpux", "1"},
|
||||
#endif
|
||||
#ifdef __hpux
|
||||
{"__hpux", "1"},
|
||||
#endif
|
||||
#ifdef __hp9000s800
|
||||
{"__hp9000s800", "1"},
|
||||
#endif
|
||||
#ifdef __hp9000s700
|
||||
{"__hp9000s700", "1"},
|
||||
#endif
|
||||
#ifdef vax
|
||||
{"vax", "1"},
|
||||
#endif
|
||||
#ifdef VMS
|
||||
{"VMS", "1"},
|
||||
#endif
|
||||
#ifdef cray
|
||||
{"cray", "1"},
|
||||
#endif
|
||||
#ifdef CRAY
|
||||
{"CRAY", "1"},
|
||||
#endif
|
||||
#ifdef _CRAY
|
||||
{"_CRAY", "1"},
|
||||
#endif
|
||||
#ifdef att
|
||||
{"att", "1"},
|
||||
#endif
|
||||
#ifdef mips
|
||||
{"mips", "1"},
|
||||
#endif
|
||||
#ifdef __mips__
|
||||
{"__mips__", "1"},
|
||||
#endif
|
||||
#ifdef ultrix
|
||||
{"ultrix", "1"},
|
||||
#endif
|
||||
#ifdef stellar
|
||||
{"stellar", "1"},
|
||||
#endif
|
||||
#ifdef mc68000
|
||||
{"mc68000", "1"},
|
||||
#endif
|
||||
#ifdef mc68020
|
||||
{"mc68020", "1"},
|
||||
#endif
|
||||
#ifdef __GNUC__
|
||||
{"__GNUC__", "1"},
|
||||
#endif
|
||||
#if __STDC__
|
||||
{"__STDC__", "1"},
|
||||
#endif
|
||||
#ifdef __HIGHC__
|
||||
{"__HIGHC__", "1"},
|
||||
#endif
|
||||
#ifdef CMU
|
||||
{"CMU", "1"},
|
||||
#endif
|
||||
#ifdef luna
|
||||
{"luna", "1"},
|
||||
#ifdef luna1
|
||||
{"luna1", "1"},
|
||||
#endif
|
||||
#ifdef luna2
|
||||
{"luna2", "1"},
|
||||
#endif
|
||||
#ifdef luna88k
|
||||
{"luna88k", "1"},
|
||||
#endif
|
||||
#ifdef uniosb
|
||||
{"uniosb", "1"},
|
||||
#endif
|
||||
#ifdef uniosu
|
||||
{"uniosu", "1"},
|
||||
#endif
|
||||
#endif
|
||||
#ifdef ieeep754
|
||||
{"ieeep754", "1"},
|
||||
#endif
|
||||
#ifdef is68k
|
||||
{"is68k", "1"},
|
||||
#endif
|
||||
#ifdef m68k
|
||||
{"m68k", "1"},
|
||||
#endif
|
||||
#ifdef m88k
|
||||
{"m88k", "1"},
|
||||
#endif
|
||||
#ifdef __m88k__
|
||||
{"__m88k__", "1"},
|
||||
#endif
|
||||
#ifdef bsd43
|
||||
{"bsd43", "1"},
|
||||
#endif
|
||||
#ifdef hcx
|
||||
{"hcx", "1"},
|
||||
#endif
|
||||
#ifdef sony
|
||||
{"sony", "1"},
|
||||
#ifdef SYSTYPE_SYSV
|
||||
{"SYSTYPE_SYSV", "1"},
|
||||
#endif
|
||||
#ifdef _SYSTYPE_SYSV
|
||||
{"_SYSTYPE_SYSV", "1"},
|
||||
#endif
|
||||
#endif
|
||||
#ifdef __OSF__
|
||||
{"__OSF__", "1"},
|
||||
#endif
|
||||
#ifdef __osf__
|
||||
{"__osf__", "1"},
|
||||
#endif
|
||||
#ifdef __alpha
|
||||
{"__alpha", "1"},
|
||||
#endif
|
||||
#ifdef __DECC
|
||||
{"__DECC", "1"},
|
||||
#endif
|
||||
#ifdef __decc
|
||||
{"__decc", "1"},
|
||||
#endif
|
||||
#ifdef __uxp__
|
||||
{"__uxp__", "1"},
|
||||
#endif
|
||||
#ifdef __sxg__
|
||||
{"__sxg__", "1"},
|
||||
#endif
|
||||
#ifdef _SEQUENT_
|
||||
{"_SEQUENT_", "1"},
|
||||
{"__STDC__", "1"},
|
||||
#endif
|
||||
#ifdef __bsdi__
|
||||
{"__bsdi__", "1"},
|
||||
#endif
|
||||
#ifdef nec_ews_svr2
|
||||
{"nec_ews_svr2", "1"},
|
||||
#endif
|
||||
#ifdef nec_ews_svr4
|
||||
{"nec_ews_svr4", "1"},
|
||||
#endif
|
||||
#ifdef _nec_ews_svr4
|
||||
{"_nec_ews_svr4", "1"},
|
||||
#endif
|
||||
#ifdef _nec_up
|
||||
{"_nec_up", "1"},
|
||||
#endif
|
||||
#ifdef SX
|
||||
{"SX", "1"},
|
||||
#endif
|
||||
#ifdef nec
|
||||
{"nec", "1"},
|
||||
#endif
|
||||
#ifdef _nec_ft
|
||||
{"_nec_ft", "1"},
|
||||
#endif
|
||||
#ifdef PC_UX
|
||||
{"PC_UX", "1"},
|
||||
#endif
|
||||
#ifdef sgi
|
||||
{"sgi", "1"},
|
||||
#endif
|
||||
#ifdef __sgi
|
||||
{"__sgi", "1"},
|
||||
#endif
|
||||
#ifdef __FreeBSD__
|
||||
{"__FreeBSD__", "1"},
|
||||
#endif
|
||||
#ifdef __NetBSD__
|
||||
{"__NetBSD__", "1"},
|
||||
#endif
|
||||
#ifdef __OpenBSD__
|
||||
{"__OpenBSD__", "1"},
|
||||
#endif
|
||||
#ifdef __EMX__
|
||||
{"__EMX__", "1"},
|
||||
#endif
|
||||
/* ADDED THE FOLLOWING SYMBOLS FOR WINDOWS */
|
||||
#ifdef _WIN32
|
||||
{"_WIN32", QUOTEEXPANSION(_WIN32) },
|
||||
#endif
|
||||
#ifdef _WIN64
|
||||
{"_WIN64", QUOTEEXPANSION(_WIN64) },
|
||||
#endif
|
||||
#ifdef _X86
|
||||
{"_X86", QUOTEEXPANSION(_X86) },
|
||||
#endif
|
||||
#ifdef _X86_
|
||||
{"_X86_", QUOTEEXPANSION(_X86_) },
|
||||
#endif
|
||||
#ifdef _X86_64
|
||||
{"_X86_64", QUOTEEXPANSION(_X86_64) },
|
||||
#endif
|
||||
#ifdef _X86_64_
|
||||
{"_X86_64_", QUOTEEXPANSION(_X86_64_) },
|
||||
#endif
|
||||
#ifdef _DEBUG
|
||||
{"_DEBUG", QUOTEEXPANSION(_DEBUG) },
|
||||
#endif
|
||||
#ifdef _DLL
|
||||
{"_DLL", QUOTEEXPANSION(_DLL) },
|
||||
#endif
|
||||
#ifdef _M_IX86
|
||||
{"_M_IX86", QUOTEEXPANSION(_M_IX86) },
|
||||
#endif
|
||||
#ifdef _M_X64
|
||||
{"_M_X64", QUOTEEXPANSION(_M_X64) },
|
||||
#endif
|
||||
#ifdef _MSC_FULL_VER
|
||||
{"_MSC_FULL_VER", QUOTEEXPANSION(_MSC_FULL_VER) },
|
||||
#endif
|
||||
#ifdef _MSC_VER
|
||||
{"_MSC_VER", QUOTEEXPANSION(_MSC_VER) },
|
||||
#endif
|
||||
#ifdef _MSVC_RUNTIME_CHECKS
|
||||
{"_MSVC_RUNTIME_CHECKS", QUOTEEXPANSION(_MSVC_RUNTIME_CHECKS) },
|
||||
#endif
|
||||
#ifdef _MT
|
||||
{"_MT", QUOTEEXPANSION(_MT) },
|
||||
#endif
|
||||
#ifdef _CHAR_UNSIGNED
|
||||
{"_CHAR_UNSIGNED", QUOTEEXPANSION(_CHAR_UNSIGNED) },
|
||||
#endif
|
||||
/* add any additional symbols before this line */
|
||||
{NULL, NULL}
|
||||
};
|
||||
|
||||
#endif /* MAKEDEPEND */
|
||||
#endif /* CCIMAKE */
|
|
@ -1,337 +0,0 @@
|
|||
/* $Xorg: include.c,v 1.4 2001/02/09 02:03:16 xorgcvs Exp $ */
|
||||
/*
|
||||
|
||||
Copyright (c) 1993, 1994, 1998 The Open Group
|
||||
|
||||
Permission to use, copy, modify, distribute, and sell this software and its
|
||||
documentation for any purpose is hereby granted without fee, provided that
|
||||
the above copyright notice appear in all copies and that both that
|
||||
copyright notice and this permission notice appear in supporting
|
||||
documentation.
|
||||
|
||||
The above copyright notice and this permission notice shall be included in
|
||||
all copies or substantial portions of the Software.
|
||||
|
||||
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
||||
OPEN GROUP BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN
|
||||
AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
|
||||
CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
||||
|
||||
Except as contained in this notice, the name of The Open Group shall not be
|
||||
used in advertising or otherwise to promote the sale, use or other dealings
|
||||
in this Software without prior written authorization from The Open Group.
|
||||
|
||||
*/
|
||||
/* $XFree86: xc/config/makedepend/include.c,v 3.7 2001/12/14 19:53:20 dawes Exp $ */
|
||||
|
||||
|
||||
#include "def.h"
|
||||
|
||||
#ifdef _MSC_VER
|
||||
#include <windows.h>
|
||||
static int
|
||||
does_file_exist(char *file)
|
||||
{
|
||||
WIN32_FILE_ATTRIBUTE_DATA data;
|
||||
BOOL b = GetFileAttributesExA(file, GetFileExInfoStandard, &data);
|
||||
if (!b)
|
||||
return 0;
|
||||
return (data.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY) == 0;
|
||||
}
|
||||
#else
|
||||
static int
|
||||
does_file_exist(char *file)
|
||||
{
|
||||
struct stat sb;
|
||||
return stat(file, &sb) == 0 && !S_ISDIR(sb.st_mode);
|
||||
}
|
||||
#endif
|
||||
|
||||
extern struct inclist inclist[ MAXFILES ],
|
||||
*inclistp, *inclistnext;
|
||||
extern char *includedirs[ ],
|
||||
**includedirsnext;
|
||||
extern char *notdotdot[ ];
|
||||
extern boolean show_where_not;
|
||||
extern boolean warn_multiple;
|
||||
|
||||
static boolean
|
||||
isdot(char *p)
|
||||
{
|
||||
if(p && *p++ == '.' && *p++ == '\0')
|
||||
return(TRUE);
|
||||
return(FALSE);
|
||||
}
|
||||
|
||||
static boolean
|
||||
isdotdot(char *p)
|
||||
{
|
||||
if(p && *p++ == '.' && *p++ == '.' && *p++ == '\0')
|
||||
return(TRUE);
|
||||
return(FALSE);
|
||||
}
|
||||
|
||||
static boolean
|
||||
issymbolic(char *dir, char *component)
|
||||
{
|
||||
#ifdef S_IFLNK
|
||||
struct stat st;
|
||||
char buf[ BUFSIZ ], **pp;
|
||||
|
||||
sprintf(buf, "%s%s%s", dir, *dir ? "/" : "", component);
|
||||
for (pp=notdotdot; *pp; pp++)
|
||||
if (strcmp(*pp, buf) == 0)
|
||||
return (TRUE);
|
||||
if (lstat(buf, &st) == 0
|
||||
&& (st.st_mode & S_IFMT) == S_IFLNK) {
|
||||
*pp++ = copy(buf);
|
||||
if (pp >= ¬dotdot[ MAXDIRS ])
|
||||
fatalerr("out of .. dirs, increase MAXDIRS\n");
|
||||
return(TRUE);
|
||||
}
|
||||
#endif
|
||||
return(FALSE);
|
||||
}
|
||||
|
||||
/*
|
||||
* Occasionally, pathnames are created that look like .../x/../y
|
||||
* Any of the 'x/..' sequences within the name can be eliminated.
|
||||
* (but only if 'x' is not a symbolic link!!)
|
||||
*/
|
||||
static void
|
||||
remove_dotdot(char *path)
|
||||
{
|
||||
register char *end, *from, *to, **cp;
|
||||
char *components[ MAXFILES ],
|
||||
newpath[ BUFSIZ ];
|
||||
boolean component_copied;
|
||||
|
||||
/*
|
||||
* slice path up into components.
|
||||
*/
|
||||
to = newpath;
|
||||
if (*path == '/')
|
||||
*to++ = '/';
|
||||
*to = '\0';
|
||||
cp = components;
|
||||
for (from=end=path; *end; end++)
|
||||
if (*end == '/') {
|
||||
while (*end == '/')
|
||||
*end++ = '\0';
|
||||
if (*from)
|
||||
*cp++ = from;
|
||||
from = end;
|
||||
}
|
||||
*cp++ = from;
|
||||
*cp = NULL;
|
||||
|
||||
/*
|
||||
* Recursively remove all 'x/..' component pairs.
|
||||
*/
|
||||
cp = components;
|
||||
while(*cp) {
|
||||
if (!isdot(*cp) && !isdotdot(*cp) && isdotdot(*(cp+1))
|
||||
&& !issymbolic(newpath, *cp))
|
||||
{
|
||||
char **fp = cp + 2;
|
||||
char **tp = cp;
|
||||
|
||||
do
|
||||
*tp++ = *fp; /* move all the pointers down */
|
||||
while (*fp++);
|
||||
if (cp != components)
|
||||
cp--; /* go back and check for nested ".." */
|
||||
} else {
|
||||
cp++;
|
||||
}
|
||||
}
|
||||
/*
|
||||
* Concatenate the remaining path elements.
|
||||
*/
|
||||
cp = components;
|
||||
component_copied = FALSE;
|
||||
while(*cp) {
|
||||
if (component_copied)
|
||||
*to++ = '/';
|
||||
component_copied = TRUE;
|
||||
for (from = *cp; *from; )
|
||||
*to++ = *from++;
|
||||
*to = '\0';
|
||||
cp++;
|
||||
}
|
||||
*to++ = '\0';
|
||||
|
||||
/*
|
||||
* copy the reconstituted path back to our pointer.
|
||||
*/
|
||||
strcpy(path, newpath);
|
||||
}
|
||||
|
||||
/*
|
||||
* Add an include file to the list of those included by 'file'.
|
||||
*/
|
||||
struct inclist *
|
||||
newinclude(char *newfile, char *incstring)
|
||||
{
|
||||
register struct inclist *ip;
|
||||
|
||||
/*
|
||||
* First, put this file on the global list of include files.
|
||||
*/
|
||||
ip = inclistp++;
|
||||
if (inclistp == inclist + MAXFILES - 1)
|
||||
fatalerr("out of space: increase MAXFILES\n");
|
||||
ip->i_file = copy(newfile);
|
||||
|
||||
if (incstring == NULL)
|
||||
ip->i_incstring = ip->i_file;
|
||||
else
|
||||
ip->i_incstring = copy(incstring);
|
||||
|
||||
inclistnext = inclistp;
|
||||
return(ip);
|
||||
}
|
||||
|
||||
void
|
||||
included_by(struct inclist *ip, struct inclist *newfile)
|
||||
{
|
||||
register int i;
|
||||
|
||||
if (ip == NULL)
|
||||
return;
|
||||
/*
|
||||
* Put this include file (newfile) on the list of files included
|
||||
* by 'file'. If 'file' is NULL, then it is not an include
|
||||
* file itself (i.e. was probably mentioned on the command line).
|
||||
* If it is already on the list, don't stick it on again.
|
||||
*/
|
||||
if (ip->i_list == NULL) {
|
||||
ip->i_list = (struct inclist **)
|
||||
malloc(sizeof(struct inclist *) * ++ip->i_listlen);
|
||||
ip->i_merged = (boolean *)
|
||||
malloc(sizeof(boolean) * ip->i_listlen);
|
||||
} else {
|
||||
for (i=0; i<ip->i_listlen; i++)
|
||||
if (ip->i_list[ i ] == newfile) {
|
||||
i = strlen(newfile->i_file);
|
||||
if (!(ip->i_flags & INCLUDED_SYM) &&
|
||||
!(i > 2 &&
|
||||
newfile->i_file[i-1] == 'c' &&
|
||||
newfile->i_file[i-2] == '.'))
|
||||
{
|
||||
/* only bitch if ip has */
|
||||
/* no #include SYMBOL lines */
|
||||
/* and is not a .c file */
|
||||
if (warn_multiple)
|
||||
{
|
||||
warning("%s includes %s more than once!\n",
|
||||
ip->i_file, newfile->i_file);
|
||||
warning1("Already have\n");
|
||||
for (i=0; i<ip->i_listlen; i++)
|
||||
warning1("\t%s\n", ip->i_list[i]->i_file);
|
||||
}
|
||||
}
|
||||
return;
|
||||
}
|
||||
ip->i_list = (struct inclist **) realloc(ip->i_list,
|
||||
sizeof(struct inclist *) * ++ip->i_listlen);
|
||||
ip->i_merged = (boolean *)
|
||||
realloc(ip->i_merged, sizeof(boolean) * ip->i_listlen);
|
||||
}
|
||||
ip->i_list[ ip->i_listlen-1 ] = newfile;
|
||||
ip->i_merged[ ip->i_listlen-1 ] = FALSE;
|
||||
}
|
||||
|
||||
void
|
||||
inc_clean (void)
|
||||
{
|
||||
register struct inclist *ip;
|
||||
|
||||
for (ip = inclist; ip < inclistp; ip++) {
|
||||
ip->i_flags &= ~MARKED;
|
||||
}
|
||||
}
|
||||
|
||||
struct inclist *
|
||||
inc_path(char *file, char *include, int type)
|
||||
{
|
||||
static char path[ BUFSIZ ];
|
||||
register char **pp, *p;
|
||||
register struct inclist *ip;
|
||||
|
||||
/*
|
||||
* Check all previously found include files for a path that
|
||||
* has already been expanded.
|
||||
*/
|
||||
if ((type == INCLUDE) || (type == INCLUDEDOT))
|
||||
inclistnext = inclist;
|
||||
ip = inclistnext;
|
||||
|
||||
for (; ip->i_file; ip++) {
|
||||
if ((strcmp(ip->i_incstring, include) == 0) &&
|
||||
!(ip->i_flags & INCLUDED_SYM)) {
|
||||
inclistnext = ip + 1;
|
||||
return ip;
|
||||
}
|
||||
}
|
||||
|
||||
if (inclistnext == inclist) {
|
||||
/*
|
||||
* If the path was surrounded by "" or is an absolute path,
|
||||
* then check the exact path provided.
|
||||
*/
|
||||
if ((type == INCLUDEDOT) ||
|
||||
(type == INCLUDENEXTDOT) ||
|
||||
(*include == '/')) {
|
||||
if (does_file_exist(include))
|
||||
return newinclude(include, include);
|
||||
if (show_where_not)
|
||||
warning1("\tnot in %s\n", include);
|
||||
}
|
||||
|
||||
/*
|
||||
* If the path was surrounded by "" see if this include file is
|
||||
* in the directory of the file being parsed.
|
||||
*/
|
||||
if ((type == INCLUDEDOT) || (type == INCLUDENEXTDOT)) {
|
||||
for (p=file+strlen(file); p>file; p--)
|
||||
if (*p == '/')
|
||||
break;
|
||||
if (p == file) {
|
||||
strcpy(path, include);
|
||||
} else {
|
||||
strncpy(path, file, (p-file) + 1);
|
||||
path[ (p-file) + 1 ] = '\0';
|
||||
strcpy(path + (p-file) + 1, include);
|
||||
}
|
||||
remove_dotdot(path);
|
||||
if (does_file_exist(path))
|
||||
return newinclude(path, include);
|
||||
if (show_where_not)
|
||||
warning1("\tnot in %s\n", path);
|
||||
}
|
||||
}
|
||||
|
||||
/*
|
||||
* Check the include directories specified. Standard include dirs
|
||||
* should be at the end.
|
||||
*/
|
||||
if ((type == INCLUDE) || (type == INCLUDEDOT))
|
||||
includedirsnext = includedirs;
|
||||
pp = includedirsnext;
|
||||
|
||||
for (; *pp; pp++) {
|
||||
sprintf(path, "%s/%s", *pp, include);
|
||||
remove_dotdot(path);
|
||||
if (does_file_exist(path)) {
|
||||
includedirsnext = pp + 1;
|
||||
return newinclude(path, include);
|
||||
}
|
||||
if (show_where_not)
|
||||
warning1("\tnot in %s\n", path);
|
||||
}
|
||||
|
||||
return NULL;
|
||||
}
|
|
@ -1,870 +0,0 @@
|
|||
/* $Xorg: main.c,v 1.5 2001/02/09 02:03:16 xorgcvs Exp $ */
|
||||
/*
|
||||
|
||||
Copyright (c) 1993, 1994, 1998 The Open Group
|
||||
|
||||
Permission to use, copy, modify, distribute, and sell this software and its
|
||||
documentation for any purpose is hereby granted without fee, provided that
|
||||
the above copyright notice appear in all copies and that both that
|
||||
copyright notice and this permission notice appear in supporting
|
||||
documentation.
|
||||
|
||||
The above copyright notice and this permission notice shall be included in
|
||||
all copies or substantial portions of the Software.
|
||||
|
||||
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
||||
THE OPEN GROUP BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN
|
||||
AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
|
||||
CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
||||
|
||||
Except as contained in this notice, the name of The Open Group shall not be
|
||||
used in advertising or otherwise to promote the sale, use or other dealings
|
||||
in this Software without prior written authorization from The Open Group.
|
||||
|
||||
*/
|
||||
/* $XFree86: xc/config/makedepend/main.c,v 3.32 2003/03/26 20:43:48 tsi Exp $ */
|
||||
|
||||
#include "def.h"
|
||||
#ifdef hpux
|
||||
#define sigvec sigvector
|
||||
#endif /* hpux */
|
||||
|
||||
#ifdef X_POSIX_C_SOURCE
|
||||
#define _POSIX_C_SOURCE X_POSIX_C_SOURCE
|
||||
#include <signal.h>
|
||||
#undef _POSIX_C_SOURCE
|
||||
#else
|
||||
#if defined(X_NOT_POSIX) || defined(_POSIX_SOURCE)
|
||||
#include <signal.h>
|
||||
#else
|
||||
#define _POSIX_SOURCE
|
||||
#include <signal.h>
|
||||
#undef _POSIX_SOURCE
|
||||
#endif
|
||||
#endif
|
||||
|
||||
#include <stdarg.h>
|
||||
#ifdef _WIN32
|
||||
#include <io.h>
|
||||
#endif
|
||||
|
||||
#ifdef MINIX
|
||||
#define USE_CHMOD 1
|
||||
#endif
|
||||
|
||||
#ifdef DEBUG
|
||||
int _debugmask;
|
||||
#endif
|
||||
|
||||
/* #define DEBUG_DUMP */
|
||||
#ifdef DEBUG_DUMP
|
||||
#define DBG_PRINT(file, fmt, args) fprintf(file, fmt, args)
|
||||
#else
|
||||
#define DBG_PRINT(file, fmt, args) /* empty */
|
||||
#endif
|
||||
|
||||
#define DASH_INC_PRE "#include \""
|
||||
#define DASH_INC_POST "\""
|
||||
|
||||
char *ProgramName;
|
||||
|
||||
char *directives[] = {
|
||||
"if",
|
||||
"ifdef",
|
||||
"ifndef",
|
||||
"else",
|
||||
"endif",
|
||||
"define",
|
||||
"undef",
|
||||
"include",
|
||||
"line",
|
||||
"pragma",
|
||||
"error",
|
||||
"ident",
|
||||
"sccs",
|
||||
"elif",
|
||||
"eject",
|
||||
"warning",
|
||||
"include_next",
|
||||
NULL
|
||||
};
|
||||
|
||||
#define MAKEDEPEND
|
||||
#include "imakemdep.h" /* from config sources */
|
||||
#undef MAKEDEPEND
|
||||
|
||||
struct inclist inclist[ MAXFILES ],
|
||||
*inclistp = inclist,
|
||||
*inclistnext = inclist,
|
||||
maininclist;
|
||||
|
||||
static char *filelist[ MAXFILES ];
|
||||
char *includedirs[ MAXDIRS + 1 ],
|
||||
**includedirsnext = includedirs;
|
||||
char *notdotdot[ MAXDIRS ];
|
||||
static int cmdinc_count = 0;
|
||||
static char *cmdinc_list[ 2 * MAXINCFILES ];
|
||||
char *objprefix = "";
|
||||
char *objsuffix = OBJSUFFIX;
|
||||
static char *startat = "# DO NOT DELETE";
|
||||
int width = 78;
|
||||
static boolean append = FALSE;
|
||||
boolean printed = FALSE;
|
||||
boolean verbose = FALSE;
|
||||
boolean show_where_not = FALSE;
|
||||
/* Warn on multiple includes of same file */
|
||||
boolean warn_multiple = FALSE;
|
||||
|
||||
static void setfile_cmdinc(struct filepointer *filep, long count, char **list);
|
||||
static void redirect(char *line, char *makefile);
|
||||
|
||||
static
|
||||
#ifdef SIGNALRETURNSINT
|
||||
int
|
||||
#else
|
||||
void
|
||||
#endif
|
||||
catch (int sig)
|
||||
{
|
||||
fflush (stdout);
|
||||
fatalerr ("got signal %d\n", sig);
|
||||
}
|
||||
|
||||
#if defined(USG) || (defined(i386) && defined(SYSV)) || defined(WIN32) || defined(__UNIXOS2__) || defined(Lynx_22) || defined(__CYGWIN__)
|
||||
#define USGISH
|
||||
#endif
|
||||
|
||||
#ifndef USGISH
|
||||
#ifdef X_NOT_POSIX
|
||||
#define sigaction sigvec
|
||||
#define sa_handler sv_handler
|
||||
#define sa_mask sv_mask
|
||||
#define sa_flags sv_flags
|
||||
#endif
|
||||
struct sigaction sig_act;
|
||||
#endif /* USGISH */
|
||||
|
||||
int
|
||||
main(int argc, char *argv[])
|
||||
{
|
||||
char **fp = filelist;
|
||||
char **incp = includedirs;
|
||||
char *p;
|
||||
struct inclist *ip;
|
||||
char *makefile = NULL;
|
||||
struct filepointer *filecontent;
|
||||
struct symtab *psymp = predefs;
|
||||
char *endmarker = NULL;
|
||||
char *defincdir = NULL;
|
||||
char **undeflist = NULL;
|
||||
int numundefs = 0, i;
|
||||
register char offset;
|
||||
|
||||
ProgramName = argv[0];
|
||||
|
||||
while (psymp->s_name)
|
||||
{
|
||||
define2(psymp->s_name, psymp->s_value, &maininclist);
|
||||
psymp++;
|
||||
}
|
||||
if (argc == 2 && argv[1][0] == '@') {
|
||||
struct stat ast;
|
||||
int afd;
|
||||
char *args;
|
||||
char **nargv;
|
||||
int nargc;
|
||||
char quotechar = '\0';
|
||||
|
||||
nargc = 1;
|
||||
if ((afd = open(argv[1]+1, O_RDONLY)) < 0)
|
||||
fatalerr("cannot open \"%s\"\n", argv[1]+1);
|
||||
fstat(afd, &ast);
|
||||
args = (char *)malloc(ast.st_size + 1);
|
||||
if ((ast.st_size = read(afd, args, ast.st_size)) < 0)
|
||||
fatalerr("failed to read %s\n", argv[1]+1);
|
||||
args[ast.st_size] = '\0';
|
||||
close(afd);
|
||||
for (p = args; *p; p++) {
|
||||
if (quotechar) {
|
||||
if (quotechar == '\\' ||
|
||||
(*p == quotechar && p[-1] != '\\'))
|
||||
quotechar = '\0';
|
||||
continue;
|
||||
}
|
||||
switch (*p) {
|
||||
case '\\':
|
||||
case '"':
|
||||
case '\'':
|
||||
quotechar = *p;
|
||||
break;
|
||||
case ' ':
|
||||
case '\n':
|
||||
*p = '\0';
|
||||
if (p > args && p[-1])
|
||||
nargc++;
|
||||
break;
|
||||
}
|
||||
}
|
||||
if (p[-1])
|
||||
nargc++;
|
||||
nargv = (char **)malloc(nargc * sizeof(char *));
|
||||
nargv[0] = argv[0];
|
||||
argc = 1;
|
||||
for (p = args; argc < nargc; p += strlen(p) + 1)
|
||||
if (*p) nargv[argc++] = p;
|
||||
argv = nargv;
|
||||
}
|
||||
for(argc--, argv++; argc; argc--, argv++) {
|
||||
/* if looking for endmarker then check before parsing */
|
||||
if (endmarker && strcmp (endmarker, *argv) == 0) {
|
||||
endmarker = NULL;
|
||||
continue;
|
||||
}
|
||||
if (**argv != '-') {
|
||||
/* treat +thing as an option for C++ */
|
||||
if (endmarker && **argv == '+')
|
||||
continue;
|
||||
*fp++ = argv[0];
|
||||
continue;
|
||||
}
|
||||
switch(argv[0][1]) {
|
||||
case '-':
|
||||
endmarker = &argv[0][2];
|
||||
if (endmarker[0] == '\0') endmarker = "--";
|
||||
break;
|
||||
case 'D':
|
||||
offset = 2;
|
||||
if (argv[0][2] == '\0') {
|
||||
argv++;
|
||||
argc--;
|
||||
offset = 0;
|
||||
}
|
||||
/* offset +1 here since first def letter
|
||||
* cannot be `=`
|
||||
*/
|
||||
for (p = argv[0] + offset + 1; *p; p++)
|
||||
if (*p == '=') {
|
||||
*p = ' ';
|
||||
break;
|
||||
}
|
||||
define(argv[0] + offset, &maininclist);
|
||||
break;
|
||||
case 'I':
|
||||
if (incp >= includedirs + MAXDIRS)
|
||||
fatalerr("Too many -I flags.\n");
|
||||
*incp++ = argv[0]+2;
|
||||
if (**(incp-1) == '\0') {
|
||||
*(incp-1) = *(++argv);
|
||||
argc--;
|
||||
}
|
||||
break;
|
||||
case 'U':
|
||||
/* Undef's override all -D's so save them up */
|
||||
numundefs++;
|
||||
if (numundefs == 1)
|
||||
undeflist = malloc(sizeof(char *));
|
||||
else
|
||||
undeflist = realloc(undeflist,
|
||||
numundefs * sizeof(char *));
|
||||
offset = 2;
|
||||
if (argv[0][2] == '\0') {
|
||||
argv++;
|
||||
argc--;
|
||||
offset = 0;
|
||||
}
|
||||
undeflist[numundefs - 1] = argv[0] + offset;
|
||||
break;
|
||||
case 'Y':
|
||||
defincdir = argv[0]+2;
|
||||
break;
|
||||
/* do not use if endmarker processing */
|
||||
case 'a':
|
||||
if (endmarker) break;
|
||||
append = TRUE;
|
||||
break;
|
||||
case 'w':
|
||||
if (endmarker) break;
|
||||
if (argv[0][2] == '\0') {
|
||||
argv++;
|
||||
argc--;
|
||||
width = atoi(argv[0]);
|
||||
} else
|
||||
width = atoi(argv[0]+2);
|
||||
break;
|
||||
case 'o':
|
||||
if (endmarker) break;
|
||||
if (argv[0][2] == '\0') {
|
||||
argv++;
|
||||
argc--;
|
||||
objsuffix = argv[0];
|
||||
} else
|
||||
objsuffix = argv[0]+2;
|
||||
break;
|
||||
case 'p':
|
||||
if (endmarker) break;
|
||||
if (argv[0][2] == '\0') {
|
||||
argv++;
|
||||
argc--;
|
||||
objprefix = argv[0];
|
||||
} else
|
||||
objprefix = argv[0]+2;
|
||||
break;
|
||||
case 'v':
|
||||
if (endmarker) break;
|
||||
verbose = TRUE;
|
||||
#ifdef DEBUG
|
||||
if (argv[0][2])
|
||||
_debugmask = atoi(argv[0]+2);
|
||||
#endif
|
||||
break;
|
||||
case 's':
|
||||
if (endmarker) break;
|
||||
startat = argv[0]+2;
|
||||
if (*startat == '\0') {
|
||||
startat = *(++argv);
|
||||
argc--;
|
||||
}
|
||||
if (*startat != '#')
|
||||
fatalerr("-s flag's value should start %s\n",
|
||||
"with '#'.");
|
||||
break;
|
||||
case 'f':
|
||||
if (endmarker) break;
|
||||
makefile = argv[0]+2;
|
||||
if (*makefile == '\0') {
|
||||
makefile = *(++argv);
|
||||
argc--;
|
||||
}
|
||||
break;
|
||||
|
||||
case 'm':
|
||||
warn_multiple = TRUE;
|
||||
break;
|
||||
|
||||
/* Ignore -O, -g so we can just pass ${CFLAGS} to
|
||||
makedepend
|
||||
*/
|
||||
case 'O':
|
||||
case 'g':
|
||||
break;
|
||||
case 'i':
|
||||
if (strcmp(&argv[0][1],"include") == 0) {
|
||||
char *buf;
|
||||
if (argc<2)
|
||||
fatalerr("option -include is a "
|
||||
"missing its parameter\n");
|
||||
if (cmdinc_count >= MAXINCFILES)
|
||||
fatalerr("Too many -include flags.\n");
|
||||
argc--;
|
||||
argv++;
|
||||
buf = malloc(strlen(DASH_INC_PRE) +
|
||||
strlen(argv[0]) +
|
||||
strlen(DASH_INC_POST) + 1);
|
||||
if(!buf)
|
||||
fatalerr("out of memory at "
|
||||
"-include string\n");
|
||||
cmdinc_list[2 * cmdinc_count + 0] = argv[0];
|
||||
cmdinc_list[2 * cmdinc_count + 1] = buf;
|
||||
cmdinc_count++;
|
||||
break;
|
||||
}
|
||||
/* intentional fall through */
|
||||
default:
|
||||
if (endmarker) break;
|
||||
/* fatalerr("unknown opt = %s\n", argv[0]); */
|
||||
warning("ignoring option %s\n", argv[0]);
|
||||
}
|
||||
}
|
||||
/* Now do the undefs from the command line */
|
||||
for (i = 0; i < numundefs; i++)
|
||||
undefine(undeflist[i], &maininclist);
|
||||
if (numundefs > 0)
|
||||
free(undeflist);
|
||||
|
||||
if (!defincdir) {
|
||||
#ifdef PREINCDIR
|
||||
if (incp >= includedirs + MAXDIRS)
|
||||
fatalerr("Too many -I flags.\n");
|
||||
*incp++ = PREINCDIR;
|
||||
#endif
|
||||
#if defined(__UNIXOS2__) || defined(_MSC_VER)
|
||||
{
|
||||
#if defined(_MSC_VER)
|
||||
char *includepath = getenv("INCLUDE");
|
||||
#else
|
||||
char *includepath = getenv("C_INCLUDE_PATH");
|
||||
#endif
|
||||
/* can have more than one component */
|
||||
if (includepath) {
|
||||
char *beg, *end;
|
||||
beg= (char*)strdup(includepath);
|
||||
for (;;) {
|
||||
end = (char*)strchr(beg,';');
|
||||
if (end) *end = 0;
|
||||
if (incp >= includedirs + MAXDIRS)
|
||||
fatalerr("Too many include dirs\n");
|
||||
*incp++ = beg;
|
||||
if (!end) break;
|
||||
beg = end+1;
|
||||
}
|
||||
}
|
||||
}
|
||||
#else /* !__UNIXOS2__ && !_MSC_VER, does not use INCLUDEDIR at all */
|
||||
if (incp >= includedirs + MAXDIRS)
|
||||
fatalerr("Too many -I flags.\n");
|
||||
*incp++ = INCLUDEDIR;
|
||||
#endif
|
||||
|
||||
#ifdef EXTRAINCDIR
|
||||
if (incp >= includedirs + MAXDIRS)
|
||||
fatalerr("Too many -I flags.\n");
|
||||
*incp++ = EXTRAINCDIR;
|
||||
#endif
|
||||
|
||||
#ifdef POSTINCDIR
|
||||
if (incp >= includedirs + MAXDIRS)
|
||||
fatalerr("Too many -I flags.\n");
|
||||
*incp++ = POSTINCDIR;
|
||||
#endif
|
||||
} else if (*defincdir) {
|
||||
if (incp >= includedirs + MAXDIRS)
|
||||
fatalerr("Too many -I flags.\n");
|
||||
*incp++ = defincdir;
|
||||
}
|
||||
|
||||
redirect(startat, makefile);
|
||||
|
||||
/*
|
||||
* catch signals.
|
||||
*/
|
||||
#ifdef USGISH
|
||||
/* should really reset SIGINT to SIG_IGN if it was. */
|
||||
#ifdef SIGHUP
|
||||
signal (SIGHUP, catch);
|
||||
#endif
|
||||
signal (SIGINT, catch);
|
||||
#ifdef SIGQUIT
|
||||
signal (SIGQUIT, catch);
|
||||
#endif
|
||||
signal (SIGILL, catch);
|
||||
#ifdef SIGBUS
|
||||
signal (SIGBUS, catch);
|
||||
#endif
|
||||
signal (SIGSEGV, catch);
|
||||
#ifdef SIGSYS
|
||||
signal (SIGSYS, catch);
|
||||
#endif
|
||||
#else
|
||||
sig_act.sa_handler = catch;
|
||||
#if defined(_POSIX_SOURCE) || !defined(X_NOT_POSIX)
|
||||
sigemptyset(&sig_act.sa_mask);
|
||||
sigaddset(&sig_act.sa_mask, SIGINT);
|
||||
sigaddset(&sig_act.sa_mask, SIGQUIT);
|
||||
#ifdef SIGBUS
|
||||
sigaddset(&sig_act.sa_mask, SIGBUS);
|
||||
#endif
|
||||
sigaddset(&sig_act.sa_mask, SIGILL);
|
||||
sigaddset(&sig_act.sa_mask, SIGSEGV);
|
||||
sigaddset(&sig_act.sa_mask, SIGHUP);
|
||||
sigaddset(&sig_act.sa_mask, SIGPIPE);
|
||||
#ifdef SIGSYS
|
||||
sigaddset(&sig_act.sa_mask, SIGSYS);
|
||||
#endif
|
||||
#else
|
||||
sig_act.sa_mask = ((1<<(SIGINT -1))
|
||||
|(1<<(SIGQUIT-1))
|
||||
#ifdef SIGBUS
|
||||
|(1<<(SIGBUS-1))
|
||||
#endif
|
||||
|(1<<(SIGILL-1))
|
||||
|(1<<(SIGSEGV-1))
|
||||
|(1<<(SIGHUP-1))
|
||||
|(1<<(SIGPIPE-1))
|
||||
#ifdef SIGSYS
|
||||
|(1<<(SIGSYS-1))
|
||||
#endif
|
||||
);
|
||||
#endif /* _POSIX_SOURCE */
|
||||
sig_act.sa_flags = 0;
|
||||
sigaction(SIGHUP, &sig_act, (struct sigaction *)0);
|
||||
sigaction(SIGINT, &sig_act, (struct sigaction *)0);
|
||||
sigaction(SIGQUIT, &sig_act, (struct sigaction *)0);
|
||||
sigaction(SIGILL, &sig_act, (struct sigaction *)0);
|
||||
#ifdef SIGBUS
|
||||
sigaction(SIGBUS, &sig_act, (struct sigaction *)0);
|
||||
#endif
|
||||
sigaction(SIGSEGV, &sig_act, (struct sigaction *)0);
|
||||
#ifdef SIGSYS
|
||||
sigaction(SIGSYS, &sig_act, (struct sigaction *)0);
|
||||
#endif
|
||||
#endif /* USGISH */
|
||||
|
||||
/*
|
||||
* now peruse through the list of files.
|
||||
*/
|
||||
for(fp=filelist; *fp; fp++) {
|
||||
DBG_PRINT(stderr,"file: %s\n",*fp);
|
||||
filecontent = getfile(*fp);
|
||||
setfile_cmdinc(filecontent, cmdinc_count, cmdinc_list);
|
||||
ip = newinclude(*fp, (char *)NULL);
|
||||
|
||||
find_includes(filecontent, ip, ip, 0, FALSE);
|
||||
freefile(filecontent);
|
||||
recursive_pr_include(ip, ip->i_file, base_name(*fp));
|
||||
inc_clean();
|
||||
}
|
||||
if (printed)
|
||||
printf("\n");
|
||||
return 0;
|
||||
}
|
||||
|
||||
#ifdef __UNIXOS2__
|
||||
/*
|
||||
* eliminate \r chars from file
|
||||
*/
|
||||
static int
|
||||
elim_cr(char *buf, int sz)
|
||||
{
|
||||
int i,wp;
|
||||
for (i= wp = 0; i<sz; i++) {
|
||||
if (buf[i] != '\r')
|
||||
buf[wp++] = buf[i];
|
||||
}
|
||||
return wp;
|
||||
}
|
||||
#endif
|
||||
|
||||
struct filepointer *
|
||||
getfile(char *file)
|
||||
{
|
||||
int fd;
|
||||
struct filepointer *content;
|
||||
struct stat st;
|
||||
|
||||
content = (struct filepointer *)malloc(sizeof(struct filepointer));
|
||||
content->f_name = file;
|
||||
if ((fd = open(file, O_RDONLY)) < 0) {
|
||||
warning("cannot open \"%s\"\n", file);
|
||||
content->f_p = content->f_base = content->f_end = (char *)malloc(1);
|
||||
*content->f_p = '\0';
|
||||
return(content);
|
||||
}
|
||||
fstat(fd, &st);
|
||||
content->f_base = (char *)malloc(st.st_size+1);
|
||||
if (content->f_base == NULL)
|
||||
fatalerr("cannot allocate mem\n");
|
||||
if ((st.st_size = read(fd, content->f_base, st.st_size)) < 0)
|
||||
fatalerr("failed to read %s\n", file);
|
||||
#ifdef __UNIXOS2__
|
||||
st.st_size = elim_cr(content->f_base,st.st_size);
|
||||
#endif
|
||||
close(fd);
|
||||
content->f_len = st.st_size+1;
|
||||
content->f_p = content->f_base;
|
||||
content->f_end = content->f_base + st.st_size;
|
||||
*content->f_end = '\0';
|
||||
content->f_line = 0;
|
||||
content->cmdinc_count = 0;
|
||||
content->cmdinc_list = NULL;
|
||||
content->cmdinc_line = 0;
|
||||
return(content);
|
||||
}
|
||||
|
||||
void
|
||||
setfile_cmdinc(struct filepointer* filep, long count, char** list)
|
||||
{
|
||||
filep->cmdinc_count = count;
|
||||
filep->cmdinc_list = list;
|
||||
filep->cmdinc_line = 0;
|
||||
}
|
||||
|
||||
void
|
||||
freefile(struct filepointer *fp)
|
||||
{
|
||||
free(fp->f_base);
|
||||
free(fp);
|
||||
}
|
||||
|
||||
char *copy(char *str)
|
||||
{
|
||||
char *p = (char *)malloc(strlen(str) + 1);
|
||||
|
||||
strcpy(p, str);
|
||||
return(p);
|
||||
}
|
||||
|
||||
int
|
||||
match(char *str, char **list)
|
||||
{
|
||||
int i;
|
||||
|
||||
for (i=0; *list; i++, list++)
|
||||
if (strcmp(str, *list) == 0)
|
||||
return(i);
|
||||
return(-1);
|
||||
}
|
||||
|
||||
/*
|
||||
* Get the next line. We only return lines beginning with '#' since that
|
||||
* is all this program is ever interested in.
|
||||
*/
|
||||
char *getnextline(struct filepointer *filep)
|
||||
{
|
||||
char *p, /* walking pointer */
|
||||
*eof, /* end of file pointer */
|
||||
*bol; /* beginning of line pointer */
|
||||
int lineno; /* line number */
|
||||
boolean whitespace = FALSE;
|
||||
|
||||
/*
|
||||
* Fake the "-include" line files in form of #include to the
|
||||
* start of each file.
|
||||
*/
|
||||
if (filep->cmdinc_line < filep->cmdinc_count) {
|
||||
char *inc = filep->cmdinc_list[2 * filep->cmdinc_line + 0];
|
||||
char *buf = filep->cmdinc_list[2 * filep->cmdinc_line + 1];
|
||||
filep->cmdinc_line++;
|
||||
sprintf(buf,"%s%s%s",DASH_INC_PRE,inc,DASH_INC_POST);
|
||||
DBG_PRINT(stderr,"%s\n",buf);
|
||||
return(buf);
|
||||
}
|
||||
|
||||
p = filep->f_p;
|
||||
eof = filep->f_end;
|
||||
if (p >= eof)
|
||||
return((char *)NULL);
|
||||
lineno = filep->f_line;
|
||||
|
||||
for (bol = p--; ++p < eof; ) {
|
||||
if ((bol == p) && ((*p == ' ') || (*p == '\t')))
|
||||
{
|
||||
/* Consume leading white-spaces for this line */
|
||||
while (((p+1) < eof) && ((*p == ' ') || (*p == '\t')))
|
||||
{
|
||||
p++;
|
||||
bol++;
|
||||
}
|
||||
whitespace = TRUE;
|
||||
}
|
||||
|
||||
if (*p == '/' && (p+1) < eof && *(p+1) == '*') {
|
||||
/* Consume C comments */
|
||||
*(p++) = ' ';
|
||||
*(p++) = ' ';
|
||||
while (p < eof && *p) {
|
||||
if (*p == '*' && (p+1) < eof && *(p+1) == '/') {
|
||||
*(p++) = ' ';
|
||||
*(p++) = ' ';
|
||||
break;
|
||||
}
|
||||
if (*p == '\n')
|
||||
lineno++;
|
||||
*(p++) = ' ';
|
||||
}
|
||||
--p;
|
||||
}
|
||||
else if (*p == '/' && (p+1) < eof && *(p+1) == '/') {
|
||||
/* Consume C++ comments */
|
||||
*(p++) = ' ';
|
||||
*(p++) = ' ';
|
||||
while (p < eof && *p) {
|
||||
if (*p == '\\' && (p+1) < eof &&
|
||||
*(p+1) == '\n') {
|
||||
*(p++) = ' ';
|
||||
lineno++;
|
||||
}
|
||||
else if (*p == '?' && (p+3) < eof &&
|
||||
*(p+1) == '?' &&
|
||||
*(p+2) == '/' &&
|
||||
*(p+3) == '\n') {
|
||||
*(p++) = ' ';
|
||||
*(p++) = ' ';
|
||||
*(p++) = ' ';
|
||||
lineno++;
|
||||
}
|
||||
else if (*p == '\n')
|
||||
break; /* to process end of line */
|
||||
*(p++) = ' ';
|
||||
}
|
||||
--p;
|
||||
}
|
||||
else if (*p == '\\' && (p+1) < eof && *(p+1) == '\n') {
|
||||
/* Consume backslash line terminations */
|
||||
*(p++) = ' ';
|
||||
*p = ' ';
|
||||
lineno++;
|
||||
}
|
||||
else if (*p == '?' && (p+3) < eof &&
|
||||
*(p+1) == '?' && *(p+2) == '/' && *(p+3) == '\n') {
|
||||
/* Consume trigraph'ed backslash line terminations */
|
||||
*(p++) = ' ';
|
||||
*(p++) = ' ';
|
||||
*(p++) = ' ';
|
||||
*p = ' ';
|
||||
lineno++;
|
||||
}
|
||||
else if (*p == '\n') {
|
||||
lineno++;
|
||||
if (*bol == '#') {
|
||||
char *cp;
|
||||
|
||||
*(p++) = '\0';
|
||||
/* punt lines with just # (yacc generated) */
|
||||
for (cp = bol+1;
|
||||
*cp && (*cp == ' ' || *cp == '\t'); cp++);
|
||||
if (*cp) goto done;
|
||||
--p;
|
||||
}
|
||||
bol = p+1;
|
||||
whitespace = FALSE;
|
||||
}
|
||||
}
|
||||
if (*bol != '#')
|
||||
bol = NULL;
|
||||
done:
|
||||
#if !defined(__UNIXOS2__) && !defined(_MSC_VER) && !defined(_WIN32)
|
||||
/* Don't print warnings for system header files */
|
||||
if (bol && whitespace && !strstr(filep->f_name, INCLUDEDIR)) {
|
||||
warning("%s: non-portable whitespace encountered at line %d\n",
|
||||
filep->f_name, lineno);
|
||||
}
|
||||
#endif
|
||||
filep->f_p = p;
|
||||
filep->f_line = lineno;
|
||||
#ifdef DEBUG_DUMP
|
||||
if (bol)
|
||||
DBG_PRINT(stderr,"%s\n",bol);
|
||||
#endif
|
||||
return(bol);
|
||||
}
|
||||
|
||||
/*
|
||||
* Strip the file name down to what we want to see in the Makefile.
|
||||
* It will have objprefix and objsuffix around it.
|
||||
*/
|
||||
char *base_name(char *file)
|
||||
{
|
||||
char *p;
|
||||
|
||||
file = copy(file);
|
||||
for(p=file+strlen(file); p>file && *p != '.'; p--) ;
|
||||
|
||||
if (*p == '.')
|
||||
*p = '\0';
|
||||
return(file);
|
||||
}
|
||||
|
||||
#if defined(USG) && !defined(CRAY) && !defined(SVR4) && !defined(__UNIXOS2__) && !defined(clipper) && !defined(__clipper__)
|
||||
int rename (char *from, char *to)
|
||||
{
|
||||
(void) unlink (to);
|
||||
if (link (from, to) == 0) {
|
||||
unlink (from);
|
||||
return 0;
|
||||
} else {
|
||||
return -1;
|
||||
}
|
||||
}
|
||||
#endif /* USGISH */
|
||||
|
||||
void
|
||||
redirect(char *line, char *makefile)
|
||||
{
|
||||
struct stat st;
|
||||
FILE *fdin, *fdout;
|
||||
char backup[ BUFSIZ ],
|
||||
buf[ BUFSIZ ];
|
||||
boolean found = FALSE;
|
||||
int len;
|
||||
|
||||
/*
|
||||
* if makefile is "-" then let it pour onto stdout.
|
||||
*/
|
||||
if (makefile && *makefile == '-' && *(makefile+1) == '\0') {
|
||||
puts(line);
|
||||
return;
|
||||
}
|
||||
|
||||
/*
|
||||
* use a default makefile is not specified.
|
||||
*/
|
||||
if (!makefile) {
|
||||
if (stat("Makefile", &st) == 0)
|
||||
makefile = "Makefile";
|
||||
else if (stat("makefile", &st) == 0)
|
||||
makefile = "makefile";
|
||||
else
|
||||
fatalerr("[mM]akefile is not present\n");
|
||||
}
|
||||
else
|
||||
stat(makefile, &st);
|
||||
if ((fdin = fopen(makefile, "r")) == NULL)
|
||||
fatalerr("cannot open \"%s\"\n", makefile);
|
||||
sprintf(backup, "%s.bak", makefile);
|
||||
unlink(backup);
|
||||
#if defined(WIN32) || defined(__UNIXOS2__) || defined(__CYGWIN__)
|
||||
fclose(fdin);
|
||||
#endif
|
||||
if (rename(makefile, backup) < 0)
|
||||
fatalerr("cannot rename %s to %s\n", makefile, backup);
|
||||
#if defined(WIN32) || defined(__UNIXOS2__) || defined(__CYGWIN__)
|
||||
if ((fdin = fopen(backup, "r")) == NULL)
|
||||
fatalerr("cannot open \"%s\"\n", backup);
|
||||
#endif
|
||||
if ((fdout = freopen(makefile, "w", stdout)) == NULL)
|
||||
fatalerr("cannot open \"%s\"\n", backup);
|
||||
len = strlen(line);
|
||||
while (!found && fgets(buf, BUFSIZ, fdin)) {
|
||||
if (*buf == '#' && strncmp(line, buf, len) == 0)
|
||||
found = TRUE;
|
||||
fputs(buf, fdout);
|
||||
}
|
||||
if (!found) {
|
||||
if (verbose)
|
||||
warning("Adding new delimiting line \"%s\" and dependencies...\n",
|
||||
line);
|
||||
puts(line); /* same as fputs(fdout); but with newline */
|
||||
} else if (append) {
|
||||
while (fgets(buf, BUFSIZ, fdin)) {
|
||||
fputs(buf, fdout);
|
||||
}
|
||||
}
|
||||
fflush(fdout);
|
||||
#if defined(USGISH) || defined(_SEQUENT_) || defined(USE_CHMOD)
|
||||
chmod(makefile, st.st_mode);
|
||||
#else
|
||||
fchmod(fileno(fdout), st.st_mode);
|
||||
#endif /* USGISH */
|
||||
}
|
||||
|
||||
void
|
||||
fatalerr(char *msg, ...)
|
||||
{
|
||||
va_list args;
|
||||
fprintf(stderr, "%s: error: ", ProgramName);
|
||||
va_start(args, msg);
|
||||
vfprintf(stderr, msg, args);
|
||||
va_end(args);
|
||||
exit (1);
|
||||
}
|
||||
|
||||
void
|
||||
warning(char *msg, ...)
|
||||
{
|
||||
va_list args;
|
||||
fprintf(stderr, "%s: warning: ", ProgramName);
|
||||
va_start(args, msg);
|
||||
vfprintf(stderr, msg, args);
|
||||
va_end(args);
|
||||
}
|
||||
|
||||
void
|
||||
warning1(char *msg, ...)
|
||||
{
|
||||
va_list args;
|
||||
va_start(args, msg);
|
||||
vfprintf(stderr, msg, args);
|
||||
va_end(args);
|
||||
}
|
|
@ -1,382 +0,0 @@
|
|||
.\" $Xorg: mkdepend.man,v 1.5 2001/02/09 02:03:16 xorgcvs Exp $
|
||||
.\" Copyright (c) 1993, 1994, 1998 The Open Group
|
||||
.\"
|
||||
.\" Permission to use, copy, modify, distribute, and sell this software and its
|
||||
.\" documentation for any purpose is hereby granted without fee, provided that
|
||||
.\" the above copyright notice appear in all copies and that both that
|
||||
.\" copyright notice and this permission notice appear in supporting
|
||||
.\" documentation.
|
||||
.\"
|
||||
.\" The above copyright notice and this permission notice shall be included in
|
||||
.\" all copies or substantial portions of the Software.
|
||||
.\"
|
||||
.\" THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||
.\" IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||
.\" FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
|
||||
.\" THE OPEN GROUP BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
|
||||
.\" WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF
|
||||
.\" OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
||||
.\" SOFTWARE.
|
||||
.\"
|
||||
.\" Except as contained in this notice, the name of The Open Group shall not
|
||||
.\" be used in advertising or otherwise to promote the sale, use or other
|
||||
.\" dealing in this Software without prior written authorization from The
|
||||
.\" Open Group.
|
||||
.\"
|
||||
.\" $XFree86: xc/config/makedepend/mkdepend.man,v 1.7 2002/12/14 02:39:45 dawes Exp $
|
||||
.\"
|
||||
.TH MAKEDEPEND 1 __xorgversion__
|
||||
.UC 4
|
||||
.SH NAME
|
||||
makedepend \- create dependencies in makefiles
|
||||
.SH SYNOPSIS
|
||||
.B makedepend
|
||||
[
|
||||
.BI \-D name\fB=\fPdef
|
||||
] [
|
||||
.BI \-D name
|
||||
] [
|
||||
.BI \-I includedir
|
||||
] [
|
||||
.BI \-Y includedir
|
||||
] [
|
||||
.B \-a
|
||||
] [
|
||||
.BI \-f makefile
|
||||
] [
|
||||
.BI \-include \ file
|
||||
] [
|
||||
.BI \-o objsuffix
|
||||
] [
|
||||
.BI \-p objprefix
|
||||
] [
|
||||
.BI \-s string
|
||||
] [
|
||||
.BI \-w width
|
||||
] [
|
||||
.B \-v
|
||||
] [
|
||||
.B \-m
|
||||
] [
|
||||
\-\^\-
|
||||
.I otheroptions
|
||||
\-\^\-
|
||||
]
|
||||
.I sourcefile
|
||||
\&.\|.\|.
|
||||
.br
|
||||
.SH DESCRIPTION
|
||||
The
|
||||
.B makedepend
|
||||
program reads each
|
||||
.I sourcefile
|
||||
in sequence and parses it like a C-preprocessor,
|
||||
processing all
|
||||
.I #include,
|
||||
.I #define,
|
||||
.I #undef,
|
||||
.I #ifdef,
|
||||
.I #ifndef,
|
||||
.I #endif,
|
||||
.I #if,
|
||||
.I #elif
|
||||
and
|
||||
.I #else
|
||||
directives so that it can correctly tell which
|
||||
.I #include,
|
||||
directives would be used in a compilation.
|
||||
Any
|
||||
.I #include,
|
||||
directives can reference files having other
|
||||
.I #include
|
||||
directives, and parsing will occur in these files as well.
|
||||
.PP
|
||||
Every file that a
|
||||
.I sourcefile
|
||||
includes,
|
||||
directly or indirectly,
|
||||
is what
|
||||
.B makedepend
|
||||
calls a \fIdependency.\fP
|
||||
These dependencies are then written to a
|
||||
.I makefile
|
||||
in such a way that
|
||||
.B make(1)
|
||||
will know which object files must be recompiled when a dependency has changed.
|
||||
.PP
|
||||
By default,
|
||||
.B makedepend
|
||||
places its output in the file named
|
||||
.I makefile
|
||||
if it exists, otherwise
|
||||
.I Makefile.
|
||||
An alternate makefile may be specified with the
|
||||
.B \-f
|
||||
option.
|
||||
It first searches the makefile for
|
||||
the line
|
||||
.sp
|
||||
\& # DO NOT DELETE THIS LINE \-\^\- make depend depends on it.
|
||||
.sp
|
||||
or one provided with the
|
||||
.B \-s
|
||||
option,
|
||||
as a delimiter for the dependency output.
|
||||
If it finds it, it will delete everything
|
||||
following this to the end of the makefile
|
||||
and put the output after this line.
|
||||
If it doesn't find it, the program
|
||||
will append the string to the end of the makefile
|
||||
and place the output following that.
|
||||
For each
|
||||
.I sourcefile
|
||||
appearing on the command line,
|
||||
.B makedepend
|
||||
puts lines in the makefile of the form
|
||||
.sp
|
||||
sourcefile.o:\0dfile .\|.\|.
|
||||
.sp
|
||||
Where \fIsourcefile.o\fP is the name from the command
|
||||
line with its suffix replaced with ``.o'',
|
||||
and \fIdfile\fP is a dependency discovered in a
|
||||
.I #include
|
||||
directive while parsing
|
||||
.I sourcefile
|
||||
or one of the files it included.
|
||||
.SH EXAMPLE
|
||||
Normally,
|
||||
.B makedepend
|
||||
will be used in a makefile target so that typing ``make depend'' will
|
||||
bring the dependencies up to date for the makefile.
|
||||
For example,
|
||||
.nf
|
||||
SRCS\0=\0file1.c\0file2.c\0.\|.\|.
|
||||
CFLAGS\0=\0\-O\0\-DHACK\0\-I\^.\^.\^/foobar\0\-xyz
|
||||
depend:
|
||||
makedepend\0\-\^\-\0$(CFLAGS)\0\-\^\-\0$(SRCS)
|
||||
.fi
|
||||
.SH OPTIONS
|
||||
The program
|
||||
will ignore any option that it does not understand so that you may use
|
||||
the same arguments that you would for
|
||||
.B cc(1).
|
||||
.TP 5
|
||||
.B \-D\fIname\fP=\fIdef\fP \fRor\fP \-D\fIname\fP
|
||||
Define.
|
||||
This places a definition for
|
||||
.I name
|
||||
in
|
||||
.B makedepend's
|
||||
symbol table.
|
||||
Without
|
||||
.I =def\|
|
||||
the symbol becomes defined as ``1''.
|
||||
.TP 5
|
||||
.B \-I\fIincludedir\fP
|
||||
Include directory.
|
||||
This option tells
|
||||
.B makedepend
|
||||
to prepend
|
||||
.I includedir
|
||||
to its list of directories to search when it encounters
|
||||
a
|
||||
.I #include
|
||||
directive.
|
||||
By default,
|
||||
.B makedepend
|
||||
only searches the standard include directories (usually /usr/include
|
||||
and possibly a compiler-dependent directory).
|
||||
.TP 5
|
||||
.B \-Y\fIincludedir\fP
|
||||
Replace all of the standard include directories with the single specified
|
||||
include directory; you can omit the
|
||||
.I includedir
|
||||
to simply prevent searching the standard include directories.
|
||||
.TP 5
|
||||
.B \-a
|
||||
Append the dependencies to the end of the file instead of replacing them.
|
||||
.TP 5
|
||||
.B \-f\fImakefile\fP
|
||||
Filename.
|
||||
This allows you to specify an alternate makefile in which
|
||||
.B makedepend
|
||||
can place its output.
|
||||
Specifying ``\-'' as the file name (i.e., \fB\-f\-\fP) sends the
|
||||
output to standard output instead of modifying an existing file.
|
||||
.TP 5
|
||||
.B \-include \fIfile\fP
|
||||
Process file as input, and include all the resulting output
|
||||
before processing the regular input file. This has the same
|
||||
affect as if the specified file is an include statement that
|
||||
appears before the very first line of the regular input file.
|
||||
.TP 5
|
||||
.B \-o\fIobjsuffix\fP
|
||||
Object file suffix.
|
||||
Some systems may have object files whose suffix is something other
|
||||
than ``.o''.
|
||||
This option allows you to specify another suffix, such as
|
||||
``.b'' with
|
||||
.I \-o.b
|
||||
or ``:obj''
|
||||
with
|
||||
.I \-o:obj
|
||||
and so forth.
|
||||
.TP 5
|
||||
.B \-p\fIobjprefix\fP
|
||||
Object file prefix.
|
||||
The prefix is prepended to the name of the object file. This is
|
||||
usually used to designate a different directory for the object file.
|
||||
The default is the empty string.
|
||||
.TP 5
|
||||
.B \-s\fIstring\fP
|
||||
Starting string delimiter.
|
||||
This option permits you to specify
|
||||
a different string for
|
||||
.B makedepend
|
||||
to look for in the makefile.
|
||||
.TP 5
|
||||
.B \-w\fIwidth\fP
|
||||
Line width.
|
||||
Normally,
|
||||
.B makedepend
|
||||
will ensure that every output line that it writes will be no wider than
|
||||
78 characters for the sake of readability.
|
||||
This option enables you to change this width.
|
||||
.TP 5
|
||||
.B \-v
|
||||
Verbose operation.
|
||||
This option causes
|
||||
.B makedepend
|
||||
to emit the list of files included by each input file.
|
||||
.TP 5
|
||||
.B \-m
|
||||
Warn about multiple inclusion.
|
||||
This option causes
|
||||
.B makedepend
|
||||
to produce a warning if any input file includes another file more than
|
||||
once. In previous versions of
|
||||
.B makedepend
|
||||
this was the default behavior; the default has been changed to better
|
||||
match the behavior of the C compiler, which does not consider multiple
|
||||
inclusion to be an error. This option is provided for backward
|
||||
compatibility, and to aid in debugging problems related to multiple
|
||||
inclusion.
|
||||
.TP 5
|
||||
.B "\-\^\- \fIoptions\fP \-\^\-"
|
||||
If
|
||||
.B makedepend
|
||||
encounters a double hyphen (\-\^\-) in the argument list,
|
||||
then any unrecognized argument following it
|
||||
will be silently ignored; a second double hyphen terminates this
|
||||
special treatment.
|
||||
In this way,
|
||||
.B makedepend
|
||||
can be made to safely ignore esoteric compiler arguments that might
|
||||
normally be found in a CFLAGS
|
||||
.B make
|
||||
macro (see the
|
||||
.B EXAMPLE
|
||||
section above).
|
||||
All options that
|
||||
.B makedepend
|
||||
recognizes and appear between the pair of double hyphens
|
||||
are processed normally.
|
||||
.SH ALGORITHM
|
||||
The approach used in this program enables it to run an order of magnitude
|
||||
faster than any other ``dependency generator'' I have ever seen.
|
||||
Central to this performance are two assumptions:
|
||||
that all files compiled by a single
|
||||
makefile will be compiled with roughly the same
|
||||
.I \-I
|
||||
and
|
||||
.I \-D
|
||||
options;
|
||||
and that most files in a single directory will include largely the
|
||||
same files.
|
||||
.PP
|
||||
Given these assumptions,
|
||||
.B makedepend
|
||||
expects to be called once for each makefile, with
|
||||
all source files that are maintained by the
|
||||
makefile appearing on the command line.
|
||||
It parses each source and include
|
||||
file exactly once, maintaining an internal symbol table
|
||||
for each.
|
||||
Thus, the first file on the command line will take an amount of time
|
||||
proportional to the amount of time that a normal C preprocessor takes.
|
||||
But on subsequent files, if it encounters an include file
|
||||
that it has already parsed, it does not parse it again.
|
||||
.PP
|
||||
For example,
|
||||
imagine you are compiling two files,
|
||||
.I file1.c
|
||||
and
|
||||
.I file2.c,
|
||||
they each include the header file
|
||||
.I header.h,
|
||||
and the file
|
||||
.I header.h
|
||||
in turn includes the files
|
||||
.I def1.h
|
||||
and
|
||||
.I def2.h.
|
||||
When you run the command
|
||||
.sp
|
||||
makedepend\0file1.c\0file2.c
|
||||
.sp
|
||||
.B makedepend
|
||||
will parse
|
||||
.I file1.c
|
||||
and consequently,
|
||||
.I header.h
|
||||
and then
|
||||
.I def1.h
|
||||
and
|
||||
.I def2.h.
|
||||
It then decides that the dependencies for this file are
|
||||
.sp
|
||||
file1.o:\0header.h\0def1.h\0def2.h
|
||||
.sp
|
||||
But when the program parses
|
||||
.I file2.c
|
||||
and discovers that it, too, includes
|
||||
.I header.h,
|
||||
it does not parse the file,
|
||||
but simply adds
|
||||
.I header.h,
|
||||
.I def1.h
|
||||
and
|
||||
.I def2.h
|
||||
to the list of dependencies for
|
||||
.I file2.o.
|
||||
.SH "SEE ALSO"
|
||||
cc(1), make(1)
|
||||
.SH BUGS
|
||||
.B makedepend
|
||||
parses, but does not currently evaluate, the SVR4 #predicate(token-list)
|
||||
preprocessor expression; such expressions are simply assumed to be true.
|
||||
This may cause the wrong
|
||||
.I #include
|
||||
directives to be evaluated.
|
||||
.PP
|
||||
Imagine you are parsing two files,
|
||||
say
|
||||
.I file1.c
|
||||
and
|
||||
.I file2.c,
|
||||
each includes the file
|
||||
.I def.h.
|
||||
The list of files that
|
||||
.I def.h
|
||||
includes might truly be different when
|
||||
.I def.h
|
||||
is included by
|
||||
.I file1.c
|
||||
than when it is included by
|
||||
.I file2.c.
|
||||
But once
|
||||
.B makedepend
|
||||
arrives at a list of dependencies for a file,
|
||||
it is cast in concrete.
|
||||
.SH AUTHOR
|
||||
Todd Brunhoff, Tektronix, Inc. and MIT Project Athena
|
|
@ -1,693 +0,0 @@
|
|||
/* $Xorg: parse.c,v 1.6 2001/02/09 02:03:16 xorgcvs Exp $ */
|
||||
/*
|
||||
|
||||
Copyright (c) 1993, 1994, 1998 The Open Group
|
||||
|
||||
Permission to use, copy, modify, distribute, and sell this software and its
|
||||
documentation for any purpose is hereby granted without fee, provided that
|
||||
the above copyright notice appear in all copies and that both that
|
||||
copyright notice and this permission notice appear in supporting
|
||||
documentation.
|
||||
|
||||
The above copyright notice and this permission notice shall be included in
|
||||
all copies or substantial portions of the Software.
|
||||
|
||||
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
||||
OPEN GROUP BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN
|
||||
AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
|
||||
CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
||||
|
||||
Except as contained in this notice, the name of The Open Group shall not be
|
||||
used in advertising or otherwise to promote the sale, use or other dealings
|
||||
in this Software without prior written authorization from The Open Group.
|
||||
|
||||
*/
|
||||
/* $XFree86: xc/config/makedepend/parse.c,v 1.12 2002/02/26 05:09:10 tsi Exp $ */
|
||||
|
||||
#include "def.h"
|
||||
|
||||
extern char *directives[];
|
||||
extern struct inclist inclist[ MAXFILES ],
|
||||
*inclistnext,
|
||||
maininclist;
|
||||
extern char *includedirs[ ],
|
||||
**includedirsnext;
|
||||
|
||||
static int deftype (char *line, struct filepointer *filep,
|
||||
struct inclist *file_red, struct inclist *file,
|
||||
int parse_it);
|
||||
static int zero_value(char *filename, char *exp, struct filepointer *filep,
|
||||
struct inclist *file_red);
|
||||
static int merge2defines(struct inclist *file1, struct inclist *file2);
|
||||
|
||||
static int
|
||||
gobble(struct filepointer *filep, struct inclist *file,
|
||||
struct inclist *file_red)
|
||||
{
|
||||
char *line;
|
||||
int type;
|
||||
|
||||
while ((line = getnextline(filep))) {
|
||||
switch(type = deftype(line, filep, file_red, file, FALSE)) {
|
||||
case IF:
|
||||
case IFFALSE:
|
||||
case IFGUESSFALSE:
|
||||
case IFDEF:
|
||||
case IFNDEF:
|
||||
type = gobble(filep, file, file_red);
|
||||
while ((type == ELIF) || (type == ELIFFALSE) ||
|
||||
(type == ELIFGUESSFALSE))
|
||||
type = gobble(filep, file, file_red);
|
||||
if (type == ELSE)
|
||||
(void)gobble(filep, file, file_red);
|
||||
break;
|
||||
case ELSE:
|
||||
case ENDIF:
|
||||
debug(0,("%s, line %d: #%s\n",
|
||||
file->i_file, filep->f_line,
|
||||
directives[type]));
|
||||
return(type);
|
||||
case DEFINE:
|
||||
case UNDEF:
|
||||
case INCLUDE:
|
||||
case INCLUDEDOT:
|
||||
case PRAGMA:
|
||||
case ERROR:
|
||||
case IDENT:
|
||||
case SCCS:
|
||||
case EJECT:
|
||||
case WARNING:
|
||||
case INCLUDENEXT:
|
||||
case INCLUDENEXTDOT:
|
||||
break;
|
||||
case ELIF:
|
||||
case ELIFFALSE:
|
||||
case ELIFGUESSFALSE:
|
||||
return(type);
|
||||
case -1:
|
||||
warning("%s", file_red->i_file);
|
||||
if (file_red != file)
|
||||
warning1(" (reading %s)", file->i_file);
|
||||
warning1(", line %d: unknown directive == \"%s\"\n",
|
||||
filep->f_line, line);
|
||||
break;
|
||||
}
|
||||
}
|
||||
return(-1);
|
||||
}
|
||||
|
||||
/*
|
||||
* Decide what type of # directive this line is.
|
||||
*/
|
||||
static int
|
||||
deftype (char *line, struct filepointer *filep,
|
||||
struct inclist *file_red, struct inclist *file, int parse_it)
|
||||
{
|
||||
register char *p;
|
||||
char *directive, savechar, *q;
|
||||
register int ret;
|
||||
|
||||
/*
|
||||
* Parse the directive...
|
||||
*/
|
||||
directive=line+1;
|
||||
while (*directive == ' ' || *directive == '\t')
|
||||
directive++;
|
||||
|
||||
p = directive;
|
||||
while ((*p == '_') || (*p >= 'a' && *p <= 'z'))
|
||||
p++;
|
||||
savechar = *p;
|
||||
*p = '\0';
|
||||
ret = match(directive, directives);
|
||||
*p = savechar;
|
||||
|
||||
/* If we don't recognize this compiler directive or we happen to just
|
||||
* be gobbling up text while waiting for an #endif or #elif or #else
|
||||
* in the case of an #elif we must check the zero_value and return an
|
||||
* ELIF or an ELIFFALSE.
|
||||
*/
|
||||
|
||||
if (ret == ELIF && !parse_it)
|
||||
{
|
||||
while (*p == ' ' || *p == '\t')
|
||||
p++;
|
||||
/*
|
||||
* parse an expression.
|
||||
*/
|
||||
debug(0,("%s, line %d: #elif %s ",
|
||||
file->i_file, filep->f_line, p));
|
||||
ret = zero_value(file->i_file, p, filep, file_red);
|
||||
if (ret != IF)
|
||||
{
|
||||
debug(0,("false...\n"));
|
||||
if (ret == IFFALSE)
|
||||
return(ELIFFALSE);
|
||||
else
|
||||
return(ELIFGUESSFALSE);
|
||||
}
|
||||
else
|
||||
{
|
||||
debug(0,("true...\n"));
|
||||
return(ELIF);
|
||||
}
|
||||
}
|
||||
|
||||
if (ret < 0 || ! parse_it)
|
||||
return(ret);
|
||||
|
||||
/*
|
||||
* now decide how to parse the directive, and do it.
|
||||
*/
|
||||
while (*p == ' ' || *p == '\t')
|
||||
p++;
|
||||
q = p + strlen(p);
|
||||
do {
|
||||
q--;
|
||||
} while (*q == ' ' || *q == '\t');
|
||||
q[1] = '\0';
|
||||
switch (ret) {
|
||||
case IF:
|
||||
/*
|
||||
* parse an expression.
|
||||
*/
|
||||
ret = zero_value(file->i_file, p, filep, file_red);
|
||||
debug(0,("%s, line %d: %s #if %s\n",
|
||||
file->i_file, filep->f_line, ret?"false":"true", p));
|
||||
break;
|
||||
case IFDEF:
|
||||
case IFNDEF:
|
||||
debug(0,("%s, line %d: #%s %s\n",
|
||||
file->i_file, filep->f_line, directives[ret], p));
|
||||
case UNDEF:
|
||||
/*
|
||||
* separate the name of a single symbol.
|
||||
*/
|
||||
while (isalnum(*p) || *p == '_')
|
||||
*line++ = *p++;
|
||||
*line = '\0';
|
||||
break;
|
||||
case INCLUDE:
|
||||
case INCLUDENEXT:
|
||||
debug(2,("%s, line %d: #include%s %s\n",
|
||||
file->i_file, filep->f_line,
|
||||
(ret == INCLUDE) ? "" : "_next", p));
|
||||
|
||||
/* Support ANSI macro substitution */
|
||||
while (1) {
|
||||
struct symtab **sym;
|
||||
|
||||
if (!*p || *p == '"' || *p == '<')
|
||||
break;
|
||||
|
||||
sym = isdefined(p, file_red, NULL);
|
||||
if (!sym)
|
||||
break;
|
||||
|
||||
p = (*sym)->s_value;
|
||||
debug(3,("%s : #includes SYMBOL %s = %s\n",
|
||||
file->i_incstring,
|
||||
(*sym) -> s_name,
|
||||
(*sym) -> s_value));
|
||||
/* mark file as having included a 'soft include' */
|
||||
file->i_flags |= INCLUDED_SYM;
|
||||
}
|
||||
|
||||
/*
|
||||
* Separate the name of the include file.
|
||||
*/
|
||||
while (*p && *p != '"' && *p != '<')
|
||||
p++;
|
||||
if (! *p)
|
||||
return(-2);
|
||||
if (*p++ == '"') {
|
||||
if (ret == INCLUDE)
|
||||
ret = INCLUDEDOT;
|
||||
else
|
||||
ret = INCLUDENEXTDOT;
|
||||
while (*p && *p != '"')
|
||||
*line++ = *p++;
|
||||
} else
|
||||
while (*p && *p != '>')
|
||||
*line++ = *p++;
|
||||
*line = '\0';
|
||||
break;
|
||||
case DEFINE:
|
||||
/*
|
||||
* copy the definition back to the beginning of the line.
|
||||
*/
|
||||
strcpy (line, p);
|
||||
break;
|
||||
case ELSE:
|
||||
case ENDIF:
|
||||
case ELIF:
|
||||
case PRAGMA:
|
||||
case ERROR:
|
||||
case IDENT:
|
||||
case SCCS:
|
||||
case EJECT:
|
||||
case WARNING:
|
||||
debug(0,("%s, line %d: #%s\n",
|
||||
file->i_file, filep->f_line, directives[ret]));
|
||||
/*
|
||||
* nothing to do.
|
||||
*/
|
||||
break;
|
||||
}
|
||||
return(ret);
|
||||
}
|
||||
|
||||
struct symtab **
|
||||
fdefined(char *symbol, struct inclist *file, struct inclist **srcfile)
|
||||
{
|
||||
struct inclist **ip;
|
||||
struct symtab **val;
|
||||
int i;
|
||||
static int recurse_lvl = 0;
|
||||
|
||||
if (file->i_flags & DEFCHECKED)
|
||||
return(NULL);
|
||||
debug(2,("Looking for %s in %s\n", symbol, file->i_file));
|
||||
file->i_flags |= DEFCHECKED;
|
||||
if ((val = slookup(symbol, file)))
|
||||
debug(1,("%s defined in %s as %s\n",
|
||||
symbol, file->i_file, (*val)->s_value));
|
||||
if (val == NULL && file->i_list)
|
||||
{
|
||||
for (ip = file->i_list, i=0; i < file->i_listlen; i++, ip++)
|
||||
if (file->i_merged[i]==FALSE) {
|
||||
val = fdefined(symbol, *ip, srcfile);
|
||||
file->i_merged[i]=merge2defines(file,*ip);
|
||||
if (val!=NULL) break;
|
||||
}
|
||||
}
|
||||
else if (val != NULL && srcfile != NULL) *srcfile = file;
|
||||
recurse_lvl--;
|
||||
file->i_flags &= ~DEFCHECKED;
|
||||
|
||||
return(val);
|
||||
}
|
||||
|
||||
struct symtab **
|
||||
isdefined(char *symbol, struct inclist *file, struct inclist **srcfile)
|
||||
{
|
||||
struct symtab **val;
|
||||
|
||||
if ((val = slookup(symbol, &maininclist))) {
|
||||
debug(1,("%s defined on command line\n", symbol));
|
||||
if (srcfile != NULL) *srcfile = &maininclist;
|
||||
return(val);
|
||||
}
|
||||
if ((val = fdefined(symbol, file, srcfile)))
|
||||
return(val);
|
||||
debug(1,("%s not defined in %s\n", symbol, file->i_file));
|
||||
return(NULL);
|
||||
}
|
||||
|
||||
/*
|
||||
* Return type based on if the #if expression evaluates to 0
|
||||
*/
|
||||
static int
|
||||
zero_value(char *filename,
|
||||
char *exp,
|
||||
struct filepointer *filep,
|
||||
struct inclist *file_red)
|
||||
{
|
||||
if (cppsetup(filename, exp, filep, file_red))
|
||||
return(IFFALSE);
|
||||
else
|
||||
return(IF);
|
||||
}
|
||||
|
||||
void
|
||||
define2(char *name, char *val, struct inclist *file)
|
||||
{
|
||||
int first, last, below;
|
||||
register struct symtab **sp = NULL, **dest;
|
||||
struct symtab *stab;
|
||||
|
||||
/* Make space if it's needed */
|
||||
if (file->i_defs == NULL)
|
||||
{
|
||||
file->i_defs = (struct symtab **)
|
||||
malloc(sizeof (struct symtab*) * SYMTABINC);
|
||||
file->i_ndefs = 0;
|
||||
}
|
||||
else if (!(file->i_ndefs % SYMTABINC))
|
||||
file->i_defs = (struct symtab **)
|
||||
realloc(file->i_defs,
|
||||
sizeof(struct symtab*)*(file->i_ndefs+SYMTABINC));
|
||||
|
||||
if (file->i_defs == NULL)
|
||||
fatalerr("malloc()/realloc() failure in insert_defn()\n");
|
||||
|
||||
below = first = 0;
|
||||
last = file->i_ndefs - 1;
|
||||
while (last >= first)
|
||||
{
|
||||
/* Fast inline binary search */
|
||||
register char *s1;
|
||||
register char *s2;
|
||||
register int middle = first + (last - first) / 2;
|
||||
|
||||
/* Fast inline strchr() */
|
||||
s1 = name;
|
||||
s2 = file->i_defs[middle]->s_name;
|
||||
while (*s1++ == *s2++)
|
||||
if (s2[-1] == '\0') break;
|
||||
|
||||
/* If exact match, set sp and break */
|
||||
if (*--s1 == *--s2)
|
||||
{
|
||||
sp = file->i_defs + middle;
|
||||
break;
|
||||
}
|
||||
|
||||
/* If name > i_defs[middle] ... */
|
||||
if (*s1 > *s2)
|
||||
{
|
||||
below = first;
|
||||
first = middle + 1;
|
||||
}
|
||||
/* else ... */
|
||||
else
|
||||
{
|
||||
below = last = middle - 1;
|
||||
}
|
||||
}
|
||||
|
||||
/* Search is done. If we found an exact match to the symbol name,
|
||||
just replace its s_value */
|
||||
if (sp != NULL)
|
||||
{
|
||||
debug(1,("redefining %s from %s to %s in file %s\n",
|
||||
name, (*sp)->s_value, val, file->i_file));
|
||||
free((*sp)->s_value);
|
||||
(*sp)->s_value = copy(val);
|
||||
return;
|
||||
}
|
||||
|
||||
sp = file->i_defs + file->i_ndefs++;
|
||||
dest = file->i_defs + below + 1;
|
||||
while (sp > dest)
|
||||
{
|
||||
*sp = sp[-1];
|
||||
sp--;
|
||||
}
|
||||
stab = (struct symtab *) malloc(sizeof (struct symtab));
|
||||
if (stab == NULL)
|
||||
fatalerr("malloc()/realloc() failure in insert_defn()\n");
|
||||
|
||||
debug(1,("defining %s to %s in file %s\n", name, val, file->i_file));
|
||||
stab->s_name = copy(name);
|
||||
stab->s_value = copy(val);
|
||||
*sp = stab;
|
||||
}
|
||||
|
||||
void
|
||||
define(char *def, struct inclist *file)
|
||||
{
|
||||
char *val;
|
||||
|
||||
/* Separate symbol name and its value */
|
||||
val = def;
|
||||
while (isalnum(*val) || *val == '_')
|
||||
val++;
|
||||
if (*val)
|
||||
*val++ = '\0';
|
||||
while (*val == ' ' || *val == '\t')
|
||||
val++;
|
||||
|
||||
if (!*val)
|
||||
val = "1";
|
||||
define2(def, val, file);
|
||||
}
|
||||
|
||||
struct symtab **
|
||||
slookup(char *symbol, struct inclist *file)
|
||||
{
|
||||
register int first = 0;
|
||||
register int last;
|
||||
|
||||
if (!file)
|
||||
{
|
||||
return NULL;
|
||||
}
|
||||
|
||||
last = file->i_ndefs - 1;
|
||||
|
||||
while (last >= first)
|
||||
{
|
||||
/* Fast inline binary search */
|
||||
register char *s1;
|
||||
register char *s2;
|
||||
register int middle = first + (last - first) / 2;
|
||||
|
||||
/* Fast inline strchr() */
|
||||
s1 = symbol;
|
||||
s2 = file->i_defs[middle]->s_name;
|
||||
while (*s1++ == *s2++)
|
||||
if (s2[-1] == '\0') break;
|
||||
|
||||
/* If exact match, we're done */
|
||||
if (*--s1 == *--s2)
|
||||
{
|
||||
return file->i_defs + middle;
|
||||
}
|
||||
|
||||
/* If symbol > i_defs[middle] ... */
|
||||
if (*s1 > *s2)
|
||||
{
|
||||
first = middle + 1;
|
||||
}
|
||||
/* else ... */
|
||||
else
|
||||
{
|
||||
last = middle - 1;
|
||||
}
|
||||
}
|
||||
return NULL;
|
||||
}
|
||||
|
||||
static int
|
||||
merge2defines(struct inclist *file1, struct inclist *file2)
|
||||
{
|
||||
int i;
|
||||
|
||||
if ((file1==NULL) || (file2==NULL) ||
|
||||
!(file2->i_flags & FINISHED))
|
||||
return 0;
|
||||
|
||||
for (i=0; i < file2->i_listlen; i++)
|
||||
if (file2->i_merged[i]==FALSE)
|
||||
return 0;
|
||||
|
||||
{
|
||||
int first1 = 0;
|
||||
int last1 = file1->i_ndefs - 1;
|
||||
|
||||
int first2 = 0;
|
||||
int last2 = file2->i_ndefs - 1;
|
||||
|
||||
int first=0;
|
||||
struct symtab** i_defs = NULL;
|
||||
int deflen=file1->i_ndefs+file2->i_ndefs;
|
||||
|
||||
debug(2,("merging %s into %s\n",
|
||||
file2->i_file, file1->i_file));
|
||||
|
||||
if (deflen>0)
|
||||
{
|
||||
/* make sure deflen % SYMTABINC == 0 is still true */
|
||||
deflen += (SYMTABINC - deflen % SYMTABINC) % SYMTABINC;
|
||||
i_defs=(struct symtab**)
|
||||
malloc(deflen*sizeof(struct symtab*));
|
||||
if (i_defs==NULL) return 0;
|
||||
}
|
||||
|
||||
while ((last1 >= first1) && (last2 >= first2))
|
||||
{
|
||||
char *s1=file1->i_defs[first1]->s_name;
|
||||
char *s2=file2->i_defs[first2]->s_name;
|
||||
|
||||
if (strcmp(s1,s2) < 0)
|
||||
i_defs[first++]=file1->i_defs[first1++];
|
||||
else if (strcmp(s1,s2) > 0)
|
||||
i_defs[first++]=file2->i_defs[first2++];
|
||||
else /* equal */
|
||||
{
|
||||
i_defs[first++]=file2->i_defs[first2++];
|
||||
first1++;
|
||||
}
|
||||
}
|
||||
while (last1 >= first1)
|
||||
{
|
||||
i_defs[first++]=file1->i_defs[first1++];
|
||||
}
|
||||
while (last2 >= first2)
|
||||
{
|
||||
i_defs[first++]=file2->i_defs[first2++];
|
||||
}
|
||||
|
||||
if (file1->i_defs) free(file1->i_defs);
|
||||
file1->i_defs=i_defs;
|
||||
file1->i_ndefs=first;
|
||||
|
||||
return 1;
|
||||
}
|
||||
}
|
||||
|
||||
void
|
||||
undefine(char *symbol, struct inclist *file)
|
||||
{
|
||||
register struct symtab **ptr;
|
||||
struct inclist *srcfile;
|
||||
while ((ptr = isdefined(symbol, file, &srcfile)) != NULL)
|
||||
{
|
||||
srcfile->i_ndefs--;
|
||||
for (; ptr < srcfile->i_defs + srcfile->i_ndefs; ptr++)
|
||||
*ptr = ptr[1];
|
||||
}
|
||||
}
|
||||
|
||||
int
|
||||
find_includes(struct filepointer *filep, struct inclist *file,
|
||||
struct inclist *file_red, int recursion, boolean failOK)
|
||||
{
|
||||
struct inclist *inclistp;
|
||||
char **includedirsp;
|
||||
register char *line;
|
||||
register int type;
|
||||
boolean recfailOK;
|
||||
|
||||
while ((line = getnextline(filep))) {
|
||||
switch(type = deftype(line, filep, file_red, file, TRUE)) {
|
||||
case IF:
|
||||
doif:
|
||||
type = find_includes(filep, file,
|
||||
file_red, recursion+1, failOK);
|
||||
while ((type == ELIF) || (type == ELIFFALSE) ||
|
||||
(type == ELIFGUESSFALSE))
|
||||
type = gobble(filep, file, file_red);
|
||||
if (type == ELSE)
|
||||
gobble(filep, file, file_red);
|
||||
break;
|
||||
case IFFALSE:
|
||||
case IFGUESSFALSE:
|
||||
doiffalse:
|
||||
if (type == IFGUESSFALSE || type == ELIFGUESSFALSE)
|
||||
recfailOK = TRUE;
|
||||
else
|
||||
recfailOK = failOK;
|
||||
type = gobble(filep, file, file_red);
|
||||
if (type == ELSE)
|
||||
find_includes(filep, file,
|
||||
file_red, recursion+1, recfailOK);
|
||||
else
|
||||
if (type == ELIF)
|
||||
goto doif;
|
||||
else
|
||||
if ((type == ELIFFALSE) || (type == ELIFGUESSFALSE))
|
||||
goto doiffalse;
|
||||
break;
|
||||
case IFDEF:
|
||||
case IFNDEF:
|
||||
if ((type == IFDEF && isdefined(line, file_red, NULL))
|
||||
|| (type == IFNDEF && !isdefined(line, file_red, NULL))) {
|
||||
debug(1,(type == IFNDEF ?
|
||||
"line %d: %s !def'd in %s via %s%s\n" : "",
|
||||
filep->f_line, line,
|
||||
file->i_file, file_red->i_file, ": doit"));
|
||||
type = find_includes(filep, file,
|
||||
file_red, recursion+1, failOK);
|
||||
while (type == ELIF || type == ELIFFALSE || type == ELIFGUESSFALSE)
|
||||
type = gobble(filep, file, file_red);
|
||||
if (type == ELSE)
|
||||
gobble(filep, file, file_red);
|
||||
}
|
||||
else {
|
||||
debug(1,(type == IFDEF ?
|
||||
"line %d: %s !def'd in %s via %s%s\n" : "",
|
||||
filep->f_line, line,
|
||||
file->i_file, file_red->i_file, ": gobble"));
|
||||
type = gobble(filep, file, file_red);
|
||||
if (type == ELSE)
|
||||
find_includes(filep, file,
|
||||
file_red, recursion+1, failOK);
|
||||
else if (type == ELIF)
|
||||
goto doif;
|
||||
else if (type == ELIFFALSE || type == ELIFGUESSFALSE)
|
||||
goto doiffalse;
|
||||
}
|
||||
break;
|
||||
case ELSE:
|
||||
case ELIFFALSE:
|
||||
case ELIFGUESSFALSE:
|
||||
case ELIF:
|
||||
if (!recursion)
|
||||
gobble(filep, file, file_red);
|
||||
case ENDIF:
|
||||
if (recursion)
|
||||
return(type);
|
||||
case DEFINE:
|
||||
define(line, file);
|
||||
break;
|
||||
case UNDEF:
|
||||
if (!*line) {
|
||||
warning("%s", file_red->i_file);
|
||||
if (file_red != file)
|
||||
warning1(" (reading %s)", file->i_file);
|
||||
warning1(", line %d: incomplete undef == \"%s\"\n",
|
||||
filep->f_line, line);
|
||||
break;
|
||||
}
|
||||
undefine(line, file_red);
|
||||
break;
|
||||
case INCLUDE:
|
||||
case INCLUDEDOT:
|
||||
case INCLUDENEXT:
|
||||
case INCLUDENEXTDOT:
|
||||
inclistp = inclistnext;
|
||||
includedirsp = includedirsnext;
|
||||
debug(2,("%s, reading %s, includes %s\n",
|
||||
file_red->i_file, file->i_file, line));
|
||||
add_include(filep, file, file_red, line, type, failOK);
|
||||
inclistnext = inclistp;
|
||||
includedirsnext = includedirsp;
|
||||
break;
|
||||
case ERROR:
|
||||
case WARNING:
|
||||
warning("%s", file_red->i_file);
|
||||
if (file_red != file)
|
||||
warning1(" (reading %s)", file->i_file);
|
||||
warning1(", line %d: %s\n",
|
||||
filep->f_line, line);
|
||||
break;
|
||||
|
||||
case PRAGMA:
|
||||
case IDENT:
|
||||
case SCCS:
|
||||
case EJECT:
|
||||
break;
|
||||
case -1:
|
||||
warning("%s", file_red->i_file);
|
||||
if (file_red != file)
|
||||
warning1(" (reading %s)", file->i_file);
|
||||
warning1(", line %d: unknown directive == \"%s\"\n",
|
||||
filep->f_line, line);
|
||||
break;
|
||||
case -2:
|
||||
warning("%s", file_red->i_file);
|
||||
if (file_red != file)
|
||||
warning1(" (reading %s)", file->i_file);
|
||||
warning1(", line %d: incomplete include == \"%s\"\n",
|
||||
filep->f_line, line);
|
||||
break;
|
||||
}
|
||||
}
|
||||
file->i_flags |= FINISHED;
|
||||
debug(2,("finished with %s\n", file->i_file));
|
||||
return(-1);
|
||||
}
|
|
@ -1,124 +0,0 @@
|
|||
/* $Xorg: pr.c,v 1.4 2001/02/09 02:03:16 xorgcvs Exp $ */
|
||||
/*
|
||||
|
||||
Copyright (c) 1993, 1994, 1998 The Open Group
|
||||
|
||||
Permission to use, copy, modify, distribute, and sell this software and its
|
||||
documentation for any purpose is hereby granted without fee, provided that
|
||||
the above copyright notice appear in all copies and that both that
|
||||
copyright notice and this permission notice appear in supporting
|
||||
documentation.
|
||||
|
||||
The above copyright notice and this permission notice shall be included in
|
||||
all copies or substantial portions of the Software.
|
||||
|
||||
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
||||
OPEN GROUP BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN
|
||||
AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
|
||||
CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
||||
|
||||
Except as contained in this notice, the name of The Open Group shall not be
|
||||
used in advertising or otherwise to promote the sale, use or other dealings
|
||||
in this Software without prior written authorization from The Open Group.
|
||||
|
||||
*/
|
||||
/* $XFree86: xc/config/makedepend/pr.c,v 1.5 2001/12/14 19:53:21 dawes Exp $ */
|
||||
|
||||
#include "def.h"
|
||||
|
||||
extern struct inclist inclist[ MAXFILES ],
|
||||
*inclistp;
|
||||
extern char *objprefix;
|
||||
extern char *objsuffix;
|
||||
extern int width;
|
||||
extern boolean printed;
|
||||
extern boolean verbose;
|
||||
extern boolean show_where_not;
|
||||
|
||||
void
|
||||
add_include(struct filepointer *filep, struct inclist *file,
|
||||
struct inclist *file_red, char *include, int type,
|
||||
boolean failOK)
|
||||
{
|
||||
register struct inclist *newfile;
|
||||
register struct filepointer *content;
|
||||
|
||||
/*
|
||||
* First decide what the pathname of this include file really is.
|
||||
*/
|
||||
newfile = inc_path(file->i_file, include, type);
|
||||
if (newfile == NULL) {
|
||||
if (failOK)
|
||||
return;
|
||||
if (file != file_red)
|
||||
warning("%s (reading %s, line %d): ",
|
||||
file_red->i_file, file->i_file, filep->f_line);
|
||||
else
|
||||
warning("%s, line %d: ", file->i_file, filep->f_line);
|
||||
warning1("cannot find include file \"%s\"\n", include);
|
||||
show_where_not = TRUE;
|
||||
newfile = inc_path(file->i_file, include, type);
|
||||
show_where_not = FALSE;
|
||||
}
|
||||
|
||||
if (newfile) {
|
||||
included_by(file, newfile);
|
||||
if (!(newfile->i_flags & SEARCHED)) {
|
||||
newfile->i_flags |= SEARCHED;
|
||||
content = getfile(newfile->i_file);
|
||||
find_includes(content, newfile, file_red, 0, failOK);
|
||||
freefile(content);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
static void
|
||||
pr(struct inclist *ip, char *file, char *base)
|
||||
{
|
||||
static char *lastfile;
|
||||
static int current_len;
|
||||
register int len, i;
|
||||
char buf[ BUFSIZ ];
|
||||
|
||||
printed = TRUE;
|
||||
len = strlen(ip->i_file)+1;
|
||||
if (current_len + len > width || file != lastfile) {
|
||||
lastfile = file;
|
||||
sprintf(buf, "\n%s%s%s: %s", objprefix, base, objsuffix,
|
||||
ip->i_file);
|
||||
len = current_len = strlen(buf);
|
||||
}
|
||||
else {
|
||||
buf[0] = ' ';
|
||||
strcpy(buf+1, ip->i_file);
|
||||
current_len += len;
|
||||
}
|
||||
fwrite(buf, len, 1, stdout);
|
||||
|
||||
/*
|
||||
* If verbose is set, then print out what this file includes.
|
||||
*/
|
||||
if (! verbose || ip->i_list == NULL || ip->i_flags & NOTIFIED)
|
||||
return;
|
||||
ip->i_flags |= NOTIFIED;
|
||||
lastfile = NULL;
|
||||
printf("\n# %s includes:", ip->i_file);
|
||||
for (i=0; i<ip->i_listlen; i++)
|
||||
printf("\n#\t%s", ip->i_list[ i ]->i_incstring);
|
||||
}
|
||||
|
||||
void
|
||||
recursive_pr_include(struct inclist *head, char *file, char *base)
|
||||
{
|
||||
int i;
|
||||
|
||||
if (head->i_flags & MARKED)
|
||||
return;
|
||||
head->i_flags |= MARKED;
|
||||
if (head->i_file != file)
|
||||
pr(head, file, base);
|
||||
for (i=0; i<head->i_listlen; i++)
|
||||
recursive_pr_include(head->i_list[ i ], file, base);
|
||||
}
|
|
@ -1,39 +0,0 @@
|
|||
#!/usr/local/bin/perl
|
||||
#
|
||||
# This Source Code Form is subject to the terms of the Mozilla Public
|
||||
# License, v. 2.0. If a copy of the MPL was not distributed with this
|
||||
# file, You can obtain one at http://mozilla.org/MPL/2.0/.
|
||||
|
||||
#Input: [-d dir] foo1.java foo2.java
|
||||
#Compares with: foo1.class foo2.class (if -d specified, checks in 'dir',
|
||||
# otherwise assumes .class files in same directory as .java files)
|
||||
#Returns: list of input arguments which are newer than corresponding class
|
||||
#files (non-existent class files are considered to be real old :-)
|
||||
|
||||
$found = 1;
|
||||
|
||||
if ($ARGV[0] eq '-d') {
|
||||
$classdir = $ARGV[1];
|
||||
$classdir .= "/";
|
||||
shift;
|
||||
shift;
|
||||
} else {
|
||||
$classdir = "./";
|
||||
}
|
||||
|
||||
foreach $filename (@ARGV) {
|
||||
$classfilename = $classdir;
|
||||
$classfilename .= $filename;
|
||||
$classfilename =~ s/.java$/.class/;
|
||||
($dev,$ino,$mode,$nlink,$uid,$gid,$rdev,$size,$atime,$mtime,
|
||||
$ctime,$blksize,$blocks) = stat($filename);
|
||||
($dev,$ino,$mode,$nlink,$uid,$gid,$rdev,$size,$atime,$classmtime,
|
||||
$ctime,$blksize,$blocks) = stat($classfilename);
|
||||
# print $filename, " ", $mtime, ", ", $classfilename, " ", $classmtime, "\n";
|
||||
if ($mtime > $classmtime) {
|
||||
print $filename, " ";
|
||||
$found = 0;
|
||||
}
|
||||
}
|
||||
|
||||
print "\n";
|
|
@ -1,112 +0,0 @@
|
|||
#! /usr/local/bin/perl
|
||||
#
|
||||
# This Source Code Form is subject to the terms of the Mozilla Public
|
||||
# License, v. 2.0. If a copy of the MPL was not distributed with this
|
||||
# file, You can obtain one at http://mozilla.org/MPL/2.0/.
|
||||
|
||||
|
||||
require('coreconf.pl');
|
||||
|
||||
#######-- read in variables on command line into %var
|
||||
|
||||
$use_jar = 1;
|
||||
$ZIP = "$ENV{JAVA_HOME}/bin/jar";
|
||||
|
||||
if ( $ENV{JAVA_HOME} eq "" ) {
|
||||
$ZIP = "zip";
|
||||
$use_jar = 0;
|
||||
}
|
||||
|
||||
|
||||
&parse_argv;
|
||||
|
||||
|
||||
######-- Do the packaging of jars.
|
||||
|
||||
foreach $jarfile (split(/ /,$var{FILES}) ) {
|
||||
print STDERR "---------------------------------------------\n";
|
||||
print STDERR "Packaging jar file $jarfile....\n";
|
||||
|
||||
$jarinfo = $var{$jarfile};
|
||||
|
||||
($jardir,$jaropts) = split(/\|/,$jarinfo);
|
||||
|
||||
if ( $use_jar ) {
|
||||
$zipoptions = "-cvf";
|
||||
} else {
|
||||
$zipoptions = "-T -r";
|
||||
if ($jaropts =~ /a/) {
|
||||
if ($var{OS_ARCH} eq 'WINNT') {
|
||||
$zipoptions .= ' -ll';
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
# just in case the directory ends in a /, remove it
|
||||
if ($jardir =~ /\/$/) {
|
||||
chop $jardir;
|
||||
}
|
||||
|
||||
$dirdepth --;
|
||||
|
||||
print STDERR "jardir = $jardir\n";
|
||||
system("ls $jardir");
|
||||
|
||||
if (-d $jardir) {
|
||||
|
||||
|
||||
# count the number of slashes
|
||||
|
||||
$slashes =0;
|
||||
|
||||
foreach $i (split(//,$jardir)) {
|
||||
if ($i =~ /\//) {
|
||||
$slashes++;
|
||||
}
|
||||
}
|
||||
|
||||
$dotdots =0;
|
||||
|
||||
foreach $i (split(m|/|,$jardir)) {
|
||||
if ($i eq '..') {
|
||||
$dotdots ++;
|
||||
}
|
||||
}
|
||||
|
||||
$dirdepth = ($slashes +1) - (2*$dotdots);
|
||||
|
||||
print STDERR "changing dir $jardir\n";
|
||||
chdir($jardir);
|
||||
print STDERR "making dir META-INF\n";
|
||||
mkdir("META-INF",0755);
|
||||
|
||||
$filelist = "";
|
||||
opendir(DIR,".");
|
||||
while ($_ = readdir(DIR)) {
|
||||
if (! ( ($_ eq '.') || ($_ eq '..'))) {
|
||||
if ( $jaropts =~ /i/) {
|
||||
if (! /^include$/) {
|
||||
$filelist .= "$_ ";
|
||||
}
|
||||
}
|
||||
else {
|
||||
$filelist .= "$_ ";
|
||||
}
|
||||
}
|
||||
}
|
||||
closedir(DIR);
|
||||
|
||||
print STDERR "$ZIP $zipoptions $jarfile $filelist\n";
|
||||
system("$ZIP $zipoptions $jarfile $filelist");
|
||||
rmdir("META-INF");
|
||||
for $i (1 .. $dirdepth) {
|
||||
chdir("..");
|
||||
print STDERR "chdir ..\n";
|
||||
}
|
||||
}
|
||||
else {
|
||||
print STDERR "Directory $jardir doesn't exist\n";
|
||||
}
|
||||
|
||||
}
|
||||
|
|
@ -1,15 +0,0 @@
|
|||
#
|
||||
# This Source Code Form is subject to the terms of the Mozilla Public
|
||||
# License, v. 2.0. If a copy of the MPL was not distributed with this
|
||||
# file, You can obtain one at http://mozilla.org/MPL/2.0/.
|
||||
|
||||
#
|
||||
# Override TARGETS variable so that only static libraries
|
||||
# are specifed as dependencies within rules.mk.
|
||||
#
|
||||
|
||||
TARGETS = $(LIBRARY)
|
||||
SHARED_LIBRARY =
|
||||
IMPORT_LIBRARY =
|
||||
PROGRAM =
|
||||
|
|
@ -1,16 +0,0 @@
|
|||
#
|
||||
# This Source Code Form is subject to the terms of the Mozilla Public
|
||||
# License, v. 2.0. If a copy of the MPL was not distributed with this
|
||||
# file, You can obtain one at http://mozilla.org/MPL/2.0/.
|
||||
|
||||
# can't do this in manifest.mn because OS_TARGET isn't defined there.
|
||||
ifeq (,$(filter-out WIN%,$(OS_TARGET)))
|
||||
|
||||
# don't want the 32 in the shared library name
|
||||
SHARED_LIBRARY = $(OBJDIR)/$(DLL_PREFIX)$(LIBRARY_NAME)$(LIBRARY_VERSION).$(DLL_SUFFIX)
|
||||
IMPORT_LIBRARY = $(OBJDIR)/$(IMPORT_LIB_PREFIX)$(LIBRARY_NAME)$(LIBRARY_VERSION)$(IMPORT_LIB_SUFFIX)
|
||||
|
||||
RES = $(OBJDIR)/$(LIBRARY_NAME).res
|
||||
RESNAME = $(LIBRARY_NAME).rc
|
||||
|
||||
endif
|
|
@ -1,19 +0,0 @@
|
|||
#
|
||||
# This Source Code Form is subject to the terms of the Mozilla Public
|
||||
# License, v. 2.0. If a copy of the MPL was not distributed with this
|
||||
# file, You can obtain one at http://mozilla.org/MPL/2.0/.
|
||||
|
||||
ifdef BUILD_IDG
|
||||
DEFINES += -DNSSDEBUG
|
||||
endif
|
||||
|
||||
#
|
||||
# Override TARGETS variable so that only static libraries
|
||||
# are specifed as dependencies within rules.mk.
|
||||
#
|
||||
|
||||
TARGETS = $(LIBRARY)
|
||||
SHARED_LIBRARY =
|
||||
IMPORT_LIBRARY =
|
||||
PROGRAM =
|
||||
|
|
@ -1,15 +0,0 @@
|
|||
#
|
||||
# This Source Code Form is subject to the terms of the Mozilla Public
|
||||
# License, v. 2.0. If a copy of the MPL was not distributed with this
|
||||
# file, You can obtain one at http://mozilla.org/MPL/2.0/.
|
||||
|
||||
#
|
||||
# Override TARGETS variable so that only static libraries
|
||||
# are specifed as dependencies within rules.mk.
|
||||
#
|
||||
|
||||
TARGETS = $(LIBRARY)
|
||||
SHARED_LIBRARY =
|
||||
IMPORT_LIBRARY =
|
||||
PROGRAM =
|
||||
|
|
@ -1,15 +0,0 @@
|
|||
#
|
||||
# This Source Code Form is subject to the terms of the Mozilla Public
|
||||
# License, v. 2.0. If a copy of the MPL was not distributed with this
|
||||
# file, You can obtain one at http://mozilla.org/MPL/2.0/.
|
||||
|
||||
#
|
||||
# Override TARGETS variable so that only static libraries
|
||||
# are specifed as dependencies within rules.mk.
|
||||
#
|
||||
|
||||
TARGETS = $(LIBRARY)
|
||||
SHARED_LIBRARY =
|
||||
IMPORT_LIBRARY =
|
||||
PROGRAM =
|
||||
|
|
@ -1,38 +0,0 @@
|
|||
#
|
||||
# This Source Code Form is subject to the terms of the Mozilla Public
|
||||
# License, v. 2.0. If a copy of the MPL was not distributed with this
|
||||
# file, You can obtain one at http://mozilla.org/MPL/2.0/.
|
||||
|
||||
#
|
||||
# Override TARGETS variable so that only shared libraries
|
||||
# are specifed as dependencies within rules.mk.
|
||||
#
|
||||
|
||||
TARGETS = $(SHARED_LIBRARY)
|
||||
LIBRARY =
|
||||
IMPORT_LIBRARY =
|
||||
PROGRAM =
|
||||
|
||||
ifeq (,$(filter-out WIN%,$(OS_TARGET)))
|
||||
SHARED_LIBRARY = $(OBJDIR)/$(DLL_PREFIX)$(LIBRARY_NAME)$(LIBRARY_VERSION).$(DLL_SUFFIX)
|
||||
RES = $(OBJDIR)/$(LIBRARY_NAME).res
|
||||
RESNAME = $(LIBRARY_NAME).rc
|
||||
endif
|
||||
|
||||
ifdef BUILD_IDG
|
||||
DEFINES += -DNSSDEBUG
|
||||
endif
|
||||
|
||||
# Needed for compilation of $(OBJDIR)/certdata.c
|
||||
INCLUDES += -I.
|
||||
|
||||
#
|
||||
# To create a loadable module on Darwin, we must use -bundle.
|
||||
#
|
||||
ifeq ($(OS_TARGET),Darwin)
|
||||
DSO_LDOPTS = -bundle
|
||||
endif
|
||||
|
||||
ifdef USE_GCOV
|
||||
DSO_LDOPTS += --coverage
|
||||
endif
|
|
@ -1,38 +0,0 @@
|
|||
#
|
||||
# This Source Code Form is subject to the terms of the Mozilla Public
|
||||
# License, v. 2.0. If a copy of the MPL was not distributed with this
|
||||
# file, You can obtain one at http://mozilla.org/MPL/2.0/.
|
||||
|
||||
#
|
||||
# Override TARGETS variable so that only shared libraries
|
||||
# are specifed as dependencies within rules.mk.
|
||||
#
|
||||
|
||||
TARGETS = $(SHARED_LIBRARY)
|
||||
LIBRARY =
|
||||
IMPORT_LIBRARY =
|
||||
PROGRAM =
|
||||
|
||||
ifeq (,$(filter-out WIN%,$(OS_TARGET)))
|
||||
SHARED_LIBRARY = $(OBJDIR)/$(DLL_PREFIX)$(LIBRARY_NAME)$(LIBRARY_VERSION).$(DLL_SUFFIX)
|
||||
RES = $(OBJDIR)/$(LIBRARY_NAME).res
|
||||
RESNAME = $(LIBRARY_NAME).rc
|
||||
endif
|
||||
|
||||
ifdef BUILD_IDG
|
||||
DEFINES += -DNSSDEBUG
|
||||
endif
|
||||
|
||||
# Needed for compilation of $(OBJDIR)/certdata.c
|
||||
INCLUDES += -I.
|
||||
|
||||
#
|
||||
# To create a loadable module on Darwin, we must use -bundle.
|
||||
#
|
||||
ifeq ($(OS_TARGET),Darwin)
|
||||
DSO_LDOPTS = -bundle
|
||||
endif
|
||||
|
||||
ifdef USE_GCOV
|
||||
DSO_LDOPTS += --coverage
|
||||
endif
|
|
@ -1,31 +0,0 @@
|
|||
#
|
||||
# This Source Code Form is subject to the terms of the Mozilla Public
|
||||
# License, v. 2.0. If a copy of the MPL was not distributed with this
|
||||
# file, You can obtain one at http://mozilla.org/MPL/2.0/.
|
||||
|
||||
#
|
||||
# Override TARGETS variable so that only shared libraries
|
||||
# are specifed as dependencies within rules.mk.
|
||||
#
|
||||
|
||||
TARGETS = $(SHARED_LIBRARY)
|
||||
LIBRARY =
|
||||
IMPORT_LIBRARY =
|
||||
PROGRAM =
|
||||
|
||||
ifeq (,$(filter-out WIN%,$(OS_TARGET)))
|
||||
SHARED_LIBRARY = $(OBJDIR)/$(DLL_PREFIX)$(LIBRARY_NAME)$(LIBRARY_VERSION).$(DLL_SUFFIX)
|
||||
RES = $(OBJDIR)/$(LIBRARY_NAME).res
|
||||
RESNAME = $(LIBRARY_NAME).rc
|
||||
endif
|
||||
|
||||
ifdef BUILD_IDG
|
||||
DEFINES += -DNSSDEBUG
|
||||
endif
|
||||
|
||||
#
|
||||
# To create a loadable module on Darwin, we must use -bundle.
|
||||
#
|
||||
ifeq ($(OS_TARGET),Darwin)
|
||||
DSO_LDOPTS = -bundle
|
||||
endif
|
|
@ -1,25 +0,0 @@
|
|||
#
|
||||
# This Source Code Form is subject to the terms of the Mozilla Public
|
||||
# License, v. 2.0. If a copy of the MPL was not distributed with this
|
||||
# file, You can obtain one at http://mozilla.org/MPL/2.0/.
|
||||
|
||||
ifdef BUILD_IDG
|
||||
DEFINES += -DNSSDEBUG
|
||||
endif
|
||||
|
||||
#
|
||||
# Hack to see if everything still builds
|
||||
#
|
||||
|
||||
|
||||
#
|
||||
# Override TARGETS variable so that only static libraries
|
||||
# are specifed as dependencies within rules.mk.
|
||||
#
|
||||
|
||||
TARGETS = $(LIBRARY)
|
||||
SHARED_LIBRARY =
|
||||
IMPORT_LIBRARY =
|
||||
PROGRAM =
|
||||
|
||||
|
|
@ -1,8 +0,0 @@
|
|||
#
|
||||
# This Source Code Form is subject to the terms of the Mozilla Public
|
||||
# License, v. 2.0. If a copy of the MPL was not distributed with this
|
||||
# file, You can obtain one at http://mozilla.org/MPL/2.0/.
|
||||
|
||||
ifdef BUILD_IDG
|
||||
DEFINES += -DNSSDEBUG
|
||||
endif
|
|
@ -1,16 +0,0 @@
|
|||
#
|
||||
# This Source Code Form is subject to the terms of the Mozilla Public
|
||||
# License, v. 2.0. If a copy of the MPL was not distributed with this
|
||||
# file, You can obtain one at http://mozilla.org/MPL/2.0/.
|
||||
|
||||
|
||||
#
|
||||
# Override TARGETS variable so that only static libraries
|
||||
# are specifed as dependencies within rules.mk.
|
||||
#
|
||||
|
||||
TARGETS = $(LIBRARY)
|
||||
SHARED_LIBRARY =
|
||||
IMPORT_LIBRARY =
|
||||
PROGRAM =
|
||||
|
|
@ -1,15 +0,0 @@
|
|||
#
|
||||
# This Source Code Form is subject to the terms of the Mozilla Public
|
||||
# License, v. 2.0. If a copy of the MPL was not distributed with this
|
||||
# file, You can obtain one at http://mozilla.org/MPL/2.0/.
|
||||
|
||||
#
|
||||
# Override TARGETS variable so that only static libraries
|
||||
# are specifed as dependencies within rules.mk.
|
||||
#
|
||||
|
||||
TARGETS = $(LIBRARY)
|
||||
SHARED_LIBRARY =
|
||||
IMPORT_LIBRARY =
|
||||
PROGRAM =
|
||||
|
|
@ -1,19 +0,0 @@
|
|||
#
|
||||
# This Source Code Form is subject to the terms of the Mozilla Public
|
||||
# License, v. 2.0. If a copy of the MPL was not distributed with this
|
||||
# file, You can obtain one at http://mozilla.org/MPL/2.0/.
|
||||
|
||||
ifdef BUILD_IDG
|
||||
DEFINES += -DNSSDEBUG
|
||||
endif
|
||||
|
||||
#
|
||||
# Override TARGETS variable so that only static libraries
|
||||
# are specifed as dependencies within rules.mk.
|
||||
#
|
||||
|
||||
TARGETS = $(LIBRARY)
|
||||
SHARED_LIBRARY =
|
||||
IMPORT_LIBRARY =
|
||||
PROGRAM =
|
||||
|
|
@ -1,26 +0,0 @@
|
|||
#
|
||||
# This Source Code Form is subject to the terms of the Mozilla Public
|
||||
# License, v. 2.0. If a copy of the MPL was not distributed with this
|
||||
# file, You can obtain one at http://mozilla.org/MPL/2.0/.
|
||||
|
||||
#
|
||||
# Override TARGETS variable so that only static libraries
|
||||
# are specifed as dependencies within rules.mk.
|
||||
#
|
||||
|
||||
TARGETS = $(LIBRARY)
|
||||
SHARED_LIBRARY =
|
||||
IMPORT_LIBRARY =
|
||||
PROGRAM =
|
||||
|
||||
# NSS_X86 means the target is a 32-bits x86 CPU architecture
|
||||
# NSS_X64 means the target is a 64-bits x64 CPU architecture
|
||||
# NSS_X86_OR_X64 means the target is either x86 or x64
|
||||
ifeq (,$(filter-out i386 x386 x86 x86_64,$(CPU_ARCH)))
|
||||
DEFINES += -DNSS_X86_OR_X64
|
||||
ifdef USE_64
|
||||
DEFINES += -DNSS_X64
|
||||
else
|
||||
DEFINES += -DNSS_X86
|
||||
endif
|
||||
endif
|
|
@ -1,16 +0,0 @@
|
|||
#
|
||||
# This Source Code Form is subject to the terms of the Mozilla Public
|
||||
# License, v. 2.0. If a copy of the MPL was not distributed with this
|
||||
# file, You can obtain one at http://mozilla.org/MPL/2.0/.
|
||||
|
||||
#
|
||||
# Override TARGETS variable so that only static libraries
|
||||
# are specifed as dependencies within rules.mk.
|
||||
#
|
||||
# DEFINES+=-DPKIX_LISTDEBUG Can be used to turn on debug compilation
|
||||
|
||||
TARGETS = $(LIBRARY)
|
||||
SHARED_LIBRARY =
|
||||
IMPORT_LIBRARY =
|
||||
PROGRAM =
|
||||
|
|
@ -1,15 +0,0 @@
|
|||
#
|
||||
# This Source Code Form is subject to the terms of the Mozilla Public
|
||||
# License, v. 2.0. If a copy of the MPL was not distributed with this
|
||||
# file, You can obtain one at http://mozilla.org/MPL/2.0/.
|
||||
|
||||
#
|
||||
# Override TARGETS variable so that only static libraries
|
||||
# are specifed as dependencies within rules.mk.
|
||||
#
|
||||
|
||||
TARGETS = $(LIBRARY)
|
||||
SHARED_LIBRARY =
|
||||
IMPORT_LIBRARY =
|
||||
PROGRAM =
|
||||
|
|
@ -1,15 +0,0 @@
|
|||
#
|
||||
# This Source Code Form is subject to the terms of the Mozilla Public
|
||||
# License, v. 2.0. If a copy of the MPL was not distributed with this
|
||||
# file, You can obtain one at http://mozilla.org/MPL/2.0/.
|
||||
|
||||
#
|
||||
# Override TARGETS variable so that only static libraries
|
||||
# are specifed as dependencies within rules.mk.
|
||||
#
|
||||
|
||||
TARGETS = $(LIBRARY)
|
||||
SHARED_LIBRARY =
|
||||
IMPORT_LIBRARY =
|
||||
PROGRAM =
|
||||
|
|
@ -1,15 +0,0 @@
|
|||
#
|
||||
# This Source Code Form is subject to the terms of the Mozilla Public
|
||||
# License, v. 2.0. If a copy of the MPL was not distributed with this
|
||||
# file, You can obtain one at http://mozilla.org/MPL/2.0/.
|
||||
|
||||
#
|
||||
# Override TARGETS variable so that only static libraries
|
||||
# are specifed as dependencies within rules.mk.
|
||||
#
|
||||
|
||||
TARGETS = $(LIBRARY)
|
||||
SHARED_LIBRARY =
|
||||
IMPORT_LIBRARY =
|
||||
PROGRAM =
|
||||
|
|
@ -1,15 +0,0 @@
|
|||
#
|
||||
# This Source Code Form is subject to the terms of the Mozilla Public
|
||||
# License, v. 2.0. If a copy of the MPL was not distributed with this
|
||||
# file, You can obtain one at http://mozilla.org/MPL/2.0/.
|
||||
|
||||
#
|
||||
# Override TARGETS variable so that only static libraries
|
||||
# are specifed as dependencies within rules.mk.
|
||||
#
|
||||
|
||||
TARGETS = $(LIBRARY)
|
||||
SHARED_LIBRARY =
|
||||
IMPORT_LIBRARY =
|
||||
PROGRAM =
|
||||
|
|
@ -1,15 +0,0 @@
|
|||
#
|
||||
# This Source Code Form is subject to the terms of the Mozilla Public
|
||||
# License, v. 2.0. If a copy of the MPL was not distributed with this
|
||||
# file, You can obtain one at http://mozilla.org/MPL/2.0/.
|
||||
|
||||
#
|
||||
# Override TARGETS variable so that only static libraries
|
||||
# are specifed as dependencies within rules.mk.
|
||||
#
|
||||
|
||||
TARGETS = $(LIBRARY)
|
||||
SHARED_LIBRARY =
|
||||
IMPORT_LIBRARY =
|
||||
PROGRAM =
|
||||
|
|
@ -1,15 +0,0 @@
|
|||
#
|
||||
# This Source Code Form is subject to the terms of the Mozilla Public
|
||||
# License, v. 2.0. If a copy of the MPL was not distributed with this
|
||||
# file, You can obtain one at http://mozilla.org/MPL/2.0/.
|
||||
|
||||
#
|
||||
# Override TARGETS variable so that only static libraries
|
||||
# are specifed as dependencies within rules.mk.
|
||||
#
|
||||
|
||||
TARGETS = $(LIBRARY)
|
||||
SHARED_LIBRARY =
|
||||
IMPORT_LIBRARY =
|
||||
PROGRAM =
|
||||
|
|
@ -1,15 +0,0 @@
|
|||
#
|
||||
# This Source Code Form is subject to the terms of the Mozilla Public
|
||||
# License, v. 2.0. If a copy of the MPL was not distributed with this
|
||||
# file, You can obtain one at http://mozilla.org/MPL/2.0/.
|
||||
|
||||
#
|
||||
# Override TARGETS variable so that only static libraries
|
||||
# are specifed as dependencies within rules.mk.
|
||||
#
|
||||
|
||||
TARGETS = $(LIBRARY)
|
||||
SHARED_LIBRARY =
|
||||
IMPORT_LIBRARY =
|
||||
PROGRAM =
|
||||
|
|
@ -1,15 +0,0 @@
|
|||
#
|
||||
# This Source Code Form is subject to the terms of the Mozilla Public
|
||||
# License, v. 2.0. If a copy of the MPL was not distributed with this
|
||||
# file, You can obtain one at http://mozilla.org/MPL/2.0/.
|
||||
|
||||
#
|
||||
# Override TARGETS variable so that only static libraries
|
||||
# are specifed as dependencies within rules.mk.
|
||||
#
|
||||
|
||||
TARGETS = $(LIBRARY)
|
||||
SHARED_LIBRARY =
|
||||
IMPORT_LIBRARY =
|
||||
PROGRAM =
|
||||
|
|
@ -1,15 +0,0 @@
|
|||
#
|
||||
# This Source Code Form is subject to the terms of the Mozilla Public
|
||||
# License, v. 2.0. If a copy of the MPL was not distributed with this
|
||||
# file, You can obtain one at http://mozilla.org/MPL/2.0/.
|
||||
|
||||
#
|
||||
# Override TARGETS variable so that only static libraries
|
||||
# are specifed as dependencies within rules.mk.
|
||||
#
|
||||
|
||||
TARGETS = $(LIBRARY)
|
||||
SHARED_LIBRARY =
|
||||
IMPORT_LIBRARY =
|
||||
PROGRAM =
|
||||
|
|
@ -1,15 +0,0 @@
|
|||
#
|
||||
# This Source Code Form is subject to the terms of the Mozilla Public
|
||||
# License, v. 2.0. If a copy of the MPL was not distributed with this
|
||||
# file, You can obtain one at http://mozilla.org/MPL/2.0/.
|
||||
|
||||
#
|
||||
# Override TARGETS variable so that only static libraries
|
||||
# are specifed as dependencies within rules.mk.
|
||||
#
|
||||
|
||||
TARGETS = $(LIBRARY)
|
||||
SHARED_LIBRARY =
|
||||
IMPORT_LIBRARY =
|
||||
PROGRAM =
|
||||
|
|
@ -1,15 +0,0 @@
|
|||
#
|
||||
# This Source Code Form is subject to the terms of the Mozilla Public
|
||||
# License, v. 2.0. If a copy of the MPL was not distributed with this
|
||||
# file, You can obtain one at http://mozilla.org/MPL/2.0/.
|
||||
|
||||
#
|
||||
# Override TARGETS variable so that only static libraries
|
||||
# are specifed as dependencies within rules.mk.
|
||||
#
|
||||
|
||||
TARGETS = $(LIBRARY)
|
||||
SHARED_LIBRARY =
|
||||
IMPORT_LIBRARY =
|
||||
PROGRAM =
|
||||
|
|
@ -1,35 +0,0 @@
|
|||
#
|
||||
# This Source Code Form is subject to the terms of the Mozilla Public
|
||||
# License, v. 2.0. If a copy of the MPL was not distributed with this
|
||||
# file, You can obtain one at http://mozilla.org/MPL/2.0/.
|
||||
|
||||
#
|
||||
# Override TARGETS variable so that only static libraries
|
||||
# are specifed as dependencies within rules.mk.
|
||||
#
|
||||
|
||||
TARGETS = $(LIBRARY)
|
||||
SHARED_LIBRARY =
|
||||
IMPORT_LIBRARY =
|
||||
PROGRAM =
|
||||
|
||||
ifdef NSS_PKIX_NO_LDAP
|
||||
LDAP_HEADERS =
|
||||
LDAP_CSRCS =
|
||||
else
|
||||
LDAP_HEADERS = \
|
||||
pkix_pl_ldapt.h \
|
||||
pkix_pl_ldapcertstore.h \
|
||||
pkix_pl_ldapresponse.h \
|
||||
pkix_pl_ldaprequest.h \
|
||||
pkix_pl_ldapdefaultclient.h \
|
||||
$(NULL)
|
||||
|
||||
LDAP_CSRCS = \
|
||||
pkix_pl_ldaptemplates.c \
|
||||
pkix_pl_ldapcertstore.c \
|
||||
pkix_pl_ldapresponse.c \
|
||||
pkix_pl_ldaprequest.c \
|
||||
pkix_pl_ldapdefaultclient.c \
|
||||
$(NULL)
|
||||
endif
|
|
@ -1,15 +0,0 @@
|
|||
#
|
||||
# This Source Code Form is subject to the terms of the Mozilla Public
|
||||
# License, v. 2.0. If a copy of the MPL was not distributed with this
|
||||
# file, You can obtain one at http://mozilla.org/MPL/2.0/.
|
||||
|
||||
#
|
||||
# Override TARGETS variable so that only static libraries
|
||||
# are specifed as dependencies within rules.mk.
|
||||
#
|
||||
|
||||
TARGETS = $(LIBRARY)
|
||||
SHARED_LIBRARY =
|
||||
IMPORT_LIBRARY =
|
||||
PROGRAM =
|
||||
|
|
@ -1,15 +0,0 @@
|
|||
#
|
||||
# This Source Code Form is subject to the terms of the Mozilla Public
|
||||
# License, v. 2.0. If a copy of the MPL was not distributed with this
|
||||
# file, You can obtain one at http://mozilla.org/MPL/2.0/.
|
||||
|
||||
#
|
||||
# Override TARGETS variable so that only static libraries
|
||||
# are specifed as dependencies within rules.mk.
|
||||
#
|
||||
|
||||
TARGETS = $(LIBRARY)
|
||||
SHARED_LIBRARY =
|
||||
IMPORT_LIBRARY =
|
||||
PROGRAM =
|
||||
|
|
@ -1,15 +0,0 @@
|
|||
#
|
||||
# This Source Code Form is subject to the terms of the Mozilla Public
|
||||
# License, v. 2.0. If a copy of the MPL was not distributed with this
|
||||
# file, You can obtain one at http://mozilla.org/MPL/2.0/.
|
||||
|
||||
#
|
||||
# Override TARGETS variable so that only static libraries
|
||||
# are specifed as dependencies within rules.mk.
|
||||
#
|
||||
|
||||
TARGETS = $(LIBRARY)
|
||||
SHARED_LIBRARY =
|
||||
IMPORT_LIBRARY =
|
||||
PROGRAM =
|
||||
|
|
@ -1,16 +0,0 @@
|
|||
#
|
||||
# This Source Code Form is subject to the terms of the Mozilla Public
|
||||
# License, v. 2.0. If a copy of the MPL was not distributed with this
|
||||
# file, You can obtain one at http://mozilla.org/MPL/2.0/.
|
||||
|
||||
|
||||
#
|
||||
# Override TARGETS variable so that only static libraries
|
||||
# are specifed as dependencies within rules.mk.
|
||||
#
|
||||
|
||||
TARGETS = $(LIBRARY)
|
||||
SHARED_LIBRARY =
|
||||
IMPORT_LIBRARY =
|
||||
PROGRAM =
|
||||
|
|
@ -1,14 +0,0 @@
|
|||
#
|
||||
# This Source Code Form is subject to the terms of the Mozilla Public
|
||||
# License, v. 2.0. If a copy of the MPL was not distributed with this
|
||||
# file, You can obtain one at http://mozilla.org/MPL/2.0/.
|
||||
|
||||
#
|
||||
# Override TARGETS variable so that only static libraries
|
||||
# are specifed as dependencies within rules.mk.
|
||||
#
|
||||
|
||||
TARGETS = $(LIBRARY)
|
||||
SHARED_LIBRARY =
|
||||
IMPORT_LIBRARY =
|
||||
PROGRAM =
|
|
@ -1,19 +0,0 @@
|
|||
#
|
||||
# This Source Code Form is subject to the terms of the Mozilla Public
|
||||
# License, v. 2.0. If a copy of the MPL was not distributed with this
|
||||
# file, You can obtain one at http://mozilla.org/MPL/2.0/.
|
||||
|
||||
ifdef BUILD_IDG
|
||||
DEFINES += -DNSSDEBUG
|
||||
endif
|
||||
|
||||
#
|
||||
# Override TARGETS variable so that only static libraries
|
||||
# are specifed as dependencies within rules.mk.
|
||||
#
|
||||
|
||||
TARGETS = $(LIBRARY)
|
||||
SHARED_LIBRARY =
|
||||
IMPORT_LIBRARY =
|
||||
PROGRAM =
|
||||
|
|
@ -1,21 +0,0 @@
|
|||
#
|
||||
# This Source Code Form is subject to the terms of the Mozilla Public
|
||||
# License, v. 2.0. If a copy of the MPL was not distributed with this
|
||||
# file, You can obtain one at http://mozilla.org/MPL/2.0/.
|
||||
|
||||
#
|
||||
# Override TARGETS variable so that only static libraries
|
||||
# are specifed as dependencies within rules.mk.
|
||||
#
|
||||
|
||||
TARGETS = $(LIBRARY)
|
||||
SHARED_LIBRARY =
|
||||
IMPORT_LIBRARY =
|
||||
PROGRAM =
|
||||
|
||||
EXTRA_LIBS = $(LIBRARY)
|
||||
|
||||
ifneq ($(OS_ARCH),WINNT)
|
||||
DEFINES += -DHAVE_UNISTD_H
|
||||
endif
|
||||
DEFINES += -DHAVE_STDARG_H
|
Загрузка…
Ссылка в новой задаче