mirror of
https://github.com/NixOS/nixpkgs.git
synced 2024-11-15 14:26:33 +01:00
7cb66fd579
The source included way more files than it really needed. This commit limits it to exactly those it needs. This also makes sure that no rebuild is necessary when any Nix file changes, in particular useful when we reformat the Nix files.
70 lines
1.9 KiB
Nix
70 lines
1.9 KiB
Nix
{ lib
|
|
, stdenv
|
|
, pkgsCross
|
|
, makeBinaryWrapper
|
|
, writeText
|
|
, runCommand
|
|
, runCommandCC
|
|
}:
|
|
|
|
let
|
|
env = { nativeBuildInputs = [ makeBinaryWrapper ]; };
|
|
envCheck = runCommandCC "envcheck" env ''
|
|
cc -Wall -Werror -Wpedantic -o $out ${./envcheck.c}
|
|
'';
|
|
makeGoldenTest = testname: runCommand "make-binary-wrapper-test-${testname}" env ''
|
|
mkdir -p tmp/foo # for the chdir test
|
|
|
|
source=${lib.fileset.toSource {
|
|
root = ./.;
|
|
fileset = lib.fileset.unions [
|
|
(./. + "/${testname}.cmdline")
|
|
(./. + "/${testname}.c")
|
|
(lib.fileset.maybeMissing (./. + "/${testname}.env"))
|
|
];
|
|
}}
|
|
|
|
params=$(<"$source/${testname}.cmdline")
|
|
eval "makeCWrapper /send/me/flags $params" > wrapper.c
|
|
|
|
diff wrapper.c "$source/${testname}.c"
|
|
|
|
if [ -f "$source/${testname}.env" ]; then
|
|
eval "makeWrapper ${envCheck} wrapped $params"
|
|
env -i ./wrapped > env.txt
|
|
sed "s#SUBST_ARGV0#${envCheck}#;s#SUBST_CWD#$PWD#" \
|
|
"$source/${testname}.env" > golden-env.txt
|
|
if ! diff env.txt golden-env.txt; then
|
|
echo "env/argv should be:"
|
|
cat golden-env.txt
|
|
echo "env/argv output is:"
|
|
cat env.txt
|
|
exit 1
|
|
fi
|
|
else
|
|
# without a golden env, we expect the wrapper compilation to fail
|
|
! eval "makeWrapper ${envCheck} wrapped $params" &> error.txt
|
|
fi
|
|
|
|
cp wrapper.c $out
|
|
'';
|
|
tests = lib.genAttrs [
|
|
"add-flags"
|
|
"argv0"
|
|
"basic"
|
|
"chdir"
|
|
"combination"
|
|
"env"
|
|
"inherit-argv0"
|
|
"invalid-env"
|
|
"overlength-strings"
|
|
"prefix"
|
|
"suffix"
|
|
] makeGoldenTest // lib.optionalAttrs (! stdenv.isDarwin) {
|
|
cross = pkgsCross.${if stdenv.buildPlatform.isAarch64 then "gnu64" else "aarch64-multiplatform"}.callPackage ./cross.nix { };
|
|
};
|
|
in
|
|
|
|
writeText "make-binary-wrapper-tests" ''
|
|
${lib.concatStringsSep "\n" (builtins.attrValues tests)}
|
|
'' // tests
|