X-Git-Url: https://git.openssl.org/gitweb/?a=blobdiff_plain;f=util%2Fselftest.pl;h=d1d11593fa27f0aea1cb0456df9ca6c50a561418;hb=697958313ba48c8ebc832ab8f9f2b845fb7acfd4;hp=ad0a6ab2d31f944107c0bbe2568b87ed415879be;hpb=ac9c1bcb8164bf661119bc112b6d25c7cde7b604;p=openssl.git diff --git a/util/selftest.pl b/util/selftest.pl index ad0a6ab2d3..d1d11593fa 100644 --- a/util/selftest.pl +++ b/util/selftest.pl @@ -1,7 +1,12 @@ -#!/usr/local/bin/perl -w +#! /usr/bin/env perl +# Copyright 2000-2016 The OpenSSL Project Authors. All Rights Reserved. # +# Licensed under the OpenSSL license (the "License"). You may not use +# this file except in compliance with the License. You can obtain a copy +# in the file LICENSE in the source distribution or at +# https://www.openssl.org/source/license.html + # Run the test suite and generate a report -# if (! -f "Configure") { print "Please run perl util/selftest.pl in the OpenSSL directory.\n"; @@ -19,12 +24,14 @@ my $ok=0; my $cc="cc"; my $cversion="??"; my $sep="-----------------------------------------------------------------------------\n"; +my $not_our_fault="\nPlease ask your system administrator/vendor for more information.\n[Problems with your operating system setup should not be reported\nto the OpenSSL project.]\n"; open(OUT,">$report") or die; print OUT "OpenSSL self-test report:\n\n"; $uname=`uname -a`; +$uname="??\n" if $uname eq ""; $c=`sh config -t`; foreach $_ (split("\n",$c)) { @@ -32,9 +39,9 @@ foreach $_ (split("\n",$c)) { $platform0=$1 if (/Configuring for (.*)$/); } -system "sh config" if (! -f "Makefile.ssl"); +system "sh config" if (! -f "Makefile"); -if (open(IN,") { $version=$1 if (/^VERSION=(.*)$/); $platform=$1 if (/^PLATFORM=(.*)$/); @@ -47,14 +54,16 @@ if (open(IN,"&1`; -$cversion=`$cc -V 2>&1` if $cversion =~ "usage"; +$cversion=`$cc -V 2>&1` if $cversion =~ "[Uu]sage"; +$cversion=`$cc -V |head -1` if $cversion =~ "Error"; +$cversion=`$cc --version` if $cversion eq ""; $cversion =~ s/Reading specs.*\n//; $cversion =~ s/usage.*\n//; -chomp $cversion; +$cversion =~ s|\R$||; if (open(IN,") { - if (/\*\) (.{0,55})/) { + if (/\*\) (.{0,55})/ && !/applies to/) { $last=$1; last; } @@ -64,6 +73,7 @@ if (open(IN,"test.c")) { - print TEST "#include \nmain(){printf(\"Hello world\\n\");}\n"; +if (open(TEST,">cctest.c")) { + print TEST "#include \n#include \n#include \nmain(){printf(\"Hello world\\n\");}\n"; close(TEST); - system("$cc -o cctest test.c"); + system("$cc -o cctest cctest.c"); if (`./cctest` !~ /Hello world/) { print OUT "Compiler doesn't work.\n"; + print OUT $not_our_fault; + goto err; + } + system("ar r cctest.a /dev/null"); + if (not -f "cctest.a") { + print OUT "Check your archive tool (ar).\n"; + print OUT $not_our_fault; goto err; } } else { - print OUT "Can't create test.c\n"; + print OUT "Can't create cctest.c\n"; } -if (open(TEST,">test.c")) { - print TEST "#include \nmain(){printf(OPENSSL_VERSION_TEXT);}\n"; +if (open(TEST,">cctest.c")) { + print TEST "#include \n#include \n#include \nmain(){printf(OPENSSL_VERSION_TEXT);}\n"; close(TEST); - system("$cc -o cctest -Iinclude test.c"); + system("$cc -o cctest -Iinclude cctest.c"); $cctest = `./cctest`; if ($cctest !~ /OpenSSL $version/) { if ($cctest =~ /OpenSSL/) { @@ -94,10 +111,11 @@ if (open(TEST,">test.c")) { } else { print OUT "Can't compile test program!\n"; } + print OUT $not_our_fault; goto err; } } else { - print OUT "Can't create test.c\n"; + print OUT "Can't create cctest.c\n"; } print "Running make...\n"; @@ -117,15 +135,31 @@ if (system("make 2>&1 | tee make.log") > 255) { goto err; } +# Not sure why this is here. The tests themselves can detect if their +# particular feature isn't included, and should therefore skip themselves. +# To skip *all* tests just because one algorithm isn't included is like +# shooting mosquito with an elephant gun... +# -- Richard Levitte, inspired by problem report 1089 +# +#$_=$options; +#s/no-asm//; +#s/no-shared//; +#s/no-krb5//; +#if (/no-/) +#{ +# print OUT "Test skipped.\n"; +# goto err; +#} + print "Running make test...\n"; -if (system("make test 2>&1 | tee make.log") > 255) +if (system("make test 2>&1 | tee maketest.log") > 255) { print OUT "make test failed!\n"; } else { $ok=1; } -if ($ok and open(IN,") { $ok=2 if /^platform: $platform/; } @@ -144,6 +178,15 @@ if ($ok != 2) { } else { print OUT "make.log not found!\n"; } + if (open(IN,") { + print OUT; + } + close(IN); + print OUT $sep; + } else { + print OUT "maketest.log not found!\n"; + } } else { print OUT "Test passed.\n"; } @@ -153,8 +196,12 @@ close(OUT); print "\n"; open(IN,"<$report") or die; while () { - last if /$sep/; + if (/$sep/) { + print "[...]\n"; + last; + } print; } -print "Test report in file $report\n"; +print "\nTest report in file $report\n"; +die if $ok != 2;