Configure: restore original logic for -DWHIRLPOOL_ASM.
[openssl.git] / Configure
index 9dc63439623993eb301702c2ebe0e07f3cc7c831..3c2e16a26c51609ed8c8c421cd44046ae4fc7f77 100755 (executable)
--- a/Configure
+++ b/Configure
@@ -65,32 +65,8 @@ my $usage="Usage: Configure [no-<cipher> ...] [enable-<cipher> ...] [experimenta
 # DEBUG_SAFESTACK use type-safe stacks to enforce type-safety on stack items
 #              provided to stack calls. Generates unique stack functions for
 #              each possible stack type.
-# DES_PTR      use pointer lookup vs arrays in the DES in crypto/des/des_locl.h
-# DES_RISC1    use different DES_ENCRYPT macro that helps reduce register
-#              dependancies but needs to more registers, good for RISC CPU's
-# DES_RISC2    A different RISC variant.
-# DES_UNROLL   unroll the inner DES loop, sometimes helps, somtimes hinders.
-# DES_INT      use 'int' instead of 'long' for DES_LONG in crypto/des/des.h
-#              This is used on the DEC Alpha where long is 8 bytes
-#              and int is 4
 # BN_LLONG     use the type 'long long' in crypto/bn/bn.h
-# MD2_CHAR     use 'char' instead of 'int' for MD2_INT in crypto/md2/md2.h
-# MD2_LONG     use 'long' instead of 'int' for MD2_INT in crypto/md2/md2.h
-# IDEA_SHORT   use 'short' instead of 'int' for IDEA_INT in crypto/idea/idea.h
-# IDEA_LONG    use 'long' instead of 'int' for IDEA_INT in crypto/idea/idea.h
-# RC2_SHORT    use 'short' instead of 'int' for RC2_INT in crypto/rc2/rc2.h
-# RC2_LONG     use 'long' instead of 'int' for RC2_INT in crypto/rc2/rc2.h
 # RC4_CHAR     use 'char' instead of 'int' for RC4_INT in crypto/rc4/rc4.h
-# RC4_LONG     use 'long' instead of 'int' for RC4_INT in crypto/rc4/rc4.h
-# RC4_INDEX    define RC4_INDEX in crypto/rc4/rc4_locl.h.  This turns on
-#              array lookups instead of pointer use.
-# RC4_CHUNK    enables code that handles data aligned at long (natural CPU
-#              word) boundary.
-# RC4_CHUNK_LL enables code that handles data aligned at long long boundary
-#              (intended for 64-bit CPUs running 32-bit OS).
-# BF_PTR       use 'pointer arithmatic' for Blowfish (unsafe on Alpha).
-# BF_PTR2      intel specific version (generic version is more efficient).
-#
 # Following are set automatically by this script
 #
 # MD5_ASM      use some extra md5 assember,
@@ -121,14 +97,8 @@ my $warn_make_depend = 0;
 # This adds backtrace information to the memory leak info.
 my $memleak_devteam_backtrace = "-rdynamic -DCRYPTO_MDEBUG_BACKTRACE";
 
-
 my $strict_warnings = 0;
 
-my $x86_gcc_des="DES_PTR DES_RISC1 DES_UNROLL";
-
-# MD2_CHAR slags pentium pros
-my $x86_gcc_opts="RC4_INDEX MD2_INT";
-
 # As for $BSDthreads. Idea is to maintain "collective" set of flags,
 # which would cover all BSD flavors. -pthread applies to them all,
 # but is treated differently. OpenBSD expands is as -D_POSIX_THREAD
@@ -222,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;
 
@@ -841,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},
@@ -849,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";
@@ -869,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*//;
@@ -917,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)
        {
@@ -935,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;
        }
 
@@ -973,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
@@ -1022,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
@@ -1126,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";
@@ -1142,86 +1070,37 @@ if (!$no_asm) {
     }
 }
 
-$config{makedepprog} = "makedepend";
-if ($target{cc} eq "gcc" || ($target{cc} eq 'cc' && $config{target} =~ /darwin/)) {
-    $config{makedepprog} = $target{cc};
-}
-# On different platforms, shared library suffixes takes interesting forms.
-# On Most Unixen, it's .so.{version} or .sl.{version}, while on MacOS X,
-# it's .{version}.dylib.  We're want to separate the two so we can calculate
-# symlinks.
-# FIXME: is this actually needed any more?  Makefile.shared seems to just
-# symlink a file name without SOVER to the file with full SOVER, nothing in
-# between.
-if ($target{shared_extension} =~ /^(|(?<e>\.s[ol])(?<v>\..*)|(?<v>\..*)(?<e>\.dylib))$/) {
-    my @vernums = split /\./, $+{v};
-    shift @vernums;             # Because the initial period in shlib_extension.
-    my @s = ();
-    while (@vernums) {
-       pop @vernums;
-       push @s, join(".", $+{e} eq ".dylib" ? "" : $+{e},
-                     @vernums,
-                     $+{e} eq ".dylib" ? $+{e} : () );
-    }
-    $config{shared_link_extensions} = join(" ", @s);
-} else {
-    $config{shared_link_extensions} = "";
-}
+my $ecc = $target{cc};
+$ecc = "clang" if `$target{cc} --version 2>&1` =~ /clang/;
+
+$config{makedepprog} =
+    $ecc eq "gcc" || $ecc eq "clang" ? $target{cc} : "makedepend";
 $config{depflags} =~ s/^\s*//;
 
 
 # Deal with bn_ops ###################################################
 
-$config{des_ptr}               =0;
-$config{des_risc1}             =0;
-$config{des_risc2}             =0;
-$config{des_unroll}            =0;
 $config{bn_ll}                 =0;
-$config{rc4_idx}               =0;
-$config{bf_ptr}                        =0;
 $config{export_var_as_fn}      =0;
 my $def_int="unsigned int";
 $config{rc4_int}               =$def_int;
-$config{rc4_chunk}             ="";
-$config{md2_int}               =$def_int;
-$config{idea_int}              =$def_int;
-$config{rc2_int}               =$def_int;
-($config{b64l},$config{b64},$config{b32},$config{b16},$config{b8})=(0,0,1,0,0);
-
-$config{des_int} = "unsigned long";
+($config{b64l},$config{b64},$config{b32})=(0,0,1);
 
+my $count = 0;
 foreach (sort split(/\s+/,$target{bn_ops})) {
-    $config{des_ptr}=1                         if /DES_PTR/;
-    $config{des_risc1}=1                       if /DES_RISC1/;
-    $config{des_risc2}=1                       if /DES_RISC2/;
-    $config{des_unroll}=1                      if /DES_UNROLL/;
-    $config{des_int}="unsigned int"            if /DES_INT/;
-    $config{bn_ll}=1                           if /BN_LLONG/;
-    $config{rc4_int}="unsigned char"           if /RC4_CHAR/;
-    $config{rc4_int}="unsigned long"           if /RC4_LONG/;
-    $config{rc4_idx}=1                         if /RC4_INDEX/;
-    $config{rc4_chunk}="unsigned long"         if /RC4_CHUNK/;
-    $config{rc4_chunk}="unsigned long long"    if /RC4_CHUNK_LL/;
-    $config{md2_int}="unsigned char"           if /MD2_CHAR/;
-    $config{md2_int}="unsigned long"           if /MD2_LONG/;
-    $config{idea_int}="unsigned char"          if /IDEA_CHAR/;
-    $config{idea_int}="unsigned long"          if /IDEA_LONG/;
-    $config{rc2_int}="unsigned char"           if /RC2_CHAR/;
-    $config{rc2_int}="unsigned long"           if /RC2_LONG/;
-    $config{bf_ptr}=1                          if $_ eq "BF_PTR";
-    $config{bf_ptr}=2                          if $_ eq "BF_PTR2";
-    ($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{b64l},$config{b64},$config{b32},$config{b16},$config{b8})
-       =(0,0,0,1,0)                            if /SIXTEEN_BIT/;
-    ($config{b64l},$config{b64},$config{b32},$config{b16},$config{b8})
-       =(0,0,0,0,1)                            if /EIGHT_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) #######################
@@ -1237,9 +1116,6 @@ if (defined($config{api})) {
     $config{cflags} .= " $apiflag";
 }
 
-my $ecc = $target{cc};
-$ecc = "clang" if `$target{cc} --version 2>&1` =~ /clang/;
-
 if ($strict_warnings)
        {
        my $wopt;
@@ -1263,7 +1139,7 @@ if ($strict_warnings)
                        }
                if ($target =~ /^BSD-/)
                        {
-                       $config{lflags} .= " -lexecinfo";
+                       $config{ex_libs} .= " -lexecinfo";
                        }
                }
        }
@@ -1346,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";
@@ -1372,29 +1249,17 @@ print "\n";
 print "SIXTY_FOUR_BIT_LONG mode\n" if $config{b64l};
 print "SIXTY_FOUR_BIT mode\n" if $config{b64};
 print "THIRTY_TWO_BIT mode\n" if $config{b32};
-print "SIXTEEN_BIT mode\n" if $config{b16};
-print "EIGHT_BIT mode\n" if $config{b8};
-print "DES_PTR used\n" if $config{des_ptr};
-print "DES_RISC1 used\n" if $config{des_risc1};
-print "DES_RISC2 used\n" if $config{des_risc2};
-print "DES_UNROLL used\n" if $config{des_unroll};
-print "DES_INT used\n" if $config{des_int} =~ / int$/;
 print "BN_LLONG mode\n" if $config{bn_ll};
 print "RC4 uses $config{rc4_int}\n" if $config{rc4_int} != $def_int;
-print "RC4_INDEX mode\n" if $config{rc4_idx};
-print "RC4_CHUNK is undefined\n" unless $config{rc4_chunk};
-print "RC4_CHUNK is $config{rc4_chunk}\n" if $config{rc4_chunk};
-print "MD2 uses $config{md2_int}\n" if $config{md2_int} != $def_int;
-print "IDEA uses $config{idea_int}\n" if $config{idea_int} != $def_int;
-print "RC2 uses $config{rc2_int}\n" if $config{rc2_int} != $def_int;
-print "BF_PTR used\n" if $config{bf_ptr} == 1;
-print "BF_PTR2 used\n" if $config{bf_ptr} == 2;
 
-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");
 
-foreach my $alg ( 'bf', 'bn', 'des', 'rc4' ) {
+foreach my $alg ( 'bn' ) {
     run_dofile("crypto/include/internal/${alg}_conf.h.in",
               "crypto/include/internal/${alg}_conf.h");
 }
@@ -1402,23 +1267,30 @@ foreach my $alg ( 'bf', 'bn', 'des', 'rc4' ) {
 # 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 {
@@ -1764,7 +1636,9 @@ sub run_dofile()
     my $in = shift;
     my $out = shift;
 
-    # should we remove $out ?
+    unlink $out || warn "Can't remove $out, $!"
+        if -f $out;
+    die "Can't open $in, $!" unless -f $in;
     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, $!";
@@ -1791,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",