# # ***** BEGIN LICENSE BLOCK ***** # Version: MPL 1.1/GPL 2.0/LGPL 2.1 # # 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 mozilla.org code. # # The Initial Developer of the Original Code is # Netscape Communications Corporation. # Portions created by the Initial Developer are Copyright (C) 1998 # the Initial Developer. All Rights Reserved. # # Contributor(s): # # Alternatively, the contents of this file may be used under the terms of # either the GNU General Public License Version 2 or later (the "GPL"), or # the GNU Lesser General Public License Version 2.1 or later (the "LGPL"), # in which case the provisions of the GPL or the LGPL are applicable instead # of those above. If you wish to allow use of your version of this file only # under the terms of either the GPL or the LGPL, and not to allow others to # use your version of this file under the terms of the MPL, indicate your # decision by deleting the provisions above and replace them with the notice # and other provisions required by the GPL or the LGPL. If you do not delete # the provisions above, a recipient may use your version of this file under # the terms of any one of the MPL, the GPL or the LGPL. # # ***** END LICENSE BLOCK ***** DEPTH = . topsrcdir = @top_srcdir@ srcdir = @srcdir@ VPATH = @srcdir@ include $(DEPTH)/config/autoconf.mk include $(topsrcdir)/build/unix/modules.mk ifeq ($(BUILD_MODULES),all) # # And now for something completely different... # Divide the default build into tiers. # Tiers must be defined on module boundaries # default: $(SUBMAKEFILES) $(RM) -rf $(DIST)/sdk $(MAKE) -C config export $(MAKE) nspr $(MAKE) ldap $(MAKE) tier_0 $(MAKE) tier_1 $(MAKE) tier_2 $(MAKE) tier_9 $(MAKE) tier_50 ifdef MOZ_JSDEBUGGER $(MAKE) tier_93 endif ifdef MOZ_EXTENSIONS $(MAKE) tier_94 endif ifdef MOZ_MAIL_NEWS $(MAKE) tier_97 endif ifdef MOZ_CALENDAR $(MAKE) tier_98 endif $(MAKE) tier_99 # Make sure that the existing rulesets work DIRS = \ $(tier_0_dirs) \ $(tier_1_dirs) \ $(tier_2_dirs) \ $(tier_9_dirs) \ $(tier_50_dirs) \ $(NULL) ifdef GC_LEAK_DETECTOR DIRS += gc/boehm endif ifdef MOZ_JSDEBUGGER DIRS += $(tier_93_dirs) endif ifdef MOZ_EXTENSIONS DIRS += $(tier_94_dirs) endif ifdef MOZ_MAIL_NEWS DIRS += $(tier_97_dirs) endif ifdef MOZ_CALENDAR DIRS += $(tier_98_dirs) endif DIRS += $(tier_99_dirs) # # tier 0 - base build config dirs # tier_0_dirs = \ config \ build \ $(NULL) # # tier 1 - 3rd party individual libraries # tier_1_dirs += dbm ifndef MOZ_NATIVE_JPEG tier_1_dirs += jpeg endif ifndef MOZ_NATIVE_ZLIB tier_1_dirs += modules/zlib endif # Installer needs standalone libjar, hence standalone zlib ifdef MOZ_INSTALLER tier_1_dirs += modules/zlib/standalone endif ifdef MOZ_SVG_RENDERER_LIBART tier_1_dirs += other-licenses/libart_lgpl endif # # tier 2 - base libraries # tier_2_dirs = \ js \ xpcom \ modules/libreg \ xpcom/obsolete \ $(NULL) ifdef NS_TRACE_MALLOC tier_2_dirs += tools/trace-malloc/lib endif # # tier 9 - core components (necko,gecko) # tier_9_dirs += \ js/src/xpconnect \ intl \ $(NULL) ifdef MOZ_ENABLE_XLIB tier_9_dirs += gfx/src/xlibrgb widget/src/xlibxtbin endif ifdef MOZ_ENABLE_GTK tier_9_dirs += widget/src/gtksuperwin widget/src/gtkxtbin endif ifdef MOZ_ENABLE_GTK2 tier_9_dirs += widget/src/gtkxtbin endif ifdef MOZ_IPCD tier_9_dirs += ipc/ipcd endif tier_9_dirs += \ modules/libutil \ netwerk \ modules/libjar \ uriloader \ modules/libpref \ modules/libimg \ caps \ rdf \ parser/expat \ parser/htmlparser \ gfx \ modules/libpr0n \ sun-java \ modules/plugin \ dom \ view \ widget \ content \ layout \ xpfe/components/shistory \ docshell \ webshell \ embedding \ editor \ xpfe/appshell \ xpfe/components/xremote/public \ $(NULL) ifdef MOZ_OJI tier_9_dirs += \ js/src/liveconnect \ modules/oji \ $(NULL) endif ifdef ACCESSIBILITY tier_9_dirs += accessible endif ifdef MOZ_ENABLE_LIBXUL tier_9_dirs += \ toolkit/library \ xpcom/stub \ $(NULL) endif # # tier 50 - xpfe & toolkit # ifdef MOZ_XUL ifdef MOZ_XUL_APP tier_50_dirs += chrome else tier_50_dirs += rdf/chrome endif else tier_50_dirs += embedding/minimo/chromelite endif tier_50_dirs += profile ifdef MOZ_PSM tier_50_dirs += security/manager endif # This must preceed xpfe ifdef MOZ_JPROF tier_50_dirs += tools/jprof endif ifneq (,$(filter mac cocoa,$(MOZ_WIDGET_TOOLKIT))) tier_50_dirs += xpfe/bootstrap/appleevents endif tier_50_dirs += \ db \ xpfe \ themes \ $(NULL) ifdef MOZ_LEAKY tier_50_dirs += tools/leaky endif ifdef MOZ_MAPINFO tier_50_dirs += tools/codesighs endif ifdef MOZ_XUL_APP tier_50_dirs += toolkit endif ifdef MOZ_PHOENIX #xpfe/components/search depends on nsIBookmarksService.idl #XXXBlake this shell path is a temp hack; toolkit shouldn't depend on browser tier_50_dirs += browser/components/bookmarks/public browser/components/shell/public endif # toolkit/xre/ depends on xpinstall, so it must be in tier 50 ifdef MOZ_XPINSTALL tier_50_dirs += xpinstall endif ifdef NS_TRACE_MALLOC tier_50_dirs += tools/trace-malloc endif ifdef MOZ_STORAGE tier_50_dirs += db/sqlite3/src storage endif ifdef MOZ_LDAP_XPCOM tier_50_dirs += directory/xpcom endif ifdef MOZ_XUL_APP ifdef MOZ_ENABLE_GTK2 tier_50_dirs += toolkit/components/gnome endif endif # # tier 9x - application features # ifdef MOZ_JSDEBUGGER tier_93_dirs += js/jsd endif ifdef MOZ_EXTENSIONS tier_94_dirs += extensions endif ifdef MOZ_MAIL_NEWS tier_97_dirs += mailnews endif ifdef MOZ_CALENDAR tier_98_dirs += other-licenses/libical calendar endif # # tier 99 - application binaries # # axcontrol ifeq ($(OS_ARCH),WINNT) ifndef MOZ_NO_ACTIVEX_SUPPORT tier_99_dirs += \ embedding/browser/activex/src/control \ embedding/browser/activex/src/control_kicker \ $(NULL) endif endif ifdef MOZ_PHOENIX ifdef MOZ_USE_OFFICIAL_BRANDING tier_99_dirs += other-licenses/branding/firefox endif tier_99_dirs += browser xpfe/bootstrap/init.d ifdef MOZ_USE_OFFICIAL_BRANDING tier_99_dirs += other-licenses/branding/firefox/content endif endif ifdef MOZ_XULRUNNER tier_99_dirs += xulrunner endif ifdef MOZ_THUNDERBIRD ifdef MOZ_USE_OFFICIAL_BRANDING tier_99_dirs += other-licenses/branding/thunderbird endif tier_99_dirs += mail xpfe/bootstrap/init.d ifdef MOZ_USE_OFFICIAL_BRANDING tier_99_dirs += other-licenses/branding/thunderbird/content endif endif ifdef MOZ_COMPOSER tier_99_dirs += editor/ui endif ifdef MOZ_STANDALONE_COMPOSER tier_99_dirs += composer endif ifdef MOZ_SUNBIRD tier_99_dirs += calendar/sunbird endif ifdef MOZ_XUL_APP ifdef MOZ_INSTALLER tier_99_dirs += toolkit/mozapps/installer endif else ifneq (,$(MOZ_XPFE_COMPONENTS)$(MOZ_XUL)) tier_99_dirs += xpfe/bootstrap endif endif ifneq (,$(MOZ_ENABLE_GTK)$(MOZ_ENABLE_GTK2)) tier_99_dirs += embedding/browser/gtk endif # viewer ifneq (,$(ENABLE_TESTS)) ifndef MOZ_ENABLE_LIBXUL tier_99_dirs += webshell/tests endif endif # winembed, mfcembed ifeq ($(OS_ARCH),WINNT) ifneq (,$(ENABLE_TESTS)$(MOZILLA_OFFICIAL)) tier_99_dirs += embedding/tests endif endif # os2embed ifeq ($(OS_ARCH),OS2) ifneq (,$(ENABLE_TESTS)$(MOZILLA_OFFICIAL)) tier_99_dirs += embedding/tests endif endif ifeq ($(MOZ_BUILD_APP),macbrowser) tier_99_dirs += \ embedding/config \ camino \ $(NULL) endif else # Standalone build DIRS = $(BUILD_MODULE_DIRS) # Hack to generate xpidl Makefile ifneq ($(BUILD_MODULES),all) ifneq (,$(findstring xpcom, $(BUILD_MODULE_DIRS))) DIRS := xpcom/typelib $(DIRS) SUBMAKEFILES := xpcom/typelib/Makefile endif endif default: $(SUBMAKEFILES) $(MAKE) export $(MAKE) libs endif # BUILD_MODULES == all STATIC_MAKEFILES := nsprpub directory/c-sdk security/nss GARBAGE_DIRS += dist DIST_GARBAGE = config.cache config.log config.status config-defs.h \ dependencies.beos config/autoconf.mk config/myrules.mk config/myconfig.mk \ unallmakefiles mozilla-config.h \ $(topsrcdir)/.mozconfig.mk $(topsrcdir)/.mozconfig.out # Build pseudo-external modules first when export is explicitly called export:: $(RM) -rf $(DIST)/sdk $(MAKE) -C config export $(MAKE) nspr $(MAKE) ldap ifneq ($(BUILD_MODULES),all) ifneq (,$(findstring xpcom, $(BUILD_MODULE_DIRS))) $(MAKE) -C xpcom/typelib $(MAKE) export-idl endif endif install:: ifndef MOZ_NATIVE_NSPR $(MAKE) -C nsprpub real_install DESTDIR=$(DESTDIR) libdir=$(mozappdir) includedir=$(includedir)/nspr $(RM) -f $(addprefix $(DESTDIR)$(mozappdir)/$(LIB_PREFIX), $(addsuffix .$(LIB_SUFFIX), nspr4 plds4 plc4)) $(RM) -f $(addprefix $(DESTDIR)$(bindir)/,nspr-config compile-et.pl prerr.properties) endif ifdef MOZ_LDAP_XPCOM $(MAKE) -C directory/c-sdk real_install DESTDIR=$(DESTDIR) libdir=$(mozappdir) includedir=$(includedir)/ldap endif include $(topsrcdir)/config/rules.mk # Clean up after pseudo-external modules clean clobber realclean clobber_all distclean:: ifndef MOZ_NATIVE_NSPR $(MAKE) -C nsprpub $@ endif ifdef MOZ_LDAP_XPCOM $(MAKE) -C directory/c-sdk $@ endif ifdef MOZ_ENABLE_LIBXUL tier_50: @echo "tier_50: $(tier_50_dirs)" @$(EXIT_ON_ERROR) \ for d in $(tier_50_dirs); do \ $(UPDATE_TITLE) \ $(MAKE) -C $$d export; \ done ; \ $(PERL) $(MOZILLA_DIR)/config/purge-old-headers.pl $(DIST)/include ;\ for d in $(tier_50_dirs); do \ $(UPDATE_TITLE) \ $(MAKE) -C $$d libs; \ done @echo "Building tools from tier 2/9/50" @$(EXIT_ON_ERROR) \ for d in $(tier_2_dirs) $(tier_9_dirs) $(tier_50_dirs); do \ $(UPDATE_TITLE) \ $(MAKE) -C $$d tools; \ done; endif tier_%: @echo "$@: $($@_dirs)" @$(EXIT_ON_ERROR) \ for d in $($@_dirs); do $(UPDATE_TITLE) \ $(MAKE) -C $$d export; \ done ; \ $(PERL) $(MOZILLA_DIR)/config/purge-old-headers.pl $(DIST)/include ;\ for d in $($@_dirs); do $(UPDATE_TITLE) \ $(MAKE) -C $$d libs; \ done # # Individual modules # boehm: ifdef GC_LEAK_DETECTOR $(MAKE) -C gc/boehm endif nspr: boehm ifndef MOZ_NATIVE_NSPR $(MAKE) -C nsprpub endif ldap: ifdef MOZ_LDAP_XPCOM $(MAKE) -C directory/c-sdk endif export:: @$(PERL) $(MOZILLA_DIR)/config/purge-old-headers.pl $(DIST)/include distclean:: cat unallmakefiles | $(XARGS) rm -f rm -f unallmakefiles $(DIST_GARBAGE) ifeq ($(OS_ARCH),WINNT) rebase: ifdef MOZILLA_OFFICIAL echo rebasing $(DIST) /bin/find $(DIST) -name "*.dll" > rebase.lst rebase -b 60000000 -R . -G rebase.lst rm rebase.lst endif splitsymbols: ifdef MOZILLA_OFFICIAL ifdef MOZ_DEBUG_SYMBOLS echo finding pdb files mkdir -p $(DIST)/$(BUILDID) -cp `/bin/find . -path "./dist" -prune -o -name "*.dll" | sed "s/\.dll$$/\.pdb/" | xargs` $(DIST)/$(BUILDID) -cp `/bin/find . -path "./dist" -prune -o -name "*.exe" | sed "s/\.exe$$/\.pdb/" | xargs` $(DIST)/$(BUILDID) -cp `/bin/find . -path "./dist" -prune -o -name "*.EXE" | sed "s/\.EXE$$/\.pdb/" | xargs` $(DIST)/$(BUILDID) endif # MOZ_DEBUG_SYMBOLS ifdef MOZ_PROFILE echo splitting symbols out of binaries /bin/find $(DIST) -name "*.dll" -exec splitsym {} \; /bin/find $(DIST) -name "*.exe" -exec splitsym {} \; /bin/find $(DIST) -name "*.EXE" -exec splitsym {} \; mkdir -p $(DIST)/$(BUILDID) /bin/find $(DIST) -name "*.dbg" -exec mv {} $(DIST)/$(BUILDID) \; endif # MOZ_PROFILE endif # MOZILLA_OFFICIAL signnss: ifdef MOZILLA_OFFICIAL echo signing NSS libs cd $(DIST)/bin; ./shlibsign.exe -v -i softokn3.dll endif # MOZILLA_OFFICIAL BUILDID = $(shell cat $(DEPTH)/config/build_number) deliver: splitsymbols rebase signnss endif # WINNT