SubDir HAIKU_TOP ;

NotFile doc_files ;
Depends files : doc_files ;

# Pseudo-target to build the mail kit only
NotFile MailKit ;
Depends MailKit :
	libmail.so
	mail_daemon
	E-mail
	BeMail

	# mail_daemon addons
	Inbox
	Outbox
	Message\ Parser
	New\ Mail\ Notification
	Match\ Header
	R5\ Daemon\ Filter
	IMAP
	POP3
	SMTP
	Fortune
	Spam\ Filter
	spamdbm
;

# Pseudo-target to build the media stuffs only
# TODO: don't know how to make avcodec mp3_decoder mp3_reader ogg speex vorbis
NotFile MediaKit ;
Depends MediaKit :
	libmedia.so
	libgame.so

	# Servers
	media_addon_server
	media_server

	# Preference
	Sounds
	Media

	# Deskbar replicant
	desklink

	# add-ons
	mixer.media_addon
	tone_producer_demo.media_addon
	video_producer_demo.media_addon
	legacy.media_addon
	multi_audio.media_addon
#	reader.media_addon
#	writer.media_addon
#	demultiplexer.media_addon

	# codecs
	ac3_decoder
	aiff_reader
	au_reader
	avcodec
	avi_reader
	matroska
	mp3_decoder
	mp3_reader
	musepack
	ogg
	raw_decoder
	speex
	vorbis
	wav_reader
	mov_reader
;

# Pseudo-target to build the input kit only
NotFile InputKit ;
Depends InputKit :
	# Servers
	input_server

	# Addons
	<input>keyboard
	<input>mouse

	# Apps
	keymap

	# Preferences
	Keymap
	Keyboard
	Mouse
;

# Pseudo-target to build the OpenGL kit only
NotFile OpenGLKit ;
Depends OpenGLKit :
	libGL.so
	GLTeapot
#	GLInfo
;

# Pseudo-target to build the screensaver kit only
NotFile ScreenSaverKit ;
Depends ScreenSaverKit :
	libscreensaver.so
	screen_saver
	screen_blanker
	ScreenSaver
	Haiku
;

# Pseudo-target to build the locale kit only
# TODO: src/add-ons/locale/collators/GermanDIN-2.cpp does not compile
NotFile LocaleKit ;
Depends LocaleKit :
	Locale

	# binaries for building localized software on haiku
	collectcatkeys
	dumpcatalog
	linkcatkeys

	# addons
	LocaleKitCollatorAddons
	LocaleKitCatalogAddons

	# tests
	LocaleKitTests
;

# Add optional packages given via HAIKU_ADD_OPTIONAL_PACKAGES.
if $(HAIKU_ADD_OPTIONAL_PACKAGES) {
	AddOptionalHaikuImagePackages
		[ FSplitString $(HAIKU_ADD_OPTIONAL_PACKAGES) : / ] ;
}

# Prepare the optional build features before parsing the Jamfile tree.
include [ FDirName $(HAIKU_BUILD_RULES_DIR) OptionalBuildFeatures ] ;

# Include packages that are required by all images.
AddOptionalHaikuImagePackages MandatoryPackages ;

# If enabled, make sure that OpenSSL is added to the image.
if $(HAIKU_OPENSSL_ENABLED) {
	AddOptionalHaikuImagePackages OpenSSL ;
}

AddOptionalHaikuImagePackages ICU ;

# Evaluate optional package dependencies
include [ FDirName $(HAIKU_BUILD_RULES_DIR) OptionalPackageDependencies ] ;

# Optionally we allow not to include the "src" subdirectory.
if $(HAIKU_DONT_INCLUDE_SRC) {
	# Don't include "src", but at least include the stuff needed for the
	# build.
	SubInclude HAIKU_TOP src build ;
	SubInclude HAIKU_TOP src tools ;
} else {
	SubInclude HAIKU_TOP src ;
}
if $(HAIKU_INCLUDE_3RDPARTY) {
	SubInclude HAIKU_TOP 3rdparty ;
}

# Perform deferred SubIncludes.
ExecuteDeferredSubIncludes ;

# reset subdir
SubDir HAIKU_TOP ;

# Execute post-build-target user config rules.
UserBuildConfigRulePostBuildTargets	;

# specify the Haiku image and network boot archive contents
include [ FDirName $(HAIKU_BUILD_RULES_DIR) HaikuImage ] ;
include [ FDirName $(HAIKU_BUILD_RULES_DIR) NetBootArchive ] ;
include [ FDirName $(HAIKU_BUILD_RULES_DIR) FloppyBootImage ] ;
include [ FDirName $(HAIKU_BUILD_RULES_DIR) CDBootImage ] ;
include [ FDirName $(HAIKU_BUILD_RULES_DIR) CDBootPPCImage ] ;
include [ FDirName $(HAIKU_BUILD_RULES_DIR) HaikuCD ] ;
include [ FDirName $(HAIKU_BUILD_RULES_DIR) AnybootImage ] ;

# Check whether all requested optional packages do actually exist.
local package ;
local packageError ;
for package in $(HAIKU_ADDED_OPTIONAL_PACKAGES) {
	if ! [ on $(package) return $(HAIKU_OPTIONAL_PACKAGE_EXISTS) ] {
		Echo "ERROR: Requested optional package \"$(package)\" does not"
			"exist." ;
		packageError = 1 ;
	}
}
if $(packageError) {
	Exit ;
}

# Pseudo-target to build all targets that are localized.
NotFile LocalizedTargets ;
Depends LocalizedTargets : $(HAIKU_LOCALIZED_TARGETS) ;

NotFile catalogs ;
Depends catalogs : $(HAIKU_LOCALE_CATALOGS) ;

NotFile catkeys ;
Depends catkeys : $(HAIKU_LOCALE_OUTPUT_CATKEYS) ;
