#
# The contents of this file are subject to the Netscape 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/NPL/
#
# 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 Netscape are
# Copyright (C) 1998 Netscape Communications Corporation. All
# Rights Reserved.
#
# Contributor(s): 
#

DEPTH		= .
topsrcdir	= @top_srcdir@
srcdir		= @srcdir@
VPATH		= @srcdir@

include $(DEPTH)/config/autoconf.mk

include $(topsrcdir)/build/unix/modules.mk

ifneq ($(BUILD_MODULES),all)

DIRS		= $(BUILD_MODULE_DIRS)
EXPORT_DIRS	= $(BUILD_MODULE_DEP_DIRS)

else

#
# And now for something completely different...
# Divide the default build into tiers. 
# Tiers must be defined on module boundaries 
#
default: $(SUBMAKEFILES)
	$(MAKE) nspr
	$(MAKE) tier_0
ifdef MOZ_LDAP_XPCOM
	$(MAKE) -C directory/c-sdk/ldap export
	$(MAKE) -C directory/c-sdk/ldap install
endif
	$(MAKE) tier_1
	$(MAKE) tier_9
ifdef MOZ_PSM
	$(MAKE) tier_95
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 = $(NSPRPUB_DIR) \
	$(tier_0_dirs) \
	$(tier_1_dirs) \
	$(tier_9_dirs) \
	$(NULL)

ifdef MOZ_LDAP_XPCOM
DIRS += directory/c-sdk/ldap
endif

ifdef MOZ_PSM
DIRS += $(tier_95_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 \
	include \
	$(NULL)

#
# tier 1 - base libraries
# 
tier_1_dirs = js

# MacOSX needs to build lib for MoreFiles before xpcom
ifeq ($(MOZ_WIDGET_TOOLKIT),mac)
tier_1_dirs += lib/mac/MoreFiles
endif

#
# tier 9 - core components (xpcom,necko,gecko)
#

# intl should not be in here - it's just temporary until
# xpconnect's dependency on intl is repaired - see bug 106130
tier_9_dirs += \
	modules/libreg \
	string \
	xpcom \
	intl \
	$(NULL)

ifndef MOZ_NATIVE_ZLIB
tier_9_dirs	+= modules/zlib
endif

# Installer needs standalone libjar, hence standalone zlib
ifneq (,$(filter Linux SunOS WINNT,$(OS_ARCH)))
tier_9_dirs	+= modules/zlib/standalone
endif

tier_9_dirs	+= \
	modules/libjar \
	$(NULL)

ifdef MOZ_JAVA_SUPPLEMENT
tier_9_dirs += 			\
  java/util			\
  java/webclient		\
  $(NULL)
endif

ifndef MOZ_NATIVE_JPEG
tier_9_dirs	+= jpeg
endif

tier_9_dirs	+= dbm js/src/xpconnect

ifdef MOZ_OJI
tier_9_dirs	+= js/src/liveconnect
endif

ifdef MOZ_JSDEBUGGER
tier_9_dirs	+= js/jsd
endif

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_INTERNAL_LIBART_LGPL
tier_9_dirs	+= other-licenses/libart_lgpl
endif

tier_9_dirs	+= \
		modules/libutil \
		netwerk \
		modules/mpfilelocprovider \
		uriloader \
		modules/libpref \
		modules/libimg \
		modules/oji \
		caps \
		rdf \
		expat \
		htmlparser \
		gfx \
		gfx2 \
		modules/libpr0n \
		modules/plugin \
		dom \
		view \
		widget \
		content \
		layout \
		db \
		docshell \
		webshell \
		embedding \
		editor \
		sun-java \
		profile \
		themes \
		$(NULL)

ifdef ACCESSIBILITY
tier_9_dirs    += accessible
endif

ifdef MOZ_LDAP_XPCOM
tier_9_dirs	+= directory/xpcom
endif

# This must preceed xpfe
ifdef MOZ_JPROF
tier_9_dirs        += tools/jprof
endif

tier_9_dirs	+= xpfe xpinstall

ifdef MOZ_EXTENSIONS
tier_9_dirs	+= extensions
endif

ifdef MOZ_LEAKY
tier_9_dirs        += tools/leaky
endif

ifdef ENABLE_TESTS
tier_9_dirs	+= xpcom/tests
endif

ifdef NS_TRACE_MALLOC
tier_9_dirs	+= tools/trace-malloc
endif

tier_9_dirs	+= l10n

#
# tier 9x - application features
#

ifdef MOZ_PSM
tier_95_dirs	+= security/manager
endif

ifdef MOZ_MAIL_NEWS
tier_97_dirs	+= mailnews
endif

ifdef MOZ_CALENDAR
tier_98_dirs	+= calendar
endif

#
# tier 99 - application binaries
#

ifneq (,$(MOZ_STATIC_COMPONENTS)$(MOZ_META_COMPONENTS))
tier_99_dirs   += modules/staticmod
endif

tier_99_dirs	+= xpfe/bootstrap

endif # BUILD_MODULES == all

STATIC_MAKEFILES := $(NSPRPUB_DIR) directory/c-sdk/ldap

ifdef MOZ_PSM
STATIC_MAKEFILES += security/nss 
endif

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 \
   $(topsrcdir)/.mozconfig.mk $(topsrcdir)/.mozconfig.out 

include $(topsrcdir)/config/rules.mk

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
ifdef NSPRPUB_DIR
	$(MAKE) -C $(NSPRPUB_DIR)
endif

# For modules.mk standalone build
export::
	+$(LOOP_OVER_EXPORT_DIRS)

export::
	@$(PERL) $(MOZILLA_DIR)/config/purge-old-headers.pl $(DIST)/include

distclean::
	cat unallmakefiles | $(XARGS) rm -f
	rm -f unallmakefiles $(DIST_GARBAGE)
