From 5c92784a4db7cd13d7d51b7684fead4166146eb3 Mon Sep 17 00:00:00 2001 From: "Chao Li (Evan)" Date: Mon, 15 Jun 2026 14:57:02 +0800 Subject: [PATCH v1] Make frontend programs relink after libpgfeutils changes Several frontend programs link with libpgfeutils, but their Makefile rules only had submake-libpgfeutils as an order-only prerequisite. As a result, changes in src/fe_utils rebuilt libpgfeutils.a but did not cause those programs to relink. Add a shared libpgfeutils variable in Makefile.global.in and make each in-tree target that links with -lpgfeutils depend on the archive as a normal prerequisite. This includes the test_escape test module, which is not built by top-level make but should still relink when that module is built or tested. For rules that used $^ in the link command, switch to explicit object lists so the archive prerequisite does not get added to the link line separately from -lpgfeutils. Author: Chao Li --- src/Makefile.global.in | 10 ++++++++++ src/bin/initdb/Makefile | 2 +- src/bin/pg_amcheck/Makefile | 4 ++-- src/bin/pg_basebackup/Makefile | 10 +++++----- src/bin/pg_checksums/Makefile | 4 ++-- src/bin/pg_combinebackup/Makefile | 4 ++-- src/bin/pg_dump/Makefile | 6 +++--- src/bin/pg_resetwal/Makefile | 4 ++-- src/bin/pg_rewind/Makefile | 4 ++-- src/bin/pg_upgrade/Makefile | 4 ++-- src/bin/pg_verifybackup/Makefile | 4 ++-- src/bin/pg_waldump/Makefile | 4 ++-- src/bin/pg_walsummary/Makefile | 4 ++-- src/bin/pgbench/Makefile | 4 ++-- src/bin/psql/Makefile | 2 +- src/bin/scripts/Makefile | 24 ++++++++++++++++-------- src/test/modules/test_escape/Makefile | 2 +- 17 files changed, 57 insertions(+), 39 deletions(-) diff --git a/src/Makefile.global.in b/src/Makefile.global.in index cef1ad7f87d..09c7423f8cf 100644 --- a/src/Makefile.global.in +++ b/src/Makefile.global.in @@ -637,6 +637,12 @@ ifeq ($(PORTNAME),cygwin) libpq_pgport += $(LDAP_LIBS_FE) endif +# libpgfeutils is for client executables that link with fe_utils. Targets +# should depend on this when they need to be relinked after fe_utils changes. +ifndef PGXS +libpgfeutils = $(top_builddir)/src/fe_utils/libpgfeutils.a +endif + ########################################################################## # @@ -654,6 +660,10 @@ submake-libpgfeutils: | submake-generated-headers $(MAKE) -C $(top_builddir)/src/common all $(MAKE) -C $(top_builddir)/src/fe_utils all +ifndef PGXS +$(libpgfeutils): | submake-libpgfeutils +endif + .PHONY: submake-libpq submake-libpgport submake-libpgfeutils diff --git a/src/bin/initdb/Makefile b/src/bin/initdb/Makefile index 21b755025ad..8e4adbff07a 100644 --- a/src/bin/initdb/Makefile +++ b/src/bin/initdb/Makefile @@ -38,7 +38,7 @@ OBJS = \ all: initdb -initdb: $(OBJS) | submake-libpq submake-libpgport submake-libpgfeutils +initdb: $(OBJS) $(libpgfeutils) | submake-libpq submake-libpgport $(CC) $(CFLAGS) $(OBJS) $(LDFLAGS) $(LDFLAGS_EX) $(LIBS) -o $@$(X) # We must pull in localtime.c from src/timezones diff --git a/src/bin/pg_amcheck/Makefile b/src/bin/pg_amcheck/Makefile index f7a9640033b..4ea498b9dab 100644 --- a/src/bin/pg_amcheck/Makefile +++ b/src/bin/pg_amcheck/Makefile @@ -27,8 +27,8 @@ OBJS = \ all: pg_amcheck -pg_amcheck: $(OBJS) | submake-libpq submake-libpgport submake-libpgfeutils - $(CC) $(CFLAGS) $^ $(LDFLAGS) $(LDFLAGS_EX) $(LIBS) -o $@$(X) +pg_amcheck: $(OBJS) $(libpgfeutils) | submake-libpq submake-libpgport + $(CC) $(CFLAGS) $(OBJS) $(LDFLAGS) $(LDFLAGS_EX) $(LIBS) -o $@$(X) install: all installdirs diff --git a/src/bin/pg_basebackup/Makefile b/src/bin/pg_basebackup/Makefile index df94fc27d02..8b1df134ff2 100644 --- a/src/bin/pg_basebackup/Makefile +++ b/src/bin/pg_basebackup/Makefile @@ -41,16 +41,16 @@ BBOBJS = \ all: pg_basebackup pg_createsubscriber pg_receivewal pg_recvlogical -pg_basebackup: $(BBOBJS) $(OBJS) | submake-libpq submake-libpgport submake-libpgfeutils +pg_basebackup: $(BBOBJS) $(OBJS) $(libpgfeutils) | submake-libpq submake-libpgport $(CC) $(CFLAGS) $(BBOBJS) $(OBJS) $(LDFLAGS) $(LDFLAGS_EX) $(LIBS) -o $@$(X) -pg_createsubscriber: pg_createsubscriber.o $(WIN32RES) | submake-libpq submake-libpgport submake-libpgfeutils - $(CC) $(CFLAGS) $^ $(LDFLAGS) $(LDFLAGS_EX) $(LIBS) -o $@$(X) +pg_createsubscriber: pg_createsubscriber.o $(WIN32RES) $(libpgfeutils) | submake-libpq submake-libpgport + $(CC) $(CFLAGS) pg_createsubscriber.o $(WIN32RES) $(LDFLAGS) $(LDFLAGS_EX) $(LIBS) -o $@$(X) -pg_receivewal: pg_receivewal.o $(OBJS) | submake-libpq submake-libpgport submake-libpgfeutils +pg_receivewal: pg_receivewal.o $(OBJS) $(libpgfeutils) | submake-libpq submake-libpgport $(CC) $(CFLAGS) pg_receivewal.o $(OBJS) $(LDFLAGS) $(LDFLAGS_EX) $(LIBS) -o $@$(X) -pg_recvlogical: pg_recvlogical.o $(OBJS) | submake-libpq submake-libpgport submake-libpgfeutils +pg_recvlogical: pg_recvlogical.o $(OBJS) $(libpgfeutils) | submake-libpq submake-libpgport $(CC) $(CFLAGS) pg_recvlogical.o $(OBJS) $(LDFLAGS) $(LDFLAGS_EX) $(LIBS) -o $@$(X) install: all installdirs diff --git a/src/bin/pg_checksums/Makefile b/src/bin/pg_checksums/Makefile index b16cfafa0bf..601aeafbc01 100644 --- a/src/bin/pg_checksums/Makefile +++ b/src/bin/pg_checksums/Makefile @@ -24,8 +24,8 @@ OBJS = \ all: pg_checksums -pg_checksums: $(OBJS) | submake-libpgport - $(CC) $(CFLAGS) $^ $(LDFLAGS) $(LDFLAGS_EX) $(LIBS) -o $@$(X) +pg_checksums: $(OBJS) $(libpgfeutils) | submake-libpgport + $(CC) $(CFLAGS) $(OBJS) $(LDFLAGS) $(LDFLAGS_EX) $(LIBS) -o $@$(X) install: all installdirs $(INSTALL_PROGRAM) pg_checksums$(X) '$(DESTDIR)$(bindir)/pg_checksums$(X)' diff --git a/src/bin/pg_combinebackup/Makefile b/src/bin/pg_combinebackup/Makefile index 0d0089472e8..c217941448a 100644 --- a/src/bin/pg_combinebackup/Makefile +++ b/src/bin/pg_combinebackup/Makefile @@ -30,8 +30,8 @@ OBJS = \ all: pg_combinebackup -pg_combinebackup: $(OBJS) | submake-libpgport submake-libpgfeutils - $(CC) $(CFLAGS) $^ $(LDFLAGS) $(LDFLAGS_EX) $(LIBS) -o $@$(X) +pg_combinebackup: $(OBJS) $(libpgfeutils) | submake-libpgport + $(CC) $(CFLAGS) $(OBJS) $(LDFLAGS) $(LDFLAGS_EX) $(LIBS) -o $@$(X) install: all installdirs $(INSTALL_PROGRAM) pg_combinebackup$(X) '$(DESTDIR)$(bindir)/pg_combinebackup$(X)' diff --git a/src/bin/pg_dump/Makefile b/src/bin/pg_dump/Makefile index 79073b0a0ea..bc2db929cea 100644 --- a/src/bin/pg_dump/Makefile +++ b/src/bin/pg_dump/Makefile @@ -45,13 +45,13 @@ OBJS = \ all: pg_dump pg_restore pg_dumpall -pg_dump: pg_dump.o common.o pg_dump_sort.o $(OBJS) | submake-libpq submake-libpgport submake-libpgfeutils +pg_dump: pg_dump.o common.o pg_dump_sort.o $(OBJS) $(libpgfeutils) | submake-libpq submake-libpgport $(CC) $(CFLAGS) pg_dump.o common.o pg_dump_sort.o $(OBJS) $(LDFLAGS) $(LDFLAGS_EX) $(LIBS) -o $@$(X) -pg_restore: pg_restore.o $(OBJS) | submake-libpq submake-libpgport submake-libpgfeutils +pg_restore: pg_restore.o $(OBJS) $(libpgfeutils) | submake-libpq submake-libpgport $(CC) $(CFLAGS) pg_restore.o $(OBJS) $(LDFLAGS) $(LDFLAGS_EX) $(LIBS) -o $@$(X) -pg_dumpall: pg_dumpall.o $(OBJS) | submake-libpq submake-libpgport submake-libpgfeutils +pg_dumpall: pg_dumpall.o $(OBJS) $(libpgfeutils) | submake-libpq submake-libpgport $(CC) $(CFLAGS) pg_dumpall.o $(OBJS) $(LDFLAGS) $(LDFLAGS_EX) $(LIBS) -o $@$(X) install: all installdirs diff --git a/src/bin/pg_resetwal/Makefile b/src/bin/pg_resetwal/Makefile index 7113acbef2f..da6ae2ce2a7 100644 --- a/src/bin/pg_resetwal/Makefile +++ b/src/bin/pg_resetwal/Makefile @@ -23,8 +23,8 @@ OBJS = \ all: pg_resetwal -pg_resetwal: $(OBJS) | submake-libpgport - $(CC) $(CFLAGS) $^ $(LDFLAGS) $(LDFLAGS_EX) $(LIBS) -o $@$(X) +pg_resetwal: $(OBJS) $(libpgfeutils) | submake-libpgport + $(CC) $(CFLAGS) $(OBJS) $(LDFLAGS) $(LDFLAGS_EX) $(LIBS) -o $@$(X) install: all installdirs $(INSTALL_PROGRAM) pg_resetwal$(X) '$(DESTDIR)$(bindir)/pg_resetwal$(X)' diff --git a/src/bin/pg_rewind/Makefile b/src/bin/pg_rewind/Makefile index 32a35c57612..09a68a9045c 100644 --- a/src/bin/pg_rewind/Makefile +++ b/src/bin/pg_rewind/Makefile @@ -34,8 +34,8 @@ EXTRA_CLEAN = xlogreader.c all: pg_rewind -pg_rewind: $(OBJS) | submake-libpq submake-libpgport - $(CC) $(CFLAGS) $^ $(LDFLAGS) $(LDFLAGS_EX) $(LIBS) -o $@$(X) +pg_rewind: $(OBJS) $(libpgfeutils) | submake-libpq submake-libpgport + $(CC) $(CFLAGS) $(OBJS) $(LDFLAGS) $(LDFLAGS_EX) $(LIBS) -o $@$(X) xlogreader.c: % : $(top_srcdir)/src/backend/access/transam/% rm -f $@ && $(LN_S) $< . diff --git a/src/bin/pg_upgrade/Makefile b/src/bin/pg_upgrade/Makefile index 771addb675a..acb90651a3a 100644 --- a/src/bin/pg_upgrade/Makefile +++ b/src/bin/pg_upgrade/Makefile @@ -44,8 +44,8 @@ export TEST_EXT_LIB all: pg_upgrade -pg_upgrade: $(OBJS) | submake-libpq submake-libpgport submake-libpgfeutils - $(CC) $(CFLAGS) $^ $(LDFLAGS) $(LDFLAGS_EX) $(LIBS) -o $@$(X) +pg_upgrade: $(OBJS) $(libpgfeutils) | submake-libpq submake-libpgport + $(CC) $(CFLAGS) $(OBJS) $(LDFLAGS) $(LDFLAGS_EX) $(LIBS) -o $@$(X) install: all installdirs $(INSTALL_PROGRAM) pg_upgrade$(X) '$(DESTDIR)$(bindir)/pg_upgrade$(X)' diff --git a/src/bin/pg_verifybackup/Makefile b/src/bin/pg_verifybackup/Makefile index 374d4a8afd1..87cc1997729 100644 --- a/src/bin/pg_verifybackup/Makefile +++ b/src/bin/pg_verifybackup/Makefile @@ -27,8 +27,8 @@ OBJS = \ all: pg_verifybackup -pg_verifybackup: $(OBJS) | submake-libpq submake-libpgport submake-libpgfeutils - $(CC) $(CFLAGS) $^ $(LDFLAGS) $(LDFLAGS_EX) $(LIBS) -o $@$(X) +pg_verifybackup: $(OBJS) $(libpgfeutils) | submake-libpq submake-libpgport + $(CC) $(CFLAGS) $(OBJS) $(LDFLAGS) $(LDFLAGS_EX) $(LIBS) -o $@$(X) install: all installdirs $(INSTALL_PROGRAM) pg_verifybackup$(X) '$(DESTDIR)$(bindir)/pg_verifybackup$(X)' diff --git a/src/bin/pg_waldump/Makefile b/src/bin/pg_waldump/Makefile index aabb87566a2..0235263b5ff 100644 --- a/src/bin/pg_waldump/Makefile +++ b/src/bin/pg_waldump/Makefile @@ -29,8 +29,8 @@ RMGRDESCOBJS = $(patsubst %.c,%.o,$(RMGRDESCSOURCES)) all: pg_waldump -pg_waldump: $(OBJS) | submake-libpgport - $(CC) $(CFLAGS) $^ $(LDFLAGS) $(LDFLAGS_EX) $(LIBS) -o $@$(X) +pg_waldump: $(OBJS) $(libpgfeutils) | submake-libpgport + $(CC) $(CFLAGS) $(OBJS) $(LDFLAGS) $(LDFLAGS_EX) $(LIBS) -o $@$(X) xlogreader.c: % : $(top_srcdir)/src/backend/access/transam/% rm -f $@ && $(LN_S) $< . diff --git a/src/bin/pg_walsummary/Makefile b/src/bin/pg_walsummary/Makefile index 7563c243c1b..ab41d2280f2 100644 --- a/src/bin/pg_walsummary/Makefile +++ b/src/bin/pg_walsummary/Makefile @@ -25,8 +25,8 @@ OBJS = \ all: pg_walsummary -pg_walsummary: $(OBJS) | submake-libpgport submake-libpgfeutils - $(CC) $(CFLAGS) $^ $(LDFLAGS) $(LDFLAGS_EX) $(LIBS) -o $@$(X) +pg_walsummary: $(OBJS) $(libpgfeutils) | submake-libpgport + $(CC) $(CFLAGS) $(OBJS) $(LDFLAGS) $(LDFLAGS_EX) $(LIBS) -o $@$(X) install: all installdirs diff --git a/src/bin/pgbench/Makefile b/src/bin/pgbench/Makefile index 987bf64df9d..a70c69ec016 100644 --- a/src/bin/pgbench/Makefile +++ b/src/bin/pgbench/Makefile @@ -26,8 +26,8 @@ LIBS += $(PTHREAD_LIBS) all: pgbench -pgbench: $(OBJS) | submake-libpq submake-libpgport submake-libpgfeutils - $(CC) $(CFLAGS) $^ $(LDFLAGS) $(LDFLAGS_EX) $(LIBS) -o $@$(X) +pgbench: $(OBJS) $(libpgfeutils) | submake-libpq submake-libpgport + $(CC) $(CFLAGS) $(OBJS) $(LDFLAGS) $(LDFLAGS_EX) $(LIBS) -o $@$(X) # See notes in src/backend/parser/Makefile about the following two rules exprparse.h: exprparse.c diff --git a/src/bin/psql/Makefile b/src/bin/psql/Makefile index be0032652cd..ce1c9ef48fa 100644 --- a/src/bin/psql/Makefile +++ b/src/bin/psql/Makefile @@ -46,7 +46,7 @@ OBJS = \ all: psql -psql: $(OBJS) | submake-libpq submake-libpgport submake-libpgfeutils +psql: $(OBJS) $(libpgfeutils) | submake-libpq submake-libpgport $(CC) $(CFLAGS) $(OBJS) $(LDFLAGS) $(LDFLAGS_EX) $(LIBS) -o $@$(X) help.o: sql_help.h diff --git a/src/bin/scripts/Makefile b/src/bin/scripts/Makefile index e6cd9ef4af5..11fe464a873 100644 --- a/src/bin/scripts/Makefile +++ b/src/bin/scripts/Makefile @@ -31,14 +31,22 @@ LDFLAGS_INTERNAL += -L$(top_builddir)/src/fe_utils -lpgfeutils $(libpq_pgport) all: $(PROGRAMS) -createdb: createdb.o common.o $(WIN32RES) | submake-libpq submake-libpgport submake-libpgfeutils -createuser: createuser.o common.o $(WIN32RES) | submake-libpq submake-libpgport submake-libpgfeutils -dropdb: dropdb.o common.o $(WIN32RES) | submake-libpq submake-libpgport submake-libpgfeutils -dropuser: dropuser.o common.o $(WIN32RES) | submake-libpq submake-libpgport submake-libpgfeutils -clusterdb: clusterdb.o common.o $(WIN32RES) | submake-libpq submake-libpgport submake-libpgfeutils -vacuumdb: vacuumdb.o vacuuming.o common.o $(WIN32RES) | submake-libpq submake-libpgport submake-libpgfeutils -reindexdb: reindexdb.o common.o $(WIN32RES) | submake-libpq submake-libpgport submake-libpgfeutils -pg_isready: pg_isready.o common.o $(WIN32RES) | submake-libpq submake-libpgport submake-libpgfeutils +createdb: createdb.o common.o $(WIN32RES) $(libpgfeutils) | submake-libpq submake-libpgport + $(CC) $(CFLAGS) createdb.o common.o $(WIN32RES) $(LDFLAGS) $(LDFLAGS_EX) $(LIBS) -o $@$(X) +createuser: createuser.o common.o $(WIN32RES) $(libpgfeutils) | submake-libpq submake-libpgport + $(CC) $(CFLAGS) createuser.o common.o $(WIN32RES) $(LDFLAGS) $(LDFLAGS_EX) $(LIBS) -o $@$(X) +dropdb: dropdb.o common.o $(WIN32RES) $(libpgfeutils) | submake-libpq submake-libpgport + $(CC) $(CFLAGS) dropdb.o common.o $(WIN32RES) $(LDFLAGS) $(LDFLAGS_EX) $(LIBS) -o $@$(X) +dropuser: dropuser.o common.o $(WIN32RES) $(libpgfeutils) | submake-libpq submake-libpgport + $(CC) $(CFLAGS) dropuser.o common.o $(WIN32RES) $(LDFLAGS) $(LDFLAGS_EX) $(LIBS) -o $@$(X) +clusterdb: clusterdb.o common.o $(WIN32RES) $(libpgfeutils) | submake-libpq submake-libpgport + $(CC) $(CFLAGS) clusterdb.o common.o $(WIN32RES) $(LDFLAGS) $(LDFLAGS_EX) $(LIBS) -o $@$(X) +vacuumdb: vacuumdb.o vacuuming.o common.o $(WIN32RES) $(libpgfeutils) | submake-libpq submake-libpgport + $(CC) $(CFLAGS) vacuumdb.o vacuuming.o common.o $(WIN32RES) $(LDFLAGS) $(LDFLAGS_EX) $(LIBS) -o $@$(X) +reindexdb: reindexdb.o common.o $(WIN32RES) $(libpgfeutils) | submake-libpq submake-libpgport + $(CC) $(CFLAGS) reindexdb.o common.o $(WIN32RES) $(LDFLAGS) $(LDFLAGS_EX) $(LIBS) -o $@$(X) +pg_isready: pg_isready.o common.o $(WIN32RES) $(libpgfeutils) | submake-libpq submake-libpgport + $(CC) $(CFLAGS) pg_isready.o common.o $(WIN32RES) $(LDFLAGS) $(LDFLAGS_EX) $(LIBS) -o $@$(X) install: all installdirs $(INSTALL_PROGRAM) createdb$(X) '$(DESTDIR)$(bindir)'/createdb$(X) diff --git a/src/test/modules/test_escape/Makefile b/src/test/modules/test_escape/Makefile index 786db4cbae4..fe797e13eda 100644 --- a/src/test/modules/test_escape/Makefile +++ b/src/test/modules/test_escape/Makefile @@ -23,5 +23,5 @@ include $(top_builddir)/src/Makefile.global include $(top_srcdir)/contrib/contrib-global.mk endif -test_escape$(X): | submake-libpgfeutils +test_escape$(X): $(libpgfeutils) check: test_escape$(X) -- 2.50.1 (Apple Git-155)