summaryrefslogtreecommitdiffstats
path: root/security/nss/coreconf/rules.mk
diff options
context:
space:
mode:
Diffstat (limited to 'security/nss/coreconf/rules.mk')
-rw-r--r--security/nss/coreconf/rules.mk464
1 files changed, 464 insertions, 0 deletions
diff --git a/security/nss/coreconf/rules.mk b/security/nss/coreconf/rules.mk
new file mode 100644
index 0000000000..a341b8385a
--- /dev/null
+++ b/security/nss/coreconf/rules.mk
@@ -0,0 +1,464 @@
+#
+# 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 ###
+### ###
+#######################################################################
+
+#######################################################################
+# Dont't use double-colon rules! #
+#######################################################################
+
+ifndef HAVE_ALL_TARGET
+all: libs
+endif
+
+autobuild:
+ifeq ($(AUTOCLEAN),1)
+ $(MAKE) clean
+endif
+ $(MAKE) all
+ $(MAKE) install
+
+platform:
+ @echo $(OBJDIR_NAME)
+
+ifeq (,$(filter-out _WIN%,$(NS_USE_GCC)_$(OS_TARGET)))
+USE_NT_C_SYNTAX=1
+endif
+
+# For whatever reason, "." can't be handled using make conditionals.
+# Based on automake's SUBDIRS "." handling.
+ifdef DIRS
+ifndef IGNORE_DIRS
+ifneq (,$(filter .,$(DIRS)))
+TARGETS = $(NULL)
+ALL_TRASH = $(NULL)
+endif
+
+$(DIRS):
+ $(IGNORE_ERROR)@if [ "$@" != "." ]; then \
+ $(MAKE) -C $@ $(MAKECMDGOALS) ; \
+ else \
+ IGNORE_DIRS=1 $(MAKE) -C $@ $(MAKECMDGOALS) ; \
+ fi
+ @$(CLICK_STOPWATCH)
+endif
+endif
+
+export: $(DIRS) private_export
+
+release_export: $(DIRS)
+
+libs program install: $(DIRS) $(TARGETS)
+ifneq ($(LIBRARY),)
+ $(INSTALL) -m 664 $(LIBRARY) $(SOURCE_LIB_DIR)
+endif
+ifneq ($(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
+ifneq ($(IMPORT_LIBRARY),)
+ $(INSTALL) -m 775 $(IMPORT_LIBRARY) $(SOURCE_LIB_DIR)
+endif
+ifneq ($(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
+ifneq ($(PROGRAMS),)
+ $(INSTALL) -m 775 $(PROGRAMS) $(SOURCE_BIN_DIR)
+endif
+
+check: $(DIRS)
+
+clean clobber: $(DIRS)
+ifneq (,$(ALL_TRASH))
+ rm -rf $(ALL_TRASH)
+endif
+
+realclean clobber_all: $(DIRS)
+ rm -rf $(wildcard *.OBJ) dist $(ALL_TRASH)
+
+release_clean:
+ rm -rf $(SOURCE_XP_DIR)/release/$(RELEASE_MD_DIR)
+
+release: release_clean release_export release_md
+
+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:: $(DIRS)
+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
+
+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
+
+.SECONDEXPANSION:
+%/d:
+ @$(MAKE_OBJDIR)
+
+define PROGRAM_template
+
+ifndef $(1)_OBJS
+ifdef LIBRARY_NAME
+ $(1)_OBJS := $$(patsubst $$(PROG_PREFIX)%,%,$$(patsubst %$$(PROG_SUFFIX),%,$(1)))$$(OBJ_SUFFIX)
+endif
+ifdef PROGRAMS
+ $(1)_OBJS := $$(patsubst $$(PROG_PREFIX)%,%,$$(patsubst %$$(PROG_SUFFIX),%,$(1)))$$(OBJ_SUFFIX)
+endif
+ifndef $(1)_OBJS
+ $(1)_OBJS := $$(OBJS)
+endif
+endif
+
+$(1): $$($(1)_OBJS) $$(EXTRA_LIBS) | $$$$(@D)/d
+ rm -f $$@
+ifeq (,$$(filter-out _WIN%,$$(NS_USE_GCC)_$$(OS_TARGET)))
+ $$(MKPROG) $$($(1)_OBJS) -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) $$($(1)_OBJS) $$(LDFLAGS) $$(EXTRA_LIBS) $$(EXTRA_SHARED_LIBS) $$(OS_LIBS)
+endif
+endef # PROGRAM_template
+
+ifdef PROGRAM
+$(eval $(call PROGRAM_template,$(PROGRAM)))
+else
+ifdef PROGRAMS
+$(foreach prog,$(PROGRAMS),$(eval $(call PROGRAM_template,$(prog))))
+endif
+endif
+
+get_objs:
+ @echo $(OBJS)
+
+$(LIBRARY): $(OBJS) | $$(@D)/d
+ 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): $(SHARED_LIBRARY)
+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) | $$(@D)/d
+ 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) | $$(@D)/d
+# 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) | $$(@D)/d
+ $(PROCESS_MAP_FILE)
+
+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 | $$(@D)/d
+ifdef USE_NT_C_SYNTAX
+ $(CC) -Fo$@ -c $(CSTD) $(CFLAGS) $(call core_abspath,$<)
+else
+ifdef NEED_ABSOLUTE_PATH
+ $(CC) -o $@ -c $(CSTD) $(CFLAGS) $(call core_abspath,$<)
+else
+ $(CC) -o $@ -c $(CSTD) $(CFLAGS) $<
+endif
+endif
+
+$(PROG_PREFIX)%$(OBJ_SUFFIX): %.c | $$(@D)/d
+ifdef USE_NT_C_SYNTAX
+ $(CC) -Fo$@ -c $(CSTD) $(CFLAGS) $(call core_abspath,$<)
+else
+ifdef NEED_ABSOLUTE_PATH
+ $(CC) -o $@ -c $(CSTD) $(CFLAGS) $(call core_abspath,$<)
+else
+ $(CC) -o $@ -c $(CSTD) $(CFLAGS) $<
+endif
+endif
+
+ifneq (,$(filter-out _WIN%,$(NS_USE_GCC)_$(OS_TARGET)))
+$(OBJDIR)/$(PROG_PREFIX)%$(OBJ_SUFFIX): %.s | $$(@D)/d
+ $(AS) -o $@ $(ASFLAGS) -c $<
+endif
+
+$(OBJDIR)/$(PROG_PREFIX)%$(OBJ_SUFFIX): %.asm | $$(@D)/d
+ $(AS) -Fo$@ $(ASFLAGS) -c $<
+
+$(OBJDIR)/$(PROG_PREFIX)%$(OBJ_SUFFIX): %.S | $$(@D)/d
+ $(AS) -o $@ $(ASFLAGS) -c $<
+
+$(OBJDIR)/$(PROG_PREFIX)%: %.cpp | $$(@D)/d
+ifdef USE_NT_C_SYNTAX
+ $(CCC) -Fo$@ -c $(CXXSTD) $(CFLAGS) $(CXXFLAGS) $(call core_abspath,$<)
+else
+ifdef NEED_ABSOLUTE_PATH
+ $(CCC) -o $@ -c $(CXXSTD) $(CFLAGS) $(CXXFLAGS) $(call core_abspath,$<)
+else
+ $(CCC) -o $@ -c $(CXXSTD) $(CFLAGS) $(CXXFLAGS) $<
+endif
+endif
+
+define compile_ccc_pattern_RULE
+
+$$(OBJDIR)/$$(PROG_PREFIX)%$$(OBJ_SUFFIX): %.$(1) | $$$$(@D)/d
+ifdef STRICT_CPLUSPLUS_SUFFIX
+ echo "#line 1 \"$$<\"" | cat - $$< > $$(OBJDIR)/t_$$*.cc
+ $$(CCC) -o $$@ -c $$(CXXSTD) $$(CFLAGS) $$(CXXFLAGS) $$(OBJDIR)/t_$$*.cc
+ rm -f $$(OBJDIR)/t_$$*.cc
+else
+ifdef USE_NT_C_SYNTAX
+ $$(CCC) -Fo$$@ -c $$(CXXSTD) $$(CFLAGS) $$(CXXFLAGS) $$(call core_abspath,$$<)
+else
+ifdef NEED_ABSOLUTE_PATH
+ $$(CCC) -o $$@ -c $$(CXXSTD) $$(CFLAGS) $$(CXXFLAGS) $$(call core_abspath,$$<)
+else
+ $$(CCC) -o $$@ -c $$(CXXSTD) $$(CFLAGS) $$(CXXFLAGS) $$<
+endif
+endif
+endif #STRICT_CPLUSPLUS_SUFFIX
+endef # compile_ccc_pattern_RULE
+
+$(eval $(call compile_ccc_pattern_RULE,cc))
+$(eval $(call compile_ccc_pattern_RULE,cpp))
+
+%.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 $@
+
+define copy_varlist_into_dir_RULE
+ifdef $(2)
+ifneq (,$$(strip $$($(2))))
+$(3)/%: %
+ $$(INSTALL) -m 444 $$^ $(3)
+
+$(1): $$(addprefix $(3)/,$$($(2))) | $(3)/d
+
+.NOTPARALLEL: $(1)
+endif
+else
+$(1):
+endif
+endef # copy_varlist_into_dir_RULE
+
+# export rule
+$(eval $(call copy_varlist_into_dir_RULE,export,EXPORTS,$(SOURCE_XPHEADERS_DIR)))
+
+# private_export rule
+$(eval $(call copy_varlist_into_dir_RULE,private_export,PRIVATE_EXPORTS,$(SOURCE_XPPRIVATE_DIR)))
+
+##########################################################################
+### 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
+
+check: $(REGRESSION_SPEC) | $(TESTS_DIR)/d
+ cd $(PLATFORM); \
+ ../$(SOURCE_MD_DIR)/bin/regress$(PROG_SUFFIX) specfile=../$(REGRESSION_SPEC) progress $(EXTRA_REGRESS_OPTIONS)
+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
+check:
+ @echo "Error: you didn't specify REGRESSION_SPEC in your manifest.mn file!"
+endif
+
+# release_export rule
+$(eval $(call copy_varlist_into_dir_RULE,release_export,EXPORTS,$(SOURCE_RELEASE_XP_DIR)/include))
+
+#
+# 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 .html .asm .dep
+
+#
+# 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 $(DIRS)
+