Build dynamic engines even if configured "no-shared"
authorRichard Levitte <levitte@openssl.org>
Fri, 19 Feb 2016 21:08:37 +0000 (22:08 +0100)
committerRichard Levitte <levitte@openssl.org>
Sat, 20 Feb 2016 15:51:31 +0000 (16:51 +0100)
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>
Configure
Makefile.in
engines/Makefile.in
engines/build.info
util/mk1mf.pl

index e8786b020a1ae2ea0d1b258d4e4db55e0447e875..1cb5ace1af528833e9d2fdba1fa993451af9b8cc 100755 (executable)
--- 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) {
index c269a6d20a785c14bb9cbbfb80466780e58ebbc6..9cca221cdd81e42117a9169872da914cf63ed29d 100644 (file)
@@ -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)'   \
index ea2ae2cd1bacde6c72d3c11f50be3fa86261550f..d07cc0f8414877e39644764bc30325abc4928ddd 100644 (file)
@@ -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 \
index cae49862ed82a468c4f4bf0ded9f0b844280e7b0..98f0e58ee997ce24781e0586f08e0498507e3f21 100644 (file)
@@ -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} -} \
index 08999bfe728b65b0740c91cac3d2558bcfd5f391..3e8967c315dc0f656c51e4cdf354ad08ea9a0133 100755 (executable)
@@ -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;
                }