diff options
| author | Tom Lane | 2018-07-09 21:23:31 +0000 |
|---|---|---|
| committer | Tom Lane | 2018-07-09 21:23:31 +0000 |
| commit | ccc286da1d35b5d57a1e3322027905c00507d38f (patch) | |
| tree | 5d17712252780e0be4d0bb1b021ff4e3fd8444de /src/interfaces | |
| parent | 619dea4678c345d119036311c503b55b974695d3 (diff) | |
Prevent accidental linking of system-supplied copies of libpq.so etc.
Back-patch commit dddfc4cb2, which broke LDFLAGS and related Makefile
variables into two parts, one for within-build-tree library references and
one for external libraries, to ensure that the order of -L flags has all
of the former before all of the latter. This turns out to fix a problem
recently noted on buildfarm member peripatus, that we attempted to
incorporate code from libpgport.a into a shared library. That will fail on
platforms that are sticky about putting non-PIC code into shared libraries.
(It's quite surprising we hadn't seen such failures before, since the code
in question has been like that for a long time.)
I think that peripatus' problem could have been fixed with just a subset
of this patch; but since the previous issue of accidentally linking to the
wrong copy of a Postgres shlib seems likely to bite people in the field,
let's just back-patch the whole change. Now that commit dddfc4cb2 has
survived some beta testing, I'm less afraid to back-patch it than I was
at the time.
This also fixes undesired inclusion of "-DFRONTEND" in pg_config's CPPFLAGS
output (in 9.6 and up) and undesired inclusion of "-L../../src/common" in
its LDFLAGS output (in all supported branches).
Back-patch to v10 and older branches; this is already in v11.
Discussion: https://postgr.es/m/20180704234304.bq2dxispefl65odz@ler-imac.local
Diffstat (limited to 'src/interfaces')
| -rw-r--r-- | src/interfaces/ecpg/compatlib/Makefile | 4 | ||||
| -rw-r--r-- | src/interfaces/ecpg/ecpglib/Makefile | 3 | ||||
| -rw-r--r-- | src/interfaces/ecpg/pgtypeslib/Makefile | 2 | ||||
| -rw-r--r-- | src/interfaces/ecpg/test/Makefile.regress | 5 | ||||
| -rw-r--r-- | src/interfaces/ecpg/test/compat_informix/Makefile | 3 | ||||
| -rw-r--r-- | src/interfaces/libpq/test/Makefile | 4 |
6 files changed, 11 insertions, 10 deletions
diff --git a/src/interfaces/ecpg/compatlib/Makefile b/src/interfaces/ecpg/compatlib/Makefile index 0a04a7310f2..05748a304d3 100644 --- a/src/interfaces/ecpg/compatlib/Makefile +++ b/src/interfaces/ecpg/compatlib/Makefile @@ -22,8 +22,8 @@ override CPPFLAGS := -I../include -I$(top_srcdir)/src/interfaces/ecpg/include \ -I$(libpq_srcdir) -DFRONTEND $(CPPFLAGS) override CFLAGS += $(PTHREAD_CFLAGS) -SHLIB_LINK = -L../ecpglib -lecpg -L../pgtypeslib -lpgtypes $(libpq) \ - $(filter -lintl -lm, $(LIBS)) $(PTHREAD_LIBS) +SHLIB_LINK_INTERNAL = -L../ecpglib -lecpg -L../pgtypeslib -lpgtypes $(libpq) +SHLIB_LINK = $(filter -lintl -lm, $(LIBS)) $(PTHREAD_LIBS) SHLIB_PREREQS = submake-ecpglib submake-pgtypeslib SHLIB_EXPORTS = exports.txt diff --git a/src/interfaces/ecpg/ecpglib/Makefile b/src/interfaces/ecpg/ecpglib/Makefile index 39c42325801..18010810930 100644 --- a/src/interfaces/ecpg/ecpglib/Makefile +++ b/src/interfaces/ecpg/ecpglib/Makefile @@ -34,7 +34,8 @@ ifneq ($(PORTNAME), win32) OBJS += thread.o endif -SHLIB_LINK = -L../pgtypeslib -lpgtypes $(libpq) $(filter -lintl -lm, $(LIBS)) $(PTHREAD_LIBS) +SHLIB_LINK_INTERNAL = -L../pgtypeslib -lpgtypes $(libpq) +SHLIB_LINK = $(filter -lintl -lm, $(LIBS)) $(PTHREAD_LIBS) SHLIB_PREREQS = submake-libpq submake-pgtypeslib SHLIB_EXPORTS = exports.txt diff --git a/src/interfaces/ecpg/pgtypeslib/Makefile b/src/interfaces/ecpg/pgtypeslib/Makefile index 1c1a42fa8f9..d2d3e5bf6a8 100644 --- a/src/interfaces/ecpg/pgtypeslib/Makefile +++ b/src/interfaces/ecpg/pgtypeslib/Makefile @@ -25,7 +25,7 @@ override CFLAGS += $(PTHREAD_CFLAGS) # Need to recompile any libpgport object files LIBS := $(filter-out -lpgport, $(LIBS)) -SHLIB_LINK += -lm +SHLIB_LINK += $(filter -lm, $(LIBS)) SHLIB_EXPORTS = exports.txt diff --git a/src/interfaces/ecpg/test/Makefile.regress b/src/interfaces/ecpg/test/Makefile.regress index b3d7c1e874a..06c0461f667 100644 --- a/src/interfaces/ecpg/test/Makefile.regress +++ b/src/interfaces/ecpg/test/Makefile.regress @@ -5,8 +5,9 @@ override CPPFLAGS := -I../../include -I$(top_srcdir)/src/interfaces/ecpg/include -I$(libpq_srcdir) $(CPPFLAGS) override CFLAGS += $(PTHREAD_CFLAGS) -override LDFLAGS := -L../../ecpglib -L../../pgtypeslib $(filter-out -l%, $(libpq)) $(LDFLAGS) -override LIBS := -lecpg -lpgtypes $(filter -l%, $(libpq)) $(LIBS) $(PTHREAD_LIBS) +LDFLAGS_INTERNAL += -L../../ecpglib -lecpg -L../../pgtypeslib -lpgtypes $(libpq) + +override LIBS += $(PTHREAD_LIBS) # Standard way to invoke the ecpg preprocessor ECPG = ../../preproc/ecpg --regression -I$(srcdir)/../../include -I$(srcdir) diff --git a/src/interfaces/ecpg/test/compat_informix/Makefile b/src/interfaces/ecpg/test/compat_informix/Makefile index 8a5e8544967..d50fdc29fd1 100644 --- a/src/interfaces/ecpg/test/compat_informix/Makefile +++ b/src/interfaces/ecpg/test/compat_informix/Makefile @@ -6,8 +6,7 @@ include $(top_srcdir)/$(subdir)/../Makefile.regress # Use special informix compatibility switch for all tests in this directory ECPG += -C INFORMIX -override LDFLAGS := -L../../compatlib $(LDFLAGS) -override LIBS := -lecpg_compat $(LIBS) +LDFLAGS_INTERNAL += -L../../compatlib -lecpg_compat TESTS = test_informix test_informix.c \ test_informix2 test_informix2.c \ diff --git a/src/interfaces/libpq/test/Makefile b/src/interfaces/libpq/test/Makefile index 01041fb15f0..4832fab9d23 100644 --- a/src/interfaces/libpq/test/Makefile +++ b/src/interfaces/libpq/test/Makefile @@ -3,11 +3,11 @@ top_builddir = ../../../.. include $(top_builddir)/src/Makefile.global ifeq ($(PORTNAME), win32) -LDLIBS += -lws2_32 +LDFLAGS += -lws2_32 endif override CPPFLAGS := -I$(libpq_srcdir) $(CPPFLAGS) -override LDLIBS := $(libpq_pgport) $(LDLIBS) +LDFLAGS_INTERNAL += $(libpq_pgport) PROGS = uri-regress |
