Hi, I took some time to look at the Meson build for Postgres. I contribute some of the time to Meson, itself. Within this patchset you will find pretty small changes. Most of the commits are attempting to create more consistency with the surrounding code. I think there is more that can be done to improve the build a bit like including subprojects for optional dependencies like lz4, zstd, etc.
While I was reading through the code, I also noticed a few XXX/FIXMEs. I don't mind taking a look at those in the future, but I think I need more context for almost all of them since I am brand new to Postgres development. Since I also have _some_ sway in the Meson community, I can help get more attention to Meson issues that benefit Postgres. I currently note 3 Meson issues that are commented in the code for instance. If anyone ever has any problems or questions about Meson or specifically the Meson build of Postgres, I am more than happy to receive an email to see if I can help out. Highlighting the biggest changes in this patchset: - Add Meson overrides - Remove Meson program options for specifying paths Everything but the last patch could most likely be backported to previous maintained releases including Meson, though the patchset is initially targeting the master branch. -- Tristan Partin Neon (https://neon.tech)
From ae61706e5466b689dfbb3d7d3eafec218547204e Mon Sep 17 00:00:00 2001 From: Tristan Partin <tris...@neon.tech> Date: Tue, 16 May 2023 07:55:03 -0500 Subject: [PATCH postgres v1 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 63d982604a2c1ee13f290c4cbd6af5e9404e541e Mon Sep 17 00:00:00 2001 From: Tristan Partin <tris...@neon.tech> Date: Tue, 16 May 2023 08:03:31 -0500 Subject: [PATCH postgres v1 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 1c8d374504ceb0c4051457092f6140ef730fa87d Mon Sep 17 00:00:00 2001 From: Tristan Partin <tris...@neon.tech> Date: Tue, 16 May 2023 08:11:14 -0500 Subject: [PATCH postgres v1 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 c2c40d1c4120b4b3948b00866b13ea0795a49cdd Mon Sep 17 00:00:00 2001 From: Tristan Partin <tris...@neon.tech> Date: Tue, 16 May 2023 08:28:48 -0500 Subject: [PATCH postgres v1 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 3aa4f57021447e57707bb63c80c4dff863a8f2ca Mon Sep 17 00:00:00 2001 From: Tristan Partin <tris...@neon.tech> Date: Tue, 16 May 2023 08:33:12 -0500 Subject: [PATCH postgres v1 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 096044628c..d6e415d40a 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 ed34dc95b979169e50d11353b480e25d7e9af916 Mon Sep 17 00:00:00 2001 From: Tristan Partin <tris...@neon.tech> Date: Tue, 16 May 2023 09:19:46 -0500 Subject: [PATCH postgres v1 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 d6e415d40a..3db70fb8a6 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 75b30d373c26e01e95d7ec4a87e8a19f91b581db Mon Sep 17 00:00:00 2001 From: Tristan Partin <tris...@neon.tech> Date: Tue, 16 May 2023 09:27:06 -0500 Subject: [PATCH postgres v1 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 | 17 +++++++++-------- 1 file changed, 9 insertions(+), 8 deletions(-) diff --git a/meson.build b/meson.build index 3db70fb8a6..d266e2eb1f 100644 --- a/meson.build +++ b/meson.build @@ -743,19 +743,20 @@ endif llvmopt = get_option('llvm') if not llvmopt.disabled() - add_languages('cpp', required: true, native: false) - llvm = dependency('llvm', version: '>=3.9', method: 'config-tool', required: llvmopt) + if add_languages('cpp', required: llvmopt, native: false) + llvm = dependency('llvm', version: '>=3.9', method: 'config-tool', required: llvmopt) - if llvm.found() + if llvm.found() - cdata.set('USE_LLVM', 1) + cdata.set('USE_LLVM', 1) - cpp = meson.get_compiler('cpp') + cpp = meson.get_compiler('cpp') - llvm_binpath = llvm.get_variable(configtool: 'bindir') + llvm_binpath = llvm.get_variable(configtool: 'bindir') - ccache = find_program('ccache', native: true, required: false) - clang = find_program(llvm_binpath / 'clang', required: true) + ccache = find_program('ccache', native: true, required: false) + clang = find_program(llvm_binpath / 'clang', required: true) + endif endif else llvm = not_found_dep -- Tristan Partin Neon (https://neon.tech)
From d3b51220c88143cc4a87d23d900c13cf28a0105d Mon Sep 17 00:00:00 2001 From: Tristan Partin <tris...@neon.tech> Date: Tue, 16 May 2023 10:27:34 -0500 Subject: [PATCH postgres v1 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 d266e2eb1f..ca4366988d 100644 --- a/meson.build +++ b/meson.build @@ -1132,7 +1132,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 5c3a143dd2a882bdaa3aa2fa4dcb49c39ddc676d Mon Sep 17 00:00:00 2001 From: Tristan Partin <tris...@neon.tech> Date: Wed, 17 May 2023 09:30:54 -0500 Subject: [PATCH postgres v1 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 ca4366988d..592f271711 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 6f820f240a6d726c639e121f55823341ae1a9abb Mon Sep 17 00:00:00 2001 From: Tristan Partin <tris...@neon.tech> Date: Wed, 17 May 2023 09:33:18 -0500 Subject: [PATCH postgres v1 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 592f271711..e9e03d1ff5 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', '') @@ -1675,7 +1675,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 c89ac6672dd0b914d06f6fe07861300cdf613331 Mon Sep 17 00:00:00 2001 From: Tristan Partin <tris...@neon.tech> Date: Wed, 17 May 2023 09:38:09 -0500 Subject: [PATCH postgres v1 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 e9e03d1ff5..83bc1c7b25 100644 --- a/meson.build +++ b/meson.build @@ -770,8 +770,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) @@ -1080,7 +1080,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() @@ -2540,7 +2540,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 b35ecb2c8dcd71608f98af1e0ec19d965099ceab Mon Sep 17 00:00:00 2001 From: Tristan Partin <tris...@neon.tech> Date: Wed, 17 May 2023 09:40:02 -0500 Subject: [PATCH postgres v1 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 | 10 ++++------ 1 file changed, 4 insertions(+), 6 deletions(-) diff --git a/meson.build b/meson.build index 83bc1c7b25..8dbd9b660b 100644 --- a/meson.build +++ b/meson.build @@ -1053,15 +1053,13 @@ 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) endif -else - python3_dep = not_found_dep endif -- Tristan Partin Neon (https://neon.tech)
From d6e3ba0b2b698b39121bbd58af01b99d616a4f8c Mon Sep 17 00:00:00 2001 From: Tristan Partin <tris...@neon.tech> Date: Wed, 17 May 2023 09:43:51 -0500 Subject: [PATCH postgres v1 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 8dbd9b660b..ba158cb635 100644 --- a/meson.build +++ b/meson.build @@ -1145,7 +1145,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 = [ @@ -1155,7 +1155,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>', @@ -1310,7 +1310,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 @@ -1598,8 +1598,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 @@ -1641,8 +1640,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 @@ -1669,7 +1668,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 = @@ -3031,7 +3030,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 47394ffd113d4170e955bc033841cb7e18fd3ac4 Mon Sep 17 00:00:00 2001 From: Tristan Partin <tris...@neon.tech> Date: Wed, 17 May 2023 09:44:49 -0500 Subject: [PATCH postgres v1 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 ba158cb635..d92c57249d 100644 --- a/meson.build +++ b/meson.build @@ -1190,13 +1190,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) @@ -1205,12 +1202,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 c88f32e8f0801c57f01dd7b9cdbac1d1e749a5ea Mon Sep 17 00:00:00 2001 From: Tristan Partin <tris...@neon.tech> Date: Wed, 17 May 2023 09:48:18 -0500 Subject: [PATCH postgres v1 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 d92c57249d..6981429b20 100644 --- a/meson.build +++ b/meson.build @@ -1340,7 +1340,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 189d3ac3d5593ce3e475813e4830a29bb4e96f70 Mon Sep 17 00:00:00 2001 From: Tristan Partin <tris...@neon.tech> Date: Wed, 17 May 2023 10:36:52 -0500 Subject: [PATCH postgres v1 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 5ee13f09e4101904dbc9887bd4844eb5f1cb4fea Mon Sep 17 00:00:00 2001 From: Tristan Partin <tris...@neon.tech> Date: Wed, 17 May 2023 10:54:53 -0500 Subject: [PATCH postgres v1 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 6981429b20..6d8e34fc29 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)