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 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137
|
#!/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 <chak@acm.org>
# 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."
|