2008-11-24 16:10:06 +01:00
|
|
|
# This function builds and tests an Autoconf-style source tarball.
|
|
|
|
# The result can be installed normally in an environment (e.g., after
|
|
|
|
# making it available through a channel). If `doCoverageAnalysis' is
|
|
|
|
# true, it does an ordinary build from a source tarball, except that
|
|
|
|
# it turns on GCC's coverage analysis feature. It then runs `make
|
|
|
|
# check' and produces a coverage analysis report using `lcov'.
|
|
|
|
|
2010-09-10 14:39:57 +02:00
|
|
|
{ buildOutOfSourceTree ? false
|
|
|
|
, preConfigure ? null
|
|
|
|
, doCoverageAnalysis ? false
|
2008-12-04 16:32:30 +01:00
|
|
|
, lcovFilter ? []
|
2010-05-12 14:22:44 +02:00
|
|
|
, lcovExtraTraceFiles ? []
|
2008-12-04 16:32:30 +01:00
|
|
|
, src, stdenv
|
2009-03-02 14:45:48 +01:00
|
|
|
, name ? if doCoverageAnalysis then "nix-coverage" else "nix-build"
|
2012-02-28 18:10:50 +01:00
|
|
|
, failureHook ? null
|
2012-03-19 04:45:36 +01:00
|
|
|
, prePhases ? []
|
2012-03-19 03:45:52 +01:00
|
|
|
, postPhases ? []
|
2014-02-05 14:11:21 +01:00
|
|
|
, buildInputs ? []
|
2008-12-04 16:32:30 +01:00
|
|
|
, ... } @ args:
|
2008-11-24 16:10:06 +01:00
|
|
|
|
|
|
|
stdenv.mkDerivation (
|
|
|
|
|
|
|
|
{
|
|
|
|
# Also run a `make check'.
|
|
|
|
doCheck = true;
|
|
|
|
|
|
|
|
# When doing coverage analysis, we don't care about the result.
|
|
|
|
dontInstall = doCoverageAnalysis;
|
2012-03-19 17:05:29 +01:00
|
|
|
useTempPrefix = doCoverageAnalysis;
|
2008-11-24 16:10:06 +01:00
|
|
|
|
|
|
|
showBuildStats = true;
|
|
|
|
|
2009-06-17 09:02:59 +02:00
|
|
|
finalPhase =
|
|
|
|
''
|
|
|
|
# Propagate the release name of the source tarball. This is
|
|
|
|
# to get nice package names in channels.
|
|
|
|
if test -e $origSrc/nix-support/hydra-release-name; then
|
|
|
|
cp $origSrc/nix-support/hydra-release-name $out/nix-support/hydra-release-name
|
|
|
|
fi
|
|
|
|
'';
|
2010-12-22 15:57:18 +01:00
|
|
|
|
2012-02-28 18:10:50 +01:00
|
|
|
failureHook = (stdenv.lib.optionalString (failureHook != null) failureHook) +
|
|
|
|
''
|
2010-12-22 15:57:18 +01:00
|
|
|
if test -n "$succeedOnFailure"; then
|
|
|
|
if test -n "$keepBuildDirectory"; then
|
|
|
|
KEEPBUILDDIR="$out/`basename $TMPDIR`"
|
|
|
|
header "Copying build directory to $KEEPBUILDDIR"
|
2012-01-18 21:16:00 +01:00
|
|
|
mkdir -p $KEEPBUILDDIR
|
2013-04-18 12:18:39 +02:00
|
|
|
cp -R "$TMPDIR/"* $KEEPBUILDDIR
|
2013-02-13 13:53:41 +01:00
|
|
|
stopNest
|
2010-12-22 15:57:18 +01:00
|
|
|
fi
|
|
|
|
fi
|
|
|
|
'';
|
2008-11-24 16:10:06 +01:00
|
|
|
}
|
|
|
|
|
2013-02-13 13:53:41 +01:00
|
|
|
// args //
|
2008-11-24 16:10:06 +01:00
|
|
|
|
|
|
|
{
|
2009-03-02 15:33:33 +01:00
|
|
|
name = name + (if src ? version then "-" + src.version else "");
|
2013-02-13 13:53:41 +01:00
|
|
|
|
2008-11-24 16:10:06 +01:00
|
|
|
postHook = ''
|
2012-07-13 20:58:39 +02:00
|
|
|
. ${./functions.sh}
|
2009-03-02 14:45:48 +01:00
|
|
|
origSrc=$src
|
2012-07-13 20:58:39 +02:00
|
|
|
src=$(findTarballs $src | head -1)
|
2013-04-18 12:18:39 +02:00
|
|
|
'';
|
2008-11-24 16:10:06 +01:00
|
|
|
|
2012-03-19 04:45:36 +01:00
|
|
|
initPhase = ''
|
|
|
|
mkdir -p $out/nix-support
|
|
|
|
echo "$system" > $out/nix-support/system
|
|
|
|
|
2012-03-19 17:05:29 +01:00
|
|
|
if [ -z "${toString doCoverageAnalysis}" ]; then
|
2013-02-13 13:53:41 +01:00
|
|
|
for i in $outputs; do
|
|
|
|
if [ "$i" = out ]; then j=none; else j="$i"; fi
|
2013-02-13 16:30:15 +01:00
|
|
|
mkdir -p ''${!i}/nix-support
|
|
|
|
echo "nix-build $j ''${!i}" >> ''${!i}/nix-support/hydra-build-products
|
2013-02-13 13:53:41 +01:00
|
|
|
done
|
2012-03-19 04:45:36 +01:00
|
|
|
fi
|
|
|
|
'';
|
|
|
|
|
|
|
|
prePhases = ["initPhase"] ++ prePhases;
|
2008-11-24 16:10:06 +01:00
|
|
|
|
2014-03-03 13:39:30 +01:00
|
|
|
buildInputs = buildInputs ++ stdenv.lib.optional doCoverageAnalysis args.makeGCOVReport;
|
2008-11-24 16:10:06 +01:00
|
|
|
|
2008-12-04 16:32:30 +01:00
|
|
|
lcovFilter = ["/nix/store/*"] ++ lcovFilter;
|
2009-03-02 14:45:48 +01:00
|
|
|
|
2010-05-12 14:22:44 +02:00
|
|
|
inherit lcovExtraTraceFiles;
|
2009-03-02 14:45:48 +01:00
|
|
|
|
2014-02-05 14:11:21 +01:00
|
|
|
postPhases = postPhases ++ ["finalPhase"];
|
2012-03-19 03:45:52 +01:00
|
|
|
|
2008-11-26 15:34:29 +01:00
|
|
|
meta = (if args ? meta then args.meta else {}) // {
|
2013-03-01 12:50:29 +01:00
|
|
|
description = if doCoverageAnalysis then "Coverage analysis" else "Nix package for ${stdenv.system}";
|
2008-11-24 16:10:06 +01:00
|
|
|
};
|
|
|
|
|
|
|
|
}
|
2010-09-10 14:39:57 +02:00
|
|
|
|
|
|
|
//
|
|
|
|
|
|
|
|
(if buildOutOfSourceTree
|
|
|
|
then {
|
|
|
|
preConfigure =
|
|
|
|
# Build out of source tree and make the source tree read-only. This
|
|
|
|
# helps catch violations of the GNU Coding Standards (info
|
|
|
|
# "(standards) Configuration"), like `make distcheck' does.
|
|
|
|
'' mkdir "../build"
|
|
|
|
cd "../build"
|
|
|
|
configureScript="../$sourceRoot/configure"
|
|
|
|
chmod -R a-w "../$sourceRoot"
|
|
|
|
|
|
|
|
echo "building out of source tree, from \`$PWD'..."
|
|
|
|
|
|
|
|
${if preConfigure != null then preConfigure else ""}
|
|
|
|
'';
|
|
|
|
}
|
|
|
|
else {})
|
2008-11-24 16:10:06 +01:00
|
|
|
)
|