summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorRichard Levitte <levitte@openssl.org>2016-02-19 22:08:37 +0100
committerRichard Levitte <levitte@openssl.org>2016-02-20 16:51:31 +0100
commit343ec2b083b82ccf9ce96020bc95320390296f1f (patch)
treee159c94c1ebe2bb60fec21911c095b74e15865fe
parent45502bfe19fb03c9f343b03fa6434ee0bece8428 (diff)
Build dynamic engines even if configured "no-shared"
Until now, the engines in engines/ were only built as dynamicaly loadable ones if shared libraries were built. We not dissociate the two and can build dynamicaly loadable engines even if we only build static libcrypto and libssl. This is controlled with the option (enable|disable|no)-static-engine, defaulting to no-static-engine. Note that the engines in crypto/engine/ (dynamic and cryptodev) will always be built into libcrypto. Reviewed-by: Rich Salz <rsalz@openssl.org>
-rwxr-xr-xConfigure47
-rw-r--r--Makefile.in3
-rw-r--r--engines/Makefile.in2
-rw-r--r--engines/build.info2
-rwxr-xr-xutil/mk1mf.pl6
5 files changed, 36 insertions, 24 deletions
diff --git a/Configure b/Configure
index e8786b020a..1cb5ace1af 100755
--- a/Configure
+++ b/Configure
@@ -261,7 +261,7 @@ my @disablables = (
"dsa",
"dso",
"dtls",
- "dynamic[-_]engine",
+ "dynamic-engine",
"ec",
"ec2m",
"ecdh",
@@ -335,6 +335,7 @@ my %disabled = ( # "what" => "comment"
"sctp" => "default",
"shared" => "default",
"ssl-trace" => "default",
+ "static-engine" => "default",
"unit-test" => "default",
"zlib" => "default",
"crypto-mdebug" => "default",
@@ -380,6 +381,9 @@ 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" ],
);
# Avoid protocol support holes. Also disable all versions below N, if version
@@ -544,6 +548,14 @@ foreach (@argvcopy)
$disabled{$proto} = "option(tls)";
}
}
+ elsif ($1 eq "static-engine")
+ {
+ $disabled{"static-engine"} = "option";
+ }
+ elsif ($1 eq "dynamic-engine")
+ {
+ delete $disabled{"static-engine"};
+ }
else
{
$disabled{$1} = "option";
@@ -551,6 +563,14 @@ foreach (@argvcopy)
}
elsif (/^enable-(.+)$/)
{
+ if ($1 eq "static-engine")
+ {
+ delete $disabled{"static-engine"};
+ }
+ elsif ($1 eq "dynamic-engine")
+ {
+ $disabled{"static-engine"} = "option";
+ }
my $algo = $1;
delete $disabled{$algo};
@@ -984,20 +1004,13 @@ if ($target{shared_target} eq "")
$config{no_shared} = 1;
}
-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{"static-engine"}) {
+ push @{$config{defines}}, "OPENSSL_NO_STATIC_ENGINE";
+ $config{dynamic_engines} = 1;
+} else {
+ push @{$config{defines}}, "OPENSSL_NO_DYNAMIC_ENGINE";
+ $config{dynamic_engines} = 0;
+}
#
# Platform fix-ups
@@ -1371,8 +1384,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 'static-enginex'.
This is usually a fault in a build.info file.
EOF
foreach (@engines) {
diff --git a/Makefile.in b/Makefile.in
index c269a6d20a..9cca221cdd 100644
--- a/Makefile.in
+++ b/Makefile.in
@@ -210,6 +210,7 @@ SHARED_LDFLAG={- $target{shared_ldflag}
. ($config{target} =~ m|^BSD-| && $prefix !~ m|^/usr/.*$|
? " -Wl,-rpath,\$\$(LIBRPATH)" : "") -}
SHARED_RCFLAG={- $target{shared_rcflag} -}
+DYNAMIC_ENGINES={- $config{dynamic_engines} -}
GENERAL= Makefile
BASENAME= openssl
@@ -254,7 +255,7 @@ BUILDENV= LC_ALL=C PLATFORM='$(PLATFORM)' PROCESSOR='$(PROCESSOR)'\
AS='$(CC)' ASFLAG='$(CFLAG) -c' \
AR='$(AR)' NM='$(NM)' RANLIB='$(RANLIB)' \
CROSS_COMPILE='$(CROSS_COMPILE)' \
- PERL='$(PERL)' \
+ PERL='$(PERL)' DYNAMIC_ENGINES='$(DYNAMIC_ENGINES)' \
SDIRS='$(SDIRS)' LIBRPATH='$(INSTALLTOP)/$(LIBDIR)' \
DESTDIR='$(DESTDIR)' \
INSTALLTOP='$(INSTALLTOP)' OPENSSLDIR='$(OPENSSLDIR)' \
diff --git a/engines/Makefile.in b/engines/Makefile.in
index ea2ae2cd1b..d07cc0f841 100644
--- a/engines/Makefile.in
+++ b/engines/Makefile.in
@@ -57,7 +57,7 @@ top:
all: lib
lib: $(LIBOBJ) $(TESTLIBOBJ)
- @if [ -n "$(SHARED_LIBS)" ]; then \
+ @if [ "$(DYNAMIC_ENGINES)" = 1 ]; then \
set -e; \
for l in $(LIBNAMES) $(TESTLIBNAMES); do \
$(MAKE) -f ../Makefile.shared -e \
diff --git a/engines/build.info b/engines/build.info
index cae49862ed..98f0e58ee9 100644
--- a/engines/build.info
+++ b/engines/build.info
@@ -1,5 +1,5 @@
{- use File::Spec::Functions qw/:DEFAULT rel2abs/; -}
-IF[{- $config{no_shared} -}]
+IF[{- !$config{dynamic_engines} -}]
LIBS=../libcrypto
SOURCE[../libcrypto]=\
e_padlock.c {- $target{padlock_asm_src} -} \
diff --git a/util/mk1mf.pl b/util/mk1mf.pl
index 08999bfe72..3e8967c315 100755
--- a/util/mk1mf.pl
+++ b/util/mk1mf.pl
@@ -176,8 +176,6 @@ foreach (grep(!/^$/, split(/ /, $OPTIONS)))
print STDERR "unknown option - $_\n" if !&read_options;
}
-$no_static_engine = 0 if (!$shlib);
-
$no_mdc2=1 if ($no_des);
$no_ssl3=1 if ($no_md5);
@@ -1463,11 +1461,11 @@ sub read_options
{
$zlib_opt = 2;
}
- elsif (/^no-static-engine/)
+ elsif (/^no-static-engine/ or /^enable-dynamic-engine/)
{
$no_static_engine = 1;
}
- elsif (/^enable-static-engine/)
+ elsif (/^no-dynamic-engine/ or /^enable-static-engine/)
{
$no_static_engine = 0;
}