Annotation of embedaddon/curl/tests/testcurl.pl, revision 1.1.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>