📄 rules.mk
字号:
$(CC) -C /P $(CFLAGS) $< else $(CC) -C -E $(CFLAGS) $< > $*.iendifendififneq ($(OS_ARCH), WINNT)%.i: %.s $(CC) -C -E $(CFLAGS) $< > $*.iendif%: %.pl rm -f $@; cp $*.pl $@; chmod +x $@%: %.sh rm -f $@; cp $*.sh $@; chmod +x $@ifdef DIRS$(DIRS):: @if test -d $@; then \ set $(EXIT_ON_ERROR); \ echo "cd $@; $(MAKE)"; \ cd $@; $(MAKE); \ set +e; \ else \ echo "Skipping non-directory $@..."; \ fi; \ $(CLICK_STOPWATCH)endif################################################################################# 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_GENifneq ($(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)endifJAVA_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)endifall:: exportclobber:: rm -f $(SOURCE_XP_DIR)/classes/$(PACKAGE)/*.classendifendif## 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 JDIRSifneq ($(JAVAC),)ifdef NETLIBDEPTH CORE_DEPTH := $(NETLIBDEPTH)endifexport:: $(JAVA_DESTPATH) $(JAVA_DESTPATH)/$(PACKAGE) @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); \ doneendifendif## 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)endififdef NETLIBDEPTH CORE_DEPTH := $(NETLIBDEPTH)endifJDK_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)endifendifendif## 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)endififdef NETLIBDEPTH CORE_DEPTH := $(NETLIBDEPTH)endifJRI_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)endifendifendif## 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" ; \ cmd="perl $(CORE_DEPTH)/coreconf/jniregen.pl $(PERLARG) \ -d $(JAVA_DESTPATH) $(JNI_GEN)"; \ echo $$cmd; \ list=`$$cmd`; \ if test "$${list}x" != "x"; then \ echo $(JAVAH) -jni -d $(JNI_GEN_DIR) $$list; \ $(JAVAH) -jni -d $(JNI_GEN_DIR) $$list; \ fi \ fiendifendif## 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%.h $(JMC_GEN_DIR)/M%.c @$(MAKE_OBJDIR) $(CC) -o $@ -c $(CFLAGS) $(JMC_GEN_DIR)/M$*.cexport:: $(JMC_HEADERS) $(JMC_STUBS)endifendif## Copy each element of EXPORTS to $(SOURCE_XP_DIR)/public/$(MODULE)/#PUBLIC_EXPORT_DIR = $(SOURCE_XP_DIR)/public/$(MODULE)ifeq ($(OS_ARCH),WINNT)ifeq ($(OS_TARGET),WIN16)PUBLIC_EXPORT_DIR = $(SOURCE_XP_DIR)/public/win16endifendififneq ($(EXPORTS),)$(PUBLIC_EXPORT_DIR):: @if test ! -d $@; then \ echo Creating $@; \ $(NSINSTALL) -D $@; \ fiexport:: $(EXPORTS) $(PUBLIC_EXPORT_DIR) $(INSTALL) -m 444 $(EXPORTS) $(PUBLIC_EXPORT_DIR)endif# Duplicate export rule for private exports, with different directoriesPRIVATE_EXPORT_DIR = $(SOURCE_XP_DIR)/private/$(MODULE)ifeq ($(OS_ARCH),WINNT)ifeq ($(OS_TARGET),WIN16)PRIVATE_EXPORT_DIR = $(SOURCE_XP_DIR)/public/win16endifendififneq ($(PRIVATE_EXPORTS),)$(PRIVATE_EXPORT_DIR):: @if test ! -d $@; then \ echo Creating $@; \ $(NSINSTALL) -D $@; \ fiprivate_export:: $(PRIVATE_EXPORTS) $(PRIVATE_EXPORT_DIR) $(INSTALL) -m 444 $(PRIVATE_EXPORTS) $(PRIVATE_EXPORT_DIR)elseprivate_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_CONFIG)$(CPU_TAG)$(COMPILER_TAG)$(IMPL_STRATEGY)ifneq ($(REGRESSION_SPEC),)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); \ fiifneq ($(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'"endifelsetests:: @echo Error: you didn't specify REGRESSION_SPEC in your manifest.mn file!;endif# Duplicate export rule for releases, with different directoriesifneq ($(EXPORTS),)$(SOURCE_RELEASE_XP_DIR)/include:: @if test ! -d $@; then \ echo Creating $@; \ $(NSINSTALL) -D $@; \ firelease_export:: $(EXPORTS) $(SOURCE_RELEASE_XP_DIR)/include $(INSTALL) -m 444 $(EXPORTS) $(SOURCE_RELEASE_XP_DIR)/includeendif################################################################################-include $(DEPENDENCIES)ifneq ($(OS_ARCH),WINNT)# Can't use sed because of its 4000-char line length limit, so resort to perl.DEFAULT: @perl -e ' \ 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); \ }'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 preceeding 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 cd $(MKDEPEND_DIR); $(MAKE)ifdef OBJSdepend:: $(MKDEPEND) $(MKDEPENDENCIES)elsedepend::endif +$(LOOP_OVER_DIRS)dependclean:: rm -f $(MKDEPENDENCIES) +$(LOOP_OVER_DIRS)#-include $(NSINSTALL_DIR)/$(OBJDIR)/depend.mkelsedepend::endif################################################################################# 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## 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 realclean release $(OBJDIR) $(DIRS)
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -