xref: /haiku/build/jam/BuildFeatures (revision 8d2bf6953e851d431fc67de1bc970c40afa79e9f)
1# This file contains setup for build features that are not available for all
2# architectures/setups or that are optional for the build. For features that
3# require downloading a zip file from somewhere it is likely the same file used
4# for an optional package.
5
6
7# Add the target architecture as a build feature.
8EnableBuildFeatures $(HAIKU_ARCH) ;
9
10
11# Detect a hybrid GCC2/GCC4 image and disable the checks for unavailable GCC4
12# packages. (It does not matter if a package was built with either compiler,
13# the system should have the respective other system libs.)
14local isHybridBuild ;
15if $(HAIKU_ADD_ALTERNATIVE_GCC_LIBS) = 1
16		&& $(HAIKU_ALTERNATIVE_GCC_OUTPUT_DIR) {
17	isHybridBuild = 1 ;
18}
19
20local baseURL = http://www.haiku-files.org/files/optional-packages ;
21
22
23# SSL
24
25# Automatically enable the SSL feature, when the optional OpenSSL optional
26# package is enabled.
27if [ IsOptionalHaikuImagePackageAdded OpenSSL ] {
28	HAIKU_BUILD_FEATURE_SSL = 1 ;
29}
30
31if $(HAIKU_GCC_VERSION[1]) >= 4 {
32	if $(TARGET_ARCH) = x86_64 {
33		HAIKU_OPENSSL_PACKAGE = openssl-1.0.0j-x86_64-2012-12-18.zip ;
34	} else {
35		HAIKU_OPENSSL_PACKAGE = openssl-1.0.0j-r1a4-x86-gcc4-2012-08-29.zip ;
36	}
37} else {
38	HAIKU_OPENSSL_PACKAGE = openssl-1.0.0j-r1a4-x86-gcc2-2012-08-26.zip ;
39}
40
41HAIKU_OPENSSL_URL = $(baseURL)/$(HAIKU_OPENSSL_PACKAGE) ;
42
43if $(HAIKU_BUILD_FEATURE_SSL) {
44	if $(TARGET_ARCH) = x86 || $(TARGET_ARCH) = x86_64 {
45		# Download the zip archive.
46		local zipFile = [ DownloadFile $(HAIKU_OPENSSL_PACKAGE)
47			: $(HAIKU_OPENSSL_URL) ] ;
48
49		# zip file and output directory
50		HAIKU_OPENSSL_ZIP_FILE = $(zipFile) ;
51		HAIKU_OPENSSL_DIR = [ FDirName $(HAIKU_OPTIONAL_BUILD_PACKAGES_DIR)
52			$(HAIKU_OPENSSL_PACKAGE:B) ] ;
53
54		# extract headers and libraries
55		HAIKU_OPENSSL_HEADERS_DEPENDENCY = [ ExtractArchive $(HAIKU_OPENSSL_DIR)
56			: common/include/ : $(zipFile) : extracted-openssl
57		] ;
58
59		HAIKU_OPENSSL_LIBS = [ ExtractArchive $(HAIKU_OPENSSL_DIR)
60			:
61			common/lib/libcrypto.so
62			common/lib/libssl.so
63			: $(zipFile)
64			: extracted-openssl
65		] ;
66
67		HAIKU_OPENSSL_HEADERS
68			= [ FDirName $(HAIKU_OPENSSL_DIR) common include ] ;
69
70		EnableBuildFeatures openssl ;
71	} else {
72		Echo "SSL build feature not available for $(TARGET_ARCH)" ;
73	}
74}
75
76
77# ICU
78
79# Note ICU isn't actually optional, but is still an external package
80HAIKU_ICU_GCC_2_PACKAGE = icu-4.8.1.1-r1a4-x86-gcc2-2012-08-29.zip ;
81HAIKU_ICU_GCC_4_PACKAGE = icu-4.8.1.1-r1a4-x86-gcc4-2012-08-29.zip ;
82HAIKU_ICU_PPC_PACKAGE = icu-4.8.1-ppc-2011-08-20.zip ;
83HAIKU_ICU_ARM_PACKAGE = icu-4.8.1.1-arm-2012-11-21.zip ;
84HAIKU_ICU_X86_64_PACKAGE = icu-4.8.1.1-x86_64-2012-07-30.zip ;
85
86if $(TARGET_ARCH) in arm ppc x86 x86_64 {
87	local icu_package ;
88	if $(TARGET_ARCH) = ppc {
89		icu_package = $(HAIKU_ICU_PPC_PACKAGE) ;
90		HAIKU_ICU_DEVEL_PACKAGE = icu-devel-4.8.1-ppc-2011-12-19.zip ;
91	} else if $(TARGET_ARCH) = arm {
92		icu_package = $(HAIKU_ICU_ARM_PACKAGE) ;
93		HAIKU_ICU_DEVEL_PACKAGE = icu-devel-4.8.1.1-arm-2012-11-21.zip ;
94	} else if $(TARGET_ARCH) = x86_64 {
95		icu_package = $(HAIKU_ICU_X86_64_PACKAGE) ;
96		HAIKU_ICU_DEVEL_PACKAGE = icu-devel-4.8.1.1-x86_64-2012-07-30.zip ;
97	} else if $(HAIKU_GCC_VERSION[1]) = 2 {
98		icu_package = $(HAIKU_ICU_GCC_2_PACKAGE) ;
99		HAIKU_ICU_DEVEL_PACKAGE = icu-devel-4.8.1.1-x86-gcc2-2011-12-20.zip ;
100	} else {
101		icu_package = $(HAIKU_ICU_GCC_4_PACKAGE) ;
102		HAIKU_ICU_DEVEL_PACKAGE = icu-devel-4.8.1.1-x86-gcc4-2011-12-20.zip ;
103	}
104	local zipFile = [ DownloadFile $(icu_package)
105		: $(baseURL)/$(icu_package) ] ;
106
107	# zip file and output directory
108	HAIKU_ICU_ZIP_FILE = $(zipFile) ;
109	HAIKU_ICU_DIR = [ FDirName $(HAIKU_OPTIONAL_BUILD_PACKAGES_DIR)
110		$(icu_package:B) ] ;
111
112	# extract libraries
113	if $(TARGET_ARCH) = ppc {
114		HAIKU_ICU_LIBS = [ ExtractArchive $(HAIKU_ICU_DIR)
115			:
116			libicudata.so.48.1
117			libicui18n.so.48.1
118			libicuio.so.48.1
119			libicule.so.48.1
120			libiculx.so.48.1
121			libicutu.so.48.1
122			libicuuc.so.48.1
123			: $(zipFile)
124			: extracted-icu
125		] ;
126	} else {
127		HAIKU_ICU_LIBS = [ ExtractArchive $(HAIKU_ICU_DIR)
128			:
129			libicudata.so.48.1.1
130			libicui18n.so.48.1.1
131			libicuio.so.48.1.1
132			libicule.so.48.1.1
133			libiculx.so.48.1.1
134			libicutu.so.48.1.1
135			libicuuc.so.48.1.1
136			: $(zipFile)
137			: extracted-icu
138		] ;
139	}
140
141	# zip file and output directory
142	HAIKU_ICU_DEVEL_ZIP_FILE = [ DownloadFile $(HAIKU_ICU_DEVEL_PACKAGE)
143			: $(baseURL)/$(HAIKU_ICU_DEVEL_PACKAGE) ] ;
144	HAIKU_ICU_DEVEL_DIR = [ FDirName $(HAIKU_OPTIONAL_BUILD_PACKAGES_DIR)
145		$(HAIKU_ICU_DEVEL_PACKAGE:B) ] ;
146
147	# extract headers
148	HAIKU_ICU_HEADERS_DEPENDENCY = [ ExtractArchive $(HAIKU_ICU_DEVEL_DIR)
149		: develop/headers/3rdparty : $(HAIKU_ICU_DEVEL_ZIP_FILE)
150		: extracted-icu-devel ] ;
151
152	HAIKU_ICU_HEADERS
153		= [ FDirName $(HAIKU_ICU_DEVEL_DIR) develop headers 3rdparty ] ;
154
155	EnableBuildFeatures icu ;
156} else  {
157	Echo "ICU not available for $(TARGET_ARCH)" ;
158}
159
160
161# CLucene
162
163# Automatically install the CLucene feature, when the optional CLucene optional
164# package is enabled.
165if [ IsOptionalHaikuImagePackageAdded CLucene ] {
166	HAIKU_BUILD_FEATURE_CLUCENE = 1 ;
167}
168
169
170HAIKU_CLUCENE_PACKAGE = clucene-0.9.21-x86-gcc4-haiku-2009-08-11.zip ;
171HAIKU_CLUCENE_URL = $(baseURL)/$(HAIKU_CLUCENE_PACKAGE) ;
172
173if $(HAIKU_BUILD_FEATURE_CLUCENE) {
174	if $(TARGET_ARCH) != x86 {
175		Echo "CLucene build feature not available for $(TARGET_ARCH)" ;
176	} else {
177		# Download the zip archive.
178		local zipFile = [ DownloadFile $(HAIKU_CLUCENE_PACKAGE)
179			: $(HAIKU_CLUCENE_URL) ] ;
180
181		# zip file and output directory
182		HAIKU_CLUCENE_ZIP_FILE = $(zipFile) ;
183		HAIKU_CLUCENE_DIR = [ FDirName $(HAIKU_OPTIONAL_BUILD_PACKAGES_DIR)
184			$(HAIKU_CLUCENE_PACKAGE:B) ] ;
185
186		# extract headers and libraries
187		HAIKU_CLUCENE_HEADERS_DEPENDENCY = [ ExtractArchive $(HAIKU_CLUCENE_DIR)
188			: common/include/ : $(zipFile) : extracted-clucene
189		] ;
190
191		HAIKU_CLUCENE_LIBS = [ ExtractArchive $(HAIKU_CLUCENE_DIR)
192			:
193			common/lib/libclucene.a
194			: $(zipFile)
195			 : extracted-clucene
196		] ;
197
198		HAIKU_CLUCENE_HEADERS
199			= [ FDirName $(HAIKU_CLUCENE_DIR) common include ] ;
200
201		EnableBuildFeatures clucene ;
202	}
203}
204
205
206# GLU (GL Utilities)
207if $(TARGET_ARCH) = x86 {
208	if $(HAIKU_GCC_VERSION[1]) >= 4 {
209		HAIKU_GLU_FILE = glu-9.0-x86-gcc4-2012-11-13.zip ;
210	} else {
211		HAIKU_GLU_FILE = glu-9.0-x86-gcc2-2012-11-13.zip ;
212	}
213
214	local zipFile = [ DownloadFile $(HAIKU_GLU_FILE)
215		: $(baseURL)/lib/$(HAIKU_GLU_FILE) ] ;
216
217	HAIKU_GLU_DIR = [ FDirName $(HAIKU_OPTIONAL_BUILD_PACKAGES_DIR)
218		$(HAIKU_GLU_FILE:B) ] ;
219	HAIKU_GLU_HEADERS_DEPENDENCY = [ ExtractArchive $(HAIKU_GLU_DIR)
220		: develop/headers/os/opengl/GL : $(zipFile) : extracted-glu-headers ] ;
221	HAIKU_GLU_LIBS = [ ExtractArchive $(HAIKU_GLU_DIR)
222		: system/lib/libGLU.a : $(zipFile) : extracted-glu ] ;
223	HAIKU_GLU_HEADERS = [ FDirName $(HAIKU_GLU_DIR) develop headers os opengl ] ;
224
225	EnableBuildFeatures glu ;
226} else {
227	Echo "GLU not yet available on $(TARGET_ARCH)" ;
228}
229
230
231# Mesa
232if $(TARGET_ARCH) = x86 {
233	local zipFile ;
234	if $(HAIKU_GCC_VERSION[1]) >= 4 {
235		HAIKU_MESA_FILE = mesa-9.2.0-x86-gcc4-2013-08-28.zip ;
236	} else {
237		HAIKU_MESA_FILE = mesa-7.8.2-x86-gcc2-2013-04-28.zip ;
238	}
239
240	zipFile = [ DownloadFile $(HAIKU_MESA_FILE)
241		: $(baseURL)/$(HAIKU_MESA_FILE) ] ;
242
243	HAIKU_MESA_DIR = [ FDirName $(HAIKU_OPTIONAL_BUILD_PACKAGES_DIR)
244		$(HAIKU_MESA_FILE:B) ] ;
245
246	HAIKU_MESA_HEADERS = [ FDirName $(HAIKU_MESA_DIR) include ] ;
247	HAIKU_MESA_HEADERS_DEPENDENCY = [ ExtractArchive $(HAIKU_MESA_DIR)
248		: include/ : $(zipFile) : extracted-mesa ] ;
249
250	# Base Mesa libraries
251	HAIKU_MESA_LIB = [ ExtractArchive $(HAIKU_MESA_DIR)
252		:
253		lib.haiku/libmesa.a
254		: $(zipFile)
255		: extracted-mesa ] ;
256	HAIKU_GLAPI_LIB = [ ExtractArchive $(HAIKU_MESA_DIR)
257		:
258		lib.haiku/libglapi.a
259		: $(zipFile)
260		: extracted-mesa ] ;
261
262	Depends $(HAIKU_MESA_HEADERS_DEPENDENCY) : $(HAIKU_GLU_HEADERS_DEPENDENCY) ;
263	Depends $(HAIKU_GLAPI_LIBS) : $(HAIKU_GLU_LIBS) ;
264
265	# Extended Mesa libraries for newer versions
266	if $(HAIKU_GCC_VERSION[1]) >= 4 {
267		HAIKU_GLSL_LIB = [ ExtractArchive $(HAIKU_MESA_DIR)
268			:
269			lib.haiku/libglsl.a
270			: $(zipFile)
271			: extracted-mesa ] ;
272		HAIKU_GALLIUM_LIB = [ ExtractArchive $(HAIKU_MESA_DIR)
273			:
274			lib.haiku/libgallium.a
275			: $(zipFile)
276			: extracted-mesa ] ;
277		HAIKU_GALLIUM_SWPIPE_LIB = [ ExtractArchive $(HAIKU_MESA_DIR)
278			:
279			lib.haiku/swpipe_bundle.a
280			: $(zipFile)
281			: extracted-mesa ] ;
282	}
283
284	EnableBuildFeatures mesa ;
285} else {
286	Echo "Mesa 3D rendering support not available on $(TARGET_ARCH)" ;
287}
288
289
290# FFmpeg
291local ffmpegBaseURL = $(baseURL)/lib ;
292if $(TARGET_ARCH) = x86 {
293	if $(HAIKU_GCC_VERSION[1]) >= 4 {
294		HAIKU_FFMPEG_FILE = ffmpeg-0.10.2-r1a4-x86-gcc4-2012-09-02.zip ;
295		HAIKU_SPEEX_FILE = speex-1.2rc1-r1a4-x86-gcc4-2012-09-02.zip ;
296		HAIKU_LIBTHEORA_FILE = libtheora-1.1.1-r1a4-x86-gcc4-2012-09-02.zip ;
297		HAIKU_LIBVORBIS_FILE = libvorbis-1.3.2-r1a4-x86-gcc4-2012-09-02.zip ;
298		HAIKU_LIBOGG_FILE = libogg-1.3.0-r1a4-x86-gcc4-2012-09-02.zip ;
299		HAIKU_LIBVPX_FILE = libvpx-1.0.0-r1a4-x86-gcc4-2012-09-02.zip ;
300	} else {
301		HAIKU_FFMPEG_FILE = ffmpeg-0.10.2-r1a4-x86-gcc2-2012-08-30.zip ;
302		HAIKU_SPEEX_FILE = speex-1.2rc1-r1a4-x86-gcc2-2012-08-29.zip ;
303		HAIKU_LIBTHEORA_FILE = libtheora-1.1.1-r1a4-x86-gcc2-2012-08-29.zip ;
304		HAIKU_LIBVORBIS_FILE = libvorbis-1.3.2-r1a4-x86-gcc2-2012-08-29.zip ;
305		HAIKU_LIBOGG_FILE = libogg-1.3.0-r1a4-x86-gcc2-2012-08-29.zip ;
306		HAIKU_LIBVPX_FILE = libvpx-1.0.0-r1a4-x86-gcc2-2012-08-29.zip ;
307	}
308
309	local ffmpegZipFile = [ DownloadFile $(HAIKU_FFMPEG_FILE)
310		: $(ffmpegBaseURL)/$(HAIKU_FFMPEG_FILE) ] ;
311	local speexZipFile = [ DownloadFile $(HAIKU_SPEEX_FILE)
312		: $(ffmpegBaseURL)/$(HAIKU_SPEEX_FILE) ] ;
313	local libtheoraZipFile = [ DownloadFile $(HAIKU_LIBTHEORA_FILE)
314		: $(ffmpegBaseURL)/$(HAIKU_LIBTHEORA_FILE) ] ;
315	local libvorbisZipFile = [ DownloadFile $(HAIKU_LIBVORBIS_FILE)
316		: $(ffmpegBaseURL)/$(HAIKU_LIBVORBIS_FILE) ] ;
317	local liboggZipFile = [ DownloadFile $(HAIKU_LIBOGG_FILE)
318		: $(ffmpegBaseURL)/$(HAIKU_LIBOGG_FILE) ] ;
319	local libvpxZipFile = [ DownloadFile $(HAIKU_LIBVPX_FILE)
320		: $(ffmpegBaseURL)/$(HAIKU_LIBVPX_FILE) ] ;
321
322	HAIKU_FFMPEG_DIR = [ FDirName $(HAIKU_OPTIONAL_BUILD_PACKAGES_DIR)
323		$(HAIKU_FFMPEG_FILE:B) ] ;
324	HAIKU_SPEEX_DIR = [ FDirName $(HAIKU_OPTIONAL_BUILD_PACKAGES_DIR)
325		$(HAIKU_SPEEX_FILE:B) ] ;
326	HAIKU_LIBTHEORA_DIR = [ FDirName $(HAIKU_OPTIONAL_BUILD_PACKAGES_DIR)
327		$(HAIKU_LIBTHEORA_FILE:B) ] ;
328	HAIKU_LIBVORBIS_DIR = [ FDirName $(HAIKU_OPTIONAL_BUILD_PACKAGES_DIR)
329		$(HAIKU_LIBVORBIS_FILE:B) ] ;
330	HAIKU_LIBOGG_DIR = [ FDirName $(HAIKU_OPTIONAL_BUILD_PACKAGES_DIR)
331		$(HAIKU_LIBOGG_FILE:B) ] ;
332	HAIKU_LIBVPX_DIR = [ FDirName $(HAIKU_OPTIONAL_BUILD_PACKAGES_DIR)
333		$(HAIKU_LIBVPX_FILE:B) ] ;
334
335	HAIKU_FFMPEG_HEADERS_DEPENDENCY = [ ExtractArchive $(HAIKU_FFMPEG_DIR)
336		: common/include/ : $(ffmpegZipFile) : extracted-ffmpeg ] ;
337	HAIKU_SPEEX_HEADERS_DEPENDENCY = [ ExtractArchive $(HAIKU_SPEEX_DIR)
338		: common/include/ : $(speexZipFile) : extracted-speex ] ;
339	HAIKU_LIBTHEORA_HEADERS_DEPENDENCY = [ ExtractArchive $(HAIKU_LIBTHEORA_DIR)
340		: common/include/ : $(libtheoraZipFile) : extracted-libtheora ] ;
341	HAIKU_LIBVORBIS_HEADERS_DEPENDENCY = [ ExtractArchive $(HAIKU_LIBVORBIS_DIR)
342		: common/include/ : $(libvorbisZipFile) : extracted-libvorbis ] ;
343	HAIKU_LIBOGG_HEADERS_DEPENDENCY = [ ExtractArchive $(HAIKU_LIBOGG_DIR)
344		: common/include/ : $(liboggZipFile) : extracted-libogg ] ;
345	HAIKU_LIBVPX_HEADERS_DEPENDENCY = [ ExtractArchive $(HAIKU_LIBVPX_DIR)
346		: common/include/ : $(libvpxZipFile) : extracted-libvpx ] ;
347
348	HAIKU_FFMPEG_LIBS = [ ExtractArchive $(HAIKU_FFMPEG_DIR)
349		:
350		common/lib/libavformat.a
351		common/lib/libavcodec.a
352		common/lib/libavdevice.a
353		common/lib/libavfilter.a
354		common/lib/libswscale.a
355		common/lib/libavutil.a
356		: $(ffmpegZipFile)
357		: extracted-ffmpeg ] ;
358	Depends $(HAIKU_FFMPEG_LIBS) : $(HAIKU_FFMPEG_HEADERS_DEPENDENCY) ;
359
360	HAIKU_SPEEX_LIBS = [ ExtractArchive $(HAIKU_SPEEX_DIR)
361		:
362		common/lib/libspeex.a
363		: $(speexZipFile)
364		: extracted-speex ] ;
365	Depends $(HAIKU_SPEEX_LIBS) : $(HAIKU_SPEEX_HEADERS_DEPENDENCY) ;
366
367	HAIKU_LIBTHEORA_LIBS = [ ExtractArchive $(HAIKU_LIBTHEORA_DIR)
368		:
369		common/lib/libtheora.a
370		common/lib/libtheoradec.a
371		common/lib/libtheoraenc.a
372		: $(libtheoraZipFile)
373		: extracted-libtheora ] ;
374	Depends $(HAIKU_LIBTHEORA_LIBS) : $(HAIKU_LIBTHEORA_HEADERS_DEPENDENCY) ;
375
376
377	HAIKU_LIBVORBIS_LIBS = [ ExtractArchive $(HAIKU_LIBVORBIS_DIR)
378		:
379		common/lib/libvorbis.a
380		common/lib/libvorbisenc.a
381		: $(libvorbisZipFile)
382		: extracted-libvorbis ] ;
383	Depends $(HAIKU_LIBVORBIS_LIBS) : $(HAIKU_LIBVORBIS_HEADERS_DEPENDENCY) ;
384
385
386	HAIKU_LIBOGG_LIBS = [ ExtractArchive $(HAIKU_LIBOGG_DIR)
387		:
388		common/lib/libogg.a
389		: $(liboggZipFile)
390		: extracted-libogg ] ;
391	Depends $(HAIKU_LIBOGG_LIBS) : $(HAIKU_LIBOGG_HEADERS_DEPENDENCY) ;
392
393	HAIKU_LIBVPX_LIBS = [ ExtractArchive $(HAIKU_LIBVPX_DIR)
394		:
395		common/lib/libvpx.a
396		: $(libvpxZipFile)
397		: extracted-libvpx ] ;
398	Depends $(HAIKU_LIBVPX_LIBS) : $(HAIKU_LIBVPX_HEADERS_DEPENDENCY) ;
399
400	HAIKU_FFMPEG_HEADERS = [ FDirName $(HAIKU_FFMPEG_DIR) common include ] ;
401	HAIKU_SPEEX_HEADERS = [ FDirName $(HAIKU_SPEEX_DIR) common include ] ;
402	HAIKU_LIBTHEORA_HEADERS = [ FDirName $(HAIKU_LIBTHEORA_DIR) common include ] ;
403	HAIKU_LIBVORBIS_HEADERS = [ FDirName $(HAIKU_LIBVORBIS_DIR) common include ] ;
404	HAIKU_LIBOGG_HEADERS = [ FDirName $(HAIKU_LIBOGG_DIR) common include ] ;
405	HAIKU_LIBVPX_HEADERS = [ FDirName $(HAIKU_LIBVPX_DIR) common include ] ;
406
407	EnableBuildFeatures ffmpeg ;
408} else {
409	Echo "FFMpeg support not available on $(TARGET_ARCH)" ;
410}
411
412
413# MikMod
414local mikmodBaseURL = http://haiku-files.org/files/optional-packages/lib ;
415if $(TARGET_ARCH) = x86 {
416	if $(HAIKU_GCC_VERSION[1]) >= 4 {
417		HAIKU_MIKMOD_FILE = libmikmod-3.1.11-r1a4-x86-gcc4-2012-09-02.zip ;
418	} else {
419		HAIKU_MIKMOD_FILE = libmikmod-3.1.11-r1a4-x86-gcc2-2012-08-29.zip ;
420	}
421
422	local mikmodZipFile = [ DownloadFile $(HAIKU_MIKMOD_FILE)
423		: $(mikmodBaseURL)/$(HAIKU_MIKMOD_FILE) ] ;
424
425	HAIKU_MIKMOD_DIR = [ FDirName $(HAIKU_OPTIONAL_BUILD_PACKAGES_DIR)
426		$(HAIKU_MIKMOD_FILE:B) ] ;
427
428	HAIKU_MIKMOD_HEADERS_DEPENDENCY = [ ExtractArchive $(HAIKU_MIKMOD_DIR)
429		: common/include/ : $(mikmodZipFile) : extracted-mikmod ] ;
430
431	HAIKU_MIKMOD_LIBS = [ ExtractArchive $(HAIKU_MIKMOD_DIR)
432		:
433		common/lib/libmikmod.a
434		: $(mikmodZipFile)
435		: extracted-ffmpeg ] ;
436	Depends $(HAIKU_MIKMOD_LIBS) : $(HAIKU_MIKMOD_HEADERS_DEPENDENCY) ;
437
438	HAIKU_MIKMOD_HEADERS = [ FDirName $(HAIKU_MIKMOD_DIR) common include ] ;
439
440	EnableBuildFeatures mikmod ;
441} else {
442	Echo "MikMod support not available on $(TARGET_ARCH)" ;
443}
444
445
446# Freetype
447local freetypeBaseURL = $(baseURL)/lib ;
448if $(TARGET_ARCH) = ppc || $(TARGET_ARCH) = x86 || $(TARGET_ARCH) = x86_64 || $(TARGET_ARCH) = arm {
449	if $(TARGET_ARCH) = arm {
450		HAIKU_FREETYPE_FILE = freetype-2.4.9-arm-2012-11-21.zip ;
451	} else if $(TARGET_ARCH) = ppc {
452		HAIKU_FREETYPE_FILE = freetype-2.4.9-ppc-gcc4-2012-06-26.zip ;
453	} else if $(TARGET_ARCH) = x86_64 {
454		HAIKU_FREETYPE_FILE = freetype-2.4.9-x86_64-2012-08-04.zip ;
455	} else if $(HAIKU_GCC_VERSION[1]) >= 4 {
456		HAIKU_FREETYPE_FILE = freetype-2.4.9-r1a4-x86-gcc4-2012-09-02.zip ;
457	} else {
458		HAIKU_FREETYPE_FILE = freetype-2.4.9-r1a4-x86-gcc2-2012-08-28.zip ;
459	}
460
461	local freetypeZipFile = [ DownloadFile $(HAIKU_FREETYPE_FILE)
462		: $(freetypeBaseURL)/$(HAIKU_FREETYPE_FILE) ] ;
463
464	HAIKU_FREETYPE_DIR = [ FDirName $(HAIKU_OPTIONAL_BUILD_PACKAGES_DIR)
465		$(HAIKU_FREETYPE_FILE:B) ] ;
466
467	HAIKU_FREETYPE_HEADERS_DEPENDENCY = [ ExtractArchive $(HAIKU_FREETYPE_DIR)
468		: develop/headers/3rdparty/freetype2 : $(freetypeZipFile)
469		: extracted-freetype ] ;
470
471	HAIKU_FREETYPE_LIB = [ ExtractArchive $(HAIKU_FREETYPE_DIR)
472		:
473		common/lib/libfreetype.so
474		: $(freetypeZipFile)
475		: extracted-freetype ] ;
476	HAIKU_FREETYPE_CURRENT_LIB = [ ExtractArchive $(HAIKU_FREETYPE_DIR)
477		:
478		common/lib/libfreetype.so.6.8.1
479		: $(freetypeZipFile)
480		: extracted-freetype ] ;
481	Depends $(HAIKU_FREETYPE_LIB) $(HAIKU_FREETYPE_CURRENT_LIB) : $(HAIKU_FREETYPE_HEADERS_DEPENDENCY) ;
482
483	HAIKU_FREETYPE_CURRENT_LINK = libfreetype.so.6 ;
484
485	HAIKU_FREETYPE_HEADERS = [ FDirName $(HAIKU_FREETYPE_DIR) develop
486		headers 3rdparty ] [ FDirName $(HAIKU_FREETYPE_DIR) develop
487		headers 3rdparty freetype2 ] ;
488
489	EnableBuildFeatures freetype ;
490} else {
491	Echo "Freetype support not available on $(TARGET_ARCH)" ;
492}
493
494
495# TagLib
496
497# Automatically install the TagLib feature, when the optional TagLib optional
498# package is enabled.
499if [ IsOptionalHaikuImagePackageAdded TagLib ] {
500	HAIKU_BUILD_FEATURE_TAGLIB = 1 ;
501}
502
503HAIKU_TAGLIB_PACKAGE = taglib-1.6.3-r1a4-x86-gcc2-2012-09-03.zip ;
504HAIKU_TAGLIB_URL = $(baseURL)/$(HAIKU_TAGLIB_PACKAGE) ;
505
506if $(HAIKU_BUILD_FEATURE_TAGLIB) {
507	if $(TARGET_ARCH) != x86 {
508		Echo "TagLib build feature not available for $(TARGET_ARCH)" ;
509	} else {
510		# Download the zip archive.
511		local zipFile = [ DownloadFile $(HAIKU_TAGLIB_PACKAGE)
512			: $(HAIKU_TAGLIB_URL) ] ;
513
514		# zip file and output directory
515		HAIKU_TAGLIB_ZIP_FILE = $(zipFile) ;
516		HAIKU_TAGLIB_DIR = [ FDirName $(HAIKU_OPTIONAL_BUILD_PACKAGES_DIR)
517			$(HAIKU_TAGLIB_PACKAGE:B) ] ;
518
519		# extract headers and libraries
520		HAIKU_TAGLIB_HEADERS_DEPENDENCY = [ ExtractArchive $(HAIKU_TAGLIB_DIR)
521			: common/include/ : $(zipFile) : extracted-taglib
522		] ;
523
524		HAIKU_TAGLIB_LIBS = [ ExtractArchive $(HAIKU_TAGLIB_DIR)
525			:
526			common/lib/libtag.so
527			common/lib/libtag_c.so
528			: $(zipFile)
529			: extracted-taglib
530		] ;
531
532		HAIKU_TAGLIB_HEADERS
533			= [ FDirName $(HAIKU_TAGLIB_DIR) common include taglib ] ;
534
535		EnableBuildFeatures taglib ;
536	}
537}
538
539
540# WebKit
541# Automatically install the WebKit feature, when the optional WebPositive
542# optional package is enabled.
543if [ IsOptionalHaikuImagePackageAdded WebPositive ] {
544	HAIKU_BUILD_FEATURE_WEBKIT = 1 ;
545}
546
547if $(TARGET_ARCH) = x86 {
548	HAIKU_WEBKIT_FILE = haikuwebkit-1.1.3-x86-gcc4-2012-08-31a.zip ;
549} else if $(TARGET_ARCH) = x86_64 {
550	HAIKU_WEBKIT_FILE = haikuwebkit-1.1.3-x86_64-gcc4-2012-12-22.zip ;
551}
552if $(HAIKU_BUILD_FEATURE_WEBKIT) {
553	if $(TARGET_ARCH) != x86 && $(TARGET_ARCH) != x86_64 {
554		Echo "WebKit support not available on $(TARGET_ARCH)" ;
555	} else if $(HAIKU_GCC_VERSION[1]) < 4 {
556		if ! $(isHybridBuild) {
557			Echo "WebKit support not available on gcc $(HAIKU_GCC_VERSION[1])" ;
558		} else {
559			Echo "WebKit to be utilized by gcc4 inside $(HAIKU_ALTERNATIVE_GCC_OUTPUT_DIR)" ;
560		}
561	} else {
562		local zipFile = [ DownloadFile $(HAIKU_WEBKIT_FILE)
563			: $(baseURL)/$(HAIKU_WEBKIT_FILE) ] ;
564
565		HAIKU_WEBKIT_DIR = [ FDirName $(HAIKU_OPTIONAL_BUILD_PACKAGES_DIR)
566			$(HAIKU_WEBKIT_FILE:B) ] ;
567
568		HAIKU_WEBKIT_HEADERS_DEPENDENCY = [ ExtractArchive $(HAIKU_WEBKIT_DIR)
569			: include/ : $(zipFile) : extracted-webkit ] ;
570
571		HAIKU_WEBKIT_LIBS = [ ExtractArchive $(HAIKU_WEBKIT_DIR)
572			:
573			lib/libwtf.so
574			lib/libjavascriptcore.so
575			lib/libwebcore.so
576			lib/libwebkit.so
577			: $(zipFile)
578			: extracted-webkit
579		] ;
580
581		HAIKU_WEBKIT_HEADERS = [ FDirName $(HAIKU_WEBKIT_DIR) include ] ;
582
583		EnableBuildFeatures webkit ;
584	}
585}
586
587# libpng
588local libpngBaseURL = $(baseURL)/lib ;
589if $(TARGET_ARCH) = ppc || $(TARGET_ARCH) = x86 || $(TARGET_ARCH) = x86_64 || $(TARGET_ARCH) = arm {
590	if $(TARGET_ARCH) = arm {
591		HAIKU_LIBPNG_FILE = libpng-1.5.12-arm-2012-11-21.zip ;
592	} else if $(TARGET_ARCH) = ppc {
593		HAIKU_LIBPNG_FILE = libpng-1.5.12-ppc-gcc4-2012-08-27.zip ;
594	} else if $(TARGET_ARCH) = x86_64 {
595		HAIKU_LIBPNG_FILE = libpng-1.5.12-x86_64-2012-11-18.zip ;
596	} else if $(HAIKU_GCC_VERSION[1]) >= 4 {
597		HAIKU_LIBPNG_FILE = libpng-1.5.12-x86-gcc4-2012-08-23.zip ;
598	} else {
599		HAIKU_LIBPNG_FILE = libpng-1.5.12-x86-gcc2-2012-08-23.zip ;
600	}
601
602	local libpngZipFile = [ DownloadFile $(HAIKU_LIBPNG_FILE)
603		: $(libpngBaseURL)/$(HAIKU_LIBPNG_FILE) ] ;
604
605	HAIKU_LIBPNG_DIR = [ FDirName $(HAIKU_OPTIONAL_BUILD_PACKAGES_DIR)
606		$(HAIKU_LIBPNG_FILE:B) ] ;
607
608	HAIKU_LIBPNG_HEADERS_DEPENDENCY = [ ExtractArchive $(HAIKU_LIBPNG_DIR)
609		: common/include : $(libpngZipFile)
610		: extracted-libpng ] ;
611
612	HAIKU_LIBPNG_LIB = [ ExtractArchive $(HAIKU_LIBPNG_DIR)
613		:
614		common/lib/libpng.so
615		: $(libpngZipFile)
616		: extracted-libpng ] ;
617	HAIKU_LIBPNG_CURRENT_LIB = [ ExtractArchive $(HAIKU_LIBPNG_DIR)
618		:
619		common/lib/libpng15.so.15.12.0
620		: $(libpngZipFile)
621		: extracted-libpng ] ;
622	Depends $(HAIKU_LIBPNG_LIB) $(HAIKU_LIBPNG_CURRENT_LIB) : $(HAIKU_LIBPNG_HEADERS_DEPENDENCY) ;
623
624	HAIKU_LIBPNG_CURRENT_LINK = libpng15.so.15 ;
625
626	HAIKU_LIBPNG_HEADERS = [ FDirName $(HAIKU_LIBPNG_DIR) common include ] ;
627
628	EnableBuildFeatures libpng ;
629} else {
630	Echo "libpng support not available on $(TARGET_ARCH)" ;
631}
632
633# jpeg
634local jpegBaseURL = $(baseURL)/lib ;
635if $(TARGET_ARCH) in arm ppc x86 x86_64 {
636	if $(TARGET_ARCH) = arm {
637		HAIKU_JPEG_FILE = jpeg-8d-arm-2012-11-21.zip ;
638	} else if $(TARGET_ARCH) = ppc {
639		HAIKU_JPEG_FILE = jpeg-8d-ppc-gcc4-2012-08-27.zip ;
640	} else if $(TARGET_ARCH) = x86_64 {
641		HAIKU_JPEG_FILE = jpeg-8d-x86_64-2012-11-18.zip ;
642	} else if $(HAIKU_GCC_VERSION[1]) >= 4 {
643		HAIKU_JPEG_FILE = jpeg-8d-x86-gcc4-2012-08-23.zip ;
644	} else {
645		HAIKU_JPEG_FILE = jpeg-8d-x86-gcc2-2012-08-23.zip ;
646	}
647
648	local jpegZipFile = [ DownloadFile $(HAIKU_JPEG_FILE)
649		: $(jpegBaseURL)/$(HAIKU_JPEG_FILE) ] ;
650
651	HAIKU_JPEG_DIR = [ FDirName $(HAIKU_OPTIONAL_BUILD_PACKAGES_DIR)
652		$(HAIKU_JPEG_FILE:B) ] ;
653
654	HAIKU_JPEG_HEADERS_DEPENDENCY = [ ExtractArchive $(HAIKU_JPEG_DIR)
655		: common/include : $(jpegZipFile)
656		: extracted-jpeg ] ;
657
658	HAIKU_JPEG_LIB = [ ExtractArchive $(HAIKU_JPEG_DIR)
659		:
660		common/lib/libjpeg.so
661		: $(jpegZipFile)
662		: extracted-jpeg ] ;
663	HAIKU_JPEG_CURRENT_LIB = [ ExtractArchive $(HAIKU_JPEG_DIR)
664		:
665		common/lib/libjpeg.so.8.4.0
666		: $(jpegZipFile)
667		: extracted-jpeg ] ;
668	Depends $(HAIKU_JPEG_LIB) $(HAIKU_JPEG_CURRENT_LIB) : $(HAIKU_JPEG_HEADERS_DEPENDENCY) ;
669
670	HAIKU_JPEG_CURRENT_LINK = libjpeg.so.8 ;
671
672	HAIKU_JPEG_HEADERS = [ FDirName $(HAIKU_JPEG_DIR) common include ] ;
673
674	EnableBuildFeatures libjpeg ;
675} else {
676	Echo "jpeg support not available on $(TARGET_ARCH)" ;
677}
678
679# zlib
680local zlibBaseURL = $(baseURL)/lib ;
681if $(TARGET_ARCH) = ppc || $(TARGET_ARCH) = x86 || $(TARGET_ARCH) = x86_64 || $(TARGET_ARCH) = arm {
682	if $(TARGET_ARCH) = arm {
683		HAIKU_ZLIB_FILE = zlib-1.2.7-arm-2012-11-21.zip ;
684	} else if $(TARGET_ARCH) = ppc {
685		HAIKU_ZLIB_FILE = zlib-1.2.7-ppc-gcc4-2012-10-30.zip ;
686	} else if $(TARGET_ARCH) = x86_64 {
687		HAIKU_ZLIB_FILE = zlib-1.2.7-x86_64-2012-11-18.zip ;
688	} else if $(HAIKU_GCC_VERSION[1]) >= 4 {
689		HAIKU_ZLIB_FILE = zlib-1.2.7-x86-gcc4-2012-10-30.zip ;
690	} else {
691		HAIKU_ZLIB_FILE = zlib-1.2.7-x86-gcc2-2012-10-30.zip ;
692	}
693
694	local zlibZipFile = [ DownloadFile $(HAIKU_ZLIB_FILE)
695		: $(zlibBaseURL)/$(HAIKU_ZLIB_FILE) ] ;
696
697	HAIKU_ZLIB_DIR = [ FDirName $(HAIKU_OPTIONAL_BUILD_PACKAGES_DIR)
698		$(HAIKU_ZLIB_FILE:B) ] ;
699
700	HAIKU_ZLIB_HEADERS_DEPENDENCY = [ ExtractArchive $(HAIKU_ZLIB_DIR)
701		: common/include : $(zlibZipFile)
702		: extracted-zlib ] ;
703
704	HAIKU_ZLIB_LIB = [ ExtractArchive $(HAIKU_ZLIB_DIR)
705		:
706		common/lib/libz.so
707		: $(zlibZipFile)
708		: extracted-zlib ] ;
709	HAIKU_ZLIB_CURRENT_LIB = [ ExtractArchive $(HAIKU_ZLIB_DIR)
710		:
711		common/lib/libz.so.1.2.7
712		: $(zlibZipFile)
713		: extracted-zlib ] ;
714	Depends $(HAIKU_ZLIB_LIB) $(HAIKU_ZLIB_CURRENT_LIB) : $(HAIKU_ZLIB_HEADERS_DEPENDENCY) ;
715
716	HAIKU_ZLIB_CURRENT_LINK = libz.so.1 ;
717
718	HAIKU_ZLIB_HEADERS = [ FDirName $(HAIKU_ZLIB_DIR) common include ] ;
719
720	EnableBuildFeatures zlib ;
721} else {
722	Echo "zlib support not available on $(TARGET_ARCH)" ;
723}
724
725
726# GPL add-ons
727if $(HAIKU_INCLUDE_GPL_ADDONS) = 1 {
728	EnableBuildFeatures gpl ;
729}
730
731
732# ATA vs. IDE
733#HACK: remove when old ide code is removed!
734if $(HAIKU_ATA_STACK) = 1 {
735	EnableBuildFeatures ata ;
736} else {
737	EnableBuildFeatures ide ;
738}
739