You've already forked cpp-httplib
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 ea850cbfa7
.
133 lines
3.8 KiB
Meson
133 lines
3.8 KiB
Meson
# SPDX-FileCopyrightText: 2021 Andrea Pappacoda
|
|
#
|
|
# SPDX-License-Identifier: MIT
|
|
|
|
project(
|
|
'cpp-httplib',
|
|
'cpp',
|
|
license: 'MIT',
|
|
default_options: [
|
|
'cpp_std=c++11',
|
|
'buildtype=release',
|
|
'b_ndebug=if-release',
|
|
'b_lto=true',
|
|
'warning_level=3'
|
|
],
|
|
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'
|
|
version = cxx.get_define('CPPHTTPLIB_VERSION',
|
|
prefix: '#include <httplib.h>',
|
|
include_directories: include_directories('.')).strip('"')
|
|
assert(version != '', 'failed to get version from httplib.h')
|
|
endif
|
|
|
|
deps = [dependency('threads')]
|
|
args = []
|
|
|
|
openssl_dep = dependency('openssl', version: '>=3.0.0', required: get_option('cpp-httplib_openssl'))
|
|
if openssl_dep.found()
|
|
deps += openssl_dep
|
|
args += '-DCPPHTTPLIB_OPENSSL_SUPPORT'
|
|
if host_machine.system() == 'darwin'
|
|
macosx_keychain_dep = dependency('appleframeworks', modules: ['CoreFoundation', 'Security'], required: get_option('cpp-httplib_macosx_keychain'))
|
|
if macosx_keychain_dep.found()
|
|
deps += macosx_keychain_dep
|
|
args += '-DCPPHTTPLIB_USE_CERTS_FROM_MACOSX_KEYCHAIN'
|
|
endif
|
|
endif
|
|
endif
|
|
|
|
zlib_dep = dependency('zlib', required: get_option('cpp-httplib_zlib'))
|
|
if zlib_dep.found()
|
|
deps += zlib_dep
|
|
args += '-DCPPHTTPLIB_ZLIB_SUPPORT'
|
|
endif
|
|
|
|
brotli_deps = [dependency('libbrotlicommon', required: get_option('cpp-httplib_brotli'))]
|
|
brotli_deps += dependency('libbrotlidec', required: get_option('cpp-httplib_brotli'))
|
|
brotli_deps += dependency('libbrotlienc', required: get_option('cpp-httplib_brotli'))
|
|
|
|
brotli_found_all = true
|
|
foreach brotli_dep : brotli_deps
|
|
if not brotli_dep.found()
|
|
brotli_found_all = false
|
|
endif
|
|
endforeach
|
|
|
|
if brotli_found_all
|
|
deps += brotli_deps
|
|
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')
|
|
python3 = find_program('python3')
|
|
|
|
httplib_ch = custom_target(
|
|
'split',
|
|
input: 'httplib.h',
|
|
output: ['httplib.cc', 'httplib.h'],
|
|
command: [python3, files('split.py'), '--out', meson.current_build_dir()],
|
|
install: true,
|
|
install_dir: [false, get_option('includedir')]
|
|
)
|
|
lib = library(
|
|
'cpp-httplib',
|
|
sources: httplib_ch,
|
|
dependencies: deps,
|
|
cpp_args: args,
|
|
version: version,
|
|
soversion: version.split('.')[0] + '.' + version.split('.')[1],
|
|
install: true
|
|
)
|
|
cpp_httplib_dep = declare_dependency(compile_args: args, dependencies: deps, link_with: lib, sources: httplib_ch[1], version: version)
|
|
|
|
import('pkgconfig').generate(
|
|
lib,
|
|
description: 'A C++ HTTP/HTTPS server and client library',
|
|
extra_cflags: args,
|
|
url: 'https://github.com/yhirose/cpp-httplib',
|
|
version: version
|
|
)
|
|
else
|
|
install_headers('httplib.h')
|
|
cpp_httplib_dep = declare_dependency(compile_args: args, dependencies: deps, include_directories: '.', version: version)
|
|
|
|
import('pkgconfig').generate(
|
|
name: 'cpp-httplib',
|
|
description: 'A C++ HTTP/HTTPS server and client library',
|
|
install_dir: get_option('datadir')/'pkgconfig',
|
|
url: 'https://github.com/yhirose/cpp-httplib',
|
|
version: version
|
|
)
|
|
endif
|
|
|
|
meson.override_dependency('cpp-httplib', cpp_httplib_dep)
|
|
|
|
if get_option('cpp-httplib_test')
|
|
subdir('test')
|
|
endif
|