1# This file defines what ends up on the Haiku image (respectively in the Haiku
2# installation directory) and it executes the rules building the image
3# (respectively installing the files in the installation directory).
4
5
6SYSTEM_BIN = [ FFilterByBuildFeatures
7	"["
8	addattr alert arp
9	base64 basename bash bc beep bfsinfo
10	cal cat catattr checkfs checkitout chgrp chmod chop chown chroot cksum clear
11	clockconfig cmp collectcatkeys comm compress copyattr CortexAddOnHost cp
12	csplit cut date dc dd desklink df diff diff3 dircolors dirname
13	diskimage draggers driveinfo dstcheck du dumpcatalog
14	echo eject env error expand expr
15	factor false fdinfo ffm filepanel find finddir FirstBootPrompt fmt fold
16	fortune frcode ftp ftpd funzip fwcontrol
17	gawk gdb@x86 getlimits groups gzip gzexe
18	hd head hey hostname
19	id ident ifconfig <bin>install installsound iroster isvolume
20	ideinfo@ide idestatus@ide
21	join kernel_debugger keymap kill
22	less lessecho lesskey link linkcatkeys listarea listattr listimage listdev
23	listport listres listsem listusb ln locale locate logger login logname ls
24	lsindex
25	mail2mbox makebootable mbox2mail md5sum merge message mimeset mkdos mkdir
26	mkfifo mkfs mkindex mktemp modifiers mount mount_nfs mountvolume mv
27	netcat netstat nl nohup notify nproc
28	od open
29	passwd paste patch pathchk pc ping ping6 play playfile playsound playwav
30	pr prio printenv printf profile ps ptx pwd
31	query quit
32	rc readlink reindex release renice rlog rm rmattr rmindex rmdir roster
33	route
34	safemode screen_blanker screenmode screenshot sdiff setdecor setmime settype
35	setversion setvolume seq sha1sum shar shred shuf shutdown sleep sort
36	spamdbm split stat strace stty su sum sync sysinfo
37	tac tail tcpdump tcptester tee telnet telnetd test timeout top touch
38	tput tr traceroute translate trash true truncate tsort tty
39	uname unchop unexpand unmount uniq unlink unshar unzip unzipsfx
40	<bin>updatedb uptime urlwrapper useradd uudecode uuencode
41	vdir version vmstat
42	waitfor watch wc wget whoami writembr@x86 xargs xres
43	yes
44	zdiff zforce zgrep zip zipcloak <bin>zipgrep zipnote zipsplit zmore znew
45] ;
46
47SYSTEM_APPS = [ FFilterByBuildFeatures
48	AboutSystem ActivityMonitor BootManager@x86 CharacterMap
49	CodyCam DeskCalc Devices DiskProbe DiskUsage DriveSetup CDPlayer Debugger
50	Expander GLInfo@x86 Icon-O-Matic Installer LaunchBox Magnify Mail
51	MediaConverter MediaPlayer MidiPlayer NetworkStatus PackageInstaller People
52	PoorMan PowerStatus ProcessController Screenshot ShowImage SoundRecorder
53	StyledEdit Terminal TextSearch TV WebWatch Workspaces
54] ;
55SYSTEM_PREFERENCES = [ FFilterByBuildFeatures
56	Appearance Backgrounds CPUFrequency DataTranslations
57	<preference>Deskbar E-mail FileTypes Keyboard Keymap Locale Media
58	Mouse Network Notifications Printers Screen ScreenSaver
59	Shortcuts Sounds Time Touchpad <preference>Tracker VirtualMemory
60] ;
61SYSTEM_DEMOS = [ FFilterByBuildFeatures
62	BSnow Chart Clock Cortex FontDemo GLTeapot@x86
63	$(HAIKU_INCLUDE_TRADEMARKS)Haiku3d@x86 Mandelbrot OverlayImage Pairs
64	Playground Pulse Sudoku
65] ;
66SYSTEM_LIBS = [ FFilterByBuildFeatures
67	libbe.so libbsd.so libbnetapi.so
68	libdebug.so libdevice.so
69	libgame.so libGL.so@x86 libglut.so@x86
70	libgnu.so libmail.so libmedia.so libmidi.so libmidi2.so
71	libnetwork.so
72	<revisioned>libroot.so libroot-addon-icu.so
73	libscreensaver.so
74	libtextencoding.so libtiff.so libtracker.so libtranslation.so
75	$(HAIKU_SHARED_LIBSTDC++) $(HAIKU_SHARED_LIBSUPC++)
76] ;
77PRIVATE_SYSTEM_LIBS = [ FFilterByBuildFeatures
78	$(HAIKU_JPEG_CURRENT_LIB)
79	$(HAIKU_LIBPNG_CURRENT_LIB)
80	$(HAIKU_ZLIB_CURRENT_LIB)
81	$(HAIKU_FREETYPE_CURRENT_LIB)
82	libalm.so
83	libfluidsynth.so
84	libilmimf.so
85] ;
86SYSTEM_SERVERS = [ FFilterByBuildFeatures
87	app_server cddb_daemon debug_server input_server mail_daemon
88	media_addon_server media_server midi_server mount_server net_server
89	notification_server power_daemon print_server print_addon_server registrar
90	syslog_daemon
91] ;
92
93SYSTEM_NETWORK_DEVICES = ethernet loopback ;
94SYSTEM_NETWORK_DATALINK_PROTOCOLS = ethernet_frame <module>arp loopback_frame
95	ipv6_datagram ;
96#SYSTEM_NETWORK_PPP = ipcp modem pap pppoe ;
97SYSTEM_NETWORK_PROTOCOLS = ipv4 tcp udp icmp unix icmp6 ipv6 ;
98
99SYSTEM_ADD_ONS_ACCELERANTS = [ FFilterByBuildFeatures
100	x86 @{
101		3dfx.accelerant ati.accelerant matrox.accelerant neomagic.accelerant
102		nvidia.accelerant intel_810.accelerant intel_extreme.accelerant
103		radeon.accelerant radeon_hd.accelerant s3.accelerant vesa.accelerant
104		#via.accelerant vmware.accelerant
105	}@ # x86
106] ;
107SYSTEM_ADD_ONS_TRANSLATORS = BMPTranslator EXRTranslator GIFTranslator
108	HVIFTranslator ICOTranslator JPEGTranslator JPEG2000Translator
109	PCXTranslator PNGTranslator PPMTranslator
110	RAWTranslator RTFTranslator SGITranslator STXTTranslator TGATranslator
111	TIFFTranslator WebPTranslator WonderBrushTranslator ICNSTranslator
112;
113SYSTEM_ADD_ONS_LOCALE_CATALOGS = <catalog-addon>plaintext ;
114SYSTEM_ADD_ONS_MEDIA = [ FFilterByBuildFeatures
115	cortex_audioadapter.media_addon
116	cortex_flanger.media_addon
117	dvb.media_addon@x86
118	hmulti_audio.media_addon
119	mixer.media_addon
120	opensound.media_addon
121	tone_producer_demo.media_addon
122	usb_webcam.media_addon
123	video_producer_demo.media_addon
124	video_window_demo.media_addon
125	firewire_dv.media_addon
126	#legacy.media_addon
127	equalizer.media_addon
128	vst_host.media_addon
129] ;
130SYSTEM_ADD_ONS_MEDIA_PLUGINS = [ FFilterByBuildFeatures
131	ffmpeg@ffmpeg raw_decoder
132] ;
133SYSTEM_ADD_ONS_PRINT =
134	Canon\ LIPS3\ Compatible
135	Canon\ LIPS4\ Compatible
136	Gutenprint
137	PCL5\ Compatible
138	PCL6\ Compatible
139	PDF\ Writer
140	PS\ Compatible
141	Preview
142;
143SYSTEM_ADD_ONS_PRINT_TRANSPORT = HP\ JetDirect IPP LPR
144	# Parallel\ Port
145	Print\ To\ File Serial\ Port USB\ Port
146;
147SYSTEM_ADD_ONS_SCREENSAVERS = [ FFilterByBuildFeatures
148	Butterfly DebugNow Flurry@x86
149	GLife@x86 $(HAIKU_INCLUDE_TRADEMARKS)Haiku Icons IFS Leaves
150	Message Spider Gravity@x86
151] ;
152SYSTEM_ADD_ONS_DRIVERS_AUDIO = auich auvia echo3g emuxki hda ice1712 sis7018 ;
153SYSTEM_ADD_ONS_DRIVERS_AUDIO_OLD = ; #cmedia usb_audio ;
154SYSTEM_ADD_ONS_DRIVERS_GRAPHICS = [ FFilterByBuildFeatures
155	x86 @{
156		ati 3dfx intel_810 intel_extreme matrox neomagic nvidia radeon radeon_hd
157		s3 vesa  #via vmware
158	}@ # x86
159] ;
160SYSTEM_ADD_ONS_DRIVERS_MIDI = emuxki ice1712 usb_midi ;
161SYSTEM_ADD_ONS_DRIVERS_NET = [ FFilterByBuildFeatures
162	x86 @{
163		3com atheros813x ar81xx attansic_l1 attansic_l2 broadcom440x
164		broadcom570x dec21xxx ipro100 ipro1000 jmicron2x0 marvell_yukon nforce
165		pcnet rtl8139 rtl81xx sis19x syskonnect via_rhine vt612x
166	}@ # x86
167
168	etherpci pegasus sis900 usb_davicom usb_asix usb_ecm wb840
169
170	# WLAN drivers
171	x86 @{
172		aironetwifi atheroswifi broadcom43xx
173		iprowifi2100 iprowifi2200 iprowifi3945
174		iprowifi4965 marvell88w8363 marvell88w8335
175		ralinkwifi wavelanwifi
176	}@ # x86
177
178	# WWAN drivers
179	#usb_beceemwmx@gpl
180] ;
181SYSTEM_ADD_ONS_DRIVERS_POWER = [ FFilterByBuildFeatures acpi_button@x86 ] ;
182SYSTEM_ADD_ONS_BUS_MANAGERS = [ FFilterByBuildFeatures
183	ata@ata pci ps2@x86 isa@x86
184	ide@ide scsi config_manager agp_gart usb firewire acpi@x86
185] ;
186SYSTEM_ADD_ONS_FILE_SYSTEMS = bfs btrfs cdda exfat ext2 fat iso9660 nfs
187	attribute_overlay write_overlay ntfs reiserfs udf googlefs ;
188
189# wifi firmware
190for driver in $(SYSTEM_ADD_ONS_DRIVERS_NET) {
191	local package = [ on $(driver) return $(HAIKU_WIFI_FIRMWARE_PACKAGE) ] ;
192	local archive = [ on $(driver) return $(HAIKU_WIFI_FIRMWARE_ARCHIVE) ] ;
193	local extract = [ on $(driver) return $(HAIKU_WIFI_FIRMWARE_DO_EXTRACT) ] ;
194	if $(archive) {
195		AddWifiFirmwareToHaikuImage $(driver) : $(package) : $(archive)
196			: $(extract) ;
197	}
198	local packages = [ on $(driver) return $(HAIKU_WIFI_FIRMWARE_PACKAGES) ] ;
199	local archives = [ on $(driver) return $(HAIKU_WIFI_FIRMWARE_ARCHIVES) ] ;
200	for archive in $(archives) {
201		AddWifiFirmwareToHaikuImage $(driver) : $(packages[1]) : $(archive)
202			: $(extract) ;
203		packages = $(packages[2-]) ;
204	}
205}
206
207
208# modules
209AddFilesToHaikuImage system add-ons kernel bus_managers
210	: $(SYSTEM_ADD_ONS_BUS_MANAGERS) ;
211AddFilesToHaikuImage system add-ons kernel busses agp_gart
212	: <agp_gart>intel@x86 ;
213
214if $(HAIKU_ATA_STACK) = 1 {
215	AddFilesToHaikuImage system add-ons kernel busses ata
216		: generic_ide_pci it8211 legacy_sata silicon_image_3112 ide_isa@x86 ;
217} else {
218	AddFilesToHaikuImage system add-ons kernel busses ide
219		: generic_ide_pci it8211 legacy_sata silicon_image_3112 ide_isa@x86 ;
220}
221
222AddFilesToHaikuImage system add-ons kernel busses scsi
223	: ahci ;
224AddFilesToHaikuImage system add-ons kernel busses usb
225	: <usb>uhci <usb>ohci <usb>ehci ;
226AddFilesToHaikuImage system add-ons kernel console : vga_text ;
227AddFilesToHaikuImage system add-ons kernel debugger
228	: <kdebug>demangle <kdebug>disasm@x86 <kdebug>hangman
229	  <kdebug>invalidate_on_exit <kdebug>usb_keyboard <kdebug>qrencode
230	  <kdebug>run_on_exit ;
231AddFilesToHaikuImage system add-ons kernel file_systems
232	: $(SYSTEM_ADD_ONS_FILE_SYSTEMS) ;
233AddFilesToHaikuImage system add-ons kernel generic
234	: ata_adapter@ata bios@x86 dpc ide_adapter@ide
235		locked_pool mpu401 scsi_periph <module>tty ; #cpuidle@x86 ;
236AddFilesToHaikuImage system add-ons kernel partitioning_systems
237	: amiga_rdb apple efi_gpt intel session ;
238AddFilesToHaikuImage system add-ons kernel interrupt_controllers
239	: openpic@ppc ;
240
241if $(TARGET_ARCH) = x86 {
242	AddFilesToHaikuImage system add-ons kernel cpu : generic_x86 ;
243}
244
245# drivers
246AddNewDriversToHaikuImage disk scsi	: scsi_cd scsi_disk ;
247AddNewDriversToHaikuImage power : enhanced_speedstep@x86 ;
248AddNewDriversToHaikuImage power : acpi_battery@x86 ;
249#AddNewDriversToHaikuImage power : x86_cpuidle@x86 ;
250#AddNewDriversToHaikuImage display : display_controls@x86 ;
251
252# legacy drivers
253AddDriversToHaikuImage				: console dprintf null
254									  random <driver>tty zero ;
255AddDriversToHaikuImage audio hmulti	: $(SYSTEM_ADD_ONS_DRIVERS_AUDIO) ;
256AddDriversToHaikuImage audio old	: $(SYSTEM_ADD_ONS_DRIVERS_AUDIO_OLD) ;
257AddDriversToHaikuImage midi			: $(SYSTEM_ADD_ONS_DRIVERS_MIDI) ;
258AddDriversToHaikuImage bus			: usb_raw fw_raw ;
259AddDriversToHaikuImage disk floppy	: pc_floppy@x86 ;
260AddDriversToHaikuImage disk usb		: usb_disk ;
261AddDriversToHaikuImage disk usb		: usb_floppy ;
262AddDriversToHaikuImage printer usb	: usb_printer ;
263AddDriversToHaikuImage disk virtual	: nbd ;
264AddDriversToHaikuImage dvb			: cx23882 ;
265AddDriversToHaikuImage graphics		: $(SYSTEM_ADD_ONS_DRIVERS_GRAPHICS) ;
266AddDriversToHaikuImage input		: ps2_hid usb_hid wacom ;
267AddDriversToHaikuImage misc			: <driver>poke <driver>mem ;
268AddDriversToHaikuImage net			: $(SYSTEM_ADD_ONS_DRIVERS_NET) ;
269AddDriversToHaikuImage ports		: usb_serial ;
270AddDriversToHaikuImage power		: $(SYSTEM_ADD_ONS_DRIVERS_POWER) ;
271
272# kernel
273AddFilesToHaikuImage system : <revisioned>kernel_$(TARGET_ARCH) ;
274
275# libs
276AddLibrariesToHaikuHybridImage system lib
277	: $(SYSTEM_LIBS) $(PRIVATE_SYSTEM_LIBS) ;
278
279# libnetwork.so replaces quite a few libraries
280SYSTEM_LIBS_LIBNETWORK_ALIASES
281	= libsocket.so libbind.so libnet.so ;
282
283if $(HAIKU_GCC_VERSION[1]) = 2 {
284	local lib ;
285	for lib in $(SYSTEM_LIBS_LIBNETWORK_ALIASES) {
286		AddSymlinkToHaikuHybridImage system lib : libnetwork.so : $(lib)
287			: : true ;
288	}
289
290	AddSymlinkToHaikuHybridImage system lib : libbnetapi.so : libnetapi.so
291		: : true ;
292}
293
294
295# libGL.so has GLU (like BeOS) built-in
296SYSTEM_LIBS_LIBGL_ALIASES = libGLU.so ;
297
298if $(TARGET_ARCH) = x86 {
299	local lib ;
300	for lib in $(SYSTEM_LIBS_LIBGL_ALIASES) {
301		AddSymlinkToHaikuHybridImage system lib : libGL.so : $(lib) : : true ;
302	}
303}
304
305# libbe.so now includes what used to be in liblocale.so
306# TODO: Remove this once all optional packages have been rebuilt (i.e. after
307#       next release)!
308SYSTEM_LIBS_LIBBE_ALIASES = liblocale.so ;
309if $(TARGET_ARCH) = x86 {
310	local lib ;
311	for lib in $(SYSTEM_LIBS_LIBBE_ALIASES) {
312		AddSymlinkToHaikuHybridImage system lib : libbe.so : $(lib) : : true ;
313	}
314}
315
316SYSTEM_LIBS_ALIASES =
317	$(SYSTEM_LIBS_LIBNETWORK_ALIASES)
318	libnetapi.so
319	$(SYSTEM_LIBS_LIBGL_ALIASES)
320	$(SYSTEM_LIBS_LIBBE_ALIASES)
321;
322
323OPTIONAL_LIBS_ALIASES =
324	libfreetype.so
325	libjpeg.so
326	libpng.so
327	libz.so
328;
329
330# libfreetype.so links to the current freetype lib
331AddSymlinkToHaikuHybridImage system lib : $(HAIKU_FREETYPE_CURRENT_LIB:BS)
332	: $(HAIKU_FREETYPE_CURRENT_LINK) : : true ;
333AddSymlinkToHaikuHybridImage system lib : $(HAIKU_FREETYPE_CURRENT_LINK)
334	: libfreetype.so : : true ;
335
336# libpng.so links to the current libpng
337AddSymlinkToHaikuHybridImage system lib : $(HAIKU_LIBPNG_CURRENT_LIB:BS)
338	: $(HAIKU_LIBPNG_CURRENT_LINK) : : true ;
339AddSymlinkToHaikuHybridImage system lib : $(HAIKU_LIBPNG_CURRENT_LINK)
340	: libpng.so : : true ;
341
342# libjpeg.so links to the current libjpeg
343AddSymlinkToHaikuHybridImage system lib : $(HAIKU_JPEG_CURRENT_LIB:BS)
344	: $(HAIKU_JPEG_CURRENT_LINK) : : true ;
345AddSymlinkToHaikuHybridImage system lib : $(HAIKU_JPEG_CURRENT_LINK)
346	: libjpeg.so : : true ;
347
348# zlib.so links to the current zlib
349AddSymlinkToHaikuHybridImage system lib : $(HAIKU_ZLIB_CURRENT_LIB:BS)
350	: $(HAIKU_ZLIB_CURRENT_LINK) : : true ;
351AddSymlinkToHaikuHybridImage system lib : $(HAIKU_ZLIB_CURRENT_LINK)
352	: libz.so : : true ;
353
354# servers
355AddFilesToHaikuImage system servers : $(SYSTEM_SERVERS) ;
356
357# apps
358AddFilesToHaikuImage system				: runtime_loader Deskbar Tracker ;
359AddFilesToHaikuImage system bin			: $(SYSTEM_BIN) consoled ;
360AddFilesToHaikuImage system apps		: $(SYSTEM_APPS) ;
361AddFilesToHaikuImage system preferences	: $(SYSTEM_PREFERENCES) ;
362AddFilesToHaikuImage system demos		: $(SYSTEM_DEMOS) ;
363
364SEARCH on which = [ FDirName $(HAIKU_TOP) data bin ] ;
365AddFilesToHaikuImage system bin			: which ;
366SEARCH on installoptionalpackage = [ FDirName $(HAIKU_TOP) data bin ] ;
367AddFilesToHaikuImage system bin			: installoptionalpackage ;
368SEARCH on install-wifi-firmwares.sh = [ FDirName $(HAIKU_TOP) data bin ] ;
369AddFilesToHaikuImage system bin			: install-wifi-firmwares.sh ;
370SEARCH on welcome = [ FDirName $(HAIKU_TOP) data bin ] ;
371AddFilesToHaikuImage system bin : welcome ;
372AddSymlinkToHaikuImage home Desktop
373	: /boot/system/bin/welcome : Welcome ;
374SEARCH on userguide = [ FDirName $(HAIKU_TOP) data bin ] ;
375AddFilesToHaikuImage system bin : userguide ;
376AddSymlinkToHaikuImage home Desktop
377	: /boot/system/bin/userguide : User\ Guide ;
378
379# Add the files to be used by installoptionalpackage.
380AddDirectoryToHaikuImage common data optional-packages ;
381local optional-pkg-files = BuildFeatures OptionalPackageDependencies
382	OptionalPackages OptionalLibPackages ;
383for name in $(optional-pkg-files) {
384	local file = [ FDirName $(HAIKU_TOP) build jam $(name) ] ;
385	AddFilesToHaikuImage common data optional-packages : $(file) ;
386}
387AddInstalledPackagesFileToHaikuImage ;
388
389AddSymlinkToHaikuImage system bin : bash : sh ;
390AddSymlinkToHaikuImage system bin : trash : untrash ;
391
392AddSymlinkToHaikuImage home Desktop : /boot/home : Home ;
393
394# Mailbox folders and symlink
395AddDirectoryToHaikuImage home mail draft ;
396AddDirectoryToHaikuImage home mail in ;
397AddDirectoryToHaikuImage home mail out ;
398
399AddSymlinkToHaikuImage home config : settings/deskbar : be ;
400# Deskbar Application links
401AddDirectoryToHaikuImage home config settings deskbar Applications ;
402DESKBAR_APPLICATIONS = ActivityMonitor CharacterMap CodyCam CDPlayer DeskCalc
403	Devices DiskProbe DriveSetup DiskUsage Expander Icon-O-Matic Installer
404	Magnify	Mail MediaConverter MediaPlayer MidiPlayer People PoorMan
405	Screenshot SoundRecorder StyledEdit Terminal TV
406;
407local linkTarget ;
408for linkTarget in $(DESKBAR_APPLICATIONS) {
409	AddSymlinkToHaikuImage home config settings deskbar Applications
410		: /boot/system/apps/$(linkTarget) : $(linkTarget) ;
411}
412
413# Deskbar Desktop applets links
414AddDirectoryToHaikuImage home config settings deskbar Desktop\ applets ;
415DESKBAR_DESKTOP_APPLETS = LaunchBox NetworkStatus PowerStatus ProcessController
416	Workspaces
417;
418for linkTarget in $(DESKBAR_DESKTOP_APPLETS) {
419	AddSymlinkToHaikuImage home config settings deskbar Desktop\ applets
420		: /boot/system/apps/$(linkTarget) : $(linkTarget) ;
421}
422
423# Deskbar Preferences links
424AddDirectoryToHaikuImage home config settings deskbar Preferences ;
425DESKBAR_PREFERENCES = $(SYSTEM_PREFERENCES:B) ;
426for linkTarget in $(DESKBAR_PREFERENCES) {
427	AddSymlinkToHaikuImage home config settings deskbar Preferences
428		: /boot/system/preferences/$(linkTarget)
429		: $(linkTarget) ;
430}
431
432# Deskbar Demo links
433AddDirectoryToHaikuImage home config settings deskbar Demos ;
434for linkTarget in $(SYSTEM_DEMOS) {
435	AddSymlinkToHaikuImage home config settings deskbar Demos
436		: /boot/system/demos/$(linkTarget) : $(linkTarget) ;
437}
438
439AddSymlinkToHaikuImage system bin : less : more ;
440AddSymlinkToHaikuImage system bin : gzip : gunzip ;
441AddSymlinkToHaikuImage system bin : gzip : zcat ;
442AddSymlinkToHaikuImage system bin : zdiff : zcmp ;
443AddSymlinkToHaikuImage system bin : unzip : zipinfo ;
444AddSymlinkToHaikuImage system bin : gawk : awk ;
445
446
447# scripts and data files
448local bootScripts = Bootscript Bootscript.cd SetupEnvironment Netscript
449	InstallerInitScript InstallerFinishScript ;
450SEARCH on $(bootScripts) = [ FDirName $(HAIKU_TOP) data system boot ] ;
451AddFilesToHaikuImage system boot : $(bootScripts) ;
452
453local userBootScripts = UserBootscript UserSetupEnvironment.sample ;
454SEARCH on $(userBootScripts) = [ FDirName $(HAIKU_TOP) data config boot ] ;
455AddFilesToHaikuImage home config boot : $(userBootScripts) ;
456
457# Add boot launch directory
458AddDirectoryToHaikuImage home config boot launch ;
459
460local logoArtwork =
461	$(HAIKU_INCLUDE_TRADEMARKS)"HAIKU logo - white on blue - big.png"
462	$(HAIKU_INCLUDE_TRADEMARKS)"HAIKU logo - white on blue - normal.png" ;
463SEARCH on $(logoArtwork) = [ FDirName $(HAIKU_TOP) data artwork ] ;
464AddFilesToHaikuImage system data artwork : $(logoArtwork) ;
465
466AddDirectoryToHaikuImage system data sounds ;
467
468# Add mail provider infos.
469AddFilesToHaikuImage home config settings Mail ProviderInfo :
470	$(HAIKU_PROVIDER_INFOS) ;
471
472# Mail spell check dictionaries
473local spellFiles = words geekspeak ;
474spellFiles = $(spellFiles:G=spell) ;
475SEARCH on $(spellFiles)
476	= [ FDirName $(HAIKU_TOP) src apps mail ] ;
477AddFilesToHaikuImage system data spell_check word_dictionary : $(spellFiles) ;
478
479local etcDir = [ FDirName $(HAIKU_TOP) data etc ] ;
480local etcFiles = inputrc profile ;
481etcFiles = $(etcFiles:G=etc) ;
482SEARCH on $(etcFiles) = [ FDirName $(etcDir) ] ;
483etcFiles += <etc>termcap <etc>sysless <etc>sysless.in ;
484AddFilesToHaikuImage common etc : $(etcFiles) ;
485
486local profileFiles = [ Glob $(etcDir)/profile.d : *.sh ] ;
487profileFiles = $(profileFiles:G=profile-d) ;
488AddDirectoryToHaikuImage common etc profile.d ;
489AddFilesToHaikuImage common etc profile.d : $(profileFiles) ;
490
491#local bashCompletionFiles = [ Glob $(etcDir)/bash_completion.d : * ] ;
492#local bashCompletionHelperFiles
493#    = [ Glob $(etcDir)/bash_completion.d/helpers : * ] ;
494#bashCompletionFiles = $(bashCompletionFiles:G=bash-completion) ;
495#bashCompletionHelperFiles = $(bashCompletionHelperFiles:G=bash-completion-hlp) ;
496#AddDirectoryToHaikuImage common etc bash_completion.d ;
497#AddDirectoryToHaikuImage common etc bash_completion.d helpers ;
498#AddFilesToHaikuImage common etc bash_completion.d : $(bashCompletionFiles) ;
499#AddFilesToHaikuImage common etc bash_completion.d helpers
500#    : $(bashCompletionHelperFiles) ;
501
502local fortuneFiles = [ Glob $(HAIKU_TOP)/data/system/data/fortunes
503	: [a-zA-Z0-9]* ] ;
504fortuneFiles = $(fortuneFiles:G=data!fortunes) ;
505AddFilesToHaikuImage system data fortunes : $(fortuneFiles) ;
506
507local fontDir = [ FDirName $(HAIKU_TOP) data system data fonts ] ;
508local psFonts = [ Glob $(fontDir)/psfonts : *.afm *.pfb ] ;
509local ttFonts = [ Glob $(fontDir)/ttfonts : *.ttf ] ;
510AddFilesToHaikuImage system data fonts psfonts : $(psFonts) ;
511AddFilesToHaikuImage system data fonts ttfonts : $(ttFonts) ;
512
513local cannaDir = [ FDirName $(HAIKU_TOP) data system data Canna ] ;
514local cannaDefault = [ Glob $(cannaDir)/default : *.canna *.gz ] ;
515local cannaDic = [ Glob $(cannaDir)/dic : *.cbp ] ;
516local cannaDicCanna = [ Glob $(cannaDir)/dic/canna
517	: *.cld *.ctd *.cbd *.dir ] ;
518AddFilesToHaikuImage system data Canna default : $(cannaDefault) ;
519AddFilesToHaikuImage system data Canna dic : $(cannaDic) ;
520AddFilesToHaikuImage system data Canna dic canna : $(cannaDicCanna) ;
521AddDirectoryToHaikuImage system data Canna dic group ;
522AddDirectoryToHaikuImage system data Canna dic user ;
523
524local keymapFiles = [ Glob [ FDirName $(HAIKU_TOP) src data keymaps ]
525	: *.keymap ] ;
526keymapFiles = $(keymapFiles:BG=keymap) ;
527AddFilesToHaikuImage system data Keymaps : $(keymapFiles) ;
528AddSymlinkToHaikuImage system data Keymaps : Swedish : Finnish ;
529AddSymlinkToHaikuImage system data Keymaps : Slovene : Croatian ;
530AddSymlinkToHaikuImage system data Keymaps : US-International : Brazilian ;
531
532# Copy keyboard layout files to the image one-by-one.
533local keyboardLayoutsDir
534	= [ FDirName $(HAIKU_TOP) data system data KeyboardLayouts ] ;
535local keyboardLayoutFiles =
536	"Generic 104-key"
537	"Generic 105-key International"
538	"Kinesis Advantage"
539	"Kinesis Ergo Elan International"
540	"TypeMatrix 2030" ;
541keyboardLayoutFiles = $(keyboardLayoutFiles:G=keyboard-layout) ;
542SEARCH on $(keyboardLayoutFiles) = $(keyboardLayoutsDir) ;
543AddFilesToHaikuImage system data KeyboardLayouts
544	: $(keyboardLayoutFiles) ;
545
546# Add Apple Aluminum keyboard layout files to the image in an Apple Aluminum
547# subdirectory. The subdirectory is turned into a submenu in the Layout menu
548# of the Keymap preference app.
549local appleAluminumDir
550	= [ FDirName $(HAIKU_TOP) data system data KeyboardLayouts
551		Apple\ Aluminum ] ;
552local appleAluminumFiles =
553	"Apple Aluminium Extended International"
554	"Apple Aluminium International"
555	"Apple Aluminum (US)"
556	"Apple Aluminum Extended (US)" ;
557appleAluminumFiles = $(appleAluminumFiles:G=keyboard-layout) ;
558SEARCH on $(appleAluminumFiles) = $(appleAluminumDir) ;
559AddFilesToHaikuImage system data KeyboardLayouts Apple\ Aluminum
560	: $(appleAluminumFiles) ;
561
562# Add ThinkPad keyboard layout files to the image in a ThinkPad
563# subdirectory. The subdirectory is turned into a submenu in the Layout menu
564# of the Keymap preference app.
565local thinkpadDir
566	= [ FDirName $(HAIKU_TOP) data system data KeyboardLayouts ThinkPad ] ;
567local thinkPadFiles =
568	"ThinkPad (US)"
569	"ThinkPad International"
570	"ThinkPad T400s (US)"
571	"ThinkPad T400s International"
572	"ThinkPad X1 (US)"
573	"ThinkPad X1 International"
574	"ThinkPad X100e (US)"
575	"ThinkPad X100e International" ;
576thinkPadFiles = $(thinkPadFiles:G=keyboard-layout) ;
577SEARCH on $(thinkPadFiles) = $(thinkpadDir) ;
578AddFilesToHaikuImage system data KeyboardLayouts ThinkPad
579	: $(thinkPadFiles) ;
580
581local driverSettingsFiles = <driver-settings>kernel ;
582SEARCH on $(driverSettingsFiles)
583	= [ FDirName $(HAIKU_TOP) data settings kernel drivers ] ;
584AddFilesToHaikuImage home config settings kernel drivers
585	: $(driverSettingsFiles) ;
586
587local networkSettingsFiles = <network-settings>services ;
588SEARCH on $(networkSettingsFiles)
589	= [ FDirName $(HAIKU_TOP) data settings network ] ;
590AddFilesToHaikuImage common settings network : $(networkSettingsFiles) ;
591
592# post install scripts and fresh install indicator file
593local postInstallFiles = add_catalog_entry_attributes.sh
594	default_deskbar_items.sh mime_update.sh ;
595postInstallFiles = $(postInstallFiles:G=post-install) ;
596SEARCH on $(postInstallFiles)
597	= [ FDirName $(HAIKU_TOP) data common boot post_install ] ;
598SEARCH on <post-install>fresh_install
599	= [ FDirName $(HAIKU_TOP) data common settings ] ;
600AddFilesToHaikuImage common boot post_install : $(postInstallFiles) ;
601AddFilesToHaikuImage common settings : <post-install>fresh_install ;
602
603# boot loader
604AddFilesToHaikuImage system : haiku_loader ;
605
606# boot module links
607AddBootModuleSymlinksToHaikuImage
608	acpi@x86 ata@ata pci isa@x86 config_manager dpc
609	ide@ide scsi usb
610	openpic@ppc
611	ata_adapter@ata ide_adapter@ide locked_pool scsi_periph
612	ahci generic_ide_pci it8211 legacy_sata silicon_image_3112
613	ide_isa@x86
614	<usb>uhci <usb>ohci <usb>ehci
615	scsi_cd scsi_disk usb_disk
616	efi_gpt
617	intel
618	bfs
619;
620
621# add-ons
622AddFilesToHaikuImage system add-ons accelerants
623	: $(SYSTEM_ADD_ONS_ACCELERANTS) ;
624
625# OpenGL renderers
626if $(TARGET_ARCH) = x86 {
627	if $(HAIKU_GCC_VERSION[1]) = 2 {
628		AddFilesToHaikuHybridImage system add-ons opengl
629			: Legacy\ Software\ Rasterizer : : true ;
630	} else {
631		AddFilesToHaikuHybridImage system add-ons opengl
632			: Software\ Rasterizer : : true ;
633		# Future Gallium3d
634	}
635}
636
637AddFilesToHaikuHybridImage system add-ons Translators
638	: $(SYSTEM_ADD_ONS_TRANSLATORS) : : true ;
639AddFilesToHaikuImage system add-ons locale catalogs
640	: $(SYSTEM_ADD_ONS_LOCALE_CATALOGS) ;
641AddFilesToHaikuHybridImage system add-ons locale catalogs
642	: $(SYSTEM_ADD_ONS_LOCALE_CATALOGS) : : true ;
643AddFilesToHaikuImage system add-ons mail_daemon inbound_protocols : POP3 IMAP ;
644AddFilesToHaikuImage system add-ons mail_daemon outbound_protocols : SMTP ;
645AddFilesToHaikuImage system add-ons mail_daemon inbound_filters
646	: MatchHeader SpamFilter NewMailNotification ;
647AddFilesToHaikuImage system add-ons mail_daemon outbound_filters : Fortune ;
648AddFilesToHaikuImage system add-ons media : $(SYSTEM_ADD_ONS_MEDIA) ;
649AddFilesToHaikuImage system add-ons media plugins
650	: $(SYSTEM_ADD_ONS_MEDIA_PLUGINS) ;
651AddFilesToHaikuImage system add-ons Tracker
652	: FileType-F Mark\ as��� Mark\ as\ Read-R Open\ Target\ Folder-O
653	Open\ Terminal-T ZipOMatic-Z ;
654AddSymlinkToHaikuImage system add-ons Tracker
655	: /boot/system/preferences/Backgrounds : Background-B ;
656AddSymlinkToHaikuImage system add-ons Tracker
657	: /boot/system/apps/TextSearch : TextSearch-G ;
658AddSymlinkToHaikuImage system add-ons Tracker
659	: /boot/system/apps/DiskUsage : DiskUsage-I ;
660AddFilesToHaikuImage system add-ons input_server devices
661	: <input>keyboard <input>mouse <input>tablet <input>wacom ;
662AddFilesToHaikuImage system add-ons input_server filters
663	: screen_saver shortcut_catcher ;
664AddFilesToHaikuImage system add-ons kernel network
665	: <net>notifications stack ;
666AddFilesToHaikuImage system add-ons kernel network devices
667	: $(SYSTEM_NETWORK_DEVICES) ;
668AddFilesToHaikuImage system add-ons kernel network datalink_protocols
669	: $(SYSTEM_NETWORK_DATALINK_PROTOCOLS) ;
670AddFilesToHaikuImage system add-ons kernel network ppp
671	: $(SYSTEM_NETWORK_PPP) ;
672AddFilesToHaikuImage system add-ons kernel network protocols
673	: $(SYSTEM_NETWORK_PROTOCOLS) ;
674AddFilesToHaikuImage system add-ons Print : $(SYSTEM_ADD_ONS_PRINT) ;
675AddFilesToHaikuImage system add-ons Print transport
676	: $(SYSTEM_ADD_ONS_PRINT_TRANSPORT) ;
677AddFilesToHaikuImage system add-ons Screen\ Savers
678	: $(SYSTEM_ADD_ONS_SCREENSAVERS) ;
679
680AddFilesToHaikuImage system add-ons disk_systems
681	: <disk_system>intel <disk_system>gpt <disk_system>bfs <disk_system>ntfs ;
682
683# decorators
684AddDirectoryToHaikuImage home config add-ons decorators ;
685#AddFilesToHaikuImage home config add-ons decorators : ;
686
687# create directories that will remain empty
688AddDirectoryToHaikuImage common bin ;
689AddDirectoryToHaikuImage common include ;
690AddDirectoryToHaikuImage common lib ;
691AddDirectoryToHaikuImage home Desktop ;
692AddDirectoryToHaikuImage home config bin ;
693AddDirectoryToHaikuImage home config lib ;
694AddDirectoryToHaikuImage home mail ;
695AddDirectoryToHaikuImage common var empty ;
696AddDirectoryToHaikuImage common var log ;
697AddDirectoryToHaikuImage common cache tmp ;
698
699AddDirectoryToHaikuImage home config add-ons kernel drivers bin ;
700AddDirectoryToHaikuImage home config add-ons kernel drivers dev ;
701AddDirectoryToHaikuImage home config add-ons input_server devices ;
702AddDirectoryToHaikuImage home config add-ons input_server filters ;
703AddDirectoryToHaikuImage home config add-ons input_server methods ;
704AddDirectoryToHaikuImage home config add-ons media plugins ;
705AddDirectoryToHaikuImage home config add-ons Tracker ;
706AddDirectoryToHaikuImage home config add-ons Print ;
707AddDirectoryToHaikuImage home config add-ons Screen\ Savers ;
708AddDirectoryToHaikuImage home config add-ons Translators ;
709AddDirectoryToHaikuImage system data synth ;
710AddDirectoryToHaikuImage system add-ons input_server methods ;
711
712# optional
713AddFilesToHaikuImage optional system add-ons input_server methods : canna ;
714
715# printers
716AddDirectoryToHaikuImage home config settings printers Preview
717	: home-config-settings-printers-preview.rdef ;
718AddDirectoryToHaikuImage home config settings printers "Save as PDF"
719	: home-config-settings-printers-save-as-pdf.rdef ;
720
721# PDF Writer enconding files
722CopyDirectoryToHaikuImage system data
723	: [ FDirName $(HAIKU_TOP) src add-ons print drivers pdf encoding ]
724	: "PDF Writer" : -x Jamfile ;
725
726# Gutenprint data files
727CopyDirectoryToHaikuImage system data
728	: [ FDirName $(HAIKU_TOP) src libs print libgutenprint src xml ]
729	: gutenprint : -x *.c -x Makefile.am -x Makefile.in ;
730
731# dvb channel settings
732CopyDirectoryToHaikuImage home config settings Media
733	: [ FDirName $(HAIKU_TOP) data settings media dvb ]
734	: dvb : -x Jamfile ;
735
736# licenses
737CopyDirectoryToHaikuImage system data
738	: [ FDirName $(HAIKU_TOP) data system data licenses ]
739	: licenses ;
740
741# Copy documentation as per DiskUsage's license requirement.
742CopyDirectoryToHaikuImage system documentation
743	: [ FDirName $(HAIKU_TOP) docs apps diskusage ]
744	: diskusage ;
745
746# Copy documentation as per PDFlib Lite's license requirement.
747CopyDirectoryToHaikuImage system documentation
748	: [ FDirName $(HAIKU_TOP) src libs pdflib doc ]
749	: pdflib ;
750
751# Copy sample programs as per PDFlib Lite's license requirement.
752CopyDirectoryToHaikuImage develop sample-code
753	: [ FDirName $(HAIKU_TOP) src libs pdflib bind pdflib ]
754	: pdflib ;
755
756# Copy OpenGL kit headers into image
757if $(TARGET_ARCH) = x86 {
758	CopyDirectoryToHaikuImage develop headers os opengl
759		: [ FDirName $(HAIKU_MESA_HEADERS) GL ] ;
760	CopyDirectoryToHaikuImage develop headers os opengl
761		: [ FDirName $(HAIKU_GLU_HEADERS) GL ] ;
762}
763
764#pragma mark - Optional Packages
765
766
767HAIKU_IMAGE_OPTIONAL_PACKAGE_DESCRIPTIONS = ;
768
769include [ FDirName $(HAIKU_BUILD_RULES_DIR) OptionalPackages ] ;
770include [ FDirName $(HAIKU_BUILD_RULES_DIR) OptionalTestPackages ] ;
771include [ FDirName $(HAIKU_BUILD_RULES_DIR) OptionalLibPackages ] ;
772
773local optionalPackageDescriptions ;
774if $(HAIKU_IMAGE_OPTIONAL_PACKAGE_DESCRIPTIONS) {
775	optionalPackageDescriptions = <haiku-image>optional_package_descriptions ;
776	MakeLocate $(optionalPackageDescriptions)
777		: $(HAIKU_COMMON_PLATFORM_OBJECT_DIR) ;
778
779	Depends $(optionalPackageDescriptions)
780		: $(HAIKU_IMAGE_OPTIONAL_PACKAGE_DESCRIPTIONS) ;
781
782	actions together BuildOptionalPackageDescriptions
783	{
784		cat $(2) > $(1)
785	}
786
787	BuildOptionalPackageDescriptions $(optionalPackageDescriptions)
788		: $(HAIKU_IMAGE_OPTIONAL_PACKAGE_DESCRIPTIONS) ;
789}
790
791
792#pragma mark - Alternative GCC Libraries
793
794
795# We build a zip archive containing the libraries built with the alternative
796# GCC and unzip onto our image. Building the archive is done by a sub-jam.
797include [ FDirName $(HAIKU_BUILD_RULES_DIR) AlternativeGCCArchive ] ;
798
799if $(HAIKU_ADD_ALTERNATIVE_GCC_LIBS) = 1
800		&& $(HAIKU_ALTERNATIVE_GCC_OUTPUT_DIR) {
801	# let another jam build a zip with the system libraries
802	rule InvokeSubJam target : directory : jamLine
803	{
804		DIRECTORY on $(target) = $(directory) ;
805		COMMAND_LINE on $(target) = $(jamLine) ;
806		local optionalPackages = $(HAIKU_ADDED_OPTIONAL_PACKAGES:J=/) ;
807		OPTIONAL_PACKAGES on $(target) = $(optionalPackages:E="") ;
808		Always $(target) ;
809		InvokeSubJam1 $(target) ;
810	}
811
812	actions InvokeSubJam1
813	{
814		cd $(DIRECTORY)
815		export HAIKU_IGNORE_USER_BUILD_CONFIG=1
816		export HAIKU_ADD_OPTIONAL_PACKAGES=$(OPTIONAL_PACKAGES)
817		export HAIKU_PRIMARY_GCC=$(HAIKU_GCC_VERSION[1])
818		# NOTE: depending on when InvokeSubJam is called, you may end up with
819		# 2 * n - 1 jobs in total.
820		$(JAM:E=jam) -q -j$(JAMJOBS) $(COMMAND_LINE) ;
821	}
822
823	local otherAlternativeSystemLibsZip
824		= <other-image>alternative_system_libs.zip ;
825	MakeLocate $(otherAlternativeSystemLibsZip)
826		: $(HAIKU_ALTERNATIVE_GCC_OUTPUT_DIR) ;
827
828	InvokeSubJam $(otherAlternativeSystemLibsZip)
829		: $(HAIKU_ALTERNATIVE_GCC_OUTPUT_DIR)
830		: "haiku-alternative-gcc-archive" ;
831
832	# install the alternative libs in the right directory
833	ExtractArchiveToHaikuImage : $(otherAlternativeSystemLibsZip) ;
834}
835
836
837#pragma mark - User/Group Setup
838
839
840# add the root user and the root and users groups
841AddUserToHaikuImage $(HAIKU_ROOT_USER_NAME:E=baron) : 0 : 0 : /boot/home
842	: /bin/bash : $(HAIKU_ROOT_USER_REAL_NAME:E="Root User") ;
843AddGroupToHaikuImage root : 0 : ;
844AddGroupToHaikuImage users : 100 : ;
845
846
847#pragma mark - Host Name
848
849
850if $(HAIKU_IMAGE_HOST_NAME) {
851	actions BuildHaikuImageHostnameFile
852	{
853		echo "$(HAIKU_IMAGE_HOST_NAME)" > $(1)
854	}
855
856	local file = <haiku-image>hostname ;
857	Always $(file) ;
858	MakeLocate $(file) : $(HAIKU_COMMON_PLATFORM_OBJECT_DIR) ;
859	BuildHaikuImageHostnameFile $(file) ;
860	AddFilesToHaikuImage common settings network : $(file) ;
861}
862
863
864#pragma mark - Build The Image
865
866
867# Execute pre-image user config rules.
868UserBuildConfigRulePreImage	;
869
870# Set image name and directory defaults and locate the image.
871HAIKU_IMAGE_NAME ?= $(HAIKU_DEFAULT_IMAGE_NAME) ;
872HAIKU_IMAGE_DIR ?= $(HAIKU_DEFAULT_IMAGE_DIR) ;
873HAIKU_IMAGE = $(HAIKU_IMAGE_NAME) ;
874HAIKU_IMAGE_SIZE ?= $(HAIKU_DEFAULT_IMAGE_SIZE) ; # 300 MB
875HAIKU_IMAGE_LABEL ?= $(HAIKU_DEFAULT_IMAGE_LABEL) ;
876MakeLocate $(HAIKU_IMAGE) : $(HAIKU_IMAGE_DIR) ;
877
878# Set the default installation directory.
879HAIKU_INSTALL_DIR ?= $(HAIKU_DEFAULT_INSTALL_DIR) ;
880
881# the pseudo target all image contents is attached to
882NotFile $(HAIKU_IMAGE_CONTAINER_NAME) ;
883
884# Detect a hybrid GCC2/GCC4 image.
885local isHybridBuild ;
886if $(HAIKU_ADD_ALTERNATIVE_GCC_LIBS) = 1
887		&& $(HAIKU_ALTERNATIVE_GCC_OUTPUT_DIR) {
888	isHybridBuild = 1 ;
889}
890
891# prepare the script that initializes the shell variables
892HAIKU_IMAGE_INIT_VARIABLES_SCRIPT = <HaikuImage>haiku.image-init-vars ;
893local script = $(HAIKU_IMAGE_INIT_VARIABLES_SCRIPT) ;
894MakeLocate $(script) : $(HAIKU_OUTPUT_DIR) ;
895Always $(script) ;
896
897AddVariableToScript $(script) : sourceDir : $(HAIKU_TOP) ;
898AddVariableToScript $(script) : outputDir : $(HAIKU_OUTPUT_DIR) ;
899AddVariableToScript $(script) : tmpDir : $(HAIKU_TMP_DIR) ;
900AddVariableToScript $(script) : installDir : $(HAIKU_INSTALL_DIR) ;
901#AddVariableToScript $(script) : isImage : 1 ;
902AddVariableToScript $(script) : imageSize : $(HAIKU_IMAGE_SIZE) ;
903AddVariableToScript $(script) : imageLabel : $(HAIKU_IMAGE_LABEL) ;
904AddVariableToScript $(script) : addBuildCompatibilityLibDir
905	: $(HOST_ADD_BUILD_COMPATIBILITY_LIB_DIR) ;
906AddVariableToScript $(script) : dontClearImage : $(HAIKU_DONT_CLEAR_IMAGE) ;
907AddVariableToScript $(script) : updateOnly : [ IsUpdateHaikuImageOnly ] ;
908AddTargetVariableToScript $(script) : <build>addattr ;
909AddTargetVariableToScript $(script) : <build>bfs_shell : bfsShell ;
910AddTargetVariableToScript $(script) : <build>fs_shell_command : fsShellCommand ;
911AddTargetVariableToScript $(script) : <build>copyattr ;
912AddTargetVariableToScript $(script) : <build>create_image : createImage ;
913AddTargetVariableToScript $(script) : <build>makebootable ;
914AddTargetVariableToScript $(script) : <build>rc ;
915AddTargetVariableToScript $(script) : <build>resattr ;
916AddTargetVariableToScript $(script) : <build>unzip ;
917AddTargetVariableToScript $(script) : <build>vmdkimage ;
918AddVariableToScript $(script) : stripCommand : $(HAIKU_STRIP) ;
919if $(HOST_RM_ATTRS_TARGET) {
920	AddTargetVariableToScript $(script) : $(HOST_RM_ATTRS_TARGET) : rmAttrs ;
921} else {
922	AddVariableToScript $(script) : rmAttrs : rm ;
923}
924if $(optionalPackageDescriptions) {
925	AddTargetVariableToScript $(script) : $(optionalPackageDescriptions)
926		: optionalPackageDescriptions ;
927}
928
929
930# create the other scripts
931HAIKU_IMAGE_MAKE_DIRS_SCRIPT = <HaikuImage>haiku.image-make-dirs ;
932HAIKU_IMAGE_COPY_FILES_SCRIPT = <HaikuImage>haiku.image-copy-files ;
933HAIKU_IMAGE_EXTRACT_FILES_SCRIPT = <HaikuImage>haiku.image-extract-files ;
934MakeLocate $(HAIKU_IMAGE_MAKE_DIRS_SCRIPT) $(HAIKU_IMAGE_COPY_FILES_SCRIPT)
935	$(HAIKU_IMAGE_EXTRACT_FILES_SCRIPT) : $(HAIKU_OUTPUT_DIR) ;
936
937CreateHaikuImageMakeDirectoriesScript $(HAIKU_IMAGE_MAKE_DIRS_SCRIPT) ;
938CreateHaikuImageCopyFilesScript $(HAIKU_IMAGE_COPY_FILES_SCRIPT) ;
939CreateHaikuImageExtractFilesScript $(HAIKU_IMAGE_EXTRACT_FILES_SCRIPT) ;
940
941# Convenience wrapper rule around BuildHaikuImage.
942rule _BuildHaikuImage image : isImage : isVMwareImage
943{
944	# _BuildHaikuImage <image target> : <isImage> : <isVMwareImage> ;
945	#
946
947	# build the image
948	# HAIKU_IMAGE_EARLY_USER_SCRIPTS, HAIKU_IMAGE_LATE_USER_SCRIPTS can be
949	# specified by the user.
950	BuildHaikuImage $(image) :
951		$(HAIKU_IMAGE_INIT_VARIABLES_SCRIPT)
952		$(HAIKU_IMAGE_EARLY_USER_SCRIPTS)
953		$(HAIKU_IMAGE_MAKE_DIRS_SCRIPT)
954		$(HAIKU_IMAGE_COPY_FILES_SCRIPT)
955		$(HAIKU_IMAGE_EXTRACT_FILES_SCRIPT)
956		$(HAIKU_IMAGE_LATE_USER_SCRIPTS)
957		: $(isImage)
958		: $(isVMwareImage)
959	;
960
961	# remove the scripts we have generated
962	RmTemps $(image) :
963		$(HAIKU_IMAGE_INIT_VARIABLES_SCRIPT)
964		$(HAIKU_IMAGE_MAKE_DIRS_SCRIPT)
965		$(HAIKU_IMAGE_COPY_FILES_SCRIPT)
966		$(HAIKU_IMAGE_EXTRACT_FILES_SCRIPT)
967	;
968}
969
970# build the image
971_BuildHaikuImage $(HAIKU_IMAGE) : true ;
972NotFile haiku-image ;
973Depends haiku-image : $(HAIKU_IMAGE) ;
974
975
976# install Haiku into a directory
977NotFile install-haiku ;
978_BuildHaikuImage install-haiku : 0 ;
979
980
981# build the VMware image
982HAIKU_VMWARE_IMAGE_NAME ?= $(HAIKU_DEFAULT_VMWARE_IMAGE_NAME) ;
983HAIKU_VMWARE_IMAGE = $(HAIKU_VMWARE_IMAGE_NAME) ;
984MakeLocate $(HAIKU_VMWARE_IMAGE) : $(HAIKU_IMAGE_DIR) ;
985
986_BuildHaikuImage $(HAIKU_VMWARE_IMAGE) : true : true ;
987NotFile haiku-vmware-image ;
988Depends haiku-vmware-image : $(HAIKU_VMWARE_IMAGE) ;
989
990# Execute post-image user config rules.
991UserBuildConfigRulePostImage ;
992