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