Remake the way dynamic zlib is loaded
authorRichard Levitte <levitte@openssl.org>
Tue, 12 Apr 2016 14:12:53 +0000 (16:12 +0200)
committerRichard Levitte <levitte@openssl.org>
Wed, 13 Apr 2016 09:36:46 +0000 (11:36 +0200)
Instead of absolute hard coding of the libz library name, have it use
the macro LIBZ, which is set to defaults we know in case it's
undefined.

This allows our configuration to set something that's sane on current
or older platforms, and allows the user to override it by defining
LIBZ themselves.

Reviewed-by: Matt Caswell <matt@openssl.org>
Configurations/10-main.conf
crypto/comp/c_zlib.c

index 8c6ee7f0e374144f8f27aa2046a8d4b58f0c20e5..5bf8a0df709baf2a5a61e79e604551fde72b1013 100644 (file)
@@ -1249,6 +1249,14 @@ sub vms_info {
         template         => 1,
         cc               => "cl",
         cflags           => "-W3 -wd4090 -Gs0 -GF -Gy -nologo -DOPENSSL_SYS_WIN32 -DWIN32_LEAN_AND_MEAN -DL_ENDIAN -D_CRT_SECURE_NO_DEPRECATE",
+        defines          => add(sub { my @defs = ();
+                                      unless ($disabled{"zlib-dynamic"}) {
+                                          push @defs,
+                                              quotify("perl",
+                                                      'LIBZ="' . $withargs{zlib_lib} . '"');
+                                      }
+                                      return [ @defs ];
+                                    }),
         coutflag         => "/Fo",
         rc               => "rc",
         rcoutflag        => "/fo",
index 20376b6451b37a33b1a571175ebbddd9d0698600..6dd76846c5d74a229e77a50687032adc5857ee5c 100644 (file)
@@ -256,12 +256,19 @@ COMP_METHOD *COMP_zlib(void)
     COMP_METHOD *meth = &zlib_method_nozlib;
 
 #ifdef ZLIB_SHARED
-    if (!zlib_loaded) {
-# if defined(OPENSSL_SYS_WINDOWS) || defined(OPENSSL_SYS_WIN32)
-        zlib_dso = DSO_load(NULL, "ZLIB1", NULL, 0);
-# else
-        zlib_dso = DSO_load(NULL, "z", NULL, 0);
+    /* LIBZ may be externally defined, and we should respect that value */
+# ifndef LIBZ
+#  if defined(OPENSSL_SYS_WINDOWS) || defined(OPENSSL_SYS_WIN32)
+#   define LIBZ "ZLIB1"
+#  elif defined(OPENSSL_SYS_VMS)
+#   define LIBZ "LIBZ"
+#  else
+#   define LIBZ "z"
+#  endif
 # endif
+
+    if (!zlib_loaded) {
+        zlib_dso = DSO_load(NULL, LIBZ, NULL, 0);
         if (zlib_dso != NULL) {
             p_compress = (compress_ft) DSO_bind_func(zlib_dso, "compress");
             p_inflateEnd