Something went wrong. Try again.
What happens if I push all of nixpkgs
Something went wrong. Try again.
6.8 kB · 296 lines
Nix
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297{ lib, writeText, writeCBin, writeShellScript, makeWrapper, runCommand, which, ...}:
let # Testfiles foofile = writeText "foofile" "foo"; barfile = writeText "barfile" "bar";
# Wrapped binaries wrappedArgv0 = writeCBin "wrapped-argv0" '' #include <stdio.h> #include <stdlib.h>
void main(int argc, char** argv) { printf("argv0=%s", argv[0]); exit(0); } ''; wrappedBinaryVar = writeShellScript "wrapped-var" '' echo "VAR=$VAR" ''; wrappedBinaryArgs = writeShellScript "wrapped-args" '' printf '%s\n' "$@" '';
mkWrapperBinary = { name, args, wrapped ? wrappedBinaryVar, }: runCommand name { nativeBuildInputs = [ makeWrapper ]; } '' mkdir -p $out/bin makeWrapper "${wrapped}" "$out/bin/${name}" ${lib.escapeShellArgs args} '';
mkArgTest = cmd: toExpect: mkTest cmd (builtins.concatStringsSep "\n" toExpect); mkTest = cmd: toExpect: '' output="$(${cmd})" if [[ "$output" != ${lib.escapeShellArg toExpect} ]]; then echo "test failed: the output of ${cmd} was '$output', expected ${lib.escapeShellArg toExpect}" echo "the wrapper contents:" for i in ${cmd}; do if [[ $i =~ ^test- ]]; then cat $(which $i) fi done exit 1 fi '';inrunCommand "make-wrapper-test" { nativeBuildInputs = [ which (mkWrapperBinary { name = "test-argv0"; args = [ "--argv0" "foo" ]; wrapped = "${wrappedArgv0}/bin/wrapped-argv0"; }) (mkWrapperBinary { name = "test-set"; args = [ "--set" "VAR" "abc" ]; }) (mkWrapperBinary { name = "test-set-default"; args = [ "--set-default" "VAR" "abc" ]; }) (mkWrapperBinary { name = "test-unset"; args = [ "--unset" "VAR" ]; }) (mkWrapperBinary { name = "test-run"; args = [ "--run" "echo bar" ]; }) (mkWrapperBinary { name = "test-run-and-set"; args = [ "--run" "export VAR=foo" "--set" "VAR" "bar" ]; }) (mkWrapperBinary { name = "test-args"; args = [ "--add-flags" "abc" "--append-flags" "xyz" ]; wrapped = wrappedBinaryArgs; }) (mkWrapperBinary { name = "test-arg"; args = [ "--add-flag" "abc 'aaaaa' jkhhjk" "--append-flag" "xyz ggg" ]; wrapped = wrappedBinaryArgs; }) (mkWrapperBinary { name = "test-prefix"; args = [ "--prefix" "VAR" ":" "abc" ]; }) (mkWrapperBinary { name = "test-prefix-noglob"; args = [ "--prefix" "VAR" ":" "./*" ]; }) (mkWrapperBinary { name = "test-suffix"; args = [ "--suffix" "VAR" ":" "abc" ]; }) (mkWrapperBinary { name = "test-prefix-and-suffix"; args = [ "--prefix" "VAR" ":" "foo" "--suffix" "VAR" ":" "bar" ]; }) (mkWrapperBinary { name = "test-prefix-multi"; args = [ "--prefix" "VAR" ":" "abc:foo:foo" ]; }) (mkWrapperBinary { name = "test-suffix-each"; args = [ "--suffix-each" "VAR" ":" "foo bar:def" ]; }) (mkWrapperBinary { name = "test-prefix-each"; args = [ "--prefix-each" "VAR" ":" "foo bar:def" ]; }) (mkWrapperBinary { name = "test-suffix-contents"; args = [ "--suffix-contents" "VAR" ":" "${foofile} ${barfile}" ]; }) (mkWrapperBinary { name = "test-prefix-contents"; args = [ "--prefix-contents" "VAR" ":" "${foofile} ${barfile}" ]; }) ]; } ( # --argv0 works mkTest "test-argv0" "argv0=foo"
# --set works + mkTest "test-set" "VAR=abc" # --set overwrites the variable + mkTest "VAR=foo test-set" "VAR=abc" # --set-default works + mkTest "test-set-default" "VAR=abc" # --set-default doesn"t overwrite the variable + mkTest "VAR=foo test-set-default" "VAR=foo" # --unset works + mkTest "VAR=foo test-unset" "VAR="
# --add-flags and --append-flags work + mkArgTest "test-args" [ "abc" "xyz" ] # --add-flag and --append-flag work + mkArgTest "test-arg" [ "abc 'aaaaa' jkhhjk" "xyz ggg" ] # given flags are kept + mkArgTest "test-args foo" [ "abc" "foo" "xyz" ]
# --run works + mkTest "test-run" "bar\nVAR=" # --run & --set works + mkTest "test-run-and-set" "VAR=bar"
# --prefix works + mkTest "VAR=foo test-prefix" "VAR=abc:foo" # sets variable if not set yet + mkTest "test-prefix" "VAR=abc" # prepends value only once + mkTest "VAR=abc test-prefix" "VAR=abc" # Moves value to the front if it already existed + mkTest "VAR=foo:abc test-prefix" "VAR=abc:foo" + mkTest "VAR=abc:foo:bar test-prefix-multi" "VAR=abc:foo:bar" # Doesn't overwrite parts of the string + mkTest "VAR=test:abcde:test test-prefix" "VAR=abc:test:abcde:test" # Only append the value once when given multiple times in a parameter # to makeWrapper + mkTest "test-prefix" "VAR=abc" # --prefix doesn't expand globs + mkTest "VAR=f?oo test-prefix-noglob" "VAR=./*:f?oo"
# --suffix works + mkTest "VAR=foo test-suffix" "VAR=foo:abc" # sets variable if not set yet + mkTest "test-suffix" "VAR=abc" # adds the same value only once + mkTest "VAR=abc test-suffix" "VAR=abc" + mkTest "VAR=abc:foo test-suffix" "VAR=abc:foo" # --prefix in combination with --suffix + mkTest "VAR=abc test-prefix-and-suffix" "VAR=foo:abc:bar"
# --suffix-each works + mkTest "VAR=abc test-suffix-each" "VAR=abc:foo:bar:def" # --prefix-each works + mkTest "VAR=abc test-prefix-each" "VAR=bar:def:foo:abc" # --suffix-contents works + mkTest "VAR=abc test-suffix-contents" "VAR=abc:foo:bar" # --prefix-contents works + mkTest "VAR=abc test-prefix-contents" "VAR=bar:foo:abc" + "touch $out" )