mirror of
https://github.com/curl/curl.git
synced 2024-11-21 01:16:58 +08:00
3de511b248
directory name and build/run/test curl in there instead of trying to update from CVS. Using this approach, this script can be used to test daily tarballs etc.
258 lines
5.5 KiB
Bash
Executable File
258 lines
5.5 KiB
Bash
Executable File
#!/bin/sh
|
|
|
|
###########################
|
|
# What is This Script?
|
|
###########################
|
|
|
|
# testcurl.sh is the master script to use for automatic testing of CVS-curl.
|
|
# This is written for the purpose of being run from a crontab job or similar
|
|
# at a regular interval. The output will be suitable to be mailed automaticly
|
|
# to "curl-autocompile@haxx.se" to be dealt with automaticly. The most
|
|
# current build status (with a resonable backlog) will be published on the
|
|
# curl site, at http://curl.haxx.se/auto/
|
|
|
|
# USAGE:
|
|
# testcurl.sh [curl-daily-name] > output
|
|
|
|
# Updated:
|
|
# v1.1 6-Nov-03 - to take an optional parameter, the name of a daily-build
|
|
# directory. If present, build from that directory, otherwise
|
|
# perform a normal CVS build.
|
|
|
|
# version of this script
|
|
version=1.1
|
|
fixed=0
|
|
|
|
# Determine if we're running from CVS or a canned copy of curl
|
|
if [ "$#" -ge "1" -a "$1" ]; then
|
|
CURLDIR=$1
|
|
CVS=0
|
|
else
|
|
CURLDIR="curl"
|
|
CVS=1
|
|
fi
|
|
|
|
LANG="C"
|
|
|
|
export LANG
|
|
|
|
die(){
|
|
echo "testcurl: ENDING HERE"
|
|
exit 1
|
|
}
|
|
|
|
if [ -f setup ]; then
|
|
. "./setup"
|
|
infixed="$fixed"
|
|
else
|
|
infixed=0 # so that "additional args to configure" works properly first time...
|
|
fi
|
|
|
|
if [ -z "$name" ]; then
|
|
echo "please enter your name"
|
|
read name
|
|
fixed="1"
|
|
fi
|
|
|
|
if [ -z "$email" ]; then
|
|
echo "please enter your contact email address"
|
|
read email
|
|
fixed="2"
|
|
fi
|
|
|
|
if [ -z "$desc" ]; then
|
|
echo "please enter a one line system desrciption"
|
|
read desc
|
|
fixed="3"
|
|
fi
|
|
|
|
if [ -z "$confopts" ]; then
|
|
if [ $infixed -lt 4 ]; then
|
|
echo "please enter your additional arguments to configure"
|
|
echo "examples: --with-ssl --enable-debug --enable-ipv6 --with-krb4"
|
|
read confopts
|
|
fixed="4"
|
|
fi
|
|
fi
|
|
|
|
|
|
if [ "$fixed" -gt "0" ]; then
|
|
echo "name='$name'" > setup
|
|
echo "email='$email'" >> setup
|
|
echo "desc='$desc'" >> setup
|
|
echo "confopts='$confopts'" >> setup
|
|
echo "fixed='$fixed'" >> setup
|
|
fi
|
|
|
|
echo "testcurl: STARTING HERE"
|
|
echo "testcurl: NAME = $name"
|
|
echo "testcurl: EMAIL = $email"
|
|
echo "testcurl: DESC = $desc"
|
|
echo "testcurl: CONFOPTS = $confopts"
|
|
echo "testcurl: version = $version"
|
|
echo "testcurl: date = `date -u`"
|
|
|
|
# Make $pwd to become the path without newline. We'll use that in order to cut
|
|
# off that path from all possible logs and error messages etc.
|
|
ipwd=`pwd`
|
|
pwd=`echo $ipwd | sed -e 's/$//g'`
|
|
|
|
if [ -d "$CURLDIR" ]; then
|
|
if [ $CVS -eq 1 -a -d $CURLDIR/CVS ]; then
|
|
echo "testcurl: curl is verified to be a fine source dir"
|
|
elif [ $CVS -eq 0 -a -f $CURLDIR/testcurl.sh ]; then
|
|
echo "testcurl: curl is verified to be a fine daily source dir"
|
|
else
|
|
echo "testcurl: curl is not a daily source dir or checked out from CVS!"
|
|
die
|
|
fi
|
|
fi
|
|
build="build-$$"
|
|
|
|
# remove any previous left-overs
|
|
rm -rf build-*
|
|
|
|
# create a dir to build in
|
|
mkdir $build
|
|
|
|
if [ -d $build ]; then
|
|
echo "testcurl: build dir $build was created fine"
|
|
else
|
|
echo "testcurl: failed to create dir $build"
|
|
die
|
|
fi
|
|
|
|
# get in the curl source tree root
|
|
cd $CURLDIR
|
|
|
|
# Do the CVS thing, or not...
|
|
if [ $CVS -eq 1 ]; then
|
|
echo "testcurl: update from CVS"
|
|
|
|
cvsup() {
|
|
# update quietly to the latest CVS
|
|
echo "testcurl: run cvs up"
|
|
cvs -Q up -dP 2>&1
|
|
|
|
cvsstat=$?
|
|
|
|
# return (1 - RETURNVALUE) so that errors return 0 while goodness
|
|
# returns 1
|
|
return `expr 1 - $cvsstat`
|
|
}
|
|
|
|
att="0"
|
|
while cvsup; do
|
|
att=`expr $att + 1`
|
|
echo "testcurl: failed CVS update attempt number $att."
|
|
if [ $att -gt 10 ]; then
|
|
cvsstat="111"
|
|
break # get out of the loop
|
|
fi
|
|
sleep 5
|
|
done
|
|
|
|
echo "testcurl: cvs returned: $cvsstat"
|
|
|
|
if [ "$cvsstat" -ne "0" ]; then
|
|
echo "testcurl: failed to update from CVS, exiting"
|
|
die
|
|
fi
|
|
|
|
# figure out the current collected CVS status
|
|
newstat="../allcvs.log"
|
|
oldstat="../oldcvs.log"
|
|
find . -name Entries -exec cat {} \; > "$newstat"
|
|
|
|
if [ -r "$oldstat" ]; then
|
|
# there is a previous cvs stat file to compare with
|
|
if { cmp "$oldstat" "$newstat"; } then
|
|
echo "testcurl: this is the same CVS status as before"
|
|
echo "testcurl: ALREADY TESTED THIS SETUP BEFORE"
|
|
#die
|
|
else
|
|
echo "testcurl: there has been a change in the CVS"
|
|
fi
|
|
fi
|
|
|
|
# remove possible left-overs from the past
|
|
rm -f configure
|
|
rm -rf autom4te.cache
|
|
|
|
# generate the build files
|
|
./buildconf 2>&1
|
|
fi
|
|
|
|
if [ -f configure ]; then
|
|
echo "testcurl: configure created"
|
|
else
|
|
echo "testcurl: no configure created"
|
|
die
|
|
fi
|
|
|
|
# change to build dir
|
|
cd "../$build"
|
|
|
|
# run configure script
|
|
../$CURLDIR/configure $confopts 2>&1
|
|
|
|
if [ -f lib/Makefile ]; then
|
|
echo "testcurl: configure seems to have finished fine"
|
|
else
|
|
echo "testcurl: configure didn't work"
|
|
die
|
|
fi
|
|
|
|
echo "testcurl: display lib/config.h"
|
|
grep "^ *#" lib/config.h
|
|
|
|
if { grep USE_ARES lib/config.h; } then
|
|
echo "testcurl: setup to build ares"
|
|
|
|
# make an ares dir
|
|
mkdir ares
|
|
|
|
# run the ares configure
|
|
cd ares
|
|
../../$CURLDIR/ares/configure 2>&1
|
|
|
|
echo "testcurl: build ares"
|
|
make
|
|
echo "testcurl: ares is now built"
|
|
|
|
# cd back to the curl build dir
|
|
cd ..
|
|
fi
|
|
|
|
echo "testcurl: now run make"
|
|
make -i 2>&1 | sed -e "s:$pwd::g"
|
|
|
|
if [ -f src/curl ]; then
|
|
echo "testcurl: src/curl was created fine"
|
|
else
|
|
echo "testcurl: src/curl was not created"
|
|
die
|
|
fi
|
|
|
|
echo "testcurl: now run make test-full"
|
|
make test-full 2>&1 | sed -e "s:$pwd::g" | tee build.log
|
|
|
|
if { grep "^TESTFAIL:" build.log; } then
|
|
echo "testcurl: the tests were not successful"
|
|
else
|
|
echo "testcurl: the tests were successful!"
|
|
fi
|
|
|
|
if [ $CVS -eq 1 ]; then
|
|
# store the cvs status for the next time
|
|
mv $newstat $oldstat
|
|
fi
|
|
|
|
# get out of dir
|
|
cd ..
|
|
|
|
# delete build dir
|
|
rm -rf "$build"
|
|
|
|
die
|