Annotation of embedaddon/curl/tests/testcurl.pl, revision 1.1

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

FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>