|
|
|
@ -5,46 +5,47 @@ |
|
|
|
|
# (e.g. due to minor changes in the compression algorithm, or changes |
|
|
|
|
# in timestamps). |
|
|
|
|
|
|
|
|
|
{ lib, fetchurl, unzip }: |
|
|
|
|
{ fetchurl, unzip }: |
|
|
|
|
|
|
|
|
|
{ name ? "source" |
|
|
|
|
{ # Optionally move the contents of the unpacked tree up one level. |
|
|
|
|
stripRoot ? true |
|
|
|
|
, url |
|
|
|
|
# Optionally move the contents of the unpacked tree up one level. |
|
|
|
|
, stripRoot ? true |
|
|
|
|
, extraPostFetch ? "" |
|
|
|
|
, name ? "source" |
|
|
|
|
, ... } @ args: |
|
|
|
|
|
|
|
|
|
(fetchurl ({ |
|
|
|
|
inherit name; |
|
|
|
|
|
|
|
|
|
recursiveHash = true; |
|
|
|
|
downloadToTemp = true; |
|
|
|
|
|
|
|
|
|
postFetch = '' |
|
|
|
|
unpackDir="$TMPDIR/unpack" |
|
|
|
|
mkdir "$unpackDir" |
|
|
|
|
cd "$unpackDir" |
|
|
|
|
downloadToTemp = true; |
|
|
|
|
|
|
|
|
|
renamed="$TMPDIR/${baseNameOf url}" |
|
|
|
|
mv "$downloadedFile" "$renamed" |
|
|
|
|
unpackFile "$renamed" |
|
|
|
|
result=$unpackDir |
|
|
|
|
'' |
|
|
|
|
# Most src disted tarballs have a parent directory like foo-1.2.3/ to strip |
|
|
|
|
+ lib.optionalString stripRoot '' |
|
|
|
|
if [ $(ls "$unpackDir" | wc -l) != 1 ]; then |
|
|
|
|
echo "error: zip file must contain a single file or directory." |
|
|
|
|
echo "hint: Pass stripRoot=false; to fetchzip to assume flat list of files." |
|
|
|
|
exit 1 |
|
|
|
|
fi |
|
|
|
|
fn=$(cd "$unpackDir" && echo *) |
|
|
|
|
result="$unpackDir/$fn" |
|
|
|
|
'' + '' |
|
|
|
|
mkdir $out |
|
|
|
|
mv "$result" "$out" |
|
|
|
|
'' |
|
|
|
|
+ extraPostFetch; |
|
|
|
|
postFetch = |
|
|
|
|
'' |
|
|
|
|
unpackDir="$TMPDIR/unpack" |
|
|
|
|
mkdir "$unpackDir" |
|
|
|
|
cd "$unpackDir" |
|
|
|
|
|
|
|
|
|
renamed="$TMPDIR/${baseNameOf url}" |
|
|
|
|
mv "$downloadedFile" "$renamed" |
|
|
|
|
unpackFile "$renamed" |
|
|
|
|
'' |
|
|
|
|
+ (if stripRoot then '' |
|
|
|
|
if [ $(ls "$unpackDir" | wc -l) != 1 ]; then |
|
|
|
|
echo "error: zip file must contain a single file or directory." |
|
|
|
|
echo "hint: Pass stripRoot=false; to fetchzip to assume flat list of files." |
|
|
|
|
exit 1 |
|
|
|
|
fi |
|
|
|
|
fn=$(cd "$unpackDir" && echo *) |
|
|
|
|
if [ -f "$unpackDir/$fn" ]; then |
|
|
|
|
mkdir $out |
|
|
|
|
fi |
|
|
|
|
mv "$unpackDir/$fn" "$out" |
|
|
|
|
'' else '' |
|
|
|
|
mv "$unpackDir" "$out" |
|
|
|
|
'') #*/ |
|
|
|
|
+ extraPostFetch; |
|
|
|
|
} // removeAttrs args [ "stripRoot" "extraPostFetch" ])).overrideAttrs (x: { |
|
|
|
|
# Hackety-hack: we actually need unzip hooks, too |
|
|
|
|
nativeBuildInputs = x.nativeBuildInputs ++ [ unzip ]; |
|
|
|
|