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 developLibDir = develop/lib$(secondaryArchSubDir) ; 9local developHeadersDir = develop/headers$(secondaryArchSubDir) ; 10 11 12# SSL 13 14# Automatically enable the SSL feature, when the OpenSSL package is enabled. 15if [ IsHaikuImagePackageAdded openssl ] { 16 HAIKU_BUILD_FEATURE_SSL = 1 ; 17} 18 19if $(HAIKU_BUILD_FEATURE_SSL) { 20 if [ IsPackageAvailable openssl_devel ] { 21 ExtractBuildFeatureArchives openssl : 22 file: base openssl 23 runtime: lib 24 file: devel openssl_devel 25 depends: base 26 libraries: 27 $(developLibDir)/libcrypto.so 28 $(developLibDir)/libssl.so 29 headers: $(developHeadersDir) 30 ; 31 32 EnableBuildFeatures openssl ; 33 } else { 34 Echo "SSL build feature not available for $(TARGET_ARCH)" ; 35 } 36} 37 38 39# ICU 40 41# Note ICU isn't actually optional, but is still an external package 42if [ IsPackageAvailable icu_devel ] { 43 ExtractBuildFeatureArchives icu : 44 file: base icu 45 runtime: lib 46 file: devel icu_devel 47 depends: base 48 libraries: 49 $(developLibDir)/libicudata.so 50 $(developLibDir)/libicui18n.so 51 $(developLibDir)/libicuio.so 52 $(developLibDir)/libicule.so 53 $(developLibDir)/libiculx.so 54 $(developLibDir)/libicutu.so 55 $(developLibDir)/libicuuc.so 56 headers: $(developHeadersDir) 57 ; 58 59 EnableBuildFeatures icu ; 60} else { 61 Echo "ICU not available for $(TARGET_ARCH)" ; 62} 63 64 65# CLucene 66 67# TODO: Update to packages! 68if ! 1 { 69 70# Automatically install the CLucene feature, when the CLucene package is 71# enabled. 72if [ IsHaikuImagePackageAdded clucene ] { 73 HAIKU_BUILD_FEATURE_CLUCENE = 1 ; 74} 75 76 77HAIKU_CLUCENE_PACKAGE = clucene-0.9.21-x86-gcc4-haiku-2009-08-11.zip ; 78HAIKU_CLUCENE_URL = $(baseURL)/$(HAIKU_CLUCENE_PACKAGE) ; 79 80if $(HAIKU_BUILD_FEATURE_CLUCENE) { 81 if $(TARGET_ARCH) != x86 { 82 Echo "CLucene build feature not available for $(TARGET_ARCH)" ; 83 } else { 84 # Download the zip archive. 85 local zipFile = [ DownloadFile $(HAIKU_CLUCENE_PACKAGE) 86 : $(HAIKU_CLUCENE_URL) ] ; 87 88 # zip file and output directory 89 HAIKU_CLUCENE_ZIP_FILE = $(zipFile) ; 90 HAIKU_CLUCENE_DIR = [ FDirName $(HAIKU_OPTIONAL_BUILD_PACKAGES_DIR) 91 $(HAIKU_CLUCENE_PACKAGE:B) ] ; 92 93 # extract headers and libraries 94 HAIKU_CLUCENE_HEADERS_DEPENDENCY = [ ExtractArchive $(HAIKU_CLUCENE_DIR) 95 : common/include/ : $(zipFile) : extracted-clucene 96 ] ; 97 98 HAIKU_CLUCENE_LIBS = [ ExtractArchive $(HAIKU_CLUCENE_DIR) 99 : 100 common/lib/libclucene.a 101 : $(zipFile) 102 : extracted-clucene 103 ] ; 104 105 HAIKU_CLUCENE_HEADERS 106 = [ FDirName $(HAIKU_CLUCENE_DIR) common include ] ; 107 108 EnableBuildFeatures clucene ; 109 } 110} 111 112} # ! 1 113 114 115# TODO: Update to packages! 116if ! 1 { 117 118# LLVM 119if $(TARGET_ARCH) = x86 { 120 if $(TARGET_GCC_VERSION_$(architecture)[1]) >= 4 { 121 HAIKU_LLVM_FILE = llvm-3.2-x86-gcc4-2012-12-21.zip ; 122 local zipFile = [ DownloadFile $(HAIKU_LLVM_FILE) 123 : $(baseURL)/$(HAIKU_LLVM_FILE) ] ; 124 125 HAIKU_LLVM_DIR = [ FDirName $(HAIKU_OPTIONAL_BUILD_PACKAGES_DIR) 126 $(HAIKU_LLVM_FILE:B) ] ; 127 128 HAIKU_LLVM_HEADERS_DEPENDENCY = [ ExtractArchive $(HAIKU_LLVM_DIR) 129 : common/include/ : $(zipFile) : extracted-llvm ] ; 130 HAIKU_LLVM_HEADERS = [ FDirName $(HAIKU_LLVM_DIR) common include ] ; 131 132 # We can't Glob these because they aren't extracted yet. 133 HAIKU_LLVM_LIBS = [ ExtractArchive $(HAIKU_LLVM_DIR) 134 : 135 common/lib/libLLVMAsmParser.a 136 common/lib/libLLVMInstrumentation.a 137 common/lib/libLLVMLinker.a 138 common/lib/libLLVMArchive.a 139 common/lib/libLLVMBitReader.a 140 common/lib/libLLVMDebugInfo.a 141 common/lib/libLLVMJIT.a 142 common/lib/libLLVMipo.a 143 common/lib/libLLVMVectorize.a 144 common/lib/libLLVMBitWriter.a 145 common/lib/libLLVMTableGen.a 146 #common/lib/libLLVMHexagonCodeGen.a 147 #common/lib/libLLVMHexagonAsmPrinter.a 148 #common/lib/libLLVMHexagonDesc.a 149 #common/lib/libLLVMHexagonInfo.a 150 #common/lib/libLLVMNVPTXCodeGen.a 151 #common/lib/libLLVMNVPTXDesc.a 152 #common/lib/libLLVMNVPTXInfo.a 153 #common/lib/libLLVMNVPTXAsmPrinter.a 154 #common/lib/libLLVMMBlazeCodeGen.a 155 #common/lib/libLLVMMBlazeAsmParser.a 156 #common/lib/libLLVMMBlazeDisassembler.a 157 #common/lib/libLLVMMBlazeDesc.a 158 #common/lib/libLLVMMBlazeInfo.a 159 #common/lib/libLLVMMBlazeAsmPrinter.a 160 common/lib/libLLVMCppBackendCodeGen.a 161 common/lib/libLLVMCppBackendInfo.a 162 #common/lib/libLLVMMSP430CodeGen.a 163 #common/lib/libLLVMMSP430Desc.a 164 #common/lib/libLLVMMSP430AsmPrinter.a 165 #common/lib/libLLVMMSP430Info.a 166 #common/lib/libLLVMXCoreCodeGen.a 167 #common/lib/libLLVMXCoreDesc.a 168 #common/lib/libLLVMXCoreInfo.a 169 #common/lib/libLLVMCellSPUCodeGen.a 170 #common/lib/libLLVMCellSPUDesc.a 171 #common/lib/libLLVMCellSPUInfo.a 172 #common/lib/libLLVMMipsAsmParser.a 173 #common/lib/libLLVMMipsCodeGen.a 174 #common/lib/libLLVMMipsDesc.a 175 #common/lib/libLLVMMipsAsmPrinter.a 176 #common/lib/libLLVMMipsDisassembler.a 177 #common/lib/libLLVMMipsInfo.a 178 #common/lib/libLLVMARMAsmParser.a 179 #common/lib/libLLVMARMCodeGen.a 180 #common/lib/libLLVMARMDisassembler.a 181 #common/lib/libLLVMARMDesc.a 182 #common/lib/libLLVMARMInfo.a 183 #common/lib/libLLVMARMAsmPrinter.a 184 #common/lib/libLLVMPowerPCCodeGen.a 185 #common/lib/libLLVMPowerPCDesc.a 186 #common/lib/libLLVMPowerPCInfo.a 187 #common/lib/libLLVMPowerPCAsmPrinter.a 188 #common/lib/libLLVMSparcCodeGen.a 189 #common/lib/libLLVMSparcDesc.a 190 #common/lib/libLLVMSparcInfo.a 191 common/lib/libLLVMX86AsmParser.a 192 common/lib/libLLVMX86CodeGen.a 193 common/lib/libLLVMSelectionDAG.a 194 common/lib/libLLVMAsmPrinter.a 195 common/lib/libLLVMX86Disassembler.a 196 common/lib/libLLVMX86Desc.a 197 common/lib/libLLVMX86Info.a 198 common/lib/libLLVMX86AsmPrinter.a 199 common/lib/libLLVMX86Utils.a 200 common/lib/libLLVMMCDisassembler.a 201 common/lib/libLLVMMCParser.a 202 common/lib/libLLVMInterpreter.a 203 common/lib/libLLVMCodeGen.a 204 common/lib/libLLVMScalarOpts.a 205 common/lib/libLLVMInstCombine.a 206 common/lib/libLLVMTransformUtils.a 207 common/lib/libLLVMipa.a 208 common/lib/libLLVMAnalysis.a 209 common/lib/libLLVMMCJIT.a 210 common/lib/libLLVMRuntimeDyld.a 211 common/lib/libLLVMExecutionEngine.a 212 common/lib/libLLVMTarget.a 213 common/lib/libLLVMMC.a 214 common/lib/libLLVMObject.a 215 common/lib/libLLVMCore.a 216 common/lib/libLLVMSupport.a 217 : $(zipFile) : extracted-llvm ] 218 ; 219 220 EnableBuildFeatures llvm ; 221 } else { 222 # Nor will it ever be 223 Echo "LLVM not available on GCC2" ; 224 } 225} else { 226 Echo "LLVM not yet available on $(TARGET_ARCH)" ; 227} 228 229} # ! 1 230 231 232# GLU (GL Utilities) 233if [ IsPackageAvailable glu_devel ] { 234 ExtractBuildFeatureArchives glu : 235 file: base glu 236 runtime: lib 237 file: devel glu_devel 238 depends: base 239 library: $(developLibDir)/libGLU.so 240 headers: $(developHeadersDir) 241 ; 242 243 EnableBuildFeatures glu ; 244} else { 245 Echo "GLU not yet available on $(TARGET_ARCH)" ; 246} 247 248 249# Mesa 250if [ IsPackageAvailable mesa_devel ] { 251 ExtractBuildFeatureArchives mesa : [ FFilterByBuildFeatures 252 file: devel mesa_devel 253 mesaLibrary: $(developLibDir)/libmesa.a 254 glapiLibrary: $(developLibDir)/libglapi.a 255 headers: $(developHeadersDir) 256 privateHeaders: $(developHeadersDir)/mesa_private 257 258 !gcc2 @{ 259 glslLibrary: $(developLibDir)/libglsl.a 260 galliumLibrary: $(developLibDir)/libgallium.a 261 llvm @{ 262 galliumLlvmpipeLibrary: $(developLibDir)/libllvmpipe.a 263 }@ 264 !llvm @{ 265 galliumSoftpipeLibrary: $(developLibDir)/libsoftpipe.a 266 }@ 267 }@ # !gcc2 268 ] ; 269 270 Depends [ BuildFeatureAttribute mesa : galliumLlvmpipeLibrary ] 271 : $(HAIKU_LLVM_LIBS) ; 272 273 EnableBuildFeatures mesa ; 274} else { 275 Echo "Mesa 3D rendering support not available on $(TARGET_ARCH)" ; 276} 277 278 279# FFmpeg 280if [ IsPackageAvailable ffmpeg_devel ] { 281 local ffmpegLibs = libavformat.so libavcodec.so libavdevice.so 282 libavfilter.so libswscale.so libavutil.so ; 283 local speexLibs = libspeex.so ; 284 local libtheoraLibs = libtheora.so libtheoradec.so libtheoraenc.so ; 285 local libvorbisLibs = libvorbis.so libvorbisenc.so ; 286 local liboggLibs = libogg.so ; 287 local libvpxLibs = libvpx.so ; 288 289 local feature ; 290 for feature in ffmpeg speex libtheora libvorbis libogg libvpx { 291 ExtractBuildFeatureArchives $(feature) : 292 file: base $(feature) 293 runtime: lib 294 file: devel $(feature)_devel 295 depends: base 296 libraries: $(developLibDir)/$($(feature)Libs) 297 headers: $(developHeadersDir) 298 ; 299 300 EnableBuildFeatures $(feature) ; 301 } 302} else { 303 Echo "FFMpeg support not available on $(TARGET_ARCH)" ; 304} 305 306 307# Freetype 308if [ IsPackageAvailable freetype_devel ] { 309 ExtractBuildFeatureArchives freetype : 310 file: base freetype 311 runtime: lib 312 file: devel freetype_devel 313 depends: base 314 library: $(developLibDir)/libfreetype.so 315 headers: $(developHeadersDir) $(developHeadersDir)/freetype2 316 ; 317 318 EnableBuildFeatures freetype ; 319} else { 320 Echo "Freetype support not available on $(TARGET_ARCH)" ; 321} 322 323 324# TagLib 325 326# TODO: Update to packages! 327if ! 1 { 328 329# Automatically install the TagLib feature, when the optional TagLib optional 330# package is enabled. 331if [ IsHaikuImagePackageAdded taglib ] { 332 HAIKU_BUILD_FEATURE_TAGLIB = 1 ; 333} 334 335HAIKU_TAGLIB_PACKAGE = taglib-1.6.3-r1a4-x86-gcc2-2012-09-03.zip ; 336HAIKU_TAGLIB_URL = $(baseURL)/$(HAIKU_TAGLIB_PACKAGE) ; 337 338if $(HAIKU_BUILD_FEATURE_TAGLIB) { 339 if $(TARGET_ARCH) != x86 { 340 Echo "TagLib build feature not available for $(TARGET_ARCH)" ; 341 } else { 342 # Download the zip archive. 343 local zipFile = [ DownloadFile $(HAIKU_TAGLIB_PACKAGE) 344 : $(HAIKU_TAGLIB_URL) ] ; 345 346 # zip file and output directory 347 HAIKU_TAGLIB_ZIP_FILE = $(zipFile) ; 348 HAIKU_TAGLIB_DIR = [ FDirName $(HAIKU_OPTIONAL_BUILD_PACKAGES_DIR) 349 $(HAIKU_TAGLIB_PACKAGE:B) ] ; 350 351 # extract headers and libraries 352 HAIKU_TAGLIB_HEADERS_DEPENDENCY = [ ExtractArchive $(HAIKU_TAGLIB_DIR) 353 : common/include/ : $(zipFile) : extracted-taglib 354 ] ; 355 356 HAIKU_TAGLIB_LIBS = [ ExtractArchive $(HAIKU_TAGLIB_DIR) 357 : 358 common/lib/libtag.so 359 common/lib/libtag_c.so 360 : $(zipFile) 361 : extracted-taglib 362 ] ; 363 364 HAIKU_TAGLIB_HEADERS 365 = [ FDirName $(HAIKU_TAGLIB_DIR) common include taglib ] ; 366 367 EnableBuildFeatures taglib ; 368 } 369} 370 371} # ! 1 372 373 374# WebKit 375 376# TODO: Update to packages! 377if ! 1 { 378 379# Automatically install the WebKit feature, when the optional WebPositive 380# optional package is enabled. 381if [ IsOptionalHaikuImagePackageAdded WebPositive ] { 382 HAIKU_BUILD_FEATURE_WEBKIT = 1 ; 383} 384 385if $(TARGET_ARCH) = x86 { 386 HAIKU_WEBKIT_FILE = haikuwebkit-1.1.3-x86-gcc4-2012-08-31a.zip ; 387} else if $(TARGET_ARCH) = x86_64 { 388 HAIKU_WEBKIT_FILE = haikuwebkit-1.1.3-x86_64-gcc4-2012-12-22.zip ; 389} 390if $(HAIKU_BUILD_FEATURE_WEBKIT) { 391 if $(TARGET_ARCH) != x86 && $(TARGET_ARCH) != x86_64 { 392 Echo "WebKit support not available on $(TARGET_ARCH)" ; 393 } else if $(TARGET_GCC_VERSION_$(architecture)[1]) < 4 { 394 if ! $(isHybridBuild) { 395 Echo "WebKit support not available on gcc" 396 "$(TARGET_GCC_VERSION_$(architecture)[1])" ; 397 } else { 398 Echo "WebKit to be utilized by gcc4 inside" 399 "$(HAIKU_ALTERNATIVE_GCC_OUTPUT_DIR)" ; 400 } 401 } else { 402 local zipFile = [ DownloadFile $(HAIKU_WEBKIT_FILE) 403 : $(baseURL)/$(HAIKU_WEBKIT_FILE) ] ; 404 405 HAIKU_WEBKIT_DIR = [ FDirName $(HAIKU_OPTIONAL_BUILD_PACKAGES_DIR) 406 $(HAIKU_WEBKIT_FILE:B) ] ; 407 408 HAIKU_WEBKIT_HEADERS_DEPENDENCY = [ ExtractArchive $(HAIKU_WEBKIT_DIR) 409 : include/ : $(zipFile) : extracted-webkit ] ; 410 411 HAIKU_WEBKIT_LIBS = [ ExtractArchive $(HAIKU_WEBKIT_DIR) 412 : 413 lib/libwtf.so 414 lib/libjavascriptcore.so 415 lib/libwebcore.so 416 lib/libwebkit.so 417 : $(zipFile) 418 : extracted-webkit 419 ] ; 420 421 HAIKU_WEBKIT_HEADERS = [ FDirName $(HAIKU_WEBKIT_DIR) include ] ; 422 423 EnableBuildFeatures webkit ; 424 } 425} 426 427} # ! 1 428 429 430# libpng 431if [ IsPackageAvailable libpng_devel ] { 432 ExtractBuildFeatureArchives libpng : 433 file: base libpng 434 runtime: lib 435 file: devel libpng_devel 436 depends: base 437 library: $(developLibDir)/libpng.so 438 headers: $(developHeadersDir) 439 ; 440 441 EnableBuildFeatures libpng ; 442} else { 443 Echo "libpng support not available on $(TARGET_ARCH)" ; 444} 445 446 447# jpeg 448if [ IsPackageAvailable jpeg_devel ] { 449 ExtractBuildFeatureArchives jpeg : 450 file: base jpeg 451 runtime: lib 452 file: devel jpeg_devel 453 depends: base 454 library: $(developLibDir)/libjpeg.so 455 headers: $(developHeadersDir) 456 ; 457 458 EnableBuildFeatures jpeg ; 459} else { 460 Echo "jpeg support not available on $(TARGET_ARCH)" ; 461} 462 463 464# zlib 465if [ IsPackageAvailable zlib_devel ] { 466 ExtractBuildFeatureArchives zlib : 467 file: base zlib 468 runtime: lib 469 file: devel zlib_devel 470 depends: base 471 library: $(developLibDir)/libz.so 472 headers: $(developHeadersDir) 473 # sources are required for the primary architecture only 474 primary @{ 475 file: source zlib_source 476 sources: develop/sources/%portRevisionedName%/source 477 }@ 478 ; 479 480 EnableBuildFeatures zlib ; 481} else { 482 Echo "zlib support not available on $(TARGET_ARCH)" ; 483} 484 485 486# libsolv 487if [ IsPackageAvailable libsolv_devel ] { 488 ExtractBuildFeatureArchives libsolv : 489 file: base libsolv 490 runtime: lib 491 file: devel libsolv_devel 492 depends: base 493 libraries: 494 $(developLibDir)/libsolv.so 495 $(developLibDir)/libsolvext.so 496 headers: $(developHeadersDir) 497 # sources are required for the primary architecture only 498 primary @{ 499 file: source libsolv_source 500 sources: develop/sources/%portRevisionedName%/source 501 }@ 502 ; 503 504 EnableBuildFeatures libsolv ; 505} else { 506 Echo "libsolv package not available for $(TARGET_ARCH)" ; 507} 508 509 510# GPL add-ons 511if $(HAIKU_INCLUDE_GPL_ADDONS) = 1 { 512 EnableBuildFeatures gpl ; 513} 514 515 516# ATA vs. IDE 517#HACK: remove when old ide code is removed! 518if $(HAIKU_ATA_STACK) = 1 { 519 EnableBuildFeatures ata ; 520} else { 521 EnableBuildFeatures ide ; 522} 523