Clean away $no_rfc3779 since we don't appear to use it at all
[openssl.git] / Configure
index 41fbf56eab27b5f4e48997752c3ce7354a2e4be5..ba3d844a15efb9137861d56843883ea38d991873 100755 (executable)
--- a/Configure
+++ b/Configure
@@ -46,6 +46,8 @@ my $usage="Usage: Configure [no-<cipher> ...] [enable-<cipher> ...] [-Dxxx] [-lx
 #               multithreaded applications (default is "threads" if we
 #               know how to do it)
 # [no-]shared  [don't] try to create shared libraries when supported.
+# [no-]pic      [don't] try to build position independent code when supported.
+#               If disabled, it also disables shared and dynamic-engine.
 # no-asm        do not use assembler
 # no-dso        do not compile in any native shared-library methods. This
 #               will ensure that all methods just return NULL.
@@ -206,11 +208,7 @@ $config{cross_compile_prefix}="";
 $config{fipslibdir}="/usr/local/ssl/fips-2.0/lib/";
 my $nofipscanistercheck=0;
 $config{baseaddr}="0xFB00000";
-my $no_threads=0;
 my $threads=0;
-$config{no_shared}=0; # but "no-shared" is default
-my $zlib=1;      # but "no-zlib" is default
-my $no_rfc3779=0;
 my $no_asm=0;
 my $no_dso=0;
 my $default_ranlib;
@@ -261,7 +259,7 @@ my @disablables = (
     "dsa",
     "dso",
     "dtls",
-    "dynamic[-_]engine",
+    "dynamic-engine",
     "ec",
     "ec2m",
     "ecdh",
@@ -284,6 +282,7 @@ my @disablables = (
     "nextprotoneg",
     "ocb",
     "ocsp",
+    "pic",
     "poly1305",
     "posix-io",
     "psk",
@@ -325,21 +324,26 @@ foreach my $proto ((@tls, @dtls))
        push(@disablables, "$proto-method");
        }
 
+my @deprecated_disablables = (
+    "ssl2",
+    );
+
 # All of the following is disabled by default (RC5 was enabled before 0.9.8):
 
-my %disabled = ( # "what"         => "comment"
-                "ec_nistp_64_gcc_128" => "default",
-                "egd"            => "default",
-                "md2"            => "default",
-                "rc5"            => "default",
-                "sctp"           => "default",
-                "shared"         => "default",
-                "ssl-trace"      => "default",
-                "unit-test"      => "default",
-                "zlib"           => "default",
-                "crypto-mdebug"  => "default",
-                "heartbeats"     => "default",
-              );
+our %disabled = ( # "what"         => "comment"
+                 "ec_nistp_64_gcc_128" => "default",
+                 "egd"            => "default",
+                 "md2"            => "default",
+                 "rc5"            => "default",
+                 "sctp"           => "default",
+                 "shared"         => "default",
+                 "ssl-trace"      => "default",
+                 "static-engine"  => "default",
+                 "unit-test"      => "default",
+                 "zlib"           => "default",
+                 "crypto-mdebug"  => "default",
+                 "heartbeats"     => "default",
+               );
 
 # Note: => pair form used for aesthetics, not to truly make a hash table
 my @disable_cascades = (
@@ -380,6 +384,12 @@ my @disable_cascades = (
     "tlsext"           => [ "srp", "heartbeats" ],
 
     "crypto-mdebug"     => [ "crypto-mdebug-backtrace" ],
+
+    # Without DSO, we can't load dynamic engines, so don't build them dynamic
+    "dso"               => [ "dynamic-engine" ],
+
+    # Without position independent code, there can be no shared libraries or DSOs
+    "pic"               => [ "shared", "dynamic-engine" ],
     );
 
 # Avoid protocol support holes.  Also disable all versions below N, if version
@@ -406,7 +416,8 @@ while ((my $first, my $second) = (shift @list, shift @list)) {
 
 my @generated_headers = (
     "include/openssl/opensslconf.h",
-    "crypto/include/internal/bn_conf.h"
+    "crypto/include/internal/bn_conf.h",
+    "crypto/include/internal/dso_conf.h"
     );
 
 my @generated_by_make_headers = (
@@ -485,6 +496,7 @@ if (grep /^reconf(igure)?$/, @argvcopy) {
 $config{perlargv} = [ @argvcopy ];
 
 my %unsupported_options = ();
+my %deprecated_options = ();
 foreach (@argvcopy)
        {
        # VMS is a case insensitive environment, and depending on settings
@@ -506,7 +518,12 @@ foreach (@argvcopy)
         if (/^(no|disable|enable)-(.+)$/)
                {
                my $word = $2;
-               if (!grep { $word =~ /^${_}$/ } @disablables)
+               if (grep { $word =~ /^${_}$/ } @deprecated_disablables)
+                       {
+                       $deprecated_options{$_} = 1;
+                       next;
+                       }
+               elsif (!grep { $word =~ /^${_}$/ } @disablables)
                        {
                        $unsupported_options{$_} = 1;
                        next;
@@ -543,6 +560,14 @@ foreach (@argvcopy)
                                 $disabled{$proto} = "option(tls)";
                                 }
                         }
+                elsif ($1 eq "static-engine")
+                        {
+                        delete $disabled{"dynamic-engine"};
+                        }
+                elsif ($1 eq "dynamic-engine")
+                        {
+                        $disabled{"dynamic-engine"} = "option";
+                        }
                 else
                         {
                         $disabled{$1} = "option";
@@ -550,6 +575,14 @@ foreach (@argvcopy)
                }
        elsif (/^enable-(.+)$/)
                {
+                if ($1 eq "static-engine")
+                        {
+                        $disabled{"dynamic-engine"} = "option";
+                        }
+                elsif ($1 eq "dynamic-engine")
+                        {
+                        delete $disabled{"dynamic-engine"};
+                        }
                my $algo = $1;
                delete $disabled{$algo};
 
@@ -673,6 +706,11 @@ foreach (@argvcopy)
                die "***** Unsupported api compatibility level: $config{api}\n",
         }
 
+       if (keys %deprecated_options)
+               {
+               warn "***** Deprecated options: ",
+                       join(", ", keys %deprecated_options), "\n";
+               }
        if (keys %unsupported_options)
                {
                die "***** Unsupported options: ",
@@ -740,12 +778,14 @@ foreach (sort (keys %disabled))
        if (/^dso$/)
                { $no_dso = 1; }
        elsif (/^threads$/)
-               { $no_threads = 1; }
+               { }
        elsif (/^shared$/)
-               { $config{no_shared} = 1; }
+               { }
+       elsif (/^pic$/)
+               { }
        elsif (/^zlib$/)
-               { $zlib = 0; }
-       elsif (/^static-engine$/)
+               { }
+       elsif (/^dynamic-engine$/)
                { }
        elsif (/^zlib-dynamic$/)
                { }
@@ -809,10 +849,18 @@ my %target = ( %{$table{$base_target}}, resolve_config($target) );
 &usage if (!%target || $target{template});
 
 $target{exe_extension}="";
-$target{exe_extension}=".exe" if ($config{target} eq "Cygwin" || $config{target} eq "DJGPP" || $config{target} =~ /^mingw/);
+$target{exe_extension}=".exe" if ($config{target} eq "DJGPP"
+                                  || $config{target} =~ /^(?:Cygwin|mingw)/);
 $target{exe_extension}=".nlm" if ($config{target} =~ /netware/);
 $target{exe_extension}=".pm"  if ($config{target} =~ /vos/);
 
+($target{shared_extension_simple}=$target{shared_extension})
+    =~ s|\.\$\(SHLIB_MAJOR\)\.\$\(SHLIB_MINOR\)||;
+$target{dso_extension}=$target{shared_extension_simple};
+($target{shared_import_extension}=$target{shared_extension_simple}.".a")
+    if ($config{target} =~ /^(?:Cygwin|mingw)/);
+
+
 $default_ranlib        = which("ranlib") || "true";
 $config{perl}  = $ENV{'PERL'} || which("perl5") || which("perl") || "perl";
 my $make       = $ENV{'MAKE'} || "make";
@@ -905,7 +953,7 @@ if (!$no_dso && $target{dso_scheme} ne "")
 
 my $thread_cflags = "";
 my @thread_defines;
-if ($target{thread_cflag} ne "(unknown)" && !$no_threads)
+if ($target{thread_cflag} ne "(unknown)" && !$disabled{threads})
        {
        # If we know how to do it, support threads by default.
        $threads = 1;
@@ -944,7 +992,7 @@ if ($threads)
        push @{$config{openssl_thread_defines}}, @thread_defines;
        }
 
-if ($zlib)
+unless ($disabled{zlib})
        {
        push @{$config{defines}}, "ZLIB";
        if (defined($disabled{"zlib-dynamic"}))
@@ -971,36 +1019,33 @@ if (defined($disabled{"deprecated"})) {
 
 if ($target{shared_target} eq "")
        {
-       $no_shared_warn = 1 if !$config{no_shared} && !$config{fips};
-       $config{no_shared} = 1;
-       }
-if (!$config{no_shared})
-       {
-       if ($target{shared_cflag} ne "")
-               {
-               push @{$config{defines}}, "OPENSSL_PIC";
-               $config{cflags} = "$target{shared_cflag} $config{cflags}";
-               }
+       $no_shared_warn = 1
+           if ((!$disabled{shared} || !$disabled{"dynamic-engine"})
+               && !$config{fips});
+       $disabled{shared} = "no-shared-target";
+       $disabled{pic} = $disabled{shared} = $disabled{"dynamic-engine"} =
+           "no-shared-target";
        }
 
-if ($builder ne "mk1mf")
-       {
-       # add {no-}static-engine to options to allow mkdef.pl to work without extra arguments
-       if ($config{no_shared})
-               {
-               push @{$config{openssl_other_defines}}, "OPENSSL_NO_DYNAMIC_ENGINE";
-               $config{options}.=" static-engine";
-               }
-       else
-               {
-               push @{$config{openssl_other_defines}}, "OPENSSL_NO_STATIC_ENGINE";
-               $config{options}.=" no-static-engine";
-               }
-       }
+if ($disabled{"dynamic-engine"}) {
+        push @{$config{defines}}, "OPENSSL_NO_DYNAMIC_ENGINE";
+        $config{dynamic_engines} = 0;
+} else {
+        push @{$config{defines}}, "OPENSSL_NO_STATIC_ENGINE";
+        $config{dynamic_engines} = 1;
+}
 
 #
 # Platform fix-ups
 #
+
+# This saves the build files from having to check
+if ($disabled{pic})
+       {
+       $target{shared_cflag} = $target{shared_ldflag} =
+               $target{shared_rcflag} = "";
+       }
+
 if ($target{sys_id} ne "")
        {
        push @{$config{openssl_sys_defines}}, "OPENSSL_SYS_$target{sys_id}";
@@ -1013,10 +1058,6 @@ if ($target{ranlib} eq "")
 
 if (!$no_asm) {
     $target{cpuid_asm_src}=$table{BASE}->{cpuid_asm_src} if ($config{processor} eq "386");
-    $target{cpuid_asm_src}.=" uplink.c uplink-x86.s"
-        if (grep { $_ eq "OPENSSL_USE_APPLINK"} @{$config{defines}}
-            or $config{cflags} =~ /(?:^|\s)-DOPENSSL_USE_APPLINK(?:\s|$)/);
-
     $target{bn_asm_src} =~ s/\w+-gf2m.c// if (defined($disabled{ec2m}));
 
     # bn-586 is the only one implementing bn_*_part_words
@@ -1039,7 +1080,7 @@ if (!$no_asm) {
     if ($target{md5_asm_src}) {
        push @{$config{defines}}, "MD5_ASM";
     }
-    $target{cast_asm_src}=$table{BASE}->{cast_asm_src} if (!$config{no_shared}); # CAST assembler is not PIC
+    $target{cast_asm_src}=$table{BASE}->{cast_asm_src} unless $disabled{pic}; # CAST assembler is not PIC
     if ($target{rmd160_asm_src}) {
        push @{$config{defines}}, "RMD160_ASM";
     }
@@ -1256,6 +1297,7 @@ if ($builder eq "unified") {
             split /^/m,
             $template->fill_in(HASH => { config => \%config,
                                          target => \%target,
+                                         disabled => \%disabled,
                                          builddir => abs2rel($buildd, $blddir),
                                          sourcedir => abs2rel($sourced, $blddir),
                                          buildtop => abs2rel($blddir, $blddir),
@@ -1374,8 +1416,8 @@ if ($builder eq "unified") {
             $unified_info{libraries}->{$library} = 1;
         }
 
-        die <<"EOF" if $config{no_shared} && scalar @engines;
-ENGINES can only be used if configured with 'shared'.
+        die <<"EOF" if scalar @engines and !$config{dynamic_engines};
+ENGINES can only be used if configured with 'dynamic-engine'.
 This is usually a fault in a build.info file.
 EOF
         foreach (@engines) {
@@ -1401,7 +1443,7 @@ EOF
 
         push @{$unified_info{rawlines}}, @rawlines;
 
-        if (!$config{no_shared}) {
+        unless ($disabled{shared}) {
             # Check sharednames.
             foreach (keys %sharednames) {
                 my $dest = cleanfile($buildd, $_, $blddir);
@@ -1542,9 +1584,9 @@ EOF
 
 # For the schemes that need it, we provide the old *_obj configs
 # from the *_asm_obj ones
-foreach (grep /_asm_src$/, keys %target) {
+foreach (grep /_(asm|aux)_src$/, keys %target) {
     my $src = $_;
-    (my $obj = $_) =~ s/_asm_src$/_obj/;
+    (my $obj = $_) =~ s/_(asm|aux)_src$/_obj/;
     ($target{$obj} = $target{$src}) =~ s/\.[csS]\b/.o/g;
 }
 
@@ -1830,7 +1872,7 @@ print <<"EOF";
 Configured for $target.
 EOF
 
-print <<"EOF" if (!$no_threads && !$threads);
+print <<"EOF" if (!$disabled{threads} && !$threads);
 
 The library could not be configured for supporting multi-threaded
 applications as the compiler options required on this system are not known.
@@ -1839,10 +1881,11 @@ EOF
 
 print <<"EOF" if ($no_shared_warn);
 
-You gave the option 'shared', which is not supported on this platform, so
-we will pretend you gave the option 'no-shared'.  If you know how to implement
-shared libraries, please let us know (but please first make sure you have
-tried with a current version of OpenSSL).
+The options 'shared', 'pic' and 'dynamic-engine' aren't supported on this
+platform, so we will pretend you gave the option 'no-pic', which also disables
+'shared' and 'dynamic-engine'.  If you know how to implement shared libraries
+or position independent code, please let us know (but please first make sure
+you have tried with a current version of OpenSSL).
 EOF
 
 ###### TO BE REMOVED BEFORE FINAL RELEASE
@@ -2171,6 +2214,9 @@ sub print_table_entry
        "shared_ldflag",
        "shared_rcflag",
        "shared_extension",
+       "shared_extension_simple",
+       "shared_import_extension",
+       "dso_extension",
        "obj_extension",
        "exe_extension",
        "ranlib",