diff options
Diffstat (limited to 'pkgs/build-support')
-rw-r--r-- | pkgs/build-support/cabal/default.nix | 4 | ||||
-rw-r--r-- | pkgs/build-support/fetchurl/builder.sh | 8 | ||||
-rw-r--r-- | pkgs/build-support/fetchurl/default.nix | 17 | ||||
-rw-r--r-- | pkgs/build-support/fetchzip/default.nix | 44 | ||||
-rw-r--r-- | pkgs/build-support/release/maven-build.nix | 2 |
5 files changed, 68 insertions, 7 deletions
diff --git a/pkgs/build-support/cabal/default.nix b/pkgs/build-support/cabal/default.nix index 45bd5567fc4c..047bccebf095 100644 --- a/pkgs/build-support/cabal/default.nix +++ b/pkgs/build-support/cabal/default.nix @@ -133,9 +133,7 @@ assert !enableStaticLibraries -> versionOlder "7.7" ghc.version; jailbreak = false; # pass the '--enable-split-objs' flag to cabal in the configure stage - enableSplitObjs = !( stdenv.isDarwin # http://hackage.haskell.org/trac/ghc/ticket/4013 - || versionOlder "7.6.99" ghc.version # -fsplit-ojbs is broken in 7.7 snapshot - ); + enableSplitObjs = !stdenv.isDarwin; # http://hackage.haskell.org/trac/ghc/ticket/4013 # pass the '--enable-tests' flag to cabal in the configure stage # and run any regression test suites the package might have diff --git a/pkgs/build-support/fetchurl/builder.sh b/pkgs/build-support/fetchurl/builder.sh index 402fe0cba5b8..0c6e16551b4a 100644 --- a/pkgs/build-support/fetchurl/builder.sh +++ b/pkgs/build-support/fetchurl/builder.sh @@ -17,12 +17,16 @@ curl="curl \ $NIX_CURL_FLAGS" +downloadedFile="$out" +if [ -n "$downloadToTemp" ]; then downloadedFile="$TMPDIR/file"; fi + + tryDownload() { local url="$1" echo header "trying $url" success= - if $curl --fail "$url" --output "$out"; then + if $curl --fail "$url" --output "$downloadedFile"; then success=1 fi stopNest @@ -30,6 +34,8 @@ tryDownload() { finish() { + set +o noglob + runHook postFetch stopNest exit 0 } diff --git a/pkgs/build-support/fetchurl/default.nix b/pkgs/build-support/fetchurl/default.nix index af4a6700153c..c74131a9e607 100644 --- a/pkgs/build-support/fetchurl/default.nix +++ b/pkgs/build-support/fetchurl/default.nix @@ -61,6 +61,17 @@ in , sha1 ? "" , sha256 ? "" +, recursiveHash ? false + +, # Shell code executed after the file has been fetched + # successfully. This can do things like check or transform the file. + postFetch ? "" + +, # Whether to download to a temporary path rather than $out. Useful + # in conjunction with postFetch. The location of the temporary file + # is communicated to postFetch via $downloadedFile. + downloadToTemp ? false + , # If set, don't download the file, but write a list of all possible # URLs (resulting from resolving mirror:// URLs) to $out. showURLs ? false @@ -87,7 +98,7 @@ stdenv.mkDerivation { builder = ./builder.sh; - buildInputs = [curl]; + buildInputs = [ curl ]; urls = urls_; @@ -101,7 +112,9 @@ stdenv.mkDerivation { outputHash = if outputHash != "" then outputHash else if sha256 != "" then sha256 else if sha1 != "" then sha1 else md5; - inherit curlOpts showURLs mirrorsFile impureEnvVars; + outputHashMode = if recursiveHash then "recursive" else "flat"; + + inherit curlOpts showURLs mirrorsFile impureEnvVars postFetch downloadToTemp; # Doing the download on a remote machine just duplicates network # traffic, so don't do that. diff --git a/pkgs/build-support/fetchzip/default.nix b/pkgs/build-support/fetchzip/default.nix new file mode 100644 index 000000000000..7c6e16a05892 --- /dev/null +++ b/pkgs/build-support/fetchzip/default.nix @@ -0,0 +1,44 @@ +# This function downloads and unpacks an archive file, such as a zip +# or tar file. This is primarily useful for dynamically generated +# archives, such as GitHub's /archive URLs, where the unpacked content +# of the zip file doesn't change, but the zip file itself may +# (e.g. due to minor changes in the compression algorithm, or changes +# in timestamps). + +{ lib, fetchurl, unzip }: + +{ # Optionally move the contents of the unpacked tree up one level. + stripRoot ? true +, url +, ... } @ args: + +fetchurl ({ + # Remove the extension, because otherwise unpackPhase will get + # confused. FIXME: fix unpackPhase. + name = args.name or lib.removeSuffix ".zip" (lib.removeSuffix ".tar.gz" (baseNameOf url)); + + recursiveHash = true; + + downloadToTemp = true; + + postFetch = + '' + export PATH=${unzip}/bin:$PATH + mkdir $out + cd $out + renamed="$TMPDIR/${baseNameOf url}" + mv "$downloadedFile" "$renamed" + unpackFile "$renamed" + '' + # FIXME: handle zip files that contain a single regular file. + + lib.optionalString stripRoot '' + shopt -s dotglob + if [ "$(ls -d $out/* | wc -l)" != 1 ]; then + echo "error: zip file must contain a single directory." + exit 1 + fi + fn=$(cd "$out" && echo *) + mv $out/$fn/* "$out/" + rmdir "$out/$fn" + ''; +} // args) diff --git a/pkgs/build-support/release/maven-build.nix b/pkgs/build-support/release/maven-build.nix index 6b47bb9cae90..f7ea07baccbe 100644 --- a/pkgs/build-support/release/maven-build.nix +++ b/pkgs/build-support/release/maven-build.nix @@ -70,7 +70,7 @@ stdenv.mkDerivation ( rec { ''; mvnAssembly = '' - mvn assembly:assembly -Dmaven.test.skip.exec=true ${mvnFlags} + mvn assembly:assembly -Dmaven.test.skip=true ${mvnFlags} ''; mvnRelease = '' |