haiku/build/jam/BuildFeatures
Adrien Destugues 2c953daef7 Fix build also for secondary arch
Use a variable not affected by MultiArchBuildSetup, so we use the new
libwebp when gcc2 is the main arch, even when building for secondary.
2017-04-08 13:29:49 +02:00

668 lines
15 KiB
Plaintext

# This file contains setup for build features that require external packages. It
# is included once for each configured packaging architecture (with
# TARGET_PACKAGING_ARCH set accordingly).
local architecture = $(TARGET_PACKAGING_ARCH) ;
local secondaryArchSubDir = [ MultiArchIfPrimary "" : /$(architecture) ] ;
local libDir = lib$(secondaryArchSubDir) ;
local developLibDir = develop/lib$(secondaryArchSubDir) ;
local developHeadersDir = develop/headers$(secondaryArchSubDir) ;
# 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:
$(developLibDir)/libcrypto.so
$(developLibDir)/libssl.so
headers: $(developHeadersDir)
;
EnableBuildFeatures openssl ;
} else {
Echo "SSL build feature not available for $(TARGET_PACKAGING_ARCH)" ;
}
}
# gcc_syslibs
if $(TARGET_PACKAGING_ARCH) != x86_gcc2 {
if [ IsPackageAvailable gcc_syslibs ] {
ExtractBuildFeatureArchives gcc_syslibs :
file: base gcc_syslibs
libgcc_s.so: $(libDir)/libgcc_s.so
libstdc++.so: $(libDir)/libstdc++.so
libsupc++.so: $(libDir)/libsupc++.so
;
EnableBuildFeatures gcc_syslibs ;
} else {
Echo "gcc_syslibs not available for $(TARGET_PACKAGING_ARCH)" ;
}
}
# gcc_syslibs_devel
if [ IsPackageAvailable gcc_syslibs_devel ] {
if $(TARGET_PACKAGING_ARCH) = x86_gcc2 {
ExtractBuildFeatureArchives gcc_syslibs_devel :
file: base gcc_syslibs_devel
libgcc.a: $(developLibDir)/libgcc.a
libgcc_eh.a:
libgcc-kernel.a: $(developLibDir)/libgcc.a
libgcc_eh-kernel.a:
libstdc++.a:
libsupc++.a:
libsupc++-kernel.a:
;
} else {
ExtractBuildFeatureArchives gcc_syslibs_devel :
file: base gcc_syslibs_devel
libgcc.a: $(developLibDir)/libgcc.a
libgcc_eh.a: $(developLibDir)/libgcc_eh.a
libgcc-kernel.a: $(developLibDir)/libgcc-kernel.a
libgcc_eh-kernel.a: $(developLibDir)/libgcc_eh.a
libstdc++.a: $(developLibDir)/libstdc++.a
libsupc++.a: $(developLibDir)/libsupc++.a
libsupc++-kernel.a: $(developLibDir)/libsupc++-kernel.a
c++-headers: $(developHeadersDir)/c++
gcc-headers: $(developHeadersDir)/gcc
;
}
EnableBuildFeatures gcc_syslibs_devel ;
} else {
Echo "gcc_syslibs_devel not available for $(TARGET_PACKAGING_ARCH)" ;
}
# ICU
if [ IsPackageAvailable icu_devel ] {
ExtractBuildFeatureArchives icu :
file: base icu
runtime: lib
file: devel icu_devel
depends: base
libraries:
$(developLibDir)/libicudata.so
$(developLibDir)/libicui18n.so
$(developLibDir)/libicuio.so
$(developLibDir)/libicule.so
$(developLibDir)/libiculx.so
$(developLibDir)/libicutu.so
$(developLibDir)/libicuuc.so
headers: $(developHeadersDir)
;
EnableBuildFeatures icu ;
} else {
Echo "ICU not available for $(TARGET_PACKAGING_ARCH)" ;
}
# curl
if [ IsPackageAvailable curl_devel ] {
ExtractBuildFeatureArchives curl :
file: base curl
runtime: lib
file: devel curl_devel
depends: base
library:
$(developLibDir)/libcurl.so
headers: $(developHeadersDir) $(developHeadersDir)/curl
;
EnableBuildFeatures curl ;
} else {
Echo "Curl not available for $(TARGET_PACKAGING_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_PACKAGING_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
# Giflib
if [ IsPackageAvailable giflib_devel ] {
ExtractBuildFeatureArchives giflib :
file: base giflib
runtime: lib
file: devel giflib_devel
depends: base
library: $(developLibDir)/libgif.so.7
headers: $(developHeadersDir)
;
EnableBuildFeatures giflib ;
} else {
Echo "Giflib support not available on $(TARGET_PACKAGING_ARCH)" ;
}
# GLU (GL Utilities)
if [ IsPackageAvailable glu_devel ] {
ExtractBuildFeatureArchives glu :
file: base glu
runtime: lib
file: devel glu_devel
depends: base
library: $(developLibDir)/libGLU.so
headers: $(developHeadersDir)
;
EnableBuildFeatures glu ;
} else {
Echo "GLU not yet available on $(TARGET_PACKAGING_ARCH)" ;
}
# GL (GL Kit, Mesa3D)
if [ IsPackageAvailable mesa_devel ] {
ExtractBuildFeatureArchives mesa :
file: base mesa
runtime: lib
file: devel mesa_devel
depends: base
library: $(developLibDir)/libGL.so
headers: $(developHeadersDir)/os/opengl
;
EnableBuildFeatures mesa ;
} else {
Echo "GL not yet available on $(TARGET_PACKAGING_ARCH)" ;
}
# FFmpeg
if [ IsPackageAvailable ffmpeg_devel ] {
local ffmpegLibs = libavformat.so libavcodec.so libavdevice.so
libavfilter.so libswscale.so libavutil.so libswresample.so ;
ExtractBuildFeatureArchives ffmpeg :
file: base ffmpeg
runtime: lib
file: devel ffmpeg_devel
depends: base
libraries: $(developLibDir)/$(ffmpegLibs)
headers: $(developHeadersDir)
;
EnableBuildFeatures ffmpeg ;
} else {
Echo "FFMpeg support not available on $(TARGET_PACKAGING_ARCH)" ;
}
# Fluidlite
if [ IsPackageAvailable fluidlite_devel ] && [ IsPackageAvailable libvorbis_devel ] {
ExtractBuildFeatureArchives fluidlite :
file: devel fluidlite_devel
library: $(developLibDir)/libfluidlite.a
headers: $(developHeadersDir)
;
EnableBuildFeatures fluidlite ;
} else {
Echo "Fluidlite support not available on $(TARGET_PACKAGING_ARCH)" ;
}
# Libvorbis
if [ IsPackageAvailable libvorbis_devel ] {
ExtractBuildFeatureArchives libvorbis :
file: base libvorbis
runtime: lib
file: devel libvorbis_devel
depends: base
library: $(developLibDir)/libvorbisfile.so.3
headers: $(developHeadersDir)
;
EnableBuildFeatures libvorbis ;
} else {
Echo "Libvorbis support not available on $(TARGET_PACKAGING_ARCH)" ;
}
# Freetype
if [ IsPackageAvailable freetype_devel ] {
ExtractBuildFeatureArchives freetype :
file: base freetype
runtime: lib
file: devel freetype_devel
depends: base
library: $(developLibDir)/libfreetype.so
headers: $(developHeadersDir) $(developHeadersDir)/freetype2
;
EnableBuildFeatures freetype ;
} else {
Echo "Freetype support not available on $(TARGET_PACKAGING_ARCH)" ;
}
# Gutenprint
if [ IsPackageAvailable gutenprint_devel ] {
ExtractBuildFeatureArchives gutenprint :
file: base gutenprint
runtime: lib
file: devel gutenprint_devel
depends: base
library: $(developLibDir)/libgutenprint.so
headers: $(developHeadersDir) $(developHeadersDir)/gutenprint
;
EnableBuildFeatures gutenprint ;
} else {
Echo "Gutenprint support not available on $(TARGET_PACKAGING_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_PACKAGING_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
if [ IsPackageAvailable haikuwebkit_devel ] {
ExtractBuildFeatureArchives webkit :
file: base haikuwebkit
runtime: lib
file: devel haikuwebkit_devel
depends: base
libraries:
$(developLibDir)/libWebKit.so
headers: $(developHeadersDir)
;
EnableBuildFeatures webkit ;
} else {
Echo "WebKit build feature not available for $(TARGET_PACKAGING_ARCH)" ;
}
# libpng
if [ IsPackageAvailable libpng16_devel ] {
ExtractBuildFeatureArchives libpng :
file: base libpng16
runtime: lib
file: devel libpng16_devel
depends: base
library: $(developLibDir)/libpng16.so
headers: $(developHeadersDir)
;
EnableBuildFeatures libpng ;
} else {
Echo "libpng support not available on $(TARGET_PACKAGING_ARCH)" ;
}
# libicns
if [ IsPackageAvailable libicns_devel ] {
ExtractBuildFeatureArchives libicns :
file: base libicns
runtime: lib
file: devel libicns_devel
depends: base
library: $(developLibDir)/libicns.so.1
headers: $(developHeadersDir)
;
EnableBuildFeatures libicns ;
} else {
Echo "libicns support not available on $(TARGET_PACKAGING_ARCH)" ;
}
# Jasper
if [ IsPackageAvailable jasper_devel ] {
ExtractBuildFeatureArchives jasper :
file: base jasper
runtime: lib
file: devel jasper_devel
depends: base
library: $(developLibDir)/libjasper.so.1
headers: $(developHeadersDir) $(developHeadersDir)/jasper
;
EnableBuildFeatures jasper ;
} else {
Echo "Jasper support not available on $(TARGET_PACKAGING_ARCH)" ;
}
# jpeg
if [ IsPackageAvailable jpeg_devel ] {
ExtractBuildFeatureArchives jpeg :
file: base jpeg
runtime: lib
file: devel jpeg_devel
depends: base
library: $(developLibDir)/libjpeg.so
headers: $(developHeadersDir)
;
EnableBuildFeatures jpeg ;
} else {
Echo "jpeg support not available on $(TARGET_PACKAGING_ARCH)" ;
}
# zlib
if [ IsPackageAvailable zlib_devel ] {
ExtractBuildFeatureArchives zlib :
file: base zlib
runtime: lib
file: devel zlib_devel
depends: base
library: $(developLibDir)/libz.so
headers: $(developHeadersDir)
# sources are required for the primary architecture only
primary @{
file: source zlib_source
sources: develop/sources/%portRevisionedName%/sources
}@
;
EnableBuildFeatures zlib ;
} else {
Echo "zlib support not available on $(TARGET_PACKAGING_ARCH)" ;
}
# libedit
if [ IsPackageAvailable libedit_devel ] {
ExtractBuildFeatureArchives libedit :
file: base libedit
runtime: lib
file: devel libedit_devel
depends: base
library: $(developLibDir)/libedit.so
headers: $(developHeadersDir)
;
EnableBuildFeatures libedit ;
} else {
Echo "libedit support not available on $(TARGET_PACKAGING_ARCH)" ;
}
# libsolv
if [ IsPackageAvailable libsolv_devel ] {
ExtractBuildFeatureArchives libsolv :
file: base libsolv
runtime: lib
file: devel libsolv_devel
depends: base
libraries:
$(developLibDir)/libsolv.so
$(developLibDir)/libsolvext.so
headers: $(developHeadersDir)
# sources are required for the primary architecture only
primary @{
file: source libsolv_source
sources: develop/sources/%portRevisionedName%/sources
}@
;
EnableBuildFeatures libsolv ;
} else {
Echo "libsolv package not available for $(TARGET_PACKAGING_ARCH)" ;
}
# qrencode
if [ IsPackageAvailable qrencode_kdl_devel ] {
ExtractBuildFeatureArchives libqrencode_kdl :
file: devel qrencode_kdl_devel
library: $(developLibDir)/libqrencode_kdl.a
headers: $(developHeadersDir)
;
EnableBuildFeatures libqrencode_kdl ;
} else {
Echo "qrencode support not available on $(TARGET_PACKAGING_ARCH)" ;
}
# tiff
if [ IsPackageAvailable tiff4_devel ] {
ExtractBuildFeatureArchives tiff :
file: base tiff4
runtime: lib
file: devel tiff4_devel
depends: base
library: $(developLibDir)/libtiff.so.5
headers: $(developHeadersDir) $(developHeadersDir)/tiff
;
EnableBuildFeatures tiff ;
} else {
Echo "Tiff support not available on $(TARGET_PACKAGING_ARCH)" ;
}
# libwebp
if [ IsPackageAvailable libwebp_devel ] {
if $(HAIKU_PACKAGING_ARCH) = x86_gcc2 {
ExtractBuildFeatureArchives libwebp :
file: base libwebp
runtime: lib
file: devel libwebp_devel
depends: base
library: $(developLibDir)/libwebp.so.7
headers: $(developHeadersDir) $(developHeadersDir)/webp
;
} else {
ExtractBuildFeatureArchives libwebp :
file: base libwebp
runtime: lib
file: devel libwebp_devel
depends: base
library: $(developLibDir)/libwebp.so.6
headers: $(developHeadersDir) $(developHeadersDir)/webp
;
}
EnableBuildFeatures libwebp ;
} else {
Echo "Libwebp support not available on $(TARGET_PACKAGING_ARCH)" ;
}
# live555
if [ IsPackageAvailable live555_devel ] {
ExtractBuildFeatureArchives live555 :
file: devel live555_devel
libraries:
$(developLibDir)/libliveMedia.a
$(developLibDir)/libBasicUsageEnvironment.a
$(developLibDir)/libgroupsock.a
$(developLibDir)/libUsageEnvironment.a
headers: $(developHeadersDir)
$(developHeadersDir)/liveMedia
$(developHeadersDir)/BasicUsageEnvironment
$(developHeadersDir)/groupsock
$(developHeadersDir)/UsageEnvironment
;
EnableBuildFeatures live555 ;
} else {
Echo "live555 not available for $(TARGET_PACKAGING_ARCH)" ;
}
# ncurses
if [ IsPackageAvailable ncurses6_devel ] {
ExtractBuildFeatureArchives ncurses :
file: base ncurses6
runtime: lib
file: devel ncurses6_devel
depends: base
library: $(developLibDir)/libncurses.so.6
headers: $(developHeadersDir)
;
EnableBuildFeatures ncurses ;
} else {
Echo "ncurses support not available on $(TARGET_PACKAGING_ARCH)" ;
}
# expat
if [ IsPackageAvailable expat_devel ] {
ExtractBuildFeatureArchives expat :
file: base expat
runtime: lib
file: devel expat_devel
depends: base
library: $(developLibDir)/libexpat.so.1
headers: $(developHeadersDir)
;
EnableBuildFeatures expat ;
} else {
Echo "expat support not available on $(TARGET_PACKAGING_ARCH)" ;
}
# gnu-efi
if $(TARGET_PACKAGING_ARCH) = x86_64 {
if [ IsPackageAvailable gnuefi ] {
ExtractBuildFeatureArchives gnuefi :
file: base gnuefi
headers: $(developHeadersDir)/gnuefi
headersProtocol: $(developHeadersDir)/gnuefi/protocol
headersArch: $(developHeadersDir)/gnuefi/$(TARGET_ARCH)
libdir: $(libDir)/gnuefi
;
EnableBuildFeatures gnuefi ;
} else {
Echo "gnuefi support not available on $(TARGET_PACKAGING_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 ;
}