Configure: restore original logic for -DWHIRLPOOL_ASM.
[openssl.git] / Configure
index e1d1989352535882adb1131aaf9f8008d18e86fb..3c2e16a26c51609ed8c8c421cd44046ae4fc7f77 100755 (executable)
--- a/Configure
+++ b/Configure
@@ -192,7 +192,6 @@ my $zlib=1;      # but "no-zlib" is default
 my $no_rfc3779=0;
 my $no_asm=0;
 my $no_dso=0;
-my $Makefile="Makefile";
 my $default_ranlib;
 $config{fips}=0;
 
@@ -811,7 +810,7 @@ $config{openssldir} = catdir($config{prefix}, $config{openssldir})
 # Allow environment CC to override compiler...
 $target{cc} = $ENV{CC} || $target{cc};
 
-# For cflags and lflags, add the debug_ or release_ attributes
+# For cflags, lflags and ex_libs, add the debug_ or release_ attributes
 # Do it in such a way that no spurious space is appended (hence the grep).
 $config{cflags} = join(" ",
                       grep { $_ ne "" } ($target{cflags},
@@ -819,6 +818,9 @@ $config{cflags} = join(" ",
 $config{lflags} = join(" ",
                       grep { $_ ne "" } ($target{lflags},
                                          $target{$build_prefix."lflags"}));
+$config{ex_libs} = join(" ",
+                       grep { $_  ne "" } ($target{ex_libs},
+                                           $target{$build_prefix."ex_libs"}));
 
 $target{ranlib} = $ENV{'RANLIB'} || $target{ranlib} || $default_ranlib;
 $target{ar} = $ENV{'AR'} || "ar";
@@ -839,11 +841,6 @@ $config{enginesdir}=$config{prefix} . "/" . $config{libdir}  . "/engines";
 
 $config{cflags} .= "$exp_cflags";
 
-# '%' in $config{lflags} is used to split flags to "pre-" and post-flags
-my ($pre,$post)=split('%',$config{lflags});
-if (defined($post))    { $config{prelflags}=$pre; $config{lflags}=$post;       }
-else                   { $config{prelflags}="";   $config{lflags}=$pre;        }
-
 if ($target =~ /^mingw/ && `$target{cc} --target-help 2>&1` !~ m/-mno-cygwin/m)
        {
        $config{cflags} =~ s/-mno-cygwin\s*//;
@@ -887,7 +884,7 @@ if (!$no_dso && $target{dso_scheme} ne "")
        $config{cflags} = "$dso_cflags $config{cflags}";
        }
 
-my $thread_cflags;
+my $thread_cflags = "";
 my @thread_defines;
 if ($target{thread_cflag} ne "(unknown)" && !$no_threads)
        {
@@ -905,34 +902,25 @@ if ($target{thread_cflag} eq "(unknown)" && $threads)
                print "provide any system-specific compiler options\n";
                exit(1);
                }
-       $thread_cflags="-DOPENSSL_THREADS $config{cflags}" ;
+       $thread_cflags="-DOPENSSL_THREADS" ;
        push @thread_defines, "OPENSSL_THREADS";
        }
 else
        {
-       $thread_cflags="-DOPENSSL_THREADS $target{thread_cflag} $config{cflags}";
+       $thread_cflags="-DOPENSSL_THREADS $target{thread_cflag}";
        push @thread_defines, "OPENSSL_THREADS";
-#      my $def;
-#      foreach $def (split ' ',$target{thread_cflag})
-#              {
-#              if ($def =~ s/^-D// && $def !~ /^_/)
-#                      {
-#                      push @thread_defines, "$def";
-#                      }
-#              }
        }
 
-$config{lflags}="$libs$config{lflags}" if ($libs ne "");
+$config{ex_libs}="$libs$config{ex_libs}" if ($libs ne "");
 
 if ($no_asm)
        {
        $config{cflags}=~s/-D[BL]_ENDIAN//              if ($config{fips});
-       $thread_cflags=~s/-D[BL]_ENDIAN//       if ($config{fips});
        }
 
 if ($threads)
        {
-       $config{cflags}.=$thread_cflags;
+       $config{cflags} = "$thread_cflags $config{cflags}" if $thread_cflags;
        push @{$config{openssl_thread_defines}}, @thread_defines;
        }
 
@@ -943,11 +931,11 @@ if ($zlib)
                {
                if (defined($withargs{"zlib-lib"}))
                        {
-                       $config{lflags} .= " -L" . $withargs{"zlib-lib"} . " -lz";
+                       $config{ex_libs} .= " -L" . $withargs{"zlib-lib"} . " -lz";
                        }
                else
                        {
-                       $config{lflags} .= " -lz";
+                       $config{ex_libs} .= " -lz";
                        }
                }
        else
@@ -992,38 +980,6 @@ if ($target{build_scheme}->[0] ne "mk1mf")
 #
 # Platform fix-ups
 #
-if ($target =~ /-icc$/)        # Intel C compiler
-       {
-       my $iccver=0;
-       if (open(FD,"$target{cc} -V 2>&1 |"))
-               {
-               while(<FD>) { $iccver=$1 if (/Version ([0-9]+)\./); }
-               close(FD);
-               }
-       if ($iccver>=8)
-               {
-               $config{cflags}=~s/-KPIC/-fPIC/;
-               # Eliminate unnecessary dependency from libirc.a. This is
-               # essential for shared library support, as otherwise
-               # apps/openssl can end up in endless loop upon startup...
-               $config{cflags}.=" -Dmemcpy=__builtin_memcpy -Dmemset=__builtin_memset";
-               }
-       if ($iccver>=9)
-               {
-               $config{lflags}.=" -i-static";
-               $config{lflags}=~s/-no_cpprt/-no-cpprt/;
-               }
-       if ($iccver>=10)
-               {
-               $config{lflags}=~s/-i-static/-static-intel/;
-               }
-       if ($iccver>=11)
-               {
-               $config{cflags}.=" -no-intel-extensions";       # disable Cilk
-               $config{lflags}=~s/-no-cpprt/-no-cxxlib/;
-               }
-       }
-
 # Unlike other OSes (like Solaris, Linux, Tru64, IRIX) BSD run-time
 # linkers (tested OpenBSD, NetBSD and FreeBSD) "demand" RPATH set on
 # .so objects. Apparently application RPATH is not global and does
@@ -1096,10 +1052,12 @@ if (!$no_asm) {
        $config{cflags}.=" -DVPAES_ASM" if ($target{aes_obj} =~ m/vpaes/);
        $config{cflags}.=" -DBSAES_ASM" if ($target{aes_obj} =~ m/bsaes/);
     }
-    if ($target{wp_obj} =~ /mmx/ && $config{processor} eq "386") {
-       $target{wp_obj}=$table{BASE}->{wp_obj};
-    } elsif (!$disabled{"whirlpool"}) {
-       $config{cflags}.=" -DWHIRLPOOL_ASM";
+    if ($target{wp_obj} =~ /mmx/) {
+        if ($config{processor} eq "386") {
+           $target{wp_obj}=$table{BASE}->{wp_obj};
+       } elsif (!$disabled{"whirlpool"}) {
+           $config{cflags}.=" -DWHIRLPOOL_ASM";
+       }
     }
     if ($target{modes_obj} =~ /ghash-/) {
        $config{cflags}.=" -DGHASH_ASM";
@@ -1126,20 +1084,23 @@ $config{bn_ll}                  =0;
 $config{export_var_as_fn}      =0;
 my $def_int="unsigned int";
 $config{rc4_int}               =$def_int;
-$config{rc2_int}               =$def_int;
 ($config{b64l},$config{b64},$config{b32})=(0,0,1);
 
+my $count = 0;
 foreach (sort split(/\s+/,$target{bn_ops})) {
-    $config{bn_ll}=1                           if /BN_LLONG/;
-    $config{rc4_int}="unsigned char"           if /RC4_CHAR/;
-    ($config{b64l},$config{b64},$config{b32},$config{b16},$config{b8})
-       =(0,1,0,0,0)                            if /SIXTY_FOUR_BIT/;
-    ($config{b64l},$config{b64},$config{b32},$config{b16},$config{b8})
-       =(1,0,0,0,0)                            if /SIXTY_FOUR_BIT_LONG/;
-    ($config{b64l},$config{b64},$config{b32},$config{b16},$config{b8})
-       =(0,0,1,0,0)                            if /THIRTY_TWO_BIT/;
-    $config{export_var_as_fn}=1                        if /EXPORT_VAR_AS_FN/;
+    $count++ if /SIXTY_FOUR_BIT|SIXTY_FOUR_BIT_LONG|THIRTY_TWO_BIT/;
+    $config{export_var_as_fn}=1                 if $_ eq 'EXPORT_VAR_AS_FN';
+    $config{bn_ll}=1                           if $_ eq 'BN_LLONG';
+    $config{rc4_int}="unsigned char"           if $_ eq 'RC4_CHAR';
+    ($config{b64l},$config{b64},$config{b32})
+       =(0,1,0)                                if $_ eq 'SIXTY_FOUR_BIT';
+    ($config{b64l},$config{b64},$config{b32})
+       =(1,0,0)                                if $_ eq 'SIXTY_FOUR_BIT_LONG';
+    ($config{b64l},$config{b64},$config{b32})
+       =(0,0,1)                                if $_ eq 'THIRTY_TWO_BIT';
 }
+die "Exactly one of SIXTY_FOUR_BIT|SIXTY_FOUR_BIT_LONG|THIRTY_TWO_BIT can be set in bn_ops\n"
+    if $count > 1;
 
 
 # Hack cflags for better warnings (dev option) #######################
@@ -1178,7 +1139,7 @@ if ($strict_warnings)
                        }
                if ($target =~ /^BSD-/)
                        {
-                       $config{lflags} .= " -lexecinfo";
+                       $config{ex_libs} .= " -lexecinfo";
                        }
                }
        }
@@ -1261,7 +1222,8 @@ close(OUT);
 print "IsMK1MF       =", ($target{build_scheme}->[0] eq "mk1mf" ? "yes" : "no"), "\n";
 print "CC            =$target{cc}\n";
 print "CFLAG         =$config{cflags}\n";
-print "EX_LIBS       =$config{lflags}\n";
+print "LFLAGS        =$config{lflags}\n";
+print "EX_LIBS       =$config{ex_libs}\n";
 print "CPUID_OBJ     =$target{cpuid_obj}\n";
 print "BN_ASM        =$target{bn_obj}\n";
 print "EC_ASM        =$target{ec_obj}\n";
@@ -1289,9 +1251,11 @@ print "SIXTY_FOUR_BIT mode\n" if $config{b64};
 print "THIRTY_TWO_BIT mode\n" if $config{b32};
 print "BN_LLONG mode\n" if $config{bn_ll};
 print "RC4 uses $config{rc4_int}\n" if $config{rc4_int} != $def_int;
-print "RC2 uses $config{rc2_int}\n" if $config{rc2_int} != $def_int;
 
-run_dofile("$Makefile.in","$Makefile");
+run_dofile("Makefile.in","Makefile");
+
+run_dofile("util/domd.in", "util/domd");
+chmod 0755, "util/domd";
 
 run_dofile("include/openssl/opensslconf.h.in", "include/openssl/opensslconf.h");
 
@@ -1303,23 +1267,30 @@ foreach my $alg ( 'bn' ) {
 # Copy all Makefile.in to Makefile (except top-level)
 use File::Find;
 use IO::File;
-find(sub {
-        return if ($_ ne "Makefile.in" || $File::Find::dir eq ".");
-        my $in = IO::File->new($_, "r") or
-            die sprintf "Error reading Makefile.in in %s: !$\n",
+find(
+    {
+        preprocess => sub {
+            grep(!/^\./, @_);
+        },
+        wanted => sub {
+            return if ($_ ne "Makefile.in" || $File::Find::dir eq ".");
+            my $in = IO::File->new($_, "r") or
+                die sprintf "Error reading Makefile.in in %s: !$\n",
                 $File::Find::dir;
-        my $out = IO::File->new("Makefile", "w") or
-            die sprintf "Error writing Makefile in %s: !$\n",
+            my $out = IO::File->new("Makefile", "w") or
+                die sprintf "Error writing Makefile in %s: !$\n",
                 $File::Find::dir;
-        print $out "# Generated from $_, do not edit\n";
-        while (my $line = <$in>) { print $out $line }
-        $in->close() or
-            die sprintf "Error reading Makefile.in in %s: !$\n",
+            print $out "# Generated from $_, do not edit\n";
+            while (my $line = <$in>) { print $out $line }
+            $in->close() or
+                die sprintf "Error reading Makefile.in in %s: !$\n",
                 $File::Find::dir;
-        $out->close() or
-            die sprintf "Error writing Makefile in %s: !$\n",
+            $out->close() or
+                die sprintf "Error writing Makefile in %s: !$\n",
                 $File::Find::dir;
-    }, ".");
+        },
+    },
+    ".");
 
 my %builders = (
     unixmake => sub {
@@ -1665,8 +1636,9 @@ sub run_dofile()
     my $in = shift;
     my $out = shift;
 
+    unlink $out || warn "Can't remove $out, $!"
+        if -f $out;
     die "Can't open $in, $!" unless -f $in;
-    # should we remove $out ?
     system("$config{perl} -I. -Mconfigdata util/dofile.pl -o\"Configure\" $in > $out.new");
     exit 1 if $? != 0;
     rename("$out.new", $out) || die "Can't rename $out.new, $!";
@@ -1693,8 +1665,11 @@ sub print_table_entry
        "unistd",
        "ld",
        "lflags",
+       "ex_libs",
        "debug_lflags",
+       "debug_ex_libs",
        "release_lflags",
+       "release_ex_libs",
        "bn_ops",
        "cpuid_obj",
        "bn_obj",