📄 rules.mk
字号:
## The contents of this file are subject to the Mozilla Public# License Version 1.1 (the "License"); you may not use this file# except in compliance with the License. You may obtain a copy of# the License at http://www.mozilla.org/MPL/# # Software distributed under the License is distributed on an "AS# IS" basis, WITHOUT WARRANTY OF ANY KIND, either express or# implied. See the License for the specific language governing# rights and limitations under the License.# # The Original Code is the Netscape security libraries.# # The Initial Developer of the Original Code is Netscape# Communications Corporation. Portions created by Netscape are # Copyright (C) 1994-2000 Netscape Communications Corporation. All# Rights Reserved.# # Contributor(s):# # Alternatively, the contents of this file may be used under the# terms of the GNU General Public License Version 2 or later (the# "GPL"), in which case the provisions of the GPL are applicable # instead of those above. If you wish to allow use of your # version of this file only under the terms of the GPL and not to# allow others to use your version of this file under the MPL,# indicate your decision by deleting the provisions above and# replace them with the notice and other provisions required by# the GPL. If you do not delete the provisions above, a recipient# may use your version of this file under either the MPL or the# GPL.########################################################################### ###### 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 program installifeq ($(AUTOCLEAN),1)autobuild:: clean export private_export libs program installelseautobuild:: export private_export libs program installendifplatform:: @echo $(OBJDIR_NAME)## 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)|"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)endififdef SHARED_LIBRARY $(INSTALL) -m 775 $(SHARED_LIBRARY) $(SOURCE_LIB_DIR)endififdef IMPORT_LIBRARY $(INSTALL) -m 775 $(IMPORT_LIBRARY) $(SOURCE_LIB_DIR)endififdef PURE_LIBRARY $(INSTALL) -m 775 $(PURE_LIBRARY) $(SOURCE_LIB_DIR)endififdef PROGRAM $(INSTALL) -m 775 $(PROGRAM) $(SOURCE_BIN_DIR)endififdef 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)#ifdef ALL_PLATFORMS#all_platforms:: $(NFSPWD)# @d=`$(NFSPWD)`; \# if test ! -d LOGS; then rm -rf LOGS; mkdir LOGS; fi; \# for h in $(PLATFORM_HOSTS); do \# echo "On $$h: $(MAKE) $(ALL_PLATFORMS) >& LOGS/$$h.log";\# rsh $$h -n "(chdir $$d; \# $(MAKE) $(ALL_PLATFORMS) >& LOGS/$$h.log; \# echo DONE) &" 2>&1 > LOGS/$$h.pid & \# sleep 1; \# done##$(NFSPWD):# cd $(@D); $(MAKE) $(@F)#endif######################################################################## 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_cpdistdirrelease_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 chokeifdef BUILD_OPTrelease_classes:: $(INSTALL) -m 444 $(subst $$,\$$,$(RELEASE_FILES)) $(SOURCE_RELEASE_PREFIX)/$(SOURCE_RELEASE_CLASSES_DIR)/$(PACKAGE)elserelease_classes:: $(INSTALL) -m 444 $(subst $$,\$$,$(RELEASE_DBG_FILES)) $(SOURCE_RELEASE_PREFIX)/$(SOURCE_RELEASE_CLASSES_DBG_DIR)/$(PACKAGE)endifendififneq ($(POLICY),)release_policy::ifdef LIBRARY -$(PLCYPATCH) $(PLCYPATCH_ARGS) $(LIBRARY)endififdef SHARED_LIBRARY -$(PLCYPATCH) $(PLCYPATCH_ARGS) $(SHARED_LIBRARY)endififdef IMPORT_LIBRARY -$(PLCYPATCH) $(PLCYPATCH_ARGS) $(IMPORT_LIBRARY)endififdef PURE_LIBRARY -$(PLCYPATCH) $(PLCYPATCH_ARGS) $(PURE_LIBRARY)endififdef PROGRAM -$(PLCYPATCH) $(PLCYPATCH_ARGS) $(PROGRAM)endififdef PROGRAMS -$(PLCYPATCH) $(PLCYPATCH_ARGS) $(PROGRAMS)endif +$(LOOP_OVER_DIRS)elserelease_policy:: +$(LOOP_OVER_DIRS)endifrelease_md::ifdef LIBRARY $(INSTALL) -m 444 $(LIBRARY) $(SOURCE_RELEASE_PREFIX)/$(SOURCE_RELEASE_LIB_DIR)endififdef SHARED_LIBRARY $(INSTALL) -m 555 $(SHARED_LIBRARY) $(SOURCE_RELEASE_PREFIX)/$(SOURCE_RELEASE_LIB_DIR)endififdef IMPORT_LIBRARY $(INSTALL) -m 555 $(IMPORT_LIBRARY) $(SOURCE_RELEASE_PREFIX)/$(SOURCE_RELEASE_LIB_DIR)endififdef PURE_LIBRARY $(INSTALL) -m 555 $(PURE_LIBRARY) $(SOURCE_RELEASE_PREFIX)/$(SOURCE_RELEASE_LIB_DIR)endififdef PROGRAM $(INSTALL) -m 555 $(PROGRAM) $(SOURCE_RELEASE_PREFIX)/$(SOURCE_RELEASE_BIN_DIR)endififdef PROGRAMS $(INSTALL) -m 555 $(PROGRAMS) $(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 ($(OS_ARCH),WINNT)ifeq ($(OS_TARGET),WIN16) echo system windows >w16link echo option map >>w16link echo option oneautodata >>w16link echo option heapsize=32K >>w16link echo debug watcom all >>w16link echo name $@ >>w16link echo file >>w16link echo $(W16OBJS) , >>w16link echo $(W16LDFLAGS) >> w16link echo library >>w16link echo winsock.lib >>w16link $(LINK) @w16link. rm w16linkelse $(MKPROG) $(OBJS) -Fe$@ -link $(LDFLAGS) $(EXTRA_LIBS) $(EXTRA_SHARED_LIBS) $(OS_LIBS)endifelse $(MKPROG) -o $@ $(CFLAGS) $(OBJS) $(LDFLAGS) $(EXTRA_LIBS) $(EXTRA_SHARED_LIBS) $(OS_LIBS)endififneq ($(POLICY),) -$(PLCYPATCH) $(PLCYPATCH_ARGS) $@endif$(LIBRARY): $(OBJS) @$(MAKE_OBJDIR) rm -f $@ $(AR) $(OBJS) $(RANLIB) $@ifeq ($(OS_TARGET), WIN16)$(IMPORT_LIBRARY): $(SHARED_LIBRARY) wlib +$(SHARED_LIBRARY)endif$(SHARED_LIBRARY): $(OBJS) @$(MAKE_OBJDIR) rm -f $@ifeq ($(OS_ARCH)$(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)elseifeq ($(OS_ARCH), WINNT)ifeq ($(OS_TARGET), WIN16) echo system windows dll initinstance >w16link echo option map >>w16link echo option oneautodata >>w16link echo option heapsize=32K >>w16link echo debug watcom all >>w16link echo name $@ >>w16link echo file >>w16link echo $(W16OBJS) >>w16link echo $(W16LIBS) >>w16link echo libfile libentry >>w16link $(LINK) @w16link. rm w16linkelse $(LINK_DLL) -MAP $(DLLBASE) $(OBJS) $(EXTRA_LIBS) $(EXTRA_SHARED_LIBS) $(OS_LIBS) $(LD_LIBS)endifelse $(MKSHLIB) -o $@ $(OBJS) $(LD_LIBS) $(EXTRA_LIBS) $(EXTRA_SHARED_LIBS) chmod +x $@endifendififneq ($(POLICY),) -$(PLCYPATCH) $(PLCYPATCH_ARGS) $@endif$(PURE_LIBRARY): rm -f $@ifneq ($(OS_ARCH), WINNT) $(AR) $(OBJS)endif $(RANLIB) $@ifeq ($(OS_ARCH), WINNT)$(RES): $(RESNAME) @$(MAKE_OBJDIR) $(RC) -Fo$(RES) $(RESNAME) @echo $(RES) finishedendif$(OBJDIR)/$(PROG_PREFIX)%$(PROG_SUFFIX): $(OBJDIR)/$(PROG_PREFIX)%$(OBJ_SUFFIX) @$(MAKE_OBJDIR)ifeq ($(OS_ARCH),WINNT) $(MKPROG) $(OBJDIR)/$(PROG_PREFIX)$*$(OBJ_SUFFIX) -Fe$@ -link \ $(LDFLAGS) $(EXTRA_LIBS) $(EXTRA_SHARED_LIBS) $(OS_LIBS)else $(MKPROG) -o $@ $(OBJDIR)/$(PROG_PREFIX)$*$(OBJ_SUFFIX) \ $(LDFLAGS) $(EXTRA_LIBS) $(EXTRA_SHARED_LIBS) $(OS_LIBS)endififdef HAVE_PURIFY$(OBJDIR)/$(PROG_PREFIX)%.pure: $(OBJDIR)/$(PROG_PREFIX)%$(OBJ_SUFFIX) @$(MAKE_OBJDIR)ifeq ($(OS_ARCH),WINNT) $(PURIFY) $(CC) -Fo$@ -c $(CFLAGS) $(OBJDIR)/$(PROG_PREFIX)$*$(OBJ_SUFFIX) $(PURELDFLAGS)else $(PURIFY) $(CC) -o $@ $(CFLAGS) $(OBJDIR)/$(PROG_PREFIX)$*$(OBJ_SUFFIX) $(PURELDFLAGS)endifendifWCCFLAGS1 := $(subst /,\\,$(CFLAGS))WCCFLAGS2 := $(subst -I,-i=,$(WCCFLAGS1))WCCFLAGS3 := $(subst -D,-d,$(WCCFLAGS2))$(OBJDIR)/$(PROG_PREFIX)%$(OBJ_SUFFIX): %.c @$(MAKE_OBJDIR)ifeq ($(OS_ARCH), WINNT)ifeq ($(OS_TARGET), WIN16) echo $(WCCFLAGS3) >w16wccf $(CC) -zq -fo$(OBJDIR)\\$(PROG_PREFIX)$*$(OBJ_SUFFIX) @w16wccf $*.c rm w16wccfelse $(CC) -Fo$@ -c $(CFLAGS) $*.cendifelse $(CC) -o $@ -c $(CFLAGS) $*.cendififneq ($(OS_ARCH), WINNT)$(OBJDIR)/$(PROG_PREFIX)%$(OBJ_SUFFIX): %.s @$(MAKE_OBJDIR) $(AS) -o $@ $(ASFLAGS) -c $*.sendif$(OBJDIR)/$(PROG_PREFIX)%$(OBJ_SUFFIX): %.asm @$(MAKE_OBJDIR) $(AS) -Fo$@ $(ASFLAGS) -c $*.asm$(OBJDIR)/$(PROG_PREFIX)%$(OBJ_SUFFIX): %.S @$(MAKE_OBJDIR) $(AS) -o $@ $(ASFLAGS) -c $*.S$(OBJDIR)/$(PROG_PREFIX)%: %.cpp @$(MAKE_OBJDIR)ifeq ($(OS_ARCH), WINNT) $(CCC) -Fo$@ -c $(CFLAGS) $<else $(CCC) -o $@ -c $(CFLAGS) $<endif## Please keep the next two rules in sync.#$(OBJDIR)/$(PROG_PREFIX)%$(OBJ_SUFFIX): %.cc @$(MAKE_OBJDIR) $(CCC) -o $@ -c $(CFLAGS) $*.cc$(OBJDIR)/$(PROG_PREFIX)%$(OBJ_SUFFIX): %.cpp @$(MAKE_OBJDIR)ifdef STRICT_CPLUSPLUS_SUFFIX echo "#line 1 \"$*.cpp\"" | cat - $*.cpp > $(OBJDIR)/t_$*.cc $(CCC) -o $@ -c $(CFLAGS) $(OBJDIR)/t_$*.cc rm -f $(OBJDIR)/t_$*.ccelseifeq ($(OS_ARCH),WINNT) $(CCC) -Fo$@ -c $(CFLAGS) $*.cppelse $(CCC) -o $@ -c $(CFLAGS) $*.cppendifendif #STRICT_CPLUSPLUS_SUFFIX%.i: %.cppifeq ($(OS_TARGET), WIN16) echo $(WCCFLAGS3) >w16wccf $(CCC) -pl -fo=$* @w16wccf $*.cpp rm w16wccfelse $(CCC) -C -E $(CFLAGS) $< > $*.iendif%.i: %.cifeq ($(OS_TARGET), WIN16) echo $(WCCFLAGS3) >w16wccf $(CC) -pl -fo=$* @w16wccf $*.c rm w16wccfelseifeq ($(OS_ARCH),WINNT)
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -