File:  [ELWIX - Embedded LightWeight unIX -] / embedaddon / curl / tests / testcurl.pl
Revision 1.1.1.1 (vendor branch): download - view: text, annotated - select for diffs - revision graph
Wed Jun 3 10:01:16 2020 UTC (5 years ago) by misho
Branches: curl, MAIN
CVS tags: v7_70_0p4, HEAD
curl

    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>