From f30fe65b3ea40434b102b881a0351fcc6fd8bb56 Mon Sep 17 00:00:00 2001 From: Eelco Dolstra Date: Thu, 26 Mar 2009 14:11:59 +0000 Subject: [PATCH] * makeSourceTarball -> sourceTarball. * Added a function binaryTarball to do a DESTDIR build into /usr/local. Useful for making statically linked binaries. However, it may be better to do this in a VM (since if you do it in a Nix build environment, you can still end up with a lot of Nix dependencies in your binaries, even if you do static linking). svn path=/nixpkgs/trunk/; revision=14726 --- pkgs/build-support/release/binary-tarball.nix | 87 +++++++++++++++++++ pkgs/build-support/release/debian-build.nix | 2 +- pkgs/build-support/release/default.nix | 8 +- pkgs/build-support/release/nix-build.nix | 9 -- ...-source-tarball.nix => source-tarball.nix} | 2 +- 5 files changed, 96 insertions(+), 12 deletions(-) create mode 100644 pkgs/build-support/release/binary-tarball.nix rename pkgs/build-support/release/{make-source-tarball.nix => source-tarball.nix} (97%) diff --git a/pkgs/build-support/release/binary-tarball.nix b/pkgs/build-support/release/binary-tarball.nix new file mode 100644 index 00000000000..f8bb5282ee2 --- /dev/null +++ b/pkgs/build-support/release/binary-tarball.nix @@ -0,0 +1,87 @@ +/* This function builds a binary tarball. The resulting binaries are + usually only useful if they are don't have any runtime dependencies + on any paths in the Nix store, since those aren't distributed in + the tarball. For instance, the binaries should be statically + linked: they can't depend on dynamic libraries in the store + (including Glibc). + + The binaries are built and installed with a prefix of /usr/local by + default. They are installed by setting DESTDIR to a temporary + directory, so the Makefile of the package should support DESTDIR. +*/ + +{ src, stdenv +, name ? "binary-tarball" +, ... } @ args: + +stdenv.mkDerivation ( + + { + # Also run a `make check'. + doCheck = true; + + showBuildStats = true; + + prefix = "/usr/local"; + + postPhases = "finalPhase"; + } + + // args // + + { + name = name + (if src ? version then "-" + src.version else ""); + + postHook = '' + ensureDir $out/nix-support + echo "$system" > $out/nix-support/system + + # If `src' is the result of a call to `makeSourceTarball', then it + # has a subdirectory containing the actual tarball(s). If there are + # multiple tarballs, just pick the first one. + origSrc=$src + if test -d $src/tarballs; then + src=$(ls $src/tarballs/*.tar.bz2 $src/tarballs/*.tar.gz | sort | head -1) + fi + + if test -e $origSrc/nix-support/hydra-release-name; then + releaseName=$(cat $origSrc/nix-support/hydra-release-name) + fi + + installFlagsArray=(DESTDIR=$TMPDIR/inst) + + # Prefix hackery because of a bug in stdenv (it tries to `mkdir + # $prefix', which doesn't work due to the DESTDIR). + configureFlags="--prefix=$prefix $configureFlags" + dontAddPrefix=1 + prefix=$TMPDIR/inst$prefix + ''; # */ + + + doDist = true; + + distPhase = + '' + ensureDir $out/tarballs + tar cvfj $out/tarballs/''${releaseName:-binary-dist}.tar.bz2 -C $TMPDIR/inst . + ''; + + + finalPhase = + '' + for i in $out/tarballs/*; do + echo "file binary-dist $i" >> $out/nix-support/hydra-build-products + done + + # Propagate the release name of the source tarball. This is + # to get nice package names in channels. + test -n "$releaseName" && (echo "$releaseName" >> $out/nix-support/hydra-release-name) + ''; + + + meta = (if args ? meta then args.meta else {}) // { + description = "Build of a generic binary distribution"; + }; + + } +) diff --git a/pkgs/build-support/release/debian-build.nix b/pkgs/build-support/release/debian-build.nix index d41750733b5..a0b75f9fa8a 100644 --- a/pkgs/build-support/release/debian-build.nix +++ b/pkgs/build-support/release/debian-build.nix @@ -13,7 +13,7 @@ vmTools.runInLinuxImage (stdenv.mkDerivation ( prefix = "/usr"; - phases = "installExtraDebsPhase sysInfoPhase unpackPhase patchPhase configurePhase buildPhase checkPhase installPhase distPhase"; + prePhases = "installExtraDebsPhase sysInfoPhase"; } // removeAttrs args ["vmTools"] // diff --git a/pkgs/build-support/release/default.nix b/pkgs/build-support/release/default.nix index 130fae6e4bb..52ed7d60b49 100644 --- a/pkgs/build-support/release/default.nix +++ b/pkgs/build-support/release/default.nix @@ -4,11 +4,17 @@ with pkgs; rec { - makeSourceTarball = args: import ./make-source-tarball.nix ( + sourceTarball = args: import ./source-tarball.nix ( { inherit autoconf automake libtool; stdenv = stdenvNew; } // args); + makeSourceTarball = sourceTarball; # compatibility + + binaryTarball = args: import ./binary-tarball.nix ( + { inherit stdenv; + } // args); + nixBuild = args: import ./nix-build.nix ( { inherit stdenv; } // args); diff --git a/pkgs/build-support/release/nix-build.nix b/pkgs/build-support/release/nix-build.nix index f9d2351d925..703dc07a6e4 100644 --- a/pkgs/build-support/release/nix-build.nix +++ b/pkgs/build-support/release/nix-build.nix @@ -47,15 +47,6 @@ stdenv.mkDerivation ( src=$(ls $src/tarballs/*.tar.bz2 $src/tarballs/*.tar.gz | sort | head -1) fi - # Hack to compress log files. Prevents (by pointer hiding!) - # unnecessary dependencies. - startLogWrite() { - # Use process substitution to send the FIFO output to both - # stdout and bzip2. - bash -c "tee >(bzip2 > \"$1\".bz2) < \"$2\"" & - logWriterPid=$! - } - # Set GCC flags for coverage analysis, if desired. if test -n "${toString doCoverageAnalysis}"; then export NIX_CFLAGS_COMPILE="-O0 -fprofile-arcs -ftest-coverage $NIX_CFLAGS_COMPILE" diff --git a/pkgs/build-support/release/make-source-tarball.nix b/pkgs/build-support/release/source-tarball.nix similarity index 97% rename from pkgs/build-support/release/make-source-tarball.nix rename to pkgs/build-support/release/source-tarball.nix index 731c2994527..46f94994be3 100644 --- a/pkgs/build-support/release/make-source-tarball.nix +++ b/pkgs/build-support/release/source-tarball.nix @@ -94,7 +94,7 @@ stdenv.mkDerivation ( finalPhase = '' for i in $out/tarballs/*; do - echo "file source-dist $i" >> $out/nix-support/hydra-build-products + echo "file source-dist $i" >> $out/nix-support/hydra-build-products done # Try to figure out the release name.