.\" **************************************************************************
.\" *                                  _   _ ____  _
.\" *  Project                     ___| | | |  _ \| |
.\" *                             / __| | | | |_) | |
.\" *                            | (__| |_| |  _ <| |___
.\" *                             \___|\___/|_| \_\_____|
.\" *
.\" * Copyright (C) 1998 - 2005, 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$
.\" **************************************************************************
.\"
.TH testcurl.pl 1 "20 May 2005" "Curl 7.14.1" "testcurl"
.SH NAME
testcurl.pl \- (automatically) test curl
.SH SYNOPSIS
.B testcurl.pl [options] [dir] > output
.SH DESCRIPTION
\fItestcurl.pl\fP is the master script to use for automatic testing of curl
off CVS or daily snapshots. It is written for the purpose of being run from a
crontab job or similar at a regular interval. The output is suitable to be
mailed to curl-autocompile@haxx.se to be dealt with automatically (make sure
the subject includes the word "autobuild" as the mail gets silently discarded
otherwise).  The most current build status (with a reasonable backlog) will be
published on the curl site, at http://curl.haxx.se/auto/

\fIoptions\fP may be omitted. See \fI--setup\fP for what happens then.

\fIdir\fP is a curl source dir, possibly a daily snapshot one. Using this will
make testcurl.pl skip the 'buildconf' stage and thus it removes the dependency
on automake, autoconf, libtool, GNU m4 and possibly a few other things.

testcurl.pl will run 'buildconf' (or similar), run configure, build curl and
libcurl in a separate build directory and then run 'make test' to test the
fresh build.
.SH OPTIONS
.IP "--configure=[options]"
Configure options passed to configure.
.IP "--crosscompile"
This is a cross-compile. Makes \fItestcurl.pl\fP skip a few things.
.IP "--desc=[desc]"
Description of your test system. Displayed on the build summary page on the
weba site.
.IP "--email=[email]"
Set email address to report as. Displayed in the build logs on the site.
.IP "--mktarball=[command]"
Generic command to run after completed test.
.IP "--name=[name]"
Set name to report as. Displayed in the build summary on the site.
.IP "--nobuildconf"
Don't run buildconf. Useful when many builds use the same source tree, as then
only one need to do this. Also, if multiple processes run tests simultaneously
on the same source tree (like several hosts on a NFS mounted dir),
simultaneous buildconf invokes may cause problems. (Added in 7.14.1)
.IP "--nocvsup"
Don't update from CVS even though it is a CVS tree. Useful to still be able to
test even though your network is down, or similar.
.IP "--runtestopts=[options]"
Options that is passed to the runtests.pl script. Useful for disabling valgrind
by force, and similar.
.IP "--setup=[file name]"
File name to read setup from (deprecated). The old style of providing info.
If info is missing when testcurl.pl is started, it will prompt you and then
store the info in a 'setup' file, which it will look for on each invoke. Use
\fI--name\fP, \fI--emacs\fP, \fI--configure\fP and \fI--desc\fP instead.
.IP "--target=[your os]"
Specify your target environment. Recognized strings include 'vc', 'mingw32',
\&'borland' and 'netware'.
.SH "INITIAL SETUP"
First you make a checkout from CVS (or you write a script that downloads daily
snapshots automatically, find inspiration at
http://curl.haxx.se/auto/autocurl.txt):

.nf
  $ mkdir daily-curl
  $ cd daily-curl
  $ cvs -d :pserver:anonymous@cool.haxx.se:/cvsroot/curl login
    [enter return when prompted for password ]
  $ cvs -d :pserver:anonymous@cool.haxx.se:/cvsroot/curl checkout curl
.fi

With the curl sources checked out, or downloaded, you can start testing right
away. If you want to use \fItestcurl.pl\fP without command line arguments and
to have it store and remember the config in its 'setup' file, then start it
manually now and fill in the answers to the questions it prompts you for:

.nf
  $ ./curl/tests/testcurl.pl
.fi

Now you are ready to go. If you let the script run, it will perform a full
cycle and spit out lots of output. Mail us that output as described above.
.SH "CRONTAB EXAMPLE"
The crontab could include something like this:

.nf
\# autobuild curl:
0 4 * * * cd daily-curl && ./testit.sh
.fi

Where testit.sh is a shell script that could look similar to this:

.nf
mail="mail -s autobuild curl-autocompile@haxx.se"
name="--name=whoami"
email="--email=iamme@nowhere"
desc='"--desc=supermachine Turbo 2000"'
testprog="perl ./curl/tests/testcurl.pl $name $email $desc"
opts1="--configure=--enable-debug"
opts2="--configure=--enable-ipv6"

# run first test 
$testprog $opts1 | $mail

# run second test
$testprog $opts2 | $mail
