nixpkgs/pkgs/by-name/bm/bmake/package.nix
Vladimír Čunát 661a05d10e
Revert "bmake: 20240808 -> 20240921"
This reverts commit bf21377621.

This wasn't a big rebuild on nixpkgs master, but now on staging-next
it would rebuild *-darwin stdenv, which would be too expensive
at this point.

(cherry picked from commit 65f28f123e)

Applying to master as well to minimize the potential for confusion
about bmake being unexpectedly downgraded.
2024-10-21 17:13:00 +02:00

123 lines
3.0 KiB
Nix

{
lib,
bc,
fetchurl,
getopt,
ksh,
pkgsMusl,
stdenv,
tzdata,
}:
stdenv.mkDerivation (finalAttrs: {
pname = "bmake";
version = "20240808";
src = fetchurl {
url = "https://www.crufty.net/ftp/pub/sjg/bmake-${finalAttrs.version}.tar.gz";
hash = "sha256-tZGJJRtIPezUSS8fdDh7KlhMA9WqRjfNSLOOxiucCEg=";
};
patches = [
# decouple tests from build phase
./002-dont-test-while-installing.diff
# preserve PATH from build env in unit tests
./003-fix-unexport-env-test.diff
# Always enable ksh test since it checks in a impure location /bin/ksh
./004-unconditional-ksh-test.diff
];
outputs = [ "out" "man" ];
nativeBuildInputs = [
getopt
];
nativeCheckInputs = [
bc
tzdata
] ++ lib.optionals (stdenv.hostPlatform.libc != "musl") [
ksh
];
# The generated makefile is a small wrapper for calling ./boot-strap with a
# given op. On a case-insensitive filesystem this generated makefile clobbers
# a distinct, shipped Makefile and causes infinite recursion during tests
# which eventually fail with "fork: Resource temporarily unavailable"
configureFlags = [
"--without-makefile"
];
# Disabled tests:
# * directive-export{,-gmake}: another failure related to TZ variables
# * opt-keep-going-indirect: not yet known
# * varmod-localtime: musl doesn't support TZDIR and this test relies on
# impure, implicit paths
env.BROKEN_TESTS = builtins.concatStringsSep " " [
"directive-export"
"directive-export-gmake"
"opt-keep-going-indirect"
"varmod-localtime"
];
strictDeps = true;
doCheck = true;
# Make tests work with musl
# * Disable deptgt-delete_on_error test (alpine does this too)
# * Disable shell-ksh test (ksh doesn't compile with musl)
# * Fix test failing due to different strerror(3) output for musl and glibc
postPatch = lib.optionalString (stdenv.hostPlatform.libc == "musl") ''
sed -i unit-tests/Makefile \
-e '/deptgt-delete_on_error/d' \
-e '/shell-ksh/d'
substituteInPlace unit-tests/opt-chdir.exp --replace "File name" "Filename"
'';
buildPhase = ''
runHook preBuild
./boot-strap --prefix=$out -o . op=build
runHook postBuild
'';
installPhase = ''
runHook preInstall
./boot-strap --prefix=$out -o . op=install
runHook postInstall
'';
checkPhase = ''
runHook preCheck
./boot-strap -o . op=test
runHook postCheck
'';
setupHook = ./setup-hook.sh;
passthru = {
tests = {
bmakeMusl = pkgsMusl.bmake;
};
};
meta = {
homepage = "https://www.crufty.net/help/sjg/bmake.html";
description = "Portable version of NetBSD 'make'";
license = lib.licenses.bsd3;
mainProgram = "bmake";
maintainers = with lib.maintainers; [ thoughtpolice AndersonTorres ];
platforms = lib.platforms.unix;
# requires strip
badPlatforms = [ lib.systems.inspect.platformPatterns.isStatic ];
};
})
# TODO: report the quirks and patches to bmake devteam (especially the Musl one)
# TODO: investigate static support