On 5/6/21 9:55 AM, Andrew Dunstan wrote: > On 5/6/21 12:59 AM, Andres Freund wrote: >> Hi, >> >> On 2021-05-06 00:18:12 -0400, Tom Lane wrote: >>> Andres Freund <and...@anarazel.de> writes: >>>> I understand why we don't want to rely on sed because of windows - but >>>> it's far from obvious why we can't just use the .pl variant all the >>>> time? >>> Perl is not considered a hard build requirement on non-Windows. >> Oops, forgot that. >> >> >>> We could dodge that by shipping a pre-built dummy probes.h, >>> but that doesn't really seem like a cleaner way than what's >>> there now. >> I tried to regenerate Gen_dummy_probes.pl using s2p - which doesn't seem >> to exist for modern versions of perl anymore :( >> >> >>> Also, as I read it, Gen_dummy_probes.sed is useful in any case as >>> being the "source code" for Gen_dummy_probes.pl. You'd need some >>> other form of documentation if you removed it. > > I suggest we add a README that sets out > > > a) why we do things this way > > b) that the sed script is what's authoritative > > c) how to regenerate the perl script if you change the sed script, > including where to get s2p > > > I can do that. > >
Here's a patch that adds the README and also adds a Makefile recipe for regenerating Gen_dummy_probes.pl after the sed script is changed. On my system at least the recipe is idempotent. cheers andrew -- Andrew Dunstan EDB: https://www.enterprisedb.com
>From 488d812f06fe9ebe53368228af78e7ec8d7478d5 Mon Sep 17 00:00:00 2001 From: Andrew Dunstan <and...@dunslane.net> Date: Fri, 7 May 2021 10:08:01 -0400 Subject: [PATCH] Add a README and Makefile recipe for Gen_dummy_probes.pl --- src/backend/utils/Makefile | 10 +++++++++ src/backend/utils/README.Gen_dummy_probes | 25 +++++++++++++++++++++++ 2 files changed, 35 insertions(+) create mode 100644 src/backend/utils/README.Gen_dummy_probes diff --git a/src/backend/utils/Makefile b/src/backend/utils/Makefile index 59b2255260..bcf9dd41ad 100644 --- a/src/backend/utils/Makefile +++ b/src/backend/utils/Makefile @@ -88,6 +88,16 @@ $(top_builddir)/src/include/utils/probes.h: probes.h cd '$(dir $@)' && rm -f $(notdir $@) && \ $(LN_S) "../../../$(subdir)/probes.h" . +# Recipe for rebuilding the Perl version of Gen_dummy_probes +# 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 + perl -ni -e ' print; exit if /^\$$0/;' $@ + s2p -f $< | sed -e 1,4d -e '/# #/d' -e '$$d' >> $@ + perltidy --profile=../../tools/pgindent/perltidyrc $@ + perl -pi -e '!$$lb && ( /^\t+#/ || /^# prototypes/ ) && print qq{\n};'\ + -e '$$lb = m/^\n/; ' $@ .PHONY: install-data install-data: errcodes.txt installdirs diff --git a/src/backend/utils/README.Gen_dummy_probes b/src/backend/utils/README.Gen_dummy_probes new file mode 100644 index 0000000000..90fec37bce --- /dev/null +++ b/src/backend/utils/README.Gen_dummy_probes @@ -0,0 +1,25 @@ +# Generating dummy probes + +If Postgres isn't configured with dtrace enabled, we need to generate +dummy probes for the entries in probes.d, that do nothing. + +This is accomplished in Unix via the sed script `Gen_dummy_probes.sed`. We +used to use this in MSVC builds using the perl utility `psed`, which mimicked +sed. However, that utility disappeared from Windows perl distributions and so +we converted the sed script to a perl script to be used in MSVC builds. + +We still keep the sed script as the authoritative source for generating +these dummy probes because except on Windows perl is not a hard requirement +when building from a tarball. + +So, if you need to change the way dummy probes are generated, first change +the sed script, and when it's working generate the perl script. This can +be accomplished by using the perl utility s2p. + +s2p is no longer part of the perl core, so it might not be on your system, +but it is available on CPAN and also in many package systems. e.g. +on Fedora it can be installed using `cpan App::s2p` or +`dnf install perl-App-s2p`. + +The Makefile contains a recipe for regenerating Gen_dummy_probes.pl, so all +you need to do is once you have s2p installed is `make Gen_dummy_probes.pl` -- 2.25.4