linuxKernel.kernels.linux_zen: 6.11.5-zen1 -> v6.12.1-zen1; linuxKernel.kernels.linux...
[NixPkgs.git] / pkgs / test / stdenv / patch-shebangs.nix
blob51edf128f7d5556d1e131a62edfa2e44dc8da5eb
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     without-trailing-newline = stdenv.mkDerivation {
76       name = "without-trailing-newline";
77       strictDeps = false;
78       dontUnpack = true;
79       installPhase = ''
80         mkdir -p $out/bin
81         printf "#!/bin/bash" > $out/bin/test
82         chmod +x $out/bin/test
83         dontPatchShebangs=
84       '';
85       passthru = {
86         assertion = "grep '^#!${stdenv.shell}' $out/bin/test > /dev/null";
87       };
88     };
90     dont-patch-builtins = stdenv.mkDerivation {
91       name = "dont-patch-builtins";
92       strictDeps = false;
93       dontUnpack = true;
94       installPhase = ''
95         mkdir -p $out/bin
96         echo "#!/usr/bin/builtin" > $out/bin/test
97         chmod +x $out/bin/test
98         dontPatchShebangs=
99       '';
100       passthru = {
101         assertion = "grep '^#!/usr/bin/builtin' $out/bin/test > /dev/null";
102       };
103     };
104   };
106 stdenv.mkDerivation {
107   name = "test-patch-shebangs";
108   passthru = { inherit (tests) bad-shebang ignores-nix-store updates-nix-store split-string without-trailing-newline; };
109   buildCommand = ''
110     validate() {
111       local name=$1
112       local testout=$2
113       local assertion=$3
115       echo -n "... $name: " >&2
117       local rc=0
118       (out=$testout eval "$assertion") || rc=1
120       if [ "$rc" -eq 0 ]; then
121         echo "yes" >&2
122       else
123         echo "no" >&2
124       fi
126       return "$rc"
127     }
129     echo "checking whether patchShebangs works properly... ">&2
131     fail=
132     ${lib.concatStringsSep "\n" (lib.mapAttrsToList (_: test: ''
133       validate "${test.name}" "${test}" ${lib.escapeShellArg test.assertion} || fail=1
134     '') tests)}
136     if [ "$fail" ]; then
137       echo "failed"
138       exit 1
139     else
140       echo "succeeded"
141       touch $out
142     fi
143   '';