diff --git a/pkgs/build-support/builder-defs/builder-defs.nix b/pkgs/build-support/builder-defs/builder-defs.nix index da5d2249852..42d8f35b076 100644 --- a/pkgs/build-support/builder-defs/builder-defs.nix +++ b/pkgs/build-support/builder-defs/builder-defs.nix @@ -23,6 +23,7 @@ let inherit (builtins) head tail trace; in else if hasSuffixHack ".tar.Z" s then "tZ" else if hasSuffixHack ".tar.lzma" s then "tar.lzma" else if hasSuffixHack ".tar.xz" s then "tar.xz" + else if hasSuffixHack ".rar" s then "rar" else if (hasSuffixHack ".zip" s) || (hasSuffixHack ".ZIP" s) then "zip" else if hasSuffixHack "-cvs-export" s then "cvs-dir" else if hasSuffixHack "-git-export" s then "git-dir" @@ -213,6 +214,9 @@ let inherit (builtins) head tail trace; in " else if (archiveType s) == "tar.xz" then " xz -d -c <'${s}' | tar xv cd \"\$(xz -d -c <'${s}' | tar t | head -1 | sed -e 's@/.*@@' )\" + " else if (archiveType s) == "rar" then " + unrar x '${s}' + cd \"$(unrar lb '${s}' | tail -1 | sed -e 's@/.*@@' )\" " else if (archiveType s) == "zip" then " unzip '${s}' cd \"$( unzip -lqq '${s}' | tail -1 | diff --git a/pkgs/tools/archivers/unrar/default.nix b/pkgs/tools/archivers/unrar/default.nix index d973649c9ed..eb0d3a3bd83 100644 --- a/pkgs/tools/archivers/unrar/default.nix +++ b/pkgs/tools/archivers/unrar/default.nix @@ -23,6 +23,8 @@ stdenv.mkDerivation { $out/share/doc/unrar ''; + setupHook = ./setup-hook.sh; + meta = with stdenv.lib; { description = "Utility for RAR archives"; homepage = http://www.rarlab.com/; diff --git a/pkgs/tools/archivers/unrar/setup-hook.sh b/pkgs/tools/archivers/unrar/setup-hook.sh new file mode 100644 index 00000000000..41d6a5cd217 --- /dev/null +++ b/pkgs/tools/archivers/unrar/setup-hook.sh @@ -0,0 +1,5 @@ +unpackCmdHooks+=(_tryUnrar) +_tryUnrar() { + if ! [[ "$curSrc" =~ \.rar$ ]]; then return 1; fi + unrar x "$curSrc" >/dev/null +}