cvs-build 3.37 KB
Newer Older
chak's avatar
chak committed
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
#!/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

chak's avatar
chak committed
32
33
34
35
36
37
38
# TODO
# ----
#
# * cover other fptools
# * it would be convenient to be able to specify an alternative .spec file 
#   (instead of using that in the repository)

chak's avatar
chak committed
39
40
41
42
43
44
45
# Default values
# --------------

# Use anonymous CVS by default
#
CVS_REPOSITORY=:pserver:anoncvs@glass.cse.ogi.edu:/cvs

chak's avatar
chak committed
46
47
48
# 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)
chak's avatar
chak committed
49
#
chak's avatar
chak committed
50
CVS_TAG="-D tomorrow"
chak's avatar
chak committed
51
52
53
54
55

# This is where we let rpm do the actual build
#
BUILD_DIR=/tmp/cvs-build-$$

chak's avatar
chak committed
56
57
58
59
# Works only for i386 for the moment...
# !!!IMPROVE THIS
ARCH=i386

chak's avatar
chak committed
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
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
#
chak's avatar
chak committed
88
echo "*** Exporting sources from CVS... (will build in $BUILD_DIR)"
chak's avatar
chak committed
89
90
mkdir -p $BUILD_DIR || exit 1
cd $BUILD_DIR
chak's avatar
chak committed
91
cvs -d $CVS_REPOSITORY export $CVS_TAG fpconfig || exit 1
chak's avatar
chak committed
92
cd fptools
chak's avatar
chak committed
93
94
cvs -d $CVS_REPOSITORY export $CVS_TAG ghc    || exit 1
cvs -d $CVS_REPOSITORY export $CVS_TAG hslibs || exit 1
chak's avatar
chak committed
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113

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
chak's avatar
chak committed
114
mkdir $BUILD_DIR/RPMS/$ARCH
chak's avatar
chak committed
115
116
117
118
mkdir $BUILD_DIR/SRPMS

cp ghc/ghc.spec $BUILD_DIR/SPEC/ghc-${VERSION}.spec
cd $BUILD_DIR
chak's avatar
chak committed
119
tar -cz -f $BUILD_DIR/SOURCES/ghc-$VERSION-src.tar.gz fptools || exit 1
chak's avatar
chak committed
120
121
122
123
124
rm -rf $BUILD_DIR/fptools

# Build packages with rpm
#
echo "*** Building packages..."
chak's avatar
chak committed
125
rpm --define "_topdir $BUILD_DIR" -ba SPEC/ghc-${VERSION}.spec || exit 1
chak's avatar
chak committed
126
127
128
129
130
131
132
echo "*** ...made the packages"

# Cleaning up
#
echo "*** Cleaning up..."
cd $START_DIR
cp $BUILD_DIR/SOURCES/ghc-$VERSION-src.tar.gz .
chak's avatar
chak committed
133
cp $BUILD_DIR/RPMS/$ARCH/ghc* .
chak's avatar
chak committed
134
135
136
137
cp $BUILD_DIR/SRPMS/ghc* .
rm -rf $BUILD_DIR

echo "*** ...done."