From 2efdec3f9ae57004612717c1cb1af926909dddb7 Mon Sep 17 00:00:00 2001 From: Andres Freund Date: Mon, 8 Jul 2024 16:12:39 -0700 Subject: [PATCH v2 03/10] meson: Add support for detecting gss without pkg-config This is required as MIT Kerberos does provide neither pkg-config nor cmake dependency information on windows. Author: Reviewed-by: Discussion: https://postgr.es/m/ Backpatch: --- meson.build | 45 +++++++++++++++++++++++++++++++++++++++------ 1 file changed, 39 insertions(+), 6 deletions(-) diff --git a/meson.build b/meson.build index f1912d83ce6..9a54b6ea01b 100644 --- a/meson.build +++ b/meson.build @@ -614,18 +614,51 @@ gssapiopt = get_option('gssapi') krb_srvtab = '' have_gssapi = false if not gssapiopt.disabled() - gssapi = dependency('krb5-gssapi', required: gssapiopt) + gssapi = dependency('krb5-gssapi', required: false) have_gssapi = gssapi.found() + if have_gssapi + gssapi_deps = [gssapi] + elif not have_gssapi + # Hardcoded lookup for gssapi. This is necessary as gssapi on windows does + # not install neither pkg-config nor cmake dependency information. + if host_system == 'windows' + is_64 = cc.sizeof('void *', args: test_c_args) == 8 + if is_64 + gssapi_search_libs = ['gssapi64', 'krb5_64', 'comerr64'] + else + gssapi_search_libs = ['gssapi32', 'krb5_32', 'comerr32'] + endif + else + gssapi_search_libs = ['gssapi_krb5'] + endif + + gssapi_deps = [] + foreach libname : gssapi_search_libs + lib = cc.find_library(libname, dirs: test_lib_d, required: false) + if lib.found() + have_gssapi = true + gssapi_deps += lib + endif + endforeach + + if have_gssapi + # Meson before 0.57.0 did not support using check_header() etc with + # declare_dependency(). Thus the tests below use the library looked up + # above. Once we require a newer meson version, we can simplify. + gssapi = declare_dependency(dependencies: gssapi_deps) + endif + endif + if not have_gssapi - elif cc.check_header('gssapi/gssapi.h', dependencies: gssapi, required: false, + elif cc.check_header('gssapi/gssapi.h', dependencies: gssapi_deps, required: false, args: test_c_args, include_directories: postgres_inc) - cc.has_header('gssapi/gssapi_ext.h', dependencies: gssapi, required: true, + cc.has_header('gssapi/gssapi_ext.h', dependencies: gssapi_deps, required: true, args: test_c_args, include_directories: postgres_inc) cdata.set('HAVE_GSSAPI_GSSAPI_H', 1) - elif cc.check_header('gssapi.h', dependencies: gssapi, required: gssapiopt, + elif cc.check_header('gssapi.h', dependencies: gssapi_deps, required: gssapiopt, args: test_c_args, include_directories: postgres_inc) - cc.has_header('gssapi_ext.h', dependencies: gssapi, required: true, + cc.has_header('gssapi_ext.h', dependencies: gssapi_deps, required: true, args: test_c_args, include_directories: postgres_inc) cdata.set('HAVE_GSSAPI_H', 1) else @@ -633,7 +666,7 @@ if not gssapiopt.disabled() endif if not have_gssapi - elif cc.has_function('gss_store_cred_into', dependencies: gssapi, + elif cc.has_function('gss_store_cred_into', dependencies: gssapi_deps, args: test_c_args, include_directories: postgres_inc) cdata.set('ENABLE_GSS', 1) -- 2.44.0.279.g3bd955d269