⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 rules.mk

📁 Netscape NSPR库源码
💻 MK
字号:
#! gmake# # 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 Portable Runtime (NSPR).# # The Initial Developer of the Original Code is Netscape# Communications Corporation.  Portions created by Netscape are # Copyright (C) 1998-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.# ################################################################################# We have a 4 pass build process:## Pass 1. export - Create generated headers and stubs. Publish public headers to#		dist/<arch>/include.## Pass 2. libs - Create libraries. Publish libraries to dist/<arch>/lib.## Pass 3. all - Create programs. ## Pass 4. install - Publish programs to dist/<arch>/bin.## Parameters to this makefile (set these before including):## 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   -- .c 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)#################################################################################ifndef topsrcdirtopsrcdir=$(MOD_DEPTH)endififndef srcdirsrcdir=.endififndef NSPR_CONFIG_MKinclude $(topsrcdir)/config/config.mkendififdef USE_AUTOCONFifdef CROSS_COMPILEifdef INTERNAL_TOOLSCC=$(HOST_CC)CCC=$(HOST_CXX)CFLAGS=$(HOST_CFLAGS)CXXFLAGS=$(HOST_CXXFLAGS)endifendifendif## This makefile contains rules for building the following kinds of# libraries:# - LIBRARY: a static (archival) library# - SHARED_LIBRARY: a shared (dynamic link) library# - IMPORT_LIBRARY: an import library, used only on Windows and OS/2## The names of these libraries can be generated by simply specifying# LIBRARY_NAME and LIBRARY_VERSION.#ifdef LIBRARY_NAMEifeq (,$(filter-out WINNT OS2,$(OS_ARCH)))## Win95, Win16, and OS/2 require library names conforming to the 8.3 rule.# other platforms do not.#ifeq (,$(filter-out WIN95 OS2,$(OS_TARGET)))LIBRARY		= $(OBJDIR)/$(LIBRARY_NAME)$(LIBRARY_VERSION)_s.$(LIB_SUFFIX)SHARED_LIBRARY	= $(OBJDIR)/$(LIBRARY_NAME)$(LIBRARY_VERSION).$(DLL_SUFFIX)IMPORT_LIBRARY	= $(OBJDIR)/$(LIBRARY_NAME)$(LIBRARY_VERSION).$(LIB_SUFFIX)elseLIBRARY		= $(OBJDIR)/lib$(LIBRARY_NAME)$(LIBRARY_VERSION)_s.$(LIB_SUFFIX)SHARED_LIBRARY	= $(OBJDIR)/lib$(LIBRARY_NAME)$(LIBRARY_VERSION).$(DLL_SUFFIX)IMPORT_LIBRARY	= $(OBJDIR)/lib$(LIBRARY_NAME)$(LIBRARY_VERSION).$(LIB_SUFFIX)endifelseLIBRARY		= $(OBJDIR)/lib$(LIBRARY_NAME)$(LIBRARY_VERSION).$(LIB_SUFFIX)ifeq ($(OS_ARCH)$(OS_RELEASE), AIX4.1)SHARED_LIBRARY	= $(OBJDIR)/lib$(LIBRARY_NAME)$(LIBRARY_VERSION)_shr.aelseifdef MKSHLIBSHARED_LIBRARY	= $(OBJDIR)/lib$(LIBRARY_NAME)$(LIBRARY_VERSION).$(DLL_SUFFIX)endifendifendifendififndef TARGETSifeq (,$(filter-out WINNT OS2,$(OS_ARCH)))TARGETS		= $(LIBRARY) $(SHARED_LIBRARY) $(IMPORT_LIBRARY)elseTARGETS		= $(LIBRARY) $(SHARED_LIBRARY)endifendif## OBJS is the list of object files.  It can be constructed by# specifying CSRCS (list of C source files) and ASFILES (list# of assembly language source files).#ifndef OBJSOBJS		= $(addprefix $(OBJDIR)/,$(CSRCS:.c=.$(OBJ_SUFFIX))) \		  $(addprefix $(OBJDIR)/,$(ASFILES:.$(ASM_SUFFIX)=.$(OBJ_SUFFIX)))endififeq ($(OS_ARCH), WINNT)OBJS += $(RES)endififeq ($(MOZ_OS2_TOOLS),VACPP)EXTRA_LIBS := $(patsubst -l%,$(DIST)/lib/%.$(LIB_SUFFIX),$(EXTRA_LIBS))endifALL_TRASH		= $(TARGETS) $(OBJS) $(filter-out . .., $(OBJDIR)) LOGS TAGS $(GARBAGE) \			  $(NOSUCHFILE) \			  so_locationsifdef DIRSLOOP_OVER_DIRS		=					\	@for d in $(DIRS); do					\		if test -d $$d; then				\			set -e;					\			echo "cd $$d; $(MAKE) $@";		\			$(MAKE) -C $$d $@;			\			set +e;					\		else						\			echo "Skipping non-directory $$d...";	\		fi;						\	doneendif################################################################################all:: exportexport::	+$(LOOP_OVER_DIRS)libs:: exportinstall:: exportclean::	rm -rf $(OBJS) so_locations $(NOSUCHFILE) $(GARBAGE)	+$(LOOP_OVER_DIRS)clobber::	rm -rf $(OBJS) $(TARGETS) $(filter-out . ..,$(OBJDIR)) $(GARBAGE) so_locations $(NOSUCHFILE)	+$(LOOP_OVER_DIRS)realclean clobber_all::	rm -rf $(wildcard *.OBJ *.OBJD) dist $(ALL_TRASH)	+$(LOOP_OVER_DIRS)distclean::	rm -rf $(wildcard *.OBJ *.OBJD) dist $(ALL_TRASH) $(DIST_GARBAGE)	+$(LOOP_OVER_DIRS)real_install:: $(RELEASE_BINS) $(RELEASE_HEADERS) $(RELEASE_LIBS)ifdef RELEASE_BINS	$(NSINSTALL) -t -m 0755 $(RELEASE_BINS) $(DESTDIR)$(bindir)endififdef RELEASE_HEADERS	$(NSINSTALL) -t -m 0644 $(RELEASE_HEADERS) $(DESTDIR)$(includedir)/$(include_subdir)endififdef RELEASE_LIBS	$(NSINSTALL) -t -m 0755 $(RELEASE_LIBS) $(DESTDIR)$(libdir)endif	+$(LOOP_OVER_DIRS)release:: exportifdef RELEASE_BINS	@echo "Copying executable programs and scripts to release directory"	@if test -z "$(BUILD_NUMBER)"; then \		echo "BUILD_NUMBER must be defined"; \		false; \	else \		true; \	fi	@if test ! -d $(RELEASE_BIN_DIR); then \		rm -rf $(RELEASE_BIN_DIR); \		$(NSINSTALL) -D $(RELEASE_BIN_DIR);\	else \		true; \	fi	cp $(RELEASE_BINS) $(RELEASE_BIN_DIR)endififdef RELEASE_LIBS	@echo "Copying libraries to release directory"	@if test -z "$(BUILD_NUMBER)"; then \		echo "BUILD_NUMBER must be defined"; \		false; \	else \		true; \	fi	@if test ! -d $(RELEASE_LIB_DIR); then \		rm -rf $(RELEASE_LIB_DIR); \		$(NSINSTALL) -D $(RELEASE_LIB_DIR);\	else \		true; \	fi	cp $(RELEASE_LIBS) $(RELEASE_LIB_DIR)endififdef RELEASE_HEADERS	@echo "Copying header files to release directory"	@if test -z "$(BUILD_NUMBER)"; then \		echo "BUILD_NUMBER must be defined"; \		false; \	else \		true; \	fi	@if test ! -d $(RELEASE_HEADERS_DEST); then \		rm -rf $(RELEASE_HEADERS_DEST); \		$(NSINSTALL) -D $(RELEASE_HEADERS_DEST);\	else \		true; \	fi	cp $(RELEASE_HEADERS) $(RELEASE_HEADERS_DEST)endif	+$(LOOP_OVER_DIRS)alltags:	rm -f TAGS 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$(NFSPWD):	cd $(@D); $(MAKE) $(@F)$(PROGRAM): $(OBJS)	@$(MAKE_OBJDIR)ifeq ($(OS_ARCH),WINNT)	$(CC) $(OBJS) -Fe$@ -link $(LDFLAGS) $(OS_LIBS) $(EXTRA_LIBS)elseifeq ($(MOZ_OS2_TOOLS),VACPP)	$(CC) $(OBJS) -Fe$@ $(LDFLAGS) $(OS_LIBS) $(EXTRA_LIBS)else	$(CC) -o $@ $(CFLAGS) $(OBJS) $(LDFLAGS)endifendififdef ENABLE_STRIP	$(STRIP) $@endif$(LIBRARY): $(OBJS)	@$(MAKE_OBJDIR)	rm -f $@ifeq ($(MOZ_OS2_TOOLS),VACPP)	$(AR) $(subst /,\\,$(OBJS)) $(AR_FLAGS)else	$(AR) $(AR_FLAGS) $(OBJS) $(AR_EXTRA_ARGS)endif	$(RANLIB) $@ifeq ($(OS_TARGET), OS2)$(IMPORT_LIBRARY): $(SHARED_LIBRARY)	$(IMPLIB) $@ $(SHARED_LIBRARY).defendif    $(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)else	# AIX 4.1ifeq ($(OS_ARCH), WINNT)	$(LINK_DLL) -MAP $(DLLBASE) $(DLL_LIBS) $(EXTRA_LIBS) $(OBJS)elseifeq ($(OS_ARCH),OS2)# append ( >> ) doesn't seem to be working under OS/2 gmake. Run through OS/2 shell instead.		@cmd /C "echo LIBRARY $(notdir $(basename $(SHARED_LIBRARY))) INITINSTANCE TERMINSTANCE >$@.def"	@cmd /C "echo PROTMODE >>$@.def"	@cmd /C "echo CODE    LOADONCALL MOVEABLE DISCARDABLE >>$@.def"	@cmd /C "echo DATA    PRELOAD MOVEABLE MULTIPLE NONSHARED >>$@.def"		@cmd /C "echo EXPORTS >>$@.def"	@cmd /C "$(FILTER) $(LIBRARY) | grep -v _DLL_InitTerm >>$@.def"	$(LINK_DLL) $(DLLBASE) $(OBJS) $(OS_LIBS) $(EXTRA_LIBS) $@.defelse	# OS2ifeq ($(OS_TARGET), OpenVMS)	@if test ! -f $(OBJDIR)/VMSuni.opt; then \	    echo "Creating universal symbol option file $(OBJDIR)/VMSuni.opt";\	    create_opt_uni $(OBJS); \	fi	$(MKSHLIB) -o $@ $(OBJS) $(EXTRA_LIBS) $(OBJDIR)/VMSuni.optelse	# OpenVMS	$(MKSHLIB) $(OBJS) $(EXTRA_LIBS)endif	# OpenVMSendif   # OS2endif	# WINNTendif	# AIX 4.1ifdef ENABLE_STRIP	$(STRIP) $@endififeq (,$(filter-out WINNT OS2,$(OS_ARCH)))$(RES): $(RESNAME)	@$(MAKE_OBJDIR)ifeq ($(OS_TARGET),OS2)	$(RC) -DOS2 -r $< $@else# The resource compiler does not understand the -U option.	$(RC) $(filter-out -U%,$(DEFINES)) $(INCLUDES) -Fo$@ $<endif	@echo $(RES) finishedendif$(OBJDIR)/%.$(OBJ_SUFFIX): %.cpp	@$(MAKE_OBJDIR)ifeq ($(OS_ARCH), WINNT)	$(CCC) -Fo$@ -c $(CCCFLAGS) $<elseifeq ($(MOZ_OS2_TOOLS),VACPP)	$(CCC) -Fo$@ -c $(CCCFLAGS) $<else	$(CCC) -o $@ -c $(CCCFLAGS) $<endifendifWCCFLAGS1 = $(subst /,\\,$(CFLAGS))WCCFLAGS2 = $(subst -I,-i=,$(WCCFLAGS1))WCCFLAGS3 = $(subst -D,-d,$(WCCFLAGS2))$(OBJDIR)/%.$(OBJ_SUFFIX): %.c	@$(MAKE_OBJDIR)ifeq ($(OS_ARCH), WINNT)	$(CC) -Fo$@ -c $(CFLAGS) $<elseifeq ($(MOZ_OS2_TOOLS),VACPP)	$(CC) -Fo$@ -c $(CFLAGS) $<else	$(CC) -o $@ -c $(CFLAGS) $<endifendif$(OBJDIR)/%.$(OBJ_SUFFIX): %.s	@$(MAKE_OBJDIR)	$(AS) -o $@ $(ASFLAGS) -c $<ifeq ($(MOZ_OS2_TOOLS),VACPP)$(OBJDIR)/%.$(OBJ_SUFFIX): %.asm	@$(MAKE_OBJDIR)	$(AS) -Fdo:./$(OBJDIR) $(ASFLAGS) $<endif%.i: %.c	$(CC) -C -E $(CFLAGS) $< > $*.i%: %.pl	rm -f $@; cp $< $@; chmod +x $@## 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 NSPR continuously as part of the Mozilla client.# Because NSPR's make depend is not implemented, whenever we change# an NSPR header file, the depend build does not recompile the NSPR# files that depend on the header.## This rule makes all the objects depend on a dummy header file.# Touch this dummy header file to force the depend build to recompile# everything.## This rule should be removed when make depend is implemented.#DUMMY_DEPEND_H = $(topsrcdir)/config/prdepend.h$(filter $(OBJDIR)/%.$(OBJ_SUFFIX),$(OBJS)): $(OBJDIR)/%.$(OBJ_SUFFIX): $(DUMMY_DEPEND_H)# 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: .a .$(OBJ_SUFFIX) .c .cpp .s .h .i .pl## Fake targets.  Always run these rules, even if a file/directory with that# name already exists.#.PHONY: all alltags clean export install libs realclean release## List the target pattern of an implicit rule as a dependency of the# special target .PRECIOUS to preserve intermediate files made by# implicit rules whose target patterns match that file's name.# (See GNU Make documentation, Edition 0.51, May 1996, Sec. 10.4,# p. 107.)#.PRECIOUS: $(OBJDIR)/%.$(OBJ_SUFFIX)

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -