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