123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304 |
- #!/bin/sh
- #***************************************************************************
- # _ _ ____ _
- # Project ___| | | | _ \| |
- # / __| | | | |_) | |
- # | (__| |_| | _ <| |___
- # \___|\___/|_| \_\_____|
- #
- # Copyright (C) 1998 - 2004, Daniel Stenberg, <daniel@haxx.se>, et al.
- #
- # This software is licensed as described in the file COPYING, which
- # you should have received as part of this distribution. The terms
- # are also available at http://curl.haxx.se/docs/copyright.html.
- #
- # You may opt to use, copy, modify, merge, publish, distribute and/or sell
- # copies of the Software, and permit persons to whom the Software is
- # furnished to do so, under the terms of the COPYING file.
- #
- # This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
- # KIND, either express or implied.
- #
- # $Id: testcurl.sh,v 1.41 2004/03/09 11:24:36 bagder Exp $
- ###########################################################################
- ###########################
- # 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 automatically. 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='$Revision: 1.41 $'
- 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
- log() {
- text=$1
- if test -n "$text"; then
- echo "testcurl: $text"
- fi
- }
- die(){
- text=$1
- log "$text"
- cd $pwd # cd back to the original root dir
- if test -n "$pwd/$build"; then
- # we have a build directory name, remove the dir
- log "removing the $build dir"
- rm -rf "$pwd/$build"
- fi
- if test -r "$buildlog"; then
- # we have a build log output file left, remove it
- log "removing the $buildlogname file"
- rm -rf "$buildlog"
- fi
- log "ENDING HERE" # last line logged!
- 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 description"
- 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
- log "STARTING HERE" # first line logged
- log "NAME = $name"
- log "EMAIL = $email"
- log "DESC = $desc"
- log "CONFOPTS = $confopts"
- log "CFLAGS = $CFLAGS"
- log "CC = $CC"
- log "version = $version"
- log "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
- log "curl is verified to be a fine source dir"
- # remove the generated sources to force them to be re-generated each
- # time we run this test
- rm -f $CURLDIR/lib/getdate.c
- rm -f $CURLDIR/src/hugehelp.c
- elif [ $CVS -eq 0 -a -f $CURLDIR/testcurl.sh ]; then
- log "curl is verified to be a fine daily source dir"
- else
- die "curl is not a daily source dir or checked out from CVS!"
- fi
- fi
- build="build-$$"
- buildlogname="buildlog-$$"
- buildlog="$pwd/$buildlogname"
- # remove any previous left-overs
- rm -rf build-*
- rm -rf buildlog-*
- # this is to remove old build logs that ended up in the wrong dir
- rm -rf $CURLDIR/buildlog-*
- # create a dir to build in
- mkdir $build
- if [ -d $build ]; then
- log "build dir $build was created fine"
- else
- die "failed to create dir $build"
- fi
- # get in the curl source tree root
- cd $CURLDIR
- # Do the CVS thing, or not...
- if [ $CVS -eq 1 ]; then
- # this is a temporary fix to make things work again, remove later
- log "remove ares/aclocal.m4"
- rm -f ares/aclocal.m4
- log "update from CVS"
- cvsup() {
- # update quietly to the latest CVS
- log "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`
- log "failed CVS update attempt number $att."
- if [ $att -gt 10 ]; then
- cvsstat="111"
- break # get out of the loop
- fi
- sleep 5
- done
-
- if [ "$cvsstat" -ne "0" ]; then
- die "failed to update from CVS ($cvsstat), exiting"
- fi
-
- # remove possible left-overs from the past
- rm -f configure
- rm -rf autom4te.cache
- # generate the build files
- log "invoke buildconf, but filter off the silly aclocal warnings"
- ./buildconf 2>&1 | grep -v "warning: underquoted definition of" | tee $buildlog
- if { grep "^buildconf: OK" $buildlog >/dev/null 2>&1; } then
- log "buildconf was successful"
- else
- die "buildconf was NOT successful"
- fi
- fi
- if [ -f configure ]; then
- log "configure created"
- else
- die "no configure created"
- fi
- # change to build dir
- cd "../$build"
- # run configure script
- ../$CURLDIR/configure $confopts 2>&1
- if [ -f lib/Makefile ]; then
- log "configure seems to have finished fine"
- else
- die "configure didn't work"
- fi
- log "display lib/config.h"
- grep "^ *#" lib/config.h
- log "display src/config.h"
- grep "^ *#" src/config.h
- if { grep "define USE_ARES" lib/config.h; } then
- log "setup to build ares"
- log "build ares"
- cd ares
- make 2>&1 | sed -e "s:$pwd::g"
- if [ -f libcares.a ]; then
- log "ares is now built successfully"
- else
- log "ares build failed"
- fi
- # cd back to the curl build dir
- cd ..
- fi
- log "run make"
- make -i 2>&1 | sed -e "s:$pwd::g"
- if [ -f src/curl ]; then
- log "src/curl was created fine"
- else
- die "src/curl was not created"
- fi
- log "display curl --version output"
- ./src/curl --version
- log "run make test-full"
- make test-full 2>&1 | sed -e "s:$pwd::g" | tee $buildlog
- if { grep "^TEST" $buildlog >/dev/null 2>&1; } then
- log "tests were run"
- else
- die "test suite failure"
- fi
- if { grep "^TESTFAIL:" $buildlog >/dev/null 2>&1; } then
- log "the tests were not successful"
- else
- log "the tests were successful!"
- fi
- # die to cleanup
- die "ending nicely"
|