mastodon: 4.3.1 -> 4.3.2 (#361487)
[NixPkgs.git] / pkgs / test / make-binary-wrapper / default.nix
blob29e4272fd672c6d3a0d54784fb6b28fa35a15347
1 { lib
2 , stdenv
3 , pkgsCross
4 , makeBinaryWrapper
5 , writeText
6 , runCommand
7 , runCommandCC
8 }:
10 let
11   env = { nativeBuildInputs = [ makeBinaryWrapper ]; };
12   envCheck = runCommandCC "envcheck" env ''
13     cc -Wall -Werror -Wpedantic -o $out ${./envcheck.c}
14   '';
15   makeGoldenTest = testname: runCommand "make-binary-wrapper-test-${testname}" env ''
16     mkdir -p tmp/foo # for the chdir test
18     source=${lib.fileset.toSource {
19       root = ./.;
20       fileset = lib.fileset.unions [
21         (./. + "/${testname}.cmdline")
22         (./. + "/${testname}.c")
23         (lib.fileset.maybeMissing (./. + "/${testname}.env"))
24       ];
25     }}
27     params=$(<"$source/${testname}.cmdline")
28     eval "makeCWrapper /send/me/flags $params" > wrapper.c
30     diff wrapper.c "$source/${testname}.c"
32     if [ -f "$source/${testname}.env" ]; then
33       eval "makeWrapper ${envCheck} wrapped $params"
34       env -i ./wrapped > env.txt
35       sed "s#SUBST_ARGV0#${envCheck}#;s#SUBST_CWD#$PWD#" \
36         "$source/${testname}.env" > golden-env.txt
37       if ! diff env.txt golden-env.txt; then
38         echo "env/argv should be:"
39         cat golden-env.txt
40         echo "env/argv output is:"
41         cat env.txt
42         exit 1
43       fi
44     else
45       # without a golden env, we expect the wrapper compilation to fail
46       ! eval "makeWrapper ${envCheck} wrapped $params" &> error.txt
47     fi
49     cp wrapper.c $out
50   '';
51   tests = lib.genAttrs [
52     "add-flags"
53     "argv0"
54     "basic"
55     "chdir"
56     "combination"
57     "env"
58     "inherit-argv0"
59     "invalid-env"
60     "overlength-strings"
61     "prefix"
62     "suffix"
63   ] makeGoldenTest // lib.optionalAttrs (! stdenv.hostPlatform.isDarwin) {
64     cross = pkgsCross.${if stdenv.buildPlatform.isAarch64 then "gnu64" else "aarch64-multiplatform"}.callPackage ./cross.nix { };
65   };
68 writeText "make-binary-wrapper-tests" ''
69   ${lib.concatStringsSep "\n" (builtins.attrValues tests)}
70 '' // tests