diff options
Diffstat (limited to 'security/nss/coreconf/rules.mk')
-rw-r--r-- | security/nss/coreconf/rules.mk | 462 |
1 files changed, 462 insertions, 0 deletions
diff --git a/security/nss/coreconf/rules.mk b/security/nss/coreconf/rules.mk new file mode 100644 index 0000000000..dc72e9cef6 --- /dev/null +++ b/security/nss/coreconf/rules.mk @@ -0,0 +1,462 @@ +# +# 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 +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) + |