]>
git.ipfire.org Git - thirdparty/openssl.git/blob - util/selftest.pl
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 = " \n Please ask your system administrator/vendor for more information. \n [Problems with your operating system setup should not be reported \n to 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> \n main(){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> \n main(){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 " \n Test report in file $report \n " ;