[Patch] Add missing libraries to Libs.private of libpq.pc
Hello
The following patch, which we added to build mingw-postgresql on Fedora,
adds some missing libraries to Libs.private of libpq.pc, discovered when
attempting to statically link with libpq:
-lz: is required by -lcrypto
-liconv: is required by -lintl (though possibly depends on whether
gettext was compiled with iconv support)
Thanks
Sandro
diff -rupN postgresql-11.5/src/interfaces/libpq/Makefile
postgresql-11.5-new/src/interfaces/libpq/Makefile
--- postgresql-11.5/src/interfaces/libpq/Makefile 2019-08-05
23:14:59.000000000 +0200
+++ postgresql-11.5-new/src/interfaces/libpq/Makefile 2020-04-07
13:49:00.801203610 +0200
@@ -80,10 +80,10 @@ endif
ifneq ($(PORTNAME), win32)
SHLIB_LINK += $(filter -lcrypt -ldes -lcom_err -lcrypto -lk5crypto
-lkrb5 -lgssapi_krb5 -lgss -lgssapi -lssl -lsocket -lnsl -lresolv
-lintl, $(LIBS)) $(LDAP_LIBS_FE) $(PTHREAD_LIBS)
else
-SHLIB_LINK += $(filter -lcrypt -ldes -lcom_err -lcrypto -lk5crypto
-lkrb5 -lgssapi32 -lssl -lsocket -lnsl -lresolv -lintl $(PTHREAD_LIBS),
$(LIBS)) $(LDAP_LIBS_FE)
+SHLIB_LINK += $(filter -lcrypt -ldes -lcom_err -lcrypto -lz -lk5crypto
-lkrb5 -lgssapi32 -lssl -lsocket -lnsl -lresolv -lintl $(PTHREAD_LIBS),
$(LIBS)) $(LDAP_LIBS_FE)
endif
ifeq ($(PORTNAME), win32)
-SHLIB_LINK += -lshell32 -lws2_32 -lsecur32 $(filter -leay32 -lssleay32
-lcomerr32 -lkrb5_32, $(LIBS))
+SHLIB_LINK += -lshell32 -lws2_32 -lsecur32 -liconv $(filter -leay32
-lssleay32 -lcomerr32 -lkrb5_32, $(LIBS))
endif
SHLIB_EXPORTS = exports.txt
Sandro Mani <manisandro@gmail.com> writes:
The following patch, which we added to build mingw-postgresql on Fedora,
adds some missing libraries to Libs.private of libpq.pc, discovered when
attempting to statically link with libpq:
TBH, I think we should just reject this patch. We do not encourage or
support statically linking libpq (and I thought that was against
distro-level policies in Fedora, as well --- such policies certainly
existed when I worked for Red Hat). Moreover, the proposed patch
requires us to absorb assumptions about the dependencies of external
libraries that we really shouldn't be making. I fear that it risks
causing new problems on other platforms, or at the very least
unnecessarily bloating libpq's dependency footprint. In particular,
creating a hard dependency on -liconv regardless of build options
seems right out.
regards, tom lane
On 2020-04-08 11:38, Sandro Mani wrote:
The following patch, which we added to build mingw-postgresql on Fedora,
adds some missing libraries to Libs.private of libpq.pc, discovered when
attempting to statically link with libpq:-lz: is required by -lcrypto
I think the correct fix for that would be to add libssl to libpq's
Requires.private.
-liconv: is required by -lintl (though possibly depends on whether
gettext was compiled with iconv support)
Yeah, in both of these cases it depends on what libssl or libintl
variant you actually got. It could be the OS one or a separately
installed one, it could be one with or without pkg-config support. I'm
not sure what a robust solution would be.
--
Peter Eisentraut http://www.2ndQuadrant.com/
PostgreSQL Development, 24x7 Support, Remote DBA, Training & Services
On 2020-07-10 21:47, Peter Eisentraut wrote:
On 2020-04-08 11:38, Sandro Mani wrote:
The following patch, which we added to build mingw-postgresql on Fedora,
adds some missing libraries to Libs.private of libpq.pc, discovered when
attempting to statically link with libpq:-lz: is required by -lcrypto
I think the correct fix for that would be to add libssl to libpq's
Requires.private.
For that, I propose the attached patch.
-liconv: is required by -lintl (though possibly depends on whether
gettext was compiled with iconv support)
I think the solution here would be to have gettext provide a pkg-config
file.
--
Peter Eisentraut http://www.2ndQuadrant.com/
PostgreSQL Development, 24x7 Support, Remote DBA, Training & Services
Attachments:
0001-Add-libpq-s-openssl-dependencies-to-pkg-config-file.patchtext/plain; charset=UTF-8; name=0001-Add-libpq-s-openssl-dependencies-to-pkg-config-file.patch; x-mac-creator=0; x-mac-type=0Download
From 358e23268fbd42989a64d3326678c2c83326aa77 Mon Sep 17 00:00:00 2001
From: Peter Eisentraut <peter@eisentraut.org>
Date: Fri, 4 Sep 2020 22:03:49 +0200
Subject: [PATCH] Add libpq's openssl dependencies to pkg-config file
Add libssl and libcrypto to libpq.pc's Requires.private. This allow
static linking to work if those libssl or libcrypto themselves have
dependencies in their *.private fields, such as -lz in some cases.
Reported-by: Sandro Mani <manisandro@gmail.com>
Discussion: https://www.postgresql.org/message-id/flat/837d1dcf-2fca-ee6e-0d7e-6bce1a1bac75@gmail.com
---
src/interfaces/libpq/Makefile | 2 ++
1 file changed, 2 insertions(+)
diff --git a/src/interfaces/libpq/Makefile b/src/interfaces/libpq/Makefile
index d4919970f8..4ac5f4b340 100644
--- a/src/interfaces/libpq/Makefile
+++ b/src/interfaces/libpq/Makefile
@@ -89,6 +89,8 @@ SHLIB_PREREQS = submake-libpgport
SHLIB_EXPORTS = exports.txt
+PKG_CONFIG_REQUIRES_PRIVATE = libssl libcrypto
+
all: all-lib
# Shared library stuff
--
2.28.0
On 2020-09-04 22:07, Peter Eisentraut wrote:
On 2020-07-10 21:47, Peter Eisentraut wrote:
On 2020-04-08 11:38, Sandro Mani wrote:
The following patch, which we added to build mingw-postgresql on Fedora,
adds some missing libraries to Libs.private of libpq.pc, discovered when
attempting to statically link with libpq:-lz: is required by -lcrypto
I think the correct fix for that would be to add libssl to libpq's
Requires.private.For that, I propose the attached patch.
committed
--
Peter Eisentraut http://www.2ndQuadrant.com/
PostgreSQL Development, 24x7 Support, Remote DBA, Training & Services