From 0d94e30facc9e1bbd489afa563fd57c9ed002bba Mon Sep 17 00:00:00 2001 From: Nazir Bilal Yavuz Date: Mon, 13 Feb 2023 15:22:05 +0300 Subject: [PATCH v1 2/2] meson: Refactor UUID option --- .cirrus.yml | 5 ++-- meson.build | 60 ++++++++++++++++++++++++++++++----------------- meson_options.txt | 4 ++-- 3 files changed, 43 insertions(+), 26 deletions(-) diff --git a/.cirrus.yml b/.cirrus.yml index aaf4066366..d696d5dc48 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 563589ac48..26f48a4c12 100644 --- a/meson.build +++ b/meson.build @@ -1259,31 +1259,49 @@ endif uuidopt = get_option('uuid') 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 = 'ossp/uuid.h' - else - error('huh') - endif - if not cc.has_header_symbol(uuidheader, uuidfunc, args: test_c_args, dependencies: uuid) + uuidtypes = { + 'e2fs': { + 'uuiddep': 'uuid', + 'uuidfunc': 'uuid_generate', + 'uuidheader': 'uuid/uuid.h', + }, + 'bsd': { + # libc should have uuid function + 'uuiddep': '', + 'uuidfunc': 'uuid_to_string', + 'uuidheader': 'uuid.h', + }, + 'ossp': { + 'uuiddep':'ossp-uuid', + 'uuidfunc': 'uuid_export', + 'uuidheader': 'ossp/uuid.h', + }, + } + + uuidfound = false + foreach uuidname, uuidelements : uuidtypes + if uuidopt == 'auto' or uuidopt == uuidname + uuiddep = uuidelements['uuiddep'] + uuid = uuiddep != '' ? dependency(uuiddep, required: false) : declare_dependency() + uuidfunc = uuidelements['uuidfunc'] + uuidheader = uuidelements['uuidheader'] + + if cc.has_header_symbol(uuidheader, uuidfunc, args: test_c_args, dependencies: uuid) + uuidfound = true + uuidname = uuidname.to_upper() + cdata.set('HAVE_@0@'.format(uuidheader.underscorify().to_upper()), 1) + cdata.set('HAVE_UUID_@0@'.format(uuidname), 1, + description: 'Define to 1 if you have @0@ UUID support.'.format(uuidname)) + break + endif + endif + endforeach + + if not uuidfound and uuidopt != 'auto' error('uuid library @0@ missing required function @1@'.format(uuidopt, uuidfunc)) endif - cdata.set('HAVE_@0@'.format(uuidheader.underscorify().to_upper()), 1) - 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 endif diff --git a/meson_options.txt b/meson_options.txt index 9c74cc6512..9b7768a8e2 100644 --- a/meson_options.txt +++ b/meson_options.txt @@ -133,8 +133,8 @@ option('ssl', type : 'feature', value : 'auto', 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', -- 2.25.1