summaryrefslogtreecommitdiffstats
path: root/security/nss/coreconf
diff options
context:
space:
mode:
Diffstat (limited to 'security/nss/coreconf')
-rw-r--r--security/nss/coreconf/AIX.mk67
-rw-r--r--security/nss/coreconf/Android.mk6
-rw-r--r--security/nss/coreconf/BSD_OS.mk56
-rw-r--r--security/nss/coreconf/BeOS.mk47
-rw-r--r--security/nss/coreconf/Darwin.mk150
-rw-r--r--security/nss/coreconf/FreeBSD.mk58
-rw-r--r--security/nss/coreconf/HP-UX.mk84
-rw-r--r--security/nss/coreconf/HP-UXA.09.03.mk17
-rw-r--r--security/nss/coreconf/HP-UXA.09.07.mk16
-rw-r--r--security/nss/coreconf/HP-UXA.09.mk11
-rw-r--r--security/nss/coreconf/HP-UXB.10.01.mk12
-rw-r--r--security/nss/coreconf/HP-UXB.10.10.mk22
-rw-r--r--security/nss/coreconf/HP-UXB.10.20.mk22
-rw-r--r--security/nss/coreconf/HP-UXB.10.30.mk28
-rw-r--r--security/nss/coreconf/HP-UXB.10.mk8
-rw-r--r--security/nss/coreconf/HP-UXB.11.00.mk17
-rw-r--r--security/nss/coreconf/HP-UXB.11.11.mk17
-rw-r--r--security/nss/coreconf/HP-UXB.11.20.mk17
-rw-r--r--security/nss/coreconf/HP-UXB.11.22.mk17
-rw-r--r--security/nss/coreconf/HP-UXB.11.23.mk17
-rw-r--r--security/nss/coreconf/HP-UXB.11.mk48
-rw-r--r--security/nss/coreconf/IRIX.mk94
-rw-r--r--security/nss/coreconf/IRIX5.2.mk5
-rw-r--r--security/nss/coreconf/IRIX5.3.mk7
-rw-r--r--security/nss/coreconf/IRIX5.mk10
-rw-r--r--security/nss/coreconf/IRIX6.2.mk13
-rw-r--r--security/nss/coreconf/IRIX6.3.mk12
-rw-r--r--security/nss/coreconf/IRIX6.5.mk15
-rw-r--r--security/nss/coreconf/IRIX6.mk17
-rw-r--r--security/nss/coreconf/Linux.mk224
-rw-r--r--security/nss/coreconf/Makefile15
-rw-r--r--security/nss/coreconf/NCR3.0.mk65
-rw-r--r--security/nss/coreconf/NEC4.2.mk36
-rw-r--r--security/nss/coreconf/NetBSD.mk55
-rw-r--r--security/nss/coreconf/OS2.mk156
-rw-r--r--security/nss/coreconf/OSF1.mk48
-rw-r--r--security/nss/coreconf/OSF1V2.0.mk5
-rw-r--r--security/nss/coreconf/OSF1V3.0.mk5
-rw-r--r--security/nss/coreconf/OSF1V3.2.mk16
-rw-r--r--security/nss/coreconf/OSF1V4.0.mk24
-rw-r--r--security/nss/coreconf/OSF1V4.0B.mk5
-rw-r--r--security/nss/coreconf/OSF1V4.0D.mk9
-rw-r--r--security/nss/coreconf/OSF1V5.0.mk20
-rw-r--r--security/nss/coreconf/OSF1V5.1.mk20
-rw-r--r--security/nss/coreconf/OpenBSD.mk41
-rw-r--r--security/nss/coreconf/OpenUNIX.mk60
-rw-r--r--security/nss/coreconf/QNX.mk39
-rw-r--r--security/nss/coreconf/README555
-rw-r--r--security/nss/coreconf/RISCOS.mk22
-rw-r--r--security/nss/coreconf/ReliantUNIX.mk58
-rw-r--r--security/nss/coreconf/ReliantUNIX5.4.mk5
-rw-r--r--security/nss/coreconf/SCOOS5.0.mk6
-rw-r--r--security/nss/coreconf/SCO_SV3.2.mk60
-rw-r--r--security/nss/coreconf/SunOS4.1.3_U1.mk28
-rw-r--r--security/nss/coreconf/SunOS5.mk144
-rw-r--r--security/nss/coreconf/UNIX.mk66
-rw-r--r--security/nss/coreconf/UNIXWARE2.1.mk29
-rw-r--r--security/nss/coreconf/WIN32.mk378
-rw-r--r--security/nss/coreconf/WIN95.mk15
-rw-r--r--security/nss/coreconf/WINNT.mk20
-rw-r--r--security/nss/coreconf/Werror.mk105
-rw-r--r--security/nss/coreconf/arch.mk314
-rw-r--r--security/nss/coreconf/check_cc_clang.py20
-rw-r--r--security/nss/coreconf/command.mk39
-rw-r--r--security/nss/coreconf/config.gypi530
-rw-r--r--security/nss/coreconf/config.mk210
-rw-r--r--security/nss/coreconf/coreconf.dep12
-rw-r--r--security/nss/coreconf/coreconf.pl128
-rwxr-xr-xsecurity/nss/coreconf/cpdist.pl167
-rw-r--r--security/nss/coreconf/detect_host_arch.py25
-rw-r--r--security/nss/coreconf/empty.c1
-rw-r--r--security/nss/coreconf/headers.mk24
-rwxr-xr-xsecurity/nss/coreconf/import.pl189
-rw-r--r--security/nss/coreconf/jdk.mk504
-rwxr-xr-xsecurity/nss/coreconf/jniregen.pl79
-rw-r--r--security/nss/coreconf/location.mk78
-rw-r--r--security/nss/coreconf/mkdepend/Makefile60
-rw-r--r--security/nss/coreconf/mkdepend/cppsetup.c233
-rw-r--r--security/nss/coreconf/mkdepend/def.h184
-rw-r--r--security/nss/coreconf/mkdepend/ifparser.c551
-rw-r--r--security/nss/coreconf/mkdepend/ifparser.h83
-rw-r--r--security/nss/coreconf/mkdepend/imakemdep.h782
-rw-r--r--security/nss/coreconf/mkdepend/include.c337
-rw-r--r--security/nss/coreconf/mkdepend/main.c870
-rw-r--r--security/nss/coreconf/mkdepend/mkdepend.man382
-rw-r--r--security/nss/coreconf/mkdepend/parse.c693
-rw-r--r--security/nss/coreconf/mkdepend/pr.c124
-rw-r--r--security/nss/coreconf/module.mk37
-rw-r--r--security/nss/coreconf/nsinstall/Makefile42
-rw-r--r--security/nss/coreconf/nsinstall/nsinstall.c407
-rw-r--r--security/nss/coreconf/nsinstall/nsinstall.gyp21
-rw-r--r--security/nss/coreconf/nsinstall/pathsub.c272
-rw-r--r--security/nss/coreconf/nsinstall/pathsub.h48
-rw-r--r--security/nss/coreconf/nsinstall/sunos4.h134
-rw-r--r--security/nss/coreconf/nspr.sh48
-rwxr-xr-xsecurity/nss/coreconf/outofdate.pl39
-rw-r--r--security/nss/coreconf/prefix.mk44
-rwxr-xr-xsecurity/nss/coreconf/release.pl112
-rw-r--r--security/nss/coreconf/rules.mk970
-rw-r--r--security/nss/coreconf/ruleset.mk220
-rw-r--r--security/nss/coreconf/sanitizers.mk35
-rw-r--r--security/nss/coreconf/sanitizers.py36
-rw-r--r--security/nss/coreconf/shlibsign.py30
-rw-r--r--security/nss/coreconf/source.mk162
-rw-r--r--security/nss/coreconf/suffix.mk67
-rw-r--r--security/nss/coreconf/tree.mk52
-rw-r--r--security/nss/coreconf/version.mk77
-rw-r--r--security/nss/coreconf/version.pl48
-rw-r--r--security/nss/coreconf/werror.py58
-rw-r--r--security/nss/coreconf/zlib.mk17
110 files changed, 12839 insertions, 0 deletions
diff --git a/security/nss/coreconf/AIX.mk b/security/nss/coreconf/AIX.mk
new file mode 100644
index 000000000..e158a6a41
--- /dev/null
+++ b/security/nss/coreconf/AIX.mk
@@ -0,0 +1,67 @@
+#
+# 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/.
+
+# Config stuff for AIX.
+
+include $(CORE_DEPTH)/coreconf/UNIX.mk
+
+#
+# There are two implementation strategies available on AIX:
+# pthreads, and pthreads-user. The default is pthreads.
+# In both strategies, we need to use pthread_user.c, instead of
+# aix.c. The fact that aix.c is never used is somewhat strange.
+#
+# So we need to do the following:
+# - Default (PTHREADS_USER not defined in the environment or on
+# the command line):
+# Set PTHREADS_USER=1, USE_PTHREADS=1
+# - PTHREADS_USER=1 set in the environment or on the command line:
+# Do nothing.
+#
+ifeq ($(PTHREADS_USER),1)
+ USE_PTHREADS = # just to be safe
+ IMPL_STRATEGY = _PTH_USER
+else
+ USE_PTHREADS = 1
+ PTHREADS_USER = 1
+endif
+
+DEFAULT_COMPILER = xlc_r
+
+CC = xlc_r
+CCC = xlC_r
+
+CPU_ARCH = rs6000
+
+RANLIB = ranlib
+
+OS_CFLAGS = -DAIX -DSYSV
+OS_LIBS += -blibpath:/usr/lib:/lib -lc -lm
+
+DSO_LDOPTS = -brtl -bnortllib -bM:SRE -bnoentry
+MKSHLIB = $(LD) $(DSO_LDOPTS) -blibpath:/usr/lib:/lib -lc -lm
+
+AIX_WRAP = $(DIST)/lib/aixwrap.o
+AIX_TMP = $(OBJDIR)/_aix_tmp.o
+
+ifdef MAPFILE
+DSO_LDOPTS += -bexport:$(MAPFILE)
+else
+DSO_LDOPTS += -bexpall
+endif
+
+PROCESS_MAP_FILE = grep -v ';+' $< | grep -v ';-' | \
+ sed -e 's; DATA ;;' -e 's,;;,,' -e 's,;.*,,' > $@
+
+ifdef BUILD_OPT
+ OPTIMIZER += -qmaxmem=-1
+endif
+
+ifeq ($(USE_64), 1)
+ OS_CFLAGS += -DAIX_64BIT
+ OBJECT_MODE=64
+ export OBJECT_MODE
+endif
+
diff --git a/security/nss/coreconf/Android.mk b/security/nss/coreconf/Android.mk
new file mode 100644
index 000000000..415812a7e
--- /dev/null
+++ b/security/nss/coreconf/Android.mk
@@ -0,0 +1,6 @@
+#
+# 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/.
+
+include $(CORE_DEPTH)/coreconf/Linux.mk
diff --git a/security/nss/coreconf/BSD_OS.mk b/security/nss/coreconf/BSD_OS.mk
new file mode 100644
index 000000000..81b2b25c7
--- /dev/null
+++ b/security/nss/coreconf/BSD_OS.mk
@@ -0,0 +1,56 @@
+#
+# 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/.
+
+include $(CORE_DEPTH)/coreconf/UNIX.mk
+
+DEFAULT_COMPILER = gcc
+CC = gcc
+CCC = g++
+RANLIB = ranlib
+
+ifeq ($(OS_TEST),i386)
+ OS_REL_CFLAGS = -D__i386__
+ CPU_ARCH = x86
+else
+ifeq ($(OS_TEST),ppc)
+ OS_REL_CFLAGS = -D__ppc__
+ CPU_ARCH = ppc
+else
+ifeq ($(OS_TEST),sparc)
+ OS_REL_CFLAGS = -D__sparc__
+ CPU_ARCH = sparc
+else
+# treat the ultrasparc like a regular sparc, at least for now!
+ifeq ($(OS_TEST),sparc_v9)
+ OS_REL_CFLAGS = -D__sparc__
+ CPU_ARCH = sparc
+endif
+endif
+endif
+endif
+
+DLL_SUFFIX = so
+
+OS_CFLAGS = $(DSO_CFLAGS) $(OS_REL_CFLAGS) -Wall -Wno-switch -DBSD_OS -DBSDI -Dunix -DHAVE_STRERROR -DHAVE_BSD_FLOCK
+
+ARCH = bsdos
+
+DSO_CFLAGS = -fPIC -DPIC
+DSO_LDOPTS = -shared -Wl,-soname,lib$(LIBRARY_NAME)$(LIBRARY_VERSION).$(DLL_SUFFIX)
+
+ifdef LIBRUNPATH
+DSO_LDOPTS += -Wl,-R$(LIBRUNPATH)
+endif
+
+MKSHLIB = $(CC) $(DSO_LDOPTS)
+ifdef MAPFILE
+# Add LD options to restrict exported symbols to those in the map file
+endif
+# Change PROCESS to put the mapfile in the correct format for this platform
+PROCESS_MAP_FILE = cp $< $@
+
+G++INCLUDES = -I/usr/include/g++
+
+INCLUDES += -I/usr/X11R6/include
diff --git a/security/nss/coreconf/BeOS.mk b/security/nss/coreconf/BeOS.mk
new file mode 100644
index 000000000..750696da5
--- /dev/null
+++ b/security/nss/coreconf/BeOS.mk
@@ -0,0 +1,47 @@
+#
+# 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/.
+
+include $(CORE_DEPTH)/coreconf/UNIX.mk
+
+XP_DEFINE := $(XP_DEFINE:-DXP_UNIX=-DXP_BEOS)
+
+USE_PTHREADS =
+
+ifeq ($(USE_PTHREADS),1)
+ IMPL_STRATEGY = _PTH
+endif
+
+CC = gcc
+CCC = g++
+RANLIB = ranlib
+
+DEFAULT_COMPILER = gcc
+
+ifeq ($(OS_TEST),ppc)
+ OS_REL_CFLAGS = -Dppc
+ CPU_ARCH = ppc
+else
+ OS_REL_CFLAGS = -Di386
+ CPU_ARCH = x86
+endif
+
+MKSHLIB = $(CC) -nostart -Wl,-soname -Wl,$(@:$(OBJDIR)/%.so=%.so)
+ifdef BUILD_OPT
+ OPTIMIZER = -O2
+endif
+
+OS_CFLAGS = $(DSO_CFLAGS) $(OS_REL_CFLAGS) -Wall -Wno-switch -pipe
+OS_LIBS = -lbe
+
+DEFINES += -DBEOS
+
+ifdef USE_PTHREADS
+ DEFINES += -D_REENTRANT
+endif
+
+ARCH = beos
+
+DSO_CFLAGS = -fPIC
+DSO_LDOPTS =
diff --git a/security/nss/coreconf/Darwin.mk b/security/nss/coreconf/Darwin.mk
new file mode 100644
index 000000000..210784767
--- /dev/null
+++ b/security/nss/coreconf/Darwin.mk
@@ -0,0 +1,150 @@
+#
+# 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/.
+
+CC ?= gcc
+CCC ?= g++
+RANLIB ?= ranlib
+
+include $(CORE_DEPTH)/coreconf/UNIX.mk
+include $(CORE_DEPTH)/coreconf/Werror.mk
+
+DEFAULT_COMPILER = gcc
+
+ifndef CPU_ARCH
+# When cross-compiling, CPU_ARCH should already be defined as the target
+# architecture, set to powerpc or i386.
+CPU_ARCH := $(shell uname -p)
+endif
+
+ifeq (,$(filter-out i%86,$(CPU_ARCH)))
+ifdef USE_64
+CC += -arch x86_64
+CCC += -arch x86_64
+override CPU_ARCH = x86_64
+else
+OS_REL_CFLAGS = -Di386
+CC += -arch i386
+CCC += -arch i386
+override CPU_ARCH = x86
+endif
+else
+ifeq (arm,$(CPU_ARCH))
+# Nothing set for arm currently.
+else
+OS_REL_CFLAGS = -Dppc
+CC += -arch ppc
+CCC += -arch ppc
+endif
+endif
+
+ifneq (,$(MACOS_SDK_DIR))
+ GCC_VERSION_FULL := $(shell $(CC) -dumpversion)
+ GCC_VERSION_MAJOR := $(shell echo $(GCC_VERSION_FULL) | awk -F. '{ print $$1 }')
+ GCC_VERSION_MINOR := $(shell echo $(GCC_VERSION_FULL) | awk -F. '{ print $$2 }')
+ GCC_VERSION = $(GCC_VERSION_MAJOR).$(GCC_VERSION_MINOR)
+
+ ifeq (,$(filter-out 2 3,$(GCC_VERSION_MAJOR)))
+ # GCC <= 3
+ DARWIN_SDK_FRAMEWORKS = -F$(MACOS_SDK_DIR)/System/Library/Frameworks
+ ifneq (,$(shell find $(MACOS_SDK_DIR)/Library/Frameworks -maxdepth 0))
+ DARWIN_SDK_FRAMEWORKS += -F$(MACOS_SDK_DIR)/Library/Frameworks
+ endif
+ DARWIN_SDK_CFLAGS = -nostdinc -isystem $(MACOS_SDK_DIR)/usr/include/gcc/darwin/$(GCC_VERSION) -isystem $(MACOS_SDK_DIR)/usr/include $(DARWIN_SDK_FRAMEWORKS)
+ DARWIN_SDK_LDFLAGS = -L$(MACOS_SDK_DIR)/usr/lib/gcc/darwin -L$(MACOS_SDK_DIR)/usr/lib/gcc/darwin/$(GCC_VERSION_FULL) -L$(MACOS_SDK_DIR)/usr/lib
+ DARWIN_SDK_SHLIBFLAGS = $(DARWIN_SDK_LDFLAGS) $(DARWIN_SDK_FRAMEWORKS)
+ NEXT_ROOT = $(MACOS_SDK_DIR)
+ export NEXT_ROOT
+ else
+ # GCC >= 4
+ DARWIN_SDK_CFLAGS = -isysroot $(MACOS_SDK_DIR)
+ ifneq (4.0.0,$(GCC_VERSION_FULL))
+ # gcc > 4.0.0 passes -syslibroot to ld based on -isysroot.
+ # Don't add -isysroot to DARWIN_SDK_LDFLAGS, because the programs
+ # that are linked with those flags also get DARWIN_SDK_CFLAGS.
+ DARWIN_SDK_SHLIBFLAGS = -isysroot $(MACOS_SDK_DIR)
+ else
+ # gcc 4.0.0 doesn't pass -syslibroot to ld, it needs to be
+ # explicit.
+ DARWIN_SDK_LDFLAGS = -Wl,-syslibroot,$(MACOS_SDK_DIR)
+ DARWIN_SDK_SHLIBFLAGS = $(DARWIN_SDK_LDFLAGS)
+ endif
+ endif
+
+ LDFLAGS += $(DARWIN_SDK_LDFLAGS)
+endif
+
+# "Commons" are tentative definitions in a global scope, like this:
+# int x;
+# The meaning of a common is ambiguous. It may be a true definition:
+# int x = 0;
+# or it may be a declaration of a symbol defined in another file:
+# extern int x;
+# Use the -fno-common option to force all commons to become true
+# definitions so that the linker can catch multiply-defined symbols.
+# Also, common symbols are not allowed with Darwin dynamic libraries.
+
+OS_CFLAGS = $(DSO_CFLAGS) $(OS_REL_CFLAGS) -fno-common -pipe -DDARWIN -DHAVE_STRERROR -DHAVE_BSD_FLOCK $(DARWIN_SDK_CFLAGS)
+
+ifdef BUILD_OPT
+ifeq (11,$(ALLOW_OPT_CODE_SIZE)$(OPT_CODE_SIZE))
+ OPTIMIZER = -Oz
+else
+ OPTIMIZER = -O2
+endif
+ifdef MOZ_DEBUG_SYMBOLS
+ ifdef MOZ_DEBUG_FLAGS
+ OPTIMIZER += $(MOZ_DEBUG_FLAGS)
+ else
+ OPTIMIZER += -gdwarf-2 -gfull
+ endif
+endif
+endif
+
+ARCH = darwin
+
+DSO_CFLAGS = -fPIC
+# May override this with different compatibility and current version numbers.
+DARWIN_DYLIB_VERSIONS = -compatibility_version 1 -current_version 1
+# May override this with -bundle to create a loadable module.
+DSO_LDOPTS = -dynamiclib $(DARWIN_DYLIB_VERSIONS) -install_name @executable_path/$(notdir $@) -headerpad_max_install_names
+
+ifdef USE_GCOV
+ OS_CFLAGS += --coverage
+ LDFLAGS += --coverage
+ DSO_LDOPTS += --coverage
+endif
+
+MKSHLIB = $(CC) $(DSO_LDOPTS) $(DARWIN_SDK_SHLIBFLAGS)
+DLL_SUFFIX = dylib
+ifdef MAPFILE
+ MKSHLIB += -exported_symbols_list $(MAPFILE)
+endif
+PROCESS_MAP_FILE = grep -v ';+' $< | grep -v ';-' | \
+ sed -e 's; DATA ;;' -e 's,;;,,' -e 's,;.*,,' -e 's,^,_,' > $@
+
+USE_SYSTEM_ZLIB = 1
+ZLIB_LIBS = -lz
+
+# The system sqlite library in the latest version of Mac OS X often becomes
+# newer than the sqlite library in NSS. This may result in certain Mac OS X
+# system libraries having unresolved sqlite symbols during the shlibsign step
+# of the NSS build when we set DYLD_LIBRARY_PATH to the NSS lib directory and
+# the NSS libsqlite3.dylib is used instead of the system one. So just use the
+# system sqlite library on Mac, if it's sufficiently new.
+
+SYS_SQLITE3_VERSION_FULL := $(shell /usr/bin/sqlite3 -version | awk '{print $$1}')
+SYS_SQLITE3_VERSION_MAJOR := $(shell echo $(SYS_SQLITE3_VERSION_FULL) | awk -F. '{ print $$1 }')
+SYS_SQLITE3_VERSION_MINOR := $(shell echo $(SYS_SQLITE3_VERSION_FULL) | awk -F. '{ print $$2 }')
+
+ifeq (3,$(SYS_SQLITE3_VERSION_MAJOR))
+ ifeq (,$(filter-out 0 1 2 3 4,$(SYS_SQLITE3_VERSION_MINOR)))
+ # sqlite <= 3.4.x is too old, it doesn't provide sqlite3_file_control
+ else
+ NSS_USE_SYSTEM_SQLITE = 1
+ endif
+endif
+
+include $(CORE_DEPTH)/coreconf/sanitizers.mk
+DARWIN_SDK_SHLIBFLAGS += $(SANITIZER_LDFLAGS)
diff --git a/security/nss/coreconf/FreeBSD.mk b/security/nss/coreconf/FreeBSD.mk
new file mode 100644
index 000000000..fcbf23f6a
--- /dev/null
+++ b/security/nss/coreconf/FreeBSD.mk
@@ -0,0 +1,58 @@
+#
+# 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/.
+
+include $(CORE_DEPTH)/coreconf/UNIX.mk
+
+DEFAULT_COMPILER = gcc
+CC = gcc
+CCC = g++
+RANLIB = ranlib
+
+CPU_ARCH = $(OS_TEST)
+ifeq ($(CPU_ARCH),i386)
+CPU_ARCH = x86
+endif
+ifeq ($(CPU_ARCH),pc98)
+CPU_ARCH = x86
+endif
+ifeq ($(CPU_ARCH),amd64)
+CPU_ARCH = x86_64
+endif
+
+OS_CFLAGS = $(DSO_CFLAGS) -Wall -Wno-switch -DFREEBSD -DHAVE_STRERROR -DHAVE_BSD_FLOCK
+
+DSO_CFLAGS = -fPIC
+DSO_LDOPTS = -shared -Wl,-soname -Wl,$(notdir $@)
+
+#
+# The default implementation strategy for FreeBSD is pthreads.
+#
+ifndef CLASSIC_NSPR
+USE_PTHREADS = 1
+DEFINES += -D_THREAD_SAFE -D_REENTRANT
+OS_LIBS += -pthread
+DSO_LDOPTS += -pthread
+endif
+
+ARCH = freebsd
+
+MOZ_OBJFORMAT := $(shell test -x /usr/bin/objformat && /usr/bin/objformat || echo elf)
+
+ifeq ($(MOZ_OBJFORMAT),elf)
+DLL_SUFFIX = so
+else
+DLL_SUFFIX = so.1.0
+endif
+
+MKSHLIB = $(CC) $(DSO_LDOPTS)
+ifdef MAPFILE
+ MKSHLIB += -Wl,--version-script,$(MAPFILE)
+endif
+PROCESS_MAP_FILE = grep -v ';-' $< | \
+ sed -e 's,;+,,' -e 's; DATA ;;' -e 's,;;,,' -e 's,;.*,;,' > $@
+
+G++INCLUDES = -I/usr/include/g++
+
+INCLUDES += -I/usr/X11R6/include
diff --git a/security/nss/coreconf/HP-UX.mk b/security/nss/coreconf/HP-UX.mk
new file mode 100644
index 000000000..d18fa1489
--- /dev/null
+++ b/security/nss/coreconf/HP-UX.mk
@@ -0,0 +1,84 @@
+#
+# 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/.
+
+#
+# Config stuff for HP-UX
+#
+
+include $(CORE_DEPTH)/coreconf/UNIX.mk
+
+DEFAULT_COMPILER = cc
+
+ifeq ($(OS_TEST),ia64)
+ CPU_ARCH = ia64
+ CPU_TAG = _$(CPU_ARCH)
+ ifneq ($(USE_64),1)
+ 64BIT_TAG = _32
+ endif
+ DLL_SUFFIX = so
+else
+ CPU_ARCH = hppa
+ DLL_SUFFIX = sl
+endif
+CC = cc
+CCC = CC
+ifndef NS_USE_GCC
+OS_CFLAGS += -Ae
+endif
+OS_CFLAGS += $(DSO_CFLAGS) -DHPUX -D$(CPU_ARCH) -D_HPUX_SOURCE -D_USE_BIG_FDS
+
+ifeq ($(DEFAULT_IMPL_STRATEGY),_PTH)
+ USE_PTHREADS = 1
+ ifeq ($(CLASSIC_NSPR),1)
+ USE_PTHREADS =
+ IMPL_STRATEGY = _CLASSIC
+ endif
+ ifeq ($(PTHREADS_USER),1)
+ USE_PTHREADS =
+ IMPL_STRATEGY = _PTH_USER
+ endif
+endif
+
+ifdef PTHREADS_USER
+ OS_CFLAGS += -D_POSIX_C_SOURCE=199506L
+endif
+
+LDFLAGS = -z -Wl,+s
+
+ifdef NS_USE_GCC
+LD = $(CC)
+endif
+MKSHLIB = $(LD) $(DSO_LDOPTS) $(RPATH)
+ifdef MAPFILE
+ifndef NS_USE_GCC
+MKSHLIB += -c $(MAPFILE)
+else
+MKSHLIB += -Wl,-c,$(MAPFILE)
+endif
+endif
+PROCESS_MAP_FILE = grep -v ';+' $< | grep -v ';-' | \
+ sed -e 's; DATA ;;' -e 's,;;,,' -e 's,;.*,,' -e 's,^,+e ,' > $@
+
+ifndef NS_USE_GCC
+DSO_LDOPTS = -b +h $(notdir $@)
+RPATH = +b '$$ORIGIN'
+else
+DSO_LDOPTS = -shared -Wl,+h,$(notdir $@)
+RPATH = -Wl,+b,'$$ORIGIN'
+endif
+ifneq ($(OS_TEST),ia64)
+# pa-risc
+ifndef USE_64
+RPATH =
+endif
+endif
+
+# +Z generates position independent code for use in shared libraries.
+ifndef NS_USE_GCC
+DSO_CFLAGS = +Z
+else
+DSO_CFLAGS = -fPIC
+ASFLAGS += -x assembler-with-cpp
+endif
diff --git a/security/nss/coreconf/HP-UXA.09.03.mk b/security/nss/coreconf/HP-UXA.09.03.mk
new file mode 100644
index 000000000..991b79468
--- /dev/null
+++ b/security/nss/coreconf/HP-UXA.09.03.mk
@@ -0,0 +1,17 @@
+#
+# 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/.
+
+#
+# On HP-UX 9, the default (and only) implementation strategy is
+# classic nspr.
+#
+ifeq ($(OS_RELEASE),A.09.03)
+ DEFAULT_IMPL_STRATEGY = _CLASSIC
+endif
+
+#
+# Config stuff for HP-UXA.09.03
+#
+include $(CORE_DEPTH)/coreconf/HP-UXA.09.mk
diff --git a/security/nss/coreconf/HP-UXA.09.07.mk b/security/nss/coreconf/HP-UXA.09.07.mk
new file mode 100644
index 000000000..7c2266f5f
--- /dev/null
+++ b/security/nss/coreconf/HP-UXA.09.07.mk
@@ -0,0 +1,16 @@
+#
+# 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/.
+
+# On HP-UX 9, the default (and only) implementation strategy is
+# classic nspr.
+
+ifeq ($(OS_RELEASE),A.09.07)
+ DEFAULT_IMPL_STRATEGY = _CLASSIC
+endif
+
+#
+# Config stuff for HP-UXA.09.07
+#
+include $(CORE_DEPTH)/coreconf/HP-UXA.09.mk
diff --git a/security/nss/coreconf/HP-UXA.09.mk b/security/nss/coreconf/HP-UXA.09.mk
new file mode 100644
index 000000000..60bde35d6
--- /dev/null
+++ b/security/nss/coreconf/HP-UXA.09.mk
@@ -0,0 +1,11 @@
+#
+# 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/.
+
+#
+# Config stuff for HP-UXA.09
+#
+include $(CORE_DEPTH)/coreconf/HP-UX.mk
+
+OS_CFLAGS += -DHPUX9
diff --git a/security/nss/coreconf/HP-UXB.10.01.mk b/security/nss/coreconf/HP-UXB.10.01.mk
new file mode 100644
index 000000000..d2429b24d
--- /dev/null
+++ b/security/nss/coreconf/HP-UXB.10.01.mk
@@ -0,0 +1,12 @@
+#
+# 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/.
+ifeq ($(OS_RELEASE),B.10.01)
+ DEFAULT_IMPL_STRATEGY = _CLASSIC
+endif
+
+#
+# Config stuff for HP-UXB.10.01
+#
+include $(CORE_DEPTH)/coreconf/HP-UXB.10.mk
diff --git a/security/nss/coreconf/HP-UXB.10.10.mk b/security/nss/coreconf/HP-UXB.10.10.mk
new file mode 100644
index 000000000..c1b099079
--- /dev/null
+++ b/security/nss/coreconf/HP-UXB.10.10.mk
@@ -0,0 +1,22 @@
+#
+# 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/.
+
+# On HP-UX 10.10 and 10.20, the default implementation strategy is
+# pthreads (actually DCE threads). Classic nspr is also available.
+
+ifeq ($(OS_RELEASE),B.10.10)
+ DEFAULT_IMPL_STRATEGY = _PTH
+endif
+
+#
+# Config stuff for HP-UXB.10.10
+#
+include $(CORE_DEPTH)/coreconf/HP-UXB.10.mk
+
+OS_CFLAGS += -DHPUX10_10
+
+ifeq ($(USE_PTHREADS),1)
+ OS_CFLAGS += -D_REENTRANT
+endif
diff --git a/security/nss/coreconf/HP-UXB.10.20.mk b/security/nss/coreconf/HP-UXB.10.20.mk
new file mode 100644
index 000000000..219ae7b68
--- /dev/null
+++ b/security/nss/coreconf/HP-UXB.10.20.mk
@@ -0,0 +1,22 @@
+#
+# 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/.
+
+# On HP-UX 10.10 and 10.20, the default implementation strategy is
+# pthreads (actually DCE threads). Classic nspr is also available.
+
+ifeq ($(OS_RELEASE),B.10.20)
+ DEFAULT_IMPL_STRATEGY = _PTH
+endif
+
+#
+# Config stuff for HP-UXB.10.20
+#
+include $(CORE_DEPTH)/coreconf/HP-UXB.10.mk
+
+OS_CFLAGS += -DHPUX10_20
+
+ifeq ($(USE_PTHREADS),1)
+ OS_CFLAGS += -D_REENTRANT
+endif
diff --git a/security/nss/coreconf/HP-UXB.10.30.mk b/security/nss/coreconf/HP-UXB.10.30.mk
new file mode 100644
index 000000000..f09991a0b
--- /dev/null
+++ b/security/nss/coreconf/HP-UXB.10.30.mk
@@ -0,0 +1,28 @@
+#
+# 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/.
+
+# On HP-UX 10.30 and 11.00, the default implementation strategy is
+# pthreads. Classic nspr and pthreads-user are also available.
+
+ifeq ($(OS_RELEASE),B.10.30)
+ DEFAULT_IMPL_STRATEGY = _PTH
+endif
+
+#
+# Config stuff for HP-UXB.10.30.
+#
+include $(CORE_DEPTH)/coreconf/HP-UXB.10.mk
+
+OS_CFLAGS += -DHPUX10_30
+
+#
+# To use the true pthread (kernel thread) library on 10.30 and
+# 11.00, we should define _POSIX_C_SOURCE to be 199506L.
+# The _REENTRANT macro is deprecated.
+#
+
+ifdef USE_PTHREADS
+ OS_CFLAGS += -D_POSIX_C_SOURCE=199506L
+endif
diff --git a/security/nss/coreconf/HP-UXB.10.mk b/security/nss/coreconf/HP-UXB.10.mk
new file mode 100644
index 000000000..02243480d
--- /dev/null
+++ b/security/nss/coreconf/HP-UXB.10.mk
@@ -0,0 +1,8 @@
+#
+# 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/.
+include $(CORE_DEPTH)/coreconf/HP-UX.mk
+
+OS_CFLAGS += -DHPUX10
+OS_LIBS += -lpthread -lm
diff --git a/security/nss/coreconf/HP-UXB.11.00.mk b/security/nss/coreconf/HP-UXB.11.00.mk
new file mode 100644
index 000000000..624ae9728
--- /dev/null
+++ b/security/nss/coreconf/HP-UXB.11.00.mk
@@ -0,0 +1,17 @@
+#
+# 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/.
+
+# On HP-UX 10.30 and 11.00, the default implementation strategy is
+# pthreads. Classic nspr and pthreads-user are also available.
+
+ifeq ($(OS_RELEASE),B.11.00)
+OS_CFLAGS += -DHPUX10
+DEFAULT_IMPL_STRATEGY = _PTH
+endif
+
+#
+# Config stuff for HP-UXB.11.00.
+#
+include $(CORE_DEPTH)/coreconf/HP-UXB.11.mk
diff --git a/security/nss/coreconf/HP-UXB.11.11.mk b/security/nss/coreconf/HP-UXB.11.11.mk
new file mode 100644
index 000000000..9c43ca2a2
--- /dev/null
+++ b/security/nss/coreconf/HP-UXB.11.11.mk
@@ -0,0 +1,17 @@
+#
+# 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/.
+
+# On HP-UX 10.30 and 11.x, the default implementation strategy is
+# pthreads. Classic nspr and pthreads-user are also available.
+
+ifeq ($(OS_RELEASE),B.11.11)
+OS_CFLAGS += -DHPUX10
+DEFAULT_IMPL_STRATEGY = _PTH
+endif
+
+#
+# Config stuff for HP-UXB.11.11.
+#
+include $(CORE_DEPTH)/coreconf/HP-UXB.11.mk
diff --git a/security/nss/coreconf/HP-UXB.11.20.mk b/security/nss/coreconf/HP-UXB.11.20.mk
new file mode 100644
index 000000000..f7e32c9d1
--- /dev/null
+++ b/security/nss/coreconf/HP-UXB.11.20.mk
@@ -0,0 +1,17 @@
+#
+# 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/.
+
+# On HP-UX 10.30 and 11.x, the default implementation strategy is
+# pthreads. Classic nspr and pthreads-user are also available.
+
+ifeq ($(OS_RELEASE),B.11.20)
+OS_CFLAGS += -DHPUX10
+DEFAULT_IMPL_STRATEGY = _PTH
+endif
+
+#
+# Config stuff for HP-UXB.11.x.
+#
+include $(CORE_DEPTH)/coreconf/HP-UXB.11.mk
diff --git a/security/nss/coreconf/HP-UXB.11.22.mk b/security/nss/coreconf/HP-UXB.11.22.mk
new file mode 100644
index 000000000..a29ef07f4
--- /dev/null
+++ b/security/nss/coreconf/HP-UXB.11.22.mk
@@ -0,0 +1,17 @@
+#
+# 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/.
+
+# On HP-UX 10.30 and 11.x, the default implementation strategy is
+# pthreads. Classic nspr and pthreads-user are also available.
+
+ifeq ($(OS_RELEASE),B.11.22)
+OS_CFLAGS += -DHPUX10
+DEFAULT_IMPL_STRATEGY = _PTH
+endif
+
+#
+# Config stuff for HP-UXB.11.x.
+#
+include $(CORE_DEPTH)/coreconf/HP-UXB.11.mk
diff --git a/security/nss/coreconf/HP-UXB.11.23.mk b/security/nss/coreconf/HP-UXB.11.23.mk
new file mode 100644
index 000000000..1751b8d37
--- /dev/null
+++ b/security/nss/coreconf/HP-UXB.11.23.mk
@@ -0,0 +1,17 @@
+#
+# 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/.
+
+# On HP-UX 10.30 and 11.x, the default implementation strategy is
+# pthreads. Classic nspr and pthreads-user are also available.
+
+ifeq ($(OS_RELEASE),B.11.23)
+OS_CFLAGS += -DHPUX10
+DEFAULT_IMPL_STRATEGY = _PTH
+endif
+
+#
+# Config stuff for HP-UXB.11.x.
+#
+include $(CORE_DEPTH)/coreconf/HP-UXB.11.mk
diff --git a/security/nss/coreconf/HP-UXB.11.mk b/security/nss/coreconf/HP-UXB.11.mk
new file mode 100644
index 000000000..c61b3f6b6
--- /dev/null
+++ b/security/nss/coreconf/HP-UXB.11.mk
@@ -0,0 +1,48 @@
+#
+# 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/.
+include $(CORE_DEPTH)/coreconf/HP-UX.mk
+
+ifndef NS_USE_GCC
+ CCC = /opt/aCC/bin/aCC -ext
+ ifeq ($(USE_64), 1)
+ ifeq ($(OS_TEST), ia64)
+ ARCHFLAG = -Aa +e +p +DD64
+ else
+ # Our HP-UX build machine has a strange problem. If
+ # a 64-bit PA-RISC executable calls getcwd() in a
+ # network-mounted directory, it fails with ENOENT.
+ # We don't know why. Since nsinstall calls getcwd(),
+ # this breaks our 64-bit HP-UX nightly builds. None
+ # of our other HP-UX machines have this problem.
+ #
+ # We worked around this problem by building nsinstall
+ # as a 32-bit PA-RISC executable for 64-bit PA-RISC
+ # builds. -- wtc 2003-06-03
+ ifdef INTERNAL_TOOLS
+ ARCHFLAG = +DAportable +DS2.0
+ else
+ ARCHFLAG = -Aa +e +DA2.0W +DS2.0 +DChpux
+ endif
+ endif
+ else
+ ifeq ($(OS_TEST), ia64)
+ ARCHFLAG = -Aa +e +p +DD32
+ else
+ ARCHFLAG = +DAportable +DS2.0
+ endif
+ endif
+else
+ CCC = aCC
+endif
+
+#
+# To use the true pthread (kernel thread) library on HP-UX
+# 11.x, we should define _POSIX_C_SOURCE to be 199506L.
+# The _REENTRANT macro is deprecated.
+#
+
+OS_CFLAGS += $(ARCHFLAG) -DHPUX11 -D_POSIX_C_SOURCE=199506L
+OS_LIBS += -lpthread -lm -lrt
+HPUX11 = 1
diff --git a/security/nss/coreconf/IRIX.mk b/security/nss/coreconf/IRIX.mk
new file mode 100644
index 000000000..1c91554de
--- /dev/null
+++ b/security/nss/coreconf/IRIX.mk
@@ -0,0 +1,94 @@
+#
+# 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/.
+
+include $(CORE_DEPTH)/coreconf/UNIX.mk
+
+#
+# The default implementation strategy for Irix is classic nspr.
+#
+ifeq ($(USE_PTHREADS),1)
+ ifeq ($(USE_N32),1)
+ IMPL_STRATEGY = _n32_PTH
+ else
+ IMPL_STRATEGY = _PTH
+ endif
+endif
+
+DEFAULT_COMPILER = cc
+
+ifdef NS_USE_GCC
+ CC = gcc
+ AS = $(CC) -x assembler-with-cpp
+ ODD_CFLAGS = -Wall -Wno-format -Wno-switch
+ ifdef BUILD_OPT
+ OPTIMIZER = -O6
+ endif
+else
+ CC = cc
+ CCC = CC
+ ODD_CFLAGS = -fullwarn -xansi -woff 1209
+ ifdef BUILD_OPT
+ ifeq ($(USE_N32),1)
+ OPTIMIZER = -O -OPT:Olimit=4000
+ else
+ OPTIMIZER = -O -Olimit 4000
+ endif
+ endif
+
+ # For 6.x machines, include this flag
+ ifeq (6., $(findstring 6., $(OS_RELEASE)))
+ ifeq ($(USE_N32),1)
+ ODD_CFLAGS += -n32 -mips3 -exceptions
+ else
+ ODD_CFLAGS += -32 -multigot
+ endif
+ else
+ ODD_CFLAGS += -xgot
+ endif
+ ifeq ($(USE_N32),1)
+ OS_CFLAGS += -dollar
+ endif
+endif
+
+ODD_CFLAGS += -DSVR4 -DIRIX
+
+CPU_ARCH = mips
+
+RANLIB = /bin/true
+# For purify
+# NOTE: should always define _SGI_MP_SOURCE
+NOMD_OS_CFLAGS += $(ODD_CFLAGS) -D_SGI_MP_SOURCE
+
+OS_CFLAGS += $(NOMD_OS_CFLAGS)
+ifdef USE_MDUPDATE
+ OS_CFLAGS += -MDupdate $(DEPENDENCIES)
+endif
+
+ifeq ($(USE_N32),1)
+ SHLIB_LD_OPTS += -n32 -mips3
+endif
+
+MKSHLIB += $(LD) $(SHLIB_LD_OPTS) -shared -soname $(@:$(OBJDIR)/%.so=%.so)
+ifdef MAPFILE
+# Add LD options to restrict exported symbols to those in the map file
+endif
+# Change PROCESS to put the mapfile in the correct format for this platform
+PROCESS_MAP_FILE = cp $< $@
+
+DSO_LDOPTS = -elf -shared -all
+
+ifdef DSO_BACKEND
+ DSO_LDOPTS += -soname $(DSO_NAME)
+endif
+
+#
+# Revision notes:
+#
+# In the IRIX compilers prior to version 7.2, -n32 implied -mips3.
+# Beginning in the 7.2 compilers, -n32 implies -mips4 when the compiler
+# is running on a system with a mips4 CPU (e.g. R8K, R10K).
+# We want our code to explicitly be mips3 code, so we now explicitly
+# set -mips3 whenever we set -n32.
+#
diff --git a/security/nss/coreconf/IRIX5.2.mk b/security/nss/coreconf/IRIX5.2.mk
new file mode 100644
index 000000000..c2f5eb3f8
--- /dev/null
+++ b/security/nss/coreconf/IRIX5.2.mk
@@ -0,0 +1,5 @@
+#
+# 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/.
+include $(CORE_DEPTH)/coreconf/IRIX5.mk
diff --git a/security/nss/coreconf/IRIX5.3.mk b/security/nss/coreconf/IRIX5.3.mk
new file mode 100644
index 000000000..0020ce924
--- /dev/null
+++ b/security/nss/coreconf/IRIX5.3.mk
@@ -0,0 +1,7 @@
+#
+# 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/.
+include $(CORE_DEPTH)/coreconf/IRIX5.mk
+
+OS_CFLAGS += -DIRIX5_3
diff --git a/security/nss/coreconf/IRIX5.mk b/security/nss/coreconf/IRIX5.mk
new file mode 100644
index 000000000..80d3f8a22
--- /dev/null
+++ b/security/nss/coreconf/IRIX5.mk
@@ -0,0 +1,10 @@
+#
+# 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/.
+
+include $(CORE_DEPTH)/coreconf/IRIX.mk
+
+ifndef NS_USE_GCC
+ ODD_CFLAGS += -xgot
+endif
diff --git a/security/nss/coreconf/IRIX6.2.mk b/security/nss/coreconf/IRIX6.2.mk
new file mode 100644
index 000000000..a5760b92c
--- /dev/null
+++ b/security/nss/coreconf/IRIX6.2.mk
@@ -0,0 +1,13 @@
+#
+# 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/.
+
+
+# catch unresolved symbols
+
+SHLIB_LD_OPTS += -no_unresolved
+
+include $(CORE_DEPTH)/coreconf/IRIX6.mk
+
+OS_CFLAGS += -DIRIX6_2
diff --git a/security/nss/coreconf/IRIX6.3.mk b/security/nss/coreconf/IRIX6.3.mk
new file mode 100644
index 000000000..7faaa7af1
--- /dev/null
+++ b/security/nss/coreconf/IRIX6.3.mk
@@ -0,0 +1,12 @@
+#
+# 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/.
+
+# catch unresolved symbols
+
+SHLIB_LD_OPTS += -no_unresolved
+
+include $(CORE_DEPTH)/coreconf/IRIX6.mk
+
+OS_CFLAGS += -DIRIX6_3
diff --git a/security/nss/coreconf/IRIX6.5.mk b/security/nss/coreconf/IRIX6.5.mk
new file mode 100644
index 000000000..c3ed17d3d
--- /dev/null
+++ b/security/nss/coreconf/IRIX6.5.mk
@@ -0,0 +1,15 @@
+#
+# 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/.
+
+# catch unresolved symbols
+
+SHLIB_LD_OPTS += -no_unresolved
+
+include $(CORE_DEPTH)/coreconf/IRIX6.mk
+
+OS_CFLAGS += -DIRIX6_5
+ifndef NS_USE_GCC
+OS_CFLAGS += -mips3
+endif
diff --git a/security/nss/coreconf/IRIX6.mk b/security/nss/coreconf/IRIX6.mk
new file mode 100644
index 000000000..95b6f5e6c
--- /dev/null
+++ b/security/nss/coreconf/IRIX6.mk
@@ -0,0 +1,17 @@
+#
+# 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/.
+
+include $(CORE_DEPTH)/coreconf/IRIX.mk
+
+ifndef NS_USE_GCC
+ ifneq ($(USE_N32),1)
+ OS_CFLAGS += -32
+ endif
+ ODD_CFLAGS += -multigot
+endif
+
+ifeq ($(USE_PTHREADS),1)
+OS_LIBS += -lpthread
+endif
diff --git a/security/nss/coreconf/Linux.mk b/security/nss/coreconf/Linux.mk
new file mode 100644
index 000000000..438dab48a
--- /dev/null
+++ b/security/nss/coreconf/Linux.mk
@@ -0,0 +1,224 @@
+#
+# 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/.
+
+CC ?= gcc
+CCC ?= g++
+RANLIB ?= ranlib
+
+include $(CORE_DEPTH)/coreconf/UNIX.mk
+
+#
+# The default implementation strategy for Linux is now pthreads
+#
+ifneq ($(OS_TARGET),Android)
+ USE_PTHREADS = 1
+endif
+
+ifeq ($(USE_PTHREADS),1)
+ IMPL_STRATEGY = _PTH
+endif
+
+DEFAULT_COMPILER = gcc
+
+ifeq ($(OS_TARGET),Android)
+ifndef ANDROID_NDK
+ $(error Must set ANDROID_NDK to the path to the android NDK first)
+endif
+ifndef ANDROID_TOOLCHAIN_VERSION
+ $(error Must set ANDROID_TOOLCHAIN_VERSION to the requested version number)
+endif
+ ANDROID_PREFIX=$(OS_TEST)-linux-androideabi
+ ANDROID_TARGET=$(ANDROID_PREFIX)-$(ANDROID_TOOLCHAIN_VERSION)
+ # should autodetect which linux we are on, currently android only
+ # supports linux-x86 prebuilts
+ ANDROID_TOOLCHAIN=$(ANDROID_NDK)/toolchains/$(ANDROID_TARGET)/prebuilt/linux-x86
+ ANDROID_SYSROOT=$(ANDROID_NDK)/platforms/android-$(OS_TARGET_RELEASE)/arch-$(OS_TEST)
+ ANDROID_CC=$(ANDROID_TOOLCHAIN)/bin/$(ANDROID_PREFIX)-gcc
+ ANDROID_CCC=$(ANDROID_TOOLCHAIN)/bin/$(ANDROID_PREFIX)-g++
+ NSS_DISABLE_GTESTS=1
+# internal tools need to be built with the native compiler
+ifndef INTERNAL_TOOLS
+ CC = $(ANDROID_CC) --sysroot=$(ANDROID_SYSROOT)
+ CCC = $(ANDROID_CCC) --sysroot=$(ANDROID_SYSROOT)
+ DEFAULT_COMPILER=$(ANDROID_PREFIX)-gcc
+ ARCHFLAG = --sysroot=$(ANDROID_SYSROOT)
+ DEFINES += -DNO_SYSINFO -DNO_FORK_CHECK -DANDROID
+ CROSS_COMPILE = 1
+endif
+endif
+ifeq (,$(filter-out ppc64 ppc64le,$(OS_TEST)))
+ CPU_ARCH = ppc
+ifeq ($(USE_64),1)
+ ARCHFLAG = -m64
+endif
+else
+ifeq ($(OS_TEST),alpha)
+ OS_REL_CFLAGS = -D_ALPHA_
+ CPU_ARCH = alpha
+else
+ifeq ($(OS_TEST),x86_64)
+ifeq ($(USE_64),1)
+ CPU_ARCH = x86_64
+ ARCHFLAG = -m64
+else
+ifeq ($(USE_X32),1)
+ CPU_ARCH = x86_64
+ ARCHFLAG = -mx32
+ 64BIT_TAG = _x32
+else
+ OS_REL_CFLAGS = -Di386
+ CPU_ARCH = x86
+ ARCHFLAG = -m32
+endif
+endif
+else
+ifeq ($(OS_TEST),sparc64)
+ CPU_ARCH = sparc
+else
+ifeq (,$(filter-out arm% sa110,$(OS_TEST)))
+ CPU_ARCH = arm
+else
+ifeq (,$(filter-out parisc%,$(OS_TEST)))
+ CPU_ARCH = hppa
+else
+ifeq (,$(filter-out i%86,$(OS_TEST)))
+ OS_REL_CFLAGS = -Di386
+ CPU_ARCH = x86
+else
+ifeq ($(OS_TEST),sh4a)
+ CPU_ARCH = sh4
+else
+# $(OS_TEST) == m68k, ppc, ia64, sparc, s390, s390x, mips, sh3, sh4
+ CPU_ARCH = $(OS_TEST)
+endif
+endif
+endif
+endif
+endif
+endif
+endif
+endif
+
+
+ifneq ($(OS_TARGET),Android)
+LIBC_TAG = _glibc
+endif
+
+ifeq ($(OS_RELEASE),2.0)
+ OS_REL_CFLAGS += -DLINUX2_0
+ MKSHLIB = $(CC) -shared -Wl,-soname -Wl,$(@:$(OBJDIR)/%.so=%.so) $(RPATH)
+ ifdef MAPFILE
+ MKSHLIB += -Wl,--version-script,$(MAPFILE)
+ endif
+ PROCESS_MAP_FILE = grep -v ';-' $< | \
+ sed -e 's,;+,,' -e 's; DATA ;;' -e 's,;;,,' -e 's,;.*,;,' > $@
+endif
+
+ifdef BUILD_OPT
+ifeq (11,$(ALLOW_OPT_CODE_SIZE)$(OPT_CODE_SIZE))
+ OPTIMIZER = -Os
+else
+ OPTIMIZER = -O2
+endif
+ifdef MOZ_DEBUG_SYMBOLS
+ ifdef MOZ_DEBUG_FLAGS
+ OPTIMIZER += $(MOZ_DEBUG_FLAGS)
+ else
+ OPTIMIZER += -gdwarf-2
+ endif
+endif
+endif
+
+ifndef COMPILER_TAG
+COMPILER_TAG := _$(CC_NAME)
+endif
+
+ifeq ($(USE_PTHREADS),1)
+OS_PTHREAD = -lpthread
+endif
+
+OS_CFLAGS = $(DSO_CFLAGS) $(OS_REL_CFLAGS) $(ARCHFLAG) -pipe -ffunction-sections -fdata-sections -DLINUX -Dlinux -DHAVE_STRERROR
+OS_LIBS = $(OS_PTHREAD) -ldl -lc
+
+ifdef USE_PTHREADS
+ DEFINES += -D_REENTRANT
+endif
+
+ARCH = linux
+
+DSO_CFLAGS = -fPIC
+DSO_LDOPTS = -shared $(ARCHFLAG) -Wl,--gc-sections
+# The linker on Red Hat Linux 7.2 and RHEL 2.1 (GNU ld version 2.11.90.0.8)
+# incorrectly reports undefined references in the libraries we link with, so
+# we don't use -z defs there.
+# Also, -z defs conflicts with Address Sanitizer, which emits relocations
+# against the libsanitizer runtime built into the main executable.
+ZDEFS_FLAG = -Wl,-z,defs
+ifneq ($(USE_ASAN),1)
+DSO_LDOPTS += $(if $(findstring 2.11.90.0.8,$(shell ld -v)),,$(ZDEFS_FLAG))
+endif
+LDFLAGS += $(ARCHFLAG)
+
+# On Maemo, we need to use the -rpath-link flag for even the standard system
+# library directories.
+ifdef _SBOX_DIR
+LDFLAGS += -Wl,-rpath-link,/usr/lib:/lib
+endif
+
+# INCLUDES += -I/usr/include -Y/usr/include/linux
+G++INCLUDES = -I/usr/include/g++
+
+#
+# Always set CPU_TAG on Linux.
+#
+CPU_TAG = _$(CPU_ARCH)
+
+#
+# On Linux 2.6 or later, build libfreebl3.so with no NSPR and libnssutil3.so
+# dependencies by default. Set FREEBL_NO_DEPEND to 0 in the environment to
+# override this.
+#
+ifneq ($(OS_TARGET),Android)
+ifeq (2.6,$(firstword $(sort 2.6 $(OS_RELEASE))))
+ifndef FREEBL_NO_DEPEND
+FREEBL_NO_DEPEND = 1
+FREEBL_LOWHASH = 1
+endif
+endif
+endif
+
+USE_SYSTEM_ZLIB = 1
+ZLIB_LIBS = -lz
+
+# The -rpath '$$ORIGIN' linker option instructs this library to search for its
+# dependencies in the same directory where it resides.
+ifeq ($(BUILD_SUN_PKG), 1)
+ifeq ($(USE_64), 1)
+RPATH = -Wl,-rpath,'$$ORIGIN:/opt/sun/private/lib64:/opt/sun/private/lib'
+else
+RPATH = -Wl,-rpath,'$$ORIGIN:/opt/sun/private/lib'
+endif
+endif
+
+OS_REL_CFLAGS += -DLINUX2_1
+MKSHLIB = $(CC) $(DSO_LDOPTS) -Wl,-soname -Wl,$(@:$(OBJDIR)/%.so=%.so) $(RPATH)
+
+ifdef MAPFILE
+ MKSHLIB += -Wl,--version-script,$(MAPFILE)
+endif
+PROCESS_MAP_FILE = grep -v ';-' $< | \
+ sed -e 's,;+,,' -e 's; DATA ;;' -e 's,;;,,' -e 's,;.*,;,' > $@
+
+ifeq ($(OS_RELEASE),2.4)
+DEFINES += -DNO_FORK_CHECK
+endif
+
+ifdef USE_GCOV
+OS_CFLAGS += --coverage
+LDFLAGS += --coverage
+DSO_LDOPTS += --coverage
+endif
+
+include $(CORE_DEPTH)/coreconf/sanitizers.mk
diff --git a/security/nss/coreconf/Makefile b/security/nss/coreconf/Makefile
new file mode 100644
index 000000000..aca888216
--- /dev/null
+++ b/security/nss/coreconf/Makefile
@@ -0,0 +1,15 @@
+#
+# 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
+
+DIRS = nsinstall
+
+include $(DEPTH)/coreconf/config.mk
+include $(DEPTH)/coreconf/rules.mk
+
+export:: libs
diff --git a/security/nss/coreconf/NCR3.0.mk b/security/nss/coreconf/NCR3.0.mk
new file mode 100644
index 000000000..7b8e31be3
--- /dev/null
+++ b/security/nss/coreconf/NCR3.0.mk
@@ -0,0 +1,65 @@
+#
+# 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/.
+
+include $(CORE_DEPTH)/coreconf/UNIX.mk
+
+DEFAULT_COMPILER = cc
+
+###
+NS_USE_NATIVE = 1
+
+# NS_USE_GCC = 1
+
+export PATH:=$(PATH):/opt/ncc/bin
+###
+
+RANLIB = true
+GCC_FLAGS_EXTRA += -pipe
+
+DEFINES += -DSVR4 -DSYSV -DHAVE_STRERROR -DNCR
+
+OS_CFLAGS += -Hnocopyr -DSVR4 -DSYSV -DHAVE_STRERROR -DNCR -DPRFSTREAMS_BROKEN
+
+ifdef NS_USE_NATIVE
+ CC = cc
+ CCC = ncc
+ CXX = ncc
+# OS_LIBS += -L/opt/ncc/lib
+else
+# OS_LIBS +=
+endif
+
+#OS_LIBS += -lsocket -lnsl -ldl -lc
+
+MKSHLIB += $(LD) $(DSO_LDOPTS)
+#DSO_LDOPTS += -G -z defs
+DSO_LDOPTS += -G
+ifdef MAPFILE
+# Add LD options to restrict exported symbols to those in the map file
+endif
+# Change PROCESS to put the mapfile in the correct format for this platform
+PROCESS_MAP_FILE = cp $< $@
+
+CPU_ARCH = x86
+ARCH = ncr
+
+NOSUCHFILE = /solaris-rm-f-sucks
+
+# now take care of default GCC (rus@5/5/97)
+
+ifdef NS_USE_GCC
+ # if gcc-settings are redefined already - don't touch it
+ #
+ ifeq (,$(findstring gcc, $(CC)))
+ CC = gcc
+ CCC = g++
+ CXX = g++
+ # always use -fPIC - some makefiles are still broken and don't distinguish
+ # situation when they build shared and static libraries
+ CFLAGS += -fPIC -Wall -Wno-switch $(GCC_FLAGS_EXTRA)
+# OS_LIBS += -L/usr/local/lib -lstdc++ -lg++ -lgcc
+ endif
+endif
+###
diff --git a/security/nss/coreconf/NEC4.2.mk b/security/nss/coreconf/NEC4.2.mk
new file mode 100644
index 000000000..68cc1463c
--- /dev/null
+++ b/security/nss/coreconf/NEC4.2.mk
@@ -0,0 +1,36 @@
+#
+# 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/.
+
+include $(CORE_DEPTH)/coreconf/UNIX.mk
+
+DEFAULT_COMPILER = $(CORE_DEPTH)/build/hcc
+
+CPU_ARCH = mips
+
+ifdef NS_USE_GCC
+CC = gcc
+CCC = g++
+else
+CC = $(CORE_DEPTH)/build/hcc
+OS_CFLAGS = -Xa -KGnum=0 -KOlimit=4000
+CCC = g++
+endif
+
+MKSHLIB = $(LD) $(DSO_LDOPTS)
+ifdef MAPFILE
+# Add LD options to restrict exported symbols to those in the map file
+endif
+# Change PROCESS to put the mapfile in the correct format for this platform
+PROCESS_MAP_FILE = cp $< $@
+
+RANLIB = /bin/true
+
+OS_CFLAGS += $(ODD_CFLAGS) -DSVR4 -D__SVR4 -DNEC -Dnec_ews -DHAVE_STRERROR
+OS_LIBS = -lsocket -lnsl -ldl $(LDOPTIONS)
+LDOPTIONS = -lc -L/usr/ucblib -lucb
+
+NOSUCHFILE = /nec-rm-f-sucks
+
+DSO_LDOPTS = -G
diff --git a/security/nss/coreconf/NetBSD.mk b/security/nss/coreconf/NetBSD.mk
new file mode 100644
index 000000000..654f1aec6
--- /dev/null
+++ b/security/nss/coreconf/NetBSD.mk
@@ -0,0 +1,55 @@
+#
+# 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/.
+
+include $(CORE_DEPTH)/coreconf/UNIX.mk
+
+DEFAULT_COMPILER = gcc
+CC = gcc
+CCC = g++
+RANLIB = ranlib
+
+CPU_ARCH := $(shell uname -p)
+ifeq ($(CPU_ARCH),i386)
+OS_REL_CFLAGS = -Di386
+CPU_ARCH = x86
+endif
+
+ifndef OBJECT_FMT
+OBJECT_FMT := $(shell if echo __ELF__ | $${CC:-cc} -E - | grep -q __ELF__ ; then echo a.out ; else echo ELF ; fi)
+endif
+
+ifeq ($(OBJECT_FMT),ELF)
+DLL_SUFFIX = so
+else
+DLL_SUFFIX = so.1.0
+endif
+
+OS_CFLAGS = $(DSO_CFLAGS) $(OS_REL_CFLAGS) -Wall -Wno-switch -pipe -DNETBSD -Dunix -DHAVE_STRERROR -DHAVE_BSD_FLOCK
+
+OS_LIBS = -lcompat
+
+ARCH = netbsd
+
+DSO_CFLAGS = -fPIC -DPIC
+DSO_LDOPTS = -shared
+ifeq ($(OBJECT_FMT),ELF)
+DSO_LDOPTS += -Wl,-soname,lib$(LIBRARY_NAME)$(LIBRARY_VERSION).$(DLL_SUFFIX)
+endif
+
+ifdef LIBRUNPATH
+DSO_LDOPTS += -Wl,-R$(LIBRUNPATH)
+endif
+
+MKSHLIB = $(CC) $(DSO_LDOPTS)
+ifdef MAPFILE
+# Add LD options to restrict exported symbols to those in the map file
+endif
+# Change PROCESS to put the mapfile in the correct format for this platform
+PROCESS_MAP_FILE = cp $< $@
+
+
+G++INCLUDES = -I/usr/include/g++
+
+INCLUDES += -I/usr/X11R6/include
diff --git a/security/nss/coreconf/OS2.mk b/security/nss/coreconf/OS2.mk
new file mode 100644
index 000000000..f23571ce0
--- /dev/null
+++ b/security/nss/coreconf/OS2.mk
@@ -0,0 +1,156 @@
+#
+# 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/.
+
+MOZ_WIDGET_TOOLKIT = os2
+
+# XP_PC is for Window and OS2 on Intel X86
+# XP_OS2 is strictly for OS2 only
+XP_DEFINE += -DXP_PC=1 -DXP_OS2=1
+
+# Override prefix
+LIB_PREFIX = $(NULL)
+
+# Override suffix in suffix.mk
+LIB_SUFFIX = lib
+# the DLL_SUFFIX must be uppercase for FIPS mode to work. bugzilla 240784
+DLL_SUFFIX = DLL
+PROG_SUFFIX = .exe
+
+
+CCC = gcc
+LD = gcc
+AR = emxomfar r $@
+# Keep AR_FLAGS blank so that we do not have to change rules.mk
+AR_FLAGS =
+RANLIB = @echo OS2 RANLIB
+BSDECHO = @echo OS2 BSDECHO
+IMPLIB = emximp -o
+FILTER = emxexp -o
+
+# GCC for OS/2 currently predefines these, but we don't want them
+DEFINES += -Uunix -U__unix -U__unix__
+
+DEFINES += -DTCPV40HDRS
+
+ifeq ($(MOZ_OS2_HIGH_MEMORY),1)
+HIGHMEM_LDFLAG = -Zhigh-mem
+endif
+
+ifndef NO_SHARED_LIB
+WRAP_MALLOC_LIB =
+WRAP_MALLOC_CFLAGS =
+DSO_CFLAGS =
+DSO_PIC_CFLAGS =
+MKSHLIB = $(CXX) $(CXXFLAGS) $(DSO_LDOPTS) -o $@
+MKCSHLIB = $(CC) $(CFLAGS) $(DSO_LDOPTS) -o $@
+MKSHLIB_FORCE_ALL =
+MKSHLIB_UNFORCE_ALL =
+DSO_LDOPTS = -Zomf -Zdll -Zmap $(HIGHMEM_LDFLAG)
+SHLIB_LDSTARTFILE =
+SHLIB_LDENDFILE =
+ifdef MAPFILE
+MKSHLIB += $(MAPFILE)
+endif
+PROCESS_MAP_FILE = \
+ echo LIBRARY $(LIBRARY_NAME)$(LIBRARY_VERSION) INITINSTANCE TERMINSTANCE > $@; \
+ echo PROTMODE >> $@; \
+ echo CODE LOADONCALL MOVEABLE DISCARDABLE >> $@; \
+ echo DATA PRELOAD MOVEABLE MULTIPLE NONSHARED >> $@; \
+ echo EXPORTS >> $@; \
+ grep -v ';+' $< | grep -v ';-' | \
+ sed -e 's; DATA ;;' -e 's,;;,,' -e 's,;.*,,' -e 's,\([\t ]*\),\1_,' | \
+ awk 'BEGIN {ord=1;} { print($$0 " @" ord " RESIDENTNAME"); ord++;}' >> $@
+
+endif #NO_SHARED_LIB
+
+OS_CFLAGS = -Wall -Wno-unused -Wpointer-arith -Wcast-align -Wno-switch -Zomf -DDEBUG -DTRACING -g
+
+ifdef BUILD_OPT
+ifeq (11,$(ALLOW_OPT_CODE_SIZE)$(OPT_CODE_SIZE))
+ OPTIMIZER += -Os -s
+else
+ OPTIMIZER += -O2 -s
+endif
+DEFINES += -UDEBUG -U_DEBUG -DNDEBUG
+DLLFLAGS = -DLL -OUT:$@ -MAP:$(@:.dll=.map) $(HIGHMEM_LDFLAG)
+EXEFLAGS = -PMTYPE:VIO -OUT:$@ -MAP:$(@:.exe=.map) -nologo -NOE $(HIGHMEM_LDFLAG)
+OBJDIR_TAG = _OPT
+else
+#OPTIMIZER = -O+ -Oi
+DEFINES += -DDEBUG -D_DEBUG -DDEBUGPRINTS #HCT Need += to avoid overidding manifest.mn
+DLLFLAGS = -DEBUG -DLL -OUT:$@ -MAP:$(@:.dll=.map) $(HIGHMEM_LDFLAG)
+EXEFLAGS = -DEBUG -PMTYPE:VIO -OUT:$@ -MAP:$(@:.exe=.map) -nologo -NOE $(HIGHMEM_LDFLAG)
+OBJDIR_TAG = _DBG
+LDFLAGS = -DEBUG $(HIGHMEM_LDFLAG)
+endif # BUILD_OPT
+
+# OS/2 use nsinstall that is included in the toolkit.
+# since we do not wish to support and maintain 3 version of nsinstall in mozilla, nspr and nss
+
+ifdef BUILD_TREE
+NSINSTALL_DIR = $(BUILD_TREE)/nss
+else
+NSINSTALL_DIR = $(CORE_DEPTH)/coreconf/nsinstall
+endif
+# NSINSTALL = $(NSINSTALL_DIR)/$(OBJDIR_NAME)/nsinstall
+NSINSTALL = nsinstall # HCT4OS2
+INSTALL = $(NSINSTALL)
+
+MKDEPEND_DIR = $(CORE_DEPTH)/coreconf/mkdepend
+MKDEPEND = $(MKDEPEND_DIR)/$(OBJDIR_NAME)/mkdepend
+MKDEPENDENCIES = $(OBJDIR_NAME)/depend.mk
+
+####################################################################
+#
+# One can define the makefile variable NSDISTMODE to control
+# how files are published to the 'dist' directory. If not
+# defined, the default is "install using relative symbolic
+# links". The two possible values are "copy", which copies files
+# but preserves source mtime, and "absolute_symlink", which
+# installs using absolute symbolic links.
+# - THIS IS NOT PART OF THE NEW BINARY RELEASE PLAN for 9/30/97
+# - WE'RE KEEPING IT ONLY FOR BACKWARDS COMPATIBILITY
+####################################################################
+
+ifeq ($(NSDISTMODE),copy)
+ # copy files, but preserve source mtime
+ INSTALL = $(NSINSTALL)
+ INSTALL += -t
+else
+ ifeq ($(NSDISTMODE),absolute_symlink)
+ # install using absolute symbolic links
+ INSTALL = $(NSINSTALL)
+ INSTALL += -L `pwd`
+ else
+ # install using relative symbolic links
+ INSTALL = $(NSINSTALL)
+ INSTALL += -R
+ endif
+endif
+
+define MAKE_OBJDIR
+if test ! -d $(@D); then rm -rf $(@D); $(NSINSTALL) -D $(@D); fi
+endef
+
+#
+# override the definition of DLL_PREFIX in prefix.mk
+#
+
+ifndef DLL_PREFIX
+ DLL_PREFIX = $(NULL)
+endif
+
+#
+# override the TARGETS defined in ruleset.mk, adding IMPORT_LIBRARY
+#
+ifndef TARGETS
+ TARGETS = $(LIBRARY) $(SHARED_LIBRARY) $(IMPORT_LIBRARY) $(PROGRAM)
+endif
+
+
+ifdef LIBRARY_NAME
+ IMPORT_LIBRARY = $(OBJDIR)/$(LIBRARY_NAME)$(LIBRARY_VERSION)$(JDK_DEBUG_SUFFIX).lib
+endif
+
diff --git a/security/nss/coreconf/OSF1.mk b/security/nss/coreconf/OSF1.mk
new file mode 100644
index 000000000..4e411c139
--- /dev/null
+++ b/security/nss/coreconf/OSF1.mk
@@ -0,0 +1,48 @@
+#
+# 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/.
+
+#
+# The Bourne shell (sh) on OSF1 doesn't handle "set -e" correctly,
+# which we use to stop LOOP_OVER_DIRS submakes as soon as any
+# submake fails. So we use the Korn shell instead.
+#
+SHELL = /usr/bin/ksh
+
+include $(CORE_DEPTH)/coreconf/UNIX.mk
+
+DEFAULT_COMPILER = cc
+
+CC = cc
+OS_CFLAGS += $(NON_LD_FLAGS) -std1
+CCC = cxx
+RANLIB = /bin/true
+CPU_ARCH = alpha
+
+ifdef BUILD_OPT
+ OPTIMIZER += -Olimit 4000
+endif
+
+NON_LD_FLAGS += -ieee_with_inexact
+OS_CFLAGS += -DOSF1 -D_REENTRANT
+
+ifeq ($(USE_PTHREADS),1)
+ OS_CFLAGS += -pthread
+endif
+
+# The command to build a shared library on OSF1.
+MKSHLIB += ld -shared -expect_unresolved "*" -soname $(notdir $@)
+ifdef MAPFILE
+MKSHLIB += -hidden -input $(MAPFILE)
+endif
+PROCESS_MAP_FILE = grep -v ';+' $< | grep -v ';-' | \
+ sed -e 's; DATA ;;' -e 's,;;,,' -e 's,;.*,,' -e 's,^,-exported_symbol ,' > $@
+
+DSO_LDOPTS += -shared
+
+# required for freebl
+USE_64=1
+# this platform name does not use a bit tag due to only having a 64-bit ABI
+64BIT_TAG=
+
diff --git a/security/nss/coreconf/OSF1V2.0.mk b/security/nss/coreconf/OSF1V2.0.mk
new file mode 100644
index 000000000..e1e9f23db
--- /dev/null
+++ b/security/nss/coreconf/OSF1V2.0.mk
@@ -0,0 +1,5 @@
+#
+# 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/.
+include $(CORE_DEPTH)/coreconf/OSF1.mk
diff --git a/security/nss/coreconf/OSF1V3.0.mk b/security/nss/coreconf/OSF1V3.0.mk
new file mode 100644
index 000000000..e1e9f23db
--- /dev/null
+++ b/security/nss/coreconf/OSF1V3.0.mk
@@ -0,0 +1,5 @@
+#
+# 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/.
+include $(CORE_DEPTH)/coreconf/OSF1.mk
diff --git a/security/nss/coreconf/OSF1V3.2.mk b/security/nss/coreconf/OSF1V3.2.mk
new file mode 100644
index 000000000..17178e73c
--- /dev/null
+++ b/security/nss/coreconf/OSF1V3.2.mk
@@ -0,0 +1,16 @@
+#
+# 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/.
+
+# On OSF1 V3.2, classic nspr is the default (and only) implementation
+# strategy.
+
+#
+# Config stuff for DEC OSF/1 V3.2
+#
+include $(CORE_DEPTH)/coreconf/OSF1.mk
+
+ifeq ($(OS_RELEASE),V3.2)
+ OS_CFLAGS += -DOSF1V3
+endif
diff --git a/security/nss/coreconf/OSF1V4.0.mk b/security/nss/coreconf/OSF1V4.0.mk
new file mode 100644
index 000000000..b563c7291
--- /dev/null
+++ b/security/nss/coreconf/OSF1V4.0.mk
@@ -0,0 +1,24 @@
+#
+# 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/.
+
+# On OSF1 V4.0, pthreads is the default implementation strategy.
+# Classic nspr is also available.
+
+ifneq ($(OS_RELEASE),V3.2)
+ USE_PTHREADS = 1
+ ifeq ($(CLASSIC_NSPR), 1)
+ USE_PTHREADS =
+ IMPL_STRATEGY := _CLASSIC
+ endif
+endif
+
+#
+# Config stuff for DEC OSF/1 V4.0
+#
+include $(CORE_DEPTH)/coreconf/OSF1.mk
+
+ifeq ($(OS_RELEASE),V4.0)
+ OS_CFLAGS += -DOSF1V4
+endif
diff --git a/security/nss/coreconf/OSF1V4.0B.mk b/security/nss/coreconf/OSF1V4.0B.mk
new file mode 100644
index 000000000..7282ba727
--- /dev/null
+++ b/security/nss/coreconf/OSF1V4.0B.mk
@@ -0,0 +1,5 @@
+#
+# 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/.
+include $(CORE_DEPTH)/coreconf/OSF1V4.0.mk
diff --git a/security/nss/coreconf/OSF1V4.0D.mk b/security/nss/coreconf/OSF1V4.0D.mk
new file mode 100644
index 000000000..6b0802ec8
--- /dev/null
+++ b/security/nss/coreconf/OSF1V4.0D.mk
@@ -0,0 +1,9 @@
+#
+# 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/.
+include $(CORE_DEPTH)/coreconf/OSF1V4.0.mk
+DEFINES += -DOSF1V4D
+
+OS_LIBS += -lpthread -lrt
+
diff --git a/security/nss/coreconf/OSF1V5.0.mk b/security/nss/coreconf/OSF1V5.0.mk
new file mode 100644
index 000000000..02fc8d2d8
--- /dev/null
+++ b/security/nss/coreconf/OSF1V5.0.mk
@@ -0,0 +1,20 @@
+#
+# 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/.
+
+# On OSF1 V5.0, pthreads is the default implementation strategy.
+# Classic nspr is also available.
+
+ifneq ($(OS_RELEASE),V3.2)
+ USE_PTHREADS = 1
+ ifeq ($(CLASSIC_NSPR), 1)
+ USE_PTHREADS =
+ IMPL_STRATEGY := _CLASSIC
+ endif
+endif
+
+#
+# Config stuff for DEC OSF/1 V5.0
+#
+include $(CORE_DEPTH)/coreconf/OSF1.mk
diff --git a/security/nss/coreconf/OSF1V5.1.mk b/security/nss/coreconf/OSF1V5.1.mk
new file mode 100644
index 000000000..854bb5316
--- /dev/null
+++ b/security/nss/coreconf/OSF1V5.1.mk
@@ -0,0 +1,20 @@
+#
+# 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/.
+
+# On OSF1 V5.0, pthreads is the default implementation strategy.
+# Classic nspr is also available.
+
+ifneq ($(OS_RELEASE),V3.2)
+ USE_PTHREADS = 1
+ ifeq ($(CLASSIC_NSPR), 1)
+ USE_PTHREADS =
+ IMPL_STRATEGY := _CLASSIC
+ endif
+endif
+
+#
+# Config stuff for DEC OSF/1 V5.1
+#
+include $(CORE_DEPTH)/coreconf/OSF1.mk
diff --git a/security/nss/coreconf/OpenBSD.mk b/security/nss/coreconf/OpenBSD.mk
new file mode 100644
index 000000000..36a92d087
--- /dev/null
+++ b/security/nss/coreconf/OpenBSD.mk
@@ -0,0 +1,41 @@
+#
+# 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/.
+
+include $(CORE_DEPTH)/coreconf/UNIX.mk
+
+CC ?= gcc
+CXX ?= g++
+DEFAULT_COMPILER = ${CC}
+CCC = ${CXX}
+RANLIB = ranlib
+
+CPU_ARCH := $(shell arch -s)
+ifeq ($(CPU_ARCH),i386)
+OS_REL_CFLAGS = -Di386
+CPU_ARCH = x86
+endif
+
+ifndef CLASSIC_NSPR
+USE_PTHREADS = 1
+DEFINES += -pthread
+OS_LIBS += -pthread
+DSO_LDOPTS += -pthread
+endif
+
+DLL_SUFFIX = so.1.0
+
+OS_CFLAGS = $(DSO_CFLAGS) $(OS_REL_CFLAGS) -Wall -Wno-switch -pipe -DOPENBSD
+
+OS_LIBS =
+
+ARCH = openbsd
+
+DSO_CFLAGS = -fPIC -DPIC
+DSO_LDOPTS = -shared -fPIC -Wl,-soname,lib$(LIBRARY_NAME)$(LIBRARY_VERSION).$(DLL_SUFFIX)
+
+MKSHLIB = $(CC) $(DSO_LDOPTS)
+
+USE_SYSTEM_ZLIB = 1
+ZLIB_LIBS = -lz
diff --git a/security/nss/coreconf/OpenUNIX.mk b/security/nss/coreconf/OpenUNIX.mk
new file mode 100644
index 000000000..209ca410e
--- /dev/null
+++ b/security/nss/coreconf/OpenUNIX.mk
@@ -0,0 +1,60 @@
+#
+# 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/.
+
+include $(CORE_DEPTH)/coreconf/UNIX.mk
+
+DEFAULT_COMPILER = gcc
+
+CC = gcc
+OS_CFLAGS += -fPIC
+CCC = g++
+CCC += -DPRFSTREAMS_BROKEN -I/usr/gnu/lib/g++-include
+# CCC = $(CORE_DEPTH)/build/hcpp
+# CCC += +.cpp +w
+RANLIB = /bin/true
+
+#
+# -DSCO_PM - Policy Manager AKA: SCO Licensing
+# -DSCO - Changes to Netscape source (consistent with AIX, LINUX, etc..)
+# -Dsco - Needed for /usr/include/X11/*
+#
+OS_CFLAGS += -DSCO_SV -DSYSV -D_SVID3 -DHAVE_STRERROR -DSW_THREADS -DSCO_PM -DSCO -Dsco
+#OS_LIBS += -lpmapi -lsocket -lc
+MKSHLIB = $(LD)
+MKSHLIB += $(DSO_LDOPTS)
+XINC = /usr/include/X11
+MOTIFLIB += -lXm
+INCLUDES += -I$(XINC)
+CPU_ARCH = x86
+GFX_ARCH = x
+ARCH = sco
+LOCALE_MAP = $(CORE_DEPTH)/cmd/xfe/intl/sco.lm
+EN_LOCALE = C
+DE_LOCALE = de_DE.ISO8859-1
+FR_LOCALE = fr_FR.ISO8859-1
+JP_LOCALE = ja
+SJIS_LOCALE = ja_JP.SJIS
+KR_LOCALE = ko_KR.EUC
+CN_LOCALE = zh
+TW_LOCALE = zh
+I2_LOCALE = i2
+LOC_LIB_DIR = /usr/lib/X11
+NOSUCHFILE = /solaris-rm-f-sucks
+BSDECHO = /bin/echo
+ifdef MAPFILE
+# Add LD options to restrict exported symbols to those in the map file
+endif
+# Change PROCESS to put the mapfile in the correct format for this platform
+PROCESS_MAP_FILE = cp $< $@
+
+#
+# These defines are for building unix plugins
+#
+BUILD_UNIX_PLUGINS = 1
+#DSO_LDOPTS += -b elf -G -z defs
+DSO_LDOPTS += -G
+
+# Used for Java compiler
+EXPORT_FLAGS += -W l,-Bexport
diff --git a/security/nss/coreconf/QNX.mk b/security/nss/coreconf/QNX.mk
new file mode 100644
index 000000000..b1187cb7f
--- /dev/null
+++ b/security/nss/coreconf/QNX.mk
@@ -0,0 +1,39 @@
+#
+# 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/.
+
+include $(CORE_DEPTH)/coreconf/UNIX.mk
+
+USE_PTHREADS = 1
+
+ifeq ($(USE_PTHREADS),1)
+ IMPL_STRATEGY = _PTH
+endif
+
+CC = qcc
+CCC = qcc
+RANLIB = ranlib
+
+DEFAULT_COMPILER = qcc
+ifeq ($(OS_TEST),mips)
+ CPU_ARCH = mips
+else
+ CPU_ARCH = x86
+endif
+
+MKSHLIB = $(CC) -shared -Wl,-soname -Wl,$(@:$(OBJDIR)/%.so=%.so)
+ifdef BUILD_OPT
+ OPTIMIZER = -O2
+endif
+
+OS_CFLAGS = $(DSO_CFLAGS) $(OS_REL_CFLAGS) -Vgcc_ntox86 -Wall -pipe -DNTO -DHAVE_STRERROR -D_QNX_SOURCE -D_POSIX_C_SOURCE=199506 -D_XOPEN_SOURCE=500
+
+ifdef USE_PTHREADS
+ DEFINES += -D_REENTRANT
+endif
+
+ARCH = QNX
+
+DSO_CFLAGS = -Wc,-fPIC
+DSO_LDOPTS = -shared
diff --git a/security/nss/coreconf/README b/security/nss/coreconf/README
new file mode 100644
index 000000000..4b1e410cb
--- /dev/null
+++ b/security/nss/coreconf/README
@@ -0,0 +1,555 @@
+OVERVIEW of "ns/coreconf":
+
+ This README file is an attempt to provide the reader with a simple
+ synopsis of the "ns/coreconf" build system which was originally
+ fundamentally designed and built to accomodate Netscape's binary
+ release model. Wherever possible, an attempt has been made to
+ comply with the NSPR 2.0 build system, including mimicing the
+ compiler/linker flags, and directory naming structure. The reader
+ should keep in mind that the system builds binary releases of
+ header files, class files, libraries, and executables on numerous
+ flavors of UNIX and Windows operating systems. Unfortunately,
+ no serious attempt has ever been made to incorporate an ability to
+ generate cross-platform binaries on an Apple MacIntosh platform.
+
+ Note that this file will not attempt to redefine or document the
+ architecture of this system. However, documents on this subject
+ are available at the following URL:
+
+ http://warp/hardcore/prj-ttools/specs/release/index.html
+
+
+
+DEPENDENCIES of "ns/coreconf":
+
+ The "ns/coreconf" build system requires the specified versions of
+ the following platform-dependent tools:
+
+ UNIX Platforms:
+ --------------
+ gmake (version 3.74 or later)
+ perl 4.0 (NOTE: perl 5.003 or later recommended)
+ uname
+
+ Windows Platforms:
+ -----------------
+ gmake 3.74 (must use hacked Netscape version)
+ shmsdos.exe (contained in Netscape gmake.exe)
+ nsinstall.exe (contained in Netscape gmake.exe)
+ perl.exe (version 4.0 for everything except testing;
+ NOTE: MKS toolkit perl 5.002 is broken)
+ perl5.exe (for testing;
+ NOTE: perl 5.003 or later recommended;
+ MKS toolkit perl 5.002 is broken)
+ uname.exe (use nstools version)
+
+ENHANCEMENTS to "ns/coreconf":
+
+ With the advent of Certificate Server 4.0 using the ns/coreconf
+ build system, several changes had to be made to enhance
+ ns/coreconf support for building Java/JNI classes/programs, as
+ well as libraries slated to be released as binaries. While the
+ following may not represent an exhaustive list of these changes,
+ it does attempt to be at least somewhat comprehensive:
+
+ (1) During the course of these enhancements, a total of
+ four files have been modified, and four new files have
+ been added.
+
+ The following files have been modified:
+
+ - command.mk: removed old definition of JAR
+
+ - config.mk: added include statement of new
+ "jdk.mk" file
+
+ - ruleset.mk: allowed the $(MKPROG) variable to be
+ overridden by supplying it with a
+ default value of $(CC); augmented
+ numerous definitions to enhance
+ ability of ns/coreconf to produce
+ a more robust set of libraries;
+ added some JNI definitions; PACKAGE
+ definition may be overridden by new
+ "jdk.mk" file
+
+ - rules.mk: separated the compile phase of a
+ program from the link phase of a
+ program such that a developer can
+ now strictly override program linkage
+ by simply supplying a $(MKPROG)
+ variable; augmented NETLIBDEPTH
+ to use CORE_DEPTH but retain backward
+ compatibility; added JNI section;
+ modified .PRECIOUS rule;
+
+ The following files have been added:
+
+ - README: this file; an ASCII-based text
+ document used to summarize the
+ ns/coreconf build system and
+ suitable (paginated) for printing
+
+ - jdk.mk: a file comprising most (if not all)
+ of the default Java related build
+ information; the definitions in this
+ file are only included if NS_USE_JDK
+ has been defined
+
+ - jniregen.pl: a perl script used to create a
+ dependency for when JNI files should
+ be regenerated (based upon any change
+ to the ".class" file from which the
+ ".h" file was originally generated)
+
+ - outofdate.pl: a perl script used to create a
+ dependency for when ".class" files
+ should be regenerated (based upon
+ any change to the ".java" file
+ from which the ".class" file was
+ originally generated)
+
+ (2) As stated above, the ns/coreconf build system now separates
+ the link phase of a program from its compilation phase.
+ While ns/coreconf still works exactly as it used to because
+ the $(MKPROG) variable is assigned $(CC) by default, a developer
+ may now override this behavior by simply supplying their
+ own unique value for $(MKPROG) on every platform. This allows
+ a program compiled with $(CC) to link with external libraries
+ that may contain "C++" linkage. Before this change, a
+ programmer would need to reference their own local copy of
+ rules.mk (see the ns/sectools/cmd/pk12util program for
+ an example of how this used to be accomplished).
+
+ (3) Currently, the ns/coreconf build system differs from the
+ NSPR 2.0 build system which utilizes an "_s" to denote
+ static libraries from import libraries. In fact, the
+ ns/coreconf build system adds no prefixes or suffixes to
+ distinguish one version of static libraries from another.
+ Note that both the ns/coreconf build system as well as the
+ NSPR 2.0 build system do nothing to provide a method of
+ distinguishing 16-bit from 32-bit static libraries on the
+ same machine, either, since:
+
+ a) this might only provide difficulty during
+ development, since static libraries always
+ need to be embedded within a program
+ (note this is highly unlikely, since libraries
+ for different platforms are subdivided via
+ a well-known subdirectory structure, and
+ a developer may use multiple trees for
+ development),
+
+ b) this maintains backwards compatibility,
+ something very important since no legacy
+ programs will need to change their link phase, and
+
+ c) Netscape as a company has dropped any plans
+ of future development of 16-bit products.
+
+ (4) Since several members of the Hardcore Security group did
+ not favor NSPR 2.0's solution of adding an "_s" to static
+ libraries on Windows platforms as a method to distinguish
+ them from their import library cousins, a different solution
+ was proposed and has been recently implemented for ns/coreconf:
+
+ - a 16 has been added as a suffix to both dynamic and
+ import libraries built on 16-bit Windows platforms
+
+ - a 32 has been added as a suffix to both dynamic and
+ import libraries built on 32-bit Windows platforms
+
+ Since the HCL release process currently only contains a
+ single instance of building a dynamic library,
+ ns/security/lib/fortcrypt/fort12.dll, the impact of this
+ change should be relatively small. (Note: HCL was the
+ old name of NSS.)
+
+ It should be noted that although this would additionally
+ limit the 8.3 namespace on 16-bit platforms, it is highly
+ unlikely that any future development will be performed on
+ this platform.
+
+ (5) The $(LIBRARY_VERSION) tag has been added to all non-static
+ libraries created on UNIX operating systems to alleviate
+ any future confusion for binary releases which utilize this
+ tag. Again, it should be noted that this tag is only
+ utilized on non-static libraries, since more than one
+ version of the library may need to exist simultaneously
+ if multiple products are utilized.
+
+ Currently, only one HCL released library utilizes this tag:
+
+ ns/security/lib/fortcrypt/fort12.a
+ (e. g. - in this library, the tag has been set to '12')
+
+ Again, it should be noted that although this would
+ additionally limit the 8.3 namespace on 16-bit platforms,
+ it is highly unlikely that any future development will be
+ performed on this platform.
+
+ (6) The $(JDK_DEBUG_SUFFIX) extension has been added to all
+ library and program names to support debug versions of
+ Java programs (e. g. - java_g, javac_g, etc).
+
+ Once again, it should be noted that although this would
+ additionally limit the 8.3 namespace on 16-bit platforms,
+ it is highly unlikely that any future Java development
+ will be performed on this platform.
+
+ (7) Most (if not all) default definitions for java have been
+ encapsulated within their own file, jdk.mk, which is
+ always included by default in ns/coreconf/config.mk.
+ However, the definitions within this file are only ever
+ activated if NS_USE_JDK has been set to be 1.
+
+
+ (8) Two perl scripts (jniregen.pl and outofdate.pl) have been
+ added to the system to foster a more robust development
+ environment for composing Java and JNI programs
+ utilizing the ns/coreconf build system. Both of these
+ perl scripts are related to resolving dependencies which
+ can not be accomplished through normal makefile dependencies.
+
+ (9) This file, README, was created in an attempt to allow
+ developers who have familiarity with ns/coreconf a simple
+ roadmap for what has changed, as well as a top-level view of
+ what comprises ns/coreconf. This file was written in
+ ASCII (rather than HTML) primarily to promote simple
+ paginated printing.
+
+OVERVIEW of "config.mk":
+
+ This file contains the configuration information necessary to
+ build each "Core Components" source module:
+
+ include file name Purpose
+ =================== =======================================
+ arch.mk source and release <architecture> tags
+
+ command.mk default command macros
+ (NOTE: may be overridden in $(OS_CONFIG).mk)
+
+ $(OS_CONFIG).mk <architecture>-specific macros
+ (dependent upon <architecture> tags)
+
+ tree.mk release <tree> tags
+ (dependent upon <architecture> tags)
+
+ module.mk source and release <component> tags
+ (NOTE: A component is also called a module
+ or a subsystem. This file is dependent upon
+ $(MODULE) being defined on the command
+ line, as an environment variable, or in
+ individual makefiles, or more
+ appropriately, manifest.mn)
+
+ version.mk release <version> tags
+ (dependent upon $(MODULE) being defined on
+ the command line, as an environment variable,
+ or in individual makefiles, or more
+ appropriately, manifest.mn)
+
+ location.mk macros to figure out binary code location
+ (dependent upon <platform> tags)
+
+ source.mk <component>-specific source path
+ (dependent upon <user_source_tree>,
+ <source_component>, <version>, and
+ <platform> tags)
+
+ headers.mk include switch for support header files
+ (dependent upon <tree>, <component>, <version>,
+ and <platform> tags)
+
+ prefix.mk compute program prefixes
+
+ suffix.mk compute program suffixes
+ (dependent upon <architecture> tags)
+
+ jdk.mk define JDK
+ (dependent upon <architecture>,
+ <source>, and <suffix> tags)
+
+ ruleset.mk Master "Core Components" rule set
+ (should always be the last file
+ included by config.mk)
+
+
+
+OVERVIEW of "rules.mk":
+
+ The "rules.mk" file consists of four sections. The first section
+ contains the "master" build rules for all binary releases. While
+ this section can (and should) largely be thought of as "language"
+ independent, it does utilize the "perl" scripting language to
+ perform both the "import" and "release" of binary modules.
+
+ The rules which dwell in this section and their purpose:
+
+
+ CATEGORY/rule:: Purpose
+ =================== =======================================
+
+ GENERAL
+ -------
+ all:: "default" all-encompassing rule which
+ performs "export libs program install"
+
+ export:: recursively copy specified
+ cross-platform header files to the
+ $(SOURCE_XPHEADERS_DIR) directory;
+ recursively copy specified
+ machine-dependent header files to the
+ $(SOURCE_MDHEADERS_DIR) directory;
+ although all rules can be written to
+ repetively "chain" into other sections,
+ this rule is the most commonly used
+ rule to "chain" into other sections
+ such as Java providing a simple
+ mechanism which allows no need for
+ developers to memorize specialized
+ rules
+
+ libs:: recursively build
+ static (archival) $(LIBRARY), shared
+ (dynamic link) $(SHARED_LIBRARY),
+ and/or import $(IMPORT_LIBRARY)
+ libraries
+
+ program:: recursively build $(PROGRAM)
+ executable
+
+ install:: recursively copy all libraries to
+ $(SOURCE_LIB_DIR) directory;
+ recursively copy all executables to
+ $(SOURCE_BIN_DIR) directory
+
+ clean:: remove all files specified in the
+ $(ALL_TRASH) variable
+
+ clobber:: synonym for "clean::" rule
+
+ realclean:: remove all files specified by
+ $(wildcard *.OBJ), dist, and in
+ the $(ALL_TRASH) variable
+
+ clobber_all:: synonym for "realclean::" rule
+
+ private_export:: recursively copy specified
+ cross-platform header files to the
+ $(SOURCE_XPPRIVATE_DIR) directory
+
+
+ IMPORT
+ ------
+ import:: uses perl script to retrieve specified
+ VERSION of the binary release from
+ $(RELEASE_TREE)
+
+ RELEASE
+ -------
+ release_clean:: remove all files from the
+ $(SOURCE_RELEASE_PREFIX) directory
+
+ release:: place specified VERSION of the
+ binary release in the appropriate
+ $(RELEASE_TREE) directory
+
+ release_export:: recursively copy specified
+ cross-platform header files to the
+ $(SOURCE_XPHEADERS_DIR)/include
+ directory
+
+ release_md:: recursively copy all libraries to
+ $(SOURCE_RELEASE_PREFIX)/
+ $(SOURCE_RELEASE_LIB_DIR) directory;
+ recursively copy all executables to
+ $(SOURCE_RELEASE_PREFIX)/
+ $(SOURCE_RELEASE_BIN_DIR) directory
+
+ release_jars:: use perl script to package appropriate
+ files in the $(XPCLASS_JAR),
+ $(XPHEADER_JAR), $(MDHEADER_JAR), and
+ $(MDBINARY_JAR) jar files
+
+ release_cpdistdir:: use perl script to copy the
+ $(XPCLASS_JAR), $(XPHEADER_JAR),
+ $(MDHEADER_JAR), and $(MDBINARY_JAR)
+ jar files to the specified VERSION
+ of the $(RELEASE_TREE) directory
+
+
+
+ TOOLS and AUTOMATION
+ --------------------
+ platform:: tool used to display the platform name
+ as composed within the "arch.mk" file
+
+ autobuild:: automation rule used by "Bonsai" and
+ "Tinderbox" to automatically generate
+ binary releases on various platforms
+
+ tests:: automation tool used to run the
+ "regress" and "reporter" tools
+ on various regression test suites
+
+ The second section of "rules.mk" primarily contains several
+ "language" dependent build rules for binary releases. These are
+ generally "computed" rules (created on the "fly"), and include
+ rules used by "C", "C++", assembly, the preprocessor, perl, and
+ the shell.
+
+ The rules which dwell in this section and their purpose:
+
+
+ CATEGORY/rule:: Purpose
+ =================== =============================
+
+ LIBRARIES
+ ---------
+ $(LIBRARY): build the static library
+ specified by the $(LIBRARY)
+ variable
+
+ $(IMPORT_LIBRARY): build the import library
+ specified by the
+ $(IMPORT_LIBRARY) variable
+
+ $(SHARED_LIBRARY): build the shared
+ (dynamic link) library
+ specified by the
+ $(SHARED_LIBRARY) variable
+
+
+ PROGRAMS
+ --------
+ $(PROGRAM): build the binary executable
+ specified by the $(PROGRAM)
+ rule
+
+ $(OBJDIR)/
+ $(PROG_PREFIX)%.pure: build the "purified" binary
+ executable specified by this
+ rule
+
+
+ OBJECTS
+ -------
+ $(OBJDIR)/
+ $(PROG_PREFIX)%$(OBJ_SUFFIX): build the object file
+ associated with the
+ makefile rule dependency:
+
+ %.c = C file
+ %.cpp = C++ file
+ %.cc = C++ file
+ %.s = assembly file
+ %.S = assembly file
+
+ $(OBJDIR)/
+ $(PROG_PREFIX)%: (NOTE: deprecated rule)
+ build the object file
+ associated with the
+ makefile rule dependency:
+
+ %.cpp = C++ file
+
+ MISCELLANEOUS
+ -------------
+ %.i: build the preprocessor file
+ associated with the
+ makefile rule dependency:
+
+ %.c = C file
+ %.cpp = C++ file
+
+ %: process the specified file
+ using the method associated
+ with the makefile rule
+ dependency:
+
+ %.pl = perl script
+ %.sh = shell script
+
+ alltags: tool used to recursively
+ create a "ctags"-style
+ file for reference
+
+ The third section of "rules.mk' primarily contains several JAVA
+ "language" build rules for binary releases. These are also
+ generally "computed" rules (created on the "fly").
+
+ The rules which dwell in this section and their purpose:
+
+
+ CATEGORY/rule:: Purpose
+ =================== =============================
+ $(JAVA_DESTPATH):: create directory specified
+ as the Java destination path
+ for where classes are
+ deposited
+
+ $(JAVA_DESTPATH)/$(PACKAGE):: create directories specified
+ within the $(PACKAGE)
+ variable
+
+ $(JMCSRCDIR):: create directory specified
+ as the JMC destination path
+
+ $(JRI_HEADER_CFILES): used to generate/regenerate
+ JRI header files for "C"
+
+ $(JRI_STUB_CFILES): used to generate/regenerate
+ JRI stub files for "C"
+
+ $(JNI_HEADERS): used to generate/regenerate
+ JNI header files for "C"
+
+ The fourth section of "rules.mk" primarily contains miscellaneous
+ build rules for binary releases. Many of these rules are here to
+ create new subdirectories, manage dependencies, and/or override
+ standard gmake "Makefile" rules.
+
+ The rules which dwell in this section and their purpose:
+
+
+ CATEGORY/rule:: Purpose
+ =================== =============================
+
+ $(PUBLIC_EXPORT_DIR):: create directory used to
+ house public "C" header files
+
+ $(PRIVATE_EXPORT_DIR):: create directory used to
+ house private "C" header
+ files
+
+ $(SOURCE_XP_DIR)/
+ release/include:: create directory used to
+ house "C" header files
+ contained in a release
+
+ $(MKDEPENDENCIES):: for UNIX systems, create
+ a directory used to house
+ dependencies and utilize
+ the $(MKDEPEND) rule to
+ create them
+
+ $(MKDEPEND):: cd to the dependency
+ directory and create them
+
+ depend:: if $(OBJS) exist, perform the
+ $(MKDEPEND) rule followed by
+ the $(MKDEPENDENCIES) rule
+
+ dependclean:: remove all files contained
+ in the dependency repository
+
+ .DEFAULT: standard gmake rule
+
+ .SUFFIXES: standard gmake rule
+
+ .PRECIOUS: standard gmake rule
+
+ .PHONY: standard gmake rule
+
diff --git a/security/nss/coreconf/RISCOS.mk b/security/nss/coreconf/RISCOS.mk
new file mode 100644
index 000000000..f8d9e2f63
--- /dev/null
+++ b/security/nss/coreconf/RISCOS.mk
@@ -0,0 +1,22 @@
+#
+# 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/.
+
+include $(CORE_DEPTH)/coreconf/UNIX.mk
+
+LIB_SUFFIX = a
+DLL_SUFFIX = so
+AR = ar cr $@
+LDOPTS += -L$(SOURCE_LIB_DIR)
+MKSHLIB = $(CC) $(DSO_LDOPTS) -Wl,-soname -Wl,$(@:$(OBJDIR)/%.so=%.so)
+
+OS_RELEASE =
+OS_TARGET = RISCOS
+
+DSO_CFLAGS = -fPIC
+DSO_LDOPTS = -shared
+
+ifdef BUILD_OPT
+ OPTIMIZER = -O3
+endif
diff --git a/security/nss/coreconf/ReliantUNIX.mk b/security/nss/coreconf/ReliantUNIX.mk
new file mode 100644
index 000000000..8af2c3dba
--- /dev/null
+++ b/security/nss/coreconf/ReliantUNIX.mk
@@ -0,0 +1,58 @@
+#
+# 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/.
+
+include $(CORE_DEPTH)/coreconf/UNIX.mk
+
+DEFAULT_COMPILER = cc
+
+ifdef NS_USE_GCC
+ ## gcc-2.7.2 homebrewn
+ CC = gcc
+ CCC = g++
+ AS = $(CC)
+ ASFLAGS += -x assembler-with-cpp
+ LD = gld
+ ODD_CFLAGS = -pipe -Wall -Wno-format -Wno-switch
+ ifdef BUILD_OPT
+ OPTIMIZER += -O6
+ endif
+ MKSHLIB = $(LD)
+ MKSHLIB += -G -h $(@:$(OBJDIR)/%.so=%.so)
+ DSO_LDOPTS += -G -Xlinker -Blargedynsym
+else
+ ## native compiler (CDS++ 1.0)
+# CC = /usr/bin/cc
+ CC = cc
+ CCC = /usr/bin/CC
+ AS = /usr/bin/cc
+ ODD_CFLAGS =
+ ifdef BUILD_OPT
+ OPTIMIZER += -O -F Olimit,4000
+ endif
+ MKSHLIB = $(CC)
+ MKSHLIB += -G -h $(@:$(OBJDIR)/%.so=%.so)
+ DSO_LDOPTS += -G -W l,-Blargedynsym
+endif
+ifdef MAPFILE
+# Add LD options to restrict exported symbols to those in the map file
+endif
+# Change PROCESS to put the mapfile in the correct format for this platform
+PROCESS_MAP_FILE = cp $< $@
+
+NOSUCHFILE = /sni-rm-f-sucks
+ODD_CFLAGS += -DSVR4 -DSNI -DRELIANTUNIX
+CPU_ARCH = mips
+RANLIB = /bin/true
+
+# For purify
+NOMD_OS_CFLAGS += $(ODD_CFLAGS)
+
+# we do not have -MDupdate ...
+OS_CFLAGS += $(NOMD_OS_CFLAGS)
+OS_LIBS += -lsocket -lnsl -lresolv -lgen -ldl -lc /usr/ucblib/libucb.a
+
+ifdef DSO_BACKEND
+ DSO_LDOPTS += -h $(DSO_NAME)
+endif
diff --git a/security/nss/coreconf/ReliantUNIX5.4.mk b/security/nss/coreconf/ReliantUNIX5.4.mk
new file mode 100644
index 000000000..f52cb7f39
--- /dev/null
+++ b/security/nss/coreconf/ReliantUNIX5.4.mk
@@ -0,0 +1,5 @@
+#
+# 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/.
+include $(CORE_DEPTH)/coreconf/ReliantUNIX.mk
diff --git a/security/nss/coreconf/SCOOS5.0.mk b/security/nss/coreconf/SCOOS5.0.mk
new file mode 100644
index 000000000..5d73220a7
--- /dev/null
+++ b/security/nss/coreconf/SCOOS5.0.mk
@@ -0,0 +1,6 @@
+#
+# 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/.
+
+include $(CORE_DEPTH)/coreconf/SCO_SV3.2.mk
diff --git a/security/nss/coreconf/SCO_SV3.2.mk b/security/nss/coreconf/SCO_SV3.2.mk
new file mode 100644
index 000000000..e0b9fe856
--- /dev/null
+++ b/security/nss/coreconf/SCO_SV3.2.mk
@@ -0,0 +1,60 @@
+#
+# 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/.
+
+include $(CORE_DEPTH)/coreconf/UNIX.mk
+
+DEFAULT_COMPILER = cc
+
+CC = cc
+OS_CFLAGS += -b elf -KPIC
+CCC = g++
+CCC += -b elf -DPRFSTREAMS_BROKEN -I/usr/local/lib/g++-include
+# CCC = $(CORE_DEPTH)/build/hcpp
+# CCC += +.cpp +w
+RANLIB = /bin/true
+
+#
+# -DSCO_PM - Policy Manager AKA: SCO Licensing
+# -DSCO - Changes to Netscape source (consistent with AIX, LINUX, etc..)
+# -Dsco - Needed for /usr/include/X11/*
+#
+OS_CFLAGS += -DSCO_SV -DSYSV -D_SVID3 -DHAVE_STRERROR -DSW_THREADS -DSCO_PM -DSCO -Dsco
+#OS_LIBS += -lpmapi -lsocket -lc
+MKSHLIB = $(LD)
+MKSHLIB += $(DSO_LDOPTS)
+XINC = /usr/include/X11
+MOTIFLIB += -lXm
+INCLUDES += -I$(XINC)
+CPU_ARCH = x86
+GFX_ARCH = x
+ARCH = sco
+LOCALE_MAP = $(CORE_DEPTH)/cmd/xfe/intl/sco.lm
+EN_LOCALE = C
+DE_LOCALE = de_DE.ISO8859-1
+FR_LOCALE = fr_FR.ISO8859-1
+JP_LOCALE = ja
+SJIS_LOCALE = ja_JP.SJIS
+KR_LOCALE = ko_KR.EUC
+CN_LOCALE = zh
+TW_LOCALE = zh
+I2_LOCALE = i2
+LOC_LIB_DIR = /usr/lib/X11
+NOSUCHFILE = /solaris-rm-f-sucks
+BSDECHO = /bin/echo
+ifdef MAPFILE
+# Add LD options to restrict exported symbols to those in the map file
+endif
+# Change PROCESS to put the mapfile in the correct format for this platform
+PROCESS_MAP_FILE = cp $< $@
+
+#
+# These defines are for building unix plugins
+#
+BUILD_UNIX_PLUGINS = 1
+#DSO_LDOPTS += -b elf -G -z defs
+DSO_LDOPTS += -b elf -G
+
+# Used for Java compiler
+EXPORT_FLAGS += -W l,-Bexport
diff --git a/security/nss/coreconf/SunOS4.1.3_U1.mk b/security/nss/coreconf/SunOS4.1.3_U1.mk
new file mode 100644
index 000000000..a3eb59f64
--- /dev/null
+++ b/security/nss/coreconf/SunOS4.1.3_U1.mk
@@ -0,0 +1,28 @@
+#
+# 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/.
+
+include $(CORE_DEPTH)/coreconf/UNIX.mk
+
+DEFAULT_COMPILER = cc
+
+INCLUDES += -I/usr/dt/include -I/usr/openwin/include -I/home/motif/usr/include
+
+# SunOS 4 _requires_ that shared libs have a version number.
+# XXX FIXME: Version number should use NSPR_VERSION_NUMBER?
+DLL_SUFFIX = so.1.0
+CC = gcc
+RANLIB = ranlib
+CPU_ARCH = sparc
+
+# Purify doesn't like -MDupdate
+NOMD_OS_CFLAGS += -Wall -Wno-format -Wno-switch -DSUNOS4
+OS_CFLAGS += $(DSO_CFLAGS) $(NOMD_OS_CFLAGS) -MDupdate $(DEPENDENCIES)
+MKSHLIB = $(LD)
+MKSHLIB += $(DSO_LDOPTS)
+NOSUCHFILE = /solaris-rm-f-sucks
+DSO_LDOPTS =
+
+# -fPIC generates position-independent code for use in a shared library.
+DSO_CFLAGS += -fPIC
diff --git a/security/nss/coreconf/SunOS5.mk b/security/nss/coreconf/SunOS5.mk
new file mode 100644
index 000000000..ce9e2cbb9
--- /dev/null
+++ b/security/nss/coreconf/SunOS5.mk
@@ -0,0 +1,144 @@
+#
+# 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/.
+
+include $(CORE_DEPTH)/coreconf/UNIX.mk
+
+# Sun's WorkShop defines v8, v8plus and v9 architectures.
+# gcc on Solaris defines v8 and v9 "cpus".
+# gcc's v9 is equivalent to Workshop's v8plus.
+# gcc's -m64 is equivalent to Workshop's v9
+
+ifeq ($(USE_64), 1)
+ ifdef NS_USE_GCC
+ ARCHFLAG=-m64
+ else
+ ifeq ($(OS_TEST),i86pc)
+ ARCHFLAG=-xarch=amd64
+ else
+ ARCHFLAG=-xarch=v9
+ endif
+ endif
+else
+ ifneq ($(OS_TEST),i86pc)
+ ifdef NS_USE_GCC
+ ARCHFLAG=-mcpu=v9
+ else
+ ARCHFLAG=-xarch=v8plus
+ endif
+ endif
+endif
+
+DEFAULT_COMPILER = cc
+
+ifdef NS_USE_GCC
+ CC = gcc
+ OS_CFLAGS += -Wall -Wno-format -Werror-implicit-function-declaration -Wno-switch
+ CCC = g++
+ CCC += -Wall -Wno-format
+ ASFLAGS += -x assembler-with-cpp
+ OS_CFLAGS += $(NOMD_OS_CFLAGS) $(ARCHFLAG)
+ ifdef USE_MDUPDATE
+ OS_CFLAGS += -MDupdate $(DEPENDENCIES)
+ endif
+ ifdef BUILD_OPT
+ OPTIMIZER = -O2
+ # Enable this for accurate dtrace profiling
+ # OPTIMIZER += -mno-omit-leaf-frame-pointer -fno-omit-frame-pointer
+ endif
+else
+ CC = cc
+ CCC = CC
+ ASFLAGS += -Wa,-P
+ OS_CFLAGS += $(NOMD_OS_CFLAGS) $(ARCHFLAG)
+ ifndef BUILD_OPT
+ OS_CFLAGS += -xs
+ else
+ OPTIMIZER = -xO4
+ endif
+ ifdef USE_TCOV
+ CC += -xprofile=tcov
+ CCC += -xprofile=tcov
+ endif
+endif
+
+RANLIB = echo
+CPU_ARCH = sparc
+OS_DEFINES += -DSVR4 -DSYSV -D__svr4 -D__svr4__ -DSOLARIS -D_REENTRANT
+
+ifeq ($(OS_TEST),i86pc)
+ifeq ($(USE_64),1)
+ CPU_ARCH = x86_64
+else
+ CPU_ARCH = x86
+ OS_DEFINES += -Di386
+endif
+endif
+
+# Purify doesn't like -MDupdate
+NOMD_OS_CFLAGS += $(DSO_CFLAGS) $(OS_DEFINES) $(SOL_CFLAGS)
+
+MKSHLIB = $(CC) $(DSO_LDOPTS) $(RPATH)
+ifdef NS_USE_GCC
+ifeq (GNU,$(findstring GNU,$(shell `$(CC) -print-prog-name=ld` -v 2>&1)))
+ GCC_USE_GNU_LD = 1
+endif
+endif
+ifdef MAPFILE
+ifdef NS_USE_GCC
+ifdef GCC_USE_GNU_LD
+ MKSHLIB += -Wl,--version-script,$(MAPFILE)
+else
+ MKSHLIB += -Wl,-M,$(MAPFILE)
+endif
+else
+ MKSHLIB += -M $(MAPFILE)
+endif
+endif
+PROCESS_MAP_FILE = grep -v ';-' $< | \
+ sed -e 's,;+,,' -e 's; DATA ;;' -e 's,;;,,' -e 's,;.*,;,' > $@
+
+# ld options:
+# -G: produce a shared object
+# -z defs: no unresolved symbols allowed
+ifdef NS_USE_GCC
+ifeq ($(USE_64), 1)
+ DSO_LDOPTS += -m64
+endif
+ DSO_LDOPTS += -shared -h $(notdir $@)
+else
+ifeq ($(USE_64), 1)
+ ifeq ($(OS_TEST),i86pc)
+ DSO_LDOPTS +=-xarch=amd64
+ else
+ DSO_LDOPTS +=-xarch=v9
+ endif
+endif
+ DSO_LDOPTS += -G -h $(notdir $@)
+endif
+DSO_LDOPTS += -z combreloc -z defs -z ignore
+
+# -KPIC generates position independent code for use in shared libraries.
+# (Similarly for -fPIC in case of gcc.)
+ifdef NS_USE_GCC
+ DSO_CFLAGS += -fPIC
+else
+ DSO_CFLAGS += -KPIC
+endif
+
+NOSUCHFILE = /solaris-rm-f-sucks
+
+ifeq ($(BUILD_SUN_PKG), 1)
+# The -R '$ORIGIN' linker option instructs this library to search for its
+# dependencies in the same directory where it resides.
+ifeq ($(USE_64), 1)
+RPATH = -R '$$ORIGIN:/usr/lib/mps/secv1/64:/usr/lib/mps/64'
+else
+RPATH = -R '$$ORIGIN:/usr/lib/mps/secv1:/usr/lib/mps'
+endif
+else
+RPATH = -R '$$ORIGIN'
+endif
+
+OS_LIBS += -lthread -lnsl -lsocket -lposix4 -ldl -lc
diff --git a/security/nss/coreconf/UNIX.mk b/security/nss/coreconf/UNIX.mk
new file mode 100644
index 000000000..b448e7553
--- /dev/null
+++ b/security/nss/coreconf/UNIX.mk
@@ -0,0 +1,66 @@
+#
+# 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/.
+
+XP_DEFINE += -DXP_UNIX
+LIB_SUFFIX = a
+DLL_SUFFIX = so
+AR = ar cr $@
+LDOPTS += -L$(SOURCE_LIB_DIR)
+
+ifdef BUILD_OPT
+ OPTIMIZER += -O
+ DEFINES += -UDEBUG -DNDEBUG
+else
+ OPTIMIZER += -g
+ USERNAME := $(shell whoami)
+ USERNAME := $(subst -,_,$(USERNAME))
+ DEFINES += -DDEBUG -UNDEBUG -DDEBUG_$(USERNAME)
+endif
+
+ifdef BUILD_TREE
+NSINSTALL_DIR = $(BUILD_TREE)/nss
+NSINSTALL = $(BUILD_TREE)/nss/nsinstall
+else
+NSINSTALL_DIR = $(CORE_DEPTH)/coreconf/nsinstall
+NSINSTALL = $(NSINSTALL_DIR)/$(OBJDIR_NAME)/nsinstall
+endif
+
+MKDEPEND_DIR = $(CORE_DEPTH)/coreconf/mkdepend
+MKDEPEND = $(MKDEPEND_DIR)/$(OBJDIR_NAME)/mkdepend
+MKDEPENDENCIES = $(OBJDIR_NAME)/depend.mk
+
+####################################################################
+#
+# One can define the makefile variable NSDISTMODE to control
+# how files are published to the 'dist' directory. If not
+# defined, the default is "install using relative symbolic
+# links". The two possible values are "copy", which copies files
+# but preserves source mtime, and "absolute_symlink", which
+# installs using absolute symbolic links.
+# - THIS IS NOT PART OF THE NEW BINARY RELEASE PLAN for 9/30/97
+# - WE'RE KEEPING IT ONLY FOR BACKWARDS COMPATIBILITY
+####################################################################
+
+ifeq ($(NSDISTMODE),copy)
+ # copy files, but preserve source mtime
+ INSTALL = $(NSINSTALL)
+ INSTALL += -t
+else
+ ifeq ($(NSDISTMODE),absolute_symlink)
+ # install using absolute symbolic links
+ INSTALL = $(NSINSTALL)
+ INSTALL += -L `pwd`
+ else
+ # install using relative symbolic links
+ INSTALL = $(NSINSTALL)
+ INSTALL += -R
+ endif
+endif
+
+define MAKE_OBJDIR
+if test ! -d $(@D); then rm -rf $(@D); $(NSINSTALL) -D $(@D); fi
+endef
+
+include $(CORE_DEPTH)/coreconf/Werror.mk
diff --git a/security/nss/coreconf/UNIXWARE2.1.mk b/security/nss/coreconf/UNIXWARE2.1.mk
new file mode 100644
index 000000000..f1cf8c956
--- /dev/null
+++ b/security/nss/coreconf/UNIXWARE2.1.mk
@@ -0,0 +1,29 @@
+#
+# 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/.
+
+#
+# Config stuff for SCO Unixware 2.1
+#
+
+include $(CORE_DEPTH)/coreconf/UNIX.mk
+
+DEFAULT_COMPILER = $(CORE_DEPTH)/build/hcc
+
+CC = $(CORE_DEPTH)/build/hcc
+CCC = $(CORE_DEPTH)/build/hcpp
+RANLIB = true
+OS_CFLAGS = -KPIC -DSVR4 -DSYSV -DUNIXWARE
+MKSHLIB = $(LD)
+MKSHLIB += $(DSO_LDOPTS)
+DSO_LDOPTS += -G
+CPU_ARCH = x86
+ARCH = sco
+NOSUCHFILE = /solaris-rm-f-sucks
+ifdef MAPFILE
+# Add LD options to restrict exported symbols to those in the map file
+endif
+# Change PROCESS to put the mapfile in the correct format for this platform
+PROCESS_MAP_FILE = cp $< $@
+
diff --git a/security/nss/coreconf/WIN32.mk b/security/nss/coreconf/WIN32.mk
new file mode 100644
index 000000000..be795f0ce
--- /dev/null
+++ b/security/nss/coreconf/WIN32.mk
@@ -0,0 +1,378 @@
+#
+# 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/.
+
+#
+# Configuration common to all versions of Windows NT
+# and Windows 95
+#
+
+DEFAULT_COMPILER = cl
+
+ifdef NS_USE_GCC
+ CC = gcc
+ CCC = g++
+ LD = ld
+ AR = ar
+ AR += cr $@
+ RANLIB = ranlib
+ BSDECHO = echo
+ RC = windres.exe -O coff --use-temp-file
+ LINK_DLL = $(CC) $(OS_DLLFLAGS) $(DLLFLAGS)
+else
+ CC = cl
+ CCC = cl
+ LD = link
+ LDFLAGS += -nologo
+ AR = lib
+ AR += -nologo -OUT:$@
+ RANLIB = echo
+ BSDECHO = echo
+ RC = rc.exe
+ MT = mt.exe
+ # Check for clang-cl
+ CLANG_CL := $(shell expr `$(CC) -? 2>&1 | grep -w clang | wc -l` \> 0)
+ # Determine compiler version
+ ifeq ($(CLANG_CL),1)
+ # clang-cl pretends to be MSVC 2012.
+ CC_VERSION := 17.00.00.00
+ else
+ CC_VERSION := $(shell $(CC) 2>&1 | sed -ne \
+ 's|.* \([0-9]\+\.[0-9]\+\.[0-9]\+\(\.[0-9]\+\)\?\).*|\1|p')
+ endif
+ # Change the dots to spaces.
+ _CC_VERSION_WORDS := $(subst ., ,$(CC_VERSION))
+ _CC_VMAJOR := $(word 1,$(_CC_VERSION_WORDS))
+ _CC_VMINOR := $(word 2,$(_CC_VERSION_WORDS))
+ _CC_RELEASE := $(word 3,$(_CC_VERSION_WORDS))
+ _CC_BUILD := $(word 4,$(_CC_VERSION_WORDS))
+ _MSC_VER = $(_CC_VMAJOR)$(_CC_VMINOR)
+ _MSC_VER_6 = 1200
+ # VC10 (2010) is 16.00.30319.01, VC10SP1 is 16.00.40219.01.
+ _MSC_VER_GE_10SP1 := $(shell expr $(_MSC_VER) \> 1600 \| \
+ $(_MSC_VER) = 1600 \& $(_CC_RELEASE) \>= 40219)
+ # VC11 (2012).
+ _MSC_VER_GE_11 := $(shell expr $(_MSC_VER) \>= 1700)
+ # VC12 (2013).
+ _MSC_VER_GE_12 := $(shell expr $(_MSC_VER) \>= 1800)
+ ifeq ($(_CC_VMAJOR),14)
+ # -DYNAMICBASE is only supported on VC8SP1 or newer,
+ # so be very specific here!
+ # VC8 is 14.00.50727.42, VC8SP1 is 14.00.50727.762
+ ifeq ($(_CC_RELEASE).$(_CC_BUILD),50727.42)
+ USE_DYNAMICBASE =
+ else
+ ifeq ($(_CC_RELEASE).$(_CC_BUILD),50727.762)
+ USE_DYNAMICBASE = 1
+ else
+ _LOSER := $(error Unknown compiler version $(CC_VERSION))
+ endif
+ endif
+ endif
+ # if $(_CC_VMAJOR) >= 15
+ # NOTE: 'sort' sorts the words in lexical order, so this test works
+ # only if $(_CC_VMAJOR) is two digits.
+ ifeq ($(firstword $(sort $(_CC_VMAJOR) 15)),15)
+ USE_DYNAMICBASE = 1
+ endif
+endif
+
+ifdef BUILD_TREE
+NSINSTALL_DIR = $(BUILD_TREE)/nss
+else
+NSINSTALL_DIR = $(CORE_DEPTH)/coreconf/nsinstall
+endif
+NSINSTALL = nsinstall
+
+MKDEPEND_DIR = $(CORE_DEPTH)/coreconf/mkdepend
+MKDEPEND = $(MKDEPEND_DIR)/$(OBJDIR_NAME)/mkdepend.exe
+# Note: MKDEPENDENCIES __MUST__ be a relative pathname, not absolute.
+# If it is absolute, gmake will crash unless the named file exists.
+MKDEPENDENCIES = $(OBJDIR_NAME)/depend.mk
+
+INSTALL = $(NSINSTALL)
+MAKE_OBJDIR = mkdir
+MAKE_OBJDIR += $(OBJDIR)
+GARBAGE += $(OBJDIR)/vc20.pdb $(OBJDIR)/vc40.pdb
+XP_DEFINE += -DXP_PC
+ifdef NS_USE_GCC
+LIB_SUFFIX = a
+else
+LIB_SUFFIX = lib
+endif
+DLL_SUFFIX = dll
+
+ifdef NS_USE_GCC
+ OS_CFLAGS += -mwindows -mms-bitfields
+ _GEN_IMPORT_LIB=-Wl,--out-implib,$(IMPORT_LIBRARY)
+ DLLFLAGS += -mwindows -o $@ -shared -Wl,--export-all-symbols $(if $(IMPORT_LIBRARY),$(_GEN_IMPORT_LIB))
+ ifdef BUILD_OPT
+ ifeq (11,$(ALLOW_OPT_CODE_SIZE)$(OPT_CODE_SIZE))
+ OPTIMIZER += -Os
+ else
+ OPTIMIZER += -O2
+ endif
+ DEFINES += -UDEBUG -DNDEBUG
+ else
+ OPTIMIZER += -g
+ NULLSTRING :=
+ SPACE := $(NULLSTRING) # end of the line
+ USERNAME := $(subst $(SPACE),_,$(USERNAME))
+ USERNAME := $(subst -,_,$(USERNAME))
+ DEFINES += -DDEBUG -UNDEBUG -DDEBUG_$(USERNAME)
+ endif
+else # !NS_USE_GCC
+ WARNING_CFLAGS = -W3 -nologo -D_CRT_SECURE_NO_WARNINGS \
+ -D_CRT_NONSTDC_NO_WARNINGS
+ OS_DLLFLAGS += -nologo -DLL -SUBSYSTEM:WINDOWS
+ ifndef NSS_ENABLE_WERROR
+ NSS_ENABLE_WERROR = 1
+ endif
+ ifeq ($(NSS_ENABLE_WERROR),1)
+ WARNING_CFLAGS += -WX
+ endif
+ ifeq ($(_MSC_VER),$(_MSC_VER_6))
+ ifndef MOZ_DEBUG_SYMBOLS
+ OS_DLLFLAGS += -PDB:NONE
+ endif
+ endif
+ ifdef USE_DYNAMICBASE
+ OS_DLLFLAGS += -DYNAMICBASE
+ endif
+ #
+ # Define USE_DEBUG_RTL if you want to use the debug runtime library
+ # (RTL) in the debug build.
+ # Define USE_STATIC_RTL if you want to use the static RTL.
+ #
+ ifdef USE_DEBUG_RTL
+ ifdef USE_STATIC_RTL
+ OS_CFLAGS += -MTd
+ else
+ OS_CFLAGS += -MDd
+ endif
+ OS_CFLAGS += -D_CRTDBG_MAP_ALLOC
+ else
+ ifdef USE_STATIC_RTL
+ OS_CFLAGS += -MT
+ else
+ OS_CFLAGS += -MD
+ endif
+ endif
+ ifdef BUILD_OPT
+ ifeq (11,$(ALLOW_OPT_CODE_SIZE)$(OPT_CODE_SIZE))
+ OPTIMIZER += -O1
+ else
+ OPTIMIZER += -O2
+ endif
+ DEFINES += -UDEBUG -DNDEBUG
+ DLLFLAGS += -OUT:$@
+ ifdef MOZ_DEBUG_SYMBOLS
+ ifdef MOZ_DEBUG_FLAGS
+ OPTIMIZER += $(MOZ_DEBUG_FLAGS) -Fd$(OBJDIR)/
+ else
+ OPTIMIZER += -Zi -Fd$(OBJDIR)/
+ endif
+ DLLFLAGS += -DEBUG -OPT:REF
+ LDFLAGS += -DEBUG -OPT:REF
+ endif
+ else
+ OPTIMIZER += -Zi -Fd$(OBJDIR)/ -Od
+ NULLSTRING :=
+ SPACE := $(NULLSTRING) # end of the line
+ USERNAME := $(subst $(SPACE),_,$(USERNAME))
+ USERNAME := $(subst -,_,$(USERNAME))
+ DEFINES += -DDEBUG -UNDEBUG -DDEBUG_$(USERNAME)
+ DLLFLAGS += -DEBUG -OUT:$@
+ LDFLAGS += -DEBUG
+ifeq ($(_MSC_VER),$(_MSC_VER_6))
+ifndef MOZ_DEBUG_SYMBOLS
+ LDFLAGS += -PDB:NONE
+endif
+endif
+ # Purify requires /FIXED:NO when linking EXEs.
+ LDFLAGS += /FIXED:NO
+ endif
+ifneq ($(_MSC_VER),$(_MSC_VER_6))
+ # NSS has too many of these to fix, downgrade the warning
+ # Disable C4267: conversion from 'size_t' to 'type', possible loss of data
+ # Disable C4244: conversion from 'type1' to 'type2', possible loss of data
+ # Disable C4018: 'expression' : signed/unsigned mismatch
+ # Disable C4312: 'type cast': conversion from 'type1' to 'type2' of greater size
+ OS_CFLAGS += -w44267 -w44244 -w44018 -w44312
+ ifeq ($(_MSC_VER_GE_12),1)
+ OS_CFLAGS += -FS
+ endif
+endif # !MSVC6
+endif # NS_USE_GCC
+
+ifdef USE_64
+DEFINES += -DWIN64
+else
+DEFINES += -DWIN32
+endif
+
+ifeq (,$(filter-out x386 x86_64,$(CPU_ARCH)))
+ifdef USE_64
+ DEFINES += -D_AMD64_
+ # Use subsystem 5.02 to allow running on Windows XP.
+ ifeq ($(_MSC_VER_GE_11),1)
+ LDFLAGS += -SUBSYSTEM:CONSOLE,5.02
+ endif
+ CPU_ARCH = x86_64
+else
+ DEFINES += -D_X86_
+ # VS2012 defaults to -arch:SSE2. Use -arch:IA32 to avoid requiring
+ # SSE2. Clang-cl gets confused by -arch:IA32, so don't add it.
+ # (See https://llvm.org/bugs/show_bug.cgi?id=24335)
+ # Use subsystem 5.01 to allow running on Windows XP.
+ ifeq ($(_MSC_VER_GE_11),1)
+ ifneq ($(CLANG_CL),1)
+ OS_CFLAGS += -arch:IA32
+ endif
+ LDFLAGS += -SUBSYSTEM:CONSOLE,5.01
+ endif
+ CPU_ARCH = x386
+endif
+endif
+ifeq ($(CPU_ARCH), ALPHA)
+ DEFINES += -D_ALPHA_=1
+endif
+
+ifdef MAPFILE
+ifndef NS_USE_GCC
+DLLFLAGS += -DEF:$(MAPFILE)
+endif
+endif
+# Change PROCESS to put the mapfile in the correct format for this platform
+PROCESS_MAP_FILE = cp $< $@
+
+
+#
+# The following is NOT needed for the NSPR 2.0 library.
+#
+
+DEFINES += -D_WINDOWS
+
+# override default, which is ASFLAGS = CFLAGS
+ifdef NS_USE_GCC
+ AS = $(CC)
+ ASFLAGS = $(INCLUDES)
+else
+ifdef USE_64
+ AS = ml64.exe
+ ASFLAGS = -nologo -Cp -Sn -Zi $(INCLUDES)
+else
+ AS = ml.exe
+ ASFLAGS = -nologo -Cp -Sn -Zi -coff -safeseh $(INCLUDES)
+endif
+endif
+
+#
+# override the definitions of RELEASE_TREE found in tree.mk
+#
+ifndef RELEASE_TREE
+ ifdef BUILD_SHIP
+ ifdef USE_SHIPS
+ RELEASE_TREE = $(NTBUILD_SHIP)
+ else
+ RELEASE_TREE = //redbuild/components
+ endif
+ else
+ RELEASE_TREE = //redbuild/components
+ endif
+endif
+
+#
+# override the definitions of IMPORT_LIB_PREFIX, LIB_PREFIX, and
+# DLL_PREFIX in prefix.mk
+#
+
+ifndef IMPORT_LIB_PREFIX
+ ifdef NS_USE_GCC
+ IMPORT_LIB_PREFIX = lib
+ else
+ IMPORT_LIB_PREFIX = $(NULL)
+ endif
+endif
+
+ifndef LIB_PREFIX
+ ifdef NS_USE_GCC
+ LIB_PREFIX = lib
+ else
+ LIB_PREFIX = $(NULL)
+ endif
+endif
+
+ifndef DLL_PREFIX
+ DLL_PREFIX = $(NULL)
+endif
+
+#
+# override the definitions of various _SUFFIX symbols in suffix.mk
+#
+
+#
+# Object suffixes
+#
+ifndef OBJ_SUFFIX
+ ifdef NS_USE_GCC
+ OBJ_SUFFIX = .o
+ else
+ OBJ_SUFFIX = .obj
+ endif
+endif
+
+#
+# Assembler source suffixes
+#
+ifndef ASM_SUFFIX
+ ifdef NS_USE_GCC
+ ASM_SUFFIX = .s
+ else
+ ASM_SUFFIX = .asm
+ endif
+endif
+
+#
+# Library suffixes
+#
+
+ifndef IMPORT_LIB_SUFFIX
+ IMPORT_LIB_SUFFIX = .$(LIB_SUFFIX)
+endif
+
+ifndef DYNAMIC_LIB_SUFFIX_FOR_LINKING
+ DYNAMIC_LIB_SUFFIX_FOR_LINKING = $(IMPORT_LIB_SUFFIX)
+endif
+
+#
+# Program suffixes
+#
+ifndef PROG_SUFFIX
+ PROG_SUFFIX = .exe
+endif
+
+#
+# When the processor is NOT 386-based on Windows NT, override the
+# value of $(CPU_TAG). For WinNT, 95, 16, not CE.
+#
+ifneq ($(CPU_ARCH),x386)
+ CPU_TAG = _$(CPU_ARCH)
+endif
+
+#
+# override ruleset.mk, removing the "lib" prefix for library names, and
+# adding the "32" after the LIBRARY_VERSION.
+#
+ifdef LIBRARY_NAME
+ SHARED_LIBRARY = $(OBJDIR)/$(LIBRARY_NAME)$(LIBRARY_VERSION)32$(JDK_DEBUG_SUFFIX).dll
+ IMPORT_LIBRARY = $(OBJDIR)/$(LIBRARY_NAME)$(LIBRARY_VERSION)32$(JDK_DEBUG_SUFFIX).lib
+endif
+
+#
+# override the TARGETS defined in ruleset.mk, adding IMPORT_LIBRARY
+#
+ifndef TARGETS
+ TARGETS = $(LIBRARY) $(SHARED_LIBRARY) $(IMPORT_LIBRARY) $(PROGRAM)
+endif
diff --git a/security/nss/coreconf/WIN95.mk b/security/nss/coreconf/WIN95.mk
new file mode 100644
index 000000000..fe5b43df3
--- /dev/null
+++ b/security/nss/coreconf/WIN95.mk
@@ -0,0 +1,15 @@
+#
+# 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/.
+
+#
+# Config stuff for OS_TARGET=WIN95
+#
+
+include $(CORE_DEPTH)/coreconf/WIN32.mk
+
+DEFINES += -DWIN95
+
+# WINNT uses the lib prefix, Win95 doesn't
+NSPR31_LIB_PREFIX = $(NULL)
diff --git a/security/nss/coreconf/WINNT.mk b/security/nss/coreconf/WINNT.mk
new file mode 100644
index 000000000..6052e5694
--- /dev/null
+++ b/security/nss/coreconf/WINNT.mk
@@ -0,0 +1,20 @@
+#
+# 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/.
+
+#
+# Config stuff for OS_TARGET=WINNT
+#
+
+include $(CORE_DEPTH)/coreconf/WIN32.mk
+
+DEFINES += -DWINNT
+
+#
+# Win NT needs -GT so that fibers can work
+#
+OS_CFLAGS += -GT
+
+# WINNT uses the lib prefix, Win95 doesn't
+NSPR31_LIB_PREFIX = lib
diff --git a/security/nss/coreconf/Werror.mk b/security/nss/coreconf/Werror.mk
new file mode 100644
index 000000000..69155eb14
--- /dev/null
+++ b/security/nss/coreconf/Werror.mk
@@ -0,0 +1,105 @@
+#
+# 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/.
+
+# This sets WARNING_CFLAGS for gcc-like compilers.
+
+ifndef CC_IS_CLANG
+ CC_IS_CLANG := $(and $(findstring clang, $(shell $(CC) --version 2>&1)), 1)
+ # Export CC_IS_CLANG to save a shell invocation when recursing.
+ export CC_IS_CLANG
+endif
+
+ifdef CC_IS_CLANG
+ # Clang claims GCC 4.2.1 compatibility, see GCC_VERSION
+ CC_IS_GCC = 1
+ # Export CC_IS_GCC to save a shell invocation when recursing.
+ export CC_IS_GCC
+endif
+
+ifndef CC_IS_GCC
+ CC_IS_GCC := $(shell $(CC) -x c -E -Wall -Werror /dev/null >/dev/null 2>&1 && echo 1)
+ # Export CC_IS_GCC to save a shell invocation when recursing.
+ export CC_IS_GCC
+endif
+
+ifndef CC_NAME
+ ifeq (1,$(CC_IS_GCC))
+ CC_NAME := $(shell $(CC) -? 2>&1 >/dev/null | sed -e 's/:.*//;1q')
+ else
+ CC_NAME := $(notdir $(CC))
+ endif
+ # Export CC_NAME to save a shell invocation when recursing.
+ export CC_NAME
+endif
+
+ifndef GCC_VERSION
+ ifeq (1,$(CC_IS_GCC))
+ GCC_VERSION := $(subst ., ,$(shell $(CC) -dumpversion || echo x.x.x))
+ # Export GCC_VERSION to save a shell invocation when recursing.
+ export GCC_VERSION
+ endif
+endif
+
+ifndef WARNING_CFLAGS
+ ifneq (1,$(CC_IS_GCC))
+ WARNING_CFLAGS = $(NULL)
+ else
+ # This tests to see if enabling the warning is possible before
+ # setting an option to disable it.
+ disable_warning = $(shell $(CC) -x c -E -Werror -W$(1) /dev/null >/dev/null 2>&1 && echo -Wno-$(1))
+
+ WARNING_CFLAGS = -Wall
+ ifdef CC_IS_CLANG
+ # -Qunused-arguments : clang objects to arguments that it doesn't understand
+ # and fixing this would require rearchitecture
+ WARNING_CFLAGS += -Qunused-arguments
+ # -Wno-parentheses-equality : because clang warns about macro expansions
+ WARNING_CFLAGS += $(call disable_warning,parentheses-equality)
+ ifdef BUILD_OPT
+ # clang is unable to handle glib's expansion of strcmp and similar for optimized
+ # builds, so ignore the resulting errors.
+ # See https://llvm.org/bugs/show_bug.cgi?id=20144
+ WARNING_CFLAGS += $(call disable_warning,array-bounds)
+ WARNING_CFLAGS += $(call disable_warning,unevaluated-expression)
+ endif
+ endif # if clang
+
+ ifndef NSS_ENABLE_WERROR
+ ifeq ($(OS_TARGET),Android)
+ # Android lollipop generates the following warning:
+ # error: call to 'sprintf' declared with attribute warning:
+ # sprintf is often misused; please use snprintf [-Werror]
+ # So, just suppress -Werror entirely on Android
+ NSS_ENABLE_WERROR = 0
+ $(warning OS_TARGET is Android, disabling -Werror)
+ else
+ ifdef CC_IS_CLANG
+ # Clang reports its version as an older gcc, but it's OK
+ NSS_ENABLE_WERROR = 1
+ else
+ ifneq (,$(filter 4.8 4.9,$(word 1,$(GCC_VERSION)).$(word 2,$(GCC_VERSION))))
+ NSS_ENABLE_WERROR = 1
+ endif
+ ifeq (,$(filter 0 1 2 3 4,$(word 1,$(GCC_VERSION))))
+ NSS_ENABLE_WERROR = 1
+ endif
+ endif
+ ifndef NSS_ENABLE_WERROR
+ $(warning Unable to find gcc 4.8 or greater, disabling -Werror)
+ NSS_ENABLE_WERROR = 0
+ endif
+ endif
+ endif #ndef NSS_ENABLE_WERROR
+
+ ifeq ($(NSS_ENABLE_WERROR),1)
+ WARNING_CFLAGS += -Werror
+ else
+ # Old versions of gcc (< 4.8) don't support #pragma diagnostic in functions.
+ # Use this to disable use of that #pragma and the warnings it suppresses.
+ WARNING_CFLAGS += -DNSS_NO_GCC48
+ endif
+ endif
+ export WARNING_CFLAGS
+endif # ndef WARNING_CFLAGS
diff --git a/security/nss/coreconf/arch.mk b/security/nss/coreconf/arch.mk
new file mode 100644
index 000000000..06c276f80
--- /dev/null
+++ b/security/nss/coreconf/arch.mk
@@ -0,0 +1,314 @@
+#
+# 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/.
+
+#######################################################################
+# Master "Core Components" macros for getting the OS architecture #
+# defines these symbols:
+# OS_ARCH (from uname -r)
+# OS_TEST (from uname -m)
+# OS_RELEASE (from uname -v and/or -r)
+# OS_TARGET User defined, or set to OS_ARCH
+# CPU_ARCH (from unmame -m or -p, ONLY on WINNT)
+# OS_CONFIG OS_TARGET + OS_RELEASE
+# OBJDIR_TAG (uses ASAN_TAG, GCOV_TAG, 64BIT_TAG)
+# OBJDIR_NAME
+#######################################################################
+
+#
+# Macros for getting the OS architecture
+#
+
+OS_ARCH := $(subst /,_,$(shell uname -s))
+
+#
+# Attempt to differentiate between sparc and x86 Solaris
+#
+
+OS_TEST := $(shell uname -m)
+ifeq ($(OS_TEST),i86pc)
+ OS_RELEASE := $(shell uname -r)_$(OS_TEST)
+else
+ OS_RELEASE := $(shell uname -r)
+endif
+
+#
+# Force the IRIX64 machines to use IRIX.
+#
+
+ifeq ($(OS_ARCH),IRIX64)
+ OS_ARCH = IRIX
+endif
+
+#
+# Force the older BSD/OS versions to use the new arch name.
+#
+
+ifeq ($(OS_ARCH),BSD_386)
+ OS_ARCH = BSD_OS
+endif
+
+#
+# Catch Deterim if SVR4 is NCR or UNIXWARE
+#
+
+ifeq ($(OS_ARCH),UNIX_SV)
+ ifneq ($(findstring NCR, $(shell grep NCR /etc/bcheckrc | head -1 )),)
+ OS_ARCH = NCR
+ else
+ # Make UnixWare something human readable
+ OS_ARCH = UNIXWARE
+ endif
+
+ # Get the OS release number, not 4.2
+ OS_RELEASE := $(shell uname -v)
+endif
+
+ifeq ($(OS_ARCH),UNIX_System_V)
+ OS_ARCH = NEC
+endif
+
+ifeq ($(OS_ARCH),AIX)
+ OS_RELEASE := $(shell uname -v).$(shell uname -r)
+endif
+
+#
+# Distinguish between OSF1 V4.0B and V4.0D
+#
+
+ifeq ($(OS_ARCH)$(OS_RELEASE),OSF1V4.0)
+ OS_VERSION := $(shell uname -v)
+ ifeq ($(OS_VERSION),564)
+ OS_RELEASE := V4.0B
+ endif
+ ifeq ($(OS_VERSION),878)
+ OS_RELEASE := V4.0D
+ endif
+endif
+
+#
+# SINIX changes name to ReliantUNIX with 5.43
+#
+
+ifeq ($(OS_ARCH),ReliantUNIX-N)
+ OS_ARCH = ReliantUNIX
+ OS_RELEASE = 5.4
+endif
+
+ifeq ($(OS_ARCH),SINIX-N)
+ OS_ARCH = ReliantUNIX
+ OS_RELEASE = 5.4
+endif
+
+#
+# Handle FreeBSD 2.2-STABLE, Linux 2.0.30-osfmach3, and
+# IRIX 6.5-ALPHA-1289139620.
+#
+
+ifeq (,$(filter-out Linux FreeBSD IRIX,$(OS_ARCH)))
+ OS_RELEASE := $(shell echo $(OS_RELEASE) | sed 's/-.*//')
+endif
+
+ifeq ($(OS_ARCH),Linux)
+ OS_RELEASE := $(subst ., ,$(OS_RELEASE))
+ ifneq ($(words $(OS_RELEASE)),1)
+ OS_RELEASE := $(word 1,$(OS_RELEASE)).$(word 2,$(OS_RELEASE))
+ endif
+endif
+
+#
+# For OS/2
+#
+ifeq ($(OS_ARCH),OS_2)
+ OS_ARCH = OS2
+ OS_RELEASE := $(shell uname -v)
+endif
+
+#######################################################################
+# Master "Core Components" macros for getting the OS target #
+#######################################################################
+
+#
+# Note: OS_TARGET should be specified on the command line for gmake.
+# When OS_TARGET=WIN95 is specified, then a Windows 95 target is built.
+# The difference between the Win95 target and the WinNT target is that
+# the WinNT target uses Windows NT specific features not available
+# in Windows 95. The Win95 target will run on Windows NT, but (supposedly)
+# at lesser performance (the Win95 target uses threads; the WinNT target
+# uses fibers).
+#
+# If OS_TARGET is not specified, it defaults to $(OS_ARCH), i.e., no
+# cross-compilation, except on Windows, where it defaults to WIN95.
+#
+
+#
+# On WIN32, we also define the variable CPU_ARCH, if it isn't already.
+#
+ifndef CPU_ARCH
+ ifeq ($(OS_ARCH), WINNT)
+ CPU_ARCH := $(shell uname -p)
+ ifeq ($(CPU_ARCH),I386)
+ CPU_ARCH = x386
+ endif
+ endif
+endif
+
+# If uname -s returns "Windows_NT", we assume that we are using
+# the uname.exe in MKS toolkit.
+#
+# The -r option of MKS uname only returns the major version number.
+# So we need to use its -v option to get the minor version number.
+# Moreover, it doesn't have the -p option, so we need to use uname -m.
+#
+ifeq ($(OS_ARCH), Windows_NT)
+ OS_ARCH = WINNT
+ OS_MINOR_RELEASE := $(shell uname -v)
+ # strip leading 0
+ OS_MINOR_RELEASE := $(patsubst 0%,%,$(OS_MINOR_RELEASE))
+ OS_RELEASE := $(OS_RELEASE).$(OS_MINOR_RELEASE)
+ ifndef CPU_ARCH
+ CPU_ARCH := $(shell uname -m)
+ #
+ # MKS's uname -m returns "586" on a Pentium machine.
+ #
+ ifneq (,$(findstring 86,$(CPU_ARCH)))
+ CPU_ARCH = x386
+ endif
+ endif
+endif
+#
+# If uname -s returns "CYGWIN_NT-*", we assume that we are using
+# the uname.exe in the Cygwin tools.
+#
+ifeq (CYGWIN_NT,$(findstring CYGWIN_NT,$(OS_ARCH)))
+ OS_RELEASE := $(patsubst CYGWIN_NT-%,%,$(OS_ARCH))
+ OS_ARCH = WINNT
+ ifndef CPU_ARCH
+ ifeq (WOW64,$(findstring WOW64,$(OS_RELEASE)))
+ OS_RELEASE := $(patsubst %-WOW64,%,$(OS_RELEASE))
+ endif
+ CPU_ARCH := $(shell uname -m)
+ #
+ # Cygwin's uname -m returns "i686" on a Pentium Pro machine.
+ #
+ ifneq (,$(findstring 86,$(CPU_ARCH)))
+ CPU_ARCH = x386
+ endif
+ endif
+endif
+#
+# If uname -s returns "MINGW*_NT-*", we assume that we are using
+# the uname.exe in the MSYS toolkit.
+#
+ifneq (,$(filter MINGW32_NT-% MINGW64_NT-%,$(OS_ARCH)))
+ OS_RELEASE := $(patsubst MINGW64_NT-%,%,$(patsubst MINGW32_NT-%,%,$(OS_ARCH)))
+ OS_ARCH = WINNT
+ USE_MSYS = 1
+ ifndef CPU_ARCH
+ CPU_ARCH := $(shell uname -m)
+ #
+ # MSYS's uname -m returns "i686" on a Pentium Pro machine.
+ #
+ ifneq (,$(filter i%86,$(CPU_ARCH)))
+ CPU_ARCH = x386
+ endif
+ endif
+endif
+
+ifeq ($(OS_TARGET),Android)
+#
+# this should be configurable from the user
+#
+ OS_TEST := arm
+ OS_ARCH = Android
+ ifndef OS_TARGET_RELEASE
+ OS_TARGET_RELEASE := 8
+ endif
+endif
+
+ifndef OS_TARGET
+ifeq ($(OS_ARCH), WINNT)
+ OS_TARGET = WIN95
+else
+ OS_TARGET = $(OS_ARCH)
+endif
+endif
+
+ifeq ($(OS_TARGET), WIN95)
+ OS_RELEASE = 4.0
+endif
+
+ifdef OS_TARGET_RELEASE
+ OS_RELEASE = $(OS_TARGET_RELEASE)
+endif
+
+#
+# This variable is used to get OS_CONFIG.mk.
+#
+
+OS_CONFIG = $(OS_TARGET)$(OS_RELEASE)
+
+#
+# OBJDIR_TAG depends on the predefined variable BUILD_OPT,
+# to distinguish between debug and release builds.
+#
+
+ifeq ($(USE_ASAN), 1)
+ ASAN_TAG = _ASAN
+else
+ ASAN_TAG =
+endif
+ifeq ($(USE_GCOV), 1)
+ GCOV_TAG = _GCOV
+else
+ GCOV_TAG =
+endif
+ifeq ($(USE_64), 1)
+ 64BIT_TAG = _64
+else
+ 64BIT_TAG =
+endif
+OBJDIR_TAG_BASE=$(ASAN_TAG)$(GCOV_TAG)$(64BIT_TAG)
+
+ifdef BUILD_OPT
+ OBJDIR_TAG = $(OBJDIR_TAG_BASE)_OPT
+else
+ ifdef BUILD_IDG
+ OBJDIR_TAG = $(OBJDIR_TAG_BASE)_IDG
+ else
+ OBJDIR_TAG = $(OBJDIR_TAG_BASE)_DBG
+ endif
+endif
+
+#
+# The following flags are defined in the individual $(OS_CONFIG).mk
+# files.
+#
+# CPU_TAG is defined if the CPU is not the most common CPU.
+# COMPILER_TAG is defined if the compiler is not the default compiler.
+# IMPL_STRATEGY may be defined too.
+#
+
+ifdef CROSS_COMPILE
+ OBJDIR_NAME_COMPILER =
+else
+ OBJDIR_NAME_COMPILER = $(COMPILER_TAG)
+endif
+OBJDIR_NAME_BASE = $(OS_TARGET)$(OS_RELEASE)$(CPU_TAG)$(OBJDIR_NAME_COMPILER)$(LIBC_TAG)$(IMPL_STRATEGY)$(OBJDIR_TAG)
+OBJDIR_NAME = $(OBJDIR_NAME_BASE).OBJ
+
+
+ifeq (,$(filter-out WIN%,$(OS_TARGET)))
+ifndef BUILD_OPT
+#
+# Define USE_DEBUG_RTL if you want to use the debug runtime library
+# (RTL) in the debug build
+#
+ifdef USE_DEBUG_RTL
+ OBJDIR_NAME = $(OBJDIR_NAME_BASE).OBJD
+endif
+endif
+endif
+
+MK_ARCH = included
diff --git a/security/nss/coreconf/check_cc_clang.py b/security/nss/coreconf/check_cc_clang.py
new file mode 100644
index 000000000..145ec0a72
--- /dev/null
+++ b/security/nss/coreconf/check_cc_clang.py
@@ -0,0 +1,20 @@
+#!/usr/bin/env python
+
+import os
+import subprocess
+import sys
+
+def main():
+ if sys.platform == 'win32':
+ print 0
+ else:
+ cc = os.environ.get('CC', 'cc')
+ try:
+ cc_is_clang = 'clang' in subprocess.check_output([cc, '--version'])
+ except OSError:
+ # We probably just don't have CC/cc.
+ cc_is_clang = False
+ print int(cc_is_clang)
+
+if __name__ == '__main__':
+ main()
diff --git a/security/nss/coreconf/command.mk b/security/nss/coreconf/command.mk
new file mode 100644
index 000000000..5e92748aa
--- /dev/null
+++ b/security/nss/coreconf/command.mk
@@ -0,0 +1,39 @@
+#
+# 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/.
+
+#######################################################################
+# Master "Core Components" default command macros; #
+# can be overridden in <arch>.mk #
+#######################################################################
+
+AS = $(CC)
+ASFLAGS += $(CFLAGS)
+CCF = $(CC) $(CFLAGS)
+LINK_DLL = $(LD) $(OS_DLLFLAGS) $(DLLFLAGS) $(XLDFLAGS)
+CFLAGS = $(OPTIMIZER) $(OS_CFLAGS) $(WARNING_CFLAGS) $(XP_DEFINE) \
+ $(DEFINES) $(INCLUDES) $(XCFLAGS)
+PERL = perl
+RANLIB = echo
+TAR = /bin/tar
+#
+# For purify
+#
+NOMD_CFLAGS += $(OPTIMIZER) $(NOMD_OS_CFLAGS) $(XP_DEFINE) $(DEFINES) \
+ $(INCLUDES) $(XCFLAGS)
+
+# Optimization of code for size
+# OPT_CODE_SIZE
+# =1: The code can be optimized for size.
+# The code is actually optimized for size only if ALLOW_OPT_CODE_SIZE=1
+# in a given source code directory (in manifest.mn)
+# =0: Never optimize the code for size.
+#
+# Default value = 0
+# Can be overridden from the make command line.
+ifndef OPT_CODE_SIZE
+OPT_CODE_SIZE = 0
+endif
+
+MK_COMMAND = included
diff --git a/security/nss/coreconf/config.gypi b/security/nss/coreconf/config.gypi
new file mode 100644
index 000000000..fe9b55329
--- /dev/null
+++ b/security/nss/coreconf/config.gypi
@@ -0,0 +1,530 @@
+# 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/.
+{
+ 'variables': {
+ 'module%': '',
+ 'variables': {
+ 'variables': {
+ 'variables': {
+ 'python%': 'python',
+ },
+ # chromium uses pymod_do_main, but gyp doesn't set a sensible
+ # Python sys.path (gyp_chromium does).
+ 'python%': '<(python)',
+ 'host_arch%': '<!(<(python) <(DEPTH)/coreconf/detect_host_arch.py)',
+ },
+ 'python%': '<(python)',
+ 'host_arch%': '<(host_arch)',
+ 'conditions': [
+ ['OS=="android"', {
+ 'target_arch%': 'arm',
+ }, {
+ # Default architecture we're building for is the architecture we're
+ # building on.
+ 'target_arch%': '<(host_arch)',
+ }],
+ ['OS=="win"', {
+ 'use_system_zlib%': 0,
+ 'nspr_libs%': ['nspr4.lib', 'plc4.lib', 'plds4.lib'],
+ 'zlib_libs%': [],
+ #TODO
+ 'moz_debug_flags%': '',
+ 'dll_prefix': '',
+ 'dll_suffix': 'dll',
+ }, {
+ 'nspr_libs%': ['-lplds4', '-lplc4', '-lnspr4'],
+ 'use_system_zlib%': 1,
+ }],
+ ['OS=="linux" or OS=="android"', {
+ 'zlib_libs%': ['-lz'],
+ 'moz_debug_flags%': '-gdwarf-2',
+ 'optimize_flags%': '-O2',
+ 'dll_prefix': 'lib',
+ 'dll_suffix': 'so',
+ }],
+ ['OS=="linux"', {
+ 'freebl_name': 'freeblpriv3',
+ }, {
+ 'freebl_name': 'freebl3',
+ }],
+ ['OS=="mac"', {
+ 'zlib_libs%': ['-lz'],
+ 'use_system_sqlite%': 1,
+ 'moz_debug_flags%': '-gdwarf-2 -gfull',
+ 'optimize_flags%': '-O2',
+ 'dll_prefix': 'lib',
+ 'dll_suffix': 'dylib',
+ }, {
+ 'use_system_sqlite%': 0,
+ }],
+ ['"<(GENERATOR)"=="ninja"', {
+ 'cc_is_clang%': '<!(<(python) <(DEPTH)/coreconf/check_cc_clang.py)',
+ }, {
+ 'cc_is_clang%': '0',
+ }],
+ ],
+ },
+ # Copy conditionally-set variables out one scope.
+ 'python%': '<(python)',
+ 'host_arch%': '<(host_arch)',
+ 'target_arch%': '<(target_arch)',
+ 'use_system_zlib%': '<(use_system_zlib)',
+ 'zlib_libs%': ['<@(zlib_libs)'],
+ 'moz_debug_flags%': '<(moz_debug_flags)',
+ 'nspr_libs%': ['<@(nspr_libs)'],
+ 'nspr_lib_dir%': '<(nspr_lib_dir)',
+ 'nspr_include_dir%': '<(nspr_include_dir)',
+ 'use_system_sqlite%': '<(use_system_sqlite)',
+ 'sqlite_libs%': ['-lsqlite3'],
+ 'dll_prefix': '<(dll_prefix)',
+ 'dll_suffix': '<(dll_suffix)',
+ 'freebl_name': '<(freebl_name)',
+ 'cc_is_clang%': '<(cc_is_clang)',
+ # Some defaults
+ 'disable_tests%': 0,
+ 'disable_chachapoly%': 0,
+ 'disable_dbm%': 0,
+ 'disable_libpkix%': 1,
+ 'disable_werror%': 0,
+ 'mozilla_client%': 0,
+ 'moz_fold_libs%': 0,
+ 'moz_folded_library_name%': '',
+ 'ssl_enable_zlib%': 1,
+ 'use_asan%': 0,
+ 'use_ubsan%': 0,
+ 'use_msan%': 0,
+ 'use_sancov%': 0,
+ 'test_build%': 0,
+ 'fuzz%': 0,
+ 'sign_libs%': 1,
+ 'use_pprof%': 0,
+ 'nss_public_dist_dir%': '<(nss_dist_dir)/public',
+ 'nss_private_dist_dir%': '<(nss_dist_dir)/private',
+ },
+ 'target_defaults': {
+ # Settings specific to targets should go here.
+ # This is mostly for linking to libraries.
+ 'variables': {
+ 'mapfile%': '',
+ 'test_build%': 0,
+ },
+ 'standalone_static_library': 0,
+ 'include_dirs': [
+ '<(nspr_include_dir)',
+ '<(nss_dist_dir)/private/<(module)',
+ ],
+ 'conditions': [
+ [ 'OS=="linux"', {
+ 'libraries': [
+ '-lpthread',
+ '-ldl',
+ '-lc',
+ ],
+ }],
+ ],
+ 'target_conditions': [
+ # If we want to properly export a static library, and copy it to lib,
+ # we need to mark it as a 'standalone_static_library'. Otherwise,
+ # the relative paths in the thin archive will break linking.
+ [ '_type=="shared_library"', {
+ 'product_dir': '<(nss_dist_obj_dir)/lib'
+ }, '_type=="executable"', {
+ 'product_dir': '<(nss_dist_obj_dir)/bin'
+ }, '_standalone_static_library==1', {
+ 'product_dir': '<(nss_dist_obj_dir)/lib'
+ }],
+ # mapfile handling
+ [ 'test_build==0 and mapfile!=""', {
+ # Work around a gyp bug. Fixed upstream but not in Ubuntu packages:
+ # https://chromium.googlesource.com/external/gyp/+/b85ad3e578da830377dbc1843aa4fbc5af17a192%5E%21/
+ 'sources': [
+ '<(DEPTH)/coreconf/empty.c',
+ ],
+ 'xcode_settings': {
+ 'OTHER_LDFLAGS': [
+ '-exported_symbols_list',
+ '<(INTERMEDIATE_DIR)/out.>(mapfile)',
+ ],
+ },
+ 'conditions': [
+ [ 'OS=="linux" or OS=="android"', {
+ 'ldflags': [
+ '-Wl,--version-script,<(INTERMEDIATE_DIR)/out.>(mapfile)',
+ ],
+ }],
+ [ 'OS=="win"', {
+ # On Windows, .def files are used directly as sources.
+ 'sources': [
+ '>(mapfile)',
+ ],
+ }, {
+ # On other platforms, .def files need processing.
+ 'sources': [
+ '<(INTERMEDIATE_DIR)/out.>(mapfile)',
+ ],
+ 'actions': [{
+ 'action_name': 'generate_mapfile',
+ 'inputs': [
+ '>(mapfile)',
+ ],
+ 'outputs': [
+ '<(INTERMEDIATE_DIR)/out.>(mapfile)',
+ ],
+ 'action': ['<@(process_map_file)'],
+ }],
+ }]
+ ],
+ }, 'test_build==1 and _type=="shared_library"', {
+ # When linking a shared lib against a static one, XCode doesn't
+ # export the latter's symbols by default. -all_load fixes that.
+ 'xcode_settings': {
+ 'OTHER_LDFLAGS': [
+ '-all_load',
+ ],
+ },
+ }],
+ [ '_type=="shared_library" or _type=="executable"', {
+ 'libraries': [
+ '<@(nspr_libs)',
+ ],
+ 'library_dirs': [
+ '<(nspr_lib_dir)',
+ ],
+ }],
+ # Shared library specific settings.
+ [ '_type=="shared_library"', {
+ 'conditions': [
+ [ 'OS=="linux" or OS=="android"', {
+ 'ldflags': [
+ '-Wl,--gc-sections',
+ '-Wl,-z,defs',
+ ],
+ }],
+ ],
+ 'xcode_settings': {
+ 'DYLIB_INSTALL_NAME_BASE': '@executable_path',
+ 'DYLIB_COMPATIBILITY_VERSION': '1',
+ 'DYLIB_CURRENT_VERSION': '1',
+ 'OTHER_LDFLAGS': [
+ '-headerpad_max_install_names',
+ ],
+ },
+ 'msvs_settings': {
+ 'VCLinkerTool': {
+ 'SubSystem': '2',
+ },
+ },
+ }],
+ ],
+ 'default_configuration': 'Debug',
+ 'configurations': {
+ # Common settings for Debug+Release should go here.
+ 'Common': {
+ 'abstract': 1,
+ 'defines': [
+ 'NSS_NO_INIT_SUPPORT',
+ 'USE_UTIL_DIRECTLY',
+ 'NO_NSPR_10_SUPPORT',
+ 'SSL_DISABLE_DEPRECATED_CIPHER_SUITE_NAMES',
+ ],
+ 'msvs_configuration_attributes': {
+ 'OutputDirectory': '$(SolutionDir)$(ConfigurationName)',
+ 'IntermediateDirectory': '$(OutDir)\\obj\\$(ProjectName)',
+ },
+ 'msvs_settings': {
+ 'VCCLCompilerTool': {
+ 'AdditionalIncludeDirectories': ['<(nspr_include_dir)'],
+ },
+ },
+ 'xcode_settings': {
+ 'CLANG_CXX_LANGUAGE_STANDARD': 'c++0x',
+ 'OTHER_CFLAGS': [
+ '-fPIC',
+ '-fno-common',
+ '-pipe',
+ ],
+ },
+ 'conditions': [
+ [ 'OS=="linux" or OS=="android"', {
+ 'defines': [
+ 'LINUX2_1',
+ 'LINUX',
+ 'linux',
+ 'HAVE_STRERROR',
+ 'XP_UNIX',
+ '_REENTRANT',
+ ],
+ 'cflags': [
+ '-fPIC',
+ '-pipe',
+ '-ffunction-sections',
+ '-fdata-sections',
+ ],
+ 'cflags_cc': [
+ '-std=c++0x',
+ ],
+ 'conditions': [
+ [ 'target_arch=="ia32"', {
+ 'cflags': ['-m32'],
+ 'ldflags': ['-m32'],
+ }],
+ [ 'target_arch=="x64"', {
+ 'cflags': ['-m64'],
+ 'ldflags': ['-m64'],
+ }],
+ [ 'use_pprof==1' , {
+ 'ldflags': [ '-lprofiler' ],
+ }],
+ ],
+ }],
+ [ 'disable_werror==0 and (OS=="linux" or OS=="mac")', {
+ 'cflags': [
+ '<!@(<(python) <(DEPTH)/coreconf/werror.py)',
+ ],
+ }],
+ [ 'fuzz==1', {
+ 'cflags': [
+ '-Wno-unused-function',
+ ]
+ }],
+ [ 'use_asan==1 or use_ubsan==1', {
+ 'cflags': ['-O1'],
+ 'xcode_settings': {
+ 'GCC_OPTIMIZATION_LEVEL': '1', # -O1
+ }
+ }],
+ [ 'use_asan==1', {
+ 'variables': {
+ 'asan_flags': '<!(<(python) <(DEPTH)/coreconf/sanitizers.py asan)',
+ 'no_ldflags': '<!(<(python) <(DEPTH)/coreconf/sanitizers.py ld)',
+ },
+ 'cflags': ['<@(asan_flags)'],
+ 'ldflags': ['<@(asan_flags)'],
+ 'ldflags!': ['<@(no_ldflags)'],
+ 'xcode_settings': {
+ 'OTHER_CFLAGS': ['<@(asan_flags)'],
+ 'OTHER_LDFLAGS!': ['<@(no_ldflags)'],
+ # We want to pass -fsanitize=... to our final link call,
+ # but not to libtool. OTHER_LDFLAGS is passed to both.
+ # To trick GYP into doing what we want, we'll piggyback on
+ # LIBRARY_SEARCH_PATHS, producing "-L/usr/lib -fsanitize=...".
+ # The -L/usr/lib is redundant but innocuous: it's a default path.
+ 'LIBRARY_SEARCH_PATHS': ['/usr/lib <(asan_flags)'],
+ },
+ }],
+ [ 'use_ubsan==1', {
+ 'variables': {
+ 'ubsan_flags': '<!(<(python) <(DEPTH)/coreconf/sanitizers.py ubsan)',
+ 'no_ldflags': '<!(<(python) <(DEPTH)/coreconf/sanitizers.py ld)',
+ },
+ 'cflags': ['<@(ubsan_flags)'],
+ 'ldflags': ['<@(ubsan_flags)'],
+ 'ldflags!': ['<@(no_ldflags)'],
+ 'xcode_settings': {
+ 'OTHER_CFLAGS': ['<@(ubsan_flags)'],
+ 'OTHER_LDFLAGS!': ['<@(no_ldflags)'],
+ # See comment above.
+ 'LIBRARY_SEARCH_PATHS': ['/usr/lib <(ubsan_flags)'],
+ },
+ }],
+ [ 'use_msan==1', {
+ 'variables': {
+ 'msan_flags': '<!(<(python) <(DEPTH)/coreconf/sanitizers.py msan)',
+ 'no_ldflags': '<!(<(python) <(DEPTH)/coreconf/sanitizers.py ld)',
+ },
+ 'cflags': ['<@(msan_flags)'],
+ 'ldflags': ['<@(msan_flags)'],
+ 'ldflags!': ['<@(no_ldflags)'],
+ 'xcode_settings': {
+ 'OTHER_CFLAGS': ['<@(msan_flags)'],
+ 'OTHER_LDFLAGS!': ['<@(no_ldflags)'],
+ # See comment above.
+ 'LIBRARY_SEARCH_PATHS': ['/usr/lib <(msan_flags)'],
+ },
+ }],
+ [ 'use_sancov!=0', {
+ 'variables': {
+ 'sancov_flags': '<!(<(python) <(DEPTH)/coreconf/sanitizers.py sancov <(use_sancov))',
+ 'no_ldflags': '<!(<(python) <(DEPTH)/coreconf/sanitizers.py ld)',
+ },
+ 'cflags': ['<@(sancov_flags)'],
+ 'ldflags': ['<@(sancov_flags)'],
+ 'ldflags!': ['<@(no_ldflags)'],
+ 'xcode_settings': {
+ 'OTHER_CFLAGS': ['<@(sancov_flags)'],
+ 'OTHER_LDFLAGS!': ['<@(no_ldflags)'],
+ # See comment above.
+ 'LIBRARY_SEARCH_PATHS': ['/usr/lib <(sancov_flags)'],
+ },
+ }],
+ [ 'OS=="android" and mozilla_client==0', {
+ 'defines': [
+ 'NO_SYSINFO',
+ 'NO_FORK_CHECK',
+ 'ANDROID',
+ ],
+ }],
+ [ 'OS=="mac"', {
+ 'defines': [
+ 'DARWIN',
+ 'HAVE_STRERROR',
+ 'HAVE_BSD_FLOCK',
+ 'XP_UNIX',
+ ],
+ 'conditions': [
+ [ 'target_arch=="ia32"', {
+ 'xcode_settings': {
+ 'ARCHS': ['i386'],
+ },
+ }],
+ [ 'target_arch=="x64"', {
+ 'xcode_settings': {
+ 'ARCHS': ['x86_64'],
+ },
+ }],
+ ],
+ }],
+ [ 'OS=="win"', {
+ 'defines': [
+ '_WINDOWS',
+ 'WIN95',
+ '_CRT_SECURE_NO_WARNINGS',
+ '_CRT_NONSTDC_NO_WARNINGS',
+ ],
+ 'cflags': [
+ '-W3',
+ '-w44267', # Disable C4267: conversion from 'size_t' to 'type', possible loss of data
+ '-w44244', # Disable C4244: conversion from 'type1' to 'type2', possible loss of data
+ '-w44018', # Disable C4018: 'expression' : signed/unsigned mismatch
+ '-w44312', # Disable C4312: 'type cast': conversion from 'type1' to 'type2' of greater size
+ ],
+ 'conditions': [
+ [ 'disable_werror==0', {
+ 'cflags': ['-WX']
+ }],
+ [ 'target_arch=="ia32"', {
+ 'msvs_configuration_platform': 'Win32',
+ 'msvs_settings': {
+ 'VCLinkerTool': {
+ 'MinimumRequiredVersion': '5.01', # XP.
+ 'TargetMachine': '1',
+ 'ImageHasSafeExceptionHandlers': 'false',
+ },
+ 'VCCLCompilerTool': {
+ 'PreprocessorDefinitions': [
+ 'WIN32',
+ ],
+ },
+ },
+
+ }],
+ [ 'target_arch=="x64"', {
+ 'msvs_configuration_platform': 'x64',
+ 'msvs_settings': {
+ 'VCLinkerTool': {
+ 'TargetMachine': '17', # x86-64
+ },
+ 'VCCLCompilerTool': {
+ 'PreprocessorDefinitions': [
+ 'WIN64',
+ '_AMD64_',
+ ],
+ },
+ },
+ }],
+ ],
+ }],
+ [ 'disable_dbm==1', {
+ 'defines': [
+ 'NSS_DISABLE_DBM',
+ ],
+ }],
+ [ 'disable_libpkix==1', {
+ 'defines': [
+ 'NSS_DISABLE_LIBPKIX',
+ ],
+ }],
+ ],
+ },
+ # Common settings for debug should go here.
+ 'Debug': {
+ 'inherit_from': ['Common'],
+ 'conditions': [
+ [ 'OS=="linux" or OS=="android"', {
+ 'cflags': [
+ '-g',
+ '<(moz_debug_flags)',
+ ],
+ }]
+ ],
+ #TODO: DEBUG_$USER
+ 'defines': ['DEBUG'],
+ 'xcode_settings': {
+ 'COPY_PHASE_STRIP': 'NO',
+ 'GCC_OPTIMIZATION_LEVEL': '0',
+ 'GCC_GENERATE_DEBUGGING_SYMBOLS': 'YES',
+ },
+ 'msvs_settings': {
+ 'VCCLCompilerTool': {
+ 'Optimization': '0',
+ 'BasicRuntimeChecks': '3',
+ 'RuntimeLibrary': '2', # /MD
+ },
+ 'VCLinkerTool': {
+ 'LinkIncremental': '1',
+ },
+ 'VCResourceCompilerTool': {
+ 'PreprocessorDefinitions': ['DEBUG'],
+ },
+ },
+ },
+ # Common settings for release should go here.
+ 'Release': {
+ 'inherit_from': ['Common'],
+ 'defines': [
+ 'NDEBUG',
+ ],
+ 'xcode_settings': {
+ 'DEAD_CODE_STRIPPING': 'YES', # -Wl,-dead_strip
+ 'GCC_OPTIMIZATION_LEVEL': '2', # -O2
+ },
+ 'msvs_settings': {
+ 'VCCLCompilerTool': {
+ 'Optimization': '2', # /Os
+ 'RuntimeLibrary': '2', # /MD
+ },
+ 'VCLinkerTool': {
+ 'LinkIncremental': '1',
+ },
+ },
+ },
+ 'conditions': [
+ [ 'OS=="win"', {
+ # The gyp ninja backend requires these.
+ # TODO: either we should support building both 32/64-bit as
+ # configurations from the same gyp build, or we should fix
+ # upstream gyp to not require these.
+ 'Debug_x64': {
+ 'inherit_from': ['Debug'],
+ },
+ 'Release_x64': {
+ 'inherit_from': ['Release'],
+ },
+ }],
+ ],
+ },
+ },
+ 'conditions': [
+ [ 'OS=="linux" or OS=="android"', {
+ 'variables': {
+ 'process_map_file': ['/bin/sh', '-c', '/bin/grep -v ";-" >(mapfile) | sed -e "s,;+,," -e "s; DATA ;;" -e "s,;;,," -e "s,;.*,;," > >@(_outputs)'],
+ },
+ }],
+ [ 'OS=="mac"', {
+ 'variables': {
+ 'process_map_file': ['/bin/sh', '-c', '/usr/bin/grep -v ";+" >(mapfile) | grep -v ";-" | sed -e "s; DATA ;;" -e "s,;;,," -e "s,;.*,," -e "s,^,_," > >@(_outputs)'],
+ },
+ }],
+ ],
+}
diff --git a/security/nss/coreconf/config.mk b/security/nss/coreconf/config.mk
new file mode 100644
index 000000000..09b733d5c
--- /dev/null
+++ b/security/nss/coreconf/config.mk
@@ -0,0 +1,210 @@
+#
+# 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/.
+
+# Configuration information for building in the "Core Components" source module
+
+#######################################################################
+# [1.0] Master "Core Components" source and release <architecture> #
+# tags #
+#######################################################################
+ifndef MK_ARCH
+include $(CORE_DEPTH)/coreconf/arch.mk
+endif
+
+#######################################################################
+# [2.0] Master "Core Components" default command macros #
+# (NOTE: may be overridden in $(OS_TARGET)$(OS_RELEASE).mk) #
+#######################################################################
+ifndef MK_COMMAND
+include $(CORE_DEPTH)/coreconf/command.mk
+endif
+
+#######################################################################
+# [3.0] Master "Core Components" <architecture>-specific macros #
+# (dependent upon <architecture> tags) #
+# #
+# We are moving towards just having a $(OS_TARGET).mk file #
+# as opposed to multiple $(OS_TARGET)$(OS_RELEASE).mk files, #
+# one for each OS release. #
+#######################################################################
+
+TARGET_OSES = FreeBSD BSD_OS NetBSD OpenUNIX OS2 QNX Darwin BeOS OpenBSD \
+ AIX RISCOS WINNT WIN95 Linux Android
+
+ifeq (,$(filter-out $(TARGET_OSES),$(OS_TARGET)))
+include $(CORE_DEPTH)/coreconf/$(OS_TARGET).mk
+else
+ifeq ($(OS_TARGET),SunOS)
+include $(CORE_DEPTH)/coreconf/SunOS5.mk
+else
+include $(CORE_DEPTH)/coreconf/$(OS_TARGET)$(OS_RELEASE).mk
+endif
+endif
+
+#######################################################################
+# [4.0] Master "Core Components" source and release <platform> tags #
+# (dependent upon <architecture> tags) #
+#######################################################################
+PLATFORM = $(OBJDIR_NAME)
+
+#######################################################################
+# [5.0] Master "Core Components" release <tree> tags #
+# (dependent upon <architecture> tags) #
+#######################################################################
+ifndef MK_TREE
+include $(CORE_DEPTH)/coreconf/tree.mk
+endif
+
+#######################################################################
+# [6.0] Master "Core Components" source and release <component> tags #
+# NOTE: A component is also called a module or a subsystem. #
+# (dependent upon $(MODULE) being defined on the #
+# command line, as an environment variable, or in individual #
+# makefiles, or more appropriately, manifest.mn) #
+#######################################################################
+ifndef MK_MODULE
+include $(CORE_DEPTH)/coreconf/module.mk
+endif
+
+#######################################################################
+# [7.0] Master "Core Components" release <version> tags #
+# (dependent upon $(MODULE) being defined on the #
+# command line, as an environment variable, or in individual #
+# makefiles, or more appropriately, manifest.mn) #
+#######################################################################
+ifndef MK_VERSION
+include $(CORE_DEPTH)/coreconf/version.mk
+endif
+
+#######################################################################
+# [8.0] Master "Core Components" macros to figure out #
+# binary code location #
+# (dependent upon <platform> tags) #
+#######################################################################
+ifndef MK_LOCATION
+include $(CORE_DEPTH)/coreconf/location.mk
+endif
+
+#######################################################################
+# [9.0] Master "Core Components" <component>-specific source path #
+# (dependent upon <user_source_tree>, <source_component>, #
+# <version>, and <platform> tags) #
+#######################################################################
+ifndef MK_SOURCE
+include $(CORE_DEPTH)/coreconf/source.mk
+endif
+
+#######################################################################
+# [10.0] Master "Core Components" include switch for support header #
+# files #
+# (dependent upon <tree>, <component>, <version>, #
+# and <platform> tags) #
+#######################################################################
+ifndef MK_HEADERS
+include $(CORE_DEPTH)/coreconf/headers.mk
+endif
+
+#######################################################################
+# [11.0] Master "Core Components" for computing program prefixes #
+#######################################################################
+ifndef MK_PREFIX
+include $(CORE_DEPTH)/coreconf/prefix.mk
+endif
+
+#######################################################################
+# [12.0] Master "Core Components" for computing program suffixes #
+# (dependent upon <architecture> tags) #
+#######################################################################
+ifndef MK_SUFFIX
+include $(CORE_DEPTH)/coreconf/suffix.mk
+endif
+
+#######################################################################
+# [13.0] Master "Core Components" for defining JDK #
+# (dependent upon <architecture>, <source>, and <suffix> tags)#
+#######################################################################
+ifdef NS_USE_JDK
+include $(CORE_DEPTH)/coreconf/jdk.mk
+endif
+
+#######################################################################
+# [14.0] Master "Core Components" rule set #
+#######################################################################
+ifndef MK_RULESET
+include $(CORE_DEPTH)/coreconf/ruleset.mk
+endif
+
+#######################################################################
+# [15.0] Dependencies.
+#######################################################################
+
+-include $(MKDEPENDENCIES)
+
+#######################################################################
+# [16.0] Global environ ment defines
+#######################################################################
+
+ifdef NSS_DISABLE_ECC
+DEFINES += -DNSS_DISABLE_ECC
+endif
+
+ifdef NSS_ALLOW_UNSUPPORTED_CRITICAL
+DEFINES += -DNSS_ALLOW_UNSUPPORTED_CRITICAL
+endif
+
+ifdef BUILD_LIBPKIX_TESTS
+DEFINES += -DBUILD_LIBPKIX_TESTS
+endif
+
+ifdef NSS_DISABLE_LIBPKIX
+DEFINES += -DNSS_DISABLE_LIBPKIX
+endif
+
+ifdef NSS_DISABLE_DBM
+DEFINES += -DNSS_DISABLE_DBM
+endif
+
+ifdef NSS_DISABLE_CHACHAPOLY
+DEFINES += -DNSS_DISABLE_CHACHAPOLY
+endif
+
+ifdef NSS_PKIX_NO_LDAP
+DEFINES += -DNSS_PKIX_NO_LDAP
+endif
+
+# FIPS support requires startup tests to be executed at load time of shared modules.
+# For performance reasons, these tests are disabled by default.
+# When compiling binaries that must support FIPS mode,
+# you should define NSS_FORCE_FIPS
+#
+# NSS_NO_INIT_SUPPORT is always defined on platforms that don't support
+# executing the startup tests at library load time.
+ifndef NSS_FORCE_FIPS
+DEFINES += -DNSS_NO_INIT_SUPPORT
+endif
+
+# Avoid building object leak test code for optimized library
+ifndef BUILD_OPT
+ifdef PKIX_OBJECT_LEAK_TEST
+DEFINES += -DPKIX_OBJECT_LEAK_TEST
+endif
+endif
+
+# This allows all library and tools code to use the util function
+# implementations directly from libnssutil3, rather than the wrappers
+# in libnss3 which are present for binary compatibility only
+DEFINES += -DUSE_UTIL_DIRECTLY
+USE_UTIL_DIRECTLY = 1
+
+# Build with NO_NSPR_10_SUPPORT to avoid using obsolete NSPR features
+DEFINES += -DNO_NSPR_10_SUPPORT
+
+# Hide old, deprecated, TLS cipher suite names when building NSS
+DEFINES += -DSSL_DISABLE_DEPRECATED_CIPHER_SUITE_NAMES
+
+# Mozilla's mozilla/modules/zlib/src/zconf.h adds the MOZ_Z_ prefix to zlib
+# exported symbols, which causes problem when NSS is built as part of Mozilla.
+# So we add a NSS_SSL_ENABLE_ZLIB variable to allow Mozilla to turn this off.
+NSS_SSL_ENABLE_ZLIB = 1
diff --git a/security/nss/coreconf/coreconf.dep b/security/nss/coreconf/coreconf.dep
new file mode 100644
index 000000000..5182f7555
--- /dev/null
+++ b/security/nss/coreconf/coreconf.dep
@@ -0,0 +1,12 @@
+/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 2 -*- */
+/* 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/. */
+
+/*
+ * A dummy header file that is a dependency for all the object files.
+ * Used to force a full recompilation of NSS in Mozilla's Tinderbox
+ * depend builds. See comments in rules.mk.
+ */
+
+#error "Do not include this header file."
diff --git a/security/nss/coreconf/coreconf.pl b/security/nss/coreconf/coreconf.pl
new file mode 100644
index 000000000..7cf3e57d0
--- /dev/null
+++ b/security/nss/coreconf/coreconf.pl
@@ -0,0 +1,128 @@
+#
+# 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/.
+sub recursive_copy {
+ local($fromdir);
+ local($todir);
+ local(@dirlist);
+ $fromdir = shift;
+ $todir = shift;
+
+ print STDERR "recursive copy called with $fromdir, $todir\n";
+
+#remove any trailing slashes.
+ $fromdir =~ s/\/$//;
+ $todir =~ s/\/$//;
+
+ opendir(DIR, $fromdir);
+ @dirlist = readdir DIR;
+ close DIR;
+
+
+ foreach $file (@dirlist) {
+ if (! (($file eq "." ) || ($file eq "..") )) {
+
+ if (-d "$fromdir/$file") {
+ print STDERR "handling directory $todir/$file\n";
+ &rec_mkdir("$todir/$file");
+ &recursive_copy("$fromdir/$file","$todir/$file");
+ }
+ else {
+ print STDERR "handling file $fromdir/$file\n";
+ &my_copy("$fromdir/$file","$todir/$file");
+ }
+ }
+ }
+}
+
+sub parse_argv {
+
+# print STDERR "Parsing Variables\n";
+
+ foreach $q ( @ARGV ) {
+ if (! ($q =~ /=/)) {
+ $var{$lastassigned} .= " $q";
+ }
+ else {
+ $q =~ /^([^=]*)=(.*)/;
+ $left = $1;
+ $right = $2;
+
+ $right =~ s/ *$//;
+ $var{$left} = $right;
+
+ $lastassigned = $left;
+
+ }
+ print STDERR "Assigned $lastassigned = $var{$lastassigned}\n";
+ }
+}
+
+
+# usage: &my_copy("dir/fromfile","dir2/tofile");
+# do a 'copy' - files only, 'to' MUST be a filename, not a directory.
+
+# fix this to be able to use copy on win nt.
+
+sub my_copy {
+ local($from);
+ local($to);
+ local($cpcmd);
+
+ $from = shift;
+ $to = shift;
+
+ if ( ! defined $var{OS_ARCH}) {
+ die "OS_ARCH not defined!";
+ }
+ else {
+ if ($var{OS_ARCH} eq 'WINNT') {
+ $cpcmd = 'cp';
+ }
+ else {
+ $cpcmd = 'cp';
+ }
+ print STDERR "COPYING: $cpcmd $from $to\n";
+ system("$cpcmd $from $to");
+ }
+}
+
+
+sub old_my_copy {
+ local($from);
+ local($to);
+
+ $from = shift;
+ $to = shift;
+ open(FIN, "<$from") || die("Can't read from file $from\n");
+ if ( ! open(FOUT,">$to")) {
+ close FIN;
+ die "Can't write to file $to\n";
+ }
+ while (read(FIN, $buf, 100000)) {
+ print FOUT $buf;
+ }
+ close (FIN);
+ close (FOUT);
+}
+
+sub rec_mkdir {
+ local($arg);
+ local($t);
+ local($q);
+
+ $arg = shift;
+ $t = "";
+ foreach $q (split(/\//,$arg)) {
+ $t .= $q;
+ if (! ($t =~ /\.\.$/)) {
+ if ($t =~ /./) {
+ mkdir($t,0775);
+ }
+ }
+ $t.= '/';
+ }
+}
+
+1;
diff --git a/security/nss/coreconf/cpdist.pl b/security/nss/coreconf/cpdist.pl
new file mode 100755
index 000000000..800edfb46
--- /dev/null
+++ b/security/nss/coreconf/cpdist.pl
@@ -0,0 +1,167 @@
+#! /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");
+
+ }
+
+ }
+
diff --git a/security/nss/coreconf/detect_host_arch.py b/security/nss/coreconf/detect_host_arch.py
new file mode 100644
index 000000000..f161d3c89
--- /dev/null
+++ b/security/nss/coreconf/detect_host_arch.py
@@ -0,0 +1,25 @@
+#!/usr/bin/env python
+#
+# 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/.
+
+from __future__ import print_function
+
+import fnmatch
+import platform
+
+def main():
+ host_arch = platform.machine().lower()
+ if host_arch in ('amd64', 'x86_64'):
+ host_arch = 'x64'
+ elif fnmatch.fnmatch(host_arch, 'i?86') or host_arch == 'i86pc':
+ host_arch = 'x64'
+ elif host_arch.startswith('arm'):
+ host_arch = 'arm'
+ elif host_arch.startswith('mips'):
+ host_arch = 'mips'
+ print(host_arch)
+
+if __name__ == '__main__':
+ main()
diff --git a/security/nss/coreconf/empty.c b/security/nss/coreconf/empty.c
new file mode 100644
index 000000000..a8cf976f7
--- /dev/null
+++ b/security/nss/coreconf/empty.c
@@ -0,0 +1 @@
+/* This file is intentionally empty */
diff --git a/security/nss/coreconf/headers.mk b/security/nss/coreconf/headers.mk
new file mode 100644
index 000000000..d34c5af7d
--- /dev/null
+++ b/security/nss/coreconf/headers.mk
@@ -0,0 +1,24 @@
+#
+# 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/.
+
+#######################################################################
+# Master "Core Components" include switch for support header files #
+#######################################################################
+
+#
+# Always append source-side machine-dependent (md) and cross-platform
+# (xp) include paths
+#
+
+INCLUDES += -I$(SOURCE_MDHEADERS_DIR) -I$(SOURCE_XPHEADERS_DIR)
+
+#
+# Only append source-side private cross-platform include paths for
+# sectools
+#
+
+INCLUDES += -I$(SOURCE_XPPRIVATE_DIR)
+
+MK_HEADERS = included
diff --git a/security/nss/coreconf/import.pl b/security/nss/coreconf/import.pl
new file mode 100755
index 000000000..dd2d177f6
--- /dev/null
+++ b/security/nss/coreconf/import.pl
@@ -0,0 +1,189 @@
+#! /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);
+
+
+
+
+
diff --git a/security/nss/coreconf/jdk.mk b/security/nss/coreconf/jdk.mk
new file mode 100644
index 000000000..92eb0e6f3
--- /dev/null
+++ b/security/nss/coreconf/jdk.mk
@@ -0,0 +1,504 @@
+#
+# 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
diff --git a/security/nss/coreconf/jniregen.pl b/security/nss/coreconf/jniregen.pl
new file mode 100755
index 000000000..203918054
--- /dev/null
+++ b/security/nss/coreconf/jniregen.pl
@@ -0,0 +1,79 @@
+#!/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"
+}
diff --git a/security/nss/coreconf/location.mk b/security/nss/coreconf/location.mk
new file mode 100644
index 000000000..b11558a45
--- /dev/null
+++ b/security/nss/coreconf/location.mk
@@ -0,0 +1,78 @@
+#
+# 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/.
+
+#######################################################################
+# Master "Core Components" macros to figure out binary code location #
+#######################################################################
+
+#
+# Figure out where the binary code lives.
+#
+
+ifdef BUILD_TREE
+ifdef LIBRARY_NAME
+BUILD = $(BUILD_TREE)/nss/$(LIBRARY_NAME)
+OBJDIR = $(BUILD_TREE)/nss/$(LIBRARY_NAME)
+DEPENDENCIES = $(BUILD_TREE)/nss/$(LIBRARY_NAME)/.md
+else
+BUILD = $(BUILD_TREE)/nss
+OBJDIR = $(BUILD_TREE)/nss
+DEPENDENCIES = $(BUILD_TREE)/nss/.md
+endif
+else
+BUILD = $(PLATFORM)
+OBJDIR = $(PLATFORM)
+DEPENDENCIES = $(PLATFORM)/.md
+endif
+
+DIST = $(SOURCE_PREFIX)/$(PLATFORM)
+
+ifdef BUILD_DEBUG_GC
+ DEFINES += -DDEBUG_GC
+endif
+
+GARBAGE += $(DEPENDENCIES) core $(wildcard core.[0-9]*)
+
+ifdef NSPR_INCLUDE_DIR
+ INCLUDES += -I$(NSPR_INCLUDE_DIR)
+endif
+
+ifndef NSPR_LIB_DIR
+ NSPR_LIB_DIR = $(DIST)/lib
+endif
+
+ifdef NSS_INCLUDE_DIR
+ INCLUDES += -I$(NSS_INCLUDE_DIR)
+endif
+
+ifndef NSS_LIB_DIR
+ NSS_LIB_DIR = $(DIST)/lib
+endif
+
+ifdef NSSUTIL_INCLUDE_DIR
+ INCLUDES += -I$(NSSUTIL_INCLUDE_DIR)
+endif
+
+ifndef NSSUTIL_LIB_DIR
+ NSSUTIL_LIB_DIR = $(DIST)/lib
+endif
+
+ifdef SOFTOKEN_INCLUDE_DIR
+ INCLUDES += -I$(SOFTOKEN_INCLUDE_DIR)
+endif
+
+ifndef SOFTOKEN_LIB_DIR
+ SOFTOKEN_LIB_DIR = $(DIST)/lib
+endif
+
+ifndef SQLITE_LIB_DIR
+ SQLITE_LIB_DIR = $(DIST)/lib
+endif
+
+ifndef SQLITE_LIB_NAME
+ SQLITE_LIB_NAME = sqlite3
+endif
+
+MK_LOCATION = included
diff --git a/security/nss/coreconf/mkdepend/Makefile b/security/nss/coreconf/mkdepend/Makefile
new file mode 100644
index 000000000..4621f2ae8
--- /dev/null
+++ b/security/nss/coreconf/mkdepend/Makefile
@@ -0,0 +1,60 @@
+# 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
+
diff --git a/security/nss/coreconf/mkdepend/cppsetup.c b/security/nss/coreconf/mkdepend/cppsetup.c
new file mode 100644
index 000000000..49a746ac4
--- /dev/null
+++ b/security/nss/coreconf/mkdepend/cppsetup.c
@@ -0,0 +1,233 @@
+/* $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 */
+
diff --git a/security/nss/coreconf/mkdepend/def.h b/security/nss/coreconf/mkdepend/def.h
new file mode 100644
index 000000000..d6e5f8949
--- /dev/null
+++ b/security/nss/coreconf/mkdepend/def.h
@@ -0,0 +1,184 @@
+/* $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 *, ...);
diff --git a/security/nss/coreconf/mkdepend/ifparser.c b/security/nss/coreconf/mkdepend/ifparser.c
new file mode 100644
index 000000000..0b184c263
--- /dev/null
+++ b/security/nss/coreconf/mkdepend/ifparser.c
@@ -0,0 +1,551 @@
+/*
+ * $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);
+}
diff --git a/security/nss/coreconf/mkdepend/ifparser.h b/security/nss/coreconf/mkdepend/ifparser.h
new file mode 100644
index 000000000..89d2a2fb2
--- /dev/null
+++ b/security/nss/coreconf/mkdepend/ifparser.h
@@ -0,0 +1,83 @@
+/*
+ * $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 *
+);
+
diff --git a/security/nss/coreconf/mkdepend/imakemdep.h b/security/nss/coreconf/mkdepend/imakemdep.h
new file mode 100644
index 000000000..7321972fb
--- /dev/null
+++ b/security/nss/coreconf/mkdepend/imakemdep.h
@@ -0,0 +1,782 @@
+
+/* $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 */
diff --git a/security/nss/coreconf/mkdepend/include.c b/security/nss/coreconf/mkdepend/include.c
new file mode 100644
index 000000000..3b89f2630
--- /dev/null
+++ b/security/nss/coreconf/mkdepend/include.c
@@ -0,0 +1,337 @@
+/* $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 >= &notdotdot[ 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;
+}
diff --git a/security/nss/coreconf/mkdepend/main.c b/security/nss/coreconf/mkdepend/main.c
new file mode 100644
index 000000000..d5485f75d
--- /dev/null
+++ b/security/nss/coreconf/mkdepend/main.c
@@ -0,0 +1,870 @@
+/* $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);
+}
diff --git a/security/nss/coreconf/mkdepend/mkdepend.man b/security/nss/coreconf/mkdepend/mkdepend.man
new file mode 100644
index 000000000..595c87ed2
--- /dev/null
+++ b/security/nss/coreconf/mkdepend/mkdepend.man
@@ -0,0 +1,382 @@
+.\" $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
diff --git a/security/nss/coreconf/mkdepend/parse.c b/security/nss/coreconf/mkdepend/parse.c
new file mode 100644
index 000000000..5229d6654
--- /dev/null
+++ b/security/nss/coreconf/mkdepend/parse.c
@@ -0,0 +1,693 @@
+/* $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);
+}
diff --git a/security/nss/coreconf/mkdepend/pr.c b/security/nss/coreconf/mkdepend/pr.c
new file mode 100644
index 000000000..e864793b8
--- /dev/null
+++ b/security/nss/coreconf/mkdepend/pr.c
@@ -0,0 +1,124 @@
+/* $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);
+}
diff --git a/security/nss/coreconf/module.mk b/security/nss/coreconf/module.mk
new file mode 100644
index 000000000..5f6d2ccb8
--- /dev/null
+++ b/security/nss/coreconf/module.mk
@@ -0,0 +1,37 @@
+#
+# 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/.
+
+#######################################################################
+# The master "Core Components" source and release component directory #
+# names are ALWAYS identical and are the value of $(MODULE). #
+# NOTE: A component is also called a module or a subsystem. #
+#######################################################################
+
+#
+# All "Core Components" <component>-specific source-side tags must
+# always be identified for compiling/linking purposes
+#
+
+ifndef JAVA_SOURCE_COMPONENT
+ JAVA_SOURCE_COMPONENT = java
+endif
+
+ifndef NETLIB_SOURCE_COMPONENT
+ NETLIB_SOURCE_COMPONENT = netlib
+endif
+
+ifndef NSPR_SOURCE_COMPONENT
+ NSPR_SOURCE_COMPONENT = nspr20
+endif
+
+ifndef SECTOOLS_SOURCE_COMPONENT
+ SECTOOLS_SOURCE_COMPONENT = sectools
+endif
+
+ifndef SECURITY_SOURCE_COMPONENT
+ SECURITY_SOURCE_COMPONENT = security
+endif
+
+MK_MODULE = included
diff --git a/security/nss/coreconf/nsinstall/Makefile b/security/nss/coreconf/nsinstall/Makefile
new file mode 100644
index 000000000..1850bcb93
--- /dev/null
+++ b/security/nss/coreconf/nsinstall/Makefile
@@ -0,0 +1,42 @@
+#
+# 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 = nsinstall.c pathsub.c
+
+PROGRAM = nsinstall
+
+# Indicate that this directory builds build tools.
+INTERNAL_TOOLS = 1
+
+
+include $(DEPTH)/coreconf/config.mk
+
+ifeq (,$(filter-out OS2 WIN%,$(OS_TARGET)))
+PROGRAM =
+else
+TARGETS = $(PROGRAM)
+INSTALL = true
+endif
+
+ifdef NATIVE_CC
+CC=$(NATIVE_CC)
+endif
+
+ifdef NATIVE_FLAGS
+OS_CFLAGS=$(NATIVE_FLAGS)
+endif
+
+include $(DEPTH)/coreconf/rules.mk
+
+# Redefine MAKE_OBJDIR for just this directory
+define MAKE_OBJDIR
+if test ! -d $(@D); then rm -rf $(@D); mkdir $(@D); fi
+endef
+
diff --git a/security/nss/coreconf/nsinstall/nsinstall.c b/security/nss/coreconf/nsinstall/nsinstall.c
new file mode 100644
index 000000000..3df0ae6b0
--- /dev/null
+++ b/security/nss/coreconf/nsinstall/nsinstall.c
@@ -0,0 +1,407 @@
+/* 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/. */
+
+/*
+** Netscape portable install command.
+*/
+#include <stdio.h> /* OSF/1 requires this before grp.h, so put it first */
+#include <assert.h>
+#include <fcntl.h>
+#include <string.h>
+#if defined(_WINDOWS)
+#include <windows.h>
+typedef unsigned int mode_t;
+#else
+#include <grp.h>
+#include <pwd.h>
+#include <errno.h>
+#include <stdlib.h>
+#include <unistd.h>
+#include <utime.h>
+#endif
+#include <sys/types.h>
+#include <sys/stat.h>
+#include "pathsub.h"
+
+#define HAVE_LCHOWN
+
+#if defined(AIX) || defined(BSDI) || defined(HPUX) || defined(LINUX) || defined(SUNOS4) || defined(SCO) || defined(UNIXWARE) || defined(NTO) || defined(DARWIN) || defined(BEOS) || defined(__riscos__)
+#undef HAVE_LCHOWN
+#endif
+
+#define HAVE_FCHMOD
+
+#if defined(BEOS)
+#undef HAVE_FCHMOD
+#endif
+
+#ifdef LINUX
+#include <getopt.h>
+#endif
+
+#if defined(SCO) || defined(UNIXWARE) || defined(SNI) || defined(NCR) || defined(NEC)
+#if !defined(S_ISLNK) && defined(S_IFLNK)
+#define S_ISLNK(a) (((a) & S_IFMT) == S_IFLNK)
+#endif
+#endif
+
+#if defined(SNI)
+extern int fchmod(int fildes, mode_t mode);
+#endif
+
+
+#ifdef GETCWD_CANT_MALLOC
+/*
+ * this should probably go into a utility library in case other applications
+ * need it.
+ */
+static char *
+getcwd_do_malloc(char *path, int len) {
+
+ if (!path) {
+ path = malloc(PATH_MAX +1);
+ if (!path) return NULL;
+ }
+ return getcwd(path, PATH_MAX);
+}
+#define GETCWD getcwd_do_malloc
+#else
+#define GETCWD getcwd
+#endif
+
+
+static void
+usage(void)
+{
+ fprintf(stderr,
+ "usage: %s [-C cwd] [-L linkprefix] [-m mode] [-o owner] [-g group]\n"
+ " %*s [-DdltR] file [file ...] directory\n",
+ program, (int)strlen(program), "");
+ exit(2);
+}
+
+/* this is more-or-less equivalent to mkdir -p */
+static int
+mkdirs(char *path, mode_t mode)
+{
+ char * cp;
+ int rv;
+ struct stat sb;
+
+ if (!path || !path[0])
+ fail("Null pointer or empty string passed to mkdirs()");
+ while (*path == '/' && path[1] == '/')
+ path++;
+ for (cp = strrchr(path, '/'); cp && cp != path && *(cp - 1) == '/'; cp--);
+ if (cp && cp != path) {
+ *cp = '\0';
+ if ((stat(path, &sb) < 0 || !S_ISDIR(sb.st_mode)) &&
+ mkdirs(path, mode) < 0) {
+ return -1;
+ }
+ *cp = '/';
+ }
+ rv = mkdir(path, mode);
+ if (rv) {
+ if (errno != EEXIST)
+ fail("mkdirs cannot make %s", path);
+ fprintf(stderr, "directory creation race: %s\n", path);
+ if (!stat(path, &sb) && S_ISDIR(sb.st_mode))
+ rv = 0;
+ }
+ return rv;
+}
+
+static uid_t
+touid(char *owner)
+{
+ struct passwd *pw;
+ uid_t uid;
+ char *cp;
+
+ if (!owner || !owner[0])
+ fail("Null pointer or empty string passed to touid()");
+ pw = getpwnam(owner);
+ if (pw)
+ return pw->pw_uid;
+ uid = strtol(owner, &cp, 0);
+ if (uid == 0 && cp == owner)
+ fail("cannot find uid for %s", owner);
+ return uid;
+}
+
+static gid_t
+togid(char *group)
+{
+ struct group *gr;
+ gid_t gid;
+ char *cp;
+
+ if (!group || !group[0])
+ fail("Null pointer or empty string passed to togid()");
+ gr = getgrnam(group);
+ if (gr)
+ return gr->gr_gid;
+ gid = strtol(group, &cp, 0);
+ if (gid == 0 && cp == group)
+ fail("cannot find gid for %s", group);
+ return gid;
+}
+
+void * const uninit = (void *)0xdeadbeef;
+
+int
+main(int argc, char **argv)
+{
+ char * base = uninit;
+ char * bp = uninit;
+ char * cp = uninit;
+ char * cwd = 0;
+ char * group = 0;
+ char * linkname = 0;
+ char * linkprefix = 0;
+ char * name = uninit;
+ char * owner = 0;
+ char * todir = uninit;
+ char * toname = uninit;
+
+ int bnlen = -1;
+ int cc = 0;
+ int dodir = 0;
+ int dolink = 0;
+ int dorelsymlink = 0;
+ int dotimes = 0;
+ int exists = 0;
+ int fromfd = -1;
+ int len = -1;
+ int lplen = 0;
+ int onlydir = 0;
+ int opt = -1;
+ int tdlen = -1;
+ int tofd = -1;
+ int wc = -1;
+
+ mode_t mode = 0755;
+
+ uid_t uid = -1;
+ gid_t gid = -1;
+
+ struct stat sb;
+ struct stat tosb;
+ struct utimbuf utb;
+ char buf[BUFSIZ];
+
+ program = strrchr(argv[0], '/');
+ if (!program)
+ program = strrchr(argv[0], '\\');
+ program = program ? program+1 : argv[0];
+
+
+ while ((opt = getopt(argc, argv, "C:DdlL:Rm:o:g:t")) != EOF) {
+ switch (opt) {
+ case 'C': cwd = optarg; break;
+ case 'D': onlydir = 1; break;
+ case 'd': dodir = 1; break;
+ case 'l': dolink = 1; break;
+ case 'L':
+ linkprefix = optarg;
+ lplen = strlen(linkprefix);
+ dolink = 1;
+ break;
+ case 'R': dolink = dorelsymlink = 1; break;
+ case 'm':
+ mode = strtoul(optarg, &cp, 8);
+ if (mode == 0 && cp == optarg)
+ usage();
+ break;
+ case 'o': owner = optarg; break;
+ case 'g': group = optarg; break;
+ case 't': dotimes = 1; break;
+ default: usage();
+ }
+ }
+
+ argc -= optind;
+ argv += optind;
+ if (argc < 2 - onlydir)
+ usage();
+
+ todir = argv[argc-1];
+ if ((stat(todir, &sb) < 0 || !S_ISDIR(sb.st_mode)) &&
+ mkdirs(todir, 0777) < 0) {
+ fail("cannot mkdir -p %s", todir);
+ }
+ if (onlydir)
+ return 0;
+
+ if (!cwd) {
+ cwd = GETCWD(0, PATH_MAX);
+ if (!cwd)
+ fail("could not get CWD");
+ }
+
+ /* make sure we can get into todir. */
+ xchdir(todir);
+ todir = GETCWD(0, PATH_MAX);
+ if (!todir)
+ fail("could not get CWD in todir");
+ tdlen = strlen(todir);
+
+ /* back to original directory. */
+ xchdir(cwd);
+
+ uid = owner ? touid(owner) : -1;
+ gid = group ? togid(group) : -1;
+
+ while (--argc > 0) {
+ name = *argv++;
+ len = strlen(name);
+ base = xbasename(name);
+ bnlen = strlen(base);
+ toname = (char*)xmalloc(tdlen + 1 + bnlen + 1);
+ sprintf(toname, "%s/%s", todir, base);
+retry:
+ exists = (lstat(toname, &tosb) == 0);
+
+ if (dodir) {
+ /* -d means create a directory, always */
+ if (exists && !S_ISDIR(tosb.st_mode)) {
+ int rv = unlink(toname);
+ if (rv)
+ fail("cannot unlink %s", toname);
+ exists = 0;
+ }
+ if (!exists && mkdir(toname, mode) < 0) {
+ /* we probably have two nsinstall programs in a race here. */
+ if (errno == EEXIST && !stat(toname, &sb) &&
+ S_ISDIR(sb.st_mode)) {
+ fprintf(stderr, "directory creation race: %s\n", toname);
+ goto retry;
+ }
+ fail("cannot make directory %s", toname);
+ }
+ if ((owner || group) && chown(toname, uid, gid) < 0)
+ fail("cannot change owner of %s", toname);
+ } else if (dolink) {
+ if (*name == '/') {
+ /* source is absolute pathname, link to it directly */
+ linkname = 0;
+ } else {
+ if (linkprefix) {
+ /* -L implies -l and prefixes names with a $cwd arg. */
+ len += lplen + 1;
+ linkname = (char*)xmalloc(len + 1);
+ sprintf(linkname, "%s/%s", linkprefix, name);
+ } else if (dorelsymlink) {
+ /* Symlink the relative path from todir to source name. */
+ linkname = (char*)xmalloc(PATH_MAX);
+
+ if (*todir == '/') {
+ /* todir is absolute: skip over common prefix. */
+ lplen = relatepaths(todir, cwd, linkname);
+ strcpy(linkname + lplen, name);
+ } else {
+ /* todir is named by a relative path: reverse it. */
+ reversepath(todir, name, len, linkname);
+ xchdir(cwd);
+ }
+
+ len = strlen(linkname);
+ }
+ name = linkname;
+ }
+
+ /* Check for a pre-existing symlink with identical content. */
+ if (exists &&
+ (!S_ISLNK(tosb.st_mode) ||
+ readlink(toname, buf, sizeof buf) != len ||
+ strncmp(buf, name, len) != 0)) {
+ int rmrv;
+ rmrv = (S_ISDIR(tosb.st_mode) ? rmdir : unlink)(toname);
+ if (rmrv < 0) {
+ fail("destination exists, cannot remove %s", toname);
+ }
+ exists = 0;
+ }
+ if (!exists && symlink(name, toname) < 0) {
+ if (errno == EEXIST) {
+ fprintf(stderr, "symlink creation race: %s\n", toname);
+ fail("symlink was attempted in working directory %s "
+ "from %s to %s.\n", cwd, name, toname);
+ goto retry;
+ }
+ diagnosePath(toname);
+ fail("cannot make symbolic link %s", toname);
+ }
+#ifdef HAVE_LCHOWN
+ if ((owner || group) && lchown(toname, uid, gid) < 0)
+ fail("cannot change owner of %s", toname);
+#endif
+
+ if (linkname) {
+ free(linkname);
+ linkname = 0;
+ }
+ } else {
+ /* Copy from name to toname, which might be the same file. */
+ fromfd = open(name, O_RDONLY);
+ if (fromfd < 0 || fstat(fromfd, &sb) < 0)
+ fail("cannot access %s", name);
+ if (exists &&
+ (!S_ISREG(tosb.st_mode) || access(toname, W_OK) < 0)) {
+ int rmrv;
+ rmrv = (S_ISDIR(tosb.st_mode) ? rmdir : unlink)(toname);
+ if (rmrv < 0) {
+ fail("destination exists, cannot remove %s", toname);
+ }
+ }
+ tofd = open(toname, O_CREAT | O_WRONLY, 0666);
+ if (tofd < 0)
+ fail("cannot create %s", toname);
+
+ bp = buf;
+ while ((cc = read(fromfd, bp, sizeof buf)) > 0) {
+ while ((wc = write(tofd, bp, cc)) > 0) {
+ if ((cc -= wc) == 0)
+ break;
+ bp += wc;
+ }
+ if (wc < 0)
+ fail("cannot write to %s", toname);
+ }
+ if (cc < 0)
+ fail("cannot read from %s", name);
+
+ if (ftruncate(tofd, sb.st_size) < 0)
+ fail("cannot truncate %s", toname);
+ if (dotimes) {
+ utb.actime = sb.st_atime;
+ utb.modtime = sb.st_mtime;
+ if (utime(toname, &utb) < 0)
+ fail("cannot set times of %s", toname);
+ }
+#ifdef HAVE_FCHMOD
+ if (fchmod(tofd, mode) < 0)
+#else
+ if (chmod(toname, mode) < 0)
+#endif
+ fail("cannot change mode of %s", toname);
+
+ if ((owner || group) && fchown(tofd, uid, gid) < 0)
+ fail("cannot change owner of %s", toname);
+
+ /* Must check for delayed (NFS) write errors on close. */
+ if (close(tofd) < 0)
+ fail("close reports write error on %s", toname);
+ close(fromfd);
+ }
+
+ free(toname);
+ }
+
+ free(cwd);
+ free(todir);
+ return 0;
+}
+
diff --git a/security/nss/coreconf/nsinstall/nsinstall.gyp b/security/nss/coreconf/nsinstall/nsinstall.gyp
new file mode 100644
index 000000000..efff6bcba
--- /dev/null
+++ b/security/nss/coreconf/nsinstall/nsinstall.gyp
@@ -0,0 +1,21 @@
+# 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/.
+{
+ 'includes': [
+ '../../coreconf/config.gypi'
+ ],
+ 'targets': [
+ {
+ 'target_name': 'nsinstall',
+ 'type': 'executable',
+ 'sources': [
+ 'nsinstall.c',
+ 'pathsub.c'
+ ]
+ }
+ ],
+ 'variables': {
+ 'module': 'coreconf'
+ }
+} \ No newline at end of file
diff --git a/security/nss/coreconf/nsinstall/pathsub.c b/security/nss/coreconf/nsinstall/pathsub.c
new file mode 100644
index 000000000..a42a9f30a
--- /dev/null
+++ b/security/nss/coreconf/nsinstall/pathsub.c
@@ -0,0 +1,272 @@
+/* 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/. */
+
+/*
+** Pathname subroutines.
+*/
+#if defined(FREEBSD) || defined(BSDI) || defined(DARWIN)
+#include <sys/types.h>
+#endif /* FREEBSD */
+#include <dirent.h>
+#include <errno.h>
+#include <stdarg.h>
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+#include <unistd.h>
+#include <sys/types.h>
+#include <sys/stat.h>
+#include "pathsub.h"
+#ifdef USE_REENTRANT_LIBC
+#include "libc_r.h"
+#endif /* USE_REENTRANT_LIBC */
+
+char *program;
+
+void
+fail(char *format, ...)
+{
+ int error;
+ va_list ap;
+
+#ifdef USE_REENTRANT_LIBC
+ R_STRERROR_INIT_R();
+#endif
+
+ error = errno;
+ fprintf(stderr, "%s: ", program);
+ va_start(ap, format);
+ vfprintf(stderr, format, ap);
+ va_end(ap);
+ if (error) {
+
+#ifdef USE_REENTRANT_LIBC
+ R_STRERROR_R(errno);
+ fprintf(stderr, ": %s", r_strerror_r);
+#else
+ fprintf(stderr, ": %s", strerror(errno));
+#endif
+ }
+
+ putc('\n', stderr);
+ abort();
+ exit(1);
+}
+
+char *
+getcomponent(char *path, char *name)
+{
+ if (*path == '\0')
+ return 0;
+ if (*path == '/') {
+ *name++ = '/';
+ } else {
+ do {
+ *name++ = *path++;
+ } while (*path != '/' && *path != '\0');
+ }
+ *name = '\0';
+ while (*path == '/')
+ path++;
+ return path;
+}
+
+#ifdef UNIXWARE
+/* The static buffer in Unixware's readdir is too small. */
+struct dirent * readdir(DIR *d)
+{
+ static struct dirent *buf = NULL;
+#define MAX_PATH_LEN 1024
+
+ if (buf == NULL)
+ buf = (struct dirent *)xmalloc(sizeof(struct dirent) + MAX_PATH_LEN) ;
+ return readdir_r(d, buf);
+}
+#endif
+
+/* APPARENT BUG - ignores argument "dir", uses ".." instead. */
+char *
+ino2name(ino_t ino, char *dir)
+{
+ DIR *dp;
+ struct dirent *ep;
+ char *name;
+
+ dp = opendir(".."); /* XXX */
+ if (!dp)
+ fail("cannot read parent directory");
+ for (;;) {
+ if (!(ep = readdir(dp)))
+ fail("cannot find current directory");
+ if (ep->d_ino == ino)
+ break;
+ }
+ name = xstrdup(ep->d_name);
+ closedir(dp);
+ return name;
+}
+
+void *
+xmalloc(size_t size)
+{
+ void *p;
+
+ if (size <= 0)
+ fail("attempted to allocate %u bytes", size);
+ p = malloc(size);
+ if (!p)
+ fail("cannot allocate %u bytes", size);
+ return p;
+}
+
+char *
+xstrdup(char *s)
+{
+ if (!s || !s[0])
+ fail("Null pointer or empty string passed to xstrdup()");
+ return strcpy((char*)xmalloc(strlen(s) + 1), s);
+}
+
+char *
+xbasename(char *path)
+{
+ char *cp;
+
+ if (!path || !path[0])
+ fail("Null pointer or empty string passed to xbasename()");
+ while ((cp = strrchr(path, '/')) && cp[1] == '\0')
+ *cp = '\0';
+ if (!cp) return path;
+ return cp + 1;
+}
+
+void
+xchdir(char *dir)
+{
+ if (!dir || !dir[0])
+ fail("Null pointer or empty string passed to xchdir()");
+ if (chdir(dir) < 0)
+ fail("cannot change directory to %s", dir);
+}
+
+int
+relatepaths(char *from, char *to, char *outpath)
+{
+ char *cp, *cp2;
+ int len;
+ char buf[NAME_MAX];
+
+ if (!from || *from != '/')
+ fail("relatepaths: from path does not start with /");
+ if (!to || *to != '/')
+ fail("relatepaths: to path does not start with /");
+
+ for (cp = to, cp2 = from; *cp == *cp2; cp++, cp2++)
+ if (*cp == '\0')
+ break;
+ while (cp[-1] != '/')
+ cp--, cp2--;
+ if (cp - 1 == to) {
+ /* closest common ancestor is /, so use full pathname */
+ len = strlen(strcpy(outpath, to));
+ if (outpath[len] != '/') {
+ outpath[len++] = '/';
+ outpath[len] = '\0';
+ }
+ } else {
+ len = 0;
+ while ((cp2 = getcomponent(cp2, buf)) != 0) {
+ strcpy(outpath + len, "../");
+ len += 3;
+ }
+ while ((cp = getcomponent(cp, buf)) != 0) {
+ sprintf(outpath + len, "%s/", buf);
+ len += strlen(outpath + len);
+ }
+ }
+ return len;
+}
+
+void
+reversepath(char *inpath, char *name, int len, char *outpath)
+{
+ char *cp, *cp2;
+ char buf[NAME_MAX];
+ struct stat sb;
+
+ cp = strcpy(outpath + PATH_MAX - (len + 1), name);
+ cp2 = inpath;
+ while ((cp2 = getcomponent(cp2, buf)) != 0) {
+ if (strcmp(buf, ".") == 0)
+ continue;
+ if (strcmp(buf, "..") == 0) {
+ if (stat(".", &sb) < 0)
+ fail("cannot stat current directory");
+ name = ino2name(sb.st_ino, "..");
+ len = strlen(name);
+ cp -= len + 1;
+ strcpy(cp, name);
+ cp[len] = '/';
+ free(name);
+ xchdir("..");
+ } else {
+ cp -= 3;
+ strncpy(cp, "../", 3);
+ xchdir(buf);
+ }
+ }
+ strcpy(outpath, cp);
+}
+
+void
+diagnosePath(const char * path)
+{
+ char * myPath;
+ char * slash;
+ int rv;
+ struct stat sb;
+ char buf[BUFSIZ];
+
+ if (!path || !path[0])
+ fail("Null pointer or empty string passed to mkdirs()");
+ myPath = strdup(path);
+ if (!myPath)
+ fail("strdup() failed!");
+ do {
+ rv = lstat(myPath, &sb);
+ if (rv < 0) {
+ perror(myPath);
+ } else if (S_ISLNK(sb.st_mode)) {
+ rv = readlink(myPath, buf, sizeof(buf) - 1);
+ if (rv < 0) {
+ perror("readlink");
+ buf[0] = 0;
+ } else {
+ buf[rv] = 0;
+ }
+ fprintf(stderr, "%s is a link to %s\n", myPath, buf);
+ } else if (S_ISDIR(sb.st_mode)) {
+ fprintf(stderr, "%s is a directory\n", myPath);
+ rv = access(myPath, X_OK);
+ if (rv < 0) {
+ fprintf(stderr, "%s: no search permission\n", myPath);
+ }
+ } else {
+ fprintf(stderr, "%s is a file !?!\n", myPath);
+ rv = access(myPath, F_OK);
+ if (rv < 0) {
+ fprintf(stderr, "%s does not exist\n", myPath);
+ }
+ }
+
+ /* chop path off one level. */
+ slash = strrchr(myPath, '/');
+ if (!slash)
+ slash = strrchr(myPath, '\\');
+ if (!slash)
+ slash = myPath;
+ *slash = 0;
+ } while (myPath[0]);
+ free(myPath);
+}
diff --git a/security/nss/coreconf/nsinstall/pathsub.h b/security/nss/coreconf/nsinstall/pathsub.h
new file mode 100644
index 000000000..aea523b16
--- /dev/null
+++ b/security/nss/coreconf/nsinstall/pathsub.h
@@ -0,0 +1,48 @@
+/* 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/. */
+
+#ifndef pathsub_h___
+#define pathsub_h___
+/*
+** Pathname subroutines.
+**
+** Brendan Eich, 8/29/95
+*/
+#include <limits.h>
+#include <sys/types.h>
+
+#if SUNOS4
+#include "sunos4.h"
+#endif
+
+#ifndef PATH_MAX
+#define PATH_MAX 1024
+#endif
+
+/*
+ * Just keep sane lengths
+ */
+#undef NAME_MAX
+#define NAME_MAX 256
+
+extern char *program;
+
+extern void fail(char *format, ...);
+extern char *getcomponent(char *path, char *name);
+extern char *ino2name(ino_t ino, char *dir);
+extern void *xmalloc(size_t size);
+extern char *xstrdup(char *s);
+extern char *xbasename(char *path);
+extern void xchdir(char *dir);
+
+/* Relate absolute pathnames from and to returning the result in outpath. */
+extern int relatepaths(char *from, char *to, char *outpath);
+
+/* NOTE: changes current working directory -- caveat emptor */
+extern void reversepath(char *inpath, char *name, int len, char *outpath);
+
+/* stats every directory in path, reports results. */
+extern void diagnosePath(const char * path);
+
+#endif /* pathsub_h___ */
diff --git a/security/nss/coreconf/nsinstall/sunos4.h b/security/nss/coreconf/nsinstall/sunos4.h
new file mode 100644
index 000000000..3ba064f98
--- /dev/null
+++ b/security/nss/coreconf/nsinstall/sunos4.h
@@ -0,0 +1,134 @@
+/* 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/. */
+
+#ifndef pr_sunos4_h___
+#define pr_sunos4_h___
+
+#ifndef SVR4
+
+/*
+** Hodge podge of random missing prototypes for the Sunos4 system
+*/
+#include <stdio.h>
+#include <stdarg.h>
+#include <time.h>
+#include <limits.h>
+#include <sys/types.h>
+
+#define PATH_MAX _POSIX_PATH_MAX
+
+struct timeval;
+struct timezone;
+struct itimerval;
+struct sockaddr;
+struct stat;
+struct tm;
+
+/* ctype.h */
+extern int tolower(int);
+extern int toupper(int);
+
+/* errno.h */
+extern char *sys_errlist[];
+extern int sys_nerr;
+
+#define strerror(e) sys_errlist[((unsigned)(e) < sys_nerr) ? e : 0]
+
+extern void perror(const char *);
+
+/* getopt */
+extern char *optarg;
+extern int optind;
+extern int getopt(int argc, char **argv, char *spec);
+
+/* math.h */
+extern int srandom(long val);
+extern long random(void);
+
+/* memory.h */
+#define memmove(to,from,len) bcopy((char*)(from),(char*)(to),len)
+
+extern void bcopy(const char *, char *, int);
+
+/* signal.h */
+/*
+** SunOS4 sigaction hides interrupts by default, so we can safely define
+** SA_RESTART to 0 (HP-UX is a counter-example -- its sigaction does not
+** hide interrupts but lacks an SA_RESTART option; you must use sigvector
+** and tweak the sigcontext from within each signal handler!).
+*/
+#define SA_RESTART 0
+#define SA_SIGINFO 0
+
+/* stdio.h */
+extern int printf(const char *, ...);
+extern int fprintf(FILE *, const char *, ...);
+extern int vprintf(const char *, va_list);
+extern int vfprintf(FILE *, const char *, va_list);
+extern char *vsprintf(char *, const char *, va_list);
+extern int scanf(const char *, ...);
+extern int sscanf(const char *, const char *, ...);
+extern int fscanf(FILE *, const char *, ...);
+extern int fgetc(FILE *);
+extern int fputc(int, FILE *);
+extern int fputs(const char *, FILE *);
+extern int puts(const char *);
+extern int fread(void *, size_t, size_t, FILE *);
+extern int fwrite(const char *, int, int, FILE *);
+extern int fseek(FILE *, long, int);
+extern long ftell(FILE *);
+extern int rewind(FILE *);
+extern int fflush(FILE *);
+extern int _flsbuf(unsigned char, FILE *);
+extern int fclose(FILE *);
+extern int remove(const char *);
+extern int setvbuf(FILE *, char *, int, size_t);
+extern int system(const char *);
+extern FILE *popen(const char *, const char *);
+extern int pclose(FILE *);
+
+/* stdlib.h */
+#define strtoul strtol
+
+extern int isatty(int fildes);
+extern long strtol(const char *, char **, int);
+extern int putenv(const char *);
+extern void srand48(long);
+extern long lrand48(void);
+extern double drand48(void);
+
+/* string.h */
+extern int strcasecmp(const char *, const char *);
+extern int strncasecmp(const char *, const char *, size_t);
+extern int strcoll(const char *, const char *);
+
+/* time.h */
+extern time_t mktime(struct tm *);
+extern size_t strftime(char *, size_t, const char *, const struct tm *);
+extern int gettimeofday(struct timeval *, struct timezone *);
+extern int setitimer(int, struct itimerval *, struct itimerval *);
+extern time_t time(time_t *);
+extern time_t timegm(struct tm *);
+extern struct tm *localtime(const time_t *);
+extern struct tm *gmtime(const time_t *);
+
+/* unistd.h */
+extern int rename(const char *, const char *);
+extern int ioctl(int, int, int *arg);
+extern int connect(int, struct sockaddr *, int);
+extern int readlink(const char *, char *, int);
+extern int symlink(const char *, const char *);
+extern int ftruncate(int, off_t);
+extern int fchmod(int, mode_t);
+extern int fchown(int, uid_t, gid_t);
+extern int lstat(const char *, struct stat *);
+extern int fstat(int, struct stat *);
+extern int select(int, fd_set *, fd_set *, fd_set *, struct timeval *);
+extern int gethostname(char *, int);
+extern char *getwd(char *);
+extern int getpagesize(void);
+
+#endif /* SVR4 */
+
+#endif /* pr_sunos4_h___ */
diff --git a/security/nss/coreconf/nspr.sh b/security/nss/coreconf/nspr.sh
new file mode 100644
index 000000000..ff5e38363
--- /dev/null
+++ b/security/nss/coreconf/nspr.sh
@@ -0,0 +1,48 @@
+#!/bin/bash
+# This script builds NSPR for NSS.
+#
+# This build system is still under development. It does not yet support all
+# the features or platforms that the regular NSPR build supports.
+
+# variables
+nspr_opt=()
+nspr_cflags=
+nspr_cxxflags=
+nspr_ldflags=
+
+nspr_sanitizer()
+{
+ nspr_cflags="$nspr_cflags $(python $cwd/coreconf/sanitizers.py $1 $2)"
+ nspr_cxxflags="$nspr_cxxflags $(python $cwd/coreconf/sanitizers.py $1 $2)"
+ nspr_ldflags="$nspr_ldflags $(python $cwd/coreconf/sanitizers.py $1 $2)"
+}
+
+verbose()
+{
+ CFLAGS=$nspr_cflags CXXFLAGS=$nspr_cxxflags LDFLAGS=$nspr_ldflags \
+ CC=$CC CXX=$CCC ../configure "${nspr_opt[@]}" --prefix="$obj_dir"
+ make -C "$cwd/../nspr/$target"
+ make -C "$cwd/../nspr/$target" install
+}
+
+silent()
+{
+ echo "[1/3] configure NSPR ..."
+ CFLAGS=$nspr_cflags CXXFLAGS=$nspr_cxxflags LDFLAGS=$nspr_ldflags \
+ CC=$CC CXX=$CCC ../configure "${nspr_opt[@]}" --prefix="$obj_dir" 1> /dev/null
+ echo "[2/3] make NSPR ..."
+ make -C "$cwd/../nspr/$target" 1> /dev/null
+ echo "[3/3] install NSPR ..."
+ make -C "$cwd/../nspr/$target" install 1> /dev/null
+}
+
+build_nspr()
+{
+ mkdir -p "$cwd/../nspr/$target"
+ cd "$cwd/../nspr/$target"
+ if [ "$1" == 1 ]; then
+ verbose
+ else
+ silent
+ fi
+}
diff --git a/security/nss/coreconf/outofdate.pl b/security/nss/coreconf/outofdate.pl
new file mode 100755
index 000000000..33d80bb33
--- /dev/null
+++ b/security/nss/coreconf/outofdate.pl
@@ -0,0 +1,39 @@
+#!/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";
diff --git a/security/nss/coreconf/prefix.mk b/security/nss/coreconf/prefix.mk
new file mode 100644
index 000000000..57e11e501
--- /dev/null
+++ b/security/nss/coreconf/prefix.mk
@@ -0,0 +1,44 @@
+#
+# 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/.
+
+#######################################################################
+# Master "Core Components" for computing program prefixes #
+#######################################################################
+
+#
+# Object prefixes
+#
+
+ifndef OBJ_PREFIX
+ OBJ_PREFIX =
+endif
+
+#
+# Library suffixes
+#
+
+ifndef LIB_PREFIX
+ LIB_PREFIX = lib
+endif
+
+
+ifndef DLL_PREFIX
+ DLL_PREFIX = lib
+endif
+
+
+ifndef IMPORT_LIB_PREFIX
+ IMPORT_LIB_PREFIX =
+endif
+
+#
+# Program prefixes
+#
+
+ifndef PROG_PREFIX
+ PROG_PREFIX =
+endif
+
+MK_PREFIX = included
diff --git a/security/nss/coreconf/release.pl b/security/nss/coreconf/release.pl
new file mode 100755
index 000000000..7cde19d5e
--- /dev/null
+++ b/security/nss/coreconf/release.pl
@@ -0,0 +1,112 @@
+#! /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";
+ }
+
+}
+
diff --git a/security/nss/coreconf/rules.mk b/security/nss/coreconf/rules.mk
new file mode 100644
index 000000000..3a8013529
--- /dev/null
+++ b/security/nss/coreconf/rules.mk
@@ -0,0 +1,970 @@
+#
+# 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/.
+
+#######################################################################
+### ###
+### R U L E S O F E N G A G E M E N T ###
+### ###
+#######################################################################
+
+#######################################################################
+# Double-Colon rules for utilizing the binary release model. #
+#######################################################################
+
+all:: export libs
+
+ifeq ($(AUTOCLEAN),1)
+autobuild:: clean export private_export libs program install
+else
+autobuild:: export private_export libs program install
+endif
+
+platform::
+ @echo $(OBJDIR_NAME)
+
+ifeq (,$(filter-out _WIN%,$(NS_USE_GCC)_$(OS_TARGET)))
+USE_NT_C_SYNTAX=1
+endif
+
+#
+# IMPORTS will always be associated with a component. Therefore,
+# the "import" rule will always change directory to the top-level
+# of a component, and traverse the IMPORTS keyword from the
+# "manifest.mn" file located at this level only.
+#
+# note: if there is a trailing slash, the component will be appended
+# (see import.pl - only used for xpheader.jar)
+
+import::
+ @echo "== import.pl =="
+ @$(PERL) -I$(CORE_DEPTH)/coreconf $(CORE_DEPTH)/coreconf/import.pl \
+ "RELEASE_TREE=$(RELEASE_TREE)" \
+ "IMPORTS=$(IMPORTS)" \
+ "VERSION=$(VERSION)" \
+ "OS_ARCH=$(OS_ARCH)" \
+ "PLATFORM=$(PLATFORM)" \
+ "OVERRIDE_IMPORT_CHECK=$(OVERRIDE_IMPORT_CHECK)" \
+ "ALLOW_VERSION_OVERRIDE=$(ALLOW_VERSION_OVERRIDE)" \
+ "SOURCE_RELEASE_PREFIX=$(SOURCE_RELEASE_XP_DIR)" \
+ "SOURCE_MD_DIR=$(SOURCE_MD_DIR)" \
+ "SOURCE_XP_DIR=$(SOURCE_XP_DIR)" \
+ "FILES=$(IMPORT_XPCLASS_JAR) $(XPHEADER_JAR) $(MDHEADER_JAR) $(MDBINARY_JAR)" \
+ "$(IMPORT_XPCLASS_JAR)=$(IMPORT_XP_DIR)|$(IMPORT_XPCLASS_DIR)|" \
+ "$(XPHEADER_JAR)=$(IMPORT_XP_DIR)|$(SOURCE_XP_DIR)/public/|v" \
+ "$(MDHEADER_JAR)=$(IMPORT_MD_DIR)|$(SOURCE_MD_DIR)/include|" \
+ "$(MDBINARY_JAR)=$(IMPORT_MD_DIR)|$(SOURCE_MD_DIR)|"
+# On Mac OS X ranlib needs to be rerun after static libs are moved.
+ifeq ($(OS_TARGET),Darwin)
+ find $(SOURCE_MD_DIR)/lib -name "*.a" -exec $(RANLIB) {} \;
+endif
+
+export::
+ +$(LOOP_OVER_DIRS)
+
+private_export::
+ +$(LOOP_OVER_DIRS)
+
+release_export::
+ +$(LOOP_OVER_DIRS)
+
+release_classes::
+ +$(LOOP_OVER_DIRS)
+
+libs program install:: $(TARGETS)
+ifdef LIBRARY
+ $(INSTALL) -m 664 $(LIBRARY) $(SOURCE_LIB_DIR)
+endif
+ifdef SHARED_LIBRARY
+ $(INSTALL) -m 775 $(SHARED_LIBRARY) $(SOURCE_LIB_DIR)
+ifdef MOZ_DEBUG_SYMBOLS
+ifeq (,$(filter-out _WIN%,$(NS_USE_GCC)_$(OS_TARGET)))
+ $(INSTALL) -m 644 $(SHARED_LIBRARY:$(DLL_SUFFIX)=pdb) $(SOURCE_LIB_DIR)
+endif
+endif
+endif
+ifdef IMPORT_LIBRARY
+ $(INSTALL) -m 775 $(IMPORT_LIBRARY) $(SOURCE_LIB_DIR)
+endif
+ifdef PROGRAM
+ $(INSTALL) -m 775 $(PROGRAM) $(SOURCE_BIN_DIR)
+ifdef MOZ_DEBUG_SYMBOLS
+ifeq (,$(filter-out _WIN%,$(NS_USE_GCC)_$(OS_TARGET)))
+ $(INSTALL) -m 644 $(PROGRAM:$(PROG_SUFFIX)=.pdb) $(SOURCE_BIN_DIR)
+endif
+endif
+endif
+ifdef PROGRAMS
+ $(INSTALL) -m 775 $(PROGRAMS) $(SOURCE_BIN_DIR)
+endif
+ +$(LOOP_OVER_DIRS)
+
+tests::
+ +$(LOOP_OVER_DIRS)
+
+clean clobber::
+ rm -rf $(ALL_TRASH)
+ +$(LOOP_OVER_DIRS)
+
+realclean clobber_all::
+ rm -rf $(wildcard *.OBJ) dist $(ALL_TRASH)
+ +$(LOOP_OVER_DIRS)
+
+#######################################################################
+# Double-Colon rules for populating the binary release model. #
+#######################################################################
+
+
+release_clean::
+ rm -rf $(SOURCE_XP_DIR)/release/$(RELEASE_MD_DIR)
+
+release:: release_clean release_export release_classes release_policy release_md release_jars release_cpdistdir
+
+release_cpdistdir::
+ @echo "== cpdist.pl =="
+ @$(PERL) -I$(CORE_DEPTH)/coreconf $(CORE_DEPTH)/coreconf/cpdist.pl \
+ "RELEASE_TREE=$(RELEASE_TREE)" \
+ "CORE_DEPTH=$(CORE_DEPTH)" \
+ "MODULE=${MODULE}" \
+ "OS_ARCH=$(OS_ARCH)" \
+ "RELEASE=$(RELEASE)" \
+ "PLATFORM=$(PLATFORM)" \
+ "RELEASE_VERSION=$(RELEASE_VERSION)" \
+ "SOURCE_RELEASE_PREFIX=$(SOURCE_RELEASE_XP_DIR)" \
+ "RELEASE_XP_DIR=$(RELEASE_XP_DIR)" \
+ "RELEASE_MD_DIR=$(RELEASE_MD_DIR)" \
+ "FILES=$(XPCLASS_JAR) $(XPCLASS_DBG_JAR) $(XPHEADER_JAR) $(MDHEADER_JAR) $(MDBINARY_JAR) XP_FILES MD_FILES" \
+ "$(XPCLASS_JAR)=$(SOURCE_RELEASE_CLASSES_DIR)|x"\
+ "$(XPCLASS_DBG_JAR)=$(SOURCE_RELEASE_CLASSES_DBG_DIR)|x"\
+ "$(XPHEADER_JAR)=$(SOURCE_RELEASE_XPHEADERS_DIR)|x" \
+ "$(MDHEADER_JAR)=$(SOURCE_RELEASE_MDHEADERS_DIR)|m" \
+ "$(MDBINARY_JAR)=$(SOURCE_RELEASE_MD_DIR)|m" \
+ "XP_FILES=$(XP_FILES)|xf" \
+ "MD_FILES=$(MD_FILES)|mf"
+
+
+# $(SOURCE_RELEASE_xxx_JAR) is a name like yyy.jar
+# $(SOURCE_RELEASE_xx_DIR) is a name like
+
+release_jars::
+ @echo "== release.pl =="
+ @$(PERL) -I$(CORE_DEPTH)/coreconf $(CORE_DEPTH)/coreconf/release.pl \
+ "RELEASE_TREE=$(RELEASE_TREE)" \
+ "PLATFORM=$(PLATFORM)" \
+ "OS_ARCH=$(OS_ARCH)" \
+ "RELEASE_VERSION=$(RELEASE_VERSION)" \
+ "SOURCE_RELEASE_DIR=$(SOURCE_RELEASE_DIR)" \
+ "FILES=$(XPCLASS_JAR) $(XPCLASS_DBG_JAR) $(XPHEADER_JAR) $(MDHEADER_JAR) $(MDBINARY_JAR)" \
+ "$(XPCLASS_JAR)=$(SOURCE_RELEASE_PREFIX)/$(SOURCE_RELEASE_CLASSES_DIR)|b"\
+ "$(XPCLASS_DBG_JAR)=$(SOURCE_RELEASE_PREFIX)/$(SOURCE_RELEASE_CLASSES_DBG_DIR)|b"\
+ "$(XPHEADER_JAR)=$(SOURCE_RELEASE_PREFIX)/$(SOURCE_RELEASE_XPHEADERS_DIR)|a" \
+ "$(MDHEADER_JAR)=$(SOURCE_RELEASE_PREFIX)/$(SOURCE_RELEASE_MDHEADERS_DIR)|a" \
+ "$(MDBINARY_JAR)=$(SOURCE_RELEASE_PREFIX)/$(SOURCE_RELEASE_MD_DIR)|bi"
+
+# Rules for releasing classes.
+# We have to do some REALLY gross stuff to deal with multiple classes in one
+# file, as well as nested classes, which have a filename of the form
+# ContainingClass$NestedClass.class.
+# RELEASE_CLASSES simply performs a required patsubst on CLASSES
+# RELEASE_CLASS_PATH is RELEASE_CLASSES with the path (in ns/dist) prepended
+# RELEASE_NESTED is all the nested classes in RELEASE_CLASS_PATH. We use a
+# foreach and wildcard to get all the files that start out like one of the
+# class files, then have a $. So, for each class file, we look for file$*
+# RELEASE_FILES is the combination of RELEASE_NESTED and the class files
+# specified by RELEASE_CLASSES which have .class appended to them. Note that
+# the RELEASE_NESTED don't need to have .class appended because they were
+# read in from the wildcard as complete filenames.
+#
+# The _DBG versions are the debuggable ones.
+ifneq ($(CLASSES),)
+
+RELEASE_CLASSES := $(patsubst %,%,$(CLASSES))
+
+ifdef BUILD_OPT
+ RELEASE_CLASS_PATH := $(patsubst %,$(SOURCE_CLASSES_DIR)/$(PACKAGE)/%, $(RELEASE_CLASSES))
+ RELEASE_NESTED := $(foreach file,$(RELEASE_CLASS_PATH),$(wildcard $(file)$$*))
+ RELEASE_FILES := $(patsubst %,%.class,$(RELEASE_CLASS_PATH)) $(RELEASE_NESTED)
+else
+ RELEASE_DBG_CLASS_PATH:= $(patsubst %,$(SOURCE_CLASSES_DBG_DIR)/$(PACKAGE)/%, $(RELEASE_CLASSES))
+ RELEASE_DBG_NESTED := $(foreach file,$(RELEASE_DBG_CLASS_PATH),$(wildcard $(file)$$*))
+ RELEASE_DBG_FILES := $(patsubst %,%.class,$(RELEASE_DBG_CLASS_PATH)) $(RELEASE_DBG_NESTED)
+endif
+
+# Substitute \$ for $ so the shell doesn't choke
+ifdef BUILD_OPT
+release_classes::
+ $(INSTALL) -m 444 $(subst $$,\$$,$(RELEASE_FILES)) $(SOURCE_RELEASE_PREFIX)/$(SOURCE_RELEASE_CLASSES_DIR)/$(PACKAGE)
+else
+release_classes::
+ $(INSTALL) -m 444 $(subst $$,\$$,$(RELEASE_DBG_FILES)) $(SOURCE_RELEASE_PREFIX)/$(SOURCE_RELEASE_CLASSES_DBG_DIR)/$(PACKAGE)
+endif
+
+endif
+
+release_policy::
+ +$(LOOP_OVER_DIRS)
+
+ifndef NO_MD_RELEASE
+ ifdef LIBRARY
+ MD_LIB_RELEASE_FILES += $(LIBRARY)
+ endif
+ ifdef SHARED_LIBRARY
+ MD_LIB_RELEASE_FILES += $(SHARED_LIBRARY)
+ endif
+ ifdef IMPORT_LIBRARY
+ MD_LIB_RELEASE_FILES += $(IMPORT_LIBRARY)
+ endif
+ ifdef PROGRAM
+ MD_BIN_RELEASE_FILES += $(PROGRAM)
+ endif
+ ifdef PROGRAMS
+ MD_BIN_RELEASE_FILES += $(PROGRAMS)
+ endif
+endif
+
+release_md::
+ifneq ($(MD_LIB_RELEASE_FILES),)
+ $(INSTALL) -m 444 $(MD_LIB_RELEASE_FILES) $(SOURCE_RELEASE_PREFIX)/$(SOURCE_RELEASE_LIB_DIR)
+endif
+ifneq ($(MD_BIN_RELEASE_FILES),)
+ $(INSTALL) -m 555 $(MD_BIN_RELEASE_FILES) $(SOURCE_RELEASE_PREFIX)/$(SOURCE_RELEASE_BIN_DIR)
+endif
+ +$(LOOP_OVER_DIRS)
+
+
+alltags:
+ rm -f TAGS
+ find . -name dist -prune -o \( -name '*.[hc]' -o -name '*.cp' -o -name '*.cpp' \) -print | xargs etags -a
+ find . -name dist -prune -o \( -name '*.[hc]' -o -name '*.cp' -o -name '*.cpp' \) -print | xargs ctags -a
+
+$(PROGRAM): $(OBJS) $(EXTRA_LIBS)
+ @$(MAKE_OBJDIR)
+ifeq (,$(filter-out _WIN%,$(NS_USE_GCC)_$(OS_TARGET)))
+ $(MKPROG) $(subst /,\\,$(OBJS)) -Fe$@ -link $(LDFLAGS) $(XLDFLAGS) $(subst /,\\,$(EXTRA_LIBS) $(EXTRA_SHARED_LIBS) $(OS_LIBS))
+ifdef MT
+ if test -f $@.manifest; then \
+ $(MT) -NOLOGO -MANIFEST $@.manifest -OUTPUTRESOURCE:$@\;1; \
+ rm -f $@.manifest; \
+ fi
+endif # MSVC with manifest tool
+else
+ $(MKPROG) -o $@ $(CFLAGS) $(OBJS) $(LDFLAGS) $(EXTRA_LIBS) $(EXTRA_SHARED_LIBS) $(OS_LIBS)
+endif
+
+get_objs:
+ @echo $(OBJS)
+
+$(LIBRARY): $(OBJS)
+ @$(MAKE_OBJDIR)
+ rm -f $@
+ifeq (,$(filter-out _WIN%,$(NS_USE_GCC)_$(OS_TARGET)))
+ $(AR) $(subst /,\\,$(OBJS))
+else
+ $(AR) $(OBJS)
+endif
+ $(RANLIB) $@
+
+
+ifeq ($(OS_TARGET),OS2)
+$(IMPORT_LIBRARY): $(MAPFILE)
+ rm -f $@
+ $(IMPLIB) $@ $<
+ $(RANLIB) $@
+endif
+ifeq ($(OS_ARCH),WINNT)
+$(IMPORT_LIBRARY): $(LIBRARY)
+ cp -f $< $@
+endif
+
+ifdef SHARED_LIBRARY_LIBS
+ifdef BUILD_TREE
+SUB_SHLOBJS = $(foreach dir,$(SHARED_LIBRARY_DIRS),$(shell $(MAKE) -C $(dir) --no-print-directory get_objs))
+else
+SUB_SHLOBJS = $(foreach dir,$(SHARED_LIBRARY_DIRS),$(addprefix $(dir)/,$(shell $(MAKE) -C $(dir) --no-print-directory get_objs)))
+endif
+endif
+
+$(SHARED_LIBRARY): $(OBJS) $(RES) $(MAPFILE) $(SUB_SHLOBJS)
+ @$(MAKE_OBJDIR)
+ rm -f $@
+ifeq ($(OS_TARGET)$(OS_RELEASE), AIX4.1)
+ echo "#!" > $(OBJDIR)/lib$(LIBRARY_NAME)_syms
+ nm -B -C -g $(OBJS) \
+ | awk '/ [T,D] / {print $$3}' \
+ | sed -e 's/^\.//' \
+ | sort -u >> $(OBJDIR)/lib$(LIBRARY_NAME)_syms
+ $(LD) $(XCFLAGS) -o $@ $(OBJS) -bE:$(OBJDIR)/lib$(LIBRARY_NAME)_syms \
+ -bM:SRE -bnoentry $(OS_LIBS) $(EXTRA_LIBS) $(EXTRA_SHARED_LIBS)
+else
+ifeq (,$(filter-out WIN%,$(OS_TARGET)))
+ifdef NS_USE_GCC
+ $(LINK_DLL) $(OBJS) $(SUB_SHLOBJS) $(EXTRA_LIBS) $(EXTRA_SHARED_LIBS) $(OS_LIBS) $(LD_LIBS) $(RES)
+else
+ $(LINK_DLL) -MAP $(DLLBASE) $(subst /,\\,$(OBJS) $(SUB_SHLOBJS) $(EXTRA_LIBS) $(EXTRA_SHARED_LIBS) $(OS_LIBS) $(LD_LIBS) $(RES))
+ifdef MT
+ if test -f $@.manifest; then \
+ $(MT) -NOLOGO -MANIFEST $@.manifest -OUTPUTRESOURCE:$@\;2; \
+ rm -f $@.manifest; \
+ fi
+endif # MSVC with manifest tool
+endif
+else
+ $(MKSHLIB) -o $@ $(OBJS) $(SUB_SHLOBJS) $(LD_LIBS) $(EXTRA_LIBS) $(EXTRA_SHARED_LIBS) $(OS_LIBS)
+ chmod +x $@
+endif
+endif
+
+ifeq (,$(filter-out WIN%,$(OS_TARGET)))
+$(RES): $(RESNAME)
+ @$(MAKE_OBJDIR)
+# The resource compiler does not understand the -U option.
+ifdef NS_USE_GCC
+ $(RC) $(filter-out -U%,$(DEFINES)) $(INCLUDES:-I%=--include-dir %) -o $@ $<
+else
+ $(RC) $(filter-out -U%,$(DEFINES)) $(INCLUDES) -Fo$@ $<
+endif
+ @echo $(RES) finished
+endif
+
+$(MAPFILE): $(MAPFILE_SOURCE)
+ @$(MAKE_OBJDIR)
+ $(PROCESS_MAP_FILE)
+
+
+$(OBJDIR)/$(PROG_PREFIX)%$(PROG_SUFFIX): $(OBJDIR)/$(PROG_PREFIX)%$(OBJ_SUFFIX)
+ @$(MAKE_OBJDIR)
+ifeq (,$(filter-out _WIN%,$(NS_USE_GCC)_$(OS_TARGET)))
+ $(MKPROG) $< -Fe$@ -link \
+ $(LDFLAGS) $(XLDFLAGS) $(EXTRA_LIBS) $(EXTRA_SHARED_LIBS) $(OS_LIBS)
+ifdef MT
+ if test -f $@.manifest; then \
+ $(MT) -NOLOGO -MANIFEST $@.manifest -OUTPUTRESOURCE:$@\;1; \
+ rm -f $@.manifest; \
+ fi
+endif # MSVC with manifest tool
+else
+ $(MKPROG) -o $@ $(CFLAGS) $< \
+ $(LDFLAGS) $(EXTRA_LIBS) $(EXTRA_SHARED_LIBS) $(OS_LIBS)
+endif
+
+WCCFLAGS1 := $(subst /,\\,$(CFLAGS))
+WCCFLAGS2 := $(subst -I,-i=,$(WCCFLAGS1))
+WCCFLAGS3 := $(subst -D,-d,$(WCCFLAGS2))
+
+# Translate source filenames to absolute paths. This is required for
+# debuggers under Windows & OS/2 to find source files automatically
+
+ifeq (,$(filter-out OS2 AIX,$(OS_TARGET)))
+# OS/2 and AIX
+NEED_ABSOLUTE_PATH := 1
+PWD := $(shell pwd)
+
+else
+# Windows
+ifeq (,$(filter-out _WIN%,$(NS_USE_GCC)_$(OS_TARGET)))
+NEED_ABSOLUTE_PATH := 1
+# CURDIR is always an absolute path. If it doesn't start with a /, it's a
+# Windows path meaning we're running under MINGW make (as opposed to MSYS
+# make), or pymake. In both cases, it's preferable to use a Windows path,
+# so use $(CURDIR) as is.
+ifeq (,$(filter /%,$(CURDIR)))
+PWD := $(CURDIR)
+else
+PWD := $(shell pwd)
+ifeq (,$(findstring ;,$(PATH)))
+ifndef USE_MSYS
+PWD := $(subst \,/,$(shell cygpath -w $(PWD)))
+endif
+endif
+endif
+
+else
+# everything else
+PWD := $(shell pwd)
+endif
+endif
+
+# The quotes allow absolute paths to contain spaces.
+core_abspath = '$(if $(findstring :,$(1)),$(1),$(if $(filter /%,$(1)),$(1),$(PWD)/$(1)))'
+
+$(OBJDIR)/$(PROG_PREFIX)%$(OBJ_SUFFIX): %.c
+ @$(MAKE_OBJDIR)
+ifdef USE_NT_C_SYNTAX
+ $(CC) -Fo$@ -c $(CFLAGS) $(call core_abspath,$<)
+else
+ifdef NEED_ABSOLUTE_PATH
+ $(CC) -o $@ -c $(CFLAGS) $(call core_abspath,$<)
+else
+ $(CC) -o $@ -c $(CFLAGS) $<
+endif
+endif
+
+$(PROG_PREFIX)%$(OBJ_SUFFIX): %.c
+ifdef USE_NT_C_SYNTAX
+ $(CC) -Fo$@ -c $(CFLAGS) $(call core_abspath,$<)
+else
+ifdef NEED_ABSOLUTE_PATH
+ $(CC) -o $@ -c $(CFLAGS) $(call core_abspath,$<)
+else
+ $(CC) -o $@ -c $(CFLAGS) $<
+endif
+endif
+
+ifneq (,$(filter-out _WIN%,$(NS_USE_GCC)_$(OS_TARGET)))
+$(OBJDIR)/$(PROG_PREFIX)%$(OBJ_SUFFIX): %.s
+ @$(MAKE_OBJDIR)
+ $(AS) -o $@ $(ASFLAGS) -c $<
+endif
+
+$(OBJDIR)/$(PROG_PREFIX)%$(OBJ_SUFFIX): %.asm
+ @$(MAKE_OBJDIR)
+ $(AS) -Fo$@ $(ASFLAGS) -c $<
+
+$(OBJDIR)/$(PROG_PREFIX)%$(OBJ_SUFFIX): %.S
+ @$(MAKE_OBJDIR)
+ $(AS) -o $@ $(ASFLAGS) -c $<
+
+$(OBJDIR)/$(PROG_PREFIX)%: %.cpp
+ @$(MAKE_OBJDIR)
+ifdef USE_NT_C_SYNTAX
+ $(CCC) -Fo$@ -c $(CFLAGS) $(CXXFLAGS) $(call core_abspath,$<)
+else
+ifdef NEED_ABSOLUTE_PATH
+ $(CCC) -o $@ -c $(CFLAGS) $(CXXFLAGS) $(call core_abspath,$<)
+else
+ $(CCC) -o $@ -c $(CFLAGS) $(CXXFLAGS) $<
+endif
+endif
+
+#
+# Please keep the next two rules in sync.
+#
+$(OBJDIR)/$(PROG_PREFIX)%$(OBJ_SUFFIX): %.cc
+ $(MAKE_OBJDIR)
+ifdef STRICT_CPLUSPLUS_SUFFIX
+ echo "#line 1 \"$<\"" | cat - $< > $(OBJDIR)/t_$*.cc
+ $(CCC) -o $@ -c $(CFLAGS) $(CXXFLAGS) $(OBJDIR)/t_$*.cc
+ rm -f $(OBJDIR)/t_$*.cc
+else
+ifdef USE_NT_C_SYNTAX
+ $(CCC) -Fo$@ -c $(CFLAGS) $(CXXFLAGS) $(call core_abspath,$<)
+else
+ifdef NEED_ABSOLUTE_PATH
+ $(CCC) -o $@ -c $(CFLAGS) $(CXXFLAGS) $(call core_abspath,$<)
+else
+ $(CCC) -o $@ -c $(CFLAGS) $(CXXFLAGS) $<
+endif
+endif
+endif #STRICT_CPLUSPLUS_SUFFIX
+
+$(OBJDIR)/$(PROG_PREFIX)%$(OBJ_SUFFIX): %.cpp
+ @$(MAKE_OBJDIR)
+ifdef STRICT_CPLUSPLUS_SUFFIX
+ echo "#line 1 \"$<\"" | cat - $< > $(OBJDIR)/t_$*.cc
+ $(CCC) -o $@ -c $(CFLAGS) $(CXXFLAGS) $(OBJDIR)/t_$*.cc
+ rm -f $(OBJDIR)/t_$*.cc
+else
+ifdef USE_NT_C_SYNTAX
+ $(CCC) -Fo$@ -c $(CFLAGS) $(CXXFLAGS) $(call core_abspath,$<)
+else
+ifdef NEED_ABSOLUTE_PATH
+ $(CCC) -o $@ -c $(CFLAGS) $(CXXFLAGS) $(call core_abspath,$<)
+else
+ $(CCC) -o $@ -c $(CFLAGS) $(CXXFLAGS) $<
+endif
+endif
+endif #STRICT_CPLUSPLUS_SUFFIX
+
+%.i: %.cpp
+ $(CCC) -C -E $(CFLAGS) $(CXXFLAGS) $< > $@
+
+%.i: %.c
+ifeq (,$(filter-out WIN%,$(OS_TARGET)))
+ $(CC) -C /P $(CFLAGS) $<
+else
+ $(CC) -C -E $(CFLAGS) $< > $@
+endif
+
+ifneq (,$(filter-out WIN%,$(OS_TARGET)))
+%.i: %.s
+ $(CC) -C -E $(CFLAGS) $< > $@
+endif
+
+%: %.pl
+ rm -f $@; cp $< $@; chmod +x $@
+
+%: %.sh
+ rm -f $@; cp $< $@; chmod +x $@
+
+################################################################################
+# Bunch of things that extend the 'export' rule (in order):
+################################################################################
+
+$(JAVA_DESTPATH) $(JAVA_DESTPATH)/$(PACKAGE) $(JMCSRCDIR)::
+ @if test ! -d $@; then \
+ echo Creating $@; \
+ rm -rf $@; \
+ $(NSINSTALL) -D $@; \
+ fi
+
+################################################################################
+## IDL_GEN
+
+ifneq ($(IDL_GEN),)
+
+#export::
+# $(IDL2JAVA) $(IDL_GEN)
+
+#all:: export
+
+#clobber::
+# rm -f $(IDL_GEN:.idl=.class) # XXX wrong!
+
+endif
+
+################################################################################
+### JSRCS -- for compiling java files
+###
+### NOTE: For backwards compatibility, if $(NETLIBDEPTH) is defined,
+### replace $(CORE_DEPTH) with $(NETLIBDEPTH).
+###
+
+ifneq ($(JSRCS),)
+ifneq ($(JAVAC),)
+ifdef NETLIBDEPTH
+ CORE_DEPTH := $(NETLIBDEPTH)
+endif
+
+JAVA_EXPORT_SRCS=$(shell $(PERL) $(CORE_DEPTH)/coreconf/outofdate.pl $(PERLARG) -d $(JAVA_DESTPATH)/$(PACKAGE) $(JSRCS) $(PRIVATE_JSRCS))
+
+export:: $(JAVA_DESTPATH) $(JAVA_DESTPATH)/$(PACKAGE)
+ifneq ($(JAVA_EXPORT_SRCS),)
+ $(JAVAC) $(JAVA_EXPORT_SRCS)
+endif
+
+all:: export
+
+clobber::
+ rm -f $(SOURCE_XP_DIR)/classes/$(PACKAGE)/*.class
+
+endif
+endif
+
+#
+# JDIRS -- like JSRCS, except you can give a list of directories and it will
+# compile all the out-of-date java files in those directories.
+#
+# NOTE: recursing through these can speed things up, but they also cause
+# some builds to run out of memory
+#
+# NOTE: For backwards compatibility, if $(NETLIBDEPTH) is defined,
+# replace $(CORE_DEPTH) with $(NETLIBDEPTH).
+#
+ifdef JDIRS
+ifneq ($(JAVAC),)
+ifdef NETLIBDEPTH
+ CORE_DEPTH := $(NETLIBDEPTH)
+endif
+
+# !!!!! THIS WILL CRASH SHMSDOS.EXE !!!!!
+# shmsdos does not support shell variables. It will crash when it tries
+# to parse the '=' character. A solution is to rewrite outofdate.pl so it
+# takes the Javac command as an argument and executes the command itself,
+# instead of returning a list of files.
+export:: $(JAVA_DESTPATH) $(JAVA_DESTPATH)/$(PACKAGE)
+ @echo "!!! THIS COMMAND IS BROKEN ON WINDOWS--SEE rules.mk FOR DETAILS !!!"
+ return -1
+ @for d in $(JDIRS); do \
+ if test -d $$d; then \
+ set $(EXIT_ON_ERROR); \
+ files=`echo $$d/*.java`; \
+ list=`$(PERL) $(CORE_DEPTH)/coreconf/outofdate.pl $(PERLARG) \
+ -d $(JAVA_DESTPATH)/$(PACKAGE) $$files`; \
+ if test "$${list}x" != "x"; then \
+ echo Building all java files in $$d; \
+ echo $(JAVAC) $$list; \
+ $(JAVAC) $$list; \
+ fi; \
+ set +e; \
+ else \
+ echo "Skipping non-directory $$d..."; \
+ fi; \
+ $(CLICK_STOPWATCH); \
+ done
+endif
+endif
+
+#
+# JDK_GEN -- for generating "old style" native methods
+#
+# Generate JDK Headers and Stubs into the '_gen' and '_stubs' directory
+#
+# NOTE: For backwards compatibility, if $(NETLIBDEPTH) is defined,
+# replace $(CORE_DEPTH) with $(NETLIBDEPTH).
+#
+ifneq ($(JDK_GEN),)
+ifneq ($(JAVAH),)
+ifdef NSBUILDROOT
+ INCLUDES += -I$(JDK_GEN_DIR) -I$(SOURCE_XP_DIR)
+else
+ INCLUDES += -I$(JDK_GEN_DIR)
+endif
+
+ifdef NETLIBDEPTH
+ CORE_DEPTH := $(NETLIBDEPTH)
+endif
+
+JDK_PACKAGE_CLASSES := $(JDK_GEN)
+JDK_PATH_CLASSES := $(subst .,/,$(JDK_PACKAGE_CLASSES))
+JDK_HEADER_CLASSFILES := $(patsubst %,$(JAVA_DESTPATH)/%.class,$(JDK_PATH_CLASSES))
+JDK_STUB_CLASSFILES := $(patsubst %,$(JAVA_DESTPATH)/%.class,$(JDK_PATH_CLASSES))
+JDK_HEADER_CFILES := $(patsubst %,$(JDK_GEN_DIR)/%.h,$(JDK_GEN))
+JDK_STUB_CFILES := $(patsubst %,$(JDK_STUB_DIR)/%.c,$(JDK_GEN))
+
+$(JDK_HEADER_CFILES): $(JDK_HEADER_CLASSFILES)
+$(JDK_STUB_CFILES): $(JDK_STUB_CLASSFILES)
+
+export::
+ @echo Generating/Updating JDK headers
+ $(JAVAH) -d $(JDK_GEN_DIR) $(JDK_PACKAGE_CLASSES)
+ @echo Generating/Updating JDK stubs
+ $(JAVAH) -stubs -d $(JDK_STUB_DIR) $(JDK_PACKAGE_CLASSES)
+ifndef NO_MAC_JAVA_SHIT
+ @if test ! -d $(CORE_DEPTH)/lib/mac/Java/; then \
+ echo "!!! You need to have a ns/lib/mac/Java directory checked out."; \
+ echo "!!! This allows us to automatically update generated files for the mac."; \
+ echo "!!! If you see any modified files there, please check them in."; \
+ fi
+ @echo Generating/Updating JDK headers for the Mac
+ $(JAVAH) -mac -d $(CORE_DEPTH)/lib/mac/Java/_gen $(JDK_PACKAGE_CLASSES)
+ @echo Generating/Updating JDK stubs for the Mac
+ $(JAVAH) -mac -stubs -d $(CORE_DEPTH)/lib/mac/Java/_stubs $(JDK_PACKAGE_CLASSES)
+endif
+endif
+endif
+
+#
+# JRI_GEN -- for generating "old style" JRI native methods
+#
+# Generate JRI Headers and Stubs into the 'jri' directory
+#
+# NOTE: For backwards compatibility, if $(NETLIBDEPTH) is defined,
+# replace $(CORE_DEPTH) with $(NETLIBDEPTH).
+#
+ifneq ($(JRI_GEN),)
+ifneq ($(JAVAH),)
+ifdef NSBUILDROOT
+ INCLUDES += -I$(JRI_GEN_DIR) -I$(SOURCE_XP_DIR)
+else
+ INCLUDES += -I$(JRI_GEN_DIR)
+endif
+
+ifdef NETLIBDEPTH
+ CORE_DEPTH := $(NETLIBDEPTH)
+endif
+
+JRI_PACKAGE_CLASSES := $(JRI_GEN)
+JRI_PATH_CLASSES := $(subst .,/,$(JRI_PACKAGE_CLASSES))
+JRI_HEADER_CLASSFILES := $(patsubst %,$(JAVA_DESTPATH)/%.class,$(JRI_PATH_CLASSES))
+JRI_STUB_CLASSFILES := $(patsubst %,$(JAVA_DESTPATH)/%.class,$(JRI_PATH_CLASSES))
+JRI_HEADER_CFILES := $(patsubst %,$(JRI_GEN_DIR)/%.h,$(JRI_GEN))
+JRI_STUB_CFILES := $(patsubst %,$(JRI_GEN_DIR)/%.c,$(JRI_GEN))
+
+$(JRI_HEADER_CFILES): $(JRI_HEADER_CLASSFILES)
+$(JRI_STUB_CFILES): $(JRI_STUB_CLASSFILES)
+
+export::
+ @echo Generating/Updating JRI headers
+ $(JAVAH) -jri -d $(JRI_GEN_DIR) $(JRI_PACKAGE_CLASSES)
+ @echo Generating/Updating JRI stubs
+ $(JAVAH) -jri -stubs -d $(JRI_GEN_DIR) $(JRI_PACKAGE_CLASSES)
+ifndef NO_MAC_JAVA_SHIT
+ @if test ! -d $(CORE_DEPTH)/lib/mac/Java/; then \
+ echo "!!! You need to have a ns/lib/mac/Java directory checked out."; \
+ echo "!!! This allows us to automatically update generated files for the mac."; \
+ echo "!!! If you see any modified files there, please check them in."; \
+ fi
+ @echo Generating/Updating JRI headers for the Mac
+ $(JAVAH) -jri -mac -d $(CORE_DEPTH)/lib/mac/Java/_jri $(JRI_PACKAGE_CLASSES)
+ @echo Generating/Updating JRI stubs for the Mac
+ $(JAVAH) -jri -mac -stubs -d $(CORE_DEPTH)/lib/mac/Java/_jri $(JRI_PACKAGE_CLASSES)
+endif
+endif
+endif
+
+#
+# JNI_GEN -- for generating JNI native methods
+#
+# Generate JNI Headers into the 'jni' directory
+#
+ifneq ($(JNI_GEN),)
+ifneq ($(JAVAH),)
+JNI_HEADERS := $(patsubst %,$(JNI_GEN_DIR)/%.h,$(JNI_GEN))
+
+export::
+ @if test ! -d $(JNI_GEN_DIR); then \
+ echo $(JAVAH) -jni -d $(JNI_GEN_DIR) $(JNI_GEN); \
+ $(JAVAH) -jni -d $(JNI_GEN_DIR) $(JNI_GEN); \
+ else \
+ echo "Checking for out of date header files" ; \
+ $(PERL) $(CORE_DEPTH)/coreconf/jniregen.pl $(PERLARG) \
+ -d $(JAVA_DESTPATH) -j "$(JAVAH) -jni -d $(JNI_GEN_DIR)" $(JNI_GEN);\
+ fi
+endif
+endif
+
+#
+# JMC_EXPORT -- for declaring which java classes are to be exported for jmc
+#
+ifneq ($(JMC_EXPORT),)
+JMC_EXPORT_PATHS := $(subst .,/,$(JMC_EXPORT))
+JMC_EXPORT_FILES := $(patsubst %,$(JAVA_DESTPATH)/$(PACKAGE)/%.class,$(JMC_EXPORT_PATHS))
+
+#
+# We're doing NSINSTALL -t here (copy mode) because calling INSTALL will pick up
+# your NSDISTMODE and make links relative to the current directory. This is a
+# problem because the source isn't in the current directory:
+#
+export:: $(JMC_EXPORT_FILES) $(JMCSRCDIR)
+ $(NSINSTALL) -t -m 444 $(JMC_EXPORT_FILES) $(JMCSRCDIR)
+endif
+
+#
+# JMC_GEN -- for generating java modules
+#
+# Provide default export & install rules when using JMC_GEN
+#
+ifneq ($(JMC_GEN),)
+ifneq ($(JMC),)
+ INCLUDES += -I$(JMC_GEN_DIR) -I.
+ JMC_HEADERS := $(patsubst %,$(JMC_GEN_DIR)/%.h,$(JMC_GEN))
+ JMC_STUBS := $(patsubst %,$(JMC_GEN_DIR)/%.c,$(JMC_GEN))
+ JMC_OBJS := $(patsubst %,$(OBJDIR)/%$(OBJ_SUFFIX),$(JMC_GEN))
+
+$(JMC_GEN_DIR)/M%.h: $(JMCSRCDIR)/%.class
+ $(JMC) -d $(JMC_GEN_DIR) -interface $(JMC_GEN_FLAGS) $(?F:.class=)
+
+$(JMC_GEN_DIR)/M%.c: $(JMCSRCDIR)/%.class
+ $(JMC) -d $(JMC_GEN_DIR) -module $(JMC_GEN_FLAGS) $(?F:.class=)
+
+$(OBJDIR)/M%$(OBJ_SUFFIX): $(JMC_GEN_DIR)/M%.c $(JMC_GEN_DIR)/M%.h
+ @$(MAKE_OBJDIR)
+ $(CC) -o $@ -c $(CFLAGS) $<
+
+export:: $(JMC_HEADERS) $(JMC_STUBS)
+endif
+endif
+
+#
+# Copy each element of EXPORTS to $(SOURCE_XP_DIR)/public/$(MODULE)/
+#
+PUBLIC_EXPORT_DIR = $(SOURCE_XP_DIR)/public/$(MODULE)
+
+ifneq ($(EXPORTS),)
+$(PUBLIC_EXPORT_DIR)::
+ @if test ! -d $@; then \
+ echo Creating $@; \
+ $(NSINSTALL) -D $@; \
+ fi
+
+export:: $(PUBLIC_EXPORT_DIR)
+
+export:: $(EXPORTS)
+ $(INSTALL) -m 444 $^ $(PUBLIC_EXPORT_DIR)
+
+export:: $(BUILT_SRCS)
+endif
+
+# Duplicate export rule for private exports, with different directories
+
+PRIVATE_EXPORT_DIR = $(SOURCE_XP_DIR)/private/$(MODULE)
+
+ifneq ($(PRIVATE_EXPORTS),)
+$(PRIVATE_EXPORT_DIR)::
+ @if test ! -d $@; then \
+ echo Creating $@; \
+ $(NSINSTALL) -D $@; \
+ fi
+
+private_export:: $(PRIVATE_EXPORT_DIR)
+
+private_export:: $(PRIVATE_EXPORTS)
+ $(INSTALL) -m 444 $^ $(PRIVATE_EXPORT_DIR)
+else
+private_export::
+ @echo There are no private exports.;
+endif
+
+##########################################################################
+### RULES FOR RUNNING REGRESSION SUITE TESTS
+### REQUIRES 'REGRESSION_SPEC' TO BE SET TO THE NAME OF A REGRESSION SPECFILE
+### AND RESULTS_SUBDIR TO BE SET TO SOMETHING LIKE SECURITY/PKCS5
+##########################################################################
+
+TESTS_DIR = $(RESULTS_DIR)/$(RESULTS_SUBDIR)/$(OS_TARGET)$(OS_RELEASE)$(CPU_TAG)$(COMPILER_TAG)$(IMPL_STRATEGY)
+
+ifneq ($(REGRESSION_SPEC),)
+
+ifneq ($(BUILD_OPT),)
+REGDATE = $(subst \ ,, $(shell $(PERL) $(CORE_DEPTH)/$(MODULE)/scripts/now))
+endif
+
+tests:: $(REGRESSION_SPEC)
+ cd $(PLATFORM); \
+ ../$(SOURCE_MD_DIR)/bin/regress$(PROG_SUFFIX) specfile=../$(REGRESSION_SPEC) progress $(EXTRA_REGRESS_OPTIONS); \
+ if test ! -d $(TESTS_DIR); then \
+ echo Creating $(TESTS_DIR); \
+ $(NSINSTALL) -D $(TESTS_DIR); \
+ fi
+ifneq ($(BUILD_OPT),)
+ $(NSINSTALL) -m 664 $(PLATFORM)/$(REGDATE).sum $(TESTS_DIR); \
+ $(NSINSTALL) -m 664 $(PLATFORM)/$(REGDATE).htm $(TESTS_DIR); \
+ echo "Please now make sure your results files are copied to $(TESTS_DIR), "; \
+ echo "then run 'reporter specfile=$(RESULTS_DIR)/rptspec'"
+endif
+else
+tests::
+ @echo Error: you didn't specify REGRESSION_SPEC in your manifest.mn file!;
+endif
+
+
+# Duplicate export rule for releases, with different directories
+
+ifneq ($(EXPORTS),)
+$(SOURCE_RELEASE_XP_DIR)/include::
+ @if test ! -d $@; then \
+ echo Creating $@; \
+ $(NSINSTALL) -D $@; \
+ fi
+
+release_export:: $(SOURCE_RELEASE_XP_DIR)/include
+
+release_export:: $(EXPORTS)
+ $(INSTALL) -m 444 $^ $(SOURCE_RELEASE_XP_DIR)/include
+endif
+
+
+
+
+################################################################################
+
+-include $(DEPENDENCIES)
+
+ifneq (,$(filter-out OS2 WIN%,$(OS_TARGET)))
+# Can't use sed because of its 4000-char line length limit, so resort to perl
+PERL_DEPENDENCIES_PROGRAM = \
+ open(MD, "< $(DEPENDENCIES)"); \
+ while (<MD>) { \
+ if (m@ \.*/*$< @) { \
+ $$found = 1; \
+ last; \
+ } \
+ } \
+ if ($$found) { \
+ print "Removing stale dependency $< from $(DEPENDENCIES)\n"; \
+ seek(MD, 0, 0); \
+ $$tmpname = "$(OBJDIR)/fix.md" . $$$$; \
+ open(TMD, "> " . $$tmpname); \
+ while (<MD>) { \
+ s@ \.*/*$< @ @; \
+ if (!print TMD "$$_") { \
+ unlink(($$tmpname)); \
+ exit(1); \
+ } \
+ } \
+ close(TMD); \
+ if (!rename($$tmpname, "$(DEPENDENCIES)")) { \
+ unlink(($$tmpname)); \
+ } \
+ } elsif ("$<" ne "$(DEPENDENCIES)") { \
+ print "$(MAKE): *** No rule to make target $<. Stop.\n"; \
+ exit(1); \
+ }
+
+.DEFAULT:
+ @$(PERL) -e '$(PERL_DEPENDENCIES_PROGRAM)'
+endif
+
+#############################################################################
+# X dependency system
+#############################################################################
+
+ifdef MKDEPENDENCIES
+
+# For Windows, $(MKDEPENDENCIES) must be -included before including rules.mk
+
+$(MKDEPENDENCIES)::
+ @$(MAKE_OBJDIR)
+ touch $(MKDEPENDENCIES)
+ chmod u+w $(MKDEPENDENCIES)
+#on NT, the preceding touch command creates a read-only file !?!?!
+#which is why we have to explicitly chmod it.
+ $(MKDEPEND) -p$(OBJDIR_NAME)/ -o'$(OBJ_SUFFIX)' -f$(MKDEPENDENCIES) \
+$(NOMD_CFLAGS) $(YOPT) $(CSRCS) $(CPPSRCS) $(ASFILES)
+
+$(MKDEPEND):: $(MKDEPEND_DIR)/*.c $(MKDEPEND_DIR)/*.h
+ $(MAKE) -C $(MKDEPEND_DIR)
+
+ifdef OBJS
+depend:: $(MKDEPEND) $(MKDEPENDENCIES)
+else
+depend::
+endif
+ +$(LOOP_OVER_DIRS)
+
+dependclean::
+ rm -f $(MKDEPENDENCIES)
+ +$(LOOP_OVER_DIRS)
+
+#-include $(NSINSTALL_DIR)/$(OBJDIR)/depend.mk
+
+else
+depend::
+endif
+
+#
+# HACK ALERT
+#
+# The only purpose of this rule is to pass Mozilla's Tinderbox depend
+# builds (http://tinderbox.mozilla.org/showbuilds.cgi). Mozilla's
+# Tinderbox builds NSS continuously as part of the Mozilla client.
+# Because NSS's make depend is not implemented, whenever we change
+# an NSS header file, the depend build does not recompile the NSS
+# files that depend on the header.
+#
+# This rule makes all the objects depend on a dummy header file.
+# Check in a change to this dummy header file to force the depend
+# build to recompile everything.
+#
+# This rule should be removed when make depend is implemented.
+#
+
+DUMMY_DEPEND = $(CORE_DEPTH)/coreconf/coreconf.dep
+
+$(filter $(OBJDIR)/%$(OBJ_SUFFIX),$(OBJS)): $(OBJDIR)/%$(OBJ_SUFFIX): $(DUMMY_DEPEND)
+
+# END OF HACK
+
+################################################################################
+# Special gmake rules.
+################################################################################
+
+#
+# Re-define the list of default suffixes, so gmake won't have to churn through
+# hundreds of built-in suffix rules for stuff we don't need.
+#
+.SUFFIXES:
+.SUFFIXES: .out .a .ln .o .obj .c .cc .C .cpp .y .l .s .S .h .sh .i .pl .class .java .html .asm .dep
+
+#
+# Don't delete these files if we get killed.
+#
+.PRECIOUS: .java $(JDK_HEADERS) $(JDK_STUBS) $(JRI_HEADERS) $(JRI_STUBS) $(JMC_HEADERS) $(JMC_STUBS) $(JNI_HEADERS)
+
+#
+# Fake targets. Always run these rules, even if a file/directory with that
+# name already exists.
+#
+.PHONY: all all_platforms alltags boot clean clobber clobber_all export install libs program realclean release $(OBJDIR)
+
diff --git a/security/nss/coreconf/ruleset.mk b/security/nss/coreconf/ruleset.mk
new file mode 100644
index 000000000..74d64e1fb
--- /dev/null
+++ b/security/nss/coreconf/ruleset.mk
@@ -0,0 +1,220 @@
+#
+# 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/.
+
+#######################################################################
+# #
+# Parameters to this makefile (set these in this file): #
+# #
+# a) #
+# TARGETS -- the target to create #
+# (defaults to $LIBRARY $PROGRAM) #
+# b) #
+# DIRS -- subdirectories for make to recurse on #
+# (the 'all' rule builds $TARGETS $DIRS) #
+# c) #
+# CSRCS, CPPSRCS -- .c and .cpp files to compile #
+# (used to define $OBJS) #
+# d) #
+# PROGRAM -- the target program name to create from $OBJS #
+# ($OBJDIR automatically prepended to it) #
+# e) #
+# LIBRARY -- the target library name to create from $OBJS #
+# ($OBJDIR automatically prepended to it) #
+# f) #
+# JSRCS -- java source files to compile into class files #
+# (if you don't specify this it will default #
+# to *.java) #
+# g) #
+# PACKAGE -- the package to put the .class files into #
+# (e.g. netscape/applet) #
+# (NOTE: the default definition for this may be #
+# overridden if "jdk.mk" is included) #
+# h) #
+# JMC_EXPORT -- java files to be exported for use by JMC_GEN #
+# (this is a list of Class names) #
+# i) #
+# JRI_GEN -- files to run through javah to generate headers #
+# and stubs #
+# (output goes into the _jri sub-dir) #
+# j) #
+# JMC_GEN -- files to run through jmc to generate headers #
+# and stubs #
+# (output goes into the _jmc sub-dir) #
+# k) #
+# JNI_GEN -- files to run through javah to generate headers #
+# (output goes into the _jni sub-dir) #
+# #
+#######################################################################
+
+#
+# CPU_TAG is now defined in the $(TARGET).mk files
+#
+
+ifndef COMPILER_TAG
+ ifneq ($(DEFAULT_COMPILER), $(notdir $(firstword $(CC))))
+#
+# Temporary define for the Client; to be removed when binary release is used
+#
+ ifdef MOZILLA_CLIENT
+ COMPILER_TAG =
+ else
+ COMPILER_TAG = _$(notdir $(firstword $(CC)))
+ endif
+ else
+ COMPILER_TAG =
+ endif
+endif
+
+ifeq ($(MKPROG),)
+ MKPROG = $(CC)
+endif
+
+#
+# This makefile contains rules for building the following kinds of
+# objects:
+# - (1) LIBRARY: a static (archival) library
+# - (2) SHARED_LIBRARY: a shared (dynamic link) library
+# - (3) IMPORT_LIBRARY: an import library, defined in $(OS_TARGET).mk
+# - (4) PROGRAM: an executable binary
+#
+# NOTE: The names of libraries can be generated by simply specifying
+# LIBRARY_NAME (and LIBRARY_VERSION in the case of non-static libraries).
+# LIBRARY and SHARED_LIBRARY may be defined differently in $(OS_TARGET).mk
+#
+
+ifdef LIBRARY_NAME
+ ifndef LIBRARY
+ LIBRARY = $(OBJDIR)/$(LIB_PREFIX)$(LIBRARY_NAME).$(LIB_SUFFIX)
+ endif
+ ifndef SHARED_LIBRARY
+ SHARED_LIBRARY = $(OBJDIR)/$(DLL_PREFIX)$(LIBRARY_NAME)$(LIBRARY_VERSION)$(JDK_DEBUG_SUFFIX).$(DLL_SUFFIX)
+ endif
+ ifndef MAPFILE_SOURCE
+ MAPFILE_SOURCE = $(LIBRARY_NAME).def
+ endif
+endif
+
+#
+# Common rules used by lots of makefiles...
+#
+
+ifdef PROGRAM
+ PROGRAM := $(addprefix $(OBJDIR)/, $(PROGRAM)$(JDK_DEBUG_SUFFIX)$(PROG_SUFFIX))
+endif
+
+ifdef PROGRAMS
+ PROGRAMS := $(addprefix $(OBJDIR)/, $(PROGRAMS:%=%$(JDK_DEBUG_SUFFIX)$(PROG_SUFFIX)))
+endif
+
+ifndef TARGETS
+ TARGETS = $(LIBRARY) $(SHARED_LIBRARY) $(PROGRAM)
+endif
+
+# Make both .cpp and .cc work.
+CPPSRCS1 = $(CPPSRCS:.cpp=$(OBJ_SUFFIX))
+CPPSRCS2 = $(CPPSRCS1:.cc=$(OBJ_SUFFIX))
+
+ifndef OBJS
+ SIMPLE_OBJS = $(JRI_STUB_CFILES) \
+ $(addsuffix $(OBJ_SUFFIX), $(JMC_GEN)) \
+ $(CSRCS:.c=$(OBJ_SUFFIX)) \
+ $(CPPSRCS2) \
+ $(ASFILES:$(ASM_SUFFIX)=$(OBJ_SUFFIX)) \
+ $(BUILT_CSRCS:.c=$(OBJ_SUFFIX)) \
+ $(BUILT_CPPSRCS:.cpp=$(OBJ_SUFFIX)) \
+ $(BUILT_ASFILES:$(ASM_SUFFIX)=$(OBJ_SUFFIX))
+ OBJS = $(addprefix $(OBJDIR)/$(PROG_PREFIX), $(SIMPLE_OBJS))
+endif
+
+ifndef BUILT_SRCS
+ BUILT_SRCS = $(addprefix $(OBJDIR)/$(PROG_PREFIX), \
+ $(BUILT_CSRCS) $(BUILT_CPPSRCS) $(BUILT_ASFILES))
+endif
+
+
+ifeq (,$(filter-out WIN%,$(OS_TARGET)))
+ MAKE_OBJDIR = $(INSTALL) -D $(OBJDIR)
+else
+ define MAKE_OBJDIR
+ if test ! -d $(@D); then rm -rf $(@D); $(NSINSTALL) -D $(@D); fi
+ endef
+endif
+
+ifndef PACKAGE
+ PACKAGE = .
+endif
+
+ifdef NSBUILDROOT
+ JDK_GEN_DIR = $(SOURCE_XP_DIR)/_gen
+ JMC_GEN_DIR = $(SOURCE_XP_DIR)/_jmc
+ JNI_GEN_DIR = $(SOURCE_XP_DIR)/_jni
+ JRI_GEN_DIR = $(SOURCE_XP_DIR)/_jri
+ JDK_STUB_DIR = $(SOURCE_XP_DIR)/_stubs
+else
+ JDK_GEN_DIR = _gen
+ JMC_GEN_DIR = _jmc
+ JNI_GEN_DIR = _jni
+ JRI_GEN_DIR = _jri
+ JDK_STUB_DIR = _stubs
+endif
+
+ALL_TRASH = $(TARGETS) $(OBJS) $(OBJDIR) LOGS TAGS $(GARBAGE) \
+ so_locations $(BUILT_SRCS) $(NOSUCHFILE)
+
+ifdef NS_USE_JDK
+ ALL_TRASH += $(JDK_HEADER_CFILES) $(JDK_STUB_CFILES) \
+ $(JMC_HEADERS) $(JMC_STUBS) $(JMC_EXPORT_FILES) \
+ $(JNI_HEADERS) \
+ $(JRI_HEADER_CFILES) $(JRI_STUB_CFILES) \
+ $(JDK_GEN_DIR) $(JMC_GEN_DIR) $(JNI_GEN_DIR) \
+ $(JRI_GEN_DIR) $(JDK_STUB_DIR)
+
+ifdef JAVA_DESTPATH
+ ALL_TRASH += $(wildcard $(JAVA_DESTPATH)/$(PACKAGE)/*.class)
+ifdef JDIRS
+ ALL_TRASH += $(addprefix $(JAVA_DESTPATH)/,$(JDIRS))
+endif
+else # !JAVA_DESTPATH
+ ALL_TRASH += $(wildcard $(PACKAGE)/*.class) $(JDIRS)
+endif
+
+endif #NS_USE_JDK
+
+ifdef NSS_BUILD_CONTINUE_ON_ERROR
+# Try to build everything. I.e., don't exit on errors.
+ EXIT_ON_ERROR = +e
+ IGNORE_ERROR = -
+ CLICK_STOPWATCH = date
+else
+ EXIT_ON_ERROR = -e
+ IGNORE_ERROR =
+ CLICK_STOPWATCH = true
+endif
+
+ifdef REQUIRES
+ MODULE_INCLUDES := $(addprefix -I$(SOURCE_XP_DIR)/public/, $(REQUIRES))
+ INCLUDES += $(MODULE_INCLUDES)
+ ifeq ($(MODULE), sectools)
+ PRIVATE_INCLUDES := $(addprefix -I$(SOURCE_XP_DIR)/private/, $(REQUIRES))
+ INCLUDES += $(PRIVATE_INCLUDES)
+ endif
+endif
+
+ifdef SYSTEM_INCL_DIR
+ YOPT = -Y$(SYSTEM_INCL_DIR)
+endif
+
+ifdef DIRS
+define SUBMAKE
++@echo "cd $2; $(MAKE) $1"
+$(IGNORE_ERROR)@$(MAKE) -C $(2) $(1)
+@$(CLICK_STOPWATCH)
+
+endef
+
+ LOOP_OVER_DIRS = $(foreach dir,$(DIRS),$(call SUBMAKE,$@,$(dir)))
+endif
+
+MK_RULESET = included
diff --git a/security/nss/coreconf/sanitizers.mk b/security/nss/coreconf/sanitizers.mk
new file mode 100644
index 000000000..6fd728cf5
--- /dev/null
+++ b/security/nss/coreconf/sanitizers.mk
@@ -0,0 +1,35 @@
+# Address Sanitizer support; include this in OS-specific .mk files
+# *after* defining the variables that are appended to here.
+
+ifeq ($(USE_ASAN), 1)
+SANITIZER_FLAGS_COMMON = -fsanitize=address
+
+ifeq ($(USE_UBSAN), 1)
+SANITIZER_FLAGS_COMMON += -fsanitize=undefined -fno-sanitize-recover=undefined
+endif
+
+ifeq ($(FUZZ), 1)
+SANITIZER_FLAGS_COMMON += -fsanitize-coverage=edge
+endif
+
+SANITIZER_FLAGS_COMMON += $(EXTRA_SANITIZER_FLAGS)
+SANITIZER_CFLAGS = $(SANITIZER_FLAGS_COMMON)
+SANITIZER_LDFLAGS = $(SANITIZER_FLAGS_COMMON)
+OS_CFLAGS += $(SANITIZER_CFLAGS)
+LDFLAGS += $(SANITIZER_LDFLAGS)
+
+# ASan needs frame pointers to save stack traces for allocation/free sites.
+# (Warning: some platforms, like ARM Linux in Thumb mode, don't have useful
+# frame pointers even with this option.)
+SANITIZER_CFLAGS += -fno-omit-frame-pointer -fno-optimize-sibling-calls
+
+ifdef BUILD_OPT
+# You probably want to be able to get debug info for failures, even with an
+# optimized build.
+OPTIMIZER += -g
+else
+# Try maintaining reasonable performance, ASan and UBSan slow things down.
+OPTIMIZER += -O1
+endif
+
+endif
diff --git a/security/nss/coreconf/sanitizers.py b/security/nss/coreconf/sanitizers.py
new file mode 100644
index 000000000..2f62d00bb
--- /dev/null
+++ b/security/nss/coreconf/sanitizers.py
@@ -0,0 +1,36 @@
+#!/usr/bin/env python2
+
+from __future__ import print_function
+import sys
+
+def main():
+ if len(sys.argv) < 2:
+ raise Exception('Specify either "ld", asan", "msan", "sancov" or "ubsan" as argument.')
+
+ sanitizer = sys.argv[1]
+ if sanitizer == "ubsan":
+ print('-fsanitize=undefined -fno-sanitize-recover=undefined ', end='')
+ return
+ if sanitizer == "asan":
+ print('-fsanitize=address ', end='')
+ print('-fno-omit-frame-pointer -fno-optimize-sibling-calls ', end='')
+ return
+ if sanitizer == "msan":
+ print('-fsanitize=memory -fsanitize-memory-track-origins ', end='')
+ print('-fno-omit-frame-pointer -fno-optimize-sibling-calls ', end='')
+ return
+ if sanitizer == "sancov":
+ if len(sys.argv) < 3:
+ raise Exception('sancov requires another argument (edge|bb|func).')
+ print('-fsanitize-coverage='+sys.argv[2]+' ', end='')
+ return
+
+ # We have to remove this from the ld flags when building asan.
+ if sanitizer == "ld":
+ print('-Wl,-z,defs ', end='')
+ return
+
+ raise Exception('Specify either "ld", asan", "msan", "sancov" or "ubsan" as argument.')
+
+if __name__ == '__main__':
+ main()
diff --git a/security/nss/coreconf/shlibsign.py b/security/nss/coreconf/shlibsign.py
new file mode 100644
index 000000000..dc40a8c89
--- /dev/null
+++ b/security/nss/coreconf/shlibsign.py
@@ -0,0 +1,30 @@
+#!/usr/bin/env python2
+#
+# 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/.
+
+import os
+import subprocess
+import sys
+
+def main():
+ for lib_file in sys.argv[1:]:
+ if os.path.isfile(lib_file):
+ sign(lib_file)
+
+def sign(lib_file):
+ ld_lib_path = os.path.realpath(os.path.join(lib_file, '..'))
+ bin_path = os.path.realpath(os.path.join(ld_lib_path, '../bin'))
+
+ env = os.environ.copy()
+ if sys.platform == 'win32':
+ env['PATH'] = os.pathsep.join((env['PATH'], ld_lib_path))
+ else:
+ env['LD_LIBRARY_PATH'] = env['DYLD_LIBRARY_PATH'] = ld_lib_path
+
+ dev_null = open(os.devnull, 'wb')
+ subprocess.check_call([os.path.join(bin_path, 'shlibsign'), '-v', '-i', lib_file], env=env, stdout=dev_null, stderr=dev_null)
+
+if __name__ == '__main__':
+ main()
diff --git a/security/nss/coreconf/source.mk b/security/nss/coreconf/source.mk
new file mode 100644
index 000000000..14bb51023
--- /dev/null
+++ b/security/nss/coreconf/source.mk
@@ -0,0 +1,162 @@
+#
+# 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/.
+
+#######################################################################
+# Master <component>-specific source import/export directories #
+#######################################################################
+
+#
+# <user_source_tree> master import/export directory prefix
+#
+
+ifndef SOURCE_PREFIX
+ ifndef BUILD_TREE
+ SOURCE_PREFIX = $(CORE_DEPTH)/../dist
+ else
+ SOURCE_PREFIX = $(BUILD_TREE)/dist
+ endif
+endif
+
+#
+# <user_source_tree> cross-platform (xp) master import/export directory
+#
+
+ifndef SOURCE_XP_DIR
+ SOURCE_XP_DIR = $(SOURCE_PREFIX)
+endif
+
+#
+# <user_source_tree> cross-platform (xp) import/export directories
+#
+
+SOURCE_CLASSES_DIR = $(SOURCE_XP_DIR)/classes
+SOURCE_CLASSES_DBG_DIR = $(SOURCE_XP_DIR)/classes_DBG
+SOURCE_XPHEADERS_DIR = $(SOURCE_XP_DIR)/public/$(MODULE)
+SOURCE_XPPRIVATE_DIR = $(SOURCE_XP_DIR)/private/$(MODULE)
+
+ifdef BUILD_OPT
+ IMPORT_XPCLASS_DIR = $(SOURCE_CLASSES_DIR)
+else
+ IMPORT_XPCLASS_DIR = $(SOURCE_CLASSES_DBG_DIR)
+endif
+
+#
+# <user_source_tree> machine-dependent (md) master import/export directory
+#
+
+ifndef SOURCE_MD_DIR
+ SOURCE_MD_DIR = $(SOURCE_PREFIX)/$(PLATFORM)
+endif
+
+#
+# <user_source_tree> machine-dependent (md) import/export directories
+#
+
+#This is where we install built executables and (for Windows only) DLLs.
+ifndef SOURCE_BIN_DIR
+ SOURCE_BIN_DIR = $(SOURCE_MD_DIR)/bin
+endif
+
+#This is where we install built libraries (.a, .so, .lib).
+ifndef SOURCE_LIB_DIR
+ SOURCE_LIB_DIR = $(SOURCE_MD_DIR)/lib
+endif
+
+# This is where NSPR header files are found.
+ifndef SOURCE_MDHEADERS_DIR
+ SOURCE_MDHEADERS_DIR = $(SOURCE_MD_DIR)/include
+endif
+
+#######################################################################
+# Master <component>-specific source release directories and files #
+#######################################################################
+
+#
+# <user_source_tree> source-side master release directory prefix
+# NOTE: export control policy enforced for XP and MD files released to
+# the staging area
+#
+
+ifeq ($(POLICY), domestic)
+ SOURCE_RELEASE_PREFIX = $(SOURCE_PREFIX)/release/domestic
+else
+ ifeq ($(POLICY), export)
+ SOURCE_RELEASE_PREFIX = $(SOURCE_PREFIX)/release/export
+ else
+ ifeq ($(POLICY), france)
+ SOURCE_RELEASE_PREFIX = $(SOURCE_PREFIX)/release/france
+ else
+#We shouldn't have to put another directory under here, but without it the perl
+#script for releasing doesn't find the directory. It thinks it doesn't exist.
+#So we're adding this no-policy directory so that the script for releasing works
+#in all casese when policy is not set. This doesn't affect where the final jar
+#files land, only where they are placed in the local tree when building the jar
+#files. When there is no policy, the jar files will still land in
+#<dist>/<module>/<date>/<platform> like they used to.
+ SOURCE_RELEASE_PREFIX = $(SOURCE_PREFIX)/release/no-policy
+ endif
+ endif
+endif
+
+#
+# <user_source_tree> cross-platform (xp) source-side master release directory
+#
+
+SOURCE_RELEASE_XP_DIR = $(SOURCE_RELEASE_PREFIX)
+
+#
+# <user_source_tree> cross-platform (xp) source-side release directories
+#
+
+SOURCE_RELEASE_CLASSES_DIR = classes
+SOURCE_RELEASE_CLASSES_DBG_DIR = classes_DBG
+SOURCE_RELEASE_XPHEADERS_DIR = include
+
+#
+# <user_source_tree> cross-platform (xp) JAR source-side release files
+#
+
+XPCLASS_JAR = xpclass.jar
+XPCLASS_DBG_JAR = xpclass_dbg.jar
+XPHEADER_JAR = xpheader.jar
+
+ifdef BUILD_OPT
+ SOURCE_RELEASE_XP_CLASSES_DIR = $(SOURCE_RELEASE_CLASSES_DIR)
+ IMPORT_XPCLASS_JAR = $(XPCLASS_JAR)
+else
+ SOURCE_RELEASE_XP_CLASSES_DIR = $(SOURCE_RELEASE_CLASSES_DBG_DIR)
+ IMPORT_XPCLASS_JAR = $(XPCLASS_DBG_JAR)
+endif
+
+#
+# <user_source_tree> machine-dependent (md) source-side master release directory
+#
+
+SOURCE_RELEASE_MD_DIR = $(PLATFORM)
+
+#
+# <user_source_tree> machine-dependent (md) source-side release directories
+#
+
+SOURCE_RELEASE_BIN_DIR = $(PLATFORM)/bin
+SOURCE_RELEASE_LIB_DIR = $(PLATFORM)/lib
+SOURCE_RELEASE_MDHEADERS_DIR = $(PLATFORM)/include
+SOURCE_RELEASE_SPEC_DIR = $(SOURCE_RELEASE_MD_DIR)
+
+#
+# <user_source_tree> machine-dependent (md) JAR/tar source-side release files
+#
+
+MDBINARY_JAR = mdbinary.jar
+MDHEADER_JAR = mdheader.jar
+
+
+# Where to put the results
+
+ifneq ($(RESULTS_DIR),)
+ RESULTS_DIR = $(RELEASE_TREE)/sectools/results
+endif
+
+MK_SOURCE = included
diff --git a/security/nss/coreconf/suffix.mk b/security/nss/coreconf/suffix.mk
new file mode 100644
index 000000000..584bdf55d
--- /dev/null
+++ b/security/nss/coreconf/suffix.mk
@@ -0,0 +1,67 @@
+#
+# 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/.
+
+#######################################################################
+# Master "Core Components" suffixes #
+#######################################################################
+
+#
+# Object suffixes (OS2 and WIN% override this)
+#
+ifndef OBJ_SUFFIX
+ OBJ_SUFFIX = .o
+endif
+
+#
+# Assembler source suffixes (OS2 and WIN% override this)
+#
+ifndef ASM_SUFFIX
+ ASM_SUFFIX = .s
+endif
+
+#
+# Library suffixes
+#
+STATIC_LIB_EXTENSION =
+
+ifndef DYNAMIC_LIB_EXTENSION
+ DYNAMIC_LIB_EXTENSION =
+endif
+
+
+ifndef STATIC_LIB_SUFFIX
+ STATIC_LIB_SUFFIX = .$(LIB_SUFFIX)
+endif
+
+
+ifndef DYNAMIC_LIB_SUFFIX
+ DYNAMIC_LIB_SUFFIX = .$(DLL_SUFFIX)
+endif
+
+# WIN% overridese this
+ifndef IMPORT_LIB_SUFFIX
+ IMPORT_LIB_SUFFIX =
+endif
+
+
+ifndef STATIC_LIB_SUFFIX_FOR_LINKING
+ STATIC_LIB_SUFFIX_FOR_LINKING = $(STATIC_LIB_SUFFIX)
+endif
+
+
+# WIN% overridese this
+ifndef DYNAMIC_LIB_SUFFIX_FOR_LINKING
+ DYNAMIC_LIB_SUFFIX_FOR_LINKING = $(DYNAMIC_LIB_SUFFIX)
+endif
+
+#
+# Program suffixes (OS2 and WIN% override this)
+#
+
+ifndef PROG_SUFFIX
+ PROG_SUFFIX =
+endif
+
+MK_SUFFIX = included
diff --git a/security/nss/coreconf/tree.mk b/security/nss/coreconf/tree.mk
new file mode 100644
index 000000000..f819abfef
--- /dev/null
+++ b/security/nss/coreconf/tree.mk
@@ -0,0 +1,52 @@
+#
+# 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/.
+
+#######################################################################
+# Master "Core Components" file system "release" prefixes #
+#######################################################################
+
+# Windows platforms override this. See WIN32.mk.
+ifndef RELEASE_TREE
+ ifdef BUILD_SHIP
+ ifdef USE_SHIPS
+ RELEASE_TREE = $(BUILD_SHIP)
+ else
+ RELEASE_TREE = /share/builds/components
+ endif
+ else
+ RELEASE_TREE = /share/builds/components
+ endif
+endif
+
+#
+# NOTE: export control policy enforced for XP and MD files
+# released to the binary release tree
+#
+
+ifeq ($(POLICY), domestic)
+ RELEASE_XP_DIR = domestic
+ RELEASE_MD_DIR = domestic/$(PLATFORM)
+else
+ ifeq ($(POLICY), export)
+ RELEASE_XP_DIR = export
+ RELEASE_MD_DIR = export/$(PLATFORM)
+ else
+ ifeq ($(POLICY), france)
+ RELEASE_XP_DIR = france
+ RELEASE_MD_DIR = france/$(PLATFORM)
+ else
+ RELEASE_XP_DIR =
+ RELEASE_MD_DIR = $(PLATFORM)
+ endif
+ endif
+endif
+
+
+REPORTER_TREE = $(subst \,\\,$(RELEASE_TREE))
+
+IMPORT_XP_DIR =
+IMPORT_MD_DIR = $(PLATFORM)
+
+MK_TREE = included
diff --git a/security/nss/coreconf/version.mk b/security/nss/coreconf/version.mk
new file mode 100644
index 000000000..c3e559cdc
--- /dev/null
+++ b/security/nss/coreconf/version.mk
@@ -0,0 +1,77 @@
+#
+# 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/.
+
+#######################################################################
+# Build master "Core Components" release version directory name #
+#######################################################################
+
+#
+# Always set CURRENT_VERSION_SYMLINK to the <current> symbolic link.
+#
+
+CURRENT_VERSION_SYMLINK = current
+
+
+#
+# For the sake of backwards compatibility (*sigh*) ...
+#
+
+ifndef VERSION
+ ifdef BUILD_NUM
+ VERSION = $(BUILD_NUM)
+ endif
+endif
+
+ifndef RELEASE_VERSION
+ ifdef BUILD_NUM
+ RELEASE_VERSION = $(BUILD_NUM)
+ endif
+endif
+
+#
+# If VERSION has still NOT been set on the command line,
+# as an environment variable, by the individual Makefile, or
+# by the <component>-specific "version.mk" file, set VERSION equal
+# to $(CURRENT_VERSION_SYMLINK).
+
+ifndef VERSION
+ VERSION = $(CURRENT_VERSION_SYMLINK)
+endif
+
+# If RELEASE_VERSION has still NOT been set on the command line,
+# as an environment variable, by the individual Makefile, or
+# by the <component>-specific "version.mk" file, automatically
+# generate the next available version number via a perl script.
+#
+
+ifndef RELEASE_VERSION
+ RELEASE_VERSION =
+endif
+
+#
+# Set <component>-specific versions for compiliation and linkage.
+#
+
+ifndef JAVA_VERSION
+ JAVA_VERSION = $(CURRENT_VERSION_SYMLINK)
+endif
+
+ifndef NETLIB_VERSION
+ NETLIB_VERSION = $(CURRENT_VERSION_SYMLINK)
+endif
+
+ifndef NSPR_VERSION
+ NSPR_VERSION = $(CURRENT_VERSION_SYMLINK)
+endif
+
+ifndef SECTOOLS_VERSION
+ SECTOOLS_VERSION = $(CURRENT_VERSION_SYMLINK)
+endif
+
+ifndef SECURITY_VERSION
+ SECURITY_VERSION = $(CURRENT_VERSION_SYMLINK)
+endif
+
+MK_VERSION = included
diff --git a/security/nss/coreconf/version.pl b/security/nss/coreconf/version.pl
new file mode 100644
index 000000000..d2a494289
--- /dev/null
+++ b/security/nss/coreconf/version.pl
@@ -0,0 +1,48 @@
+#!/usr/sbin/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/.
+
+# Compose lowercase alphabet
+@alphabet = ( "a", "b", "c", "d", "e", "f", "g", "h",
+ "i", "j", "k", "l", "m", "n", "o", "p",
+ "q", "r", "s", "t", "u", "v", "w", "x",
+ "y", "z" );
+
+# Compute year
+$year = (localtime)[5] + 1900;
+
+# Compute month
+$month = (localtime)[4] + 1;
+
+# Compute day
+$day = (localtime)[3];
+
+# Compute base build number
+$version = sprintf( "%d%02d%02d", $year, $month, $day );
+$directory = sprintf( "%s\/%s\/%d%02d%02d", $ARGV[0], $ARGV[1], $year, $month, $day );
+
+# Print out the name of the first version directory which does not exist
+#if( ! -e $directory )
+#{
+ print $version;
+#}
+#else
+#{
+# # Loop through combinations
+# foreach $ch1 (@alphabet)
+# {
+# foreach $ch2 (@alphabet)
+# {
+# $version = sprintf( "%d%02d%02d%s%s", $year, $month, $day, $ch1, $ch2 );
+# $directory = sprintf( "%s\/%s\/%d%02d%02d%s%s", $ARGV[0], $ARGV[1], $year, $month, $day, $ch1, $ch2 );
+# if( ! -e $directory )
+# {
+# print STDOUT $version;
+# exit;
+# }
+# }
+# }
+#}
+
diff --git a/security/nss/coreconf/werror.py b/security/nss/coreconf/werror.py
new file mode 100644
index 000000000..a37fad95f
--- /dev/null
+++ b/security/nss/coreconf/werror.py
@@ -0,0 +1,58 @@
+#!/usr/bin/env python
+
+import os
+import subprocess
+
+def main():
+ cc = os.environ.get('CC', 'cc')
+ sink = open(os.devnull, 'wb')
+ try:
+ cc_is_clang = 'clang' in subprocess.check_output([cc, '--version'], stderr=sink)
+ except OSError:
+ # We probably just don't have CC/cc.
+ return
+
+ def warning_supported(warning):
+ return subprocess.call([cc, '-x', 'c', '-E', '-Werror',
+ '-W%s' % warning, os.devnull], stdout=sink, stderr=sink) == 0
+ def can_enable():
+ # This would be a problem
+ if not warning_supported('all'):
+ return False
+
+ # If we aren't clang, make sure we have gcc 4.8 at least
+ if not cc_is_clang:
+ try:
+ v = subprocess.check_output([cc, '-dumpversion'], stderr=sink)
+ v = v.strip(' \r\n').split('.')
+ if v[0] < 4 or (v[0] == 4 and v[1] < 8):
+ # gcc 4.8 minimum
+ return False
+ except OSError:
+ return False
+ return True
+
+ if not can_enable():
+ print('-DNSS_NO_GCC48')
+ return
+
+ print('-Werror')
+ print('-Wall')
+
+ def set_warning(warning, contra=''):
+ if warning_supported(warning):
+ print('-W%s%s' % (contra, warning))
+
+ if cc_is_clang:
+ # clang is unable to handle glib's expansion of strcmp and similar for
+ # optimized builds, so disable the resulting errors.
+ # See https://llvm.org/bugs/show_bug.cgi?id=20144
+ for w in ['array-bounds', 'unevaluated-expression',
+ 'parentheses-equality']:
+ set_warning(w, 'no-')
+ print('-Qunused-arguments')
+
+ # set_warning('shadow') # Bug 1309068
+
+if __name__ == '__main__':
+ main()
diff --git a/security/nss/coreconf/zlib.mk b/security/nss/coreconf/zlib.mk
new file mode 100644
index 000000000..a8504b78c
--- /dev/null
+++ b/security/nss/coreconf/zlib.mk
@@ -0,0 +1,17 @@
+#
+# 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/.
+
+# Configuration information for linking against zlib.
+
+# If a platform has a system zlib, set USE_SYSTEM_ZLIB to 1 and
+# ZLIB_LIBS to the linker command-line arguments for the system zlib
+# (for example, -lz) in the platform's config file in coreconf.
+ifdef USE_SYSTEM_ZLIB
+OS_LIBS += $(ZLIB_LIBS)
+else
+ZLIB_LIBS = $(DIST)/lib/$(LIB_PREFIX)zlib.$(LIB_SUFFIX)
+EXTRA_LIBS += $(ZLIB_LIBS)
+endif
+