Hi, On Wed, 22 Feb 2023 at 12:14, Peter Eisentraut <peter.eisentr...@enterprisedb.com> wrote: > > On 21.02.23 17:32, Nazir Bilal Yavuz wrote: > >>> I like the second approach, with a 'uuid' feature option. As you wrote > >>> earlier, adding an 'auto' choice to a combo option doesn't work fully > >>> like a > >>> real feature option. > >> But we can make it behave exactly like one, by checking the auto_features > >> option. > > Yes, we can set it like `uuidopt = get_option('auto_features')`. > > However, if someone wants to set 'auto_features' to 'disabled' but > > 'uuid' to 'enabled'(to find at least one working uuid library); this > > won't be possible. We can add 'enabled', 'disabled and 'auto' choices > > to 'uuid' combo option to make all behaviours possible but adding > > 'uuid' feature option and 'uuid_library' combo option seems better to > > me. > > I think the uuid side of this is making this way too complicated. I'm > content leaving this as a manual option for now. > > There is much more value in making the ssl option work automatically. > So I would welcome a patch that just makes -Dssl=auto work smoothly, > perhaps using the "trick" that Andres described.
I tried to implement what we did for ssl to uuid as well, do you have any comments? Regards, Nazir Bilal Yavuz Microsoft
From 0e92050c15ca6e9ebeddaafad229eee53fc9e7b0 Mon Sep 17 00:00:00 2001 From: Nazir Bilal Yavuz <byavu...@gmail.com> Date: Tue, 14 Mar 2023 16:38:02 +0300 Subject: [PATCH v1] meson: Make auto the default of the uuid option --- .cirrus.yml | 5 +-- meson.build | 80 ++++++++++++++++++++++++++------------- meson_options.txt | 4 +- src/makefiles/meson.build | 2 +- 4 files changed, 59 insertions(+), 32 deletions(-) diff --git a/.cirrus.yml b/.cirrus.yml index 505c50f3285..1ccb14c6340 100644 --- a/.cirrus.yml +++ b/.cirrus.yml @@ -181,7 +181,7 @@ task: su postgres <<-EOF meson setup \ --buildtype=debug \ - -Dcassert=true -Duuid=bsd -Dtcl_version=tcl86 -Ddtrace=auto \ + -Dcassert=true -Dtcl_version=tcl86 -Ddtrace=auto \ -DPG_TEST_EXTRA="$PG_TEST_EXTRA" \ -Dextra_lib_dirs=/usr/local/lib -Dextra_include_dirs=/usr/local/include/ \ build @@ -243,7 +243,6 @@ LINUX_CONFIGURE_FEATURES: &LINUX_CONFIGURE_FEATURES >- LINUX_MESON_FEATURES: &LINUX_MESON_FEATURES >- -Dllvm=enabled - -Duuid=e2fs task: @@ -496,7 +495,7 @@ task: -Dextra_include_dirs=${brewpath}/include \ -Dextra_lib_dirs=${brewpath}/lib \ -Dcassert=true \ - -Duuid=e2fs -Ddtrace=auto \ + -Ddtrace=auto \ -Dsegsize_blocks=6 \ -DPG_TEST_EXTRA="$PG_TEST_EXTRA" \ build diff --git a/meson.build b/meson.build index 2ebdf914c1b..7955ae42d03 100644 --- a/meson.build +++ b/meson.build @@ -1282,34 +1282,61 @@ endif ############################################################### uuidopt = get_option('uuid') +uuid_library = 'none' +uuid = not_found_dep +if uuidopt == 'auto' and auto_features.disabled() + uuidopt = 'none' +endif + if uuidopt != 'none' - uuidname = uuidopt.to_upper() - if uuidopt == 'e2fs' - uuid = dependency('uuid', required: true) - uuidfunc = 'uuid_generate' - uuidheader = 'uuid/uuid.h' - elif uuidopt == 'bsd' - # libc should have uuid function - uuid = declare_dependency() - uuidfunc = 'uuid_to_string' - uuidheader = 'uuid.h' - elif uuidopt == 'ossp' - uuid = dependency('ossp-uuid', required: true) - uuidfunc = 'uuid_export' - uuidheader = 'uuid.h' - else - error('huh') - endif - if not cc.has_header_symbol(uuidheader, uuidfunc, args: test_c_args, dependencies: uuid) - error('uuid library @0@ missing required function @1@'.format(uuidopt, uuidfunc)) - endif - cdata.set('HAVE_@0@'.format(uuidheader.underscorify().to_upper()), 1) + uuids = { + 'e2fs': { + 'uuiddep': 'uuid', + 'uuidfunc': 'uuid_generate', + 'uuidheader': 'uuid/uuid.h', + }, + 'bsd': { + 'uuiddep': '', + 'uuidfunc': 'uuid_to_string', + 'uuidheader': 'uuid.h', + }, + 'ossp': { + 'uuiddep': 'ossp-uuid', + 'uuidfunc': 'uuid_export', + 'uuidheader': 'uuid.h', + } + } - cdata.set('HAVE_UUID_@0@'.format(uuidname), 1, - description: 'Define to 1 if you have @0@ UUID support.'.format(uuidname)) -else - uuid = not_found_dep + foreach uuidname, uuid_values : uuids + if uuidopt != 'auto' and uuidname != uuidopt + continue + endif + uuid_required = (uuidname == uuidopt) + uuiddep = uuid_values['uuiddep'] + uuidheader = uuid_values['uuidheader'] + uuidfunc = uuid_values['uuidfunc'] + + # libc should have uuid function + uuid = uuiddep != '' ? dependency(uuiddep, required: uuid_required) : \ + declare_dependency() + + if uuid.found() and cc.has_header_symbol(uuidheader, uuidfunc, args: test_c_args, + dependencies: uuid, required: uuid_required) + uuidname_upper = uuidname.to_upper() + uuid_library = uuidname + cdata.set('HAVE_@0@'.format(uuidheader.underscorify().to_upper()), 1) + cdata.set('HAVE_UUID_@0@'.format(uuidname_upper), 1, + description: 'Define to 1 if you have @0@ UUID support.'.format(uuidname_upper)) + break + else + uuid = not_found_dep + endif + endforeach +endif + +if uuidopt == 'auto' and auto_features.enabled() and not uuid.found() + error('no UUID library found') endif @@ -3302,11 +3329,12 @@ if meson.version().version_compare('>=0.57') 'readline': readline, 'selinux': selinux, 'systemd': systemd, - 'uuid': uuid, + 'uuid': uuid.found() ? [uuid, '(@0@)'.format(uuid_library)] : uuid, 'zlib': zlib, 'zstd': zstd, }, section: 'External libraries', + list_sep: ', ', ) endif diff --git a/meson_options.txt b/meson_options.txt index 4402dd4299d..3ffe6fb758d 100644 --- a/meson_options.txt +++ b/meson_options.txt @@ -137,8 +137,8 @@ option('ssl', type : 'combo', choices : ['auto', 'none', 'openssl'], option('systemd', type : 'feature', value: 'auto', description: 'build with systemd support') -option('uuid', type : 'combo', choices : ['none', 'bsd', 'e2fs', 'ossp'], - value : 'none', +option('uuid', type : 'combo', choices : ['auto', 'none', 'bsd', 'e2fs', 'ossp'], + value : 'auto', description: 'build contrib/uuid-ossp using LIB') option('zlib', type : 'feature', value: 'auto', diff --git a/src/makefiles/meson.build b/src/makefiles/meson.build index 7635771c5ae..25e2a54a6bb 100644 --- a/src/makefiles/meson.build +++ b/src/makefiles/meson.build @@ -67,7 +67,7 @@ pgxs_kv = { # want the chosen option, rather than the library 'with_ssl' : ssl_library, - 'with_uuid': uuidopt, + 'with_uuid': uuid_library, 'default_port': get_option('pgport'), 'with_system_tzdata': get_option('system_tzdata'), -- 2.39.2