diff --git a/pkgs/stdenv/generic/setup.sh b/pkgs/stdenv/generic/setup.sh index 9a756fd4723..e5fdbdf2d53 100644 --- a/pkgs/stdenv/generic/setup.sh +++ b/pkgs/stdenv/generic/setup.sh @@ -489,23 +489,20 @@ addHook unpackCmd _defaultUnpack _defaultUnpack() { if [ -d "$curSrc" ]; then - stripHash $curSrc - cp -prd --no-preserve=timestamps $curSrc $strippedName + stripHash "$curSrc" + cp -prd --no-preserve=timestamps "$curSrc" $strippedName else case "$curSrc" in *.tar.xz | *.tar.lzma) # Don't rely on tar knowing about .xz. - xz -d < $curSrc | tar xf - + xz -d < "$curSrc" | tar xf - ;; *.tar | *.tar.* | *.tgz | *.tbz2) # GNU tar can automatically select the decompression method # (info "(tar) gzip"). - tar xf $curSrc - ;; - *.zip) - unzip -qq $curSrc + tar xf "$curSrc" ;; *) return 1 diff --git a/pkgs/tools/archivers/unzip/default.nix b/pkgs/tools/archivers/unzip/default.nix index 0f8ddb17059..7f2c81e2797 100644 --- a/pkgs/tools/archivers/unzip/default.nix +++ b/pkgs/tools/archivers/unzip/default.nix @@ -31,6 +31,8 @@ stdenv.mkDerivation { installFlags = "prefix=$(out)"; + setupHook = ./setup-hook.sh; + meta = { homepage = http://www.info-zip.org; description = "An extraction utility for archives compressed in .zip format"; diff --git a/pkgs/tools/archivers/unzip/setup-hook.sh b/pkgs/tools/archivers/unzip/setup-hook.sh new file mode 100644 index 00000000000..47894ded023 --- /dev/null +++ b/pkgs/tools/archivers/unzip/setup-hook.sh @@ -0,0 +1,5 @@ +addHook unpackCmd _tryUnzip +_tryUnzip() { + if ! [[ "foo.zip" =~ \.zip$ ]]; then return 1; fi + unzip -qq "$curSrc" +}