#!/bin/sh # *** Does this actually work with sh, or does it have to be bash? *** # Purpose: Builds rpm binaries out of CVS # Author : Manuel M. T. Chakravarty # Created: 26 April 2000 # # This file is subject to the same free software license as GHC. # Usage # ----- # # This script checks the given version of an fptools component out of CVS and # builds a binary rpm package from it. By default it builds the CVS head from # anonymous CVS. In the case of anonymous CVS, this script requires that `cvs # login' was already executed. # # The current version of this script handles ghc only, but in fact it is # planned to extend it to cover the other components in fptools. # # Options: # # -d REPOSITORY -- Value passed to CVS's -d option # -r TAG -- build the revision identified by the given CVS tag # -D DATE -- build the revision identified by the given CVS date # # (if there is more than one of the options -r and -D, the last one takes # effect) # Requires: autoconf, cvs, GNU tar, gnuopt # TODO # ---- # # * cover other fptools # * it would be convenient to be able to specify an alternative .spec file # (instead of using that in the repository) # Default values # -------------- # Use anonymous CVS by default # CVS_REPOSITORY=:pserver:anoncvs@glass.cse.ogi.edu:/cvs # We build the CVS head by default (a date of `tomorrow' guarantees to catch # the most recent check ins in the presence of clock skews - `now' wouldn't do # that) # CVS_TAG="-D tomorrow" # This is where we let rpm do the actual build # BUILD_DIR=/tmp/cvs-build-$$ # Works only for i386 for the moment... # !!!IMPROVE THIS ARCH=i386 START_DIR=`pwd` # Command line option processing # GETOPT_OUTOUT=`getopt -o d:r:D: -n $0 -- "$@"` if [ $? != 0 ]; then echo "Terminating..." >&2 exit 1 fi eval set -- "$GETOPT_OUTPUT" while [ $# -gt 0 ]; do case "$1" in -d) CVS_REPOSITORY=$2; shift 2;; -r) CVS_TAG="-r $2"; shift 2;; -D) CVS_TAG="-D $2"; shift 2;; --) shift; break;; *) echo "Internal error!" ; exit 1 ;; esac done if [ $# != 0 ]; then echo "Too many arguments..." >&2 exit 1 fi # Check the sources out of CVS # echo "*** Exporting sources from CVS... (will build in $BUILD_DIR)" mkdir -p $BUILD_DIR || exit 1 cd $BUILD_DIR cvs -d $CVS_REPOSITORY export $CVS_TAG fpconfig || exit 1 cd fptools cvs -d $CVS_REPOSITORY export $CVS_TAG ghc || exit 1 cvs -d $CVS_REPOSITORY export $CVS_TAG hslibs || exit 1 VERSION=`sed -e 's/.*\([0-9]\)\.\([0-9]*\).*/\1.\2/' ghc/VERSION` echo "*** ...got ghc $VERSION" # Configure the tree (will produce the .spec file) # echo "*** Configuring sources..." autoconf cd ghc; autoconf; cd .. ./configure || exit 1 # Populate the rpm build tree # echo "*** Setting up the rpm build tree..." mkdir $BUILD_DIR/SPEC mkdir $BUILD_DIR/SOURCES mkdir $BUILD_DIR/BUILD mkdir $BUILD_DIR/RPMS mkdir $BUILD_DIR/RPMS/$ARCH mkdir $BUILD_DIR/SRPMS cp ghc/ghc.spec $BUILD_DIR/SPEC/ghc-${VERSION}.spec cd $BUILD_DIR tar -cz -f $BUILD_DIR/SOURCES/ghc-$VERSION-src.tar.gz fptools || exit 1 rm -rf $BUILD_DIR/fptools # Build packages with rpm # echo "*** Building packages..." rpm --define "_topdir $BUILD_DIR" -ba SPEC/ghc-${VERSION}.spec || exit 1 echo "*** ...made the packages" # Cleaning up # echo "*** Cleaning up..." cd $START_DIR cp $BUILD_DIR/SOURCES/ghc-$VERSION-src.tar.gz . cp $BUILD_DIR/RPMS/$ARCH/ghc* . cp $BUILD_DIR/SRPMS/ghc* . rm -rf $BUILD_DIR echo "*** ...done."