From a562c53ea735d21b8a264980dc16cf49c2d567ff Mon Sep 17 00:00:00 2001 From: Bruce Momjian Date: Fri, 25 Mar 2005 18:17:14 +0000 Subject: [PATCH] Have libpgport link before libpq so that PG client applications are more immunte to changes in libpq's usage of pgport between major versions. --- contrib/dbase/Makefile | 2 +- contrib/findoidjoins/Makefile | 2 +- contrib/oid2name/Makefile | 2 +- contrib/pg_autovacuum/Makefile | 2 +- contrib/pg_dumplo/Makefile | 2 +- contrib/pgbench/Makefile | 2 +- contrib/vacuumlo/Makefile | 2 +- src/Makefile.global.in | 17 ++++++++++++++++- src/bin/initdb/Makefile | 2 +- src/bin/pg_ctl/Makefile | 2 +- src/bin/pg_dump/Makefile | 6 +++--- src/bin/psql/Makefile | 2 +- src/bin/scripts/Makefile | 2 +- src/test/examples/Makefile | 2 +- 14 files changed, 31 insertions(+), 16 deletions(-) diff --git a/contrib/dbase/Makefile b/contrib/dbase/Makefile index 17096d37cb..3b1c9ac022 100644 --- a/contrib/dbase/Makefile +++ b/contrib/dbase/Makefile @@ -3,7 +3,7 @@ PROGRAM = dbf2pg OBJS = dbf.o dbf2pg.o endian.o PG_CPPFLAGS = -I$(libpq_srcdir) -PG_LIBS = $(libpq) +PG_LIBS = $(libpq_pgport) # Uncomment this to provide charset translation #PG_CPPFLAGS += -DHAVE_ICONV_H diff --git a/contrib/findoidjoins/Makefile b/contrib/findoidjoins/Makefile index cb0f4b5622..f0fac2da25 100644 --- a/contrib/findoidjoins/Makefile +++ b/contrib/findoidjoins/Makefile @@ -4,7 +4,7 @@ PROGRAM = findoidjoins OBJS = findoidjoins.o PG_CPPFLAGS = -I$(libpq_srcdir) -PG_LIBS = $(libpq) +PG_LIBS = $(libpq_pgport) SCRIPTS = make_oidjoins_check DOCS = README.findoidjoins diff --git a/contrib/oid2name/Makefile b/contrib/oid2name/Makefile index 02d51dec86..152cf1ccd3 100644 --- a/contrib/oid2name/Makefile +++ b/contrib/oid2name/Makefile @@ -4,7 +4,7 @@ PROGRAM = oid2name OBJS = oid2name.o PG_CPPFLAGS = -I$(libpq_srcdir) -PG_LIBS = $(libpq) +PG_LIBS = $(libpq_pgport) DOCS = README.oid2name diff --git a/contrib/pg_autovacuum/Makefile b/contrib/pg_autovacuum/Makefile index 00b1b3fe95..c512d18b7e 100644 --- a/contrib/pg_autovacuum/Makefile +++ b/contrib/pg_autovacuum/Makefile @@ -2,7 +2,7 @@ PROGRAM = pg_autovacuum OBJS = pg_autovacuum.o dllist.o PG_CPPFLAGS = -I$(libpq_srcdir) -DFRONTEND -PG_LIBS = $(libpq) +PG_LIBS = $(libpq_pgport) DOCS = README.pg_autovacuum diff --git a/contrib/pg_dumplo/Makefile b/contrib/pg_dumplo/Makefile index 8373a0b05c..682d9dcf1a 100644 --- a/contrib/pg_dumplo/Makefile +++ b/contrib/pg_dumplo/Makefile @@ -4,7 +4,7 @@ PROGRAM = pg_dumplo OBJS = main.o lo_export.o lo_import.o utils.o PG_CPPFLAGS = -I$(libpq_srcdir) -PG_LIBS = $(libpq) +PG_LIBS = $(libpq_pgport) DOCS = README.pg_dumplo diff --git a/contrib/pgbench/Makefile b/contrib/pgbench/Makefile index 827fd1b037..1e0f639349 100644 --- a/contrib/pgbench/Makefile +++ b/contrib/pgbench/Makefile @@ -4,7 +4,7 @@ PROGRAM = pgbench OBJS = pgbench.o PG_CPPFLAGS = -I$(libpq_srcdir) -PG_LIBS = $(libpq) +PG_LIBS = $(libpq_pgport) DOCS = README.pgbench README.pgbench_jis diff --git a/contrib/vacuumlo/Makefile b/contrib/vacuumlo/Makefile index fc44bc8575..1b5229d407 100644 --- a/contrib/vacuumlo/Makefile +++ b/contrib/vacuumlo/Makefile @@ -4,7 +4,7 @@ PROGRAM = vacuumlo OBJS = vacuumlo.o PG_CPPFLAGS = -I$(libpq_srcdir) -PG_LIBS = $(libpq) +PG_LIBS = $(libpq_pgport) DOCS = README.vacuumlo diff --git a/src/Makefile.global.in b/src/Makefile.global.in index 9a8b4935d8..02d75f8e8b 100644 --- a/src/Makefile.global.in +++ b/src/Makefile.global.in @@ -306,8 +306,10 @@ libpq_srcdir = $(top_srcdir)/src/interfaces/libpq libpq_builddir = $(top_builddir)/src/interfaces/libpq endif +# This is for use for libraries linking to libpq. Because libpqport +# isn't created with the same link flags as libpq, it can't be used. libpq = -L$(libpq_builddir) -lpq - + # If doing static linking, shared library dependency can't be # used so we specify pthread libs for every usage of libpq ifeq ($(enable_shared), no) @@ -320,6 +322,19 @@ libpq += $(PTHREAD_LIBS) endif endif +# Force clients to pull symbols from the non-shared library libpgport +# rather than pulling some libpgport symbols from libpq just because +# libpq uses those functions too. This makes applications less +# dependent on changes in libpq's usage of pgport. To do this we link to +# pgport before libpq. This does cause duplicate -lpgport's to appear +# on client link lines. +ifdef PGXS +libpq_pgport = -L$(libdir) -lpgport $(libpq) +else +libpq_pgport = -L$(top_builddir)/src/port -lpgport $(libpq) +endif + + submake-libpq: $(MAKE) -C $(libpq_builddir) all diff --git a/src/bin/initdb/Makefile b/src/bin/initdb/Makefile index 7e27cebd5c..4ea426f2f6 100644 --- a/src/bin/initdb/Makefile +++ b/src/bin/initdb/Makefile @@ -21,7 +21,7 @@ OBJS= initdb.o $(WIN32RES) all: submake-libpq submake-libpgport initdb initdb: $(OBJS) $(libpq_builddir)/libpq.a - $(CC) $(CFLAGS) $(OBJS) $(libpq) $(LDFLAGS) $(LIBS) -o $@$(X) + $(CC) $(CFLAGS) $(OBJS) $(libpq_pgport) $(LDFLAGS) $(LIBS) -o $@$(X) install: all installdirs $(INSTALL_PROGRAM) initdb$(X) $(DESTDIR)$(bindir)/initdb$(X) diff --git a/src/bin/pg_ctl/Makefile b/src/bin/pg_ctl/Makefile index a20a8a6a88..975a22658b 100644 --- a/src/bin/pg_ctl/Makefile +++ b/src/bin/pg_ctl/Makefile @@ -21,7 +21,7 @@ OBJS= pg_ctl.o $(WIN32RES) all: submake-libpq submake-libpgport pg_ctl pg_ctl: $(OBJS) $(libpq_builddir)/libpq.a - $(CC) $(CFLAGS) $(OBJS) $(libpq) $(LDFLAGS) $(LIBS) -o $@$(X) + $(CC) $(CFLAGS) $(OBJS) $(libpq_pgport) $(LDFLAGS) $(LIBS) -o $@$(X) install: all installdirs $(INSTALL_PROGRAM) pg_ctl$(X) $(DESTDIR)$(bindir)/pg_ctl$(X) diff --git a/src/bin/pg_dump/Makefile b/src/bin/pg_dump/Makefile index e774f6507f..d71966cdf3 100644 --- a/src/bin/pg_dump/Makefile +++ b/src/bin/pg_dump/Makefile @@ -25,13 +25,13 @@ EXTRA_OBJS = $(top_builddir)/src/backend/parser/keywords.o all: submake-libpq submake-libpgport submake-backend pg_dump pg_restore pg_dumpall pg_dump: pg_dump.o common.o pg_dump_sort.o $(OBJS) $(libpq_builddir)/libpq.a - $(CC) $(CFLAGS) pg_dump.o common.o pg_dump_sort.o $(OBJS) $(EXTRA_OBJS) $(libpq) $(LDFLAGS) $(LIBS) -o $@$(X) + $(CC) $(CFLAGS) pg_dump.o common.o pg_dump_sort.o $(OBJS) $(EXTRA_OBJS) $(libpq_pgport) $(LDFLAGS) $(LIBS) -o $@$(X) pg_restore: pg_restore.o $(OBJS) $(libpq_builddir)/libpq.a - $(CC) $(CFLAGS) pg_restore.o $(OBJS) $(EXTRA_OBJS) $(libpq) $(LDFLAGS) $(LIBS) -o $@$(X) + $(CC) $(CFLAGS) pg_restore.o $(OBJS) $(EXTRA_OBJS) $(libpq_pgport) $(LDFLAGS) $(LIBS) -o $@$(X) pg_dumpall: pg_dumpall.o dumputils.o $(libpq_builddir)/libpq.a - $(CC) $(CFLAGS) pg_dumpall.o dumputils.o $(EXTRA_OBJS) $(WIN32RES) $(libpq) $(LDFLAGS) $(LIBS) -o $@$(X) + $(CC) $(CFLAGS) pg_dumpall.o dumputils.o $(EXTRA_OBJS) $(WIN32RES) $(libpq_pgport) $(LDFLAGS) $(LIBS) -o $@$(X) .PHONY: submake-backend submake-backend: diff --git a/src/bin/psql/Makefile b/src/bin/psql/Makefile index 9934d95512..1b214bda79 100644 --- a/src/bin/psql/Makefile +++ b/src/bin/psql/Makefile @@ -29,7 +29,7 @@ FLEXFLAGS = -Cfe all: submake-libpq submake-libpgport psql psql: $(OBJS) $(libpq_builddir)/libpq.a - $(CC) $(CFLAGS) $(OBJS) $(libpq) $(LDFLAGS) $(LIBS) -o $@$(X) + $(CC) $(CFLAGS) $(OBJS) $(libpq_pgport) $(LDFLAGS) $(LIBS) -o $@$(X) help.o: $(srcdir)/sql_help.h diff --git a/src/bin/scripts/Makefile b/src/bin/scripts/Makefile index 83a319b37c..15b4e0c4fd 100644 --- a/src/bin/scripts/Makefile +++ b/src/bin/scripts/Makefile @@ -21,7 +21,7 @@ override CPPFLAGS := -DFRONTEND -I$(top_srcdir)/src/bin/pg_dump -I$(top_srcdir)/ all: submake-libpq submake-backend $(PROGRAMS) %: %.o $(WIN32RES) - $(CC) $(CFLAGS) $^ $(libpq) $(LDFLAGS) $(LIBS) -o $@$(X) + $(CC) $(CFLAGS) $^ $(libpq_pgport) $(LDFLAGS) $(LIBS) -o $@$(X) createdb: createdb.o common.o dumputils.o $(top_builddir)/src/backend/parser/keywords.o createlang: createlang.o common.o print.o mbprint.o diff --git a/src/test/examples/Makefile b/src/test/examples/Makefile index 0326d42911..b55405d737 100644 --- a/src/test/examples/Makefile +++ b/src/test/examples/Makefile @@ -7,7 +7,7 @@ top_builddir = ../../.. include $(top_builddir)/src/Makefile.global override CPPFLAGS := -I$(libpq_srcdir) $(CPPFLAGS) -override LDLIBS := $(libpq) -lpgport $(LDLIBS) +override LDLIBS := $(libpq_pgport) $(LDLIBS) PROGS = testlibpq testlibpq2 testlibpq3 testlibpq4 testlo -- 2.39.5