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 <and...@anarazel.de>
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 <ilm...@ilmari.org>
Discussion: https://postgr.es/m/87v8g7s6bf....@wibble.ilmari.org
---
 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

Reply via email to