From af7a69bcf631e29fa2be7edfe8f9a13b554844d3 Mon Sep 17 00:00:00 2001 From: Andrea Pappacoda Date: Tue, 8 Jul 2025 03:20:29 +0200 Subject: [PATCH] build(meson): add non_blocking_getaddrinfo option (#2174) This new option automatically enables the new non-blocking name resolution when the appropriate libraries are found, automatically adding them to the list of required dependencies. It will gracefully fall back to the old behaviour when no library is found. This complements commit ea850cbfa74e2dff228c49bf94542ce5331d73b5. --- meson.build | 18 +++++++++++++++++- meson_options.txt | 1 + 2 files changed, 18 insertions(+), 1 deletion(-) diff --git a/meson.build b/meson.build index ae8ca31..28af5a2 100644 --- a/meson.build +++ b/meson.build @@ -16,11 +16,12 @@ project( meson_version: '>=0.62.0' ) +cxx = meson.get_compiler('cpp') + # Check just in case downstream decides to edit the source # and add a project version version = meson.project_version() if version == 'undefined' - cxx = meson.get_compiler('cpp') version = cxx.get_define('CPPHTTPLIB_VERSION', prefix: '#include ', include_directories: include_directories('.')).strip('"') @@ -65,6 +66,21 @@ if brotli_found_all args += '-DCPPHTTPLIB_BROTLI_SUPPORT' endif +async_ns_opt = get_option('cpp-httplib_non_blocking_getaddrinfo') + +if host_machine.system() == 'windows' + async_ns_dep = cxx.find_library('ws2_32', required: async_ns_opt) +elif host_machine.system() == 'darwin' + async_ns_dep = dependency('appleframeworks', modules: ['CFNetwork'], required: async_ns_opt) +else + async_ns_dep = cxx.find_library('anl', required: async_ns_opt) +endif + +if async_ns_dep.found() + deps += async_ns_dep + args += '-DCPPHTTPLIB_USE_NON_BLOCKING_GETADDRINFO' +endif + cpp_httplib_dep = dependency('', required: false) if get_option('cpp-httplib_compile') diff --git a/meson_options.txt b/meson_options.txt index e15847d..cdb5522 100644 --- a/meson_options.txt +++ b/meson_options.txt @@ -6,5 +6,6 @@ option('cpp-httplib_openssl', type: 'feature', value: 'auto', description: 'Enab option('cpp-httplib_zlib', type: 'feature', value: 'auto', description: 'Enable zlib support') option('cpp-httplib_brotli', type: 'feature', value: 'auto', description: 'Enable Brotli support') option('cpp-httplib_macosx_keychain', type: 'feature', value: 'auto', description: 'Enable loading certs from the Keychain on Apple devices') +option('cpp-httplib_non_blocking_getaddrinfo', type: 'feature', value: 'auto', description: 'Enable asynchronous name lookup') option('cpp-httplib_compile', type: 'boolean', value: false, description: 'Split the header into a compilable header & source file (requires python3)') option('cpp-httplib_test', type: 'boolean', value: false, description: 'Build tests')