typioca: 2.7.0 -> 2.8.0
[NixPkgs.git] / pkgs / test / stdenv / patch-shebangs.nix
blob888d4a53a2733d943ac810f3b0e6fcc17a45daaf
1 { lib, stdenv, pkgs }:
3 # since the tests are using a early stdenv, the stdenv will have dontPatchShebangs=1, so it has to be unset
4 # https://github.com/NixOS/nixpkgs/blob/768a982bfc9d29a6bd3beb963ed4b054451ce3d0/pkgs/stdenv/linux/default.nix#L148-L153
6 # strictDeps has to be disabled because the shell isn't in buildInputs
8 let
9   tests = {
10     bad-shebang = stdenv.mkDerivation {
11       name = "bad-shebang";
12       strictDeps = false;
13       dontUnpack = true;
14       installPhase = ''
15         mkdir -p $out/bin
16         echo "#!/bin/bash" > $out/bin/test
17         echo "echo -n hello" >> $out/bin/test
18         chmod +x $out/bin/test
19         dontPatchShebangs=
20       '';
21       passthru = {
22         assertion = "grep '^#!${stdenv.shell}' $out/bin/test > /dev/null";
23       };
24     };
26     ignores-nix-store = stdenv.mkDerivation {
27       name = "ignores-nix-store";
28       strictDeps = false;
29       dontUnpack = true;
30       installPhase = ''
31         mkdir -p $out/bin
32         echo "#!$NIX_STORE/path/to/bash" > $out/bin/test
33         echo "echo -n hello" >> $out/bin/test
34         chmod +x $out/bin/test
35         dontPatchShebangs=
36       '';
37       passthru = {
38         assertion = "grep \"^#!$NIX_STORE/path/to/bash\" $out/bin/test > /dev/null";
39       };
40     };
42     updates-nix-store = stdenv.mkDerivation {
43       name = "updates-nix-store";
44       strictDeps = false;
45       dontUnpack = true;
46       installPhase = ''
47         mkdir -p $out/bin
48         echo "#!$NIX_STORE/path/to/bash" > $out/bin/test
49         echo "echo -n hello" >> $out/bin/test
50         chmod +x $out/bin/test
51         patchShebangs --update $out/bin/test
52         dontPatchShebangs=1
53       '';
54       passthru = {
55         assertion = "grep '^#!${stdenv.shell}' $out/bin/test > /dev/null";
56       };
57     };
59     split-string = stdenv.mkDerivation {
60       name = "split-string";
61       strictDeps = false;
62       dontUnpack = true;
63       installPhase = ''
64         mkdir -p $out/bin
65         echo "#!/usr/bin/env -S bash --posix" > $out/bin/test
66         echo "echo -n hello" >> $out/bin/test
67         chmod +x $out/bin/test
68         dontPatchShebangs=
69       '';
70       passthru = {
71         assertion = "grep -v '^#!${pkgs.coreutils}/bin/env -S ${stdenv.shell} --posix' $out/bin/test > /dev/null";
72       };
73     };
75   };
77 stdenv.mkDerivation {
78   name = "test-patch-shebangs";
79   passthru = { inherit (tests) bad-shebang ignores-nix-store updates-nix-store split-string; };
80   buildCommand = ''
81     validate() {
82       local name=$1
83       local testout=$2
84       local assertion=$3
86       echo -n "... $name: " >&2
88       local rc=0
89       (out=$testout eval "$assertion") || rc=1
91       if [ "$rc" -eq 0 ]; then
92         echo "yes" >&2
93       else
94         echo "no" >&2
95       fi
97       return "$rc"
98     }
100     echo "checking whether patchShebangs works properly... ">&2
102     fail=
103     ${lib.concatStringsSep "\n" (lib.mapAttrsToList (_: test: ''
104       validate "${test.name}" "${test}" ${lib.escapeShellArg test.assertion} || fail=1
105     '') tests)}
107     if [ "$fail" ]; then
108       echo "failed"
109       exit 1
110     else
111       echo "succeeded"
112       touch $out
113     fi
114   '';