summaryrefslogtreecommitdiff
path: root/distrib/cvs-build
blob: 760f224671993946f68520cf3318dedacd6ce96a (plain)
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."