1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
|
# 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'.
{ officialRelease ? false
, buildInputs ? []
, src, stdenv, autoconf, automake, libtool
, ...} @ args:
let
versionSuffix =
if officialRelease
then ""
else if src ? rev then "pre${toString src.rev}" else "";
in
stdenv.mkDerivation (
# First, attributes that can be overriden by the caller (via args):
{
name = "source-tarball";
# 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;
phases = "unpackPhase patchPhase autoconfPhase configurePhase buildPhase installPhase checkPhase distPhase";
}
# Then, the caller-supplied attributes.
// args //
# And finally, our own stuff.
{
src = src.path;
buildInputs = buildInputs ++ [autoconf automake libtool];
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 "";
# Autoconfiscate the sources.
autoconfPhase = ''
export VERSION_SUFFIX=${versionSuffix}
eval "$preAutoconf"
if test -f ./bootstrap; then ./bootstrap
elif test -f ./bootstrap.sh; then ./bootstrap.sh
elif test -f ./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"
'';
# Cause distPhase to copy tar.bz2 in addition to tar.gz.
tarballs = "*.tar.gz *.tar.bz2";
postDist = ''
shopt -s nullglob
for i in $out/tarballs/*; do
echo "file source-dist $i" >> $out/nix-support/hydra-build-products
done
# 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)
''; # */
passthru = {inherit src;};
meta = {
description = "Build of a source distribution from a checkout";
};
}
)
|