* Build libsolv and the dependency solver part of the package kit for
the build platform.
* Add build tool get_package_dependencies. Given a list of package files
and a list of repository files it determines the additional packages
that need to be retrieved from the repositories and prints their URLs.
* Add rules to work with external repositories in the build system
(build/jam/RepositoryRules):
- PackageRepository declares an external repository with all its
packages. The URL of the repository file isn't specified. It is
computed from a given base URL and the SHA256 hash of the list of
package files.
- GeneratedRepositoryPackageList generates a file containing the file
names of all packages in a repository.
- IsPackageAvailable returns whether a package is available in any
repository.
- PackageURL returns the URL for a package.
* Declare the HaikuPorts repository for x86_gcc2
(build/jam/repositories/HaikuPorts/x86_gcc2).
* Add rule AddHaikuImagePackages to add a package to the image and rule
IsHaikuImagePackageAdded to determine whether a package has been
added.
* OptionalPackages: Remove all entries that just downloaded and
installed an external package. AddHaikuImagePackages can be used
instead and is used in the remaining entries. Also move the remaining
optional package dependency declarations from
OptionalPackageDependencies here.
* ExtractBuildFeatureArchives: Instead of the URL parameter a package
name must be specified now. This allows to simplify BuildFeatures
significantly, since there's no dealing with URLs anymore. "if" out
the entries that aren't supported yet.
* build_haiku_image: For the packages installed in system and common
resolve their dependencies and download and install them as well.
518 lines
13 KiB
Plaintext
518 lines
13 KiB
Plaintext
# 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 ;
|
|
}
|