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