1 #!/usr/local/bin/perl -w
3 # Run the test suite and generate a report
6 if (! -f
"Configure") {
7 print "Please run perl util/selftest.pl in the OpenSSL directory.\n";
21 my $sep="-----------------------------------------------------------------------------\n";
22 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";
24 open(OUT
,">$report") or die;
26 print OUT
"OpenSSL self-test report:\n\n";
29 $uname="??\n" if $uname eq "";
32 foreach $_ (split("\n",$c)) {
33 $os=$1 if (/Operating system: (.*)$/);
34 $platform0=$1 if (/Configuring for (.*)$/);
37 system "sh config" if (! -f
"Makefile");
39 if (open(IN
,"<Makefile")) {
41 $version=$1 if (/^VERSION=(.*)$/);
42 $platform=$1 if (/^PLATFORM=(.*)$/);
43 $options=$1 if (/^OPTIONS=(.*)$/);
44 $cc=$1 if (/^CC= *(.*)$/);
48 print OUT
"Error running config!\n";
51 $cversion=`$cc -v 2>&1`;
52 $cversion=`$cc -V 2>&1` if $cversion =~ "[Uu]sage";
53 $cversion=`$cc -V |head -1` if $cversion =~ "Error";
54 $cversion=`$cc --version` if $cversion eq "";
55 $cversion =~ s/Reading specs.*\n//;
56 $cversion =~ s/usage.*\n//;
59 if (open(IN
,"<CHANGES")) {
61 if (/\*\) (.{0,55})/ && !/applies to/) {
69 print OUT
"OpenSSL version: $version\n";
70 print OUT
"Last change: $last...\n";
71 print OUT
"Options: $options\n" if $options ne "";
72 print OUT
"OS (uname): $uname";
73 print OUT
"OS (config): $os\n";
74 print OUT
"Target (default): $platform0\n";
75 print OUT
"Target: $platform\n";
76 print OUT
"Compiler: $cversion\n";
79 print "Checking compiler...\n";
80 if (open(TEST
,">cctest.c")) {
81 print TEST
"#include <stdio.h>\n#include <stdlib.h>\n#include <errno.h>\nmain(){printf(\"Hello world\\n\");}\n";
83 system("$cc -o cctest cctest.c");
84 if (`./cctest` !~ /Hello world
/) {
85 print OUT
"Compiler doesn't work.\n";
86 print OUT
$not_our_fault;
89 system("ar r cctest.a /dev/null");
90 if (not -f
"cctest.a") {
91 print OUT
"Check your archive tool (ar).\n";
92 print OUT
$not_our_fault;
96 print OUT
"Can't create cctest.c\n";
98 if (open(TEST
,">cctest.c")) {
99 print TEST
"#include <stdio.h>\n#include <stdlib.h>\n#include <openssl/opensslv.h>\nmain(){printf(OPENSSL_VERSION_TEXT);}\n";
101 system("$cc -o cctest -Iinclude cctest.c");
102 $cctest = `./cctest`;
103 if ($cctest !~ /OpenSSL $version/) {
104 if ($cctest =~ /OpenSSL/) {
105 print OUT
"#include uses headers from different OpenSSL version!\n";
107 print OUT
"Can't compile test program!\n";
109 print OUT
$not_our_fault;
113 print OUT
"Can't create cctest.c\n";
116 print "Running make...\n";
117 if (system("make 2>&1 | tee make.log") > 255) {
119 print OUT
"make failed!\n";
120 if (open(IN
,"<make.log")) {
128 print OUT
"make.log not found!\n";
133 # Not sure why this is here. The tests themselves can detect if their
134 # particular feature isn't included, and should therefore skip themselves.
135 # To skip *all* tests just because one algorithm isn't included is like
136 # shooting mosquito with an elephant gun...
137 # -- Richard Levitte, inspired by problem report 1089
145 # print OUT "Test skipped.\n";
149 print "Running make test...\n";
150 if (system("make test 2>&1 | tee maketest.log") > 255)
152 print OUT
"make test failed!\n";
157 if ($ok and open(IN
,"<maketest.log")) {
159 $ok=2 if /^platform: $platform/;
165 print OUT
"Failure!\n";
166 if (open(IN
,"<make.log")) {
174 print OUT
"make.log not found!\n";
176 if (open(IN
,"<maketest.log")) {
183 print OUT
"maketest.log not found!\n";
186 print OUT
"Test passed.\n";
192 open(IN
,"<$report") or die;
200 print "\nTest report in file $report\n";