From 4cdab0b9af1f5245d81a5f155e2f0268a22982e8 Mon Sep 17 00:00:00 2001 From: Gao Zengqi Date: Sun, 19 Nov 2017 16:14:51 +0800 Subject: [PATCH] add dependency between client executes and static libraries --- src/Makefile.global.in | 14 +++++++++++++- src/bin/initdb/Makefile | 6 ++++-- src/bin/pg_archivecleanup/Makefile | 4 +++- src/bin/pg_basebackup/Makefile | 10 ++++++---- src/bin/pg_config/Makefile | 4 +++- src/bin/pg_controldata/Makefile | 4 +++- src/bin/pg_ctl/Makefile | 4 +++- src/bin/pg_dump/Makefile | 10 ++++++---- src/bin/pg_resetwal/Makefile | 4 +++- src/bin/pg_rewind/Makefile | 4 +++- src/bin/pg_test_fsync/Makefile | 4 +++- src/bin/pg_test_timing/Makefile | 4 +++- src/bin/pg_upgrade/Makefile | 6 ++++-- src/bin/pg_waldump/Makefile | 4 +++- src/bin/pgbench/Makefile | 6 ++++-- src/bin/psql/Makefile | 6 ++++-- src/bin/scripts/Makefile | 20 +++++++++++--------- src/tools/findoidjoins/Makefile | 4 +++- 18 files changed, 82 insertions(+), 36 deletions(-) diff --git a/src/Makefile.global.in b/src/Makefile.global.in index 27ec54a417..168d0e01a5 100644 --- a/src/Makefile.global.in +++ b/src/Makefile.global.in @@ -471,6 +471,18 @@ endif # # Some variables needed to find some client interfaces +# Static libraries for client executables. Client may use them to add dependency +# between client executable and these libraries. +stlib_pgcommon = $(top_builddir)/src/common/libpgcommon.a +stlib_pgport = $(top_builddir)/src/port/libpgport.a +stlib_pgfeutils = $(top_builddir)/src/fe_utils/libpgfeutils.a + +# This function is for generating LDFLAGS from static libraries +expand_stlibs = $(patsubst %,-L%,$(dir $(1))) $(patsubst lib%.a,-l%,$(notdir $(1))) + +# This macro is for use by client executables linking to libpgfeutils. +libpgfeutils = $(call expand_stlibs,$(stlib_pgfeutils)) + ifdef PGXS # some contribs assumes headers and libs are in the source tree... libpq_srcdir = $(includedir) @@ -494,7 +506,7 @@ libpq = -L$(libpq_builddir) -lpq ifdef PGXS libpq_pgport = -L$(libdir) -lpgcommon -lpgport $(libpq) else -libpq_pgport = -L$(top_builddir)/src/common -lpgcommon -L$(top_builddir)/src/port -lpgport $(libpq) +libpq_pgport = $(call expand_stlibs,$(stlib_pgcommon) $(stlib_pgport)) $(libpq) endif # Cygwin seems to need ldap libraries to be mentioned here, too diff --git a/src/bin/initdb/Makefile b/src/bin/initdb/Makefile index ec26652e82..8173200bf6 100644 --- a/src/bin/initdb/Makefile +++ b/src/bin/initdb/Makefile @@ -19,7 +19,7 @@ include $(top_builddir)/src/Makefile.global override CPPFLAGS := -DFRONTEND -I$(libpq_srcdir) -I$(top_srcdir)/src/timezone $(CPPFLAGS) # note: we need libpq only because fe_utils does -override LDFLAGS := -L$(top_builddir)/src/fe_utils -lpgfeutils $(libpq_pgport) $(LDFLAGS) +override LDFLAGS := $(libpgfeutils) $(libpq_pgport) $(LDFLAGS) # use system timezone data? ifneq (,$(with_system_tzdata)) @@ -28,9 +28,11 @@ endif OBJS= initdb.o findtimezone.o localtime.o encnames.o $(WIN32RES) +STLIBS = $(stlib_pgfeutils) $(stlib_pgcommon) $(stlib_pgport) + all: initdb -initdb: $(OBJS) | submake-libpq submake-libpgport submake-libpgfeutils +initdb: $(OBJS) $(STLIBS) | submake-libpq submake-libpgport submake-libpgfeutils $(CC) $(CFLAGS) $(OBJS) $(LDFLAGS) $(LDFLAGS_EX) $(LIBS) -o $@$(X) # We used to pull in all of libpq to get encnames.c, but that diff --git a/src/bin/pg_archivecleanup/Makefile b/src/bin/pg_archivecleanup/Makefile index c5bf99db0f..565ad37d81 100644 --- a/src/bin/pg_archivecleanup/Makefile +++ b/src/bin/pg_archivecleanup/Makefile @@ -9,9 +9,11 @@ include $(top_builddir)/src/Makefile.global OBJS = pg_archivecleanup.o $(WIN32RES) +STLIBS = $(stlib_pgport) + all: pg_archivecleanup -pg_archivecleanup: $(OBJS) | submake-libpgport +pg_archivecleanup: $(OBJS) $(STLIBS) | submake-libpgport $(CC) $(CFLAGS) $^ $(LDFLAGS) $(LDFLAGS_EX) $(LIBS) -o $@$(X) install: all installdirs diff --git a/src/bin/pg_basebackup/Makefile b/src/bin/pg_basebackup/Makefile index b707af9d26..03044c659d 100644 --- a/src/bin/pg_basebackup/Makefile +++ b/src/bin/pg_basebackup/Makefile @@ -19,19 +19,21 @@ top_builddir = ../../.. include $(top_builddir)/src/Makefile.global override CPPFLAGS := -I$(libpq_srcdir) $(CPPFLAGS) -override LDFLAGS := -L$(top_builddir)/src/fe_utils -lpgfeutils $(libpq_pgport) $(LDFLAGS) +override LDFLAGS := $(libpgfeutils) $(libpq_pgport) $(LDFLAGS) OBJS=receivelog.o streamutil.o walmethods.o $(WIN32RES) +STLIBS = $(stlib_pgfeutils) $(stlib_pgcommon) $(stlib_pgport) + all: pg_basebackup pg_receivewal pg_recvlogical -pg_basebackup: pg_basebackup.o $(OBJS) | submake-libpq submake-libpgport submake-libpgfeutils +pg_basebackup: pg_basebackup.o $(OBJS) $(STLIBS) | submake-libpq submake-libpgport submake-libpgfeutils $(CC) $(CFLAGS) pg_basebackup.o $(OBJS) $(LDFLAGS) $(LDFLAGS_EX) $(LIBS) -o $@$(X) -pg_receivewal: pg_receivewal.o $(OBJS) | submake-libpq submake-libpgport submake-libpgfeutils +pg_receivewal: pg_receivewal.o $(OBJS) $(STLIBS) | submake-libpq submake-libpgport submake-libpgfeutils $(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) $(STLIBS) | submake-libpq submake-libpgport submake-libpgfeutils $(CC) $(CFLAGS) pg_recvlogical.o $(OBJS) $(LDFLAGS) $(LDFLAGS_EX) $(LIBS) -o $@$(X) install: all installdirs diff --git a/src/bin/pg_config/Makefile b/src/bin/pg_config/Makefile index c41008763e..cdac9f90c9 100644 --- a/src/bin/pg_config/Makefile +++ b/src/bin/pg_config/Makefile @@ -17,9 +17,11 @@ include $(top_builddir)/src/Makefile.global OBJS= pg_config.o $(WIN32RES) +STLIBS = $(stlib_pgport) + all: pg_config -pg_config: $(OBJS) | submake-libpgport +pg_config: $(OBJS) $(STLIBS) | submake-libpgport $(CC) $(CFLAGS) $(OBJS) $(LDFLAGS) $(LDFLAGS_EX) $(LIBS) -o $@$(X) install: all installdirs diff --git a/src/bin/pg_controldata/Makefile b/src/bin/pg_controldata/Makefile index fd87daa11a..2b6e7abf41 100644 --- a/src/bin/pg_controldata/Makefile +++ b/src/bin/pg_controldata/Makefile @@ -17,9 +17,11 @@ include $(top_builddir)/src/Makefile.global OBJS= pg_controldata.o $(WIN32RES) +STLIBS = $(stlib_pgport) + all: pg_controldata -pg_controldata: $(OBJS) | submake-libpgport +pg_controldata: $(OBJS) $(STLIBS) | submake-libpgport $(CC) $(CFLAGS) $^ $(LDFLAGS) $(LDFLAGS_EX) $(LIBS) -o $@$(X) install: all installdirs diff --git a/src/bin/pg_ctl/Makefile b/src/bin/pg_ctl/Makefile index e734c952a2..1a613d746a 100644 --- a/src/bin/pg_ctl/Makefile +++ b/src/bin/pg_ctl/Makefile @@ -26,9 +26,11 @@ endif OBJS= pg_ctl.o $(WIN32RES) +STLIBS = $(stlib_pgport) + all: pg_ctl -pg_ctl: $(OBJS) | submake-libpgport $(SUBMAKE_LIBPQ) +pg_ctl: $(OBJS) $(STLIBS) | submake-libpgport $(SUBMAKE_LIBPQ) $(CC) $(CFLAGS) $(OBJS) $(LDFLAGS) $(LDFLAGS_EX) $(LIBS) -o $@$(X) install: all installdirs diff --git a/src/bin/pg_dump/Makefile b/src/bin/pg_dump/Makefile index 3700884720..d00fb81ea5 100644 --- a/src/bin/pg_dump/Makefile +++ b/src/bin/pg_dump/Makefile @@ -17,21 +17,23 @@ top_builddir = ../../.. include $(top_builddir)/src/Makefile.global override CPPFLAGS := -I$(libpq_srcdir) $(CPPFLAGS) -override LDFLAGS := -L$(top_builddir)/src/fe_utils -lpgfeutils $(libpq_pgport) $(LDFLAGS) +override LDFLAGS := $(libpgfeutils) $(libpq_pgport) $(LDFLAGS) OBJS= pg_backup_archiver.o pg_backup_db.o pg_backup_custom.o \ pg_backup_null.o pg_backup_tar.o pg_backup_directory.o \ pg_backup_utils.o parallel.o compress_io.o dumputils.o $(WIN32RES) +STLIBS = $(stlib_pgfeutils) $(stlib_pgcommon) $(stlib_pgport) + 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) $(STLIBS) | submake-libpq submake-libpgport submake-libpgfeutils $(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) $(STLIBS) | submake-libpq submake-libpgport submake-libpgfeutils $(CC) $(CFLAGS) pg_restore.o $(OBJS) $(LDFLAGS) $(LDFLAGS_EX) $(LIBS) -o $@$(X) -pg_dumpall: pg_dumpall.o dumputils.o | submake-libpq submake-libpgport submake-libpgfeutils +pg_dumpall: pg_dumpall.o dumputils.o $(STLIBS) | submake-libpq submake-libpgport submake-libpgfeutils $(CC) $(CFLAGS) pg_dumpall.o dumputils.o $(WIN32RES) $(LDFLAGS) $(LDFLAGS_EX) $(LIBS) -o $@$(X) install: all installdirs diff --git a/src/bin/pg_resetwal/Makefile b/src/bin/pg_resetwal/Makefile index 0f6e5da255..40c8478575 100644 --- a/src/bin/pg_resetwal/Makefile +++ b/src/bin/pg_resetwal/Makefile @@ -17,9 +17,11 @@ include $(top_builddir)/src/Makefile.global OBJS= pg_resetwal.o $(WIN32RES) +STLIBS = $(stlib_pgport) + all: pg_resetwal -pg_resetwal: $(OBJS) | submake-libpgport +pg_resetwal: $(OBJS) $(STLIBS) | submake-libpgport $(CC) $(CFLAGS) $^ $(LDFLAGS) $(LDFLAGS_EX) $(LIBS) -o $@$(X) install: all installdirs diff --git a/src/bin/pg_rewind/Makefile b/src/bin/pg_rewind/Makefile index e64ad76509..6daefa1150 100644 --- a/src/bin/pg_rewind/Makefile +++ b/src/bin/pg_rewind/Makefile @@ -22,11 +22,13 @@ OBJS = pg_rewind.o parsexlog.o xlogreader.o datapagemap.o timeline.o \ fetch.o file_ops.o copy_fetch.o libpq_fetch.o filemap.o logging.o \ $(WIN32RES) +STLIBS = $(stlib_pgcommon) $(stlib_pgport) + EXTRA_CLEAN = xlogreader.c all: pg_rewind -pg_rewind: $(OBJS) | submake-libpq submake-libpgport +pg_rewind: $(OBJS) $(STLIBS) | submake-libpq submake-libpgport $(CC) $(CFLAGS) $^ $(LDFLAGS) $(LDFLAGS_EX) $(LIBS) -o $@$(X) xlogreader.c: % : $(top_srcdir)/src/backend/access/transam/% diff --git a/src/bin/pg_test_fsync/Makefile b/src/bin/pg_test_fsync/Makefile index 90496df566..a2fa902449 100644 --- a/src/bin/pg_test_fsync/Makefile +++ b/src/bin/pg_test_fsync/Makefile @@ -9,9 +9,11 @@ include $(top_builddir)/src/Makefile.global OBJS = pg_test_fsync.o $(WIN32RES) +STLIBS = $(stlib_pgport) + all: pg_test_fsync -pg_test_fsync: $(OBJS) | submake-libpgport +pg_test_fsync: $(OBJS) $(STLIBS) | submake-libpgport $(CC) $(CFLAGS) $^ $(LDFLAGS) $(LDFLAGS_EX) $(LIBS) -o $@$(X) install: all installdirs diff --git a/src/bin/pg_test_timing/Makefile b/src/bin/pg_test_timing/Makefile index d1f35954f0..34a85847a0 100644 --- a/src/bin/pg_test_timing/Makefile +++ b/src/bin/pg_test_timing/Makefile @@ -9,9 +9,11 @@ include $(top_builddir)/src/Makefile.global OBJS = pg_test_timing.o $(WIN32RES) +STLIBS = $(stlib_pgport) + all: pg_test_timing -pg_test_timing: $(OBJS) | submake-libpgport +pg_test_timing: $(OBJS) $(STLIBS) | submake-libpgport $(CC) $(CFLAGS) $^ $(LDFLAGS) $(LDFLAGS_EX) $(LIBS) -o $@$(X) install: all installdirs diff --git a/src/bin/pg_upgrade/Makefile b/src/bin/pg_upgrade/Makefile index 1d6ee702c6..a24fb0fe20 100644 --- a/src/bin/pg_upgrade/Makefile +++ b/src/bin/pg_upgrade/Makefile @@ -11,13 +11,15 @@ OBJS = check.o controldata.o dump.o exec.o file.o function.o info.o \ option.o parallel.o pg_upgrade.o relfilenode.o server.o \ tablespace.o util.o version.o $(WIN32RES) +STLIBS = $(stlib_pgfeutils) $(stlib_pgcommon) $(stlib_pgport) + override CPPFLAGS := -DDLSUFFIX=\"$(DLSUFFIX)\" -I$(srcdir) -I$(libpq_srcdir) $(CPPFLAGS) -override LDFLAGS := -L$(top_builddir)/src/fe_utils -lpgfeutils $(libpq_pgport) $(LDFLAGS) +override LDFLAGS := $(libpgfeutils) $(libpq_pgport) $(LDFLAGS) all: pg_upgrade -pg_upgrade: $(OBJS) | submake-libpq submake-libpgport submake-libpgfeutils +pg_upgrade: $(OBJS) $(STLIBS) | submake-libpq submake-libpgport submake-libpgfeutils $(CC) $(CFLAGS) $^ $(LDFLAGS) $(LDFLAGS_EX) $(LIBS) -o $@$(X) install: all installdirs diff --git a/src/bin/pg_waldump/Makefile b/src/bin/pg_waldump/Makefile index f5957bd75a..990ccdbda7 100644 --- a/src/bin/pg_waldump/Makefile +++ b/src/bin/pg_waldump/Makefile @@ -10,6 +10,8 @@ include $(top_builddir)/src/Makefile.global OBJS = pg_waldump.o compat.o xlogreader.o rmgrdesc.o \ $(RMGRDESCOBJS) $(WIN32RES) +STLIBS = $(stlib_pgport) + override CPPFLAGS := -DFRONTEND $(CPPFLAGS) RMGRDESCSOURCES = $(sort $(notdir $(wildcard $(top_srcdir)/src/backend/access/rmgrdesc/*desc.c))) @@ -18,7 +20,7 @@ RMGRDESCOBJS = $(patsubst %.c,%.o,$(RMGRDESCSOURCES)) all: pg_waldump -pg_waldump: $(OBJS) | submake-libpgport +pg_waldump: $(OBJS) $(STLIBS) | submake-libpgport $(CC) $(CFLAGS) $^ $(LDFLAGS) $(LDFLAGS_EX) $(LIBS) -o $@$(X) xlogreader.c: % : $(top_srcdir)/src/backend/access/transam/% diff --git a/src/bin/pgbench/Makefile b/src/bin/pgbench/Makefile index 8a8e516896..764b6e6de7 100644 --- a/src/bin/pgbench/Makefile +++ b/src/bin/pgbench/Makefile @@ -9,8 +9,10 @@ include $(top_builddir)/src/Makefile.global OBJS = pgbench.o exprparse.o $(WIN32RES) +STLIBS = $(stlib_pgfeutils) $(stlib_pgcommon) $(stlib_pgport) + override CPPFLAGS := -I. -I$(srcdir) -I$(libpq_srcdir) $(CPPFLAGS) -override LDFLAGS := -L$(top_builddir)/src/fe_utils -lpgfeutils $(libpq_pgport) $(LDFLAGS) +override LDFLAGS := $(libpgfeutils) $(libpq_pgport) $(LDFLAGS) ifneq ($(PORTNAME), win32) override CFLAGS += $(PTHREAD_CFLAGS) @@ -20,7 +22,7 @@ LIBS += $(PTHREAD_LIBS) all: pgbench -pgbench: $(OBJS) | submake-libpq submake-libpgport submake-libpgfeutils +pgbench: $(OBJS) $(STLIBS) | submake-libpq submake-libpgport submake-libpgfeutils $(CC) $(CFLAGS) $^ $(LDFLAGS) $(LDFLAGS_EX) $(LIBS) -o $@$(X) # exprscan is compiled as part of exprparse diff --git a/src/bin/psql/Makefile b/src/bin/psql/Makefile index cabfe15f97..e37f823ca4 100644 --- a/src/bin/psql/Makefile +++ b/src/bin/psql/Makefile @@ -19,7 +19,7 @@ include $(top_builddir)/src/Makefile.global REFDOCDIR= $(top_srcdir)/doc/src/sgml/ref override CPPFLAGS := -I. -I$(srcdir) -I$(libpq_srcdir) $(CPPFLAGS) -override LDFLAGS := -L$(top_builddir)/src/fe_utils -lpgfeutils $(libpq_pgport) $(LDFLAGS) +override LDFLAGS := $(libpgfeutils) $(libpq_pgport) $(LDFLAGS) OBJS= command.o common.o conditional.o copy.o crosstabview.o \ describe.o help.o input.o large_obj.o mainloop.o \ @@ -27,10 +27,12 @@ OBJS= command.o common.o conditional.o copy.o crosstabview.o \ tab-complete.o variables.o \ $(WIN32RES) +STLIBS = $(stlib_pgfeutils) $(stlib_pgcommon) $(stlib_pgport) + all: psql -psql: $(OBJS) | submake-libpq submake-libpgport submake-libpgfeutils +psql: $(OBJS) $(STLIBS) | submake-libpq submake-libpgport submake-libpgfeutils $(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 a9c24a9f83..d6bd846445 100644 --- a/src/bin/scripts/Makefile +++ b/src/bin/scripts/Makefile @@ -19,21 +19,23 @@ include $(top_builddir)/src/Makefile.global PROGRAMS = createdb createuser dropdb dropuser clusterdb vacuumdb reindexdb pg_isready override CPPFLAGS := -I$(libpq_srcdir) $(CPPFLAGS) -override LDFLAGS := -L$(top_builddir)/src/fe_utils -lpgfeutils $(libpq_pgport) $(LDFLAGS) +override LDFLAGS := $(libpgfeutils) $(libpq_pgport) $(LDFLAGS) + +STLIBS = $(stlib_pgfeutils) $(stlib_pgcommon) $(stlib_pgport) all: $(PROGRAMS) %: %.o $(WIN32RES) $(CC) $(CFLAGS) $^ $(LDFLAGS) $(LDFLAGS_EX) $(LIBS) -o $@$(X) -createdb: createdb.o common.o | submake-libpq submake-libpgport submake-libpgfeutils -createuser: createuser.o common.o | submake-libpq submake-libpgport submake-libpgfeutils -dropdb: dropdb.o common.o | submake-libpq submake-libpgport submake-libpgfeutils -dropuser: dropuser.o common.o | submake-libpq submake-libpgport submake-libpgfeutils -clusterdb: clusterdb.o common.o | submake-libpq submake-libpgport submake-libpgfeutils -vacuumdb: vacuumdb.o common.o | submake-libpq submake-libpgport submake-libpgfeutils -reindexdb: reindexdb.o common.o | submake-libpq submake-libpgport submake-libpgfeutils -pg_isready: pg_isready.o common.o | submake-libpq submake-libpgport submake-libpgfeutils +createdb: createdb.o common.o $(STLIBS) | submake-libpq submake-libpgport submake-libpgfeutils +createuser: createuser.o common.o $(STLIBS) | submake-libpq submake-libpgport submake-libpgfeutils +dropdb: dropdb.o common.o $(STLIBS) | submake-libpq submake-libpgport submake-libpgfeutils +dropuser: dropuser.o common.o $(STLIBS) | submake-libpq submake-libpgport submake-libpgfeutils +clusterdb: clusterdb.o common.o $(STLIBS) | submake-libpq submake-libpgport submake-libpgfeutils +vacuumdb: vacuumdb.o common.o $(STLIBS) | submake-libpq submake-libpgport submake-libpgfeutils +reindexdb: reindexdb.o common.o $(STLIBS) | submake-libpq submake-libpgport submake-libpgfeutils +pg_isready: pg_isready.o common.o $(STLIBS) | submake-libpq submake-libpgport submake-libpgfeutils install: all installdirs $(INSTALL_PROGRAM) createdb$(X) '$(DESTDIR)$(bindir)'/createdb$(X) diff --git a/src/tools/findoidjoins/Makefile b/src/tools/findoidjoins/Makefile index 5410d85ec2..e64a670761 100644 --- a/src/tools/findoidjoins/Makefile +++ b/src/tools/findoidjoins/Makefile @@ -17,9 +17,11 @@ override LDFLAGS := $(libpq_pgport) $(LDFLAGS) OBJS= findoidjoins.o +STLIBS = $(stlib_pgport) + all: findoidjoins -findoidjoins: findoidjoins.o | submake-libpq submake-libpgport +findoidjoins: findoidjoins.o $(STLIBS) | submake-libpq submake-libpgport $(CC) $(CFLAGS) findoidjoins.o $(LDFLAGS) $(LDFLAGS_EX) $(LIBS) -o $@$(X) clean distclean maintainer-clean: -- 2.14.0