mirror of
https://github.com/NixOS/nixpkgs.git
synced 2024-12-24 02:46:38 +00:00
92ebfa1383
The waf build system is python-based and hosted locally in each package in the executable file named "waf". Unlike CMake, it cannot generate makefiles so we end up having to override the configure, build, and install phases. I've tried to keep these as close to what's in setup.sh as possible. If there is no waf file in the root directory, then we just copy the one hosted in Nixpkgs. Otherwise the only thing you have to add to a package using Waf is "wafHook" into nativeBuildInputs. wafFlags controls the flags specifically passed to waf while configureFlags, buildFlags, and installFlags are still used as in the generic builder.
63 lines
1.3 KiB
Bash
63 lines
1.3 KiB
Bash
wafConfigurePhase() {
|
|
runHook preConfigure
|
|
|
|
if ! [ -f ./waf ]; then
|
|
cp @waf@ waf
|
|
fi
|
|
|
|
if [[ -z "${dontAddPrefix:-}" && -n "$prefix" ]]; then
|
|
configureFlags="${prefixKey:---prefix=}$prefix $configureFlags"
|
|
fi
|
|
|
|
local flagsArray=(
|
|
$configureFlags ${configureFlagsArray[@]}
|
|
${configureTargets:-configure}
|
|
)
|
|
echoCmd 'configure flags' "${flagsArray[@]}"
|
|
python waf "${flagsArray[@]}"
|
|
|
|
runHook postConfigure
|
|
}
|
|
|
|
wafBuildPhase () {
|
|
runHook preBuild
|
|
|
|
# set to empty if unset
|
|
: ${wafFlags=}
|
|
|
|
local flagsArray=(
|
|
${enableParallelBuilding:+-j ${NIX_BUILD_CORES}}
|
|
$wafFlags ${wafFlagsArray[@]}
|
|
$buildFlags ${buildFlagsArray[@]}
|
|
${buildTargets:-build}
|
|
)
|
|
|
|
echoCmd 'build flags' "${flagsArray[@]}"
|
|
python waf "${flagsArray[@]}"
|
|
|
|
runHook postBuild
|
|
}
|
|
|
|
wafInstallPhase() {
|
|
runHook preInstall
|
|
|
|
if [ -n "$prefix" ]; then
|
|
mkdir -p "$prefix"
|
|
fi
|
|
|
|
local flagsArray=(
|
|
$wafFlags ${wafFlagsArray[@]}
|
|
$installFlags ${installFlagsArray[@]}
|
|
${installTargets:-install}
|
|
)
|
|
|
|
echoCmd 'install flags' "${flagsArray[@]}"
|
|
python waf "${flagsArray[@]}"
|
|
|
|
runHook postInstall
|
|
}
|
|
|
|
configurePhase=wafConfigurePhase
|
|
buildPhase=wafBuildPhase
|
|
installPhase=wafInstallPhase
|