diff options
author | Alyssa Ross <hi@alyssa.is> | 2024-02-20 12:16:56 +0100 |
---|---|---|
committer | Alyssa Ross <hi@alyssa.is> | 2024-02-20 12:16:56 +0100 |
commit | b24d64b3b1ef897f07cd072a88a9881cb330aa7f (patch) | |
tree | a87bb2eed9af3ef1efd51dd65221d91f0c949041 /nixpkgs/pkgs/by-name/wa/waf | |
parent | 73338df7473bb3810e70a16b8b0cba4f0f606f2b (diff) | |
parent | fa15b53dbea5028db38d6e09b4cef6eba42aeebb (diff) | |
download | nixlib-b24d64b3b1ef897f07cd072a88a9881cb330aa7f.tar nixlib-b24d64b3b1ef897f07cd072a88a9881cb330aa7f.tar.gz nixlib-b24d64b3b1ef897f07cd072a88a9881cb330aa7f.tar.bz2 nixlib-b24d64b3b1ef897f07cd072a88a9881cb330aa7f.tar.lz nixlib-b24d64b3b1ef897f07cd072a88a9881cb330aa7f.tar.xz nixlib-b24d64b3b1ef897f07cd072a88a9881cb330aa7f.tar.zst nixlib-b24d64b3b1ef897f07cd072a88a9881cb330aa7f.zip |
Merge branch 'nixos-unstable-small' of https://github.com/NixOS/nixpkgs
Diffstat (limited to 'nixpkgs/pkgs/by-name/wa/waf')
-rw-r--r-- | nixpkgs/pkgs/by-name/wa/waf/hook.nix | 24 | ||||
-rw-r--r-- | nixpkgs/pkgs/by-name/wa/waf/package.nix | 80 | ||||
-rw-r--r-- | nixpkgs/pkgs/by-name/wa/waf/setup-hook.sh | 94 |
3 files changed, 198 insertions, 0 deletions
diff --git a/nixpkgs/pkgs/by-name/wa/waf/hook.nix b/nixpkgs/pkgs/by-name/wa/waf/hook.nix new file mode 100644 index 000000000000..ac497d227831 --- /dev/null +++ b/nixpkgs/pkgs/by-name/wa/waf/hook.nix @@ -0,0 +1,24 @@ +{ lib +, stdenv +, pkgs +, makeSetupHook +, waf +}: + +makeSetupHook { + name = "waf-setup-hook"; + + substitutions = { + # Sometimes the upstream provides its own waf file; in order to honor it, + # waf is not inserted into propagatedBuildInputs, rather it is inserted + # directly + inherit waf; + wafCrossFlags = lib.optionalString (stdenv.hostPlatform.system != stdenv.targetPlatform.system) + ''--cross-compile "--cross-execute=${stdenv.targetPlatform.emulator pkgs}"''; + }; + + meta = { + description = "A setup hook for using Waf in Nixpkgs"; + inherit (waf.meta) maintainers platforms broken; + }; +} ./setup-hook.sh diff --git a/nixpkgs/pkgs/by-name/wa/waf/package.nix b/nixpkgs/pkgs/by-name/wa/waf/package.nix new file mode 100644 index 000000000000..515f3ae03421 --- /dev/null +++ b/nixpkgs/pkgs/by-name/wa/waf/package.nix @@ -0,0 +1,80 @@ +{ lib +, stdenv +, fetchFromGitLab +, callPackage +, ensureNewerSourcesForZipFilesHook +, python3 +# optional list of extra waf tools, e.g. `[ "doxygen" "pytest" ]` +, extraTools ? [] +}: + +stdenv.mkDerivation (finalAttrs: { + pname = "waf"; + version = "2.0.26"; + + src = fetchFromGitLab { + owner = "ita1024"; + repo = "waf"; + rev = "waf-${finalAttrs.version}"; + hash = "sha256-AXDMWlwivJ0Xot6iwuIIlbV2Anz6ieghyOI9jA4yrko="; + }; + + nativeBuildInputs = [ + ensureNewerSourcesForZipFilesHook + python3 + ]; + + buildInputs = [ + # waf executable uses `#!/usr/bin/env python` + python3 + ]; + + strictDeps = true; + + configurePhase = '' + runHook preConfigure + + python waf-light configure + + runHook postConfigure + ''; + + buildPhase = let + extraToolsList = + lib.optionalString (extraTools != []) + "--tools=\"${lib.concatStringsSep "," extraTools}\""; + in + '' + runHook preBuild + + python waf-light build ${extraToolsList} + + runHook postBuild + ''; + + installPhase = '' + runHook preInstall + + install -D waf $out/bin/waf + + runHook postInstall + ''; + + passthru = { + inherit python3 extraTools; + hook = callPackage ./hook.nix { + waf = finalAttrs.finalPackage; + }; + }; + + meta = { + homepage = "https://waf.io"; + description = "The meta build system"; + changelog = "https://gitlab.com/ita1024/waf/blob/${finalAttrs.version}/ChangeLog"; + license = lib.licenses.bsd3; + mainProgram = "waf"; + maintainers = with lib.maintainers; [ AndersonTorres ]; + inherit (python3.meta) platforms; + sourceProvenance = [ lib.sourceTypes.fromSource ]; + }; +}) diff --git a/nixpkgs/pkgs/by-name/wa/waf/setup-hook.sh b/nixpkgs/pkgs/by-name/wa/waf/setup-hook.sh new file mode 100644 index 000000000000..d3e2bf97e682 --- /dev/null +++ b/nixpkgs/pkgs/by-name/wa/waf/setup-hook.sh @@ -0,0 +1,94 @@ +# shellcheck shell=bash disable=SC2206 + +wafConfigurePhase() { + runHook preConfigure + + if ! [ -f "${wafPath:=./waf}" ]; then + echo "copying waf to $wafPath..." + cp @waf@/bin/waf "$wafPath" + fi + + if [ -z "${dontAddPrefix:-}" ] && [ -n "$prefix" ]; then + local prefixFlag="${prefixKey:---prefix=}$prefix" + fi + + if [ -n "${PKG_CONFIG}" ]; then + export PKGCONFIG="${PKG_CONFIG}" + fi + + local flagsArray=( + $prefixFlag + $wafConfigureFlags "${wafConfigureFlagsArray[@]}" + ${wafConfigureTargets:-configure} + ) + + if [ -z "${dontAddWafCrossFlags:-}" ]; then + flagsArray+=(@wafCrossFlags@) + fi + + echoCmd 'waf configure flags' "${flagsArray[@]}" + python "$wafPath" "${flagsArray[@]}" + + if ! [[ -v enableParallelBuilding ]]; then + enableParallelBuilding=1 + echo "waf: enabled parallel building" + fi + + if ! [[ -v enableParallelInstalling ]]; then + enableParallelInstalling=1 + echo "waf: enabled parallel installing" + fi + + runHook postConfigure +} + +wafBuildPhase () { + runHook preBuild + + # set to empty if unset + : "${wafFlags=}" + + local flagsArray=( + ${enableParallelBuilding:+-j ${NIX_BUILD_CORES}} + $wafFlags ${wafFlagsArray[@]} + $wafBuildFlags ${wafBuildFlagsArray[@]} + ${wafBuildTargets:-build} + ) + + echoCmd 'waf build flags' "${flagsArray[@]}" + python "$wafPath" "${flagsArray[@]}" + + runHook postBuild +} + +wafInstallPhase() { + runHook preInstall + + if [ -n "$prefix" ]; then + mkdir -p "$prefix" + fi + + local flagsArray=( + ${enableParallelInstalling:+-j ${NIX_BUILD_CORES}} + $wafFlags ${wafFlagsArray[@]} + $wafInstallFlags ${wafInstallFlagsArray[@]} + ${wafInstallTargets:-install} + ) + + echoCmd 'waf install flags' "${flagsArray[@]}" + python "$wafPath" "${flagsArray[@]}" + + runHook postInstall +} + +if [ -z "${dontUseWafConfigure-}" ] && [ -z "${configurePhase-}" ]; then + configurePhase=wafConfigurePhase +fi + +if [ -z "${dontUseWafBuild-}" ] && [ -z "${buildPhase-}" ]; then + buildPhase=wafBuildPhase +fi + +if [ -z "${dontUseWafInstall-}" ] && [ -z "${installPhase-}" ]; then + installPhase=wafInstallPhase +fi |