X-Git-Url: https://git.openssl.org/gitweb/?p=openssl.git;a=blobdiff_plain;f=util%2Fpl%2Funix.pl;h=aee4e1db24515ea775dac7dc5cd27c30764e4ad2;hp=7d901f0f145b7c85ee9a61db69c4e99898d5d691;hb=71614df485f9a71f6b234decc31168685a43087f;hpb=3b4d86bff5a8911a061a8a6e5ec1d21b1f651c18 diff --git a/util/pl/unix.pl b/util/pl/unix.pl index 7d901f0f14..aee4e1db24 100644 --- a/util/pl/unix.pl +++ b/util/pl/unix.pl @@ -26,6 +26,7 @@ else { $cflags="-O"; } } $obj='.o'; +$asm_suffix='.s'; $ofile='-o '; # EXE linking stuff @@ -69,6 +70,14 @@ $bf_enc_src=""; 'rc4-x86_64' => 'crypto/rc4', 'rc4-md5-x86_64' => 'crypto/rc4', 'ghash-x86_64' => 'crypto/modes', + 'aesni-gcm-x86_64' => 'crypto/modes', + 'aesni-sha256-x86_64' => 'crypto/aes', + 'rsaz-x86_64' => 'crypto/bn', + 'rsaz-avx2' => 'crypto/bn', + 'aesni-mb-x86_64' => 'crypto/aes', + 'sha1-mb-x86_64' => 'crypto/sha', + 'sha256-mb-x86_64' => 'crypto/sha', + 'ecp_nistz256-x86_64' => 'crypto/ec', ); # If I were feeling more clever, these could probably be extracted @@ -79,6 +88,9 @@ sub platform_perlasm_compile_target for $p (keys %perl1) { +# FIXME: export CC so rsaz-avx2 can test for it, since BSD make does +# not export variables, unlike GNU make. But this also requires fixing +# the .s.o rule to use CC! if ($target eq "\$(OBJ_D)/$p.o") { return << "EOF"; @@ -127,7 +139,7 @@ sub special_compile_target { return << "EOF"; \$(TMP_D)/x86_64-gcc.o: crypto/bn/asm/x86_64-gcc.c - \$(CC) \$(CFLAGS) -c -o \$@ crypto/bn/asm/x86_64-gcc.c + \$(CC) \$(LIB_CFLAGS) -c -o \$@ crypto/bn/asm/x86_64-gcc.c EOF } return undef; @@ -187,13 +199,18 @@ sub fixtests sub fixdeps { - my ($str) = @_; + 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; @@ -211,26 +228,49 @@ 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 ($t =~ /^@/) - { - $t =~ s/^@/\@cd \$(TEST_D) && /; - } - else + if (!$prev) { - $t = 'cd $(TEST_D) && ' . $t; + if ($t =~ /^@/) + { + $t =~ s/^@/\@cd \$(TEST_D) && /; + } + elsif ($t !~ /^\s*#/) + { + $t = 'cd $(TEST_D) && ' . $t; + } } $str .= "\t$t\n"; + $prev = $t =~/\\$/; } return $str; } +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) = @_; @@ -239,6 +279,8 @@ sub get_tests my %targets; my %deps; my %tests; + my %alltests; + my %fakes; while (my $line = ) { chomp $line; @@ -253,14 +295,30 @@ sub get_tests foreach my $t (@t) { $targets{$t} = ''; + $alltests{$t} = undef; } } - if (($line =~ /^(\S+):(.*)$/ && exists $targets{$1}) - || $line =~ /^(test_ss .*):(.*)/) + if (($line =~ /^(?\S+):(?.*)$/ && exists $targets{$1}) + || $line =~ /^(?test_(ss|gen) .*):(?.*)/) { - my $t = $1; - $deps{$t} = $2; + 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 (;;) { @@ -279,10 +337,10 @@ sub get_tests } } - delete $targets{test_jpake} if $no_jpake; + delete $alltests{test_jpake} if $no_jpake; delete $targets{test_ige} if $no_ige; - delete $targets{test_md2} if $no_md2; - delete $targets{test_rc5} if $no_rc5; + delete $alltests{test_md2} if $no_md2; + delete $alltests{test_rc5} if $no_rc5; my $tests; foreach my $t (keys %tests) @@ -290,39 +348,99 @@ sub get_tests $tests .= "$t = $tests{$t}\n"; } - my $all = 'test:'; my $each; foreach my $t (keys %targets) { next if $t eq ''; - if ($t =~ /^test_ss/) - { - $t =~ s/\s+/ \$(TEST_D)\//g; - $all .= ' test_ss'; - } - else - { - $all .= " $t"; - } - my $d = $deps{$t}; $d =~ s/\.\.\/apps/\$(BIN_D)/g; + $d =~ s/\.\.\/util/\$(TEST_D)/g; $d = fixtests($d, \%tests); - $d = fixdeps($d); + $d = fixdeps($d, \%fakes); my $r = $targets{$t}; - $r =~ s/\.\.\/apps/\$(BIN_D)/g; + $r =~ s/\.\.\/apps/..\/\$(BIN_D)/g; + $r =~ s/\.\.\/util/..\/\$(TEST_D)/g; $r =~ s/\.\.\/(\S+)/\$(SRC_D)\/$1/g; $r = fixrules($r); - $each .= "$t: \$(TEST_D) $d\n\tcd \$(TEST_D)\n$r\n"; + 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 = do_copy_rule('$(TEST_D)', 'test/bctest test/evptests.txt test/testgen test/cms-test.pl', ''); + 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', + 'testcrl.pem', + 'testx509.pem', + 'v3-cert1.pem', + 'v3-cert2.pem', + 'testreq2.pem', + 'testp7.pem', + 'pkcs7-1.pem', + 'trsa', + 'testrsa.pem', + 'testsid.pem', + 'testss', + 'testssl', + 'testsslproxy', + 'serverinfo.pem', + ); + my $copies = copy_scripts(1, 'test', @copies); + $copies .= copy_scripts(0, 'test', ('smcont.txt')); + + my @utils = ( 'shlib_wrap.sh', + 'opensslwrap.sh', + ); + $copies .= copy_scripts(1, 'util', @utils); + + my @apps = ( 'CA.sh', + 'openssl.cnf', + 'server2.pem', + ); + $copies .= copy_scripts(1, 'apps', @apps); + + $copies .= copy_scripts(1, 'crypto/evp', ('evptests.txt')); + + $scripts = "test_scripts: \$(TEST_D)/CA.sh \$(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"; + } + } - return "$copies\n$tests\n$all\n\n$each"; + return "$scripts\n$copies\n$tests\n$all\n\n$each"; } 1;