xenofarm.sh 4.38 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
44
45
46
47
48
49
50
51
timeecho () {
    echo `TZ=UTC date '+%Y-%m-%d %H:%M:%S'`: "$@"
}

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

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

logpass () {
    log "PASS"
}

logfail () {
    log "FAIL"
}

logwarn () {
    log "WARN $1"
}

68
69
70
dotask() {
    important="$1"
    task="$2"
71
72
    warnfunc="$3"
    cmd="$4"
73
74
    if test $status = good
    then
75
	logstart $task
76
77
78
79
        timeecho Begin $task
        if sh -c "$cmd" > r/${task}log.txt 2>&1
        then
	    touch r/$task.pass
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
164
165
166
167
168
169
170
171
}


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
#

dotask 0 "ckprg" "cd $BASE/src && make check"
dotask 0 "ckdist" "cd $BASE/src && make distcheck"
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