xref: /haiku/build/jam/BuildFeatures (revision a07cdb6e9f8e484b6ba9f209fbeb144e906d3405)
1# This file contains setup for build features that require external packages. It
2# is included once for each configured packaging architecture (with
3# TARGET_PACKAGING_ARCH set accordingly).
4
5
6local architecture = $(TARGET_PACKAGING_ARCH) ;
7local secondaryArchSubDir = [ MultiArchIfPrimary "" : /$(architecture) ] ;
8local libDir = lib$(secondaryArchSubDir) ;
9local developLibDir = develop/lib$(secondaryArchSubDir) ;
10local developHeadersDir = develop/headers$(secondaryArchSubDir) ;
11
12
13# SSL
14
15# Automatically enable the SSL feature, when the OpenSSL package is enabled.
16if [ IsHaikuImagePackageAdded openssl ] {
17	HAIKU_BUILD_FEATURE_SSL = 1 ;
18}
19
20if $(HAIKU_BUILD_FEATURE_SSL) {
21	if [ IsPackageAvailable openssl_devel ] {
22		ExtractBuildFeatureArchives openssl :
23			file: base openssl
24				runtime: lib
25			file: devel openssl_devel
26				depends: base
27				libraries:
28					$(developLibDir)/libcrypto.so
29					$(developLibDir)/libssl.so
30				headers: $(developHeadersDir)
31			;
32
33		EnableBuildFeatures openssl ;
34	} else {
35		Echo "SSL build feature not available for $(TARGET_PACKAGING_ARCH)" ;
36	}
37}
38
39
40# gcc_syslibs
41
42if $(TARGET_PACKAGING_ARCH) != x86_gcc2 {
43	if [ IsPackageAvailable gcc_syslibs ] {
44		ExtractBuildFeatureArchives gcc_syslibs :
45			file: base gcc_syslibs
46				libgcc_s.so: $(libDir)/libgcc_s.so
47				libstdc++.so: $(libDir)/libstdc++.so
48				libsupc++.so: $(libDir)/libsupc++.so
49			;
50
51		EnableBuildFeatures gcc_syslibs ;
52	} else  {
53		Echo "gcc_syslibs not available for $(TARGET_PACKAGING_ARCH)" ;
54	}
55}
56
57
58# gcc_syslibs_devel
59
60if [ IsPackageAvailable gcc_syslibs_devel ] {
61	if $(TARGET_PACKAGING_ARCH) = x86_gcc2 {
62		ExtractBuildFeatureArchives gcc_syslibs_devel :
63			file: base gcc_syslibs_devel
64				libgcc.a: $(developLibDir)/libgcc.a
65				libgcc_eh.a:
66				libgcc-kernel.a: $(developLibDir)/libgcc.a
67				libgcc_eh-kernel.a:
68				libstdc++.a:
69				libsupc++.a:
70				libsupc++-kernel.a:
71			;
72	} else {
73		ExtractBuildFeatureArchives gcc_syslibs_devel :
74			file: base gcc_syslibs_devel
75				libgcc.a: $(developLibDir)/libgcc.a
76				libgcc_eh.a: $(developLibDir)/libgcc_eh.a
77				libgcc-kernel.a: $(developLibDir)/libgcc-kernel.a
78				libgcc_eh-kernel.a: $(developLibDir)/libgcc_eh.a
79				libstdc++.a: $(developLibDir)/libstdc++.a
80				libsupc++.a: $(developLibDir)/libsupc++.a
81				libsupc++-kernel.a: $(developLibDir)/libsupc++-kernel.a
82				c++-headers: $(developHeadersDir)/c++
83				gcc-headers: $(developHeadersDir)/gcc
84			;
85	}
86
87	EnableBuildFeatures gcc_syslibs_devel ;
88} else  {
89	Echo "gcc_syslibs_devel not available for $(TARGET_PACKAGING_ARCH)" ;
90}
91
92
93# ICU
94
95if [ IsPackageAvailable icu_devel ] {
96	ExtractBuildFeatureArchives icu :
97		file: base icu
98			runtime: lib
99		file: devel icu_devel
100			depends: base
101			libraries:
102				$(developLibDir)/libicudata.so
103				$(developLibDir)/libicui18n.so
104				$(developLibDir)/libicuio.so
105				$(developLibDir)/libicule.so
106				$(developLibDir)/libiculx.so
107				$(developLibDir)/libicutu.so
108				$(developLibDir)/libicuuc.so
109			headers: $(developHeadersDir)
110		;
111
112	EnableBuildFeatures icu ;
113} else  {
114	Echo "ICU not available for $(TARGET_PACKAGING_ARCH)" ;
115}
116
117
118# curl
119if [ IsPackageAvailable curl_devel ] {
120	ExtractBuildFeatureArchives curl :
121		file: base curl
122			runtime: lib
123		file: devel curl_devel
124			depends: base
125			library:
126				$(developLibDir)/libcurl.so
127			headers: $(developHeadersDir) $(developHeadersDir)/curl
128		;
129
130	EnableBuildFeatures curl ;
131} else  {
132	Echo "Curl not available for $(TARGET_PACKAGING_ARCH)" ;
133}
134
135
136# CLucene
137
138# TODO: Update to packages!
139if ! 1 {
140
141# Automatically install the CLucene feature, when the CLucene package is
142# enabled.
143if [ IsHaikuImagePackageAdded clucene ] {
144	HAIKU_BUILD_FEATURE_CLUCENE = 1 ;
145}
146
147
148HAIKU_CLUCENE_PACKAGE = clucene-0.9.21-x86-gcc4-haiku-2009-08-11.zip ;
149HAIKU_CLUCENE_URL = $(baseURL)/$(HAIKU_CLUCENE_PACKAGE) ;
150
151if $(HAIKU_BUILD_FEATURE_CLUCENE) {
152	if $(TARGET_ARCH) != x86 {
153		Echo "CLucene build feature not available for"
154			"$(TARGET_PACKAGING_ARCH)" ;
155	} else {
156		# Download the zip archive.
157		local zipFile = [ DownloadFile $(HAIKU_CLUCENE_PACKAGE)
158			: $(HAIKU_CLUCENE_URL) ] ;
159
160		# zip file and output directory
161		HAIKU_CLUCENE_ZIP_FILE = $(zipFile) ;
162		HAIKU_CLUCENE_DIR = [ FDirName $(HAIKU_OPTIONAL_BUILD_PACKAGES_DIR)
163			$(HAIKU_CLUCENE_PACKAGE:B) ] ;
164
165		# extract headers and libraries
166		HAIKU_CLUCENE_HEADERS_DEPENDENCY = [ ExtractArchive $(HAIKU_CLUCENE_DIR)
167			: common/include/ : $(zipFile) : extracted-clucene
168		] ;
169
170		HAIKU_CLUCENE_LIBS = [ ExtractArchive $(HAIKU_CLUCENE_DIR)
171			:
172			common/lib/libclucene.a
173			: $(zipFile)
174			 : extracted-clucene
175		] ;
176
177		HAIKU_CLUCENE_HEADERS
178			= [ FDirName $(HAIKU_CLUCENE_DIR) common include ] ;
179
180		EnableBuildFeatures clucene ;
181	}
182}
183
184} # ! 1
185
186
187# GLU (GL Utilities)
188if [ IsPackageAvailable glu_devel ] {
189	ExtractBuildFeatureArchives glu :
190		file: base glu
191			runtime: lib
192		file: devel glu_devel
193			depends: base
194			library: $(developLibDir)/libGLU.so
195			headers: $(developHeadersDir)
196		;
197
198	EnableBuildFeatures glu ;
199} else {
200	Echo "GLU not yet available on $(TARGET_PACKAGING_ARCH)" ;
201}
202
203
204# GL (GL Kit, Mesa3D)
205if [ IsPackageAvailable mesa_devel ] {
206	ExtractBuildFeatureArchives mesa :
207		file: base mesa
208			runtime: lib
209		file: devel mesa_devel
210			depends: base
211			library: $(developLibDir)/libGL.so
212			headers: $(developHeadersDir)/os/opengl
213		;
214
215	EnableBuildFeatures mesa ;
216} else {
217	Echo "GL not yet available on $(TARGET_PACKAGING_ARCH)" ;
218}
219
220
221# FFmpeg
222if [ IsPackageAvailable ffmpeg_devel ] {
223	local ffmpegLibs = libavformat.so libavcodec.so libavdevice.so
224		libavfilter.so libswscale.so libavutil.so ;
225
226	ExtractBuildFeatureArchives ffmpeg :
227		file: base ffmpeg
228			runtime: lib
229		file: devel ffmpeg_devel
230			depends: base
231			libraries: $(developLibDir)/$(ffmpegLibs)
232			headers: $(developHeadersDir)
233		;
234
235	EnableBuildFeatures ffmpeg ;
236
237} else {
238	Echo "FFMpeg support not available on $(TARGET_PACKAGING_ARCH)" ;
239}
240
241
242# Freetype
243if [ IsPackageAvailable freetype_devel ] {
244	ExtractBuildFeatureArchives freetype :
245		file: base freetype
246			runtime: lib
247		file: devel freetype_devel
248			depends: base
249			library: $(developLibDir)/libfreetype.so
250			headers: $(developHeadersDir) $(developHeadersDir)/freetype2
251		;
252
253	EnableBuildFeatures freetype ;
254} else {
255	Echo "Freetype support not available on $(TARGET_PACKAGING_ARCH)" ;
256}
257
258
259# Gutenprint
260if [ IsPackageAvailable gutenprint_devel ] {
261	ExtractBuildFeatureArchives gutenprint :
262		file: base gutenprint
263			runtime: lib
264		file: devel gutenprint_devel
265			depends: base
266			library: $(developLibDir)/libgutenprint.so
267			headers: $(developHeadersDir) $(developHeadersDir)/gutenprint
268		;
269
270	EnableBuildFeatures gutenprint ;
271} else {
272	Echo "Gutenprint support not available on $(TARGET_PACKAGING_ARCH)" ;
273}
274
275
276# TagLib
277
278# TODO: Update to packages!
279if ! 1 {
280
281# Automatically install the TagLib feature, when the optional TagLib optional
282# package is enabled.
283if [ IsHaikuImagePackageAdded taglib ] {
284	HAIKU_BUILD_FEATURE_TAGLIB = 1 ;
285}
286
287HAIKU_TAGLIB_PACKAGE = taglib-1.6.3-r1a4-x86-gcc2-2012-09-03.zip ;
288HAIKU_TAGLIB_URL = $(baseURL)/$(HAIKU_TAGLIB_PACKAGE) ;
289
290if $(HAIKU_BUILD_FEATURE_TAGLIB) {
291	if $(TARGET_ARCH) != x86 {
292		Echo "TagLib build feature not available for $(TARGET_PACKAGING_ARCH)" ;
293	} else {
294		# Download the zip archive.
295		local zipFile = [ DownloadFile $(HAIKU_TAGLIB_PACKAGE)
296			: $(HAIKU_TAGLIB_URL) ] ;
297
298		# zip file and output directory
299		HAIKU_TAGLIB_ZIP_FILE = $(zipFile) ;
300		HAIKU_TAGLIB_DIR = [ FDirName $(HAIKU_OPTIONAL_BUILD_PACKAGES_DIR)
301			$(HAIKU_TAGLIB_PACKAGE:B) ] ;
302
303		# extract headers and libraries
304		HAIKU_TAGLIB_HEADERS_DEPENDENCY = [ ExtractArchive $(HAIKU_TAGLIB_DIR)
305			: common/include/ : $(zipFile) : extracted-taglib
306		] ;
307
308		HAIKU_TAGLIB_LIBS = [ ExtractArchive $(HAIKU_TAGLIB_DIR)
309			:
310			common/lib/libtag.so
311			common/lib/libtag_c.so
312			: $(zipFile)
313			: extracted-taglib
314		] ;
315
316		HAIKU_TAGLIB_HEADERS
317			= [ FDirName $(HAIKU_TAGLIB_DIR) common include taglib ] ;
318
319		EnableBuildFeatures taglib ;
320	}
321}
322
323} # ! 1
324
325
326# WebKit
327if [ IsPackageAvailable haikuwebkit_devel ] {
328	ExtractBuildFeatureArchives webkit :
329		file: base haikuwebkit
330			runtime: lib
331		file: devel haikuwebkit_devel
332			depends: base
333			libraries:
334				$(developLibDir)/libWebKit.so
335			headers: $(developHeadersDir)
336		;
337
338	EnableBuildFeatures webkit ;
339} else {
340	Echo "WebKit build feature not available for $(TARGET_PACKAGING_ARCH)" ;
341}
342
343
344# libpng
345if [ IsPackageAvailable libpng_devel ] {
346	ExtractBuildFeatureArchives libpng :
347		file: base libpng
348			runtime: lib
349		file: devel libpng_devel
350			depends: base
351			library: $(developLibDir)/libpng.so
352			headers: $(developHeadersDir)
353		;
354
355	EnableBuildFeatures libpng ;
356} else {
357	Echo "libpng support not available on $(TARGET_PACKAGING_ARCH)" ;
358}
359
360
361# jpeg
362if [ IsPackageAvailable jpeg_devel ] {
363	ExtractBuildFeatureArchives jpeg :
364		file: base jpeg
365			runtime: lib
366		file: devel jpeg_devel
367			depends: base
368			library: $(developLibDir)/libjpeg.so
369			headers: $(developHeadersDir)
370		;
371
372	EnableBuildFeatures jpeg ;
373} else {
374	Echo "jpeg support not available on $(TARGET_PACKAGING_ARCH)" ;
375}
376
377
378# zlib
379if [ IsPackageAvailable zlib_devel ] {
380	ExtractBuildFeatureArchives zlib :
381		file: base zlib
382			runtime: lib
383		file: devel zlib_devel
384			depends: base
385			library: $(developLibDir)/libz.so
386			headers: $(developHeadersDir)
387		# sources are required for the primary architecture only
388		primary @{
389			file: source zlib_source
390				sources: develop/sources/%portRevisionedName%/sources
391		}@
392		;
393
394	EnableBuildFeatures zlib ;
395} else {
396	Echo "zlib support not available on $(TARGET_PACKAGING_ARCH)" ;
397}
398
399
400# libsolv
401if [ IsPackageAvailable libsolv_devel ] {
402	ExtractBuildFeatureArchives libsolv :
403		file: base libsolv
404			runtime: lib
405		file: devel libsolv_devel
406			depends: base
407			libraries:
408				$(developLibDir)/libsolv.so
409				$(developLibDir)/libsolvext.so
410			headers: $(developHeadersDir)
411		# sources are required for the primary architecture only
412		primary @{
413			file: source libsolv_source
414				sources: develop/sources/%portRevisionedName%/sources
415		}@
416		;
417
418	EnableBuildFeatures libsolv ;
419} else {
420	Echo "libsolv package not available for $(TARGET_PACKAGING_ARCH)" ;
421}
422
423
424# qrencode
425if [ IsPackageAvailable qrencode_devel ] {
426	ExtractBuildFeatureArchives libqrencode :
427		file: base qrencode
428			runtime: lib
429		file: devel qrencode_devel
430			depends: base
431			library: $(developLibDir)/libqrencode.a
432			headers: $(developHeadersDir)
433		;
434
435	EnableBuildFeatures libqrencode ;
436} else {
437	Echo "qrencode support not available on $(TARGET_PACKAGING_ARCH)" ;
438}
439
440
441# tiff
442if [ IsPackageAvailable tiff_devel ] {
443	ExtractBuildFeatureArchives tiff :
444		file: base tiff
445			runtime: lib
446		file: devel tiff_devel
447			depends: base
448			library: $(developLibDir)/libtiff.so.3
449			headers: $(developHeadersDir) $(developHeadersDir)/tiff
450		;
451
452	EnableBuildFeatures tiff ;
453} else {
454	Echo "Tiff support not available on $(TARGET_PACKAGING_ARCH)" ;
455}
456
457
458
459# GPL add-ons
460if $(HAIKU_INCLUDE_GPL_ADDONS) = 1 {
461	EnableBuildFeatures gpl ;
462}
463
464
465# ATA vs. IDE
466#HACK: remove when old ide code is removed!
467if $(HAIKU_ATA_STACK) = 1 {
468	EnableBuildFeatures ata ;
469} else {
470	EnableBuildFeatures ide ;
471}
472