On 1/31/14 9:28 PM, Bruce Momjian wrote:
> On Fri, Jan 31, 2014 at 09:28:06PM -0500, Andrew Dunstan wrote:
>>
>> On 01/31/2014 09:19 PM, Bruce Momjian wrote:
>>> On Thu, Oct 10, 2013 at 11:00:30PM -0400, Andrew Dunstan wrote:
>>>> On 10/10/2013 09:35 PM, Peter Eisentraut wrote:
>>>>> On Tue, 2013-10-08 at 10:04 -0400, Andrew Dunstan wrote:
>>>>>> On 10/07/2013 08:47 PM, Peter Eisentraut wrote:
>>>>>>> I suspect this line
>>>>>>>
>>>>>>> submake-libpq: $(libdir)/libpq.so ;
>>>>>>>
>>>>>>> will cause problems on platforms with a different extension (e.g. OS X).
>>>>>> suggested fix is below.
>>>>> Hmm, this would duplicate information about shared library naming in a
>>>>> place outside of Makefile.shlib.  That doesn't look right.
>>>>
>>>> Please suggest an alternative.
>>> Did we ever address this?
>>>
>>
>> No. I never got a reply, AFAIK.
> 
> OK, seems there is no known fix then.  Thanks.

I noticed this item was still in the 9.4 code.  Looking at the original
submission
(http://www.postgresql.org/message-id/201306181552.36673.ced...@2ndquadrant.com,
patch 0001), I think the original reason for adding this was wrong to
begin with.  Attached patch 0001 fixes that.  The applicable parts of
that patch could be backpatched as a bug fix (but evidently no one cares
about building contrib with pgxs (except when I submit a patch to remove
it)).

In that topic, I also propose attached patch 0002 for 9.4, which removes
the use of the USE_VPATH variable and just uses VPATH.  There is no need
for this additional indirection.  Also, USE_FOO variables are typically
Boolean, so this is misnamed.

I note that the documentation in this topic
(http://www.postgresql.org/docs/devel/static/extend-pgxs.html) suggests
the use of config/prep_buildtree, but that is not installed, so I don't
know how much use that advice is.  (I don't know at this point whether
just installing it would be a solution.)

Thirdly, I propose attached patch 0003, which reverts patch 0004 in the
original submission.  I believe that patch was unnecessary, and I think
the new code is uglier.  (Of course, I'm biased, because I wrote the old
code.)  Technically, this ought to be for 9.5 only.

Finally, I have written a test suite for PGXS to support all these
outrageous claims: https://github.com/petere/test_pgxs.  This tests most
of the variables supported in PGXS makefiles and tests that both
documented ways of vpath builds work.  I don't propose this for
inclusion at the moment, because that would require more work, but it's
a good reference.

From 2f7a2530ab7dbd7a737ff856d9d33b4aaa699dd6 Mon Sep 17 00:00:00 2001
From: Peter Eisentraut <peter_e@gmx.net>
Date: Wed, 19 Nov 2014 21:45:24 -0500
Subject: [PATCH 1/3] Fix SHLIB_PREREQS use in contrib, allowing PGXS builds

dblink and postgres_fdw use SHLIB_PREREQS = submake-libpq to build libpq
first.  This doesn't work in a PGXS build, because there is no libpq to
build.  So just omit setting SHLIB_PREREQS in this case.

Note that PGXS users can still use SHLIB_PREREQS (although it is not
documented).  The problem here is only that contrib modules can be built
in-tree or using PGXS, and the prerequisite is only applicable in the
former case.

Commit 6697aa2bc25c83b88d6165340348a31328c35de6 previously attempted to
address this by creating a somewhat fake submake-libpq target in
Makefile.global.  That was not the right fix, and it was also done in a
nonportable way, so revert that.
---
 contrib/dblink/Makefile       |  2 +-
 contrib/postgres_fdw/Makefile |  2 +-
 src/Makefile.global.in        | 12 +-----------
 3 files changed, 3 insertions(+), 13 deletions(-)

diff --git a/contrib/dblink/Makefile b/contrib/dblink/Makefile
index 09032f8..7cb0237 100644
--- a/contrib/dblink/Makefile
+++ b/contrib/dblink/Makefile
@@ -4,7 +4,6 @@ MODULE_big = dblink
 OBJS	= dblink.o
 PG_CPPFLAGS = -I$(libpq_srcdir)
 SHLIB_LINK = $(libpq)
-SHLIB_PREREQS = submake-libpq
 
 EXTENSION = dblink
 DATA = dblink--1.1.sql dblink--1.0--1.1.sql dblink--unpackaged--1.0.sql
@@ -21,6 +20,7 @@ PG_CONFIG = pg_config
 PGXS := $(shell $(PG_CONFIG) --pgxs)
 include $(PGXS)
 else
+SHLIB_PREREQS = submake-libpq
 subdir = contrib/dblink
 top_builddir = ../..
 include $(top_builddir)/src/Makefile.global
diff --git a/contrib/postgres_fdw/Makefile b/contrib/postgres_fdw/Makefile
index 8c49720..c0f4160 100644
--- a/contrib/postgres_fdw/Makefile
+++ b/contrib/postgres_fdw/Makefile
@@ -5,7 +5,6 @@ OBJS = postgres_fdw.o option.o deparse.o connection.o
 
 PG_CPPFLAGS = -I$(libpq_srcdir)
 SHLIB_LINK = $(libpq)
-SHLIB_PREREQS = submake-libpq
 
 EXTENSION = postgres_fdw
 DATA = postgres_fdw--1.0.sql
@@ -20,6 +19,7 @@ PG_CONFIG = pg_config
 PGXS := $(shell $(PG_CONFIG) --pgxs)
 include $(PGXS)
 else
+SHLIB_PREREQS = submake-libpq
 subdir = contrib/postgres_fdw
 top_builddir = ../..
 include $(top_builddir)/src/Makefile.global
diff --git a/src/Makefile.global.in b/src/Makefile.global.in
index aa54f94..d7a83c8 100644
--- a/src/Makefile.global.in
+++ b/src/Makefile.global.in
@@ -456,23 +456,13 @@ ifeq ($(PORTNAME),cygwin)
 libpq_pgport += $(LDAP_LIBS_FE)
 endif
 
-# If PGXS is not defined, build libpq and libpgport dependencies as required.
-# If the build is with PGXS, then these are supposed to be already built and
-# installed, and we just ensure that the expected files exist.
-ifndef PGXS
+
 submake-libpq:
 	$(MAKE) -C $(libpq_builddir) all
-else
-submake-libpq: $(libdir)/libpq.so ;
-endif
 
-ifndef PGXS
 submake-libpgport:
 	$(MAKE) -C $(top_builddir)/src/port all
 	$(MAKE) -C $(top_builddir)/src/common all
-else
-submake-libpgport: $(libdir)/libpgport.a $(libdir)/libpgcommon.a ;
-endif
 
 .PHONY: submake-libpq submake-libpgport
 
-- 
2.1.3

From 4171b080986cea6e70686183e94c7a46bdc86966 Mon Sep 17 00:00:00 2001
From: Peter Eisentraut <peter_e@gmx.net>
Date: Wed, 19 Nov 2014 21:51:30 -0500
Subject: [PATCH 2/3] Remove USE_VPATH make variable from PGXS

The user can just set VPATH directly.  There is no need to invent
another variable.
---
 doc/src/sgml/extend.sgml | 6 +++---
 src/makefiles/pgxs.mk    | 9 ++++-----
 2 files changed, 7 insertions(+), 8 deletions(-)

diff --git a/doc/src/sgml/extend.sgml b/doc/src/sgml/extend.sgml
index a2d4ca2..be10252 100644
--- a/doc/src/sgml/extend.sgml
+++ b/doc/src/sgml/extend.sgml
@@ -1180,10 +1180,10 @@ <title>Extension Building Infrastructure</title>
     way to how it is done for the core code. One way to do this is using the
     core script <filename>config/prep_buildtree</>. Once this has been done
     you can build by setting the <literal>make</literal> variable
-    <varname>USE_VPATH</varname> like this:
+    <varname>VPATH</varname> like this:
 <programlisting>
-make USE_VPATH=/path/to/extension/source/tree
-make USE_VPATH=/path/to/extension/source/tree install
+make VPATH=/path/to/extension/source/tree
+make VPATH=/path/to/extension/source/tree install
 </programlisting>
     This procedure can work with a greater variety of directory layouts.
    </para>
diff --git a/src/makefiles/pgxs.mk b/src/makefiles/pgxs.mk
index 8cf229e..60cccdd 100644
--- a/src/makefiles/pgxs.mk
+++ b/src/makefiles/pgxs.mk
@@ -62,11 +62,10 @@ top_builddir := $(dir $(PGXS))../..
 include $(top_builddir)/src/Makefile.global
 
 top_srcdir = $(top_builddir)
-# If USE_VPATH is set or Makefile is not in current directory we are building
-# the extension with VPATH so we set the variable here
-ifdef USE_VPATH
-srcdir = $(USE_VPATH)
-VPATH = $(USE_VPATH)
+# If VPATH is set or Makefile is not in current directory we are building
+# the extension with VPATH so we set the variable here.
+ifdef VPATH
+srcdir = $(VPATH)
 else
 ifeq ($(CURDIR),$(dir $(firstword $(MAKEFILE_LIST))))
 srcdir = .
-- 
2.1.3

From b5464b0d925bccfea6fdce237bfd6ba3f1b284a7 Mon Sep 17 00:00:00 2001
From: Peter Eisentraut <peter_e@gmx.net>
Date: Wed, 19 Nov 2014 22:26:32 -0500
Subject: [PATCH 3/3] Revert haphazard pgxs makefile changes

These changes were originally submitted as "adds support for VPATH with
USE_PGXS", but they are not necessary for VPATH support, so they just
add more lines of code for no reason.
---
 src/makefiles/pgxs.mk | 43 ++++++++++++++++++-------------------------
 1 file changed, 18 insertions(+), 25 deletions(-)

diff --git a/src/makefiles/pgxs.mk b/src/makefiles/pgxs.mk
index 60cccdd..e7705fd 100644
--- a/src/makefiles/pgxs.mk
+++ b/src/makefiles/pgxs.mk
@@ -123,40 +123,33 @@ all: all-lib
 endif # MODULE_big
 
 
-install: all installdirs installcontrol installdata installdatatsearch installdocs installscripts
-ifdef MODULES
-	$(INSTALL_SHLIB) $(addsuffix $(DLSUFFIX), $(MODULES)) '$(DESTDIR)$(pkglibdir)/'
-endif # MODULES
-ifdef PROGRAM
-	$(INSTALL_PROGRAM) $(PROGRAM)$(X) '$(DESTDIR)$(bindir)'
-endif # PROGRAM
-
-installcontrol: $(addsuffix .control, $(EXTENSION)) | installdirs
+install: all installdirs
 ifneq (,$(EXTENSION))
-	$(INSTALL_DATA) $^ '$(DESTDIR)$(datadir)/extension/'
-endif
-
-installdata: $(DATA) $(DATA_built) | installdirs
+	$(INSTALL_DATA) $(addprefix $(srcdir)/, $(addsuffix .control, $(EXTENSION))) '$(DESTDIR)$(datadir)/extension/'
+endif # EXTENSION
 ifneq (,$(DATA)$(DATA_built))
-	$(INSTALL_DATA) $^ '$(DESTDIR)$(datadir)/$(datamoduledir)/'
-endif
-
-installdatatsearch: $(DATA_TSEARCH) | installdirs
+	$(INSTALL_DATA) $(addprefix $(srcdir)/, $(DATA)) $(DATA_built) '$(DESTDIR)$(datadir)/$(datamoduledir)/'
+endif # DATA
 ifneq (,$(DATA_TSEARCH))
-	$(INSTALL_DATA) $^ '$(DESTDIR)$(datadir)/tsearch_data/'
-endif
-
-installdocs: $(DOCS) | installdirs
+	$(INSTALL_DATA) $(addprefix $(srcdir)/, $(DATA_TSEARCH)) '$(DESTDIR)$(datadir)/tsearch_data/'
+endif # DATA_TSEARCH
+ifdef MODULES
+	$(INSTALL_SHLIB) $(addsuffix $(DLSUFFIX), $(MODULES)) '$(DESTDIR)$(pkglibdir)/'
+endif # MODULES
 ifdef DOCS
 ifdef docdir
-	$(INSTALL_DATA) $^ '$(DESTDIR)$(docdir)/$(docmoduledir)/'
+	$(INSTALL_DATA) $(addprefix $(srcdir)/, $(DOCS)) '$(DESTDIR)$(docdir)/$(docmoduledir)/'
 endif # docdir
 endif # DOCS
-
-installscripts: $(SCRIPTS) $(SCRIPTS_built) | installdirs
+ifdef PROGRAM
+	$(INSTALL_PROGRAM) $(PROGRAM)$(X) '$(DESTDIR)$(bindir)'
+endif # PROGRAM
 ifdef SCRIPTS
-	$(INSTALL_SCRIPT) $^ '$(DESTDIR)$(bindir)/'
+	$(INSTALL_SCRIPT) $(addprefix $(srcdir)/, $(SCRIPTS)) '$(DESTDIR)$(bindir)/'
 endif # SCRIPTS
+ifdef SCRIPTS_built
+	$(INSTALL_SCRIPT) $(SCRIPTS_built) '$(DESTDIR)$(bindir)/'
+endif # SCRIPTS_built
 
 ifdef MODULE_big
 install: install-lib
-- 
2.1.3

-- 
Sent via pgsql-hackers mailing list (pgsql-hackers@postgresql.org)
To make changes to your subscription:
http://www.postgresql.org/mailpref/pgsql-hackers

Reply via email to