Hello,
thank you for the patches.
I have not gotten around applying the patches that look fine yet, but I
can already tell that this problem needs to be fixed in other ways.
There is a reason the GNUTLS check cannot be done in the preprocessor:
THe define will always be there, it needs to be checked _at runtime_
against which TLS backend curl is linked.
Now, some OSes have a libcurl-gnutls (I think debian does), but not all
of them. Some link libcurl against gnutls.
So this patch will also not work as expected.
I also do not understand how moving the runtime check to the
preprocessor is any different in a cross-compile scenario. If your
environment is cross-compiling, the runtime check should work as
expected.
I do understand the problem, and maybe we can simply have a runtime
check in the binaries.
BR
Martin
On Fri, 2025-10-10 at 02:13 +0100, Daniel Golle wrote:
> Instead of only checking if cURL is built against gnuTLS, also test
> of
> there is a dedicated libcurl-gnutls library and favor using it.
> ---
> meson.build | 67 +++++++++++++++++++++++++++++++++++++++++----------
> --
> 1 file changed, 52 insertions(+), 15 deletions(-)
>
> diff --git a/meson.build b/meson.build
> index 7f7856b03..3ee4dd890 100644
> --- a/meson.build
> +++ b/meson.build
> @@ -189,10 +189,17 @@ if not sqlite_dep.found()
> error('Sqlite version >= 3.35.0 requried')
> endif
> endif
> -curl_dep = dependency('libcurl', version: '>=7.85.0', required:
> false)
> -if not curl_dep.found()
> - curl_dep = cc.find_library('curl', required: true)
> - curl_version_check = '''#include <curl/curl.h>
> +
> +curl_gnutls_dep = dependency(
> + 'libcurl-gnutls',
> + version: '>=7.85.0',
> + required: false,
> +)
> +if not curl_gnutls_dep.found()
> + curl_gnutls_dep = cc.find_library('curl-gnutls', required:
> false)
> +endif
> +
> +curl_version_check = '''#include <curl/curl.h>
> int main(int argc, char **argv) {
> #if LIBCURL_VERSION_NUM < 0x075500
> #error "cURL version >= 7.85.0 required"
> @@ -200,12 +207,34 @@ if not curl_dep.found()
> return 0;
> }
> '''
> - if not cc.compiles(
> - curl_version_check,
> - name: 'cURL version check',
> - dependencies: curl_dep,
> - )
> - error('cURL version >=7.85.0 required')
> +
> +# If libcurl-gnutls found, use it and we know it has gnutls support
> +curl_is_gnutls = false
> +if curl_gnutls_dep.found()
> + curl_dep = curl_gnutls_dep
> + curl_is_gnutls = true
> + # Check version for libcurl-gnutls if it was found via
> find_library
> + if curl_gnutls_dep.type_name() != 'pkgconfig'
> + if not cc.compiles(
> + curl_version_check,
> + name: 'cURL-gnutls version check',
> + dependencies: curl_dep,
> + )
> + error('libcurl-gnutls version >=7.85.0 required')
> + endif
> + endif
> +else
> + # Fall back to regular libcurl
> + curl_dep = dependency('libcurl', version: '>=7.85.0', required:
> false)
> + if not curl_dep.found()
> + curl_dep = cc.find_library('curl', required: true)
> + if not cc.compiles(
> + curl_version_check,
> + name: 'cURL version check',
> + dependencies: curl_dep,
> + )
> + error('cURL version >=7.85.0 required')
> + endif
> endif
> endif
> zlib_dep = dependency('zlib', required: false)
> @@ -487,11 +516,19 @@ curl_ssl_check = '''#include <curl/curl.h>
> }
> '''
>
> -curl_gnutls_available = cc.compiles(
> - curl_ssl_check,
> - name: 'cURL gnutls check',
> - dependencies: curl_dep,
> -)
> +# Check if we found libcurl-gnutls (has gnutls support by
> definition)
> +curl_gnutls_available = false
> +if curl_is_gnutls
> + curl_gnutls_available = true
> +else
> + # Fall back to compile-time check for regular libcurl with
> gnutls support
> + curl_gnutls_available = cc.compiles(
> + curl_ssl_check,
> + name: 'cURL gnutls check',
> + dependencies: curl_dep,
> + )
> +endif
> +
> private_config.set('curl_gnutls', 0)
> if curl_gnutls_available
> private_config.set('curl_gnutls', 1)