In a non-shared build, don't include the md5 object files in legacy provider
authorPauli <paul.dale@oracle.com>
Sun, 6 Sep 2020 10:39:12 +0000 (20:39 +1000)
committerPauli <paul.dale@oracle.com>
Wed, 9 Sep 2020 07:59:08 +0000 (17:59 +1000)
Reviewed-by: Ben Kaduk <kaduk@mit.edu>
(Merged from https://github.com/openssl/openssl/pull/11961)

crypto/md5/build.info

index 18d5342a36bfa9579de3de88d093f57e0f937a6c..bbb70fde3c1cb84f1327b98e76a67ad682e357ff 100644 (file)
@@ -17,7 +17,16 @@ ENDIF
 $COMMON=md5_dgst.c md5_one.c md5_sha1.c $MD5ASM
 SOURCE[../../libcrypto]=$COMMON
 SOURCE[../../providers/libimplementations.a]=$COMMON
-SOURCE[../../providers/liblegacy.a]=$COMMON
+
+# A no-deprecated no-shared build ends up with double function definitions
+# without conditioning this on dso. The issue is MD5 which is needed in the
+# legacy provider for one of the spliced algorithms, however it resides in the
+# default provider.  A no-deprecated build removes the external definition from
+# libcrypto and this means that the code needs to be in liblegacy.  However,
+# when building without 'dso', liblegacy is included in libcrypto.
+IF[{- !$disabled{dso} -}]
+  SOURCE[../../providers/liblegacy.a]=$COMMON
+ENDIF
 
 # Implementations are now spread across several libraries, so the defines
 # need to be applied to all affected libraries and modules.