X-Git-Url: https://git.openssl.org/?p=openssl.git;a=blobdiff_plain;f=Configure;h=080bc06fd4ec5d352d92531038f2bd9462953abd;hp=41fbf56eab27b5f4e48997752c3ce7354a2e4be5;hb=317be63875e59efa34be0075eaff3c033ef6969f;hpb=ce192ebed0f5445076996b46c279a1499fdc8948 diff --git a/Configure b/Configure index 41fbf56eab..080bc06fd4 100755 --- a/Configure +++ b/Configure @@ -46,6 +46,8 @@ my $usage="Usage: Configure [no- ...] [enable- ...] [-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. @@ -92,11 +94,11 @@ my $gcc_devteam_warn = "-DPEDANTIC -DREF_DEBUG -DDEBUG_UNUSED -DBIO_DEBUG" # TODO(openssl-team): fix problems and investigate if (at least) the # following warnings can also be enabled: # -Wswitch-enum -# -Wunused-macros # -Wcast-align # -Wunreachable-code -# -Wlanguage-extension-token -# -Wextended-offsetof +# -Wlanguage-extension-token -- no, we use asm() +# -Wunused-macros -- no, too tricky for BN and _XOPEN_SOURCE etc +# -Wextended-offsetof -- no, needed in CMS ASN1 code my $clang_devteam_warn = "" . " -Qunused-arguments" . " -Wextra" @@ -206,13 +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; $config{fips}=0; @@ -261,7 +257,7 @@ my @disablables = ( "dsa", "dso", "dtls", - "dynamic[-_]engine", + "dynamic-engine", "ec", "ec2m", "ecdh", @@ -284,6 +280,7 @@ my @disablables = ( "nextprotoneg", "ocb", "ocsp", + "pic", "poly1305", "posix-io", "psk", @@ -325,21 +322,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 +382,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 +414,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 +494,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 +516,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 +558,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 +573,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}; @@ -646,11 +677,6 @@ foreach (@argvcopy) $user_cflags.=" ".$_; } } - elsif ($_ =~ /^([^:]+):(.+)$/) - { - eval "\$table{\$1} = \"$2\""; # allow $xxx constructs in the string - $target=$1; - } else { die "target already defined - $target (offending arg: $_)\n" if ($target ne ""); @@ -673,6 +699,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: ", @@ -738,14 +769,16 @@ foreach (sort (keys %disabled)) printf " no-%-12s %-10s", $_, "[$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$/) { } @@ -762,14 +795,13 @@ foreach (sort (keys %disabled)) my ($ALGO, $algo); ($ALGO = $algo = $_) =~ tr/[\-a-z]/[_A-Z]/; - if (/^asm$/ || /^err$/ || /^hw$/ || /^hw-/ + if (/^asm$/ || /^err$/ || /^hw$/ || /^hw-/ || /^async$/ || /^autoalginit/ || /^autoerrinit/) { push @{$config{openssl_other_defines}}, "OPENSSL_NO_$ALGO"; print " OPENSSL_NO_$ALGO"; if (/^err$/) { push @user_defines, "OPENSSL_NO_ERR"; } - elsif (/^asm$/) { $no_asm = 1; } } else { @@ -804,15 +836,26 @@ if ($d) { } $config{target} = $target; delete $table{$base_target}->{template}; # or the next test will fail. -my %target = ( %{$table{$base_target}}, resolve_config($target) ); +my %target = resolve_config($target); &usage if (!%target || $target{template}); +# Set up defaults +my %target = ( %{$table{$base_target}}, %target ); + $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"; @@ -868,7 +911,7 @@ if ($target =~ /^mingw/ && `$target{cc} --target-help 2>&1` =~ m/-mno-cygwin/m) $target{shared_ldflag} .= " -mno-cygwin"; } -if ($target =~ /linux.*-mips/ && !$no_asm && $user_cflags !~ /-m(ips|arch=)/) { +if ($target =~ /linux.*-mips/ && !$disabled{asm} && $user_cflags !~ /-m(ips|arch=)/) { # minimally required architecture flags for assembly modules $config{cflags}="-mips2 $config{cflags}" if ($target =~ /mips32/); $config{cflags}="-mips3 $config{cflags}" if ($target =~ /mips64/); @@ -884,7 +927,7 @@ my $no_user_defines=0; # has support compiled in for them. Currently each method is enabled # by a define "DSO_" ... we translate the "dso_scheme" config # string entry into using the following logic; -if (!$no_dso && $target{dso_scheme} ne "") +if (!$disabled{dso} && $target{dso_scheme} ne "") { $target{dso_scheme} =~ tr/[a-z]/[A-Z]/; if ($target{dso_scheme} eq "DLFCN") @@ -905,7 +948,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; @@ -931,7 +974,7 @@ else $config{ex_libs}="$libs$config{ex_libs}" if ($libs ne ""); -if ($no_asm) +if ($disabled{asm}) { @{$config{defines}} = grep !/^[BL]_ENDIAN$/, @{$config{defines}} if ($config{fips}); @@ -944,7 +987,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 +1014,37 @@ 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} = ""; + } +else + { + push @{$config{defines}}, "OPENSSL_PIC"; + } + if ($target{sys_id} ne "") { push @{$config{openssl_sys_defines}}, "OPENSSL_SYS_$target{sys_id}"; @@ -1011,12 +1055,8 @@ if ($target{ranlib} eq "") $target{ranlib} = $default_ranlib; } -if (!$no_asm) { +unless ($disabled{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 +1079,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"; } @@ -1226,6 +1266,8 @@ if ($builder eq "unified") { if (-f catfile($srcdir, "engines", $_, "build.info")); } + $config{build_infos} = [ ]; + foreach (@build_infos) { my $sourced = catdir($srcdir, $_->[0]); my $buildd = catdir($blddir, $_->[0]); @@ -1249,6 +1291,7 @@ if ($builder eq "unified") { my %renames = (); my %sharednames = (); + push @{$config{build_infos}}, catfile(abs2rel($sourced, $blddir), $f); my $template = Text::Template->new(TYPE => 'FILE', SOURCE => catfile($sourced, $f)); die "Something went wrong with $sourced/$f: $!\n" unless $template; @@ -1256,6 +1299,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 +1418,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 +1445,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 +1586,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; } @@ -1560,7 +1604,7 @@ use warnings; use Exporter; #use vars qw(\@ISA \@EXPORT); our \@ISA = qw(Exporter); -our \@EXPORT = qw(\%config \%target %withargs %unified_info); +our \@EXPORT = qw(\%config \%target %disabled %withargs %unified_info); EOF print OUT "our %config = (\n"; @@ -1830,7 +1874,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 +1883,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 @@ -1888,14 +1933,14 @@ exit(0); # Configuration file reading ######################################### # Helper function to implement conditional inheritance depending on the -# value of $no_asm. Used in inherit_from values as follows: +# value of $disabled{asm}. Used in inherit_from values as follows: # # inherit_from => [ "template", asm("asm_tmpl") ] # sub asm { my @x = @_; sub { - $no_asm ? () : @x; + $disabled{asm} ? () : @x; } } @@ -1926,12 +1971,20 @@ sub _add { } } sub add_before { - my $separator = shift; + my $separator = " "; + if (ref($_[$#_]) eq "HASH") { + my $opts = pop; + $separator = $opts->{separator}; + } my @x = @_; sub { _add($separator, @x, @_) }; } sub add { - my $separator = shift; + my $separator = " "; + if (ref($_[$#_]) eq "HASH") { + my $opts = pop; + $separator = $opts->{separator}; + } my @x = @_; sub { _add($separator, @_, @x) }; } @@ -2029,7 +2082,7 @@ sub resolve_config { # value. # - Otherwise, this target's value is assumed to be a string that # will simply override the inherited list of values. - my $default_combiner = add(" "); + my $default_combiner = add(); my %all_keys = map { $_ => 1 } (keys %combined_inheritance, @@ -2171,6 +2224,9 @@ sub print_table_entry "shared_ldflag", "shared_rcflag", "shared_extension", + "shared_extension_simple", + "shared_import_extension", + "dso_extension", "obj_extension", "exe_extension", "ranlib", @@ -2183,14 +2239,24 @@ sub print_table_entry if ($type eq "TABLE") { print "\n"; print "*** $target\n"; - printf "\$%-12s = %s\n", $_, $target{$_} foreach (@sequence); + foreach (@sequence) { + if (ref($target{$_}) eq "ARRAY") { + printf "\$%-12s = %s\n", $_, join(" ", @{$target{$_}}); + } else { + printf "\$%-12s = %s\n", $_, $target{$_}; + } + } } elsif ($type eq "HASH") { my $largest = length((sort { length($a) <=> length($b) } @sequence)[-1]); print " '$target' => {\n"; foreach (@sequence) { if ($target{$_}) { - print " '",$_,"'"," " x ($largest - length($_))," => '",$target{$_},"',\n"; + if (ref($target{$_}) eq "ARRAY") { + print " '",$_,"'"," " x ($largest - length($_))," => [ ",join(", ", map { "'$_'" } @{$target{$_}})," ],\n"; + } else { + print " '",$_,"'"," " x ($largest - length($_))," => '",$target{$_},"',\n"; + } } } print " },\n";