Movatterモバイル変換


[0]ホーム

URL:


Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Sign up
Appearance settings

Commitc95275f

Browse files
committed
Fix broken link-command-line ordering for libpgfeutils.
In the frontend Makefiles that pull in libpgfeutils, we'd generallydone it like this:LDFLAGS += -L$(top_builddir)/src/fe_utils -lpgfeutils $(libpq_pgport)That method is badly broken, as seen in bug #14742 from Chris Ruprecht.The -L flag for src/fe_utils ends up being placed after whatever random-L flags are in LDFLAGS already. That puts us at risk of pulling inlibpgfeutils.a from some previous installation rather than the freshlybuilt one in src/fe_utils. Also, the lack of an "override" is hazardousif someone tries to specify some LDFLAGS on the make command line.The correct way to do it is like this:override LDFLAGS := -L$(top_builddir)/src/fe_utils -lpgfeutils $(libpq_pgport) $(LDFLAGS)so that libpgfeutils, along with libpq, libpgport, and libpgcommon, areguaranteed to be pulled in from the build tree and not from any referencedsystem directory, because their -L flags will appear first.In some places we'd been even lazier and done it like this:LDFLAGS += -L$(top_builddir)/src/fe_utils -lpgfeutils -lpqwhich is subtly wrong in an additional way: on platforms where we can'trestrict the symbols exported by libpq.so, it allows libpgfeutils tolatch onto libpgport and libpgcommon symbols from libpq.so, rather thandirectly from those static libraries as intended. This carries hazardslike those explained in the comments for the libpq_pgport macro.In addition to fixing the broken libpgfeutils usages, I tried tostandardize on using $(libpq_pgport) like so:override LDFLAGS := $(libpq_pgport) $(LDFLAGS)even where libpgfeutils is not in the picture. This makes no differenceright now but will hopefully discourage future mistakes of the same ilk.And it's more like the way we handle CPPFLAGS in libpq-using Makefiles.In passing, just for consistency, make pgbench include PTHREAD_LIBS thesame way everyplace else does, ie just after LIBS rather than in somerandom place in the command line. This might have practical effect ifthere are -L switches in that macro on some platform.It looks to me like the MSVC build scripts are not affected by thiserror, but someone more familiar with them than I might want to doublecheck.Back-patch to 9.6 where libpgfeutils was introduced. In 9.6, the hazardthis error creates is that a reinstallation might link to the priorinstallation's copy of libpgfeutils.a and thereby fail to absorb aminor-version bug fix.Discussion:https://postgr.es/m/20170714125106.9231.13772@wrigleys.postgresql.org
1 parent8046465 commitc95275f

File tree

10 files changed

+24
-24
lines changed

10 files changed

+24
-24
lines changed

‎src/bin/initdb/Makefile

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -19,7 +19,7 @@ include $(top_builddir)/src/Makefile.global
1919
overrideCPPFLAGS := -DFRONTEND -I$(libpq_srcdir) -I$(top_srcdir)/src/timezone$(CPPFLAGS)
2020

2121
# note: we need libpq only because fe_utils does
22-
LDFLAGS+= -L$(top_builddir)/src/fe_utils -lpgfeutils$(libpq_pgport)
22+
overrideLDFLAGS:= -L$(top_builddir)/src/fe_utils -lpgfeutils$(libpq_pgport)$(LDFLAGS)
2323

2424
# use system timezone data?
2525
ifneq (,$(with_system_tzdata))

‎src/bin/pg_basebackup/Makefile

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -19,20 +19,20 @@ top_builddir = ../../..
1919
include$(top_builddir)/src/Makefile.global
2020

2121
overrideCPPFLAGS := -I$(libpq_srcdir)$(CPPFLAGS)
22-
LDFLAGS+= -L$(top_builddir)/src/fe_utils -lpgfeutils-lpq
22+
overrideLDFLAGS:= -L$(top_builddir)/src/fe_utils -lpgfeutils$(libpq_pgport)$(LDFLAGS)
2323

2424
OBJS=receivelog.o streamutil.o walmethods.o$(WIN32RES)
2525

2626
all: pg_basebackup pg_receivewal pg_recvlogical
2727

2828
pg_basebackup: pg_basebackup.o$(OBJS) | submake-libpq submake-libpgport submake-libpgfeutils
29-
$(CC)$(CFLAGS) pg_basebackup.o$(OBJS)$(libpq_pgport)$(LDFLAGS)$(LDFLAGS_EX)$(LIBS) -o$@$(X)
29+
$(CC)$(CFLAGS) pg_basebackup.o$(OBJS)$(LDFLAGS)$(LDFLAGS_EX)$(LIBS) -o$@$(X)
3030

3131
pg_receivewal: pg_receivewal.o$(OBJS) | submake-libpq submake-libpgport submake-libpgfeutils
32-
$(CC)$(CFLAGS) pg_receivewal.o$(OBJS)$(libpq_pgport)$(LDFLAGS)$(LDFLAGS_EX)$(LIBS) -o$@$(X)
32+
$(CC)$(CFLAGS) pg_receivewal.o$(OBJS)$(LDFLAGS)$(LDFLAGS_EX)$(LIBS) -o$@$(X)
3333

3434
pg_recvlogical: pg_recvlogical.o$(OBJS) | submake-libpq submake-libpgport submake-libpgfeutils
35-
$(CC)$(CFLAGS) pg_recvlogical.o$(OBJS)$(libpq_pgport)$(LDFLAGS)$(LDFLAGS_EX)$(LIBS) -o$@$(X)
35+
$(CC)$(CFLAGS) pg_recvlogical.o$(OBJS)$(LDFLAGS)$(LDFLAGS_EX)$(LIBS) -o$@$(X)
3636

3737
install: all installdirs
3838
$(INSTALL_PROGRAM) pg_basebackup$(X)'$(DESTDIR)$(bindir)/pg_basebackup$(X)'

‎src/bin/pg_ctl/Makefile

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -20,16 +20,16 @@ include $(top_builddir)/src/Makefile.global
2020
# but let's not pull that in on platforms where we don't need it.
2121
ifeq ($(PORTNAME), win32)
2222
overrideCPPFLAGS := -I$(libpq_srcdir)$(CPPFLAGS)
23+
overrideLDFLAGS :=$(libpq_pgport)$(LDFLAGS)
2324
SUBMAKE_LIBPQ := submake-libpq
24-
LIBPQ_PGPORT :=$(libpq_pgport)
2525
endif
2626

2727
OBJS=pg_ctl.o$(WIN32RES)
2828

2929
all: pg_ctl
3030

3131
pg_ctl:$(OBJS) | submake-libpgport$(SUBMAKE_LIBPQ)
32-
$(CC)$(CFLAGS)$(OBJS)$(LIBPQ_PGPORT)$(LDFLAGS)$(LDFLAGS_EX)$(LIBS) -o$@$(X)
32+
$(CC)$(CFLAGS)$(OBJS)$(LDFLAGS)$(LDFLAGS_EX)$(LIBS) -o$@$(X)
3333

3434
install: all installdirs
3535
$(INSTALL_PROGRAM) pg_ctl$(X)'$(DESTDIR)$(bindir)/pg_ctl$(X)'

‎src/bin/pg_dump/Makefile

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,7 @@ top_builddir = ../../..
1717
include$(top_builddir)/src/Makefile.global
1818

1919
overrideCPPFLAGS := -I$(libpq_srcdir)$(CPPFLAGS)
20-
LDFLAGS+= -L$(top_builddir)/src/fe_utils -lpgfeutils-lpq
20+
overrideLDFLAGS:= -L$(top_builddir)/src/fe_utils -lpgfeutils$(libpq_pgport)$(LDFLAGS)
2121

2222
OBJS=pg_backup_archiver.o pg_backup_db.o pg_backup_custom.o\
2323
pg_backup_null.o pg_backup_tar.o pg_backup_directory.o\
@@ -26,13 +26,13 @@ OBJS=pg_backup_archiver.o pg_backup_db.o pg_backup_custom.o \
2626
all: pg_dump pg_restore pg_dumpall
2727

2828
pg_dump: pg_dump.o common.o pg_dump_sort.o$(OBJS) | submake-libpq submake-libpgport submake-libpgfeutils
29-
$(CC)$(CFLAGS) pg_dump.o common.o pg_dump_sort.o$(OBJS)$(libpq_pgport)$(LDFLAGS)$(LDFLAGS_EX)$(LIBS) -o$@$(X)
29+
$(CC)$(CFLAGS) pg_dump.o common.o pg_dump_sort.o$(OBJS)$(LDFLAGS)$(LDFLAGS_EX)$(LIBS) -o$@$(X)
3030

3131
pg_restore: pg_restore.o$(OBJS) | submake-libpq submake-libpgport submake-libpgfeutils
32-
$(CC)$(CFLAGS) pg_restore.o$(OBJS)$(libpq_pgport)$(LDFLAGS)$(LDFLAGS_EX)$(LIBS) -o$@$(X)
32+
$(CC)$(CFLAGS) pg_restore.o$(OBJS)$(LDFLAGS)$(LDFLAGS_EX)$(LIBS) -o$@$(X)
3333

3434
pg_dumpall: pg_dumpall.o dumputils.o | submake-libpq submake-libpgport submake-libpgfeutils
35-
$(CC)$(CFLAGS) pg_dumpall.o dumputils.o$(WIN32RES)$(libpq_pgport)$(LDFLAGS)$(LDFLAGS_EX)$(LIBS) -o$@$(X)
35+
$(CC)$(CFLAGS) pg_dumpall.o dumputils.o$(WIN32RES)$(LDFLAGS)$(LDFLAGS_EX)$(LIBS) -o$@$(X)
3636

3737
install: all installdirs
3838
$(INSTALL_PROGRAM) pg_dump$(X)'$(DESTDIR)$(bindir)'/pg_dump$(X)

‎src/bin/pg_rewind/Makefile

Lines changed: 2 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -15,10 +15,8 @@ subdir = src/bin/pg_rewind
1515
top_builddir = ../../..
1616
include$(top_builddir)/src/Makefile.global
1717

18-
PG_CPPFLAGS = -I$(libpq_srcdir)
19-
PG_LIBS =$(libpq_pgport)
20-
2118
overrideCPPFLAGS := -I$(libpq_srcdir) -DFRONTEND$(CPPFLAGS)
19+
overrideLDFLAGS :=$(libpq_pgport)$(LDFLAGS)
2220

2321
OBJS= pg_rewind.o parsexlog.o xlogreader.o datapagemap.o timeline.o\
2422
fetch.o file_ops.o copy_fetch.o libpq_fetch.o filemap.o logging.o\
@@ -29,7 +27,7 @@ EXTRA_CLEAN = xlogreader.c
2927
all: pg_rewind
3028

3129
pg_rewind:$(OBJS) | submake-libpq submake-libpgport
32-
$(CC)$(CFLAGS)$^$(libpq_pgport)$(LDFLAGS)$(LDFLAGS_EX)$(LIBS) -o$@$(X)
30+
$(CC)$(CFLAGS)$^$(LDFLAGS)$(LDFLAGS_EX)$(LIBS) -o$@$(X)
3331

3432
xlogreader.c:% :$(top_srcdir)/src/backend/access/transam/%
3533
rm -f$@&&$(LN_S)$<.

‎src/bin/pg_upgrade/Makefile

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -12,13 +12,13 @@ OBJS = check.o controldata.o dump.o exec.o file.o function.o info.o \
1212
tablespace.o util.o version.o$(WIN32RES)
1313

1414
overrideCPPFLAGS := -DDLSUFFIX=\"$(DLSUFFIX)\" -I$(srcdir) -I$(libpq_srcdir)$(CPPFLAGS)
15-
LDFLAGS+= -L$(top_builddir)/src/fe_utils -lpgfeutils-lpq
15+
overrideLDFLAGS:= -L$(top_builddir)/src/fe_utils -lpgfeutils$(libpq_pgport)$(LDFLAGS)
1616

1717

1818
all: pg_upgrade
1919

2020
pg_upgrade:$(OBJS) | submake-libpq submake-libpgport submake-libpgfeutils
21-
$(CC)$(CFLAGS)$^$(libpq_pgport)$(LDFLAGS)$(LDFLAGS_EX)$(LIBS) -o$@$(X)
21+
$(CC)$(CFLAGS)$^$(LDFLAGS)$(LDFLAGS_EX)$(LIBS) -o$@$(X)
2222

2323
install: all installdirs
2424
$(INSTALL_PROGRAM) pg_upgrade$(X)'$(DESTDIR)$(bindir)/pg_upgrade$(X)'

‎src/bin/pgbench/Makefile

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -10,17 +10,18 @@ include $(top_builddir)/src/Makefile.global
1010
OBJS = pgbench.o exprparse.o$(WIN32RES)
1111

1212
overrideCPPFLAGS := -I. -I$(srcdir) -I$(libpq_srcdir)$(CPPFLAGS)
13-
LDFLAGS+= -L$(top_builddir)/src/fe_utils -lpgfeutils-lpq
13+
overrideLDFLAGS:= -L$(top_builddir)/src/fe_utils -lpgfeutils$(libpq_pgport)$(LDFLAGS)
1414

1515
ifneq ($(PORTNAME), win32)
1616
overrideCFLAGS +=$(PTHREAD_CFLAGS)
1717
endif
18+
LIBS +=$(PTHREAD_LIBS)
1819

1920

2021
all: pgbench
2122

2223
pgbench:$(OBJS) | submake-libpq submake-libpgport submake-libpgfeutils
23-
$(CC)$(CFLAGS)$^$(libpq_pgport)$(PTHREAD_LIBS)$(LDFLAGS)$(LDFLAGS_EX)$(LIBS) -o$@$(X)
24+
$(CC)$(CFLAGS)$^$(LDFLAGS)$(LDFLAGS_EX)$(LIBS) -o$@$(X)
2425

2526
# exprscan is compiled as part of exprparse
2627
exprparse.o: exprscan.c

‎src/bin/psql/Makefile

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -19,7 +19,7 @@ include $(top_builddir)/src/Makefile.global
1919
REFDOCDIR=$(top_srcdir)/doc/src/sgml/ref
2020

2121
overrideCPPFLAGS := -I. -I$(srcdir) -I$(libpq_srcdir)$(CPPFLAGS)
22-
LDFLAGS+= -L$(top_builddir)/src/fe_utils -lpgfeutils-lpq
22+
overrideLDFLAGS:= -L$(top_builddir)/src/fe_utils -lpgfeutils$(libpq_pgport)$(LDFLAGS)
2323

2424
OBJS=command.o common.o conditional.o copy.o crosstabview.o\
2525
describe.o help.o input.o large_obj.o mainloop.o\
@@ -31,7 +31,7 @@ OBJS=command.o common.o conditional.o copy.o crosstabview.o \
3131
all: psql
3232

3333
psql:$(OBJS) | submake-libpq submake-libpgport submake-libpgfeutils
34-
$(CC)$(CFLAGS)$(OBJS)$(libpq_pgport)$(LDFLAGS)$(LDFLAGS_EX)$(LIBS) -o$@$(X)
34+
$(CC)$(CFLAGS)$(OBJS)$(LDFLAGS)$(LDFLAGS_EX)$(LIBS) -o$@$(X)
3535

3636
help.o: sql_help.h
3737

‎src/bin/scripts/Makefile

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -19,12 +19,12 @@ include $(top_builddir)/src/Makefile.global
1919
PROGRAMS = createdb createuser dropdb dropuser clusterdb vacuumdb reindexdb pg_isready
2020

2121
overrideCPPFLAGS := -I$(libpq_srcdir)$(CPPFLAGS)
22-
LDFLAGS+= -L$(top_builddir)/src/fe_utils -lpgfeutils-lpq
22+
overrideLDFLAGS:= -L$(top_builddir)/src/fe_utils -lpgfeutils$(libpq_pgport)$(LDFLAGS)
2323

2424
all:$(PROGRAMS)
2525

2626
%:%.o$(WIN32RES)
27-
$(CC)$(CFLAGS)$^$(libpq_pgport)$(LDFLAGS)$(LDFLAGS_EX)$(LIBS) -o$@$(X)
27+
$(CC)$(CFLAGS)$^$(LDFLAGS)$(LDFLAGS_EX)$(LIBS) -o$@$(X)
2828

2929
createdb: createdb.o common.o | submake-libpq submake-libpgport submake-libpgfeutils
3030
createuser: createuser.o common.o | submake-libpq submake-libpgport submake-libpgfeutils

‎src/tools/findoidjoins/Makefile

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -13,13 +13,14 @@ top_builddir = ../../..
1313
include$(top_builddir)/src/Makefile.global
1414

1515
overrideCPPFLAGS := -I$(libpq_srcdir)$(CPPFLAGS)
16+
overrideLDFLAGS :=$(libpq_pgport)$(LDFLAGS)
1617

1718
OBJS= findoidjoins.o
1819

1920
all: findoidjoins
2021

2122
findoidjoins: findoidjoins.o | submake-libpq submake-libpgport
22-
$(CC)$(CFLAGS) findoidjoins.o$(libpq_pgport)$(LDFLAGS)$(LDFLAGS_EX)$(LIBS) -o$@$(X)
23+
$(CC)$(CFLAGS) findoidjoins.o$(LDFLAGS)$(LDFLAGS_EX)$(LIBS) -o$@$(X)
2324

2425
cleandistcleanmaintainer-clean:
2526
rm -f findoidjoins$(X)$(OBJS)

0 commit comments

Comments
 (0)

[8]ページ先頭

©2009-2025 Movatter.jp