[Patch] Add missing libraries to Libs.private of libpq.pc

Started by Sandro Manialmost 6 years ago5 messages
#1Sandro Mani
manisandro@gmail.com

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

#2Tom Lane
tgl@sss.pgh.pa.us
In reply to: Sandro Mani (#1)
Re: [Patch] Add missing libraries to Libs.private of libpq.pc

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

#3Peter Eisentraut
peter.eisentraut@2ndquadrant.com
In reply to: Sandro Mani (#1)
Re: [Patch] Add missing libraries to Libs.private of libpq.pc

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

#4Peter Eisentraut
peter.eisentraut@2ndquadrant.com
In reply to: Peter Eisentraut (#3)
1 attachment(s)
Re: [Patch] Add missing libraries to Libs.private of libpq.pc

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

#5Peter Eisentraut
peter.eisentraut@2ndquadrant.com
In reply to: Peter Eisentraut (#4)
Re: [Patch] Add missing libraries to Libs.private of libpq.pc

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