diff options
author | Shea Levy <shea@shealevy.com> | 2014-03-14 18:52:50 -0400 |
---|---|---|
committer | Shea Levy <shea@shealevy.com> | 2014-03-14 18:52:50 -0400 |
commit | 3cc2b243c7f2d906ce77968e75fd84a3f65a09e0 (patch) | |
tree | 42553a9d492e48c3cb5db271525594b33f50f9d7 /pkgs/misc | |
parent | 4d5d6aed29a0ee10a471fd870fa2fdb61408e4eb (diff) | |
parent | 8685278f11f809af52710f165257fb5808018182 (diff) | |
download | nixlib-3cc2b243c7f2d906ce77968e75fd84a3f65a09e0.tar nixlib-3cc2b243c7f2d906ce77968e75fd84a3f65a09e0.tar.gz nixlib-3cc2b243c7f2d906ce77968e75fd84a3f65a09e0.tar.bz2 nixlib-3cc2b243c7f2d906ce77968e75fd84a3f65a09e0.tar.lz nixlib-3cc2b243c7f2d906ce77968e75fd84a3f65a09e0.tar.xz nixlib-3cc2b243c7f2d906ce77968e75fd84a3f65a09e0.tar.zst nixlib-3cc2b243c7f2d906ce77968e75fd84a3f65a09e0.zip |
Merge branch 'nix-run' of git://github.com/rickynils/nixpkgs
Add nix-run and myEnvRun
Diffstat (limited to 'pkgs/misc')
-rw-r--r-- | pkgs/misc/nix-run/default.nix | 72 |
1 files changed, 72 insertions, 0 deletions
diff --git a/pkgs/misc/nix-run/default.nix b/pkgs/misc/nix-run/default.nix new file mode 100644 index 000000000000..ef83ec2a1f3d --- /dev/null +++ b/pkgs/misc/nix-run/default.nix @@ -0,0 +1,72 @@ +{ stdenv, bash, writeScript }: + +let + + nix-run = writeScript "nix-run" '' + #!${bash}/bin/bash + + # Runs nix-build and executes the result + # All arguments before "--" are given to nix-build, + # and all arguments after "--" are given to the + # executed command. stdin is redirected to the executed + # command. + + out=$(mktemp) + rm "$out" + + # parse args into args1 and args2, separated by -- + # args1 goes to nix-build, args2 goes to the built command + args1=("$@") + args2=() + for i in "''${!args1[@]}"; do + if [ "''${args1[$i]}" == "--" ]; then + args2=("''${args1[@]:$((i+1))}") + args1=("''${args1[@]:0:$((i))}") + break + fi + done + + if nix-build -o "$out" "''${args1[@]}" >/dev/null; then + target=$(readlink -m "$out") + unlink "$out" + if test -f "$target" && test -x "$target"; then + exec "$target" "''${args2[@]}" <&0 + else + echo "nix-run: No executable target produced by nix-build" + exit 1 + fi + else + echo "nix-run: nix-build failed" + exit 1 + fi + ''; + +in stdenv.mkDerivation { + name = "nix-run"; + phases = [ "installPhase" ]; + installPhase = '' + mkdir -p $out/bin + ln -s ${nix-run} $out/bin/nix-run + ''; + meta = { + description = '' + Wrapper around nix-build that automatically executes the binary + produced by the provided Nix expression. + ''; + longDescription = '' + nix-run invokes nix-build with any options given to it. It then + expects one executable file to be produced by nix-build. If this + is the case, that file is executed with any options that is given + to nix-run after a <literal>--</literal> option separator. If no + executable file is produced by nix-build, nix-run will exit with + an error. An example invocation of nix-run is <literal>nix-run -A + myattr mynix.nix -- -o opt</literal>. nix-run will then build the + attribute <literal>myattr</literal> from the Nix expression given + in the file <literal>mynix.nix</literal>. If a single executable + file is produced, that file is executed with the option + <literal>-o opt</literal>. + ''; + maintainers = [ stdenv.lib.maintainers.rickynils ]; + platforms = stdenv.lib.platforms.linux; + }; +} |