Re: Bugfix and new feature for PGXS

From: Cédric Villemain <cedric(at)2ndquadrant(dot)com>
To: pgsql-hackers(at)postgresql(dot)org
Cc: Andrew Dunstan <andrew(at)dunslane(dot)net>, Craig Ringer <craig(at)2ndquadrant(dot)com>
Subject: Re: Bugfix and new feature for PGXS
Date: 2013-06-24 23:24:50
Message-ID: 201306250124.54610.cedric@2ndquadrant.com
Views: Raw Message | Whole Thread | Download mbox | Resend email
Thread:
Lists: pgsql-hackers

Le mardi 25 juin 2013 00:18:26, Andrew Dunstan a écrit :
> On 06/24/2013 04:02 PM, Cédric Villemain wrote:
> > WIth extension, we do have to set VPATH explicitely if we want to use
> > VPATH (note that contribs/extensions must not care that postgresql has
> > been built with or without VPATH set). My patches try to fix that.
>
> No, this is exactly what I'm objecting to. I want to be able to do:
>
> invoke_vpath_magic
> standard_make_commands_as_for_non_vpath
>
> Your patches have been designed to overcome your particular issues, but
> they don't meet the general case, IMNSHO. This is why I want to have
> more discussion about how vpath builds could work for PGXS modules.

The patch does not restrict anything, it is not supposed to lead to
regression.
The assignment of VPATH and srcdir are wrong in the PGXS case, the patch
correct them. You're still free to do "make VPATH=/mypath ..." the VPATH
provided won't be erased by the pgxs.mk logic.

> > So the point is to be able to do exactly that :
> >
> > $ mkdir /tmp/json_build && cd /tmp/json_build
> > $ make USE_PGXS=1 -f /path/to/json_build/Makefile
>
> It doesn't work:
>
> [andrew(at)emma vpath.json_build]$ PATH=../../inst.vpgxs.5706/bin:$PATH
> make -f `pwd`/../json_build/Makefile
> grep: json_build.control: No such file or directory
> grep: json_build.control: No such file or directory
> grep: json_build.control: No such file or directory
> grep: json_build.control: No such file or directory
> grep: json_build.control: No such file or directory
> grep: json_build.control: No such file or directory
> grep: json_build.control: No such file or directory
> grep: json_build.control: No such file or directory
> grep: json_build.control: No such file or directory
> grep: json_build.control: No such file or directory
> grep: json_build.control: No such file or directory
> gcc -O2 -Wall -Wmissing-prototypes -Wpointer-arith
> -Wdeclaration-after-statement -Wendif-labels
> -Wmissing-format-attribute -Wformat-security -fno-strict-aliasing
> -fwrapv -fexcess-precision=standard -g -fpic -shared -o
> json_build.so -L/home/pgl/npgl/inst.vpgxs.5706/lib -Wl,--as-needed
> -Wl,-rpath,'/home/pgl/npgl/inst.vpgxs.5706/lib',--enable-new-dtags
> cp
>
> /home/andrew/pgl/extns/vpath.json_build/../json_build/sql/json_build.sql
> sql/json_build--.sql
> cp: cannot create regular file `sql/json_build--.sql': No such file
> or directory
> make: *** [sql/json_build--.sql] Error 1
> [andrew(at)emma vpath.json_build]$

Ah, you make the point : your Makefile does not support VPATH or I failed to
consider some cases.

It seems to me that :

EXTVERSION = $(shell grep default_version $(EXTENSION).control | sed -e
"s/default_version[[:space:]]*=[[:space:]]*'\([^']*\)'/\1/")

is not working. I'm going to check GNU Make guidelines about that case (should
$(command) be executed on each path in the VPATH or not ?)
[...]
thinking a bit more...
I suppose gmake expects the Makefile to list $(EXTENSION).control file as a
prerequisite (thus its paths will be known during make invocation and your
command will work)

--
Cédric Villemain +33 (0)6 20 30 22 52
http://2ndQuadrant.fr/
PostgreSQL: Support 24x7 - Développement, Expertise et Formation

In response to

Responses

Browse pgsql-hackers by date

  From Date Subject
Next Message Bruce Momjian 2013-06-24 23:51:25 Re: [RFC] Minmax indexes
Previous Message Michael Paquier 2013-06-24 23:15:51 Re: Support for REINDEX CONCURRENTLY