Received a review from a Meson maintainer. Here is a v2.

-- 
Tristan Partin
Neon (https://neon.tech)
From 1ebd8acb56eb0227b09bd7536e1c88ba0059c7ad Mon Sep 17 00:00:00 2001
From: Tristan Partin <tris...@neon.tech>
Date: Tue, 16 May 2023 07:55:03 -0500
Subject: [PATCH v2 01/17] Remove triple-quoted strings

Triple-quoted strings are for multiline strings in Meson. None of the
descriptions that got changed were multiline and the entire file uses
single-line descriptions.
---
 meson_options.txt | 10 +++++-----
 1 file changed, 5 insertions(+), 5 deletions(-)

diff --git a/meson_options.txt b/meson_options.txt
index 5b44a8829d..1ea9729dc2 100644
--- a/meson_options.txt
+++ b/meson_options.txt
@@ -10,19 +10,19 @@ option('blocksize', type : 'combo',
 option('wal_blocksize', type : 'combo',
   choices: ['1', '2', '4', '8', '16', '32', '64'],
   value: '8',
-  description : '''WAL block size, in kilobytes''')
+  description : 'WAL block size, in kilobytes')
 
 option('segsize', type : 'integer', value : 1,
-  description : '''Segment size, in gigabytes''')
+  description : 'Segment size, in gigabytes')
 
 option('segsize_blocks', type : 'integer', value: 0,
-  description : '''Segment size, in blocks''')
+  description : 'Segment size, in blocks')
 
 
 # Miscellaneous options
 
 option('krb_srvnam', type : 'string', value : 'postgres',
-  description : '''Default Kerberos service principal for GSSAPI''')
+  description : 'Default Kerberos service principal for GSSAPI')
 
 option('system_tzdata', type: 'string', value: '',
   description: 'use system time zone data in specified directory')
@@ -32,7 +32,7 @@ option('system_tzdata', type: 'string', value: '',
 
 option('pgport', type : 'integer', value : 5432,
   min: 1, max: 65535,
-  description : '''Default port number for server and clients''')
+  description : 'Default port number for server and clients')
 
 
 # Developer options
-- 
Tristan Partin
Neon (https://neon.tech)

From ecf70897974b5651575cf7b0f729c99fd436c976 Mon Sep 17 00:00:00 2001
From: Tristan Partin <tris...@neon.tech>
Date: Tue, 16 May 2023 08:03:31 -0500
Subject: [PATCH v2 02/17] Use consistent casing in Meson option descriptions

Meson itself uses capital letters for option descriptions, so follow
that.
---
 meson_options.txt | 90 +++++++++++++++++++++++------------------------
 1 file changed, 45 insertions(+), 45 deletions(-)

diff --git a/meson_options.txt b/meson_options.txt
index 1ea9729dc2..fa823fd088 100644
--- a/meson_options.txt
+++ b/meson_options.txt
@@ -5,7 +5,7 @@
 option('blocksize', type : 'combo',
   choices : ['1', '2', '4', '8', '16', '32'],
   value : '8',
-  description: 'set relation block size in kB')
+  description: 'Set relation block size in kB')
 
 option('wal_blocksize', type : 'combo',
   choices: ['1', '2', '4', '8', '16', '32', '64'],
@@ -25,7 +25,7 @@ option('krb_srvnam', type : 'string', value : 'postgres',
   description : 'Default Kerberos service principal for GSSAPI')
 
 option('system_tzdata', type: 'string', value: '',
-  description: 'use system time zone data in specified directory')
+  description: 'Use system time zone data in specified directory')
 
 
 # Defaults
@@ -38,7 +38,7 @@ option('pgport', type : 'integer', value : 5432,
 # Developer options
 
 option('cassert', type : 'boolean', value: false,
-  description: 'enable assertion checks (for debugging)')
+  description: 'Enable assertion checks (for debugging)')
 
 option('tap_tests', type : 'feature', value : 'auto',
   description : 'Whether to enable tap tests')
@@ -47,43 +47,43 @@ option('PG_TEST_EXTRA', type : 'string', value: '',
   description: 'Enable selected extra tests')
 
 option('atomics', type : 'boolean', value: true,
-  description: 'whether to use atomic operations')
+  description: 'Whether to use atomic operations')
 
 option('spinlocks', type : 'boolean', value: true,
-  description: 'whether to use spinlocks')
+  description: 'Whether to use spinlocks')
 
 
 # Compilation options
 
 option('extra_include_dirs', type : 'array', value: [],
-  description: 'non-default directories to be searched for headers')
+  description: 'Non-default directories to be searched for headers')
 
 option('extra_lib_dirs', type : 'array', value: [],
-  description: 'non-default directories to be searched for libs')
+  description: 'Non-default directories to be searched for libs')
 
 option('extra_version', type : 'string', value: '',
-  description: 'append STRING to the PostgreSQL version number')
+  description: 'Append STRING to the PostgreSQL version number')
 
 option('darwin_sysroot', type : 'string', value: '',
-  description: 'select a non-default sysroot path')
+  description: 'Select a non-default sysroot path')
 
 option('rpath', type : 'boolean', value: true,
-  description: 'whether to embed shared library search path in executables')
+  description: 'Whether to embed shared library search path in executables')
 
 
 # External dependencies
 
 option('bonjour', type : 'feature', value: 'auto',
-  description: 'build with Bonjour support')
+  description: 'Build with Bonjour support')
 
 option('bsd_auth', type : 'feature', value: 'auto',
-  description: 'build with BSD Authentication support')
+  description: 'Build with BSD Authentication support')
 
 option('docs', type : 'feature', value: 'auto',
-  description: 'documentation in HTML and man page format')
+  description: 'Documentation in HTML and man page format')
 
 option('docs_pdf', type : 'feature', value: 'auto',
-  description: 'documentation in PDF format')
+  description: 'Documentation in PDF format')
 
 option('docs_html_style', type : 'combo', choices: ['simple', 'website'],
   description: 'CSS stylesheet for HTML documentation')
@@ -110,102 +110,102 @@ option('libxslt', type : 'feature', value: 'auto',
   description: 'XSLT support in contrib/xml2')
 
 option('llvm', type : 'feature', value: 'disabled',
-  description: 'whether to use llvm')
+  description: 'Whether to use llvm')
 
 option('lz4', type : 'feature', value: 'auto',
   description: 'LZ4 support')
 
 option('nls', type: 'feature', value: 'auto',
-  description: 'native language support')
+  description: 'Native language support')
 
 option('pam', type : 'feature', value: 'auto',
-  description: 'build with PAM support')
+  description: 'Build with PAM support')
 
 option('plperl', type : 'feature', value: 'auto',
-  description: 'build Perl modules (PL/Perl)')
+  description: 'Build Perl modules (PL/Perl)')
 
 option('plpython', type : 'feature', value: 'auto',
-  description: 'build Python modules (PL/Python)')
+  description: 'Build Python modules (PL/Python)')
 
 option('pltcl', type : 'feature', value: 'auto',
-  description: 'build with TCL support')
+  description: 'Build with TCL support')
 
 option('tcl_version', type : 'string', value : 'tcl',
-  description: 'specify TCL version')
+  description: 'Specify TCL version')
 
 option('readline', type : 'feature', value : 'auto',
-  description: 'use GNU Readline or BSD Libedit for editing')
+  description: 'Use GNU Readline or BSD Libedit for editing')
 
 option('selinux', type : 'feature', value : 'disabled',
-  description: 'build with SELinux support')
+  description: 'Build with SELinux support')
 
 option('ssl', type : 'combo', choices : ['auto', 'none', 'openssl'],
   value : 'auto',
-  description: 'use LIB for SSL/TLS support (openssl)')
+  description: 'Use LIB for SSL/TLS support (openssl)')
 
 option('systemd', type : 'feature', value: 'auto',
-  description: 'build with systemd support')
+  description: 'Build with systemd support')
 
 option('uuid', type : 'combo', choices : ['none', 'bsd', 'e2fs', 'ossp'],
   value : 'none',
-  description: 'build contrib/uuid-ossp using LIB')
+  description: 'Build contrib/uuid-ossp using LIB')
 
 option('zlib', type : 'feature', value: 'auto',
-  description: 'whether to use zlib')
+  description: 'Whether to use zlib')
 
 option('zstd', type : 'feature', value: 'auto',
-  description: 'whether to use zstd')
+  description: 'Whether to use zstd')
 
 
 # Programs
 
 option('BISON', type : 'array', value: ['bison', 'win_bison'],
-  description: 'path to bison binary')
+  description: 'Path to bison binary')
 
 option('DTRACE', type : 'string', value: 'dtrace',
-  description: 'path to dtrace binary')
+  description: 'Path to dtrace binary')
 
 option('FLEX', type : 'array', value: ['flex', 'win_flex'],
-  description: 'path to flex binary')
+  description: 'Path to flex binary')
 
 option('FOP', type : 'string', value: 'fop',
-  description: 'path to fop binary')
+  description: 'Path to fop binary')
 
 option('GZIP', type : 'string', value: 'gzip',
-  description: 'path to gzip binary')
+  description: 'Path to gzip binary')
 
 option('LZ4', type : 'string', value: 'lz4',
-  description: 'path to lz4 binary')
+  description: 'Path to lz4 binary')
 
 option('OPENSSL', type : 'string', value: 'openssl',
-  description: 'path to openssl binary')
+  description: 'Path to openssl binary')
 
 option('PERL', type : 'string', value: 'perl',
-  description: 'path to perl binary')
+  description: 'Path to perl binary')
 
 option('PROVE', type : 'string', value: 'prove',
-  description: 'path to prove binary')
+  description: 'Path to prove binary')
 
 option('PYTHON', type : 'array', value: ['python3', 'python'],
-  description: 'path to python binary')
+  description: 'Path to python binary')
 
 option('SED', type : 'string', value: 'gsed',
-  description: 'path to sed binary')
+  description: 'Path to sed binary')
 
 option('STRIP', type : 'string', value: 'strip',
-  description: 'path to strip binary, used for PGXS emulation')
+  description: 'Path to strip binary, used for PGXS emulation')
 
 option('TAR', type : 'string', value: 'tar',
-  description: 'path to tar binary')
+  description: 'Path to tar binary')
 
 option('XMLLINT', type : 'string', value: 'xmllint',
-  description: 'path to xmllint binary')
+  description: 'Path to xmllint binary')
 
 option('XSLTPROC', type : 'string', value: 'xsltproc',
-  description: 'path to xsltproc binary')
+  description: 'Path to xsltproc binary')
 
 option('ZSTD', type : 'string', value: 'zstd',
-  description: 'path to zstd binary')
+  description: 'Path to zstd binary')
 
 option('ZIC', type : 'string', value: 'zic',
-  description: 'path to zic binary, when cross-compiling')
+  description: 'Path to zic binary, when cross-compiling')
-- 
Tristan Partin
Neon (https://neon.tech)

From 0d6ae9591b493d558479f4b6e7e7423a84f2b4aa Mon Sep 17 00:00:00 2001
From: Tristan Partin <tris...@neon.tech>
Date: Tue, 16 May 2023 08:11:14 -0500
Subject: [PATCH v2 03/17] Use consistent Meson option description formats

---
 meson_options.txt | 32 ++++++++++++++++----------------
 1 file changed, 16 insertions(+), 16 deletions(-)

diff --git a/meson_options.txt b/meson_options.txt
index fa823fd088..bdc6735332 100644
--- a/meson_options.txt
+++ b/meson_options.txt
@@ -5,7 +5,7 @@
 option('blocksize', type : 'combo',
   choices : ['1', '2', '4', '8', '16', '32'],
   value : '8',
-  description: 'Set relation block size in kB')
+  description: 'Relation block size, in kilobytes')
 
 option('wal_blocksize', type : 'combo',
   choices: ['1', '2', '4', '8', '16', '32', '64'],
@@ -41,16 +41,16 @@ option('cassert', type : 'boolean', value: false,
   description: 'Enable assertion checks (for debugging)')
 
 option('tap_tests', type : 'feature', value : 'auto',
-  description : 'Whether to enable tap tests')
+  description : 'Enable tap tests')
 
 option('PG_TEST_EXTRA', type : 'string', value: '',
   description: 'Enable selected extra tests')
 
 option('atomics', type : 'boolean', value: true,
-  description: 'Whether to use atomic operations')
+  description: 'Use atomic operations')
 
 option('spinlocks', type : 'boolean', value: true,
-  description: 'Whether to use spinlocks')
+  description: 'Use spinlocks')
 
 
 # Compilation options
@@ -68,16 +68,16 @@ option('darwin_sysroot', type : 'string', value: '',
   description: 'Select a non-default sysroot path')
 
 option('rpath', type : 'boolean', value: true,
-  description: 'Whether to embed shared library search path in executables')
+  description: 'Embed shared library search path in executables')
 
 
 # External dependencies
 
 option('bonjour', type : 'feature', value: 'auto',
-  description: 'Build with Bonjour support')
+  description: 'Bonjour support')
 
 option('bsd_auth', type : 'feature', value: 'auto',
-  description: 'Build with BSD Authentication support')
+  description: 'BSD Authentication support')
 
 option('docs', type : 'feature', value: 'auto',
   description: 'Documentation in HTML and man page format')
@@ -110,7 +110,7 @@ option('libxslt', type : 'feature', value: 'auto',
   description: 'XSLT support in contrib/xml2')
 
 option('llvm', type : 'feature', value: 'disabled',
-  description: 'Whether to use llvm')
+  description: 'LLVM support')
 
 option('lz4', type : 'feature', value: 'auto',
   description: 'LZ4 support')
@@ -119,7 +119,7 @@ option('nls', type: 'feature', value: 'auto',
   description: 'Native language support')
 
 option('pam', type : 'feature', value: 'auto',
-  description: 'Build with PAM support')
+  description: 'PAM support')
 
 option('plperl', type : 'feature', value: 'auto',
   description: 'Build Perl modules (PL/Perl)')
@@ -128,33 +128,33 @@ option('plpython', type : 'feature', value: 'auto',
   description: 'Build Python modules (PL/Python)')
 
 option('pltcl', type : 'feature', value: 'auto',
-  description: 'Build with TCL support')
+  description: 'Build with TCL support (PL/TCL)')
 
 option('tcl_version', type : 'string', value : 'tcl',
-  description: 'Specify TCL version')
+  description: 'TCL version')
 
 option('readline', type : 'feature', value : 'auto',
   description: 'Use GNU Readline or BSD Libedit for editing')
 
 option('selinux', type : 'feature', value : 'disabled',
-  description: 'Build with SELinux support')
+  description: 'SELinux support')
 
 option('ssl', type : 'combo', choices : ['auto', 'none', 'openssl'],
   value : 'auto',
   description: 'Use LIB for SSL/TLS support (openssl)')
 
 option('systemd', type : 'feature', value: 'auto',
-  description: 'Build with systemd support')
+  description: 'systemd support')
 
 option('uuid', type : 'combo', choices : ['none', 'bsd', 'e2fs', 'ossp'],
   value : 'none',
-  description: 'Build contrib/uuid-ossp using LIB')
+  description: 'Use LIB for contrib/uuid-ossp support')
 
 option('zlib', type : 'feature', value: 'auto',
-  description: 'Whether to use zlib')
+  description: 'Enable zlib')
 
 option('zstd', type : 'feature', value: 'auto',
-  description: 'Whether to use zstd')
+  description: 'Enable zstd')
 
 
 # Programs
-- 
Tristan Partin
Neon (https://neon.tech)

From 09361494f3a4828d995f8f5d0e201cfd28ff2690 Mon Sep 17 00:00:00 2001
From: Tristan Partin <tris...@neon.tech>
Date: Tue, 16 May 2023 08:28:48 -0500
Subject: [PATCH v2 04/17] Attach colon to keyword argument

This matches the style found in the rest of the Meson build description.
---
 meson_options.txt | 138 +++++++++++++++++++++++-----------------------
 1 file changed, 69 insertions(+), 69 deletions(-)

diff --git a/meson_options.txt b/meson_options.txt
index bdc6735332..e9ac70766a 100644
--- a/meson_options.txt
+++ b/meson_options.txt
@@ -2,27 +2,27 @@
 
 # Data layout influencing options
 
-option('blocksize', type : 'combo',
-  choices : ['1', '2', '4', '8', '16', '32'],
-  value : '8',
+option('blocksize', type: 'combo',
+  choices: ['1', '2', '4', '8', '16', '32'],
+  value: '8',
   description: 'Relation block size, in kilobytes')
 
-option('wal_blocksize', type : 'combo',
+option('wal_blocksize', type: 'combo',
   choices: ['1', '2', '4', '8', '16', '32', '64'],
   value: '8',
-  description : 'WAL block size, in kilobytes')
+  description: 'WAL block size, in kilobytes')
 
-option('segsize', type : 'integer', value : 1,
-  description : 'Segment size, in gigabytes')
+option('segsize', type: 'integer', value: 1,
+  description: 'Segment size, in gigabytes')
 
-option('segsize_blocks', type : 'integer', value: 0,
-  description : 'Segment size, in blocks')
+option('segsize_blocks', type: 'integer', value: 0,
+  description: 'Segment size, in blocks')
 
 
 # Miscellaneous options
 
-option('krb_srvnam', type : 'string', value : 'postgres',
-  description : 'Default Kerberos service principal for GSSAPI')
+option('krb_srvnam', type: 'string', value: 'postgres',
+  description: 'Default Kerberos service principal for GSSAPI')
 
 option('system_tzdata', type: 'string', value: '',
   description: 'Use system time zone data in specified directory')
@@ -30,182 +30,182 @@ option('system_tzdata', type: 'string', value: '',
 
 # Defaults
 
-option('pgport', type : 'integer', value : 5432,
+option('pgport', type: 'integer', value: 5432,
   min: 1, max: 65535,
-  description : 'Default port number for server and clients')
+  description: 'Default port number for server and clients')
 
 
 # Developer options
 
-option('cassert', type : 'boolean', value: false,
+option('cassert', type: 'boolean', value: false,
   description: 'Enable assertion checks (for debugging)')
 
-option('tap_tests', type : 'feature', value : 'auto',
-  description : 'Enable tap tests')
+option('tap_tests', type: 'feature', value: 'auto',
+  description: 'Enable tap tests')
 
-option('PG_TEST_EXTRA', type : 'string', value: '',
+option('PG_TEST_EXTRA', type: 'string', value: '',
   description: 'Enable selected extra tests')
 
-option('atomics', type : 'boolean', value: true,
+option('atomics', type: 'boolean', value: true,
   description: 'Use atomic operations')
 
-option('spinlocks', type : 'boolean', value: true,
+option('spinlocks', type: 'boolean', value: true,
   description: 'Use spinlocks')
 
 
 # Compilation options
 
-option('extra_include_dirs', type : 'array', value: [],
+option('extra_include_dirs', type: 'array', value: [],
   description: 'Non-default directories to be searched for headers')
 
-option('extra_lib_dirs', type : 'array', value: [],
+option('extra_lib_dirs', type: 'array', value: [],
   description: 'Non-default directories to be searched for libs')
 
-option('extra_version', type : 'string', value: '',
+option('extra_version', type: 'string', value: '',
   description: 'Append STRING to the PostgreSQL version number')
 
-option('darwin_sysroot', type : 'string', value: '',
+option('darwin_sysroot', type: 'string', value: '',
   description: 'Select a non-default sysroot path')
 
-option('rpath', type : 'boolean', value: true,
+option('rpath', type: 'boolean', value: true,
   description: 'Embed shared library search path in executables')
 
 
 # External dependencies
 
-option('bonjour', type : 'feature', value: 'auto',
+option('bonjour', type: 'feature', value: 'auto',
   description: 'Bonjour support')
 
-option('bsd_auth', type : 'feature', value: 'auto',
+option('bsd_auth', type: 'feature', value: 'auto',
   description: 'BSD Authentication support')
 
-option('docs', type : 'feature', value: 'auto',
+option('docs', type: 'feature', value: 'auto',
   description: 'Documentation in HTML and man page format')
 
-option('docs_pdf', type : 'feature', value: 'auto',
+option('docs_pdf', type: 'feature', value: 'auto',
   description: 'Documentation in PDF format')
 
-option('docs_html_style', type : 'combo', choices: ['simple', 'website'],
+option('docs_html_style', type: 'combo', choices: ['simple', 'website'],
   description: 'CSS stylesheet for HTML documentation')
 
-option('dtrace', type : 'feature', value: 'disabled',
+option('dtrace', type: 'feature', value: 'disabled',
   description: 'DTrace support')
 
-option('gssapi', type : 'feature', value: 'auto',
+option('gssapi', type: 'feature', value: 'auto',
   description: 'GSSAPI support')
 
-option('icu', type : 'feature', value: 'auto',
+option('icu', type: 'feature', value: 'auto',
   description: 'ICU support')
 
-option('ldap', type : 'feature', value: 'auto',
+option('ldap', type: 'feature', value: 'auto',
   description: 'LDAP support')
 
-option('libedit_preferred', type : 'boolean', value: false,
+option('libedit_preferred', type: 'boolean', value: false,
   description: 'Prefer BSD Libedit over GNU Readline')
 
-option('libxml', type : 'feature', value: 'auto',
+option('libxml', type: 'feature', value: 'auto',
   description: 'XML support')
 
-option('libxslt', type : 'feature', value: 'auto',
+option('libxslt', type: 'feature', value: 'auto',
   description: 'XSLT support in contrib/xml2')
 
-option('llvm', type : 'feature', value: 'disabled',
+option('llvm', type: 'feature', value: 'disabled',
   description: 'LLVM support')
 
-option('lz4', type : 'feature', value: 'auto',
+option('lz4', type: 'feature', value: 'auto',
   description: 'LZ4 support')
 
 option('nls', type: 'feature', value: 'auto',
   description: 'Native language support')
 
-option('pam', type : 'feature', value: 'auto',
+option('pam', type: 'feature', value: 'auto',
   description: 'PAM support')
 
-option('plperl', type : 'feature', value: 'auto',
+option('plperl', type: 'feature', value: 'auto',
   description: 'Build Perl modules (PL/Perl)')
 
-option('plpython', type : 'feature', value: 'auto',
+option('plpython', type: 'feature', value: 'auto',
   description: 'Build Python modules (PL/Python)')
 
-option('pltcl', type : 'feature', value: 'auto',
+option('pltcl', type: 'feature', value: 'auto',
   description: 'Build with TCL support (PL/TCL)')
 
-option('tcl_version', type : 'string', value : 'tcl',
+option('tcl_version', type: 'string', value: 'tcl',
   description: 'TCL version')
 
-option('readline', type : 'feature', value : 'auto',
+option('readline', type: 'feature', value: 'auto',
   description: 'Use GNU Readline or BSD Libedit for editing')
 
-option('selinux', type : 'feature', value : 'disabled',
+option('selinux', type: 'feature', value: 'disabled',
   description: 'SELinux support')
 
-option('ssl', type : 'combo', choices : ['auto', 'none', 'openssl'],
-  value : 'auto',
+option('ssl', type: 'combo', choices: ['auto', 'none', 'openssl'],
+  value: 'auto',
   description: 'Use LIB for SSL/TLS support (openssl)')
 
-option('systemd', type : 'feature', value: 'auto',
+option('systemd', type: 'feature', value: 'auto',
   description: 'systemd support')
 
-option('uuid', type : 'combo', choices : ['none', 'bsd', 'e2fs', 'ossp'],
-  value : 'none',
+option('uuid', type: 'combo', choices: ['none', 'bsd', 'e2fs', 'ossp'],
+  value: 'none',
   description: 'Use LIB for contrib/uuid-ossp support')
 
-option('zlib', type : 'feature', value: 'auto',
+option('zlib', type: 'feature', value: 'auto',
   description: 'Enable zlib')
 
-option('zstd', type : 'feature', value: 'auto',
+option('zstd', type: 'feature', value: 'auto',
   description: 'Enable zstd')
 
 
 # Programs
 
-option('BISON', type : 'array', value: ['bison', 'win_bison'],
+option('BISON', type: 'array', value: ['bison', 'win_bison'],
   description: 'Path to bison binary')
 
-option('DTRACE', type : 'string', value: 'dtrace',
+option('DTRACE', type: 'string', value: 'dtrace',
   description: 'Path to dtrace binary')
 
-option('FLEX', type : 'array', value: ['flex', 'win_flex'],
+option('FLEX', type: 'array', value: ['flex', 'win_flex'],
   description: 'Path to flex binary')
 
-option('FOP', type : 'string', value: 'fop',
+option('FOP', type: 'string', value: 'fop',
   description: 'Path to fop binary')
 
-option('GZIP', type : 'string', value: 'gzip',
+option('GZIP', type: 'string', value: 'gzip',
   description: 'Path to gzip binary')
 
-option('LZ4', type : 'string', value: 'lz4',
+option('LZ4', type: 'string', value: 'lz4',
   description: 'Path to lz4 binary')
 
-option('OPENSSL', type : 'string', value: 'openssl',
+option('OPENSSL', type: 'string', value: 'openssl',
   description: 'Path to openssl binary')
 
-option('PERL', type : 'string', value: 'perl',
+option('PERL', type: 'string', value: 'perl',
   description: 'Path to perl binary')
 
-option('PROVE', type : 'string', value: 'prove',
+option('PROVE', type: 'string', value: 'prove',
   description: 'Path to prove binary')
 
-option('PYTHON', type : 'array', value: ['python3', 'python'],
+option('PYTHON', type: 'array', value: ['python3', 'python'],
   description: 'Path to python binary')
 
-option('SED', type : 'string', value: 'gsed',
+option('SED', type: 'string', value: 'gsed',
   description: 'Path to sed binary')
 
-option('STRIP', type : 'string', value: 'strip',
+option('STRIP', type: 'string', value: 'strip',
   description: 'Path to strip binary, used for PGXS emulation')
 
-option('TAR', type : 'string', value: 'tar',
+option('TAR', type: 'string', value: 'tar',
   description: 'Path to tar binary')
 
-option('XMLLINT', type : 'string', value: 'xmllint',
+option('XMLLINT', type: 'string', value: 'xmllint',
   description: 'Path to xmllint binary')
 
-option('XSLTPROC', type : 'string', value: 'xsltproc',
+option('XSLTPROC', type: 'string', value: 'xsltproc',
   description: 'Path to xsltproc binary')
 
-option('ZSTD', type : 'string', value: 'zstd',
+option('ZSTD', type: 'string', value: 'zstd',
   description: 'Path to zstd binary')
 
-option('ZIC', type : 'string', value: 'zic',
+option('ZIC', type: 'string', value: 'zic',
   description: 'Path to zic binary, when cross-compiling')
-- 
Tristan Partin
Neon (https://neon.tech)

From e92e44e1699987730acdfe10bc5c6e6f64d4ce7e Mon Sep 17 00:00:00 2001
From: Tristan Partin <tris...@neon.tech>
Date: Tue, 16 May 2023 08:33:12 -0500
Subject: [PATCH v2 05/17] Use the not_found_dep constant

Previously in the build description, a not_found_dep was defined. Make
use of it.
---
 meson.build | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/meson.build b/meson.build
index 16b2e86646..f608eaed30 100644
--- a/meson.build
+++ b/meson.build
@@ -558,7 +558,7 @@ endif
 ###############################################################
 
 bonjouropt = get_option('bonjour')
-bonjour = dependency('', required : false)
+bonjour = not_found_dep
 if cc.check_header('dns_sd.h', required: bonjouropt,
     args: test_c_args, include_directories: postgres_inc) and \
    cc.has_function('DNSServiceRegister',
-- 
Tristan Partin
Neon (https://neon.tech)

From d64130b2d3ac760de94fc8854b55331012b5f0f3 Mon Sep 17 00:00:00 2001
From: Tristan Partin <tris...@neon.tech>
Date: Tue, 16 May 2023 09:19:46 -0500
Subject: [PATCH v2 06/17] Remove old comment

That portion of code is not run in the Windows case already given the
structure of the surrounding if statement.
---
 meson.build | 2 --
 1 file changed, 2 deletions(-)

diff --git a/meson.build b/meson.build
index f608eaed30..42797694f0 100644
--- a/meson.build
+++ b/meson.build
@@ -722,8 +722,6 @@ choke me
     endif
   endif
 
-  # XXX: this shouldn't be tested in the windows case, but should be tested in
-  # the dependency() success case
   if ldap.found() and cc.has_function('ldap_initialize',
       dependencies: ldap, args: test_c_args)
     cdata.set('HAVE_LDAP_INITIALIZE', 1)
-- 
Tristan Partin
Neon (https://neon.tech)

From 2af9455931aca3c50911e65b9cd61b3d75ed5770 Mon Sep 17 00:00:00 2001
From: Tristan Partin <tris...@neon.tech>
Date: Tue, 16 May 2023 09:27:06 -0500
Subject: [PATCH v2 07/17] Tie adding C++ support to the llvm Meson option

In the event the llvm option is defined to be 'auto', it is possible
that the host machine might not have a C++ compiler. If that is the
case, then we shouldn't continue reaching for the llvm dependency.
---
 meson.build | 6 ++----
 1 file changed, 2 insertions(+), 4 deletions(-)

diff --git a/meson.build b/meson.build
index 42797694f0..f18032a66c 100644
--- a/meson.build
+++ b/meson.build
@@ -742,8 +742,8 @@ endif
 ###############################################################
 
 llvmopt = get_option('llvm')
-if not llvmopt.disabled()
-  add_languages('cpp', required: true, native: false)
+llvm = not_found_dep
+if add_languages('cpp', required: llvmopt, native: false)
   llvm = dependency('llvm', version: '>=3.9', method: 'config-tool', required: llvmopt)
 
   if llvm.found()
@@ -757,8 +757,6 @@ if not llvmopt.disabled()
     ccache = find_program('ccache', native: true, required: false)
     clang = find_program(llvm_binpath / 'clang', required: true)
   endif
-else
-  llvm = not_found_dep
 endif
 
 
-- 
Tristan Partin
Neon (https://neon.tech)

From 6960bfe9b569eefadca8f190b9a172d6cfdfcee3 Mon Sep 17 00:00:00 2001
From: Tristan Partin <tris...@neon.tech>
Date: Tue, 16 May 2023 10:27:34 -0500
Subject: [PATCH v2 08/17] Mention the correct way to disable readline support

Using false to disable a feature option is incorrect.
---
 meson.build | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/meson.build b/meson.build
index f18032a66c..061a74b83e 100644
--- a/meson.build
+++ b/meson.build
@@ -1129,7 +1129,7 @@ if not get_option('readline').disabled()
       error('''readline header not found
 If you have @0@ already installed, see meson-log/meson-log.txt for details on the
 failure. It is possible the compiler isn't looking in the proper directory.
-Use -Dreadline=false to disable readline support.'''.format(readline_dep))
+Use -Dreadline=disabled to disable readline support.'''.format(readline_dep))
     endif
 
     check_funcs = [
-- 
Tristan Partin
Neon (https://neon.tech)

From 7b78f9d757c82c6b4f966022cdcdc8f30a95e674 Mon Sep 17 00:00:00 2001
From: Tristan Partin <tris...@neon.tech>
Date: Wed, 17 May 2023 09:30:54 -0500
Subject: [PATCH v2 09/17] Remove return code check

run_command(check: true) will already handle this.
---
 meson.build | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/meson.build b/meson.build
index 061a74b83e..a81aaeb8aa 100644
--- a/meson.build
+++ b/meson.build
@@ -385,7 +385,7 @@ install_files = files('src/tools/install_files')
 # https://github.com/mesonbuild/meson/issues/8511
 meson_binpath_r = run_command(python, 'src/tools/find_meson', check: true)
 
-if meson_binpath_r.returncode() != 0 or meson_binpath_r.stdout() == ''
+if meson_binpath_r.stdout() == ''
   error('huh, could not run find_meson.\nerrcode: @0@\nstdout: @1@\nstderr: @2@'.format(
     meson_binpath_r.returncode(),
     meson_binpath_r.stdout(),
-- 
Tristan Partin
Neon (https://neon.tech)

From 2f7c550b1ed6cdd538a29acb082abd32b1f59503 Mon Sep 17 00:00:00 2001
From: Tristan Partin <tris...@neon.tech>
Date: Wed, 17 May 2023 09:33:18 -0500
Subject: [PATCH v2 10/17] Fix some grammar usage in Meson comments

---
 meson.build | 4 ++--
 1 file changed, 2 insertions(+), 2 deletions(-)

diff --git a/meson.build b/meson.build
index a81aaeb8aa..0ab31b3424 100644
--- a/meson.build
+++ b/meson.build
@@ -150,7 +150,7 @@ cdata.set_quoted('PG_MAJORVERSION', pg_version_major.to_string())
 cdata.set('PG_MAJORVERSION_NUM', pg_version_major)
 cdata.set('PG_MINORVERSION_NUM', pg_version_minor)
 cdata.set('PG_VERSION_NUM', pg_version_num)
-# PG_VERSION_STR is built later, it depends compiler test results
+# PG_VERSION_STR is built later, it depends on compiler test results
 cdata.set_quoted('CONFIGURE_ARGS', '')
 
 
@@ -1672,7 +1672,7 @@ if cc.has_function_attribute('visibility:default') and \
   cdata.set('HAVE_VISIBILITY_ATTRIBUTE', 1)
 
   # Only newer versions of meson know not to apply gnu_symbol_visibility =
-  # inlineshidden to C code as well... Any either way, we want to put these
+  # inlineshidden to C code as well... And either way, we want to put these
   # flags into exported files (pgxs, .pc files).
   cflags_mod += '-fvisibility=hidden'
   cxxflags_mod += ['-fvisibility=hidden', '-fvisibility-inlines-hidden']
-- 
Tristan Partin
Neon (https://neon.tech)

From 841f6345c7bec3b8daa0bc2acdb09cd3de06dc41 Mon Sep 17 00:00:00 2001
From: Tristan Partin <tris...@neon.tech>
Date: Wed, 17 May 2023 09:38:09 -0500
Subject: [PATCH v2 11/17] Pass feature option through to required kwarg

Meson understands this already. No need to convert it to a boolean.
---
 meson.build | 8 ++++----
 1 file changed, 4 insertions(+), 4 deletions(-)

diff --git a/meson.build b/meson.build
index 0ab31b3424..188dd81243 100644
--- a/meson.build
+++ b/meson.build
@@ -767,8 +767,8 @@ endif
 
 icuopt = get_option('icu')
 if not icuopt.disabled()
-  icu = dependency('icu-uc', required: icuopt.enabled())
-  icu_i18n = dependency('icu-i18n', required: icuopt.enabled())
+  icu = dependency('icu-uc', required: icuopt)
+  icu_i18n = dependency('icu-i18n', required: icuopt)
 
   if icu.found()
     cdata.set('USE_ICU', 1)
@@ -1077,7 +1077,7 @@ if not get_option('readline').disabled()
     readline = dependency(readline_dep, required: false)
     if not readline.found()
       readline = cc.find_library(readline_dep,
-        required: get_option('readline').enabled(),
+        required: get_option('readline'),
         dirs: test_lib_d)
     endif
     if readline.found()
@@ -2537,7 +2537,7 @@ if not nlsopt.disabled()
   # otherwise there'd be lots of
   # "Gettext not found, all translation (po) targets will be ignored."
   # warnings if not found.
-  msgfmt = find_program('msgfmt', required: nlsopt.enabled(), native: true)
+  msgfmt = find_program('msgfmt', required: nlsopt, native: true)
 
   # meson 0.59 has this wrapped in dependency('int')
   if (msgfmt.found() and
-- 
Tristan Partin
Neon (https://neon.tech)

From 5409d4c64c42704d929e895dcf69f1b99597b128 Mon Sep 17 00:00:00 2001
From: Tristan Partin <tris...@neon.tech>
Date: Wed, 17 May 2023 09:40:02 -0500
Subject: [PATCH v2 12/17] Make finding pkg-config(python3) more robust

It is a possibility that the installation can't be found. Checking for
Python.h is redundant with what Meson does internally.

https://github.com/mesonbuild/meson/blob/master/mesonbuild/dependencies/python.py#L218
---
 meson.build | 14 ++++++++------
 1 file changed, 8 insertions(+), 6 deletions(-)

diff --git a/meson.build b/meson.build
index 188dd81243..7f6cad1908 100644
--- a/meson.build
+++ b/meson.build
@@ -1050,15 +1050,17 @@ endif
 ###############################################################
 
 pyopt = get_option('plpython')
+python3_dep = not_found_dep
 if not pyopt.disabled()
   pm = import('python')
-  python3_inst = pm.find_installation(required: pyopt.enabled())
-  python3_dep = python3_inst.dependency(embed: true, required: pyopt.enabled())
-  if not cc.check_header('Python.h', dependencies: python3_dep, required: pyopt.enabled())
-    python3_dep = not_found_dep
+  python3_inst = pm.find_installation(required: pyopt)
+  if python3_inst.found()
+    python3_dep = python3_inst.dependency(embed: true, required: pyopt)
+    # Remove this check after we depend on Meson >= 1.1.0
+    if not cc.check_header('Python.h', dependencies: python3_dep, required: pyopt)
+      python3_dep = not_found_dep
+    endif
   endif
-else
-  python3_dep = not_found_dep
 endif
 
 
-- 
Tristan Partin
Neon (https://neon.tech)

From 80019f2d4b3f55ee1e911817d7c5e018ca184060 Mon Sep 17 00:00:00 2001
From: Tristan Partin <tris...@neon.tech>
Date: Wed, 17 May 2023 09:43:51 -0500
Subject: [PATCH v2 13/17] Make some Meson style more consistent with
 surrounding code

---
 meson.build             | 17 ++++++++---------
 src/include/meson.build |  2 +-
 2 files changed, 9 insertions(+), 10 deletions(-)

diff --git a/meson.build b/meson.build
index 7f6cad1908..79b6aa47ec 100644
--- a/meson.build
+++ b/meson.build
@@ -1146,7 +1146,7 @@ Use -Dreadline=disabled to disable readline support.'''.format(readline_dep))
     foreach func : check_funcs
       found = cc.has_function(func, dependencies: [readline],
         args: test_c_args, include_directories: postgres_inc)
-      cdata.set('HAVE_'+func.to_upper(), found ? 1 : false)
+      cdata.set('HAVE_' + func.to_upper(), found ? 1 : false)
     endforeach
 
     check_vars = [
@@ -1156,7 +1156,7 @@ Use -Dreadline=disabled to disable readline support.'''.format(readline_dep))
     ]
 
     foreach var : check_vars
-      cdata.set('HAVE_'+var.to_upper(),
+      cdata.set('HAVE_' + var.to_upper(),
         cc.has_header_symbol(readline_h, var,
           args: test_c_args, include_directories: postgres_inc,
           prefix: '#include <stdio.h>',
@@ -1311,7 +1311,7 @@ if sslopt in ['auto', 'openssl']
       cdata.set('USE_OPENSSL', 1,
                 description: 'Define to 1 to build with OpenSSL support. (-Dssl=openssl)')
       cdata.set('OPENSSL_API_COMPAT', '0x10001000L',
-                description: '''Define to the OpenSSL API version in use. This avoids deprecation warnings from newer OpenSSL versions.''')
+                description: 'Define to the OpenSSL API version in use. This avoids deprecation warnings from newer OpenSSL versions.')
       ssl_library = 'openssl'
     else
       ssl = not_found_dep
@@ -1599,8 +1599,7 @@ if cc.links('''
 
   if not buggy_int128
     cdata.set('PG_INT128_TYPE', '__int128')
-    cdata.set('ALIGNOF_PG_INT128_TYPE', cc.
-      alignment('__int128', args: test_c_args))
+    cdata.set('ALIGNOF_PG_INT128_TYPE', cc.alignment('__int128', args: test_c_args))
   endif
 endif
 
@@ -1642,8 +1641,8 @@ endif
 # We use <stdbool.h> if we have it and it declares type bool as having
 # size 1.  Otherwise, c.h will fall back to declaring bool as unsigned char.
 if cc.has_type('_Bool', args: test_c_args) \
-  and cc.has_type('bool', prefix: '#include <stdbool.h>', args: test_c_args) \
-  and cc.sizeof('bool', prefix: '#include <stdbool.h>', args: test_c_args) == 1
+    and cc.has_type('bool', prefix: '#include <stdbool.h>', args: test_c_args) \
+    and cc.sizeof('bool', prefix: '#include <stdbool.h>', args: test_c_args) == 1
   cdata.set('HAVE__BOOL', 1)
   cdata.set('PG_USE_STDBOOL', 1)
 endif
@@ -1670,7 +1669,7 @@ endforeach
 
 
 if cc.has_function_attribute('visibility:default') and \
-  cc.has_function_attribute('visibility:hidden')
+    cc.has_function_attribute('visibility:hidden')
   cdata.set('HAVE_VISIBILITY_ATTRIBUTE', 1)
 
   # Only newer versions of meson know not to apply gnu_symbol_visibility =
@@ -3032,7 +3031,7 @@ meson_install_args = meson_args + ['install'] + {
     'muon': []
 }[meson_impl]
 
-# setup tests should  be run first,
+# setup tests should be run first,
 # so define priority for these
 setup_tests_priority = 100
 test('tmp_install',
diff --git a/src/include/meson.build b/src/include/meson.build
index 33c0a5562c..d7e1ecd4c9 100644
--- a/src/include/meson.build
+++ b/src/include/meson.build
@@ -89,7 +89,7 @@ install_headers(
   'c.h',
   'port.h',
   'postgres_fe.h',
-  install_dir: dir_include_internal
+  install_dir: dir_include_internal,
 )
 
 install_headers(
-- 
Tristan Partin
Neon (https://neon.tech)

From eccd941850e3e2ebdbf929cc1b1a573d1c4457cd Mon Sep 17 00:00:00 2001
From: Tristan Partin <tris...@neon.tech>
Date: Wed, 17 May 2023 09:44:49 -0500
Subject: [PATCH v2 14/17] Reduce branching on Meson version

This code had a branch depending on Meson version. Instead, we can just
move the system checks to the if statement. I believe this also keeps
selinux and systemd from being looked for on non-Linux systems when
using Meson < 0.59. Before they would be checked, but obviously fail.
---
 meson.build | 17 ++++++-----------
 1 file changed, 6 insertions(+), 11 deletions(-)

diff --git a/meson.build b/meson.build
index 79b6aa47ec..4f13896473 100644
--- a/meson.build
+++ b/meson.build
@@ -1191,13 +1191,10 @@ endif
 ###############################################################
 
 selinux = not_found_dep
-selinuxopt = get_option('selinux')
-if meson.version().version_compare('>=0.59')
-  selinuxopt = selinuxopt.disable_auto_if(host_system != 'linux')
+if host_system == 'linux'
+  selinux = dependency('libselinux', required: get_option('selinux'), version: '>= 2.1.10')
+  cdata.set('HAVE_LIBSELINUX', selinux.found() ? 1 : false)
 endif
-selinux = dependency('libselinux', required: selinuxopt, version: '>= 2.1.10')
-cdata.set('HAVE_LIBSELINUX',
-  selinux.found() ? 1 : false)
 
 
 
@@ -1206,12 +1203,10 @@ cdata.set('HAVE_LIBSELINUX',
 ###############################################################
 
 systemd = not_found_dep
-systemdopt = get_option('systemd')
-if meson.version().version_compare('>=0.59')
-  systemdopt = systemdopt.disable_auto_if(host_system != 'linux')
+if host_system == 'linux'
+  systemd = dependency('libsystemd', required: get_option('systemd'))
+  cdata.set('USE_SYSTEMD', systemd.found() ? 1 : false)
 endif
-systemd = dependency('libsystemd', required: systemdopt)
-cdata.set('USE_SYSTEMD', systemd.found() ? 1 : false)
 
 
 
-- 
Tristan Partin
Neon (https://neon.tech)

From c3f8e7e1fc5760292c03dfa4d4b0d91c86c27d66 Mon Sep 17 00:00:00 2001
From: Tristan Partin <tris...@neon.tech>
Date: Wed, 17 May 2023 09:48:18 -0500
Subject: [PATCH v2 15/17] Use a better error message in an impossible case

Meson validates 'choice' options for us, so technically this case is
impossible. A better error message helps people reading the code
understand what is going on in that branch.
---
 meson.build | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/meson.build b/meson.build
index 4f13896473..dd559fa587 100644
--- a/meson.build
+++ b/meson.build
@@ -1341,7 +1341,7 @@ if uuidopt != 'none'
     uuidfunc = 'uuid_export'
     uuidheader = 'uuid.h'
   else
-    error('huh')
+    error('unknown uuid build option value: @0@'.format(uuidopt))
   endif
 
   if not cc.has_header_symbol(uuidheader, uuidfunc, args: test_c_args, dependencies: uuid)
-- 
Tristan Partin
Neon (https://neon.tech)

From be4f22cd3c2bed3d288634df77333ed9646989da Mon Sep 17 00:00:00 2001
From: Tristan Partin <tris...@neon.tech>
Date: Wed, 17 May 2023 10:36:52 -0500
Subject: [PATCH v2 16/17] Add Meson overrides

Meson has the ability to do transparent overrides when projects are used
as subprojects. For instance, say I am building a Postgres extension. I
can define Postgres to be a subproject of my extension given the
following wrap file:

[wrap-git]
url = https://git.postgresql.org/git/postgresql.git
revision = master
depth = 1

[provide]
dependency_names = libpq

Then in my extension (root project), I can have the following line
snippet:

libpq = dependency('libpq')

This will tell Meson to transparently compile libpq prior to it
compiling my extension (because I depend on libpq) if libpq isn't found
on the host system.

I have also added overrides for the various public-facing exectuables.
Though I don't expect them to get much usage, might as well go ahead and
override them. They can be used by adding the following line to the
aforementioned wrap file:

program_names = initdb, postgres, ...

Then in my extension (root project), I can find them with the following
line:

initdb = find_program('initdb')

Again, initdb will be compiled transparently as my extension gets built
if and only if initdb isn't found on the host system.
---
 src/backend/meson.build                 | 2 ++
 src/bin/initdb/meson.build              | 2 ++
 src/bin/pg_amcheck/meson.build          | 2 ++
 src/bin/pg_archivecleanup/meson.build   | 2 ++
 src/bin/pg_basebackup/meson.build       | 6 ++++++
 src/bin/pg_checksums/meson.build        | 2 ++
 src/bin/pg_config/meson.build           | 2 ++
 src/bin/pg_controldata/meson.build      | 2 ++
 src/bin/pg_ctl/meson.build              | 2 ++
 src/bin/pg_dump/meson.build             | 6 ++++++
 src/bin/pg_resetwal/meson.build         | 2 ++
 src/bin/pg_rewind/meson.build           | 2 ++
 src/bin/pg_test_fsync/meson.build       | 2 ++
 src/bin/pg_test_timing/meson.build      | 2 ++
 src/bin/pg_upgrade/meson.build          | 2 ++
 src/bin/pg_verifybackup/meson.build     | 2 ++
 src/bin/pg_waldump/meson.build          | 2 ++
 src/bin/pgbench/meson.build             | 2 ++
 src/bin/psql/meson.build                | 2 ++
 src/bin/scripts/meson.build             | 6 ++++--
 src/interfaces/ecpg/preproc/meson.build | 2 ++
 src/interfaces/libpq/meson.build        | 2 ++
 22 files changed, 54 insertions(+), 2 deletions(-)

diff --git a/src/backend/meson.build b/src/backend/meson.build
index ccfc382fcf..ac2f66d920 100644
--- a/src/backend/meson.build
+++ b/src/backend/meson.build
@@ -147,6 +147,8 @@ postgres = executable('postgres',
 
 backend_targets += postgres
 
+meson.override_find_program('postgres', postgres)
+
 pg_mod_c_args = cflags_mod
 pg_mod_cpp_args = cxxflags_mod
 pg_mod_link_args = ldflags_sl + ldflags_mod
diff --git a/src/bin/initdb/meson.build b/src/bin/initdb/meson.build
index 49743630aa..12b4918e8b 100644
--- a/src/bin/initdb/meson.build
+++ b/src/bin/initdb/meson.build
@@ -23,6 +23,8 @@ initdb = executable('initdb',
 )
 bin_targets += initdb
 
+meson.override_find_program('initdb', initdb)
+
 tests += {
   'name': 'initdb',
   'sd': meson.current_source_dir(),
diff --git a/src/bin/pg_amcheck/meson.build b/src/bin/pg_amcheck/meson.build
index 2ade5aba03..8694abbf07 100644
--- a/src/bin/pg_amcheck/meson.build
+++ b/src/bin/pg_amcheck/meson.build
@@ -17,6 +17,8 @@ pg_amcheck = executable('pg_amcheck',
 )
 bin_targets += pg_amcheck
 
+meson.override_find_program('pg_amcheck', pg_amcheck)
+
 tests += {
   'name': 'pg_amcheck',
   'sd': meson.current_source_dir(),
diff --git a/src/bin/pg_archivecleanup/meson.build b/src/bin/pg_archivecleanup/meson.build
index 28349db58b..6eecb42b05 100644
--- a/src/bin/pg_archivecleanup/meson.build
+++ b/src/bin/pg_archivecleanup/meson.build
@@ -17,6 +17,8 @@ pg_archivecleanup = executable('pg_archivecleanup',
 )
 bin_targets += pg_archivecleanup
 
+meson.override_find_program('pg_archivecleanup', pg_archivecleanup)
+
 tests += {
   'name': 'pg_archivecleanup',
   'sd': meson.current_source_dir(),
diff --git a/src/bin/pg_basebackup/meson.build b/src/bin/pg_basebackup/meson.build
index c684622bfb..589c664163 100644
--- a/src/bin/pg_basebackup/meson.build
+++ b/src/bin/pg_basebackup/meson.build
@@ -37,6 +37,8 @@ pg_basebackup = executable('pg_basebackup',
 )
 bin_targets += pg_basebackup
 
+meson.override_find_program('pg_basebackup', pg_basebackup)
+
 
 pg_receivewal_sources = files(
   'pg_receivewal.c',
@@ -56,6 +58,8 @@ pg_receivewal = executable('pg_receivewal',
 )
 bin_targets += pg_receivewal
 
+meson.override_find_program('pg_receivewal', pg_receivewal)
+
 
 pg_recvlogical_sources = files(
   'pg_recvlogical.c',
@@ -75,6 +79,8 @@ pg_recvlogical = executable('pg_recvlogical',
 )
 bin_targets += pg_recvlogical
 
+meson.override_find_program('pg_recvlogical', pg_recvlogical)
+
 tests += {
   'name': 'pg_basebackup',
   'sd': meson.current_source_dir(),
diff --git a/src/bin/pg_checksums/meson.build b/src/bin/pg_checksums/meson.build
index 5528526094..d54e76ae6c 100644
--- a/src/bin/pg_checksums/meson.build
+++ b/src/bin/pg_checksums/meson.build
@@ -18,6 +18,8 @@ pg_checksums = executable('pg_checksums',
 )
 bin_targets += pg_checksums
 
+meson.override_find_program('pg_checksums', pg_checksums)
+
 tests += {
   'name': 'pg_checksums',
   'sd': meson.current_source_dir(),
diff --git a/src/bin/pg_config/meson.build b/src/bin/pg_config/meson.build
index 7fd7e94e2d..bea966f63e 100644
--- a/src/bin/pg_config/meson.build
+++ b/src/bin/pg_config/meson.build
@@ -17,6 +17,8 @@ pg_config = executable('pg_config',
 )
 bin_targets += pg_config
 
+meson.override_find_program('pg_config', pg_config)
+
 tests += {
   'name': 'pg_config',
   'sd': meson.current_source_dir(),
diff --git a/src/bin/pg_controldata/meson.build b/src/bin/pg_controldata/meson.build
index 03c9d0ae3e..4521828b1f 100644
--- a/src/bin/pg_controldata/meson.build
+++ b/src/bin/pg_controldata/meson.build
@@ -17,6 +17,8 @@ pg_controldata = executable('pg_controldata',
 )
 bin_targets += pg_controldata
 
+meson.override_find_program('pg_controldata', pg_controldata)
+
 tests += {
   'name': 'pg_controldata',
   'sd': meson.current_source_dir(),
diff --git a/src/bin/pg_ctl/meson.build b/src/bin/pg_ctl/meson.build
index 608a52f9fb..b62519c15f 100644
--- a/src/bin/pg_ctl/meson.build
+++ b/src/bin/pg_ctl/meson.build
@@ -17,6 +17,8 @@ pg_ctl = executable('pg_ctl',
 )
 bin_targets += pg_ctl
 
+meson.override_find_program('pg_ctl', pg_ctl)
+
 tests += {
   'name': 'pg_ctl',
   'sd': meson.current_source_dir(),
diff --git a/src/bin/pg_dump/meson.build b/src/bin/pg_dump/meson.build
index 9d59a106f3..ae89758ef6 100644
--- a/src/bin/pg_dump/meson.build
+++ b/src/bin/pg_dump/meson.build
@@ -45,6 +45,8 @@ pg_dump = executable('pg_dump',
 )
 bin_targets += pg_dump
 
+meson.override_find_program('pg_dump', pg_dump)
+
 
 pg_dumpall_sources = files(
   'pg_dumpall.c',
@@ -64,6 +66,8 @@ pg_dumpall = executable('pg_dumpall',
 )
 bin_targets += pg_dumpall
 
+meson.override_find_program('pg_dumpall', pg_dumpall)
+
 
 pg_restore_sources = files(
   'pg_restore.c',
@@ -83,6 +87,8 @@ pg_restore = executable('pg_restore',
 )
 bin_targets += pg_restore
 
+meson.override_find_program('pg_restore', pg_restore)
+
 tests += {
   'name': 'pg_dump',
   'sd': meson.current_source_dir(),
diff --git a/src/bin/pg_resetwal/meson.build b/src/bin/pg_resetwal/meson.build
index 3f08a819bb..e7d4ab3fa5 100644
--- a/src/bin/pg_resetwal/meson.build
+++ b/src/bin/pg_resetwal/meson.build
@@ -17,6 +17,8 @@ pg_resetwal = executable('pg_resetwal',
 )
 bin_targets += pg_resetwal
 
+meson.override_find_program('pg_resetwal', pg_resetwal)
+
 tests += {
   'name': 'pg_resetwal',
   'sd': meson.current_source_dir(),
diff --git a/src/bin/pg_rewind/meson.build b/src/bin/pg_rewind/meson.build
index fd22818be4..23d698d8fd 100644
--- a/src/bin/pg_rewind/meson.build
+++ b/src/bin/pg_rewind/meson.build
@@ -27,6 +27,8 @@ pg_rewind = executable('pg_rewind',
 )
 bin_targets += pg_rewind
 
+meson.override_find_program('pg_rewind', pg_rewind)
+
 
 tests += {
   'name': 'pg_rewind',
diff --git a/src/bin/pg_test_fsync/meson.build b/src/bin/pg_test_fsync/meson.build
index aaf65c310e..3a03156508 100644
--- a/src/bin/pg_test_fsync/meson.build
+++ b/src/bin/pg_test_fsync/meson.build
@@ -17,6 +17,8 @@ pg_test_fsync = executable('pg_test_fsync',
 )
 bin_targets += pg_test_fsync
 
+meson.override_find_program('pg_test_fsync', pg_test_fsync)
+
 tests += {
   'name': 'pg_test_fsync',
   'sd': meson.current_source_dir(),
diff --git a/src/bin/pg_test_timing/meson.build b/src/bin/pg_test_timing/meson.build
index 02f4a5c641..8a5aa29135 100644
--- a/src/bin/pg_test_timing/meson.build
+++ b/src/bin/pg_test_timing/meson.build
@@ -17,6 +17,8 @@ pg_test_timing = executable('pg_test_timing',
 )
 bin_targets += pg_test_timing
 
+meson.override_find_program('pg_test_timing', pg_test_timing)
+
 tests += {
   'name': 'pg_test_timing',
   'sd': meson.current_source_dir(),
diff --git a/src/bin/pg_upgrade/meson.build b/src/bin/pg_upgrade/meson.build
index 12a97f84e2..3046b3f471 100644
--- a/src/bin/pg_upgrade/meson.build
+++ b/src/bin/pg_upgrade/meson.build
@@ -32,6 +32,8 @@ pg_upgrade = executable('pg_upgrade',
 )
 bin_targets += pg_upgrade
 
+meson.override_find_program('pg_upgrade', pg_upgrade)
+
 
 tests += {
   'name': 'pg_upgrade',
diff --git a/src/bin/pg_verifybackup/meson.build b/src/bin/pg_verifybackup/meson.build
index 9369da1bc6..5b670fd3e5 100644
--- a/src/bin/pg_verifybackup/meson.build
+++ b/src/bin/pg_verifybackup/meson.build
@@ -18,6 +18,8 @@ pg_verifybackup = executable('pg_verifybackup',
 )
 bin_targets += pg_verifybackup
 
+meson.override_find_program('pg_verifybackup', pg_verifybackup)
+
 tests += {
   'name': 'pg_verifybackup',
   'sd': meson.current_source_dir(),
diff --git a/src/bin/pg_waldump/meson.build b/src/bin/pg_waldump/meson.build
index ae674d17c3..c03f212842 100644
--- a/src/bin/pg_waldump/meson.build
+++ b/src/bin/pg_waldump/meson.build
@@ -24,6 +24,8 @@ pg_waldump = executable('pg_waldump',
 )
 bin_targets += pg_waldump
 
+meson.override_find_program('pg_waldump', pg_waldump)
+
 tests += {
   'name': 'pg_waldump',
   'sd': meson.current_source_dir(),
diff --git a/src/bin/pgbench/meson.build b/src/bin/pgbench/meson.build
index e3c7619cf4..b8b46ef721 100644
--- a/src/bin/pgbench/meson.build
+++ b/src/bin/pgbench/meson.build
@@ -35,6 +35,8 @@ pgbench = executable('pgbench',
 )
 bin_targets += pgbench
 
+meson.override_find_program('pgbench', pgbench)
+
 tests += {
   'name': 'pgbench',
   'sd': meson.current_source_dir(),
diff --git a/src/bin/psql/meson.build b/src/bin/psql/meson.build
index a0a4ac7afb..cf20b3a7a4 100644
--- a/src/bin/psql/meson.build
+++ b/src/bin/psql/meson.build
@@ -53,6 +53,8 @@ psql = executable('psql',
 )
 bin_targets += psql
 
+meson.override_find_program('psql', psql)
+
 install_data('psqlrc.sample',
   install_dir: dir_data,
 )
diff --git a/src/bin/scripts/meson.build b/src/bin/scripts/meson.build
index 5b4f8a6f85..fa16814710 100644
--- a/src/bin/scripts/meson.build
+++ b/src/bin/scripts/meson.build
@@ -26,13 +26,15 @@ foreach binary : binaries
       '--FILEDESC', '@0@ - PostgreSQL utility'.format(binary),])
   endif
 
-  binary = executable(binary,
+  exe = executable(binary,
     binary_sources,
     link_with: [scripts_common],
     dependencies: [frontend_code, libpq],
     kwargs: default_bin_args,
   )
-  bin_targets += binary
+  bin_targets += exe
+
+  meson.override_find_program(binary, exe)
 endforeach
 
 tests += {
diff --git a/src/interfaces/ecpg/preproc/meson.build b/src/interfaces/ecpg/preproc/meson.build
index 08d772d261..f7c9f79c81 100644
--- a/src/interfaces/ecpg/preproc/meson.build
+++ b/src/interfaces/ecpg/preproc/meson.build
@@ -110,4 +110,6 @@ ecpg_exe = executable('ecpg',
 )
 ecpg_targets += ecpg_exe
 
+meson.override_find_program('ecpg', ecpg_exe)
+
 subdir('po', if_found: libintl)
diff --git a/src/interfaces/libpq/meson.build b/src/interfaces/libpq/meson.build
index 80e6a15adf..6d18970e81 100644
--- a/src/interfaces/libpq/meson.build
+++ b/src/interfaces/libpq/meson.build
@@ -84,6 +84,8 @@ libpq = declare_dependency(
   include_directories: [include_directories('.')]
 )
 
+meson.override_dependency('libpq', libpq)
+
 pkgconfig.generate(
   name: 'libpq',
   description: 'PostgreSQL libpq library',
-- 
Tristan Partin
Neon (https://neon.tech)

From 673f15e1723d172e502cbfdea2b69699802ec914 Mon Sep 17 00:00:00 2001
From: Tristan Partin <tris...@neon.tech>
Date: Wed, 17 May 2023 10:54:53 -0500
Subject: [PATCH v2 17/17] Remove Meson program options for specifying paths

Meson has a built-in way to override paths without polluting project
build options called machine files.

https://mesonbuild.com/Machine-files.html

To summarize, a replacement for these options would look something like
the following:

[binaries]
bison = 'path/to/bison'
flex = 'path/to/flex'

This tells Meson to use the pre-defined paths for the defined binaries.
This process is very similar for how cross builds are done in Meson too.

To use the native.ini file, all someone compiling Postgres has to do is
pass `--native-file native.ini` to `meson setup`.
---
 meson.build               | 30 +++++++++++-----------
 meson_options.txt         | 54 ---------------------------------------
 src/makefiles/meson.build |  2 +-
 src/timezone/meson.build  |  2 +-
 4 files changed, 17 insertions(+), 71 deletions(-)

diff --git a/meson.build b/meson.build
index dd559fa587..a9639007d8 100644
--- a/meson.build
+++ b/meson.build
@@ -327,22 +327,22 @@ endif
 ###############################################################
 
 # External programs
-perl = find_program(get_option('PERL'), required: true, native: true)
-python = find_program(get_option('PYTHON'), required: true, native: true)
-flex = find_program(get_option('FLEX'), native: true, version: '>= 2.5.35')
-bison = find_program(get_option('BISON'), native: true, version: '>= 2.3')
-sed = find_program(get_option('SED'), 'sed', native: true)
-prove = find_program(get_option('PROVE'), native: true, required: false)
-tar = find_program(get_option('TAR'), native: true)
-gzip = find_program(get_option('GZIP'), native: true)
-program_lz4 = find_program(get_option('LZ4'), native: true, required: false)
-openssl = find_program(get_option('OPENSSL'), native: true, required: false)
-program_zstd = find_program(get_option('ZSTD'), native: true, required: false)
-dtrace = find_program(get_option('DTRACE'), native: true, required: get_option('dtrace'))
+perl = find_program('perl', required: true, native: true)
+python = find_program('python3', 'python', required: true, native: true)
+flex = find_program('flex', 'win_flex', native: true, version: '>= 2.5.35')
+bison = find_program('bison', 'win_bison', native: true, version: '>= 2.3')
+sed = find_program('sed', native: true)
+prove = find_program('prove', native: true, required: false)
+tar = find_program('tar', native: true)
+gzip = find_program('gzip', native: true)
+program_lz4 = find_program('lz4', native: true, required: false)
+openssl = find_program('openssl', native: true, required: false)
+program_zstd = find_program('zstd', native: true, required: false)
+dtrace = find_program('dtrace', native: true, required: get_option('dtrace'))
 missing = find_program('config/missing', native: true)
 cp = find_program('cp', required: false, native: true)
-xmllint_bin = find_program(get_option('XMLLINT'), native: true, required: false)
-xsltproc_bin = find_program(get_option('XSLTPROC'), native: true, required: false)
+xmllint_bin = find_program('xmllint', native: true, required: false)
+xsltproc_bin = find_program('xlstproc', native: true, required: false)
 
 bison_flags = []
 if bison.found()
@@ -592,7 +592,7 @@ endif
 docs_pdf_opt = get_option('docs_pdf')
 docs_pdf_dep = not_found_dep
 if not docs_pdf_opt.disabled()
-  fop = find_program(get_option('FOP'), native: true, required: docs_pdf_opt)
+  fop = find_program('fop', native: true, required: docs_pdf_opt)
   if xmllint_bin.found() and xsltproc_bin.found() and fop.found()
     docs_pdf_dep = declare_dependency()
   elif docs_pdf_opt.enabled()
diff --git a/meson_options.txt b/meson_options.txt
index e9ac70766a..1760cf05f9 100644
--- a/meson_options.txt
+++ b/meson_options.txt
@@ -155,57 +155,3 @@ option('zlib', type: 'feature', value: 'auto',
 
 option('zstd', type: 'feature', value: 'auto',
   description: 'Enable zstd')
-
-
-# Programs
-
-option('BISON', type: 'array', value: ['bison', 'win_bison'],
-  description: 'Path to bison binary')
-
-option('DTRACE', type: 'string', value: 'dtrace',
-  description: 'Path to dtrace binary')
-
-option('FLEX', type: 'array', value: ['flex', 'win_flex'],
-  description: 'Path to flex binary')
-
-option('FOP', type: 'string', value: 'fop',
-  description: 'Path to fop binary')
-
-option('GZIP', type: 'string', value: 'gzip',
-  description: 'Path to gzip binary')
-
-option('LZ4', type: 'string', value: 'lz4',
-  description: 'Path to lz4 binary')
-
-option('OPENSSL', type: 'string', value: 'openssl',
-  description: 'Path to openssl binary')
-
-option('PERL', type: 'string', value: 'perl',
-  description: 'Path to perl binary')
-
-option('PROVE', type: 'string', value: 'prove',
-  description: 'Path to prove binary')
-
-option('PYTHON', type: 'array', value: ['python3', 'python'],
-  description: 'Path to python binary')
-
-option('SED', type: 'string', value: 'gsed',
-  description: 'Path to sed binary')
-
-option('STRIP', type: 'string', value: 'strip',
-  description: 'Path to strip binary, used for PGXS emulation')
-
-option('TAR', type: 'string', value: 'tar',
-  description: 'Path to tar binary')
-
-option('XMLLINT', type: 'string', value: 'xmllint',
-  description: 'Path to xmllint binary')
-
-option('XSLTPROC', type: 'string', value: 'xsltproc',
-  description: 'Path to xsltproc binary')
-
-option('ZSTD', type: 'string', value: 'zstd',
-  description: 'Path to zstd binary')
-
-option('ZIC', type: 'string', value: 'zic',
-  description: 'Path to zic binary, when cross-compiling')
diff --git a/src/makefiles/meson.build b/src/makefiles/meson.build
index 13045cbd6e..b8ec848d74 100644
--- a/src/makefiles/meson.build
+++ b/src/makefiles/meson.build
@@ -5,7 +5,7 @@
 
 
 # Emulation of PGAC_CHECK_STRIP
-strip_bin = find_program(get_option('STRIP'), required: false, native: true)
+strip_bin = find_program('strip', required: false, native: true)
 strip_cmd = strip_bin.found() ? [strip_bin.path()] : [':']
 
 working_strip = false
diff --git a/src/timezone/meson.build b/src/timezone/meson.build
index 7b85a01c6b..8f6edb5110 100644
--- a/src/timezone/meson.build
+++ b/src/timezone/meson.build
@@ -28,7 +28,7 @@ if get_option('system_tzdata') == ''
   # build our zic. But for that we'd need to run a good chunk of the configure
   # tests both natively and cross. Unclear if it's worth it.
   if meson.is_cross_build()
-    zic = find_program(get_option('ZIC'), native: true, required: true)
+    zic = find_program('zic', native: true, required: true)
   else
     if host_system == 'windows'
       zic_sources += rc_bin_gen.process(win32ver_rc, extra_args: [
-- 
Tristan Partin
Neon (https://neon.tech)

Reply via email to