xref: /aosp_15_r20/external/curl/tests/testcurl.pl (revision 6236dae45794135f37c4eb022389c904c8b0090d)
1*6236dae4SAndroid Build Coastguard Worker#!/usr/bin/env perl
2*6236dae4SAndroid Build Coastguard Worker#***************************************************************************
3*6236dae4SAndroid Build Coastguard Worker#                                  _   _ ____  _
4*6236dae4SAndroid Build Coastguard Worker#  Project                     ___| | | |  _ \| |
5*6236dae4SAndroid Build Coastguard Worker#                             / __| | | | |_) | |
6*6236dae4SAndroid Build Coastguard Worker#                            | (__| |_| |  _ <| |___
7*6236dae4SAndroid Build Coastguard Worker#                             \___|\___/|_| \_\_____|
8*6236dae4SAndroid Build Coastguard Worker#
9*6236dae4SAndroid Build Coastguard Worker# Copyright (C) Daniel Stenberg, <[email protected]>, et al.
10*6236dae4SAndroid Build Coastguard Worker#
11*6236dae4SAndroid Build Coastguard Worker# This software is licensed as described in the file COPYING, which
12*6236dae4SAndroid Build Coastguard Worker# you should have received as part of this distribution. The terms
13*6236dae4SAndroid Build Coastguard Worker# are also available at https://curl.se/docs/copyright.html.
14*6236dae4SAndroid Build Coastguard Worker#
15*6236dae4SAndroid Build Coastguard Worker# You may opt to use, copy, modify, merge, publish, distribute and/or sell
16*6236dae4SAndroid Build Coastguard Worker# copies of the Software, and permit persons to whom the Software is
17*6236dae4SAndroid Build Coastguard Worker# furnished to do so, under the terms of the COPYING file.
18*6236dae4SAndroid Build Coastguard Worker#
19*6236dae4SAndroid Build Coastguard Worker# This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
20*6236dae4SAndroid Build Coastguard Worker# KIND, either express or implied.
21*6236dae4SAndroid Build Coastguard Worker#
22*6236dae4SAndroid Build Coastguard Worker# SPDX-License-Identifier: curl
23*6236dae4SAndroid Build Coastguard Worker#
24*6236dae4SAndroid Build Coastguard Worker###########################################################################
25*6236dae4SAndroid Build Coastguard Worker
26*6236dae4SAndroid Build Coastguard Worker###########################
27*6236dae4SAndroid Build Coastguard Worker#  What is This Script?
28*6236dae4SAndroid Build Coastguard Worker###########################
29*6236dae4SAndroid Build Coastguard Worker
30*6236dae4SAndroid Build Coastguard Worker# testcurl.pl is the master script to use for automatic testing of curl
31*6236dae4SAndroid Build Coastguard Worker# directly off its source repository.
32*6236dae4SAndroid Build Coastguard Worker# This is written for the purpose of being run from a crontab job or similar
33*6236dae4SAndroid Build Coastguard Worker# at a regular interval. The output is suitable to be mailed to
34*6236dae4SAndroid Build Coastguard Worker# [email protected] to be dealt with automatically (make sure the
35*6236dae4SAndroid Build Coastguard Worker# subject includes the word "autobuild" as the mail gets silently discarded
36*6236dae4SAndroid Build Coastguard Worker# otherwise).  The most current build status (with a reasonable backlog) will
37*6236dae4SAndroid Build Coastguard Worker# be published on the curl site, at https://curl.se/auto/
38*6236dae4SAndroid Build Coastguard Worker
39*6236dae4SAndroid Build Coastguard Worker# USAGE:
40*6236dae4SAndroid Build Coastguard Worker# testcurl.pl [options] [curl-daily-name] > output
41*6236dae4SAndroid Build Coastguard Worker
42*6236dae4SAndroid Build Coastguard Worker# Options:
43*6236dae4SAndroid Build Coastguard Worker#
44*6236dae4SAndroid Build Coastguard Worker# --configure=[options]    Configure options
45*6236dae4SAndroid Build Coastguard Worker# --crosscompile           This is a crosscompile
46*6236dae4SAndroid Build Coastguard Worker# --desc=[desc]            Description of your test system
47*6236dae4SAndroid Build Coastguard Worker# --email=[email]          Set email address to report as
48*6236dae4SAndroid Build Coastguard Worker# --extvercmd=[command]    Command to use for displaying version with cross compiles.
49*6236dae4SAndroid Build Coastguard Worker# --mktarball=[command]    Command to run after completed test
50*6236dae4SAndroid Build Coastguard Worker# --name=[name]            Set name to report as
51*6236dae4SAndroid Build Coastguard Worker# --notes=[notes]          More human-readable information about this configuration
52*6236dae4SAndroid Build Coastguard Worker# --nocvsup                Don't pull from git even though it is a git tree
53*6236dae4SAndroid Build Coastguard Worker# --nogitpull              Don't pull from git even though it is a git tree
54*6236dae4SAndroid Build Coastguard Worker# --nobuildconf            Don't run autoreconf -fi
55*6236dae4SAndroid Build Coastguard Worker# --noconfigure            Don't run configure
56*6236dae4SAndroid Build Coastguard Worker# --runtestopts=[options]  Options to pass to runtests.pl
57*6236dae4SAndroid Build Coastguard Worker# --setup=[file name]      File name to read setup from (deprecated)
58*6236dae4SAndroid Build Coastguard Worker# --target=[your os]       Specify your target environment.
59*6236dae4SAndroid Build Coastguard Worker#
60*6236dae4SAndroid Build Coastguard Worker# if [curl-daily-name] is omitted, a 'curl' git directory is assumed.
61*6236dae4SAndroid Build Coastguard Worker#
62*6236dae4SAndroid Build Coastguard Worker
63*6236dae4SAndroid Build Coastguard Workeruse strict;
64*6236dae4SAndroid Build Coastguard Worker
65*6236dae4SAndroid Build Coastguard Workeruse Cwd;
66*6236dae4SAndroid Build Coastguard Workeruse File::Spec;
67*6236dae4SAndroid Build Coastguard Worker
68*6236dae4SAndroid Build Coastguard Worker# Turn on warnings (equivalent to -w, which can't be used with /usr/bin/env)
69*6236dae4SAndroid Build Coastguard Worker#BEGIN { $^W = 1; }
70*6236dae4SAndroid Build Coastguard Worker
71*6236dae4SAndroid Build Coastguard Workeruse vars qw($version $fixed $infixed $CURLDIR $git $pwd $build $buildlog
72*6236dae4SAndroid Build Coastguard Worker            $buildlogname $configurebuild $targetos $confheader $binext
73*6236dae4SAndroid Build Coastguard Worker            $libext);
74*6236dae4SAndroid Build Coastguard Worker
75*6236dae4SAndroid Build Coastguard Workeruse vars qw($name $email $desc $confopts $runtestopts $setupfile $mktarball
76*6236dae4SAndroid Build Coastguard Worker            $extvercmd $nogitpull $nobuildconf $crosscompile
77*6236dae4SAndroid Build Coastguard Worker            $timestamp $notes);
78*6236dae4SAndroid Build Coastguard Worker
79*6236dae4SAndroid Build Coastguard Worker# version of this script
80*6236dae4SAndroid Build Coastguard Worker$version='2024-08-07';
81*6236dae4SAndroid Build Coastguard Worker$fixed=0;
82*6236dae4SAndroid Build Coastguard Worker
83*6236dae4SAndroid Build Coastguard Worker# Determine if we're running from git or a canned copy of curl,
84*6236dae4SAndroid Build Coastguard Worker# or if we got a specific target option or setup file option.
85*6236dae4SAndroid Build Coastguard Worker$CURLDIR="curl";
86*6236dae4SAndroid Build Coastguard Workerif (-f ".git/config") {
87*6236dae4SAndroid Build Coastguard Worker  $CURLDIR = "./";
88*6236dae4SAndroid Build Coastguard Worker}
89*6236dae4SAndroid Build Coastguard Worker
90*6236dae4SAndroid Build Coastguard Worker$git=1;
91*6236dae4SAndroid Build Coastguard Worker$setupfile = 'setup';
92*6236dae4SAndroid Build Coastguard Worker$configurebuild = 1;
93*6236dae4SAndroid Build Coastguard Workerwhile ($ARGV[0]) {
94*6236dae4SAndroid Build Coastguard Worker  if ($ARGV[0] =~ /--target=/) {
95*6236dae4SAndroid Build Coastguard Worker    $targetos = (split(/=/, shift @ARGV, 2))[1];
96*6236dae4SAndroid Build Coastguard Worker  }
97*6236dae4SAndroid Build Coastguard Worker  elsif ($ARGV[0] =~ /--setup=/) {
98*6236dae4SAndroid Build Coastguard Worker    $setupfile = (split(/=/, shift @ARGV, 2))[1];
99*6236dae4SAndroid Build Coastguard Worker  }
100*6236dae4SAndroid Build Coastguard Worker  elsif ($ARGV[0] =~ /--extvercmd=/) {
101*6236dae4SAndroid Build Coastguard Worker    $extvercmd = (split(/=/, shift @ARGV, 2))[1];
102*6236dae4SAndroid Build Coastguard Worker  }
103*6236dae4SAndroid Build Coastguard Worker  elsif ($ARGV[0] =~ /--mktarball=/) {
104*6236dae4SAndroid Build Coastguard Worker    $mktarball = (split(/=/, shift @ARGV, 2))[1];
105*6236dae4SAndroid Build Coastguard Worker  }
106*6236dae4SAndroid Build Coastguard Worker  elsif ($ARGV[0] =~ /--name=/) {
107*6236dae4SAndroid Build Coastguard Worker    $name = (split(/=/, shift @ARGV, 2))[1];
108*6236dae4SAndroid Build Coastguard Worker  }
109*6236dae4SAndroid Build Coastguard Worker  elsif ($ARGV[0] =~ /--email=/) {
110*6236dae4SAndroid Build Coastguard Worker    $email = (split(/=/, shift @ARGV, 2))[1];
111*6236dae4SAndroid Build Coastguard Worker  }
112*6236dae4SAndroid Build Coastguard Worker  elsif ($ARGV[0] =~ /--desc=/) {
113*6236dae4SAndroid Build Coastguard Worker    $desc = (split(/=/, shift @ARGV, 2))[1];
114*6236dae4SAndroid Build Coastguard Worker  }
115*6236dae4SAndroid Build Coastguard Worker  elsif ($ARGV[0] =~ /--notes=/) {
116*6236dae4SAndroid Build Coastguard Worker    $notes = (split(/=/, shift @ARGV, 2))[1];
117*6236dae4SAndroid Build Coastguard Worker  }
118*6236dae4SAndroid Build Coastguard Worker  elsif ($ARGV[0] =~ /--configure=(.*)/) {
119*6236dae4SAndroid Build Coastguard Worker    $confopts = $1;
120*6236dae4SAndroid Build Coastguard Worker    shift @ARGV;
121*6236dae4SAndroid Build Coastguard Worker  }
122*6236dae4SAndroid Build Coastguard Worker  elsif (($ARGV[0] eq "--nocvsup") || ($ARGV[0] eq "--nogitpull")) {
123*6236dae4SAndroid Build Coastguard Worker    $nogitpull=1;
124*6236dae4SAndroid Build Coastguard Worker    shift @ARGV;
125*6236dae4SAndroid Build Coastguard Worker  }
126*6236dae4SAndroid Build Coastguard Worker  elsif ($ARGV[0] =~ /--nobuildconf/) {
127*6236dae4SAndroid Build Coastguard Worker    $nobuildconf=1;
128*6236dae4SAndroid Build Coastguard Worker    shift @ARGV;
129*6236dae4SAndroid Build Coastguard Worker  }
130*6236dae4SAndroid Build Coastguard Worker  elsif ($ARGV[0] =~ /--noconfigure/) {
131*6236dae4SAndroid Build Coastguard Worker    $configurebuild=0;
132*6236dae4SAndroid Build Coastguard Worker    shift @ARGV;
133*6236dae4SAndroid Build Coastguard Worker  }
134*6236dae4SAndroid Build Coastguard Worker  elsif ($ARGV[0] =~ /--crosscompile/) {
135*6236dae4SAndroid Build Coastguard Worker    $crosscompile=1;
136*6236dae4SAndroid Build Coastguard Worker    shift @ARGV;
137*6236dae4SAndroid Build Coastguard Worker  }
138*6236dae4SAndroid Build Coastguard Worker  elsif ($ARGV[0] =~ /--runtestopts=/) {
139*6236dae4SAndroid Build Coastguard Worker    $runtestopts = (split(/=/, shift @ARGV, 2))[1];
140*6236dae4SAndroid Build Coastguard Worker  }
141*6236dae4SAndroid Build Coastguard Worker  else {
142*6236dae4SAndroid Build Coastguard Worker    $CURLDIR=shift @ARGV;
143*6236dae4SAndroid Build Coastguard Worker    $git=0; # a given dir, assume not using git
144*6236dae4SAndroid Build Coastguard Worker  }
145*6236dae4SAndroid Build Coastguard Worker}
146*6236dae4SAndroid Build Coastguard Worker
147*6236dae4SAndroid Build Coastguard Worker# Do the platform-specific stuff here
148*6236dae4SAndroid Build Coastguard Worker$confheader = 'curl_config.h';
149*6236dae4SAndroid Build Coastguard Worker$binext = '';
150*6236dae4SAndroid Build Coastguard Worker$libext = '.la'; # .la since both libcurl and libcares are made with libtool
151*6236dae4SAndroid Build Coastguard Workerif ($^O eq 'MSWin32' || $targetos) {
152*6236dae4SAndroid Build Coastguard Worker  if (!$targetos) {
153*6236dae4SAndroid Build Coastguard Worker    # If no target defined on Windows, let's assume vc
154*6236dae4SAndroid Build Coastguard Worker    $targetos = 'vc';
155*6236dae4SAndroid Build Coastguard Worker  }
156*6236dae4SAndroid Build Coastguard Worker  if ($targetos =~ /vc/ || $targetos =~ /borland/) {
157*6236dae4SAndroid Build Coastguard Worker    $binext = '.exe';
158*6236dae4SAndroid Build Coastguard Worker    $libext = '.lib';
159*6236dae4SAndroid Build Coastguard Worker  }
160*6236dae4SAndroid Build Coastguard Worker  elsif ($targetos =~ /mingw/) {
161*6236dae4SAndroid Build Coastguard Worker    $binext = '.exe';
162*6236dae4SAndroid Build Coastguard Worker    if ($^O eq 'MSWin32') {
163*6236dae4SAndroid Build Coastguard Worker      $libext = '.a';
164*6236dae4SAndroid Build Coastguard Worker    }
165*6236dae4SAndroid Build Coastguard Worker  }
166*6236dae4SAndroid Build Coastguard Worker}
167*6236dae4SAndroid Build Coastguard Worker
168*6236dae4SAndroid Build Coastguard Workerif (($^O eq 'MSWin32' || $^O eq 'cygwin' || $^O eq 'msys') &&
169*6236dae4SAndroid Build Coastguard Worker    ($targetos =~ /vc/ || $targetos =~ /mingw32/ ||
170*6236dae4SAndroid Build Coastguard Worker     $targetos =~ /borland/)) {
171*6236dae4SAndroid Build Coastguard Worker
172*6236dae4SAndroid Build Coastguard Worker  # Set these things only when building ON Windows and for Win32 platform.
173*6236dae4SAndroid Build Coastguard Worker  # FOR Windows since we might be cross-compiling on another system. Non-
174*6236dae4SAndroid Build Coastguard Worker  # Windows builds still default to configure-style builds with curl_config.h.
175*6236dae4SAndroid Build Coastguard Worker
176*6236dae4SAndroid Build Coastguard Worker  $configurebuild = 0;
177*6236dae4SAndroid Build Coastguard Worker  $confheader = 'config-win32.h';
178*6236dae4SAndroid Build Coastguard Worker}
179*6236dae4SAndroid Build Coastguard Worker
180*6236dae4SAndroid Build Coastguard Worker$ENV{LC_ALL}="C" if (($ENV{LC_ALL}) && ($ENV{LC_ALL} !~ /^C$/));
181*6236dae4SAndroid Build Coastguard Worker$ENV{LC_CTYPE}="C" if (($ENV{LC_CTYPE}) && ($ENV{LC_CTYPE} !~ /^C$/));
182*6236dae4SAndroid Build Coastguard Worker$ENV{LANG}="C";
183*6236dae4SAndroid Build Coastguard Worker
184*6236dae4SAndroid Build Coastguard Workersub rmtree($) {
185*6236dae4SAndroid Build Coastguard Worker    my $target = $_[0];
186*6236dae4SAndroid Build Coastguard Worker    if ($^O eq 'MSWin32') {
187*6236dae4SAndroid Build Coastguard Worker      foreach (glob($target)) {
188*6236dae4SAndroid Build Coastguard Worker        s:/:\\:g;
189*6236dae4SAndroid Build Coastguard Worker        system("rd /s /q $_");
190*6236dae4SAndroid Build Coastguard Worker      }
191*6236dae4SAndroid Build Coastguard Worker    } else {
192*6236dae4SAndroid Build Coastguard Worker      system("rm -rf $target");
193*6236dae4SAndroid Build Coastguard Worker    }
194*6236dae4SAndroid Build Coastguard Worker}
195*6236dae4SAndroid Build Coastguard Worker
196*6236dae4SAndroid Build Coastguard Workersub grepfile($$) {
197*6236dae4SAndroid Build Coastguard Worker    my ($target, $fn) = @_;
198*6236dae4SAndroid Build Coastguard Worker    open(my $fh, "<", $fn) or die;
199*6236dae4SAndroid Build Coastguard Worker    while (<$fh>) {
200*6236dae4SAndroid Build Coastguard Worker      if (/$target/) {
201*6236dae4SAndroid Build Coastguard Worker        close($fh);
202*6236dae4SAndroid Build Coastguard Worker        return 1;
203*6236dae4SAndroid Build Coastguard Worker      }
204*6236dae4SAndroid Build Coastguard Worker    }
205*6236dae4SAndroid Build Coastguard Worker    close($fh);
206*6236dae4SAndroid Build Coastguard Worker    return 0;
207*6236dae4SAndroid Build Coastguard Worker}
208*6236dae4SAndroid Build Coastguard Worker
209*6236dae4SAndroid Build Coastguard Workersub logit($) {
210*6236dae4SAndroid Build Coastguard Worker    my $text=$_[0];
211*6236dae4SAndroid Build Coastguard Worker    if ($text) {
212*6236dae4SAndroid Build Coastguard Worker      print "testcurl: $text\n";
213*6236dae4SAndroid Build Coastguard Worker    }
214*6236dae4SAndroid Build Coastguard Worker}
215*6236dae4SAndroid Build Coastguard Worker
216*6236dae4SAndroid Build Coastguard Workersub logit_spaced($) {
217*6236dae4SAndroid Build Coastguard Worker    my $text=$_[0];
218*6236dae4SAndroid Build Coastguard Worker    if ($text) {
219*6236dae4SAndroid Build Coastguard Worker      print "\ntestcurl: $text\n\n";
220*6236dae4SAndroid Build Coastguard Worker    }
221*6236dae4SAndroid Build Coastguard Worker}
222*6236dae4SAndroid Build Coastguard Worker
223*6236dae4SAndroid Build Coastguard Workersub mydie($){
224*6236dae4SAndroid Build Coastguard Worker    my $text=$_[0];
225*6236dae4SAndroid Build Coastguard Worker    logit "$text";
226*6236dae4SAndroid Build Coastguard Worker    chdir $pwd; # cd back to the original root dir
227*6236dae4SAndroid Build Coastguard Worker
228*6236dae4SAndroid Build Coastguard Worker    if ($pwd && $build) {
229*6236dae4SAndroid Build Coastguard Worker      # we have a build directory name, remove the dir
230*6236dae4SAndroid Build Coastguard Worker      logit "removing the $build dir";
231*6236dae4SAndroid Build Coastguard Worker      rmtree "$pwd/$build";
232*6236dae4SAndroid Build Coastguard Worker    }
233*6236dae4SAndroid Build Coastguard Worker    if (-r $buildlog) {
234*6236dae4SAndroid Build Coastguard Worker      # we have a build log output file left, remove it
235*6236dae4SAndroid Build Coastguard Worker      logit "removing the $buildlogname file";
236*6236dae4SAndroid Build Coastguard Worker      unlink "$buildlog";
237*6236dae4SAndroid Build Coastguard Worker    }
238*6236dae4SAndroid Build Coastguard Worker    logit "ENDING HERE"; # last line logged!
239*6236dae4SAndroid Build Coastguard Worker    exit 1;
240*6236dae4SAndroid Build Coastguard Worker}
241*6236dae4SAndroid Build Coastguard Worker
242*6236dae4SAndroid Build Coastguard Workersub get_host_triplet {
243*6236dae4SAndroid Build Coastguard Worker  my $triplet;
244*6236dae4SAndroid Build Coastguard Worker  my $configfile = "$pwd/$build/lib/curl_config.h";
245*6236dae4SAndroid Build Coastguard Worker
246*6236dae4SAndroid Build Coastguard Worker  if(-f $configfile && -s $configfile && open(my $libconfigh, "<", "$configfile")) {
247*6236dae4SAndroid Build Coastguard Worker    while(<$libconfigh>) {
248*6236dae4SAndroid Build Coastguard Worker      if($_ =~ /^\#define\s+CURL_OS\s+"*([^"][^"]*)"*\s*/) {
249*6236dae4SAndroid Build Coastguard Worker        $triplet = $1;
250*6236dae4SAndroid Build Coastguard Worker        last;
251*6236dae4SAndroid Build Coastguard Worker      }
252*6236dae4SAndroid Build Coastguard Worker    }
253*6236dae4SAndroid Build Coastguard Worker    close($libconfigh);
254*6236dae4SAndroid Build Coastguard Worker  }
255*6236dae4SAndroid Build Coastguard Worker  return $triplet;
256*6236dae4SAndroid Build Coastguard Worker}
257*6236dae4SAndroid Build Coastguard Worker
258*6236dae4SAndroid Build Coastguard Workerif($name && $email && $desc) {
259*6236dae4SAndroid Build Coastguard Worker  # having these fields set are enough to continue, skip reading the setup
260*6236dae4SAndroid Build Coastguard Worker  # file
261*6236dae4SAndroid Build Coastguard Worker  $infixed=4;
262*6236dae4SAndroid Build Coastguard Worker  $fixed=4;
263*6236dae4SAndroid Build Coastguard Worker}
264*6236dae4SAndroid Build Coastguard Workerelsif (open(my $f, "<", "$setupfile")) {
265*6236dae4SAndroid Build Coastguard Worker  while (<$f>) {
266*6236dae4SAndroid Build Coastguard Worker    if (/(\w+)=(.*)/) {
267*6236dae4SAndroid Build Coastguard Worker      eval "\$$1=$2;";
268*6236dae4SAndroid Build Coastguard Worker    }
269*6236dae4SAndroid Build Coastguard Worker  }
270*6236dae4SAndroid Build Coastguard Worker  close($f);
271*6236dae4SAndroid Build Coastguard Worker  $infixed=$fixed;
272*6236dae4SAndroid Build Coastguard Worker}
273*6236dae4SAndroid Build Coastguard Workerelse {
274*6236dae4SAndroid Build Coastguard Worker  $infixed=0;    # so that "additional args to configure" works properly first time...
275*6236dae4SAndroid Build Coastguard Worker}
276*6236dae4SAndroid Build Coastguard Worker
277*6236dae4SAndroid Build Coastguard Workerif (!$name) {
278*6236dae4SAndroid Build Coastguard Worker  print "please enter your name\n";
279*6236dae4SAndroid Build Coastguard Worker  $name = <>;
280*6236dae4SAndroid Build Coastguard Worker  chomp $name;
281*6236dae4SAndroid Build Coastguard Worker  $fixed=1;
282*6236dae4SAndroid Build Coastguard Worker}
283*6236dae4SAndroid Build Coastguard Worker
284*6236dae4SAndroid Build Coastguard Workerif (!$email) {
285*6236dae4SAndroid Build Coastguard Worker  print "please enter your contact email address\n";
286*6236dae4SAndroid Build Coastguard Worker  $email = <>;
287*6236dae4SAndroid Build Coastguard Worker  chomp $email;
288*6236dae4SAndroid Build Coastguard Worker  $fixed=2;
289*6236dae4SAndroid Build Coastguard Worker}
290*6236dae4SAndroid Build Coastguard Worker
291*6236dae4SAndroid Build Coastguard Workerif (!$desc) {
292*6236dae4SAndroid Build Coastguard Worker  print "please enter a one line system description\n";
293*6236dae4SAndroid Build Coastguard Worker  $desc = <>;
294*6236dae4SAndroid Build Coastguard Worker  chomp $desc;
295*6236dae4SAndroid Build Coastguard Worker  $fixed=3;
296*6236dae4SAndroid Build Coastguard Worker}
297*6236dae4SAndroid Build Coastguard Worker
298*6236dae4SAndroid Build Coastguard Workerif (!$confopts) {
299*6236dae4SAndroid Build Coastguard Worker  if ($infixed < 4) {
300*6236dae4SAndroid Build Coastguard Worker    print "please enter your additional arguments to configure\n";
301*6236dae4SAndroid Build Coastguard Worker    print "examples: --with-openssl --enable-debug --enable-ipv6\n";
302*6236dae4SAndroid Build Coastguard Worker    $confopts = <>;
303*6236dae4SAndroid Build Coastguard Worker    chomp $confopts;
304*6236dae4SAndroid Build Coastguard Worker  }
305*6236dae4SAndroid Build Coastguard Worker}
306*6236dae4SAndroid Build Coastguard Worker
307*6236dae4SAndroid Build Coastguard Worker
308*6236dae4SAndroid Build Coastguard Workerif ($fixed < 4) {
309*6236dae4SAndroid Build Coastguard Worker    $fixed=4;
310*6236dae4SAndroid Build Coastguard Worker    open(my $f, ">", "$setupfile") or die;
311*6236dae4SAndroid Build Coastguard Worker    print $f "name='$name'\n";
312*6236dae4SAndroid Build Coastguard Worker    print $f "email='$email'\n";
313*6236dae4SAndroid Build Coastguard Worker    print $f "desc='$desc'\n";
314*6236dae4SAndroid Build Coastguard Worker    print $f "confopts='$confopts'\n";
315*6236dae4SAndroid Build Coastguard Worker    print $f "notes='$notes'\n";
316*6236dae4SAndroid Build Coastguard Worker    print $f "fixed='$fixed'\n";
317*6236dae4SAndroid Build Coastguard Worker    close($f);
318*6236dae4SAndroid Build Coastguard Worker}
319*6236dae4SAndroid Build Coastguard Worker
320*6236dae4SAndroid Build Coastguard Worker# Enable picky compiler warnings unless explicitly disabled
321*6236dae4SAndroid Build Coastguard Workerif (($confopts !~ /--enable-debug/) &&
322*6236dae4SAndroid Build Coastguard Worker    ($confopts !~ /--enable-warnings/) &&
323*6236dae4SAndroid Build Coastguard Worker    ($confopts !~ /--disable-warnings/)) {
324*6236dae4SAndroid Build Coastguard Worker  $confopts .= " --enable-warnings";
325*6236dae4SAndroid Build Coastguard Worker}
326*6236dae4SAndroid Build Coastguard Worker
327*6236dae4SAndroid Build Coastguard Workermy $str1066os = 'o' x 1066;
328*6236dae4SAndroid Build Coastguard Worker
329*6236dae4SAndroid Build Coastguard Worker# Set timestamp to the UTC this script is running. Its value might
330*6236dae4SAndroid Build Coastguard Worker# be changed later in the script to the value present in curlver.h
331*6236dae4SAndroid Build Coastguard Worker$timestamp = scalar(gmtime)." UTC";
332*6236dae4SAndroid Build Coastguard Worker
333*6236dae4SAndroid Build Coastguard Workerlogit "STARTING HERE"; # first line logged, for scripts to trigger on
334*6236dae4SAndroid Build Coastguard Workerlogit 'TRANSFER CONTROL ==== 1120 CHAR LINE' . $str1066os . 'LINE_END';
335*6236dae4SAndroid Build Coastguard Workerlogit "NAME = $name";
336*6236dae4SAndroid Build Coastguard Workerlogit "EMAIL = $email";
337*6236dae4SAndroid Build Coastguard Workerlogit "DESC = $desc";
338*6236dae4SAndroid Build Coastguard Workerlogit "NOTES = $notes";
339*6236dae4SAndroid Build Coastguard Workerlogit "CONFOPTS = $confopts";
340*6236dae4SAndroid Build Coastguard Workerlogit "RUNTESTOPTS = ".$runtestopts;
341*6236dae4SAndroid Build Coastguard Workerlogit "CPPFLAGS = ".$ENV{CPPFLAGS};
342*6236dae4SAndroid Build Coastguard Workerlogit "CFLAGS = ".$ENV{CFLAGS};
343*6236dae4SAndroid Build Coastguard Workerlogit "LDFLAGS = ".$ENV{LDFLAGS};
344*6236dae4SAndroid Build Coastguard Workerlogit "LIBS = ".$ENV{LIBS};
345*6236dae4SAndroid Build Coastguard Workerlogit "CC = ".$ENV{CC};
346*6236dae4SAndroid Build Coastguard Workerlogit "TMPDIR = ".$ENV{TMPDIR};
347*6236dae4SAndroid Build Coastguard Workerlogit "MAKEFLAGS = ".$ENV{MAKEFLAGS};
348*6236dae4SAndroid Build Coastguard Workerlogit "ACLOCAL_FLAGS = ".$ENV{ACLOCAL_FLAGS};
349*6236dae4SAndroid Build Coastguard Workerlogit "PKG_CONFIG_PATH = ".$ENV{PKG_CONFIG_PATH};
350*6236dae4SAndroid Build Coastguard Workerlogit "DYLD_LIBRARY_PATH = ".$ENV{DYLD_LIBRARY_PATH};
351*6236dae4SAndroid Build Coastguard Workerlogit "LD_LIBRARY_PATH = ".$ENV{LD_LIBRARY_PATH};
352*6236dae4SAndroid Build Coastguard Workerlogit "LIBRARY_PATH = ".$ENV{LIBRARY_PATH};
353*6236dae4SAndroid Build Coastguard Workerlogit "SHLIB_PATH = ".$ENV{SHLIB_PATH};
354*6236dae4SAndroid Build Coastguard Workerlogit "LIBPATH = ".$ENV{LIBPATH};
355*6236dae4SAndroid Build Coastguard Workerlogit "target = ".$targetos;
356*6236dae4SAndroid Build Coastguard Workerlogit "version = $version"; # script version
357*6236dae4SAndroid Build Coastguard Workerlogit "date = $timestamp";  # When the test build starts
358*6236dae4SAndroid Build Coastguard Worker
359*6236dae4SAndroid Build Coastguard Worker$str1066os = undef;
360*6236dae4SAndroid Build Coastguard Worker
361*6236dae4SAndroid Build Coastguard Worker# Make $pwd to become the path without newline. We'll use that in order to cut
362*6236dae4SAndroid Build Coastguard Worker# off that path from all possible logs and error messages etc.
363*6236dae4SAndroid Build Coastguard Worker$pwd = getcwd();
364*6236dae4SAndroid Build Coastguard Worker
365*6236dae4SAndroid Build Coastguard Workermy $have_embedded_ares = 0;
366*6236dae4SAndroid Build Coastguard Worker
367*6236dae4SAndroid Build Coastguard Workerif (-d $CURLDIR) {
368*6236dae4SAndroid Build Coastguard Worker  if ($git && -d "$CURLDIR/.git") {
369*6236dae4SAndroid Build Coastguard Worker    logit "$CURLDIR is verified to be a fine git source dir";
370*6236dae4SAndroid Build Coastguard Worker    # remove the generated sources to force them to be re-generated each
371*6236dae4SAndroid Build Coastguard Worker    # time we run this test
372*6236dae4SAndroid Build Coastguard Worker    unlink "$CURLDIR/src/tool_hugehelp.c";
373*6236dae4SAndroid Build Coastguard Worker    # find out if curl source dir has an in-tree c-ares repo
374*6236dae4SAndroid Build Coastguard Worker    $have_embedded_ares = 1 if (-f "$CURLDIR/ares/GIT-INFO");
375*6236dae4SAndroid Build Coastguard Worker  } elsif (!$git && -f "$CURLDIR/tests/testcurl.pl") {
376*6236dae4SAndroid Build Coastguard Worker    logit "$CURLDIR is verified to be a fine daily source dir";
377*6236dae4SAndroid Build Coastguard Worker    # find out if curl source dir has an in-tree c-ares extracted tarball
378*6236dae4SAndroid Build Coastguard Worker    $have_embedded_ares = 1 if (-f "$CURLDIR/ares/ares_build.h");
379*6236dae4SAndroid Build Coastguard Worker  } else {
380*6236dae4SAndroid Build Coastguard Worker    mydie "$CURLDIR is not a daily source dir or checked out from git!"
381*6236dae4SAndroid Build Coastguard Worker  }
382*6236dae4SAndroid Build Coastguard Worker}
383*6236dae4SAndroid Build Coastguard Worker
384*6236dae4SAndroid Build Coastguard Worker# make the path absolute so we can use it everywhere
385*6236dae4SAndroid Build Coastguard Worker$CURLDIR = File::Spec->rel2abs("$CURLDIR");
386*6236dae4SAndroid Build Coastguard Worker
387*6236dae4SAndroid Build Coastguard Worker$build="build-$$";
388*6236dae4SAndroid Build Coastguard Worker$buildlogname="buildlog-$$";
389*6236dae4SAndroid Build Coastguard Worker$buildlog="$pwd/$buildlogname";
390*6236dae4SAndroid Build Coastguard Worker
391*6236dae4SAndroid Build Coastguard Worker# remove any previous left-overs
392*6236dae4SAndroid Build Coastguard Workerrmtree "build-*";
393*6236dae4SAndroid Build Coastguard Workerrmtree "buildlog-*";
394*6236dae4SAndroid Build Coastguard Worker
395*6236dae4SAndroid Build Coastguard Worker# this is to remove old build logs that ended up in the wrong dir
396*6236dae4SAndroid Build Coastguard Workerforeach (glob("$CURLDIR/buildlog-*")) { unlink $_; }
397*6236dae4SAndroid Build Coastguard Worker
398*6236dae4SAndroid Build Coastguard Worker# create a dir to build in
399*6236dae4SAndroid Build Coastguard Workermkdir $build, 0777;
400*6236dae4SAndroid Build Coastguard Worker
401*6236dae4SAndroid Build Coastguard Workerif (-d $build) {
402*6236dae4SAndroid Build Coastguard Worker  logit "build dir $build was created fine";
403*6236dae4SAndroid Build Coastguard Worker} else {
404*6236dae4SAndroid Build Coastguard Worker  mydie "failed to create dir $build";
405*6236dae4SAndroid Build Coastguard Worker}
406*6236dae4SAndroid Build Coastguard Worker
407*6236dae4SAndroid Build Coastguard Worker# get in the curl source tree root
408*6236dae4SAndroid Build Coastguard Workerchdir $CURLDIR;
409*6236dae4SAndroid Build Coastguard Worker
410*6236dae4SAndroid Build Coastguard Worker# Do the git thing, or not...
411*6236dae4SAndroid Build Coastguard Workerif ($git) {
412*6236dae4SAndroid Build Coastguard Worker  my $gitstat = 0;
413*6236dae4SAndroid Build Coastguard Worker  my @commits;
414*6236dae4SAndroid Build Coastguard Worker
415*6236dae4SAndroid Build Coastguard Worker  # update quietly to the latest git
416*6236dae4SAndroid Build Coastguard Worker  if($nogitpull) {
417*6236dae4SAndroid Build Coastguard Worker    logit "skipping git pull (--nogitpull)";
418*6236dae4SAndroid Build Coastguard Worker  } else {
419*6236dae4SAndroid Build Coastguard Worker    logit "run git pull in curl";
420*6236dae4SAndroid Build Coastguard Worker    system("git pull 2>&1");
421*6236dae4SAndroid Build Coastguard Worker    $gitstat += $?;
422*6236dae4SAndroid Build Coastguard Worker    logit "failed to update from curl git ($?), continue anyway" if ($?);
423*6236dae4SAndroid Build Coastguard Worker
424*6236dae4SAndroid Build Coastguard Worker    # Set timestamp to the UTC the git update took place.
425*6236dae4SAndroid Build Coastguard Worker    $timestamp = scalar(gmtime)." UTC" if (!$gitstat);
426*6236dae4SAndroid Build Coastguard Worker  }
427*6236dae4SAndroid Build Coastguard Worker
428*6236dae4SAndroid Build Coastguard Worker  # get the last 5 commits for show (even if no pull was made)
429*6236dae4SAndroid Build Coastguard Worker  @commits=`git log --pretty=oneline --abbrev-commit -5`;
430*6236dae4SAndroid Build Coastguard Worker  logit "The most recent curl git commits:";
431*6236dae4SAndroid Build Coastguard Worker  for (@commits) {
432*6236dae4SAndroid Build Coastguard Worker    chomp ($_);
433*6236dae4SAndroid Build Coastguard Worker    logit "  $_";
434*6236dae4SAndroid Build Coastguard Worker  }
435*6236dae4SAndroid Build Coastguard Worker
436*6236dae4SAndroid Build Coastguard Worker  if (-d "ares/.git") {
437*6236dae4SAndroid Build Coastguard Worker    chdir "ares";
438*6236dae4SAndroid Build Coastguard Worker
439*6236dae4SAndroid Build Coastguard Worker    if($nogitpull) {
440*6236dae4SAndroid Build Coastguard Worker      logit "skipping git pull (--nogitpull) in ares";
441*6236dae4SAndroid Build Coastguard Worker    } else {
442*6236dae4SAndroid Build Coastguard Worker      logit "run git pull in ares";
443*6236dae4SAndroid Build Coastguard Worker      system("git pull 2>&1");
444*6236dae4SAndroid Build Coastguard Worker      $gitstat += $?;
445*6236dae4SAndroid Build Coastguard Worker      logit "failed to update from ares git ($?), continue anyway" if ($?);
446*6236dae4SAndroid Build Coastguard Worker
447*6236dae4SAndroid Build Coastguard Worker      # Set timestamp to the UTC the git update took place.
448*6236dae4SAndroid Build Coastguard Worker      $timestamp = scalar(gmtime)." UTC" if (!$gitstat);
449*6236dae4SAndroid Build Coastguard Worker    }
450*6236dae4SAndroid Build Coastguard Worker
451*6236dae4SAndroid Build Coastguard Worker    # get the last 5 commits for show (even if no pull was made)
452*6236dae4SAndroid Build Coastguard Worker    @commits=`git log --pretty=oneline --abbrev-commit -5`;
453*6236dae4SAndroid Build Coastguard Worker    logit "The most recent ares git commits:";
454*6236dae4SAndroid Build Coastguard Worker    for (@commits) {
455*6236dae4SAndroid Build Coastguard Worker      chomp ($_);
456*6236dae4SAndroid Build Coastguard Worker      logit "  $_";
457*6236dae4SAndroid Build Coastguard Worker    }
458*6236dae4SAndroid Build Coastguard Worker
459*6236dae4SAndroid Build Coastguard Worker    chdir "$CURLDIR";
460*6236dae4SAndroid Build Coastguard Worker  }
461*6236dae4SAndroid Build Coastguard Worker
462*6236dae4SAndroid Build Coastguard Worker  if($nobuildconf) {
463*6236dae4SAndroid Build Coastguard Worker    logit "told to not run autoreconf -fi";
464*6236dae4SAndroid Build Coastguard Worker  }
465*6236dae4SAndroid Build Coastguard Worker  elsif ($configurebuild) {
466*6236dae4SAndroid Build Coastguard Worker    # remove possible left-overs from the past
467*6236dae4SAndroid Build Coastguard Worker    unlink "configure";
468*6236dae4SAndroid Build Coastguard Worker    unlink "autom4te.cache";
469*6236dae4SAndroid Build Coastguard Worker
470*6236dae4SAndroid Build Coastguard Worker    # generate the build files
471*6236dae4SAndroid Build Coastguard Worker    logit "invoke autoreconf";
472*6236dae4SAndroid Build Coastguard Worker    open(my $f, "-|", "autoreconf -fi 2>&1") or die;
473*6236dae4SAndroid Build Coastguard Worker    open(my $log, ">", "$buildlog") or die;
474*6236dae4SAndroid Build Coastguard Worker    while (<$f>) {
475*6236dae4SAndroid Build Coastguard Worker      my $ll = $_;
476*6236dae4SAndroid Build Coastguard Worker      print $ll;
477*6236dae4SAndroid Build Coastguard Worker      print $log $ll;
478*6236dae4SAndroid Build Coastguard Worker    }
479*6236dae4SAndroid Build Coastguard Worker    close($f);
480*6236dae4SAndroid Build Coastguard Worker    close($log);
481*6236dae4SAndroid Build Coastguard Worker
482*6236dae4SAndroid Build Coastguard Worker    logit "autoreconf -fi was successful";
483*6236dae4SAndroid Build Coastguard Worker  }
484*6236dae4SAndroid Build Coastguard Worker  else {
485*6236dae4SAndroid Build Coastguard Worker    logit "autoreconf -fi was successful (dummy message)";
486*6236dae4SAndroid Build Coastguard Worker  }
487*6236dae4SAndroid Build Coastguard Worker
488*6236dae4SAndroid Build Coastguard Worker} else {
489*6236dae4SAndroid Build Coastguard Worker    # Show snapshot git commit when available
490*6236dae4SAndroid Build Coastguard Worker    if (open (my $f, '<', "docs/tarball-commit.txt")) {
491*6236dae4SAndroid Build Coastguard Worker      my $commit = <$f>;
492*6236dae4SAndroid Build Coastguard Worker      chomp $commit;
493*6236dae4SAndroid Build Coastguard Worker      logit "The most recent curl git commits:";
494*6236dae4SAndroid Build Coastguard Worker      logit "  $commit";
495*6236dae4SAndroid Build Coastguard Worker      close($f);
496*6236dae4SAndroid Build Coastguard Worker    }
497*6236dae4SAndroid Build Coastguard Worker}
498*6236dae4SAndroid Build Coastguard Worker
499*6236dae4SAndroid Build Coastguard Worker# Set timestamp to the one in curlver.h if this isn't a git test build.
500*6236dae4SAndroid Build Coastguard Workerif ((-f "include/curl/curlver.h") &&
501*6236dae4SAndroid Build Coastguard Worker    (open(my $f, "<", "include/curl/curlver.h"))) {
502*6236dae4SAndroid Build Coastguard Worker  while (<$f>) {
503*6236dae4SAndroid Build Coastguard Worker    chomp;
504*6236dae4SAndroid Build Coastguard Worker    if ($_ =~ /^\#define\s+LIBCURL_TIMESTAMP\s+\"(.+)\".*$/) {
505*6236dae4SAndroid Build Coastguard Worker      my $stampstring = $1;
506*6236dae4SAndroid Build Coastguard Worker      if ($stampstring !~ /DEV/) {
507*6236dae4SAndroid Build Coastguard Worker          $stampstring =~ s/\s+UTC//;
508*6236dae4SAndroid Build Coastguard Worker          $timestamp = $stampstring." UTC";
509*6236dae4SAndroid Build Coastguard Worker      }
510*6236dae4SAndroid Build Coastguard Worker      last;
511*6236dae4SAndroid Build Coastguard Worker    }
512*6236dae4SAndroid Build Coastguard Worker  }
513*6236dae4SAndroid Build Coastguard Worker  close($f);
514*6236dae4SAndroid Build Coastguard Worker}
515*6236dae4SAndroid Build Coastguard Worker
516*6236dae4SAndroid Build Coastguard Worker# Show timestamp we are using for this test build.
517*6236dae4SAndroid Build Coastguard Workerlogit "timestamp = $timestamp";
518*6236dae4SAndroid Build Coastguard Worker
519*6236dae4SAndroid Build Coastguard Workerif ($configurebuild) {
520*6236dae4SAndroid Build Coastguard Worker  if (-f "configure") {
521*6236dae4SAndroid Build Coastguard Worker    logit "configure created (at least it exists)";
522*6236dae4SAndroid Build Coastguard Worker  } else {
523*6236dae4SAndroid Build Coastguard Worker    mydie "no configure created/found";
524*6236dae4SAndroid Build Coastguard Worker  }
525*6236dae4SAndroid Build Coastguard Worker} else {
526*6236dae4SAndroid Build Coastguard Worker  logit "configure created (dummy message)"; # dummy message to feign success
527*6236dae4SAndroid Build Coastguard Worker}
528*6236dae4SAndroid Build Coastguard Worker
529*6236dae4SAndroid Build Coastguard Workersub findinpath {
530*6236dae4SAndroid Build Coastguard Worker  my $c;
531*6236dae4SAndroid Build Coastguard Worker  my $e;
532*6236dae4SAndroid Build Coastguard Worker  my $x = ($^O eq 'MSWin32') ? '.exe' : '';
533*6236dae4SAndroid Build Coastguard Worker  my $s = ($^O eq 'MSWin32') ? ';' : ':';
534*6236dae4SAndroid Build Coastguard Worker  my $p=$ENV{'PATH'};
535*6236dae4SAndroid Build Coastguard Worker  my @pa = split($s, $p);
536*6236dae4SAndroid Build Coastguard Worker  for $c (@_) {
537*6236dae4SAndroid Build Coastguard Worker    for $e (@pa) {
538*6236dae4SAndroid Build Coastguard Worker      if( -x "$e/$c$x") {
539*6236dae4SAndroid Build Coastguard Worker        return $c;
540*6236dae4SAndroid Build Coastguard Worker      }
541*6236dae4SAndroid Build Coastguard Worker    }
542*6236dae4SAndroid Build Coastguard Worker  }
543*6236dae4SAndroid Build Coastguard Worker}
544*6236dae4SAndroid Build Coastguard Worker
545*6236dae4SAndroid Build Coastguard Workermy $make = findinpath("gmake", "make", "nmake");
546*6236dae4SAndroid Build Coastguard Workerif(!$make) {
547*6236dae4SAndroid Build Coastguard Worker    mydie "Couldn't find make in the PATH";
548*6236dae4SAndroid Build Coastguard Worker}
549*6236dae4SAndroid Build Coastguard Worker# force to 'nmake' for VC builds
550*6236dae4SAndroid Build Coastguard Worker$make = "nmake" if ($targetos =~ /vc/);
551*6236dae4SAndroid Build Coastguard Workerlogit "going with $make as make";
552*6236dae4SAndroid Build Coastguard Worker
553*6236dae4SAndroid Build Coastguard Worker# change to build dir
554*6236dae4SAndroid Build Coastguard Workerchdir "$pwd/$build";
555*6236dae4SAndroid Build Coastguard Worker
556*6236dae4SAndroid Build Coastguard Workerif ($configurebuild) {
557*6236dae4SAndroid Build Coastguard Worker  # run configure script
558*6236dae4SAndroid Build Coastguard Worker  print `$CURLDIR/configure $confopts 2>&1`;
559*6236dae4SAndroid Build Coastguard Worker
560*6236dae4SAndroid Build Coastguard Worker  if (-f "lib/Makefile") {
561*6236dae4SAndroid Build Coastguard Worker    logit "configure seems to have finished fine";
562*6236dae4SAndroid Build Coastguard Worker  } else {
563*6236dae4SAndroid Build Coastguard Worker    mydie "configure didn't work";
564*6236dae4SAndroid Build Coastguard Worker  }
565*6236dae4SAndroid Build Coastguard Worker} else {
566*6236dae4SAndroid Build Coastguard Worker  logit "copying files to build dir ...";
567*6236dae4SAndroid Build Coastguard Worker  if ($^O eq 'MSWin32') {
568*6236dae4SAndroid Build Coastguard Worker    system("xcopy /s /q \"$CURLDIR\" .");
569*6236dae4SAndroid Build Coastguard Worker    system("buildconf.bat");
570*6236dae4SAndroid Build Coastguard Worker  }
571*6236dae4SAndroid Build Coastguard Worker  elsif ($^O eq 'linux') {
572*6236dae4SAndroid Build Coastguard Worker    system("cp -afr $CURLDIR/* .");
573*6236dae4SAndroid Build Coastguard Worker    system("cp -af $CURLDIR/Makefile.dist Makefile");
574*6236dae4SAndroid Build Coastguard Worker    system("$make -i -C lib -f Makefile.$targetos prebuild");
575*6236dae4SAndroid Build Coastguard Worker    system("$make -i -C src -f Makefile.$targetos prebuild");
576*6236dae4SAndroid Build Coastguard Worker    if (-d "$CURLDIR/ares") {
577*6236dae4SAndroid Build Coastguard Worker      system("cp -af $CURLDIR/ares/ares_build.h.dist ./ares/ares_build.h");
578*6236dae4SAndroid Build Coastguard Worker      system("$make -i -C ares -f Makefile.$targetos prebuild");
579*6236dae4SAndroid Build Coastguard Worker    }
580*6236dae4SAndroid Build Coastguard Worker  }
581*6236dae4SAndroid Build Coastguard Worker}
582*6236dae4SAndroid Build Coastguard Worker
583*6236dae4SAndroid Build Coastguard Workerif(-f "./libcurl.pc") {
584*6236dae4SAndroid Build Coastguard Worker  logit_spaced "display libcurl.pc";
585*6236dae4SAndroid Build Coastguard Worker  if(open(my $f, "<", "libcurl.pc")) {
586*6236dae4SAndroid Build Coastguard Worker    while(<$f>) {
587*6236dae4SAndroid Build Coastguard Worker      my $ll = $_;
588*6236dae4SAndroid Build Coastguard Worker      print $ll if(($ll !~ /^ *#/) && ($ll !~ /^ *$/));
589*6236dae4SAndroid Build Coastguard Worker    }
590*6236dae4SAndroid Build Coastguard Worker    close($f);
591*6236dae4SAndroid Build Coastguard Worker  }
592*6236dae4SAndroid Build Coastguard Worker}
593*6236dae4SAndroid Build Coastguard Worker
594*6236dae4SAndroid Build Coastguard Workerlogit_spaced "display lib/$confheader";
595*6236dae4SAndroid Build Coastguard Workeropen(my $f, "<", "lib/$confheader") or die "lib/$confheader: $!";
596*6236dae4SAndroid Build Coastguard Workerwhile (<$f>) {
597*6236dae4SAndroid Build Coastguard Worker  print if /^ *#/;
598*6236dae4SAndroid Build Coastguard Worker}
599*6236dae4SAndroid Build Coastguard Workerclose($f);
600*6236dae4SAndroid Build Coastguard Worker
601*6236dae4SAndroid Build Coastguard Workerif (($have_embedded_ares) &&
602*6236dae4SAndroid Build Coastguard Worker    (grepfile("^#define USE_ARES", "lib/$confheader"))) {
603*6236dae4SAndroid Build Coastguard Worker  print "\n";
604*6236dae4SAndroid Build Coastguard Worker  logit "setup to build ares";
605*6236dae4SAndroid Build Coastguard Worker
606*6236dae4SAndroid Build Coastguard Worker  if(-f "./ares/libcares.pc") {
607*6236dae4SAndroid Build Coastguard Worker    logit_spaced  "display ares/libcares.pc";
608*6236dae4SAndroid Build Coastguard Worker    if(open($f, "<", "ares/libcares.pc")) {
609*6236dae4SAndroid Build Coastguard Worker      while(<$f>) {
610*6236dae4SAndroid Build Coastguard Worker        my $ll = $_;
611*6236dae4SAndroid Build Coastguard Worker        print $ll if(($ll !~ /^ *#/) && ($ll !~ /^ *$/));
612*6236dae4SAndroid Build Coastguard Worker      }
613*6236dae4SAndroid Build Coastguard Worker      close($f);
614*6236dae4SAndroid Build Coastguard Worker    }
615*6236dae4SAndroid Build Coastguard Worker  }
616*6236dae4SAndroid Build Coastguard Worker
617*6236dae4SAndroid Build Coastguard Worker  if(-f "./ares/ares_build.h") {
618*6236dae4SAndroid Build Coastguard Worker    logit_spaced "display ares/ares_build.h";
619*6236dae4SAndroid Build Coastguard Worker    if(open($f, "<", "ares/ares_build.h")) {
620*6236dae4SAndroid Build Coastguard Worker      while(<$f>) {
621*6236dae4SAndroid Build Coastguard Worker        my $ll = $_;
622*6236dae4SAndroid Build Coastguard Worker        print $ll if(($ll =~ /^ *# *define *CARES_/) && ($ll !~ /__CARES_BUILD_H/));
623*6236dae4SAndroid Build Coastguard Worker      }
624*6236dae4SAndroid Build Coastguard Worker      close($f);
625*6236dae4SAndroid Build Coastguard Worker    }
626*6236dae4SAndroid Build Coastguard Worker  }
627*6236dae4SAndroid Build Coastguard Worker  else {
628*6236dae4SAndroid Build Coastguard Worker    mydie "no ares_build.h created/found";
629*6236dae4SAndroid Build Coastguard Worker  }
630*6236dae4SAndroid Build Coastguard Worker
631*6236dae4SAndroid Build Coastguard Worker  $confheader =~ s/curl/ares/;
632*6236dae4SAndroid Build Coastguard Worker  logit_spaced "display ares/$confheader";
633*6236dae4SAndroid Build Coastguard Worker  if(open($f, "<", "ares/$confheader")) {
634*6236dae4SAndroid Build Coastguard Worker      while (<$f>) {
635*6236dae4SAndroid Build Coastguard Worker          print if /^ *#/;
636*6236dae4SAndroid Build Coastguard Worker      }
637*6236dae4SAndroid Build Coastguard Worker      close($f);
638*6236dae4SAndroid Build Coastguard Worker  }
639*6236dae4SAndroid Build Coastguard Worker
640*6236dae4SAndroid Build Coastguard Worker  print "\n";
641*6236dae4SAndroid Build Coastguard Worker  logit "build ares";
642*6236dae4SAndroid Build Coastguard Worker  chdir "ares";
643*6236dae4SAndroid Build Coastguard Worker
644*6236dae4SAndroid Build Coastguard Worker  if ($targetos && !$configurebuild) {
645*6236dae4SAndroid Build Coastguard Worker      logit "$make -f Makefile.$targetos";
646*6236dae4SAndroid Build Coastguard Worker      open($f, "-|", "$make -f Makefile.$targetos 2>&1") or die;
647*6236dae4SAndroid Build Coastguard Worker  }
648*6236dae4SAndroid Build Coastguard Worker  else {
649*6236dae4SAndroid Build Coastguard Worker      logit "$make";
650*6236dae4SAndroid Build Coastguard Worker      open($f, "-|", "$make 2>&1") or die;
651*6236dae4SAndroid Build Coastguard Worker  }
652*6236dae4SAndroid Build Coastguard Worker  while (<$f>) {
653*6236dae4SAndroid Build Coastguard Worker    s/$pwd//g;
654*6236dae4SAndroid Build Coastguard Worker    print;
655*6236dae4SAndroid Build Coastguard Worker  }
656*6236dae4SAndroid Build Coastguard Worker  close($f);
657*6236dae4SAndroid Build Coastguard Worker
658*6236dae4SAndroid Build Coastguard Worker  if (-f "libcares$libext") {
659*6236dae4SAndroid Build Coastguard Worker    logit "ares is now built successfully (libcares$libext)";
660*6236dae4SAndroid Build Coastguard Worker  } else {
661*6236dae4SAndroid Build Coastguard Worker    mydie "ares build failed (libcares$libext)";
662*6236dae4SAndroid Build Coastguard Worker  }
663*6236dae4SAndroid Build Coastguard Worker
664*6236dae4SAndroid Build Coastguard Worker  # cd back to the curl build dir
665*6236dae4SAndroid Build Coastguard Worker  chdir "$pwd/$build";
666*6236dae4SAndroid Build Coastguard Worker}
667*6236dae4SAndroid Build Coastguard Worker
668*6236dae4SAndroid Build Coastguard Workermy $mkcmd = "$make -i" . ($targetos && !$configurebuild ? " $targetos" : "");
669*6236dae4SAndroid Build Coastguard Workerlogit "$mkcmd";
670*6236dae4SAndroid Build Coastguard Workeropen(my $f, "-|", "$mkcmd 2>&1") or die;
671*6236dae4SAndroid Build Coastguard Workerwhile (<$f>) {
672*6236dae4SAndroid Build Coastguard Worker  s/$pwd//g;
673*6236dae4SAndroid Build Coastguard Worker  print;
674*6236dae4SAndroid Build Coastguard Worker}
675*6236dae4SAndroid Build Coastguard Workerclose($f);
676*6236dae4SAndroid Build Coastguard Worker
677*6236dae4SAndroid Build Coastguard Workerif (-f "lib/libcurl$libext") {
678*6236dae4SAndroid Build Coastguard Worker  logit "libcurl was created fine (libcurl$libext)";
679*6236dae4SAndroid Build Coastguard Worker}
680*6236dae4SAndroid Build Coastguard Workerelse {
681*6236dae4SAndroid Build Coastguard Worker  mydie "libcurl was not created (libcurl$libext)";
682*6236dae4SAndroid Build Coastguard Worker}
683*6236dae4SAndroid Build Coastguard Worker
684*6236dae4SAndroid Build Coastguard Workerif (-f "src/curl$binext") {
685*6236dae4SAndroid Build Coastguard Worker  logit "curl was created fine (curl$binext)";
686*6236dae4SAndroid Build Coastguard Worker}
687*6236dae4SAndroid Build Coastguard Workerelse {
688*6236dae4SAndroid Build Coastguard Worker  mydie "curl was not created (curl$binext)";
689*6236dae4SAndroid Build Coastguard Worker}
690*6236dae4SAndroid Build Coastguard Worker
691*6236dae4SAndroid Build Coastguard Workerif (!$crosscompile || (($extvercmd ne '') && (-x $extvercmd))) {
692*6236dae4SAndroid Build Coastguard Worker  logit "display curl${binext} --version output";
693*6236dae4SAndroid Build Coastguard Worker  my $cmd = ($extvercmd ne '' ? $extvercmd.' ' : '')."./src/curl${binext} --version|";
694*6236dae4SAndroid Build Coastguard Worker  open($f, "<", $cmd);
695*6236dae4SAndroid Build Coastguard Worker  while(<$f>) {
696*6236dae4SAndroid Build Coastguard Worker    # strip CR from output on non-Windows platforms (WINE on Linux)
697*6236dae4SAndroid Build Coastguard Worker    s/\r// if ($^O ne 'MSWin32');
698*6236dae4SAndroid Build Coastguard Worker    print;
699*6236dae4SAndroid Build Coastguard Worker  }
700*6236dae4SAndroid Build Coastguard Worker  close($f);
701*6236dae4SAndroid Build Coastguard Worker}
702*6236dae4SAndroid Build Coastguard Worker
703*6236dae4SAndroid Build Coastguard Workerif ($configurebuild && !$crosscompile) {
704*6236dae4SAndroid Build Coastguard Worker  my $host_triplet = get_host_triplet();
705*6236dae4SAndroid Build Coastguard Worker  # build example programs for selected build targets
706*6236dae4SAndroid Build Coastguard Worker  if(($host_triplet =~ /([^-]+)-([^-]+)-irix(.*)/) ||
707*6236dae4SAndroid Build Coastguard Worker     ($host_triplet =~ /([^-]+)-([^-]+)-aix(.*)/) ||
708*6236dae4SAndroid Build Coastguard Worker     ($host_triplet =~ /([^-]+)-([^-]+)-osf(.*)/) ||
709*6236dae4SAndroid Build Coastguard Worker     ($host_triplet =~ /([^-]+)-([^-]+)-solaris2(.*)/)) {
710*6236dae4SAndroid Build Coastguard Worker    chdir "$pwd/$build/docs/examples";
711*6236dae4SAndroid Build Coastguard Worker    logit_spaced "build examples";
712*6236dae4SAndroid Build Coastguard Worker    open($f, "-|", "$make -i 2>&1") or die;
713*6236dae4SAndroid Build Coastguard Worker    open(my $log, ">", "$buildlog") or die;
714*6236dae4SAndroid Build Coastguard Worker    while (<$f>) {
715*6236dae4SAndroid Build Coastguard Worker      s/$pwd//g;
716*6236dae4SAndroid Build Coastguard Worker      print;
717*6236dae4SAndroid Build Coastguard Worker      print $log $_;
718*6236dae4SAndroid Build Coastguard Worker    }
719*6236dae4SAndroid Build Coastguard Worker    close($f);
720*6236dae4SAndroid Build Coastguard Worker    close($log);
721*6236dae4SAndroid Build Coastguard Worker    chdir "$pwd/$build";
722*6236dae4SAndroid Build Coastguard Worker  }
723*6236dae4SAndroid Build Coastguard Worker  # build and run full test suite
724*6236dae4SAndroid Build Coastguard Worker  my $o;
725*6236dae4SAndroid Build Coastguard Worker  if($runtestopts) {
726*6236dae4SAndroid Build Coastguard Worker      $o = "TEST_F=\"$runtestopts\" ";
727*6236dae4SAndroid Build Coastguard Worker  }
728*6236dae4SAndroid Build Coastguard Worker  logit "$make -k ${o}test-full";
729*6236dae4SAndroid Build Coastguard Worker  open($f, "-|", "$make -k ${o}test-full 2>&1") or die;
730*6236dae4SAndroid Build Coastguard Worker  open(my $log, ">", "$buildlog") or die;
731*6236dae4SAndroid Build Coastguard Worker  while (<$f>) {
732*6236dae4SAndroid Build Coastguard Worker    s/$pwd//g;
733*6236dae4SAndroid Build Coastguard Worker    print;
734*6236dae4SAndroid Build Coastguard Worker    print $log $_;
735*6236dae4SAndroid Build Coastguard Worker  }
736*6236dae4SAndroid Build Coastguard Worker  close($f);
737*6236dae4SAndroid Build Coastguard Worker  close($log);
738*6236dae4SAndroid Build Coastguard Worker
739*6236dae4SAndroid Build Coastguard Worker  if (grepfile("^TEST", $buildlog)) {
740*6236dae4SAndroid Build Coastguard Worker    logit "tests were run";
741*6236dae4SAndroid Build Coastguard Worker  } else {
742*6236dae4SAndroid Build Coastguard Worker    mydie "test suite failure";
743*6236dae4SAndroid Build Coastguard Worker  }
744*6236dae4SAndroid Build Coastguard Worker
745*6236dae4SAndroid Build Coastguard Worker  if (grepfile("^TESTFAIL:", $buildlog)) {
746*6236dae4SAndroid Build Coastguard Worker    logit "the tests were not successful";
747*6236dae4SAndroid Build Coastguard Worker  } else {
748*6236dae4SAndroid Build Coastguard Worker    logit "the tests were successful!";
749*6236dae4SAndroid Build Coastguard Worker  }
750*6236dae4SAndroid Build Coastguard Worker}
751*6236dae4SAndroid Build Coastguard Workerelse {
752*6236dae4SAndroid Build Coastguard Worker  if($crosscompile) {
753*6236dae4SAndroid Build Coastguard Worker    my $host_triplet = get_host_triplet();
754*6236dae4SAndroid Build Coastguard Worker    # build example programs for selected cross-compiles
755*6236dae4SAndroid Build Coastguard Worker    if(($host_triplet =~ /([^-]+)-([^-]+)-mingw(.*)/) ||
756*6236dae4SAndroid Build Coastguard Worker       ($host_triplet =~ /([^-]+)-([^-]+)-android(.*)/)) {
757*6236dae4SAndroid Build Coastguard Worker      chdir "$pwd/$build/docs/examples";
758*6236dae4SAndroid Build Coastguard Worker      logit_spaced "build examples";
759*6236dae4SAndroid Build Coastguard Worker      open($f, "-|", "$make -i 2>&1") or die;
760*6236dae4SAndroid Build Coastguard Worker      open(my $log, ">", "$buildlog") or die;
761*6236dae4SAndroid Build Coastguard Worker      while (<$f>) {
762*6236dae4SAndroid Build Coastguard Worker        s/$pwd//g;
763*6236dae4SAndroid Build Coastguard Worker        print;
764*6236dae4SAndroid Build Coastguard Worker        print $log $_;
765*6236dae4SAndroid Build Coastguard Worker      }
766*6236dae4SAndroid Build Coastguard Worker      close($f);
767*6236dae4SAndroid Build Coastguard Worker      close($log);
768*6236dae4SAndroid Build Coastguard Worker      chdir "$pwd/$build";
769*6236dae4SAndroid Build Coastguard Worker    }
770*6236dae4SAndroid Build Coastguard Worker    # build test harness programs for selected cross-compiles
771*6236dae4SAndroid Build Coastguard Worker    if($host_triplet =~ /([^-]+)-([^-]+)-mingw(.*)/) {
772*6236dae4SAndroid Build Coastguard Worker      chdir "$pwd/$build/tests";
773*6236dae4SAndroid Build Coastguard Worker      logit_spaced "build test harness";
774*6236dae4SAndroid Build Coastguard Worker      open(my $f, "-|", "$make -i 2>&1") or die;
775*6236dae4SAndroid Build Coastguard Worker      open(my $log, ">", "$buildlog") or die;
776*6236dae4SAndroid Build Coastguard Worker      while (<$f>) {
777*6236dae4SAndroid Build Coastguard Worker        s/$pwd//g;
778*6236dae4SAndroid Build Coastguard Worker        print;
779*6236dae4SAndroid Build Coastguard Worker        print $log $_;
780*6236dae4SAndroid Build Coastguard Worker      }
781*6236dae4SAndroid Build Coastguard Worker      close($f);
782*6236dae4SAndroid Build Coastguard Worker      close($log);
783*6236dae4SAndroid Build Coastguard Worker      chdir "$pwd/$build";
784*6236dae4SAndroid Build Coastguard Worker    }
785*6236dae4SAndroid Build Coastguard Worker    logit_spaced "cross-compiling, can't run tests";
786*6236dae4SAndroid Build Coastguard Worker  }
787*6236dae4SAndroid Build Coastguard Worker  # dummy message to feign success
788*6236dae4SAndroid Build Coastguard Worker  print "TESTDONE: 1 tests out of 0 (dummy message)\n";
789*6236dae4SAndroid Build Coastguard Worker}
790*6236dae4SAndroid Build Coastguard Worker
791*6236dae4SAndroid Build Coastguard Worker# create a tarball if we got that option.
792*6236dae4SAndroid Build Coastguard Workerif (($mktarball ne '') && (-x $mktarball)) {
793*6236dae4SAndroid Build Coastguard Worker  system($mktarball);
794*6236dae4SAndroid Build Coastguard Worker}
795*6236dae4SAndroid Build Coastguard Worker
796*6236dae4SAndroid Build Coastguard Worker# mydie to cleanup
797*6236dae4SAndroid Build Coastguard Workermydie "ending nicely";
798