Received: from malur.postgresql.org ([217.196.149.56]) by arkaria.postgresql.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_CBC_SHA384:256) (Exim 4.89) (envelope-from ) id 1f37FF-0004wo-Ku for pgsql-hackers@arkaria.postgresql.org; Mon, 02 Apr 2018 21:44:05 +0000 Received: from localhost ([127.0.0.1] helo=malur.postgresql.org) by malur.postgresql.org with esmtp (Exim 4.89) (envelope-from ) id 1f37FD-0005ar-Ea for pgsql-hackers@arkaria.postgresql.org; Mon, 02 Apr 2018 21:44:03 +0000 Received: from magus.postgresql.org ([2a02:c0:301:0:ffff::29]) by malur.postgresql.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_CBC_SHA384:256) (Exim 4.89) (envelope-from ) id 1f37FD-0005ai-6D for pgsql-hackers@lists.postgresql.org; Mon, 02 Apr 2018 21:44:03 +0000 Received: from sss.pgh.pa.us ([66.207.139.130]) by magus.postgresql.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_CBC_SHA384:256) (Exim 4.89) (envelope-from ) id 1f37F9-00030K-3b for pgsql-hackers@lists.postgresql.org; Mon, 02 Apr 2018 21:44:02 +0000 Received: from sss1.sss.pgh.pa.us (localhost [127.0.0.1]) by sss.pgh.pa.us (8.14.4/8.14.4) with ESMTP id w32Lhsae023061; Mon, 2 Apr 2018 17:43:55 -0400 From: Tom Lane To: Andres Freund cc: pgsql-hackers@lists.postgresql.org Subject: Re: Rethinking -L switch handling and construction of LDFLAGS In-reply-to: <11431.1522611733@sss.pgh.pa.us> References: <25214.1522604295@sss.pgh.pa.us> <20180401174338.dgwcclz3ljiumaeq@alap3.anarazel.de> <25881.1522605305@sss.pgh.pa.us> <20180401192535.pariji2i3aw4rvf4@alap3.anarazel.de> <11431.1522611733@sss.pgh.pa.us> Comments: In-reply-to Tom Lane message dated "Sun, 01 Apr 2018 15:42:13 -0400" MIME-Version: 1.0 Content-Type: multipart/mixed; boundary="----- =_aaaaaaaaaa0" Content-ID: <22953.1522705277.0@sss.pgh.pa.us> Date: Mon, 02 Apr 2018 17:43:54 -0400 Message-ID: <23060.1522705434@sss.pgh.pa.us> List-Id: List-Help: List-Subscribe: List-Post: List-Owner: List-Archive: Precedence: bulk ------- =_aaaaaaaaaa0 Content-Type: text/plain; charset="us-ascii" Content-ID: <22953.1522705277.1@sss.pgh.pa.us> So here's a draft patch for this. It fixes the originally complained-of issue about --with-libxml breaking the build on Macs. I've not tested it very far beyond that plus a sanity cross-check on Linux, but I doubt there's any point in further manual testing; we might as well just throw it at the buildfarm. I'm pretty happy with the way this turned out. It's not a complicated change, and we're no longer breaking our own rules about how to manage LDFLAGS adjustments. Some notes: * I ended up adding not only LDFLAGS_INTERNAL and SHLIB_LINK_INTERNAL, but also PG_LIBS_INTERNAL. As things stood, the only uses of PG_LIBS were for within-tree library references, so that it was fine that the make rule that uses this variable put it before LDFLAGS. But if anyone ever tried to use PG_LIBS for the seemingly obvious purpose of referencing an external library, we'd be right back in hazard land. So that variable needs to be split as well. * I documented SHLIB_LINK_INTERNAL and PG_LIBS_INTERNAL in the comments in pgxs.mk, but not in the user-facing documentation about using PGXS. This is on the theory that only within-tree modules need either of those variables, so users don't need them. I could be convinced otherwise, though. * Some of these changes aren't really essential, eg the change in hstore_plperl/Makefile to use SHLIB_LINK_INTERNAL instead of SHLIB_LINK; since there's no -L switch there, it'd work either way. But I thought it best to maintain a consistent rule of using the _INTERNAL variable for within-tree references. * The change to STD_LDFLAGS in src/common/Makefile is because I noticed that "pg_config --ldflags" has been printing "-L../../../src/common", which it surely should not. Apparently we forgot to fix this rule when we rearranged things to create src/common/. I'm tempted to make the rule be STD_LDFLAGS := $(filter-out $(LDFLAGS_INTERNAL),$(LDFLAGS)) in hopes of preventing a repetition of such silliness, but desisted for the moment, because I'm not quite sure if this is a good idea, or if it risks taking too much out. Anybody have an opinion about it? regards, tom lane ------- =_aaaaaaaaaa0 Content-Type: text/x-diff; name="separate-internal-and-external-L-switches-1.patch"; charset="us-ascii" Content-ID: <22953.1522705277.2@sss.pgh.pa.us> Content-Description: separate-internal-and-external-L-switches-1.patch Content-Transfer-Encoding: quoted-printable diff --git a/contrib/dblink/Makefile b/contrib/dblink/Makefile index 5189758..b1a5e06 100644 --- a/contrib/dblink/Makefile +++ b/contrib/dblink/Makefile @@ -3,7 +3,7 @@ MODULE_big =3D dblink OBJS =3D dblink.o $(WIN32RES) PG_CPPFLAGS =3D -I$(libpq_srcdir) -SHLIB_LINK =3D $(libpq) +SHLIB_LINK_INTERNAL =3D $(libpq) = EXTENSION =3D dblink DATA =3D dblink--1.2.sql dblink--1.1--1.2.sql dblink--1.0--1.1.sql \ diff --git a/contrib/hstore_plperl/Makefile b/contrib/hstore_plperl/Makefi= le index c0906db..f63cba2 100644 --- a/contrib/hstore_plperl/Makefile +++ b/contrib/hstore_plperl/Makefile @@ -28,7 +28,7 @@ ifeq ($(PORTNAME), win32) # these settings are the same as for plperl override CPPFLAGS +=3D -DPLPERL_HAVE_UID_GID -Wno-comment # ... see silliness in plperl Makefile ... -SHLIB_LINK +=3D $(sort $(wildcard ../../src/pl/plperl/libperl*.a)) +SHLIB_LINK_INTERNAL +=3D $(sort $(wildcard ../../src/pl/plperl/libperl*.a= )) else rpathdir =3D $(perl_archlibexp)/CORE SHLIB_LINK +=3D $(perl_embed_ldflags) diff --git a/contrib/hstore_plpython/Makefile b/contrib/hstore_plpython/Ma= kefile index 7ff787a..b81735a 100644 --- a/contrib/hstore_plpython/Makefile +++ b/contrib/hstore_plpython/Makefile @@ -26,7 +26,7 @@ endif # We must link libpython explicitly ifeq ($(PORTNAME), win32) # ... see silliness in plpython Makefile ... -SHLIB_LINK +=3D $(sort $(wildcard ../../src/pl/plpython/libpython*.a)) +SHLIB_LINK_INTERNAL +=3D $(sort $(wildcard ../../src/pl/plpython/libpytho= n*.a)) else rpathdir =3D $(python_libdir) SHLIB_LINK +=3D $(python_libspec) $(python_additional_libs) diff --git a/contrib/jsonb_plpython/Makefile b/contrib/jsonb_plpython/Make= file index 8c7090a..b3c98e6 100644 --- a/contrib/jsonb_plpython/Makefile +++ b/contrib/jsonb_plpython/Makefile @@ -26,7 +26,7 @@ endif # We must link libpython explicitly ifeq ($(PORTNAME), win32) # ... see silliness in plpython Makefile ... -SHLIB_LINK +=3D $(sort $(wildcard ../../src/pl/plpython/libpython*.a)) +SHLIB_LINK_INTERNAL +=3D $(sort $(wildcard ../../src/pl/plpython/libpytho= n*.a)) else rpathdir =3D $(python_libdir) SHLIB_LINK +=3D $(python_libspec) $(python_additional_libs) diff --git a/contrib/ltree_plpython/Makefile b/contrib/ltree_plpython/Make= file index bc7502b..7e988c7 100644 --- a/contrib/ltree_plpython/Makefile +++ b/contrib/ltree_plpython/Makefile @@ -26,7 +26,7 @@ endif # We must link libpython explicitly ifeq ($(PORTNAME), win32) # ... see silliness in plpython Makefile ... -SHLIB_LINK +=3D $(sort $(wildcard ../../src/pl/plpython/libpython*.a)) +SHLIB_LINK_INTERNAL +=3D $(sort $(wildcard ../../src/pl/plpython/libpytho= n*.a)) else rpathdir =3D $(python_libdir) SHLIB_LINK +=3D $(python_libspec) $(python_additional_libs) diff --git a/contrib/oid2name/Makefile b/contrib/oid2name/Makefile index 3414b4a..3eef8f6 100644 --- a/contrib/oid2name/Makefile +++ b/contrib/oid2name/Makefile @@ -7,7 +7,7 @@ PROGRAM =3D oid2name OBJS =3D oid2name.o $(WIN32RES) = PG_CPPFLAGS =3D -I$(libpq_srcdir) -PG_LIBS =3D $(libpq_pgport) +PG_LIBS_INTERNAL =3D $(libpq_pgport) = ifdef USE_PGXS PG_CONFIG =3D pg_config diff --git a/contrib/postgres_fdw/Makefile b/contrib/postgres_fdw/Makefile index 3543312..85394b4 100644 --- a/contrib/postgres_fdw/Makefile +++ b/contrib/postgres_fdw/Makefile @@ -5,7 +5,7 @@ OBJS =3D postgres_fdw.o option.o deparse.o connection.o sh= ippable.o $(WIN32RES) PGFILEDESC =3D "postgres_fdw - foreign data wrapper for PostgreSQL" = PG_CPPFLAGS =3D -I$(libpq_srcdir) -SHLIB_LINK =3D $(libpq) +SHLIB_LINK_INTERNAL =3D $(libpq) = EXTENSION =3D postgres_fdw DATA =3D postgres_fdw--1.0.sql diff --git a/contrib/spi/Makefile b/contrib/spi/Makefile index 10ab5bb..42aa374 100644 --- a/contrib/spi/Makefile +++ b/contrib/spi/Makefile @@ -17,8 +17,6 @@ DOCS =3D $(addsuffix .example, $(MODULES)) # comment out if you want a quieter refint package for other uses PG_CPPFLAGS =3D -DREFINT_VERBOSE = -LDFLAGS_SL +=3D -L$(top_builddir)/src/port -lpgport - ifdef USE_PGXS PG_CONFIG =3D pg_config PGXS :=3D $(shell $(PG_CONFIG) --pgxs) diff --git a/contrib/vacuumlo/Makefile b/contrib/vacuumlo/Makefile index b4ba896..71106ff 100644 --- a/contrib/vacuumlo/Makefile +++ b/contrib/vacuumlo/Makefile @@ -7,7 +7,7 @@ PROGRAM =3D vacuumlo OBJS =3D vacuumlo.o $(WIN32RES) = PG_CPPFLAGS =3D -I$(libpq_srcdir) -PG_LIBS =3D $(libpq_pgport) +PG_LIBS_INTERNAL =3D $(libpq_pgport) = ifdef USE_PGXS PG_CONFIG =3D pg_config diff --git a/src/Makefile.global.in b/src/Makefile.global.in index 04cace1..2dac3ff 100644 --- a/src/Makefile.global.in +++ b/src/Makefile.global.in @@ -290,17 +290,26 @@ LLVM_LIBS=3D@LLVM_LIBS@ LD =3D @LD@ with_gnu_ld =3D @with_gnu_ld@ = -# We want -L for libpgport.a and libpgcommon.a to be first in LDFLAGS. W= e -# also need LDFLAGS to be a "recursively expanded" variable, else adjustm= ents -# to rpathdir don't work right. So we must NOT do LDFLAGS :=3D something= , -# meaning this has to be done first and elsewhere we must only do LDFLAGS= +=3D -# something. +# It's critical that within LDFLAGS, all -L switches pointing to build-tr= ee +# directories come before any -L switches pointing to external directorie= s. +# Otherwise it's possible for, e.g., a platform-provided copy of libpq.so +# to get linked in place of the one we've built. Therefore we adopt the +# convention that the first component of LDFLAGS is an extra variable +# LDFLAGS_INTERNAL, and -L and -l switches for PG's own libraries must be +# put into LDFLAGS_INTERNAL, so they will appear ahead of those for exter= nal +# libraries. +# +# We need LDFLAGS and LDFLAGS_INTERNAL to be "recursively expanded" varia= bles, +# else adjustments to, e.g., rpathdir don't work right. So we must NOT d= o +# "LDFLAGS :=3D something" anywhere, ditto for LDFLAGS_INTERNAL. +# These initial assignments must be "=3D" type, and elsewhere we must onl= y do +# "LDFLAGS +=3D something" or "LDFLAGS_INTERNAL +=3D something". ifdef PGXS - LDFLAGS =3D -L$(libdir) + LDFLAGS_INTERNAL =3D -L$(libdir) else - LDFLAGS =3D -L$(top_builddir)/src/port -L$(top_builddir)/src/common + LDFLAGS_INTERNAL =3D -L$(top_builddir)/src/port -L$(top_builddir)/src/c= ommon endif -LDFLAGS +=3D @LDFLAGS@ +LDFLAGS =3D $(LDFLAGS_INTERNAL) @LDFLAGS@ = LDFLAGS_EX =3D @LDFLAGS_EX@ # LDFLAGS_SL might have already been assigned by calling makefile diff --git a/src/Makefile.shlib b/src/Makefile.shlib index 74d48c5..95b82a6 100644 --- a/src/Makefile.shlib +++ b/src/Makefile.shlib @@ -20,12 +20,16 @@ # # NAME Name of library to build (no suffix nor "lib" pre= fix) # OBJS List of object files to include in library -# SHLIB_LINK If shared library relies on other libraries, -# additional stuff to put in its link command +# SHLIB_LINK Stuff to append to library's link command +# (typically, -L and -l switches for external libra= ries) +# SHLIB_LINK_INTERNAL -L and -l switches for Postgres-supplied librarie= s # SHLIB_PREREQS Order-only prerequisites for library build target # SHLIB_EXPORTS (optional) Name of file containing list of symbol= s to # export, in the format "function_name number" # +# Don't use SHLIB_LINK for references to files in the build tree, or the +# wrong things will happen --- use SHLIB_LINK_INTERNAL for those! +# # When building a shared library, the following version information # must also be set. It should be omitted when building a dynamically # loadable module. @@ -70,6 +74,8 @@ COMPILER =3D $(CC) $(CFLAGS) LINK.static =3D $(AR) $(AROPT) = +LDFLAGS_INTERNAL +=3D $(SHLIB_LINK_INTERNAL) + = = ifdef SO_MAJOR_VERSION diff --git a/src/backend/replication/libpqwalreceiver/Makefile b/src/backe= nd/replication/libpqwalreceiver/Makefile index a7a5fe1..75b0e2b 100644 --- a/src/backend/replication/libpqwalreceiver/Makefile +++ b/src/backend/replication/libpqwalreceiver/Makefile @@ -15,7 +15,8 @@ include $(top_builddir)/src/Makefile.global override CPPFLAGS :=3D -I$(srcdir) -I$(libpq_srcdir) $(CPPFLAGS) = OBJS =3D libpqwalreceiver.o $(WIN32RES) -SHLIB_LINK =3D $(libpq) $(filter -lintl, $(LIBS)) +SHLIB_LINK_INTERNAL =3D $(libpq) +SHLIB_LINK =3D $(filter -lintl, $(LIBS)) SHLIB_PREREQS =3D submake-libpq PGFILEDESC =3D "libpqwalreceiver - receive WAL during streaming replicati= on" NAME =3D libpqwalreceiver diff --git a/src/bin/initdb/Makefile b/src/bin/initdb/Makefile index dae3daf..8c23941 100644 --- a/src/bin/initdb/Makefile +++ b/src/bin/initdb/Makefile @@ -19,7 +19,7 @@ include $(top_builddir)/src/Makefile.global override CPPFLAGS :=3D -DFRONTEND -I$(libpq_srcdir) -I$(top_srcdir)/src/t= imezone $(CPPFLAGS) = # note: we need libpq only because fe_utils does -override LDFLAGS :=3D -L$(top_builddir)/src/fe_utils -lpgfeutils $(libpq_= pgport) $(LDFLAGS) +LDFLAGS_INTERNAL +=3D -L$(top_builddir)/src/fe_utils -lpgfeutils $(libpq_= pgport) = # use system timezone data? ifneq (,$(with_system_tzdata)) diff --git a/src/bin/pg_basebackup/Makefile b/src/bin/pg_basebackup/Makefi= le index 54f915e..74dfb7a 100644 --- a/src/bin/pg_basebackup/Makefile +++ b/src/bin/pg_basebackup/Makefile @@ -19,7 +19,7 @@ top_builddir =3D ../../.. include $(top_builddir)/src/Makefile.global = override CPPFLAGS :=3D -I$(libpq_srcdir) $(CPPFLAGS) -override LDFLAGS :=3D -L$(top_builddir)/src/fe_utils -lpgfeutils $(libpq_= pgport) $(LDFLAGS) +LDFLAGS_INTERNAL +=3D -L$(top_builddir)/src/fe_utils -lpgfeutils $(libpq_= pgport) = OBJS=3Dreceivelog.o streamutil.o walmethods.o $(WIN32RES) = diff --git a/src/bin/pg_ctl/Makefile b/src/bin/pg_ctl/Makefile index 4afc791..0202853 100644 --- a/src/bin/pg_ctl/Makefile +++ b/src/bin/pg_ctl/Makefile @@ -20,7 +20,7 @@ include $(top_builddir)/src/Makefile.global # but let's not pull that in on platforms where we don't need it. ifeq ($(PORTNAME), win32) override CPPFLAGS :=3D -I$(libpq_srcdir) $(CPPFLAGS) -override LDFLAGS :=3D $(libpq_pgport) $(LDFLAGS) +LDFLAGS_INTERNAL +=3D $(libpq_pgport) SUBMAKE_LIBPQ :=3D submake-libpq endif = diff --git a/src/bin/pg_dump/Makefile b/src/bin/pg_dump/Makefile index e3bfc95..c46804a 100644 --- a/src/bin/pg_dump/Makefile +++ b/src/bin/pg_dump/Makefile @@ -17,7 +17,7 @@ top_builddir =3D ../../.. include $(top_builddir)/src/Makefile.global = override CPPFLAGS :=3D -I$(libpq_srcdir) $(CPPFLAGS) -override LDFLAGS :=3D -L$(top_builddir)/src/fe_utils -lpgfeutils $(libpq_= pgport) $(LDFLAGS) +LDFLAGS_INTERNAL +=3D -L$(top_builddir)/src/fe_utils -lpgfeutils $(libpq_= pgport) = OBJS=3D pg_backup_archiver.o pg_backup_db.o pg_backup_custom.o \ pg_backup_null.o pg_backup_tar.o pg_backup_directory.o \ diff --git a/src/bin/pg_rewind/Makefile b/src/bin/pg_rewind/Makefile index 422c3ee..2bcfcc6 100644 --- a/src/bin/pg_rewind/Makefile +++ b/src/bin/pg_rewind/Makefile @@ -16,7 +16,7 @@ top_builddir =3D ../../.. include $(top_builddir)/src/Makefile.global = override CPPFLAGS :=3D -I$(libpq_srcdir) -DFRONTEND $(CPPFLAGS) -override LDFLAGS :=3D $(libpq_pgport) $(LDFLAGS) +LDFLAGS_INTERNAL +=3D $(libpq_pgport) = OBJS =3D 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 \ diff --git a/src/bin/pg_upgrade/Makefile b/src/bin/pg_upgrade/Makefile index 1d6ee70..adb0d5d 100644 --- a/src/bin/pg_upgrade/Makefile +++ b/src/bin/pg_upgrade/Makefile @@ -12,7 +12,7 @@ OBJS =3D check.o controldata.o dump.o exec.o file.o func= tion.o info.o \ tablespace.o util.o version.o $(WIN32RES) = override CPPFLAGS :=3D -DDLSUFFIX=3D\"$(DLSUFFIX)\" -I$(srcdir) -I$(libpq= _srcdir) $(CPPFLAGS) -override LDFLAGS :=3D -L$(top_builddir)/src/fe_utils -lpgfeutils $(libpq_= pgport) $(LDFLAGS) +LDFLAGS_INTERNAL +=3D -L$(top_builddir)/src/fe_utils -lpgfeutils $(libpq_= pgport) = = all: pg_upgrade diff --git a/src/bin/pgbench/Makefile b/src/bin/pgbench/Makefile index 8a8e516..25abd0a 100644 --- a/src/bin/pgbench/Makefile +++ b/src/bin/pgbench/Makefile @@ -10,7 +10,7 @@ include $(top_builddir)/src/Makefile.global OBJS =3D pgbench.o exprparse.o $(WIN32RES) = override CPPFLAGS :=3D -I. -I$(srcdir) -I$(libpq_srcdir) $(CPPFLAGS) -override LDFLAGS :=3D -L$(top_builddir)/src/fe_utils -lpgfeutils $(libpq_= pgport) $(LDFLAGS) +LDFLAGS_INTERNAL +=3D -L$(top_builddir)/src/fe_utils -lpgfeutils $(libpq_= pgport) = ifneq ($(PORTNAME), win32) override CFLAGS +=3D $(PTHREAD_CFLAGS) diff --git a/src/bin/psql/Makefile b/src/bin/psql/Makefile index 2ad73d0..cd1b1b6 100644 --- a/src/bin/psql/Makefile +++ b/src/bin/psql/Makefile @@ -19,7 +19,7 @@ include $(top_builddir)/src/Makefile.global REFDOCDIR=3D $(top_srcdir)/doc/src/sgml/ref = override CPPFLAGS :=3D -I. -I$(srcdir) -I$(libpq_srcdir) $(CPPFLAGS) -override LDFLAGS :=3D -L$(top_builddir)/src/fe_utils -lpgfeutils $(libpq_= pgport) $(LDFLAGS) +LDFLAGS_INTERNAL +=3D -L$(top_builddir)/src/fe_utils -lpgfeutils $(libpq_= pgport) = OBJS=3D command.o common.o copy.o crosstabview.o \ describe.o help.o input.o large_obj.o mainloop.o \ diff --git a/src/bin/scripts/Makefile b/src/bin/scripts/Makefile index 0cc528e..4c6e4b9 100644 --- a/src/bin/scripts/Makefile +++ b/src/bin/scripts/Makefile @@ -19,7 +19,7 @@ include $(top_builddir)/src/Makefile.global PROGRAMS =3D createdb createuser dropdb dropuser clusterdb vacuumdb reind= exdb pg_isready = override CPPFLAGS :=3D -I$(libpq_srcdir) $(CPPFLAGS) -override LDFLAGS :=3D -L$(top_builddir)/src/fe_utils -lpgfeutils $(libpq_= pgport) $(LDFLAGS) +LDFLAGS_INTERNAL +=3D -L$(top_builddir)/src/fe_utils -lpgfeutils $(libpq_= pgport) = all: $(PROGRAMS) = diff --git a/src/common/Makefile b/src/common/Makefile index 80e78d7..9bbd86d 100644 --- a/src/common/Makefile +++ b/src/common/Makefile @@ -29,7 +29,7 @@ LIBS +=3D $(PTHREAD_LIBS) = # don't include subdirectory-path-dependent -I and -L switches STD_CPPFLAGS :=3D $(filter-out -I$(top_srcdir)/src/include -I$(top_buildd= ir)/src/include,$(CPPFLAGS)) -STD_LDFLAGS :=3D $(filter-out -L$(top_builddir)/src/port,$(LDFLAGS)) +STD_LDFLAGS :=3D $(filter-out -L$(top_builddir)/src/common -L$(top_buildd= ir)/src/port,$(LDFLAGS)) override CPPFLAGS +=3D -DVAL_CONFIGURE=3D"\"$(configure_args)\"" override CPPFLAGS +=3D -DVAL_CC=3D"\"$(CC)\"" override CPPFLAGS +=3D -DVAL_CPPFLAGS=3D"\"$(STD_CPPFLAGS)\"" diff --git a/src/interfaces/ecpg/compatlib/Makefile b/src/interfaces/ecpg/= compatlib/Makefile index cd03af5..ebfd895 100644 --- a/src/interfaces/ecpg/compatlib/Makefile +++ b/src/interfaces/ecpg/compatlib/Makefile @@ -22,8 +22,8 @@ override CPPFLAGS :=3D -I../include -I$(top_srcdir)/src/= interfaces/ecpg/include \ -I$(libpq_srcdir) -DFRONTEND $(CPPFLAGS) override CFLAGS +=3D $(PTHREAD_CFLAGS) = -SHLIB_LINK =3D -L../ecpglib -lecpg -L../pgtypeslib -lpgtypes $(libpq) \ - $(filter -lintl -lm, $(LIBS)) $(PTHREAD_LIBS) +SHLIB_LINK_INTERNAL =3D -L../ecpglib -lecpg -L../pgtypeslib -lpgtypes $(l= ibpq) +SHLIB_LINK =3D $(filter -lintl -lm, $(LIBS)) $(PTHREAD_LIBS) SHLIB_PREREQS =3D submake-ecpglib submake-pgtypeslib = SHLIB_EXPORTS =3D exports.txt diff --git a/src/interfaces/ecpg/ecpglib/Makefile b/src/interfaces/ecpg/ec= pglib/Makefile index bc20cf7..d25d248 100644 --- a/src/interfaces/ecpg/ecpglib/Makefile +++ b/src/interfaces/ecpg/ecpglib/Makefile @@ -35,7 +35,8 @@ ifneq ($(PORTNAME), win32) OBJS +=3D thread.o endif = -SHLIB_LINK =3D -L../pgtypeslib -lpgtypes $(libpq) $(filter -lintl -lm, $(= LIBS)) $(PTHREAD_LIBS) +SHLIB_LINK_INTERNAL =3D -L../pgtypeslib -lpgtypes $(libpq) +SHLIB_LINK =3D $(filter -lintl -lm, $(LIBS)) $(PTHREAD_LIBS) SHLIB_PREREQS =3D submake-libpq submake-pgtypeslib = SHLIB_EXPORTS =3D exports.txt diff --git a/src/interfaces/ecpg/pgtypeslib/Makefile b/src/interfaces/ecpg= /pgtypeslib/Makefile index 0945f3d..29264ce 100644 --- a/src/interfaces/ecpg/pgtypeslib/Makefile +++ b/src/interfaces/ecpg/pgtypeslib/Makefile @@ -25,7 +25,7 @@ override CFLAGS +=3D $(PTHREAD_CFLAGS) # Need to recompile any libpgport object files LIBS :=3D $(filter-out -lpgport, $(LIBS)) = -SHLIB_LINK +=3D -lm +SHLIB_LINK +=3D $(filter -lm, $(LIBS)) = SHLIB_EXPORTS =3D exports.txt = diff --git a/src/interfaces/ecpg/test/Makefile.regress b/src/interfaces/ec= pg/test/Makefile.regress index b3d7c1e..06c0461 100644 --- a/src/interfaces/ecpg/test/Makefile.regress +++ b/src/interfaces/ecpg/test/Makefile.regress @@ -5,8 +5,9 @@ override CPPFLAGS :=3D -I../../include -I$(top_srcdir)/src= /interfaces/ecpg/include -I$(libpq_srcdir) $(CPPFLAGS) override CFLAGS +=3D $(PTHREAD_CFLAGS) = -override LDFLAGS :=3D -L../../ecpglib -L../../pgtypeslib $(filter-out -l%= , $(libpq)) $(LDFLAGS) -override LIBS :=3D -lecpg -lpgtypes $(filter -l%, $(libpq)) $(LIBS) $(PTH= READ_LIBS) +LDFLAGS_INTERNAL +=3D -L../../ecpglib -lecpg -L../../pgtypeslib -lpgtypes= $(libpq) + +override LIBS +=3D $(PTHREAD_LIBS) = # Standard way to invoke the ecpg preprocessor ECPG =3D ../../preproc/ecpg --regression -I$(srcdir)/../../include -I$(sr= cdir) diff --git a/src/interfaces/ecpg/test/compat_informix/Makefile b/src/inter= faces/ecpg/test/compat_informix/Makefile index 8a5e854..d50fdc2 100644 --- a/src/interfaces/ecpg/test/compat_informix/Makefile +++ b/src/interfaces/ecpg/test/compat_informix/Makefile @@ -6,8 +6,7 @@ include $(top_srcdir)/$(subdir)/../Makefile.regress # Use special informix compatibility switch for all tests in this directo= ry ECPG +=3D -C INFORMIX = -override LDFLAGS :=3D -L../../compatlib $(LDFLAGS) -override LIBS :=3D -lecpg_compat $(LIBS) +LDFLAGS_INTERNAL +=3D -L../../compatlib -lecpg_compat = TESTS =3D test_informix test_informix.c \ test_informix2 test_informix2.c \ diff --git a/src/makefiles/pgxs.mk b/src/makefiles/pgxs.mk index 5beb1e6..c038836 100644 --- a/src/makefiles/pgxs.mk +++ b/src/makefiles/pgxs.mk @@ -45,7 +45,9 @@ # EXTRA_CLEAN -- extra files to remove in 'make clean' # PG_CPPFLAGS -- will be added to CPPFLAGS # PG_LIBS -- will be added to PROGRAM link line +# PG_LIBS_INTERNAL -- same, for references to libraries within build tr= ee # SHLIB_LINK -- will be added to MODULE_big link line +# SHLIB_LINK_INTERNAL -- same, for references to libraries within build= tree # PG_CONFIG -- path to pg_config program for the PostgreSQL installatio= n # to build against (typically just "pg_config" to use the first one i= n # your PATH) @@ -315,5 +317,5 @@ endif = ifdef PROGRAM $(PROGRAM): $(OBJS) - $(CC) $(CFLAGS) $(OBJS) $(PG_LIBS) $(LDFLAGS) $(LDFLAGS_EX) $(LIBS) -o $= @$(X) + $(CC) $(CFLAGS) $(OBJS) $(PG_LIBS_INTERNAL) $(LDFLAGS) $(LDFLAGS_EX) $(P= G_LIBS) $(LIBS) -o $@$(X) endif diff --git a/src/tools/findoidjoins/Makefile b/src/tools/findoidjoins/Make= file index a3462b9..1af0a93 100644 --- a/src/tools/findoidjoins/Makefile +++ b/src/tools/findoidjoins/Makefile @@ -13,7 +13,7 @@ top_builddir =3D ../../.. include $(top_builddir)/src/Makefile.global = override CPPFLAGS :=3D -I$(libpq_srcdir) $(CPPFLAGS) -override LDFLAGS :=3D $(libpq_pgport) $(LDFLAGS) +LDFLAGS_INTERNAL +=3D $(libpq_pgport) = OBJS=3D findoidjoins.o = ------- =_aaaaaaaaaa0--