Thanks to visit codestin.com
Credit goes to github.com

Skip to content

Commit dddfc4c

Browse files
committed
Prevent accidental linking of system-supplied copies of libpq.so etc.
We were being careless in some places about the order of -L switches in link command lines, such that -L switches referring to external directories could come before those referring to directories within the build tree. This made it possible to accidentally link a system-supplied library, for example /usr/lib/libpq.so, in place of the one built in the build tree. Hilarity ensued, the more so the older the system-supplied library is. To fix, break LDFLAGS into two parts, a sub-variable LDFLAGS_INTERNAL and the main LDFLAGS variable, both of which are "recursively expanded" so that they can be incrementally adjusted by different makefiles. Establish a policy that -L switches for directories in the build tree must always be added to LDFLAGS_INTERNAL, while -L switches for external directories must always be added to LDFLAGS. This is sufficient to ensure a safe search order. For simplicity, we typically also put -l switches for the respective libraries into those same variables. (Traditional make usage would have us put -l switches into LIBS, but cleaning that up is a project for another day, as there's no clear need for it.) This turns out to also require separating SHLIB_LINK into two variables, SHLIB_LINK and SHLIB_LINK_INTERNAL, with a similar rule about which switches go into which variable. And likewise for PG_LIBS. Although this change might appear to affect external users of pgxs.mk, I think it doesn't; they shouldn't have any need to touch the _INTERNAL variables. In passing, tweak src/common/Makefile so that the value of CPPFLAGS recorded in pg_config lacks "-DFRONTEND" and the recorded value of LDFLAGS lacks "-L../../../src/common". Both of those things are mistakes, apparently introduced during prior code rearrangements, as old versions of pg_config don't print them. In general we don't want anything that's specific to the src/common subdirectory to appear in those outputs. This is certainly a bug fix, but in view of the lack of field complaints, I'm unsure whether it's worth the risk of back-patching. In any case it seems wise to see what the buildfarm makes of it first. Discussion: https://postgr.es/m/[email protected]
1 parent d4a4c3d commit dddfc4c

File tree

32 files changed

+66
-49
lines changed

32 files changed

+66
-49
lines changed

contrib/dblink/Makefile

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@
33
MODULE_big = dblink
44
OBJS = dblink.o $(WIN32RES)
55
PG_CPPFLAGS = -I$(libpq_srcdir)
6-
SHLIB_LINK = $(libpq)
6+
SHLIB_LINK_INTERNAL = $(libpq)
77

88
EXTENSION = dblink
99
DATA = dblink--1.2.sql dblink--1.1--1.2.sql dblink--1.0--1.1.sql \

contrib/hstore_plperl/Makefile

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -28,7 +28,7 @@ ifeq ($(PORTNAME), win32)
2828
# these settings are the same as for plperl
2929
override CPPFLAGS += -DPLPERL_HAVE_UID_GID -Wno-comment
3030
# ... see silliness in plperl Makefile ...
31-
SHLIB_LINK += $(sort $(wildcard ../../src/pl/plperl/libperl*.a))
31+
SHLIB_LINK_INTERNAL += $(sort $(wildcard ../../src/pl/plperl/libperl*.a))
3232
else
3333
rpathdir = $(perl_archlibexp)/CORE
3434
SHLIB_LINK += $(perl_embed_ldflags)

contrib/hstore_plpython/Makefile

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -26,7 +26,7 @@ endif
2626
# We must link libpython explicitly
2727
ifeq ($(PORTNAME), win32)
2828
# ... see silliness in plpython Makefile ...
29-
SHLIB_LINK += $(sort $(wildcard ../../src/pl/plpython/libpython*.a))
29+
SHLIB_LINK_INTERNAL += $(sort $(wildcard ../../src/pl/plpython/libpython*.a))
3030
else
3131
rpathdir = $(python_libdir)
3232
SHLIB_LINK += $(python_libspec) $(python_additional_libs)

contrib/jsonb_plperl/Makefile

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -27,7 +27,7 @@ ifeq ($(PORTNAME), win32)
2727
# these settings are the same as for plperl
2828
override CPPFLAGS += -DPLPERL_HAVE_UID_GID -Wno-comment
2929
# ... see silliness in plperl Makefile ...
30-
SHLIB_LINK += $(sort $(wildcard ../../src/pl/plperl/libperl*.a))
30+
SHLIB_LINK_INTERNAL += $(sort $(wildcard ../../src/pl/plperl/libperl*.a))
3131
else
3232
rpathdir = $(perl_archlibexp)/CORE
3333
SHLIB_LINK += $(perl_embed_ldflags)

contrib/jsonb_plpython/Makefile

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -26,7 +26,7 @@ endif
2626
# We must link libpython explicitly
2727
ifeq ($(PORTNAME), win32)
2828
# ... see silliness in plpython Makefile ...
29-
SHLIB_LINK += $(sort $(wildcard ../../src/pl/plpython/libpython*.a))
29+
SHLIB_LINK_INTERNAL += $(sort $(wildcard ../../src/pl/plpython/libpython*.a))
3030
else
3131
rpathdir = $(python_libdir)
3232
SHLIB_LINK += $(python_libspec) $(python_additional_libs)

contrib/ltree_plpython/Makefile

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -26,7 +26,7 @@ endif
2626
# We must link libpython explicitly
2727
ifeq ($(PORTNAME), win32)
2828
# ... see silliness in plpython Makefile ...
29-
SHLIB_LINK += $(sort $(wildcard ../../src/pl/plpython/libpython*.a))
29+
SHLIB_LINK_INTERNAL += $(sort $(wildcard ../../src/pl/plpython/libpython*.a))
3030
else
3131
rpathdir = $(python_libdir)
3232
SHLIB_LINK += $(python_libspec) $(python_additional_libs)

contrib/oid2name/Makefile

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@ PROGRAM = oid2name
77
OBJS = oid2name.o $(WIN32RES)
88

99
PG_CPPFLAGS = -I$(libpq_srcdir)
10-
PG_LIBS = $(libpq_pgport)
10+
PG_LIBS_INTERNAL = $(libpq_pgport)
1111

1212
ifdef USE_PGXS
1313
PG_CONFIG = pg_config

contrib/postgres_fdw/Makefile

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@ OBJS = postgres_fdw.o option.o deparse.o connection.o shippable.o $(WIN32RES)
55
PGFILEDESC = "postgres_fdw - foreign data wrapper for PostgreSQL"
66

77
PG_CPPFLAGS = -I$(libpq_srcdir)
8-
SHLIB_LINK = $(libpq)
8+
SHLIB_LINK_INTERNAL = $(libpq)
99

1010
EXTENSION = postgres_fdw
1111
DATA = postgres_fdw--1.0.sql

contrib/spi/Makefile

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -17,8 +17,6 @@ DOCS = $(addsuffix .example, $(MODULES))
1717
# comment out if you want a quieter refint package for other uses
1818
PG_CPPFLAGS = -DREFINT_VERBOSE
1919

20-
LDFLAGS_SL += -L$(top_builddir)/src/port -lpgport
21-
2220
ifdef USE_PGXS
2321
PG_CONFIG = pg_config
2422
PGXS := $(shell $(PG_CONFIG) --pgxs)

contrib/vacuumlo/Makefile

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@ PROGRAM = vacuumlo
77
OBJS = vacuumlo.o $(WIN32RES)
88

99
PG_CPPFLAGS = -I$(libpq_srcdir)
10-
PG_LIBS = $(libpq_pgport)
10+
PG_LIBS_INTERNAL = $(libpq_pgport)
1111

1212
ifdef USE_PGXS
1313
PG_CONFIG = pg_config

0 commit comments

Comments
 (0)