diff options
author | Richard Levitte <levitte@openssl.org> | 2015-04-21 20:09:36 +0200 |
---|---|---|
committer | Richard Levitte <levitte@openssl.org> | 2015-09-07 16:10:58 +0200 |
commit | fd9ad2300b280c0f71d24456bfbf04579331bc94 (patch) | |
tree | 37265c65bf6e1c19a28c977d0b60684f1750f36f | |
parent | 93de4f58ef8be2cb764343cb3102d41c81f11593 (diff) | |
download | openssl-fd9ad2300b280c0f71d24456bfbf04579331bc94.tar.gz |
Adapt mk1mf.pl and helpers to the new testing framework.
With the new testing framework, building a test target with mk1mf.pl
becomes a very simple thing. And especially, no more need to do the
amount of hackery in unix.pl we did.
Also, some tests need a working apps/CA.pl as well as rehashed certs
in certs/demo. So, move the code creating those files so it gets done
regardless, not just in non-mk1mf environments.
Reviewed-by: Rich Salz <rsalz@openssl.org>
-rwxr-xr-x | Configure | 18 | ||||
-rwxr-xr-x | util/mk1mf.pl | 17 | ||||
-rw-r--r-- | util/pl/BC-32.pl | 23 | ||||
-rw-r--r-- | util/pl/VC-32.pl | 23 | ||||
-rw-r--r-- | util/pl/unix.pl | 279 |
5 files changed, 81 insertions, 279 deletions
@@ -1983,6 +1983,16 @@ print "RC2 uses u$type[$rc2_int]\n" if $rc2_int != $def_int; print "BF_PTR used\n" if $bf_ptr == 1; print "BF_PTR2 used\n" if $bf_ptr == 2; +{ + my $perlguess = $perl =~ m@^/@ ? $perl : '/usr/local/bin/perl'; + + &dofile("tools/c_rehash",$perlguess, + '^#!/' => '#!%s', + '^my \$dir;$' => 'my $dir = "' . $openssldir . '";', + '^my \$prefix;$' => 'my $prefix = "' . $prefix . '";'); + &dofile("apps/CA.pl",$perl, + '^#!/' => '#!%s'); +} if($IsMK1MF) { open (OUT,">crypto/buildinf.h") || die "Can't open buildinf.h"; printf OUT <<EOF; @@ -2001,14 +2011,6 @@ EOF $make_targets .= " depend" if $depflags ne $default_depflags && $make_depend; (system $make_command.$make_targets) == 0 or die "make $make_targets failed" if $make_targets ne ""; - if ( $perl =~ m@^/@) { - &dofile("tools/c_rehash",$perl,'^#!/', '#!%s','^my \$dir;$', 'my $dir = "' . $openssldir . '";', '^my \$prefix;$', 'my $prefix = "' . $prefix . '";'); - &dofile("apps/CA.pl",$perl,'^#!/', '#!%s'); - } else { - # No path for Perl known ... - &dofile("tools/c_rehash",'/usr/local/bin/perl','^#!/', '#!%s','^my \$dir;$', 'my $dir = "' . $openssldir . '";', '^my \$prefix;$', 'my $prefix = "' . $prefix . '";'); - &dofile("apps/CA.pl",'/usr/local/bin/perl','^#!/', '#!%s'); - } if ($depflags ne $default_depflags && !$make_depend) { print <<EOF; diff --git a/util/mk1mf.pl b/util/mk1mf.pl index 6091a69519..9d8a47df4b 100755 --- a/util/mk1mf.pl +++ b/util/mk1mf.pl @@ -752,7 +752,9 @@ headers: \$(HEADER) lib: \$(LIBS_DEP) \$(E_SHLIB) -exe: \$(T_EXE) \$(BIN_D)$o\$(E_EXE)$exep +exe: apps testapps +apps: \$(BIN_D)$o\$(E_EXE)$exep +testapps: \$(T_EXE) install: all \$(MKDIR) \"\$(INSTALLTOP)\" @@ -777,15 +779,8 @@ reallyclean: EOF -if ($orig_platform ne 'copy') - { - $rules .= <<"EOF"; -test: \$(T_EXE) - cd \$(BIN_D) - ..${o}ms${o}test - -EOF - } +$rules .= &do_rehash_rule("rehash", "certs apps"); +$rules .= &do_test_rule("test", "rehash", "run_tests.pl"); my $platform_cpp_symbol = "MK1MF_PLATFORM_$platform"; $platform_cpp_symbol =~ s/-/_/g; @@ -1004,8 +999,6 @@ if ($fips) $rules.=&do_link_rule("\$(BIN_D)$o\$(E_EXE)$exep","\$(E_OBJ)","\$(LIBS_DEP)","\$(L_LIBS) \$(EX_LIBS)", ($fips && !$shlib) ? 2 : 0); -$rules .= get_tests('test/Makefile') if $orig_platform eq 'copy'; - print $defs; if ($platform eq "linux-elf") { diff --git a/util/pl/BC-32.pl b/util/pl/BC-32.pl index fd5c4b63af..3b2b85469c 100644 --- a/util/pl/BC-32.pl +++ b/util/pl/BC-32.pl @@ -94,6 +94,29 @@ if ($shlib) $tmp_def="tmp32dll"; } +sub do_rehash_rule { + my ($target, $deps) = @_; + my $ret = <<"EOF"; +$target: $deps + set OPENSSL=\$(BIN_D)${o}openssl.exe + set OPENSSL_DEBUG_MEMORY=on + \$(PERL) tools/c_rehash certs/demo +EOF + return $ret +} +sub do_test_rule { + my ($target, $deps, $test_cmd) = @_; + my $ret = <<"EOF"; +$target: $deps force.$target + set TOP=. + set BIN_D=\$(BIN_D) + set TEST_D=\$(TEST_D) + set PERL=\$(PERL) + \$(PERL) test\\$test_cmd +force.$target: +EOF +} + sub do_lib_rule { local($objs,$target,$name,$shlib)=@_; diff --git a/util/pl/VC-32.pl b/util/pl/VC-32.pl index bf6aebf6c3..a2d35c6eea 100644 --- a/util/pl/VC-32.pl +++ b/util/pl/VC-32.pl @@ -300,6 +300,29 @@ elsif ($shlib && $FLAVOR =~ /CE/) $lib_cflag.=" -D_DLL" if (!$fipscanisterbuild); } +sub do_rehash_rule { + my ($target, $deps) = @_; + my $ret = <<"EOF"; +$target: $deps + set OPENSSL=\$(BIN_D)${o}openssl.exe + set OPENSSL_DEBUG_MEMORY=on + \$(PERL) tools/c_rehash certs/demo +EOF + return $ret +} +sub do_test_rule { + my ($target, $deps, $test_cmd) = @_; + my $ret = <<"EOF"; +$target: $deps force.$target + set TOP=. + set BIN_D=\$(BIN_D) + set TEST_D=\$(TEST_D) + set PERL=\$(PERL) + \$(PERL) test\\$test_cmd +force.$target: +EOF +} + sub do_lib_rule { my($objs,$target,$name,$shlib,$ign,$base_addr) = @_; diff --git a/util/pl/unix.pl b/util/pl/unix.pl index 40bbe0d842..528d4d0e4f 100644 --- a/util/pl/unix.pl +++ b/util/pl/unix.pl @@ -186,267 +186,28 @@ sub which } } -sub fixtests - { - my ($str, $tests) = @_; - - foreach my $t (keys %$tests) - { - $str =~ s/(\.\/)?\$\($t\)/\$(TEST_D)\/$tests->{$t}/g; - } - - return $str; - } - -sub fixdeps - { - my ($str, $fakes) = @_; - - my @t = split(/\s+/, $str); - $str = ''; - foreach my $t (@t) - { - $str .= ' ' if $str ne ''; - if (exists($fakes->{$t})) - { - $str .= $fakes->{$t}; - next; - } - if ($t =~ /^[^\/]+$/) - { - $str .= '$(TEST_D)/' . $t; - } - else - { - $str .= $t; - } - } - - return $str; - } - -sub fixrules - { - my ($str) = @_; - - # Compatible with -j... -# $str =~ s/^(\s+@?)/$1cd \$(TEST_D) && /; -# return $str; - - # Compatible with not -j. - my @t = split("\n", $str); - $str = ''; - my $prev; - foreach my $t (@t) - { - $t =~ s/^\s+//; - if (!$prev) - { - if ($t =~ /^@/) - { - $t =~ s/^@/\@cd \$(TEST_D) && /; - } - elsif ($t !~ /^\s*#/ && $t !~ /^echo/) - { - $t = 'cd $(TEST_D) && ' . $t; - } - } - $str .= "\t$t\n"; - $prev = $t =~/\\$/; - } - return $str; +sub do_rehash_rule { + my ($target, $deps) = @_; + my $ret = <<"EOF"; +$target: $deps + (OPENSSL="`pwd`/util/opensslwrap.sh"; \\ + OPENSSL_DEBUG_MEMORY=on; \\ + export OPENSSL OPENSSL_DEBUG_MEMORY; \\ + \$(PERL) tools/c_rehash certs/demo) +EOF + return $ret } +sub do_test_rule { + my ($target, $deps, $test_cmd) = @_; + my $ret = <<"EOF"; +$target: $deps force.$target + TOP=. BIN_D=\$(BIN_D) TEST_D=\$(TEST_D) \\ + PERL=\$(PERL) \$(PERL) test/$test_cmd +force.$target: -sub copy_scripts - { - my ($sed, $src, @targets) = @_; - - my $s = ''; - foreach my $t (@targets) - { - # Copy first so we get file modes... - $s .= "\$(TEST_D)/$t: \$(SRC_D)/$src/$t\n\tcp \$(SRC_D)/$src/$t \$(TEST_D)/$t\n"; - $s .= "\tsed -e 's/\\.\\.\\/apps/..\\/\$(OUT_D)/' -e 's/\\.\\.\\/util/..\\/\$(TEST_D)/' < \$(SRC_D)/$src/$t > \$(TEST_D)/$t\n" if $sed; - $s .= "\n"; - } - return $s; - } - -sub get_tests - { - my ($makefile) = @_; - - open(M, $makefile) || die "Can't open $makefile: $!"; - my %targets; - my %deps; - my %tests; - my %alltests; - my %fakes; - while (my $line = <M>) - { - chomp $line; - while ($line =~ /^(.*)\\$/) - { - $line = $1 . <M>; - } - - if ($line =~ /^alltests:(.*)$/) - { - my @t = split(/\s+/, $1); - foreach my $t (@t) - { - $targets{$t} = ''; - $alltests{$t} = undef; - } - } - - if (($line =~ /^(?<t>\S+):(?<d>.*)$/ && exists $targets{$1}) - || $line =~ /^(?<t>test_(ss|gen) .*):(?<d>.*)/) - { - my $t = $+{t}; - my $d = $+{d}; - # If there are multiple targets stupid FreeBSD make runs the - # rules once for each dependency that matches one of the - # targets. Running the same rule twice concurrently causes - # breakage, so replace with a fake target. - if ($t =~ /\s/) - { - ++$fake; - my @targets = split /\s+/, $t; - $t = "_fake$fake"; - foreach my $f (@targets) - { - $fakes{$f} = $t; - } - } - $deps{$t} = $d; - $deps{$t} =~ s/#.*$//; - for (;;) - { - $line = <M>; - chomp $line; - last if $line eq ''; - $targets{$t} .= "$line\n"; - } - next; - } - - if ($line =~ /^(\S+TEST)=\s*(\S+)$/) - { - $tests{$1} = $2; - next; - } - } - - delete $alltests{test_jpake} if $no_jpake; - delete $targets{test_ige} if $no_ige; - delete $alltests{test_md2} if $no_md2; - delete $alltests{test_rc5} if $no_rc5; - - my $tests; - foreach my $t (keys %tests) - { - $tests .= "$t = $tests{$t}\n"; - } - - my $each; - foreach my $t (keys %targets) - { - next if $t eq ''; - - my $d = $deps{$t}; - $d =~ s/\.\.\/apps/\$(BIN_D)/g; - $d =~ s/\.\.\/util/\$(TEST_D)/g; - $d = fixtests($d, \%tests); - $d = fixdeps($d, \%fakes); - - my $r = $targets{$t}; - $r =~ s/\.\.\/apps/..\/\$(BIN_D)/g; - $r =~ s/\.\.\/util/..\/\$(TEST_D)/g; - $r =~ s/\.\.\/(\S+)/\$(SRC_D)\/$1/g; - $r = fixrules($r); - - next if $r eq ''; - - $t =~ s/\s+/ \$(TEST_D)\//g; - - $each .= "$t: test_scripts $d\n\t\@echo '$t test started'\n$r\t\@echo '$t test done'\n\n"; - } - - # FIXME: Might be a clever way to figure out what needs copying - my @copies = ( 'bctest', - 'testgen', - 'cms-test.pl', - 'tx509', - 'test.cnf', - 'testenc', - 'tocsp', - 'testca', - 'CAss.cnf', - 'testtsa', - 'CAtsa.cnf', - 'Uss.cnf', - 'P1ss.cnf', - 'P2ss.cnf', - 'tcrl', - 'tsid', - 'treq', - 'tpkcs7', - 'tpkcs7d', - 'tkey', - 'testcrl.pem', - 'testx509.pem', - 'v3-cert1.pem', - 'v3-cert2.pem', - 'testreq2.pem', - 'testp7.pem', - 'pkcs7-1.pem', - 'trsa', - 'testdsa.pem', - 'testdsapub.pem', - 'testec-p256.pem', - 'testecpub-p256.pem', - 'testrsa.pem', - 'testrsapub.pem', - 'testsid.pem', - 'testss', - 'testssl', - 'testsslproxy', - 'serverinfo.pem', - ); - my $copies = copy_scripts(1, 'test', @copies); - $copies .= copy_scripts(0, 'test', ('smcont.txt', 'evptests.txt')); - - - my @utils = ( 'shlib_wrap.sh', - 'opensslwrap.sh', - ); - $copies .= copy_scripts(1, 'util', @utils); - - my @apps = ( 'CA.pl', - 'openssl.cnf', - 'server2.pem', - ); - $copies .= copy_scripts(1, 'apps', @apps); - - $scripts = "test_scripts: \$(TEST_D)/CA.pl \$(TEST_D)/opensslwrap.sh \$(TEST_D)/openssl.cnf \$(TEST_D)/shlib_wrap.sh ocsp smime\n"; - $scripts .= "\nocsp:\n\tcp -R test/ocsp-tests \$(TEST_D)\n"; - $scripts .= "\smime:\n\tcp -R test/smime-certs \$(TEST_D)\n"; - - my $all = 'test:'; - foreach my $t (keys %alltests) - { - if (exists($fakes{$t})) - { - $all .= " $fakes{$t}"; - } - else - { - $all .= " $t"; - } - } +EOF + return $ret; +} - return "$scripts\n$copies\n$tests\n$all\n\n$each"; - } 1; |