xenofarm.sh 4.41 KB
Newer Older
Niels Möller's avatar
Niels Möller 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
32
33
34
35
36
37
38
39
40
41
42
#! /bin/sh

# Driver the xenofarm test compilation. Used together with
# lsh-server.pike, source-transform.sh and result-parser.pike in
# the lsh xenofarm project.

# Loosely based on the xenofarm.sh script in lyskom-server.

# Copyright 2002, 2003 Niels Mller, Lysator Academic Computer Association 
# 
# This program is free software; you can redistribute it and/or
# modify it under the terms of the GNU General Public License as
# published by the Free Software Foundation; either version 2 of the
# License, or (at your option) any later version.
# 
# This program is distributed in the hope that it will be useful, but
# WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
# General Public License for more details.
# 
# You should have received a copy of the GNU General Public License
# along with this program; if not, write to the Free Software
# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA

cfgargs=
makeargs=
while [ $# -gt 0 ]
do
  case "$1" in
      --cfg)    shift; cfgargs="$1"; shift;;
      --make)   shift; makeargs="$1"; shift;;
      *)        echo $0: unsupported argument $1 >&2; exit 1;;
  esac
done

rm -rf r
mkdir r
exec > r/shlog.txt 2>&1

BASE=`echo lsh-*.tar.gz | sed 's/.tar.gz$//'`
VERS=`echo "$BASE" | sed 's/^lsh-//'`

43
timeecho () {
Niels Möller's avatar
Niels Möller committed
44
    # FIXME: Don't depend on GNU date
45
    echo `LC_ALL=C TZ=UTC date '+%Y-%m-%d %H:%M:%S'`: "$@"
46
47
48
49
50
51
52
}

log () {
    echo "$@" >> r/mainlog.txt
    date >> r/mainlog.txt
}

53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
logstart () {
    log "BEGIN $1"
}

logpass () {
    log "PASS"
}

logfail () {
    log "FAIL"
}

logwarn () {
    log "WARN $1"
}

69
70
71
dotask() {
    important="$1"
    task="$2"
72
73
    warnfunc="$3"
    cmd="$4"
74
75
    if test $status = good
    then
76
	logstart $task
77
78
79
        timeecho Begin $task
        if sh -c "$cmd" > r/${task}log.txt 2>&1
        then
80
81
82
83
84
85
	    if [ -z "$warnfunc" ]
	    then
	        logpass
	    else
	        $warnfunc
	    fi
86
87
88
89
90
91
        else
	    timeecho FAIL: $task
	    if [ $important = 1 ]
	    then
	        status=${task}-failed
	    fi
92
93
	    logfail
	fi
94
95
96
97
98
99
    else
	echo status $status makes it impossible to perform this step \
	    > r/${task}log.txt
    fi
}

100
cfgwarn () {
101
102
    egrep -i 'warning|\(w\)' r/cfglog.txt \
    > r/cfgwarn.txt
103
104
    warnings=`wc -l < r/cfgwarn.txt`
    if test $warnings -gt 0
105
    then
106
107
108
109
	logwarn $warnings
    else
	rm r/cfgwarn.txt
	logpass
110
    fi
111
}
112

113
114
makewarn () {
    # Use sed -e /RX/d to get rid of selected warnings.
115
116
    egrep -i 'warning|\(w\)' r/makelog.txt \
    > r/makewarn.txt
117
118
    warnings=`wc -l < r/makewarn.txt`
    if test $warnings -gt 0
119
    then
120
	logwarn $warnings
121
122
    else
	rm r/makewarn.txt
123
	logpass
124
    fi
125
}
126

127
ckprgwarn () {
128
129
    egrep -i 'warning|\(w\)|error' r/ckprglog.txt \
    > r/ckprgwarn.txt
130
131
    warnings=`wc -l < r/ckprgwarn.txt`
    if test $warnings -gt 0
132
133
134
135
136
    then
	egrep -i 'error' r/ckprgwarn.txt \
	> r/ckprgfail.txt
	if test `wc -l < r/ckprgfail.txt` -gt 0
	then
137
	    logfail
138
139
	else
	    rm r/ckprgfail.txt
140
	    logwarn $warnings
141
142
143
	fi
    else
	rm r/ckprgwarn.txt
144
	logpass
145
    fi
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
}


pfx=`pwd`/pfx

status=good

echo 'FORMAT 2' > r/mainlog.txt

dotask 1 "unzip" "" "gzip -d $BASE.tar.gz"
dotask 1 "unpack" "" "tar xf $BASE.tar"
dotask 1 "cfg" "cfgwarn" "cd $BASE && ./configure -C --prefix=$pfx $cfgargs"
dotask 1 "make" "makewarn" "cd $BASE && make $makeargs"

#
# "make check" requirements
#

164
165
dotask 0 "ckprg" "" "cd $BASE/src && make check"
dotask 0 "ckdist" "" "cd $BASE/src && make distcheck"
166
167
168
169
170
171
dotask 1 "install" "" "cd $BASE && make install"

find pfx -type f -print | sort > r/installedfiles.txt
if test `wc -l < r/installedfiles.txt` -eq 0
then
    rm r/installedfiles.txt
172
173
fi

174
175
176
177
# FIXME: run distcheck.
# FIXME: compare the contents of the distcheck-generated tar file
# with the one we distributed.

178
179
# Collect stuff.

180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
timeecho Collecting results

mv $BASE/config.cache r/configcache.txt
mv $BASE/config.log r/configlog.txt
mv $BASE/src/argp/config.log r/argpconfig.log
mv $BASE/src/nettle/config.log r/nettleconfig.log
mv $BASE/src/sftp/config.log r/sftpconfig.log
mv $BASE/src/spki/config.log r/spkiconfig.log
mv $BASE/config.h r/config-h.txt

find $BASE -name core -print > r/corefiles.txt
if test `wc -l < r/corefiles.txt` -eq 0
then
    rm r/corefiles.txt
fi

196
197
198
199
200
201

env > r/environ.txt
echo $PATH > r/path.txt
makeinfo --version > r/makeinfo.txt
type makeinfo >> r/makeinfo.txt 2>&1

202
mv buildid.txt r/buildid.txt
203
204
205
206
207

(cd r && tar cf - *) > xenofarm_result.tar
gzip -1 xenofarm_result.tar

exit 0