Hi,
On 2023-06-02 10:13:44 -0500, Tristan Partin wrote:
> On Fri Jun 2, 2023 at 8:47 AM CDT, Andres Freund wrote:
> > Hi,
> >
> > On 2023-06-02 08:10:43 -0500, Tristan Partin wrote:
> > > > I wonder if we instead could just make perl output the files it loads
> > > > and
> > > > handle dependencies automatically that way? But that's more work, so
> > > > it's
> > > > probably the right thing to go for the manual path for now.
> > >
> > > I am not familar with Perl enough (at all haha) to know if that is
> > > possible. I don't know exactly what these Perl files do, but perhaps it
> > > might make sense to have some global lookup table that is setup near the
> > > beginning of the script.
> >
> > It'd be nice to have something more general - there are other perl modules
> > we
> > load, e.g.
> > ./src/backend/catalog/Catalog.pm
> > ./src/backend/utils/mb/Unicode/convutils.pm
> > ./src/tools/PerfectHash.pm
> >
> >
> > > perl_files = {
> > > 'Catalog.pm': files('path/to/Catalog.pm'),
> > > ...
> > > }
> >
> > I think you got it, but just to make sure: I was thinking of generating a
> > depfile from within perl. Something like what you propose doesn't quite
> > seems
> > like a sufficient improvement.
>
> Whatever I am proposing is definitely subpar to generating a depfile. So
> if that can be done, that is the best option!
I looked for a bit, but couldn't find an easy way to do so. I would still like
to pursue going towards dep files for the perl scripts, even if that requires
explicit support in the perl scripts, but that's a change for later.
> > > Otherwise, manual as it is in the original patch seems like an alright
> > > compromise for now.
> >
> > Yea. I'm working on a more complete version, also dealing with dependencies
> > on
> > PerfectHash.pm.
>
> Good to hear. Happy to review any patches :).
Attached.
Greetings,
Andres Freund
>From e64cd6233ee8637e2e66f9e31085f5c2c5c5c388 Mon Sep 17 00:00:00 2001
From: Andres Freund <[email protected]>
Date: Fri, 9 Jun 2023 11:41:42 -0700
Subject: [PATCH v2] meson: Add dependencies to perl modules to various script
invocations
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
Reported-by: Dagfinn Ilmari Mannsåker <[email protected]>
Discussion: https://postgr.es/m/[email protected]
---
meson.build | 14 ++++++++++++++
src/include/catalog/meson.build | 2 +-
src/include/nodes/meson.build | 1 +
src/include/utils/meson.build | 1 +
src/common/meson.build | 4 ++--
src/common/unicode/meson.build | 3 +++
src/pl/plpgsql/src/meson.build | 7 ++++---
src/interfaces/ecpg/preproc/meson.build | 19 ++++---------------
8 files changed, 30 insertions(+), 21 deletions(-)
diff --git a/meson.build b/meson.build
index 16b2e866462..82f2782673e 100644
--- a/meson.build
+++ b/meson.build
@@ -2681,6 +2681,20 @@ gen_export_kwargs = {
+###
+### Helpers for custom targets used across the tree
+###
+
+catalog_pm = files('src/backend/catalog/Catalog.pm')
+perfect_hash_pm = files('src/tools/PerfectHash.pm')
+gen_kwlist_deps = [perfect_hash_pm]
+gen_kwlist_cmd = [
+ perl, '-I', '@SOURCE_ROOT@/src/tools',
+ files('src/tools/gen_keywordlist.pl'),
+ '--output', '@OUTDIR@', '@INPUT@']
+
+
+
###
### windows resources related stuff
###
diff --git a/src/include/catalog/meson.build b/src/include/catalog/meson.build
index 3179be09d3d..c3fd05d0279 100644
--- a/src/include/catalog/meson.build
+++ b/src/include/catalog/meson.build
@@ -111,7 +111,7 @@ generated_catalog_headers = custom_target('generated_catalog_headers',
output: output_files,
install_dir: output_install,
input: input,
- depend_files: bki_data_f,
+ depend_files: bki_data_f + catalog_pm,
build_by_default: true,
install: true,
command: [
diff --git a/src/include/nodes/meson.build b/src/include/nodes/meson.build
index 9a8e85c4a5e..626dc696d51 100644
--- a/src/include/nodes/meson.build
+++ b/src/include/nodes/meson.build
@@ -50,6 +50,7 @@ node_support_install = [
generated_nodes = custom_target('nodetags.h',
input: node_support_input,
output: node_support_output,
+ depend_files: catalog_pm,
command: [
perl, files('../../backend/nodes/gen_node_support.pl'),
'-o', '@OUTDIR@',
diff --git a/src/include/utils/meson.build b/src/include/utils/meson.build
index 2fed1e3f8e9..c212c4091f7 100644
--- a/src/include/utils/meson.build
+++ b/src/include/utils/meson.build
@@ -44,6 +44,7 @@ fmgrtab_output = ['fmgroids.h', 'fmgrprotos.h', 'fmgrtab.c']
fmgrtab_target = custom_target('fmgrtab',
input: '../catalog/pg_proc.dat',
output : fmgrtab_output,
+ depend_files: catalog_pm,
command: [perl, '-I', '@SOURCE_ROOT@/src/backend/catalog/', files('../../backend/utils/Gen_fmgrtab.pl'), '--include-path=@SOURCE_ROOT@/src/include', '--output=@OUTDIR@', '@INPUT@'],
install: true,
install_dir: [dir_include_server / 'utils', dir_include_server / 'utils', false],
diff --git a/src/common/meson.build b/src/common/meson.build
index 41bd58ebdf1..9efc80ac024 100644
--- a/src/common/meson.build
+++ b/src/common/meson.build
@@ -54,8 +54,8 @@ endif
common_kwlist = custom_target('kwlist',
input: files('../include/parser/kwlist.h'),
output: 'kwlist_d.h',
- command: [perl, '-I', '@SOURCE_ROOT@/src/tools', files('../tools/gen_keywordlist.pl'),
- '--extern', '--output', '@OUTDIR@', '@INPUT@'])
+ depend_files: gen_kwlist_deps,
+ command: [gen_kwlist_cmd, '--extern'])
generated_sources += common_kwlist
common_sources += common_kwlist
diff --git a/src/common/unicode/meson.build b/src/common/unicode/meson.build
index 1ffece1550a..9033c4a3dcf 100644
--- a/src/common/unicode/meson.build
+++ b/src/common/unicode/meson.build
@@ -28,6 +28,7 @@ update_unicode_targets += \
custom_target('unicode_norm_table.h',
input: [unicode_data['UnicodeData.txt'], unicode_data['CompositionExclusions.txt']],
output: ['unicode_norm_table.h', 'unicode_norm_hashfunc.h'],
+ depend_files: perfect_hash_pm,
command: [
perl, files('generate-unicode_norm_table.pl'),
'--outdir', '@OUTDIR@', '@INPUT@'],
@@ -38,6 +39,7 @@ update_unicode_targets += \
custom_target('unicode_nonspacing_table.h',
input: [unicode_data['UnicodeData.txt']],
output: ['unicode_nonspacing_table.h'],
+ depend_files: perfect_hash_pm,
command: [perl, files('generate-unicode_nonspacing_table.pl'), '@INPUT@'],
build_by_default: false,
capture: true,
@@ -56,6 +58,7 @@ update_unicode_targets += \
custom_target('unicode_normprops_table.h',
input: [unicode_data['DerivedNormalizationProps.txt']],
output: ['unicode_normprops_table.h'],
+ depend_files: perfect_hash_pm,
command: [perl, files('generate-unicode_normprops_table.pl'), '@INPUT@'],
build_by_default: false,
capture: true,
diff --git a/src/pl/plpgsql/src/meson.build b/src/pl/plpgsql/src/meson.build
index e185a87024c..85e7293b374 100644
--- a/src/pl/plpgsql/src/meson.build
+++ b/src/pl/plpgsql/src/meson.build
@@ -25,11 +25,11 @@ pl_errcodes = custom_target('plerrcodes',
generated_sources += pl_errcodes
plpgsql_sources += pl_errcodes
-gen_keywordlist = files('../../../../src/tools/gen_keywordlist.pl')
pl_reserved = custom_target('pl_reserved_kwlist',
input: ['pl_reserved_kwlist.h'],
output: ['pl_reserved_kwlist_d.h'],
- command: [perl, '-I', '@SOURCE_ROOT@/src/tools', gen_keywordlist, '--output', '@OUTDIR@', '--varname', 'ReservedPLKeywords', '@INPUT@']
+ depend_files: gen_kwlist_deps,
+ command: [gen_kwlist_cmd, '--varname', 'ReservedPLKeywords'],
)
generated_sources += pl_reserved
plpgsql_sources += pl_reserved
@@ -37,7 +37,8 @@ plpgsql_sources += pl_reserved
pl_unreserved = custom_target('pl_unreserved_kwlist',
input: ['pl_unreserved_kwlist.h'],
output: ['pl_unreserved_kwlist_d.h'],
- command: [perl, '-I', '@SOURCE_ROOT@/src/tools', gen_keywordlist, '--output', '@OUTDIR@', '--varname', 'UnreservedPLKeywords', '@INPUT@']
+ depend_files: gen_kwlist_deps,
+ command: [gen_kwlist_cmd, '--varname', 'UnreservedPLKeywords'],
)
generated_sources += pl_unreserved
plpgsql_sources += pl_unreserved
diff --git a/src/interfaces/ecpg/preproc/meson.build b/src/interfaces/ecpg/preproc/meson.build
index 08d772d2614..eef8f1864fe 100644
--- a/src/interfaces/ecpg/preproc/meson.build
+++ b/src/interfaces/ecpg/preproc/meson.build
@@ -69,14 +69,8 @@ c_kwlist = custom_target('c_kwlist_d.h',
input: ['c_kwlist.h'],
output: ['c_kwlist_d.h'],
depends: check_rules,
- command: [
- perl,
- '-I', '@SOURCE_ROOT@/src/tools',
- '@SOURCE_ROOT@/src/tools/gen_keywordlist.pl',
- '--output', '@OUTDIR@',
- '--varname', 'ScanCKeywords',
- '--no-case-fold', '@INPUT0@',
- ],
+ depend_files: gen_kwlist_deps,
+ command: [gen_kwlist_cmd, '--varname', 'ScanCKeywords', '--no-case-fold'],
)
generated_sources += c_kwlist
ecpg_sources += c_kwlist
@@ -84,13 +78,8 @@ ecpg_sources += c_kwlist
ecpg_kwlist = custom_target('ecpg_kwlist_d.h',
input: ['ecpg_kwlist.h'],
output: ['ecpg_kwlist_d.h'],
- command: [
- perl, '-I',
- '@SOURCE_ROOT@/src/tools',
- '@SOURCE_ROOT@/src/tools/gen_keywordlist.pl',
- '--output', '@OUTDIR@',
- '--varname', 'ScanECPGKeywords', '@INPUT0@',
- ]
+ depend_files: gen_kwlist_deps,
+ command: [gen_kwlist_cmd, '--varname', 'ScanECPGKeywords'],
)
generated_sources += ecpg_kwlist
ecpg_sources += ecpg_kwlist
--
2.38.0