Hi,

On 2021-05-11 14:30:10 -0400, Andrew Dunstan wrote:
> On 5/11/21 1:21 PM, Andres Freund wrote:
> > It doesn't work in a VPATH build right now, FWIW. $@, $< will point to a
> > local file in the build directory, right now. And the path to perltidyrc
> > doesn't work either. It seems to work after the following modifications
> >
> > diff --git i/src/backend/utils/Makefile w/src/backend/utils/Makefile
> > index bcf9dd41adf..ca733d12dce 100644
> > --- i/src/backend/utils/Makefile
> > +++ w/src/backend/utils/Makefile
> > @@ -92,10 +92,10 @@ $(top_builddir)/src/include/utils/probes.h: probes.h
> >  # Nothing depends on it, so it will never be called unless explicitly 
> > requested
> >  # The last two lines of the recipe format the script according to  our
> >  # standard and put back some blank lines for improved readability.
> > -Gen_dummy_probes.pl: Gen_dummy_probes.sed
> > +$(top_srcdir)/src/backend/utils/Gen_dummy_probes.pl: 
> > $(top_srcdir)/src/backend/utils/Gen_dummy_probes.sed
> >      perl -ni -e ' print; exit if /^\$$0/;' $@
> >      s2p -f $<  | sed -e 1,4d -e '/# #/d' -e '$$d' >> $@
> > -    perltidy --profile=../../tools/pgindent/perltidyrc $@
> > +    perltidy --profile=$(top_srcdir)/src/tools/pgindent/perltidyrc $@
> >      perl -pi -e '!$$lb && ( /^\t+#/  || /^# prototypes/ ) && print 
> > qq{\n};'\
> >          -e '$$lb = m/^\n/; ' $@
> >  
> 
> 
> Yeah, but this will create the perl file in the vpath directory where it
> won't ever be used anyway. You really want this back in the source
> directory where you can check it in etc.

Hm, why would it? Both $< and $@ will be in the source tree, as
formulated above?

andres@awork3:~/src/postgresql$ git diff src/backend/utils/Gen_dummy_probes.pl
andres@awork3:~/src/postgresql$ echo foo >> 
src/backend/utils/Gen_dummy_probes.pl
andres@awork3:~/src/postgresql$ git diff src/backend/utils/Gen_dummy_probes.pl
diff --git i/src/backend/utils/Gen_dummy_probes.pl 
w/src/backend/utils/Gen_dummy_probes.pl
index 4852103daf4..1b724bf1038 100644
--- i/src/backend/utils/Gen_dummy_probes.pl
+++ w/src/backend/utils/Gen_dummy_probes.pl
@@ -257,3 +257,4 @@ sub printQ()
     }
     undef(@Q);
 }
+foo
andres@awork3:~/src/postgresql$ touch src/backend/utils/Gen_dummy_probes.sed && 
make -C /home/andres/build/postgres/dev-assert/vpath/src/backend/utils 
Gen_dummy_probes.pl
perl -ni -e ' print; exit if /^\$0/;' 
/home/andres/src/postgresql/src/backend/utils/Gen_dummy_probes.pl
s2p -f /home/andres/src/postgresql/src/backend/utils/Gen_dummy_probes.sed  | 
sed -e 1,4d -e '/# #/d' -e '$d' >> 
/home/andres/src/postgresql/src/backend/utils/Gen_dummy_probes.pl
perltidy --profile=/home/andres/src/postgresql/src/tools/pgindent/perltidyrc 
/home/andres/src/postgresql/src/backend/utils/Gen_dummy_probes.pl
perl -pi -e '!$lb && ( /^\t+#/  || /^# prototypes/ ) && print qq{\n};'\
        -e '$lb = m/^\n/; ' 
/home/andres/src/postgresql/src/backend/utils/Gen_dummy_probes.pl
andres@awork3:~/src/postgresql$ git diff src/backend/utils/Gen_dummy_probes.pl
andres@awork3:~/src/postgresql$ ls 
/home/andres/build/postgres/dev-assert/vpath/src/backend/utils/Gen_dummy_probes*
/home/andres/build/postgres/dev-assert/vpath/src/backend/utils/Gen_dummy_probes.pl.tdy

So only a temp file ends up in the build dir?


> I came up with this:
> 
> 
> Gen_dummy_probes.pl: $(top_srcdir)/$(subdir)/Gen_dummy_probes.sed 
> $(top_srcdir)/$(subdir)/Gen_dummy_probes.pl.prolog
>     cp $(top_srcdir)/$(subdir)/Gen_dummy_probes.pl.prolog 
> $(top_srcdir)/$(subdir)/$@
>     s2p -f $<  | sed -e 1,3d -e '/# #/ d' -e '$$d' >> 
> $(top_srcdir)/$(subdir)/$@
>     perltidy 
> --profile=$(top_srcdir)/$(subdir)/../../tools/pgindent/perltidyrc 
> $(top_srcdir)/$(subdir)/$@
>     perl -pi -e '!$$lb && ( /^\t+#/  || /^# prototypes/ ) && print qq{\n};'\
>         -e '$$lb = m/^\n/; ' $(top_srcdir)/$(subdir)/$@
> 
> 
> I'm not aware of any other case where we generate an in-tree file from a
> vpath, which is why it feels strange.

Yea, it is a bit odd, agreed. We don't have many generated sources
inside the git repo (vs in the tarball). The most prominent one is
configure, obviously...

Greetings,

Andres Freund


Reply via email to