summaryrefslogtreecommitdiff
path: root/pkgs/test/make-binary-wrapper/default.nix
blob: 715b28f912e496c62610c003a86a4447cea0655e (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
{
  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=${./. + "/${testname}"}

      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.hostPlatform.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