On 2020-07-13 15:38, Tom Lane wrote:
Peter Eisentraut <peter.eisentr...@2ndquadrant.com> writes:
where would be a good place to define
OPENSSL_API_COMPAT?

Actually, it would be most formally correct to set it using AC_DEFINE in
configure.in, so that configure tests see it.

Yeah, very good point.

New patch done that way.

--
Peter Eisentraut              http://www.2ndQuadrant.com/
PostgreSQL Development, 24x7 Support, Remote DBA, Training & Services
From 612e42bb6073707924187c044ffd71ecff2607bd Mon Sep 17 00:00:00 2001
From: Peter Eisentraut <pe...@eisentraut.org>
Date: Thu, 16 Jul 2020 10:55:55 +0200
Subject: [PATCH v2] Define OPENSSL_API_COMPAT

This avoids deprecation warnings from newer OpenSSL versions (3.0.0 in
particular).

Discussion: 
https://www.postgresql.org/message-id/flat/FEF81714-D479-4512-839B-C769D2605F8A%40yesql.se
---
 configure                  |  5 ++++-
 configure.in               |  2 ++
 src/include/pg_config.h.in |  4 ++++
 src/tools/msvc/Solution.pm | 10 +++++++++-
 4 files changed, 19 insertions(+), 2 deletions(-)

diff --git a/configure b/configure
index 2feff37fe3..00f863fd2d 100755
--- a/configure
+++ b/configure
@@ -12083,7 +12083,10 @@ fi
 fi
 
 if test "$with_openssl" = yes ; then
-    if test "$PORTNAME" != "win32"; then
+
+$as_echo "#define OPENSSL_API_COMPAT 10001" >>confdefs.h
+
+  if test "$PORTNAME" != "win32"; then
      { $as_echo "$as_me:${as_lineno-$LINENO}: checking for CRYPTO_new_ex_data 
in -lcrypto" >&5
 $as_echo_n "checking for CRYPTO_new_ex_data in -lcrypto... " >&6; }
 if ${ac_cv_lib_crypto_CRYPTO_new_ex_data+:} false; then :
diff --git a/configure.in b/configure.in
index 0188c6ff07..c06fec4726 100644
--- a/configure.in
+++ b/configure.in
@@ -1204,6 +1204,8 @@ fi
 
 if test "$with_openssl" = yes ; then
   dnl Order matters!
+  AC_DEFINE(OPENSSL_API_COMPAT, [10001],
+            [Define to the OpenSSL API version in use. This avoids deprecation 
warnings from newer OpenSSL versions.])
   if test "$PORTNAME" != "win32"; then
      AC_CHECK_LIB(crypto, CRYPTO_new_ex_data, [], [AC_MSG_ERROR([library 
'crypto' is required for OpenSSL])])
      AC_CHECK_LIB(ssl,    SSL_new, [], [AC_MSG_ERROR([library 'ssl' is 
required for OpenSSL])])
diff --git a/src/include/pg_config.h.in b/src/include/pg_config.h.in
index c199cd46d2..73aa618166 100644
--- a/src/include/pg_config.h.in
+++ b/src/include/pg_config.h.in
@@ -749,6 +749,10 @@
 /* Define bytes to use libc memset(). */
 #undef MEMSET_LOOP_LIMIT
 
+/* Define to the OpenSSL API version in use. This avoids deprecation warnings
+   from newer OpenSSL versions. */
+#undef OPENSSL_API_COMPAT
+
 /* Define to the address where bug reports for this package should be sent. */
 #undef PACKAGE_BUGREPORT
 
diff --git a/src/tools/msvc/Solution.pm b/src/tools/msvc/Solution.pm
index a13ca6e02e..ba61544911 100644
--- a/src/tools/msvc/Solution.pm
+++ b/src/tools/msvc/Solution.pm
@@ -152,6 +152,8 @@ sub GenerateFiles
        my $package_bugreport;
        my $package_url;
        my ($majorver, $minorver);
+       my $ac_define_openssl_api_compat_found = 0;
+       my $openssl_api_compat;
 
        # Parse configure.in to get version numbers
        open(my $c, '<', "configure.in")
@@ -176,10 +178,15 @@ sub GenerateFiles
                        $majorver = sprintf("%d", $1);
                        $minorver = sprintf("%d", $2 ? $2 : 0);
                }
+               elsif (/\bAC_DEFINE\(OPENSSL_API_COMPAT, \[(\d+)\]/)
+               {
+                       $ac_define_openssl_api_compat_found = 1;
+                       $openssl_api_compat = $1;
+               }
        }
        close($c);
        confess "Unable to parse configure.in for all variables!"
-         unless $ac_init_found;
+         unless $ac_init_found && $ac_define_openssl_api_compat_found;
 
        if (IsNewer("src/include/pg_config_os.h", "src/include/port/win32.h"))
        {
@@ -433,6 +440,7 @@ sub GenerateFiles
                LOCALE_T_IN_XLOCALE                      => undef,
                MAXIMUM_ALIGNOF                          => 8,
                MEMSET_LOOP_LIMIT                        => 1024,
+               OPENSSL_API_COMPAT                       => $openssl_api_compat,
                PACKAGE_BUGREPORT                        => 
qq{"$package_bugreport"},
                PACKAGE_NAME                             => qq{"$package_name"},
                PACKAGE_STRING      => qq{"$package_name $package_version"},
-- 
2.27.0

Reply via email to