Asm build portability.
[openssl.git] / util / pl / unix.pl
index 7d901f0f145b7c85ee9a61db69c4e99898d5d691..72d3b441e142cd83ad490931c2a28ce8a9099de5 100644 (file)
@@ -26,6 +26,7 @@ else
                { $cflags="-O"; }
        }
 $obj='.o';
+$asm_suffix='.s';
 $ofile='-o ';
 
 # EXE linking stuff
@@ -69,6 +70,7 @@ $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',
          );
 
 # If I were feeling more clever, these could probably be extracted
@@ -211,26 +213,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 =~ /^@/)
+    if (!$prev)
       {
-      $t =~ s/^@/\@cd \$(TEST_D) && /;
-      }
-    else
-      {
-      $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 +264,7 @@ sub get_tests
   my %targets;
   my %deps;
   my %tests;
+  my %alltests;
   while (my $line = <M>)
     {
     chomp $line;
@@ -253,14 +279,15 @@ sub get_tests
       foreach my $t (@t)
        {
        $targets{$t} = '';
+       $alltests{$t} = undef;
         }
       }
 
-    if (($line =~ /^(\S+):(.*)$/ && exists $targets{$1})
-       || $line =~ /^(test_ss .*):(.*)/)
+    if (($line =~ /^(?<t>\S+):(?<d>.*)$/ && exists $targets{$1})
+       || $line =~ /^(?<t>test_(ss|gen) .*):(?<d>.*)/)
       {
-      my $t = $1;
-      $deps{$t} = $2;
+      my $t = $+{t};
+      $deps{$t} = $+{d};
       $deps{$t} =~ s/#.*$//;
       for (;;)
        {
@@ -279,10 +306,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 +317,84 @@ 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);
 
     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', '');
-
-  return "$copies\n$tests\n$all\n\n$each";
+  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',
+              );
+  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',
+            );
+  $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: ' . join(' ', keys %alltests);
+
+  return "$scripts\n$copies\n$tests\n$all\n\n$each";
   }
 
 1;