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)

Reply via email to