/* 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, lib, stdenv, name ? "binary-tarball", ... }@args: stdenv.mkDerivation ( { # Also run a `make check'. doCheck = true; showBuildStats = true; prefix = "/usr/local"; postPhases = "finalPhase"; } // args // { name = name + (lib.optionalString (src ? version) "-${src.version}"); postHook = '' mkdir -p $out/nix-support echo "$system" > $out/nix-support/system . ${./functions.sh} origSrc=$src src=$(findTarball $src) 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 = '' mkdir -p $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 = (lib.optionalAttrs (args ? meta) args.meta) // { description = "Build of a generic binary distribution"; }; } )