2008-11-24 16:10:06 +01:00
|
|
|
# This function converts an un-Autoconfed source tarball (typically a
|
|
|
|
# checkout from a Subversion or CVS repository) into a source tarball
|
|
|
|
# by running `autoreconf', `configure' and `make dist'.
|
|
|
|
|
2008-11-25 16:53:45 +01:00
|
|
|
{ officialRelease ? false
|
|
|
|
, buildInputs ? []
|
2009-03-02 14:45:48 +01:00
|
|
|
, name ? "source-tarball"
|
|
|
|
, version ? "0"
|
2008-11-25 16:53:45 +01:00
|
|
|
, src, stdenv, autoconf, automake, libtool
|
2008-12-04 16:32:30 +01:00
|
|
|
, ... } @ args:
|
2008-11-25 16:53:45 +01:00
|
|
|
|
|
|
|
let
|
|
|
|
|
|
|
|
versionSuffix =
|
|
|
|
if officialRelease
|
|
|
|
then ""
|
2008-11-25 19:08:49 +01:00
|
|
|
else if src ? rev then "pre${toString src.rev}" else "";
|
2008-11-25 16:53:45 +01:00
|
|
|
|
2009-12-04 15:56:37 +01:00
|
|
|
# By default, provide all the GNU Build System as input.
|
|
|
|
bootstrapBuildInputs =
|
|
|
|
if (args ? bootstrapBuildInputs)
|
|
|
|
then args.bootstrapBuildInputs
|
|
|
|
else [ autoconf automake libtool ];
|
|
|
|
|
2008-11-25 16:53:45 +01:00
|
|
|
in
|
2008-11-24 16:10:06 +01:00
|
|
|
|
|
|
|
stdenv.mkDerivation (
|
|
|
|
|
|
|
|
# First, attributes that can be overriden by the caller (via args):
|
|
|
|
{
|
|
|
|
# By default, only configure and build a source distribution.
|
|
|
|
# Some packages can only build a distribution after a general
|
|
|
|
# `make' (or even `make install').
|
|
|
|
dontBuild = true;
|
|
|
|
dontInstall = true;
|
|
|
|
doDist = true;
|
|
|
|
|
|
|
|
# If we do install, install to a dummy location.
|
|
|
|
useTempPrefix = true;
|
|
|
|
|
|
|
|
showBuildStats = true;
|
|
|
|
|
2008-11-28 17:12:50 +01:00
|
|
|
preConfigurePhases = "autoconfPhase";
|
|
|
|
postPhases = "finalPhase";
|
2009-11-19 14:57:57 +01:00
|
|
|
|
|
|
|
# Autoconfiscate the sources.
|
|
|
|
autoconfPhase = ''
|
|
|
|
export VERSION=${version}
|
|
|
|
export VERSION_SUFFIX=${versionSuffix}
|
|
|
|
|
|
|
|
# `svn-revision' is set for backwards compatibility with the old
|
|
|
|
# Nix buildfarm. (Stratego/XT's autoxt uses it. We should
|
|
|
|
# update it eventually.)
|
|
|
|
echo ${versionSuffix} | sed -e s/pre// > svn-revision
|
|
|
|
|
|
|
|
eval "$preAutoconf"
|
|
|
|
|
|
|
|
if test -x ./bootstrap; then ./bootstrap
|
|
|
|
elif test -x ./bootstrap.sh; then ./bootstrap.sh
|
|
|
|
elif test -x ./autogen.sh; then ./autogen.sh
|
|
|
|
elif test -x ./autogen ; then ./autogen
|
|
|
|
elif test -x ./reconf; then ./reconf
|
|
|
|
elif test -f ./configure.in || test -f ./configure.ac; then
|
|
|
|
autoreconf --install --force --verbose
|
|
|
|
else
|
|
|
|
echo "No bootstrap, bootstrap.sh, configure.in or configure.ac. Assuming this is not an GNU Autotools package."
|
|
|
|
fi
|
|
|
|
|
|
|
|
eval "$postAutoconf"
|
|
|
|
'';
|
2011-01-05 08:31:29 +01:00
|
|
|
|
|
|
|
failureHook = ''
|
|
|
|
if test -n "$succeedOnFailure"; then
|
|
|
|
if test -n "$keepBuildDirectory"; then
|
|
|
|
KEEPBUILDDIR="$out/`basename $TMPDIR`"
|
|
|
|
header "Copying build directory to $KEEPBUILDDIR"
|
|
|
|
ensureDir $KEEPBUILDDIR
|
|
|
|
cp -vR $TMPDIR/* $KEEPBUILDDIR
|
|
|
|
stopNest
|
|
|
|
fi
|
|
|
|
fi
|
|
|
|
'';
|
2008-11-24 16:10:06 +01:00
|
|
|
}
|
|
|
|
|
|
|
|
# Then, the caller-supplied attributes.
|
|
|
|
// args //
|
|
|
|
|
|
|
|
# And finally, our own stuff.
|
|
|
|
{
|
2009-03-02 14:45:48 +01:00
|
|
|
name = name + "-" + version + versionSuffix;
|
|
|
|
|
2010-05-25 10:24:50 +02:00
|
|
|
buildInputs = buildInputs ++ bootstrapBuildInputs;
|
|
|
|
|
2008-11-24 16:10:06 +01:00
|
|
|
postHook = ''
|
|
|
|
ensureDir $out/nix-support
|
|
|
|
'';
|
|
|
|
|
|
|
|
postUnpack = ''
|
|
|
|
# Set all source files to the current date. This is because Nix
|
|
|
|
# resets the timestamp on all files to 0 (1/1/1970), which some
|
|
|
|
# people don't like (in particular GNU tar prints harmless but
|
|
|
|
# frightening warnings about it).
|
|
|
|
touch now
|
|
|
|
touch -d "1970-01-01 00:00:00 UTC" then
|
|
|
|
find $sourceRoot ! -newer then -print0 | xargs -0r touch --reference now
|
|
|
|
eval "$nextPostUnpack"
|
|
|
|
'';
|
|
|
|
|
|
|
|
nextPostUnpack = if args ? postUnpack then args.postUnpack else "";
|
|
|
|
|
|
|
|
# Cause distPhase to copy tar.bz2 in addition to tar.gz.
|
2009-11-18 15:12:39 +01:00
|
|
|
tarballs = "*.tar.gz *.tar.bz2 *.tar.xz";
|
2008-11-24 16:10:06 +01:00
|
|
|
|
2008-11-28 17:12:50 +01:00
|
|
|
finalPhase = ''
|
2009-11-18 15:12:39 +01:00
|
|
|
for i in "$out/tarballs/"*; do
|
2009-03-26 15:11:59 +01:00
|
|
|
echo "file source-dist $i" >> $out/nix-support/hydra-build-products
|
2008-11-24 16:10:06 +01:00
|
|
|
done
|
2008-11-25 17:12:36 +01:00
|
|
|
|
|
|
|
# Try to figure out the release name.
|
|
|
|
releaseName=$( (cd $out/tarballs && ls) | head -n 1 | sed -e 's^\.[a-z].*^^')
|
|
|
|
test -n "$releaseName" && (echo "$releaseName" >> $out/nix-support/hydra-release-name)
|
2009-11-18 15:12:39 +01:00
|
|
|
'';
|
2008-11-24 16:10:06 +01:00
|
|
|
|
2009-03-02 14:45:48 +01:00
|
|
|
passthru = {
|
|
|
|
inherit src;
|
|
|
|
version = version + versionSuffix;
|
|
|
|
};
|
2008-11-24 16:10:06 +01:00
|
|
|
|
2008-11-26 15:34:29 +01:00
|
|
|
meta = (if args ? meta then args.meta else {}) // {
|
2008-11-24 16:10:06 +01:00
|
|
|
description = "Build of a source distribution from a checkout";
|
2009-03-30 15:21:00 +02:00
|
|
|
|
|
|
|
# Tarball builds are generally important, so give them a high
|
|
|
|
# default priority.
|
|
|
|
schedulingPriority = "200";
|
2008-11-24 16:10:06 +01:00
|
|
|
};
|
|
|
|
}
|
|
|
|
|
|
|
|
)
|