# This file contains setup for build features that are not available for all # architectures/setups or that are optional for the build. For features that # require downloading a zip file from somewhere it is likely the same file used # for an optional package. # Add the target architecture as a build feature. EnableBuildFeatures $(HAIKU_ARCH) ; if $(HAIKU_GCC_VERSION[1]) = 2 { EnableBuildFeatures gcc2 ; } local baseURL = http://www.haiku-files.org/files/optional-packages ; local hpkgBaseURL = http://haiku-files.org/files/hpkg ; # SSL # Automatically enable the SSL feature, when the OpenSSL package is enabled. if [ IsHaikuImagePackageAdded openssl ] { HAIKU_BUILD_FEATURE_SSL = 1 ; } if $(HAIKU_BUILD_FEATURE_SSL) { if [ IsPackageAvailable openssl_devel ] { ExtractBuildFeatureArchives openssl : file: base openssl runtime: lib file: devel openssl_devel depends: base libraries: develop/lib/libcrypto.so develop/lib/libssl.so headers: develop/headers ; EnableBuildFeatures openssl ; } else { Echo "SSL build feature not available for $(TARGET_ARCH)" ; } } # ICU # Note ICU isn't actually optional, but is still an external package if [ IsPackageAvailable icu_devel ] { ExtractBuildFeatureArchives icu : file: base icu runtime: lib file: devel icu_devel depends: base libraries: develop/lib/libicudata.so develop/lib/libicui18n.so develop/lib/libicuio.so develop/lib/libicule.so develop/lib/libiculx.so develop/lib/libicutu.so develop/lib/libicuuc.so headers: develop/headers ; EnableBuildFeatures icu ; } else { Echo "ICU not available for $(TARGET_ARCH)" ; } # CLucene # TODO: Update to packages! if ! 1 { # Automatically install the CLucene feature, when the CLucene package is # enabled. if [ IsHaikuImagePackageAdded clucene ] { HAIKU_BUILD_FEATURE_CLUCENE = 1 ; } HAIKU_CLUCENE_PACKAGE = clucene-0.9.21-x86-gcc4-haiku-2009-08-11.zip ; HAIKU_CLUCENE_URL = $(baseURL)/$(HAIKU_CLUCENE_PACKAGE) ; if $(HAIKU_BUILD_FEATURE_CLUCENE) { if $(TARGET_ARCH) != x86 { Echo "CLucene build feature not available for $(TARGET_ARCH)" ; } else { # Download the zip archive. local zipFile = [ DownloadFile $(HAIKU_CLUCENE_PACKAGE) : $(HAIKU_CLUCENE_URL) ] ; # zip file and output directory HAIKU_CLUCENE_ZIP_FILE = $(zipFile) ; HAIKU_CLUCENE_DIR = [ FDirName $(HAIKU_OPTIONAL_BUILD_PACKAGES_DIR) $(HAIKU_CLUCENE_PACKAGE:B) ] ; # extract headers and libraries HAIKU_CLUCENE_HEADERS_DEPENDENCY = [ ExtractArchive $(HAIKU_CLUCENE_DIR) : common/include/ : $(zipFile) : extracted-clucene ] ; HAIKU_CLUCENE_LIBS = [ ExtractArchive $(HAIKU_CLUCENE_DIR) : common/lib/libclucene.a : $(zipFile) : extracted-clucene ] ; HAIKU_CLUCENE_HEADERS = [ FDirName $(HAIKU_CLUCENE_DIR) common include ] ; EnableBuildFeatures clucene ; } } } # ! 1 # TODO: Update to packages! if ! 1 { # LLVM if $(TARGET_ARCH) = x86 { if $(HAIKU_GCC_VERSION[1]) >= 4 { HAIKU_LLVM_FILE = llvm-3.2-x86-gcc4-2012-12-21.zip ; local zipFile = [ DownloadFile $(HAIKU_LLVM_FILE) : $(baseURL)/$(HAIKU_LLVM_FILE) ] ; HAIKU_LLVM_DIR = [ FDirName $(HAIKU_OPTIONAL_BUILD_PACKAGES_DIR) $(HAIKU_LLVM_FILE:B) ] ; HAIKU_LLVM_HEADERS_DEPENDENCY = [ ExtractArchive $(HAIKU_LLVM_DIR) : common/include/ : $(zipFile) : extracted-llvm ] ; HAIKU_LLVM_HEADERS = [ FDirName $(HAIKU_LLVM_DIR) common include ] ; # We can't Glob these because they aren't extracted yet. HAIKU_LLVM_LIBS = [ ExtractArchive $(HAIKU_LLVM_DIR) : common/lib/libLLVMAsmParser.a common/lib/libLLVMInstrumentation.a common/lib/libLLVMLinker.a common/lib/libLLVMArchive.a common/lib/libLLVMBitReader.a common/lib/libLLVMDebugInfo.a common/lib/libLLVMJIT.a common/lib/libLLVMipo.a common/lib/libLLVMVectorize.a common/lib/libLLVMBitWriter.a common/lib/libLLVMTableGen.a #common/lib/libLLVMHexagonCodeGen.a #common/lib/libLLVMHexagonAsmPrinter.a #common/lib/libLLVMHexagonDesc.a #common/lib/libLLVMHexagonInfo.a #common/lib/libLLVMNVPTXCodeGen.a #common/lib/libLLVMNVPTXDesc.a #common/lib/libLLVMNVPTXInfo.a #common/lib/libLLVMNVPTXAsmPrinter.a #common/lib/libLLVMMBlazeCodeGen.a #common/lib/libLLVMMBlazeAsmParser.a #common/lib/libLLVMMBlazeDisassembler.a #common/lib/libLLVMMBlazeDesc.a #common/lib/libLLVMMBlazeInfo.a #common/lib/libLLVMMBlazeAsmPrinter.a common/lib/libLLVMCppBackendCodeGen.a common/lib/libLLVMCppBackendInfo.a #common/lib/libLLVMMSP430CodeGen.a #common/lib/libLLVMMSP430Desc.a #common/lib/libLLVMMSP430AsmPrinter.a #common/lib/libLLVMMSP430Info.a #common/lib/libLLVMXCoreCodeGen.a #common/lib/libLLVMXCoreDesc.a #common/lib/libLLVMXCoreInfo.a #common/lib/libLLVMCellSPUCodeGen.a #common/lib/libLLVMCellSPUDesc.a #common/lib/libLLVMCellSPUInfo.a #common/lib/libLLVMMipsAsmParser.a #common/lib/libLLVMMipsCodeGen.a #common/lib/libLLVMMipsDesc.a #common/lib/libLLVMMipsAsmPrinter.a #common/lib/libLLVMMipsDisassembler.a #common/lib/libLLVMMipsInfo.a #common/lib/libLLVMARMAsmParser.a #common/lib/libLLVMARMCodeGen.a #common/lib/libLLVMARMDisassembler.a #common/lib/libLLVMARMDesc.a #common/lib/libLLVMARMInfo.a #common/lib/libLLVMARMAsmPrinter.a #common/lib/libLLVMPowerPCCodeGen.a #common/lib/libLLVMPowerPCDesc.a #common/lib/libLLVMPowerPCInfo.a #common/lib/libLLVMPowerPCAsmPrinter.a #common/lib/libLLVMSparcCodeGen.a #common/lib/libLLVMSparcDesc.a #common/lib/libLLVMSparcInfo.a common/lib/libLLVMX86AsmParser.a common/lib/libLLVMX86CodeGen.a common/lib/libLLVMSelectionDAG.a common/lib/libLLVMAsmPrinter.a common/lib/libLLVMX86Disassembler.a common/lib/libLLVMX86Desc.a common/lib/libLLVMX86Info.a common/lib/libLLVMX86AsmPrinter.a common/lib/libLLVMX86Utils.a common/lib/libLLVMMCDisassembler.a common/lib/libLLVMMCParser.a common/lib/libLLVMInterpreter.a common/lib/libLLVMCodeGen.a common/lib/libLLVMScalarOpts.a common/lib/libLLVMInstCombine.a common/lib/libLLVMTransformUtils.a common/lib/libLLVMipa.a common/lib/libLLVMAnalysis.a common/lib/libLLVMMCJIT.a common/lib/libLLVMRuntimeDyld.a common/lib/libLLVMExecutionEngine.a common/lib/libLLVMTarget.a common/lib/libLLVMMC.a common/lib/libLLVMObject.a common/lib/libLLVMCore.a common/lib/libLLVMSupport.a : $(zipFile) : extracted-llvm ] ; EnableBuildFeatures llvm ; } else { # Nor will it ever be Echo "LLVM not available on GCC2" ; } } else { Echo "LLVM not yet available on $(TARGET_ARCH)" ; } } # ! 1 # GLU (GL Utilities) if [ IsPackageAvailable glu_devel ] { ExtractBuildFeatureArchives glu : file: base glu runtime: lib file: devel glu_devel depends: base library: develop/lib/libGLU.so headers: develop/headers ; EnableBuildFeatures glu ; } else { Echo "GLU not yet available on $(TARGET_ARCH)" ; } # Mesa if [ IsPackageAvailable mesa_devel ] { ExtractBuildFeatureArchives mesa : [ FFilterByBuildFeatures file: devel mesa_devel mesaLibrary: develop/lib/libmesa.a glapiLibrary: develop/lib/libglapi.a headers: develop/headers privateHeaders: develop/headers/mesa_private !gcc2 @{ glslLibrary: develop/lib/libglsl.a galliumLibrary: develop/lib/libgallium.a llvm @{ galliumLlvmpipeLibrary: develop/lib/libllvmpipe.a }@ !llvm @{ galliumSoftpipeLibrary: develop/lib/libsoftpipe.a }@ }@ # !gcc2 ] ; Depends [ BuildFeatureAttribute mesa : galliumLlvmpipeLibrary ] : $(HAIKU_LLVM_LIBS) ; EnableBuildFeatures mesa ; } else { Echo "Mesa 3D rendering support not available on $(TARGET_ARCH)" ; } # FFmpeg if [ IsPackageAvailable ffmpeg_devel ] { local ffmpegLibs = libavformat.so libavcodec.so libavdevice.so libavfilter.so libswscale.so libavutil.so ; local speexLibs = libspeex.so ; local libtheoraLibs = libtheora.so libtheoradec.so libtheoraenc.so ; local libvorbisLibs = libvorbis.so libvorbisenc.so ; local liboggLibs = libogg.so ; local libvpxLibs = libvpx.so ; local feature ; for feature in ffmpeg speex libtheora libvorbis libogg libvpx { ExtractBuildFeatureArchives $(feature) : file: base $(feature) runtime: lib file: devel $(feature)_devel depends: base libraries: develop/lib/$($(feature)Libs) headers: develop/headers ; EnableBuildFeatures $(feature) ; } } else { Echo "FFMpeg support not available on $(TARGET_ARCH)" ; } # Freetype if [ IsPackageAvailable freetype_devel ] { ExtractBuildFeatureArchives freetype : file: base freetype runtime: lib file: devel freetype_devel depends: base library: develop/lib/libfreetype.so headers: develop/headers develop/headers/freetype2 ; EnableBuildFeatures freetype ; } else { Echo "Freetype support not available on $(TARGET_ARCH)" ; } # TagLib # TODO: Update to packages! if ! 1 { # Automatically install the TagLib feature, when the optional TagLib optional # package is enabled. if [ IsHaikuImagePackageAdded taglib ] { HAIKU_BUILD_FEATURE_TAGLIB = 1 ; } HAIKU_TAGLIB_PACKAGE = taglib-1.6.3-r1a4-x86-gcc2-2012-09-03.zip ; HAIKU_TAGLIB_URL = $(baseURL)/$(HAIKU_TAGLIB_PACKAGE) ; if $(HAIKU_BUILD_FEATURE_TAGLIB) { if $(TARGET_ARCH) != x86 { Echo "TagLib build feature not available for $(TARGET_ARCH)" ; } else { # Download the zip archive. local zipFile = [ DownloadFile $(HAIKU_TAGLIB_PACKAGE) : $(HAIKU_TAGLIB_URL) ] ; # zip file and output directory HAIKU_TAGLIB_ZIP_FILE = $(zipFile) ; HAIKU_TAGLIB_DIR = [ FDirName $(HAIKU_OPTIONAL_BUILD_PACKAGES_DIR) $(HAIKU_TAGLIB_PACKAGE:B) ] ; # extract headers and libraries HAIKU_TAGLIB_HEADERS_DEPENDENCY = [ ExtractArchive $(HAIKU_TAGLIB_DIR) : common/include/ : $(zipFile) : extracted-taglib ] ; HAIKU_TAGLIB_LIBS = [ ExtractArchive $(HAIKU_TAGLIB_DIR) : common/lib/libtag.so common/lib/libtag_c.so : $(zipFile) : extracted-taglib ] ; HAIKU_TAGLIB_HEADERS = [ FDirName $(HAIKU_TAGLIB_DIR) common include taglib ] ; EnableBuildFeatures taglib ; } } } # ! 1 # WebKit # TODO: Update to packages! if ! 1 { # Automatically install the WebKit feature, when the optional WebPositive # optional package is enabled. if [ IsOptionalHaikuImagePackageAdded WebPositive ] { HAIKU_BUILD_FEATURE_WEBKIT = 1 ; } if $(TARGET_ARCH) = x86 { HAIKU_WEBKIT_FILE = haikuwebkit-1.1.3-x86-gcc4-2012-08-31a.zip ; } else if $(TARGET_ARCH) = x86_64 { HAIKU_WEBKIT_FILE = haikuwebkit-1.1.3-x86_64-gcc4-2012-12-22.zip ; } if $(HAIKU_BUILD_FEATURE_WEBKIT) { if $(TARGET_ARCH) != x86 && $(TARGET_ARCH) != x86_64 { Echo "WebKit support not available on $(TARGET_ARCH)" ; } else if $(HAIKU_GCC_VERSION[1]) < 4 { if ! $(isHybridBuild) { Echo "WebKit support not available on gcc $(HAIKU_GCC_VERSION[1])" ; } else { Echo "WebKit to be utilized by gcc4 inside $(HAIKU_ALTERNATIVE_GCC_OUTPUT_DIR)" ; } } else { local zipFile = [ DownloadFile $(HAIKU_WEBKIT_FILE) : $(baseURL)/$(HAIKU_WEBKIT_FILE) ] ; HAIKU_WEBKIT_DIR = [ FDirName $(HAIKU_OPTIONAL_BUILD_PACKAGES_DIR) $(HAIKU_WEBKIT_FILE:B) ] ; HAIKU_WEBKIT_HEADERS_DEPENDENCY = [ ExtractArchive $(HAIKU_WEBKIT_DIR) : include/ : $(zipFile) : extracted-webkit ] ; HAIKU_WEBKIT_LIBS = [ ExtractArchive $(HAIKU_WEBKIT_DIR) : lib/libwtf.so lib/libjavascriptcore.so lib/libwebcore.so lib/libwebkit.so : $(zipFile) : extracted-webkit ] ; HAIKU_WEBKIT_HEADERS = [ FDirName $(HAIKU_WEBKIT_DIR) include ] ; EnableBuildFeatures webkit ; } } } # ! 1 # libpng if [ IsPackageAvailable libpng_devel ] { ExtractBuildFeatureArchives libpng : file: base libpng runtime: lib file: devel libpng_devel depends: base library: develop/lib/libpng.so headers: develop/headers ; EnableBuildFeatures libpng ; } else { Echo "libpng support not available on $(TARGET_ARCH)" ; } # jpeg if [ IsPackageAvailable jpeg_devel ] { ExtractBuildFeatureArchives jpeg : file: base jpeg runtime: lib file: devel jpeg_devel depends: base library: develop/lib/libjpeg.so headers: develop/headers ; EnableBuildFeatures jpeg ; } else { Echo "jpeg support not available on $(TARGET_ARCH)" ; } # zlib if [ IsPackageAvailable zlib_devel ] { ExtractBuildFeatureArchives zlib : file: base zlib runtime: lib file: devel zlib_devel depends: base library: develop/lib/libz.so headers: develop/headers file: source zlib_source sources: develop/sources/zlib-1.2.8-2/source ; EnableBuildFeatures zlib ; } else { Echo "zlib support not available on $(TARGET_ARCH)" ; } # libsolv if [ IsPackageAvailable libsolv_devel ] { ExtractBuildFeatureArchives libsolv : file: base libsolv runtime: lib file: devel libsolv_devel depends: base libraries: develop/lib/libsolv.so develop/lib/libsolvext.so headers: develop/headers file: source libsolv_source sources: develop/sources/libsolv-0.3.0_haiku_2013_06_16-1/source ; EnableBuildFeatures libsolv ; } else { Echo "libsolv package not available for $(TARGET_ARCH)" ; } # GPL add-ons if $(HAIKU_INCLUDE_GPL_ADDONS) = 1 { EnableBuildFeatures gpl ; } # ATA vs. IDE #HACK: remove when old ide code is removed! if $(HAIKU_ATA_STACK) = 1 { EnableBuildFeatures ata ; } else { EnableBuildFeatures ide ; }