From 91aafbcae4b10adc698d355514ecb2b0b1ce1382 Mon Sep 17 00:00:00 2001 From: Eelco Dolstra Date: Fri, 2 Jan 2004 16:39:35 +0000 Subject: [PATCH] * Automatically build and upload RPMs. Building an RPM is not a pure Nix action, but we use Nix to do it anyway. svn path=/nixpkgs/trunk/; revision=610 --- nix-dist/build+upload.sh | 9 +++++++-- nix-dist/do-it.nix | 8 +++++++- nix-dist/nix-rpm-build.nix | 16 ++++++++++++++++ nix-dist/nix-rpm-build.sh | 29 +++++++++++++++++++++++++++++ 4 files changed, 59 insertions(+), 3 deletions(-) create mode 100644 nix-dist/nix-rpm-build.nix create mode 100755 nix-dist/nix-rpm-build.sh diff --git a/nix-dist/build+upload.sh b/nix-dist/build+upload.sh index 22592ca570a..6f8cf7c910d 100755 --- a/nix-dist/build+upload.sh +++ b/nix-dist/build+upload.sh @@ -15,9 +15,9 @@ if ! storeexprs=($(nix-instantiate -vvv do-it.nix)); then exit 1; fi srcexpr=${storeexprs[0]} testexpr=${storeexprs[1]} +rpmexpr=${storeexprs[2]} if ! nix-store -vvvv -r "$srcexpr" > /dev/null; then exit 1; fi - if ! outpath=$(nix-store -qn "$srcexpr"); then exit 1; fi uploader="http://losser.st-lab.cs.uu.nl/~eelco/cgi-bin/upload.pl/" @@ -26,4 +26,9 @@ curl --silent -T "$outpath/manual.html" "$uploader" || exit 1 curl --silent -T "$outpath/style.css" "$uploader" || exit 1 curl --silent -T "$outpath"/nix-*.tar.bz2 "$uploader" || exit 1 -if ! nix-store -vvvv -r "$testexpr" > /dev/null; then exit 1; fi +#if ! nix-store -vvvv -r "$testexpr" > /dev/null; then exit 1; fi + +if ! nix-store -vvvv -r "$rpmexpr" > /dev/null; then exit 1; fi +if ! rpmpath=$(nix-store -qn "$rpmexpr"); then exit 1; fi + +curl --silent -T "$rpmpath"/nix-*.rpm "$uploader" || exit 1 diff --git a/nix-dist/do-it.nix b/nix-dist/do-it.nix index 81f04169bc9..0598d02cedc 100644 --- a/nix-dist/do-it.nix +++ b/nix-dist/do-it.nix @@ -22,5 +22,11 @@ let { src = sourcedist; }; - body = [sourcedist testbuild]; + rpmbuild = (import ./nix-rpm-build.nix) { + stdenv = stdenv; + getopt = pkgs.getopt; + src = sourcedist; + }; + + body = [sourcedist testbuild rpmbuild]; } diff --git a/nix-dist/nix-rpm-build.nix b/nix-dist/nix-rpm-build.nix new file mode 100644 index 00000000000..91af0c90620 --- /dev/null +++ b/nix-dist/nix-rpm-build.nix @@ -0,0 +1,16 @@ +{stdenv, getopt, src}: + +derivation { + name = "nix-rpm-build"; + system = stdenv.system; + + builder = ./nix-rpm-build.sh; + src = src; + + stdenv = stdenv; + getopt = getopt; # required by sdf2table + + # Perhaps it's possible to build RPMs in a pure way? Probably not, + # since RPM needs its database to determine dependencies. + rpm = "/bin/rpm"; +} diff --git a/nix-dist/nix-rpm-build.sh b/nix-dist/nix-rpm-build.sh new file mode 100755 index 00000000000..7f1c54cdbc2 --- /dev/null +++ b/nix-dist/nix-rpm-build.sh @@ -0,0 +1,29 @@ +#! /bin/sh + +buildinputs="$getopt" +. $stdenv/setup || exit 1 + +# Set up a RPM macros file. We have to use ~/.rpmmacros (`--rcfile' +# doesn't seem to work properly), so point HOME at the current +# directory. +export HOME=`pwd` +rpmmacros=$HOME/.rpmmacros + +rpmdir=`pwd`/rpm + +# Set up the directory structure expected by RPM. +mkdir $rpmdir || exit 1 +mkdir $rpmdir/BUILD || exit 1 +mkdir $rpmdir/SOURCE || exit 1 +mkdir $rpmdir/SPECS || exit 1 +mkdir $rpmdir/RPMS || exit 1 +mkdir $rpmdir/SRPMS || exit 1 + +echo "%_topdir $rpmdir" > $rpmmacros + +# Do the build. +$rpm -ta $src/*.tar.gz || exit 1 + +# Copy the resulting RPMs. +mkdir $out || exit 1 +cp -p $rpmdir/RPMS/*/* $out || exit 1