nixpkgs/strategoxt-dist/build-from-svn.sh

86 lines
1.7 KiB
Bash
Raw Normal View History

A first attempt at generic release management. The goal is to fully automate the building of distributions and their release for distribution through a web-site, ftp directory, etc. Inspired by nix-dist, but more generic in order to deal with StrategoXT and related packages. The assumptions are the following: - package source is a subversion repository - the package is under autotool configuration (at least it has a configure.in with an AC_INIT) - standard autotools build interface: - bootstrap; configure; make install; make check; make dist - optionally the release status can be indicated by a status="..." definition in configure.in Creation of distributions is a two-step process: urls-to-nix.sh # nix expressions for most recent commits build+upload.sh # instantiate the expressions svn-to-nix.sh Generates nix expression for head revision of the package; revision number, package name, and version are obtained from the source and do not have to be declared. urls-to-nix.sh Contains a list of URLs to which svn-to-nix.sh is applied. build+upload.sh Builds the packages and creates distributions in a www directory. Including the log of the build process (buildfarm) and files such as NEWS and README (for release management). (upload part of the script is currently turned off) do-it.nix Top nix expression; collects pointers to required packages (e.g., stdenv, autotools, aterms, ...) and binds them to the parameters of the source-dist.nix packages. package-source-dist.nix Generic Nix expression for a package parameterized with version info from svn and dependency info from do-it.nix. package-dist.nix Generated; just imports package-version-rev.nix Generated; instantiates package-source-dist.nix with version, name, packagename, rev. build-from-svn.sh Generic build script; obtains configuration flags from with... and enable... attributes of the Nix expression. Creates logs of the various parts of the build process. Creates distribution Generalizations: - Currently some information about a package resides in this directory, e.g., the generic Nix expression for a package, and the composition of the overall do-it.nix This information should also be obtained from the source tree. - Upload facility lacking. svn path=/nixpkgs/trunk/; revision=605
2003-12-30 21:14:48 +00:00
#! /bin/sh -v
buildinputs="$make $automake $autoconf $libtool $which $withsdf"
. $stdenv/setup || exit 1
echo "pwd = `pwd`"
echo "PATH = $PATH"
# configuration flags
config_flags=""
for pack in `env | grep with | sed "s/^with\([A-Za-z]*\)=.*/\1/"`
do
config_flags="${config_flags} --with-${pack}=$(printenv with${pack})"
done
for feat in `env | grep enable | sed "s/^enable\([A-Za-z]*\)=.*/\1/"`
do
config_flags="${config_flags} --enable-${feat}=$(printenv enable${feat})"
done
echo "config_flags : $config_flags"
# keep a log
distdir=$out/www/strategoxt/$version-$rev
logdir=$distdir/log
mkdir -p $distdir || exit 1
mkdir -p $logdir || exit 1
# get the source
cp -r $src src || exit 1
chmod -R +w src
cd src || exit 1
echo ${rev} > svn-revision
# build it
GO="true"
./bootstrap 2>&1 | tee $logdir/bootstrap.txt
./configure --prefix=$out ${config_flags} 2>&1 | tee $logdir/configure.txt
if ! make install 2>&1 | tee $logdir/install.txt
then
GO="false"
fi
if test $GO = "true"
then
if ! make check 2>&1 | tee $logdir/check.txt
then
GO="false"
fi
fi
# make a distribution
if test $GO = "true"
then
if make dist 2>&1 | tee $logdir/dist.txt
then
if test "x${status}" = "xrelease"
then
cp ${packagename}-${version}.tar.gz $distdir || exit 1
else
tar zxf ${packagename}-${version}.tar.gz
mv ${packagename}-${version} ${name}
tar zcf ${name}.tar.gz ${name}
cp ${name}.tar.gz $distdir || exit 1
fi
fi
fi
# distribute documentation data
if test -f news/NEWS-$version
then
cp news/NEWS-$version $distdir || exit 1
fi
cp NEWS ChangeLog AUTHORS README COPYING $distdir || exit 1