From 53b88f966e01b6a51e40d3298c68be2d22243e3a Mon Sep 17 00:00:00 2001 From: Alyssa Ross Date: Tue, 13 Apr 2021 00:10:06 +0000 Subject: [PATCH] bmake: add setupHook With this change, nativeBuildInputs = [ bmake ]; will cause bmake to be used instead of GNU make, but with the usual stdenv API. Packages using bmake will no longer need to implement their own {build,check,dist}Phase. --- .../tools/build-managers/bmake/default.nix | 2 + .../tools/build-managers/bmake/setup-hook.sh | 117 ++++++++++++++++++ 2 files changed, 119 insertions(+) create mode 100644 pkgs/development/tools/build-managers/bmake/setup-hook.sh diff --git a/pkgs/development/tools/build-managers/bmake/default.nix b/pkgs/development/tools/build-managers/bmake/default.nix index e1e9b348503..e79e06a71f4 100644 --- a/pkgs/development/tools/build-managers/bmake/default.nix +++ b/pkgs/development/tools/build-managers/bmake/default.nix @@ -18,6 +18,8 @@ stdenv.mkDerivation rec { ./fix-unexport-env-test.patch ]; + setupHook = ./setup-hook.sh; + meta = with lib; { description = "Portable version of NetBSD 'make'"; homepage = "http://www.crufty.net/help/sjg/bmake.html"; diff --git a/pkgs/development/tools/build-managers/bmake/setup-hook.sh b/pkgs/development/tools/build-managers/bmake/setup-hook.sh new file mode 100644 index 00000000000..ae8f78ec90f --- /dev/null +++ b/pkgs/development/tools/build-managers/bmake/setup-hook.sh @@ -0,0 +1,117 @@ +bmakeBuildPhase() { + runHook preBuild + + local flagsArray=( + ${enableParallelBuilding:+-j${NIX_BUILD_CORES}} + SHELL=$SHELL + $makeFlags ${makeFlagsArray+"${makeFlagsArray[@]}"} + $buildFlags ${buildFlagsArray+"${buildFlagsArray[@]}"} + ) + + echoCmd 'build flags' "${flagsArray[@]}" + bmake ${makefile:+-f $makefile} "${flagsArray[@]}" + unset flagsArray + + runHook postBuild +} + +if [ -z "${dontUseBmakeBuild-}" -a -z "${buildPhase-}" ]; then + buildPhase=bmakeBuildPhase +fi + +bmakeCheckPhase() { + runHook preCheck + + if [ -z "${checkTarget:-}" ]; then + #TODO(@oxij): should flagsArray influence make -n? + if bmake -n ${makefile:+-f $makefile} check >/dev/null 2>&1; then + checkTarget=check + elif bmake -n ${makefile:+-f $makefile} test >/dev/null 2>&1; then + checkTarget=test + fi + fi + + if [ -z "${checkTarget:-}" ]; then + echo "no test target found in bmake, doing nothing" + else + # shellcheck disable=SC2086 + local flagsArray=( + ${enableParallelChecking:+-j${NIX_BUILD_CORES}} + SHELL=$SHELL + # Old bash empty array hack + $makeFlags ${makeFlagsArray+"${makeFlagsArray[@]}"} + ${checkFlags:-VERBOSE=y} ${checkFlagsArray+"${checkFlagsArray[@]}"} + ${checkTarget} + ) + + echoCmd 'check flags' "${flagsArray[@]}" + bmake ${makefile:+-f $makefile} "${flagsArray[@]}" + + unset flagsArray + fi + + runHook postCheck +} + +if [ -z "${dontUseBmakeCheck-}" -a -z "${checkPhase-}" ]; then + checkPhase=bmakeCheckPhase +fi + +bmakeInstallPhase() { + runHook preInstall + + if [ -n "$prefix" ]; then + mkdir -p "$prefix" + fi + + # shellcheck disable=SC2086 + local flagsArray=( + SHELL=$SHELL + # Old bash empty array hack + $makeFlags ${makeFlagsArray+"${makeFlagsArray[@]}"} + $installFlags ${installFlagsArray+"${installFlagsArray[@]}"} + ${installTargets:-install} + ) + + echoCmd 'install flags' "${flagsArray[@]}" + bmake ${makefile:+-f $makefile} "${flagsArray[@]}" + unset flagsArray + + runHook postInstall +} + +if [ -z "${dontUseBmakeInstall-}" -a -z "${installPhase-}" ]; then + installPhase=bmakeInstallPhase +fi + +bmakeDistPhase() { + runHook preDist + + if [ -n "$prefix" ]; then + mkdir -p "$prefix" + fi + + # Old bash empty array hack + # shellcheck disable=SC2086 + local flagsArray=( + $distFlags ${distFlagsArray+"${distFlagsArray[@]}"} ${distTarget:-dist} + ) + + echo 'dist flags: %q' "${flagsArray[@]}" + bmake ${makefile:+-f $makefile} "${flagsArray[@]}" + + if [ "${dontCopyDist:-0}" != 1 ]; then + mkdir -p "$out/tarballs" + + # Note: don't quote $tarballs, since we explicitly permit + # wildcards in there. + # shellcheck disable=SC2086 + cp -pvd ${tarballs:-*.tar.gz} "$out/tarballs" + fi + + runHook postDist +} + +if [ -z "${dontUseBmakeDist-}" -a -z "${distPhase-}" ]; then + distPhase=bmakeDistPhase +fi