summaryrefslogtreecommitdiff
path: root/misc/xenofarm.sh
diff options
context:
space:
mode:
authorNiels Möller <nisse@lysator.liu.se>2012-03-04 14:31:46 +0100
committerNiels Möller <nisse@lysator.liu.se>2012-03-04 14:31:46 +0100
commit7c1ce4e2cd551d102a630591df5bb4738c4808d1 (patch)
treedce9731bae458cd3455da08b157508d70ee4d903 /misc/xenofarm.sh
parent91354d9ae40e5a06162f8d5f3ff5021290d8d89c (diff)
downloadnettle-7c1ce4e2cd551d102a630591df5bb4738c4808d1.tar.gz
Initial version of xenofarm script.
Diffstat (limited to 'misc/xenofarm.sh')
-rwxr-xr-xmisc/xenofarm.sh238
1 files changed, 238 insertions, 0 deletions
diff --git a/misc/xenofarm.sh b/misc/xenofarm.sh
new file mode 100755
index 00000000..fb920c11
--- /dev/null
+++ b/misc/xenofarm.sh
@@ -0,0 +1,238 @@
+#! /bin/sh
+
+# Driver the xenofarm test compilation. Used together with
+# nettle-server.pike, source-transform.sh and result-parser.pike in
+# the nettle xenofarm project.
+
+# Loosely based on the xenofarm.sh script in lsh and lyskom-server.
+
+# Copyright 2002, 2003, 2012 Niels Möller
+#
+# 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=
+MAKE=make
+
+while [ $# -gt 0 ]
+do
+ case "$1" in
+ --cfg) shift; cfgargs="$1"; shift;;
+ --make) shift; makeargs="$1"; shift;;
+ --make-program) shift; MAKE="$1"; shift;;
+ *) echo $0: unsupported argument $1 >&2; exit 1;;
+ esac
+done
+
+pfx=`pwd`/pfx
+
+cfgargs="-C --with-include-path=$pfx/include:/usr/local/include --with-lib-path=$pfx/lib:/usr/local/lib --prefix=$pfx $cfgargs"
+
+# Fix PATH for system where the default environment is broken
+
+# We may need /usr/ccs/bin for ar
+if type ar >/dev/null ; then : ; else
+ if [ -x /usr/ccs/bin/ar ] ; then
+ PATH="$PATH:/usr/ccs/bin"
+ fi
+fi
+
+# Export new value
+export PATH
+
+# Are we using GNU make? If not, nettle's dependency tracking won't work.
+cfgdepargs=''
+
+if $MAKE --version 2>/dev/null | grep GNU >/dev/null ; then : ; else
+ cfgdepargs='--disable-dependency-tracking'
+fi
+
+rm -rf r
+mkdir r
+exec > r/shlog.txt 2>&1
+
+BASE=`echo nettle-*.tar.gz | sed 's/.tar.gz$//'`
+VERS=`echo "$BASE" | sed 's/^nettle-//'`
+
+timeecho () {
+ # FIXME: Don't depend on GNU date
+ echo `LC_ALL=C TZ=UTC date '+%Y-%m-%d %H:%M:%S'`: "$@"
+}
+
+log () {
+ echo "$@" >> r/mainlog.txt
+ date >> r/mainlog.txt
+}
+
+logstart () {
+ log "BEGIN $1"
+}
+
+logpass () {
+ log "PASS"
+}
+
+logfail () {
+ log "FAIL"
+}
+
+logwarn () {
+ log "WARN $1"
+}
+
+dotask() {
+ important="$1"
+ task="$2"
+ warnfunc="$3"
+ cmd="$4"
+ var=${5:-status}
+ var_value=`eval echo '${'$var'}'`
+ if test $var_value = good
+ then
+ logstart $task
+ timeecho Begin $task
+ if sh -c "$cmd" > r/${task}log.txt 2>&1
+ then
+ if [ -z "$warnfunc" ]
+ then
+ logpass
+ else
+ $warnfunc
+ fi
+ else
+ timeecho FAIL: $task
+ if [ $important = 1 ]
+ then
+ eval $var=${task}-failed
+ fi
+ logfail
+ fi
+ else
+ echo status $var_value makes it impossible/unnecessary to perform this step \
+ > r/${task}log.txt
+ fi
+}
+
+cfgwarn () {
+ logfile="r/${task}log.txt"
+ warnfile="r/${task}warn.txt"
+ egrep -i 'warning|\(w\)' "$logfile" \
+ > "$warnfile"
+ warnings=`wc -l < $warnfile`
+ if test $warnings -gt 0
+ then
+ logwarn $warnings
+ else
+ rm "$warnfile"
+ logpass
+ fi
+}
+
+makewarn () {
+ logfile="r/${task}log.txt"
+ warnfile="r/${task}warn.txt"
+ # Use sed -e /RX/d to get rid of selected warnings.
+ egrep -i 'warning|\(w\)' "$logfile" \
+ > "$warnfile"
+ warnings=`wc -l < $warnfile`
+ if test $warnings -gt 0
+ then
+ logwarn $warnings
+ else
+ rm "$warnfile"
+ logpass
+ fi
+}
+
+ckprgwarn () {
+ logfile="r/${task}log.txt"
+ warnfile="r/${task}warn.txt"
+ failfile="r/${task}fail.txt"
+
+ egrep -i 'warning|\(w\)|error' "$logfile" \
+ > "$warnfile"
+ warnings=`wc -l < $warnfile`
+ if test $warnings -gt 0
+ then
+ egrep -i 'error' "$warnfile" \
+ > "$failfile"
+ if test `wc -l < $failfile` -gt 0
+ then
+ logfail
+ else
+ rm "$failfile"
+ logwarn $warnings
+ fi
+ else
+ rm "$warnfile"
+ logpass
+ fi
+}
+
+
+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 $cfgargs $cfgdepargs"
+dotask 1 "make" "makewarn" "cd $BASE && $MAKE $makeargs"
+
+#
+# "make check" requirements
+#
+
+dotask 1 "ckprg" "" "cd $BASE && $MAKE check"
+
+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
+fi
+
+# Collect stuff.
+
+timeecho Collecting results
+
+cp $BASE/config.cache r/configcache.txt
+cp $BASE/config.log r/configlog.txt
+cp $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
+
+env > r/environ.txt
+echo $PATH > r/path.txt
+makeinfo --version > r/makeinfo.txt
+type makeinfo >> r/makeinfo.txt 2>&1
+
+$MAKE --version > r/makeversion.txt 2>&1
+type $MAKE >> r/makeversion.txt
+
+ls -lR $pfx > r/pfxcontents.txt
+
+cp buildid.txt r/buildid.txt
+
+(cd r && tar cf - *) > xenofarm_result.tar
+gzip -1 xenofarm_result.tar
+
+exit 0