.\" **************************************************************************
.\" *                                  _   _ ____  _
.\" *  Project                     ___| | | |  _ \| |
.\" *                             / __| | | | |_) | |
.\" *                            | (__| |_| |  _ <| |___
.\" *                             \___|\___/|_| \_\_____|
.\" *
.\" * Copyright (C) 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 https://curl.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.
.\" *
.\" * SPDX-License-Identifier: curl
.\" *
.\" **************************************************************************
.\"
.TH testcurl.pl 1 "24 Mar 2010" testcurl 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 git 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 https://curl.se/dev/builds.html

\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 "--nogitpull"
Don't update from git even though it is a git 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--email\fP, \fI--configure\fP and \fI--desc\fP instead.
.IP "--target=[your os]"
Specify your target environment. Recognized strings include 'vc', 'mingw32',
and \&'borland'.
.SH "INITIAL SETUP"
First you make a checkout from git (or you write a script that downloads daily
snapshots automatically, find inspiration in
https://curl.se/dev/autocurl.txt ):

.nf
  $ mkdir daily-curl
  $ cd daily-curl
  $ git clone https://github.com/curl/curl.git
.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
