2025-01-29 13:23:29 +02:00
|
|
|
project(
|
|
|
|
'kea',
|
|
|
|
'cpp',
|
|
|
|
version: '2.7.7-git',
|
|
|
|
default_options: ['default_library=shared'],
|
|
|
|
)
|
2024-12-19 13:27:16 +02:00
|
|
|
|
|
|
|
cpp = meson.get_compiler('cpp')
|
2025-01-29 13:23:29 +02:00
|
|
|
project_version = meson.project_version()
|
|
|
|
|
|
|
|
#### Imports
|
2024-12-19 13:27:16 +02:00
|
|
|
|
|
|
|
fs = import('fs')
|
|
|
|
|
2025-01-29 13:23:29 +02:00
|
|
|
#### Variables
|
|
|
|
|
|
|
|
TOP_BUILD_DIR = meson.current_build_dir()
|
|
|
|
TOP_SOURCE_DIR = meson.current_source_dir()
|
|
|
|
KEA_ADMIN = f'@TOP_BUILD_DIR@/src/bin/admin/kea-admin'
|
|
|
|
KEA_LFC = f'@TOP_BUILD_DIR@/src/bin/lfc/kea-lfc'
|
|
|
|
|
|
|
|
#### Configuration Data
|
|
|
|
|
|
|
|
conf_data = configuration_data(
|
|
|
|
{
|
|
|
|
# 'CONFIG_H_WAS_INCLUDED': true,
|
|
|
|
# 'ENABLE_DEBUG': false,
|
|
|
|
# 'ENABLE_LOGGER_CHECKS': false,
|
|
|
|
'EXTENDED_VERSION': f'"@project_version@"',
|
|
|
|
# 'FUZZING': false,
|
|
|
|
# 'FUZZING_IN_CI': false,
|
|
|
|
# 'HAS_UNDEFINED_PTHREAD_BEHAVIOR': false,
|
|
|
|
# 'HAVE_AFL': false,
|
|
|
|
# 'HAVE_BOOST_ASIO_COROUTINE_HPP': false,
|
|
|
|
# 'HAVE_BOOST_ASIO_HPP': false,
|
|
|
|
# 'HAVE_BOOST_ASIO_IP_ADDRESS_HPP': false,
|
|
|
|
# 'HAVE_BOOST_ASIO_SIGNAL_SET_HPP': false,
|
|
|
|
# 'HAVE_BOOST_ASIO_SSL_HPP': false,
|
|
|
|
# 'HAVE_BOOST_ATOMIC_HPP': false,
|
|
|
|
# 'HAVE_BOOST_CIRCULAR_BUFFER_HPP': false,
|
|
|
|
# 'HAVE_BOOST_DATE_TIME_POSIX_TIME_POSIX_TIME_TYPES_HPP': false,
|
|
|
|
# 'HAVE_BOOST_FOREACH_HPP': false,
|
|
|
|
# 'HAVE_BOOST_FUNCTIONAL_HASH_HPP': false,
|
|
|
|
# 'HAVE_BOOST_INTEGER_COMMON_FACTOR_HPP': false,
|
|
|
|
# 'HAVE_BOOST_INTERPROCESS_SYNC_INTERPROCESS_UPGRADABLE_MUTEX_HPP': false,
|
|
|
|
# 'HAVE_BOOST_SHARED_PTR_HPP': false,
|
|
|
|
# 'HAVE_BOOST_SYSTEM_ERROR_CODE_HPP': false,
|
|
|
|
# 'HAVE_BOTAN_ASIO_STREAM_H': false,
|
|
|
|
# 'HAVE_BOTAN_BUILD_H': false,
|
|
|
|
# 'HAVE_BROKEN_GET_IPV': false,
|
|
|
|
# 'HAVE_CREATE_UNIFIED_DIFF': false,
|
|
|
|
# 'HAVE_DLFCN_H': false,
|
|
|
|
# 'HAVE_EVP_MD_CTX_CREATE': false,
|
|
|
|
# 'HAVE_EVP_MD_CTX_DESTROY': false,
|
|
|
|
# 'HAVE_EVP_MD_CTX_FREE': false,
|
|
|
|
# 'HAVE_EVP_MD_CTX_NEW': false,
|
|
|
|
# 'HAVE_EVP_PKEY_NEW_MAC_KEY': false,
|
|
|
|
# 'HAVE_EVP_PKEY_NEW_RAW_PRIVATE_KEY': false,
|
|
|
|
# 'HAVE_GSSAPI_GSSAPI_H': false,
|
|
|
|
# 'HAVE_GSSAPI_GSSAPI_KRB': false,
|
|
|
|
# 'HAVE_GSS_STR_TO_OID': false,
|
|
|
|
# 'HAVE_INTTYPES_H': false,
|
|
|
|
# 'HAVE_IS_BASE_OF': false,
|
|
|
|
# 'HAVE_KRB': false,
|
|
|
|
# 'HAVE_LOG': false,
|
|
|
|
# 'HAVE_MYSQL_GET_OPTION': false,
|
|
|
|
# 'HAVE_MYSQL_OPT_RECONNECT': false,
|
|
|
|
# 'HAVE_NETCONF': false,
|
|
|
|
# 'HAVE_OPTRESET': false,
|
|
|
|
# 'HAVE_PGSQL_SSL': false,
|
|
|
|
# 'HAVE_PGSQL_TCP_USER_TIMEOUT': false,
|
|
|
|
# 'HAVE_PSELECT': false,
|
|
|
|
# 'HAVE_STDBOOL_H': false,
|
|
|
|
# 'HAVE_STDINT_H': false,
|
|
|
|
# 'HAVE_STDIO_H': false,
|
|
|
|
# 'HAVE_STDLIB_H': false,
|
|
|
|
# 'HAVE_STRINGS_H': false,
|
|
|
|
# 'HAVE_STRING_H': false,
|
|
|
|
# 'HAVE_SYS_DEVPOLL_H': false,
|
|
|
|
# 'HAVE_SYS_FILIO_H': false,
|
|
|
|
# 'HAVE_SYS_STAT_H': false,
|
|
|
|
# 'HAVE_SYS_TYPES_H': false,
|
|
|
|
# 'HAVE_TLS_': false,
|
|
|
|
# 'HAVE_UNISTD_H': false,
|
|
|
|
# 'HAVE_UTILS_ERRCODES_H': false,
|
|
|
|
# 'HAVE_VALGRIND_HEADERS': false,
|
|
|
|
# 'HAVE_VALGRIND_VALGRIND_H': false,
|
|
|
|
# 'HAVE__BOOL': false,
|
|
|
|
# 'LIBC_MUSL': false,
|
|
|
|
# 'LOG': false,
|
|
|
|
# 'LT_OBJDIR': false,
|
|
|
|
# 'PACKAGE': 'kea',
|
|
|
|
# 'PACKAGE_BUGREPORT': 'kea-dev@lists.isc.org',
|
|
|
|
# 'PACKAGE_NAME': 'kea',
|
|
|
|
# 'PACKAGE_STRING': f'kea "@project_version@"',
|
|
|
|
# 'PACKAGE_TARNAME': 'kea',
|
|
|
|
# 'PACKAGE_URL': '',
|
|
|
|
# 'PACKAGE_VERSION': meson.project_version(),
|
|
|
|
'PACKAGE_VERSION_TYPE': '"tarball"',
|
|
|
|
# 'PREMIUM': false,
|
|
|
|
'PREMIUM_EXTENDED_VERSION': f'"@project_version@"',
|
|
|
|
# 'STDC_HEADERS': false,
|
|
|
|
# 'TOP_BUILDDIR': false,
|
|
|
|
# 'USE_STATIC_LINK': false,
|
|
|
|
'VERSION': f'"@project_version@"',
|
|
|
|
# 'WITH_HEIMDAL': false,
|
|
|
|
# 'YYTEXT_POINTER': false,
|
|
|
|
# 'SIZE_T': 'size_t',
|
|
|
|
# 'SSIZE_T': 'ssize_t',
|
|
|
|
},
|
|
|
|
)
|
|
|
|
|
|
|
|
#### Dependencies
|
2024-12-19 13:27:16 +02:00
|
|
|
|
|
|
|
boost = dependency('boost', version: '>=1.66')
|
|
|
|
gtest = dependency('gtest', required: false)
|
|
|
|
log4cplus = dependency('log4cplus')
|
2025-01-29 13:23:29 +02:00
|
|
|
|
|
|
|
# Cryptography
|
|
|
|
crypto = disabler()
|
|
|
|
botan = disabler()
|
|
|
|
foreach dep : ['botan-2', 'botan', 'botan-3']
|
|
|
|
botan = dependency(dep, required: false)
|
|
|
|
if botan.found()
|
|
|
|
break
|
|
|
|
endif
|
|
|
|
endforeach
|
|
|
|
openssl = dependency('openssl', required: false)
|
|
|
|
if botan.found() and false # remove "or flase" when botan+mariadb gets fixes
|
|
|
|
crypto = botan
|
|
|
|
conf_data.set('WITH_BOTAN', true)
|
|
|
|
message('Using Botan.')
|
|
|
|
elif openssl.found()
|
|
|
|
crypto = openssl
|
|
|
|
conf_data.set('WITH_OPENSSL', true)
|
|
|
|
message('Using OpenSSL.')
|
|
|
|
endif
|
|
|
|
if not crypto.found()
|
|
|
|
error('Build failed: Could not find neither botan nor openssl libraries.')
|
|
|
|
endif
|
|
|
|
|
|
|
|
# Kerberos
|
2024-12-19 13:27:16 +02:00
|
|
|
krb5 = dependency('krb5', required: false)
|
2025-01-29 13:23:29 +02:00
|
|
|
if not krb5.found()
|
|
|
|
krb5_config = find_program('krb5-config', required: false)
|
|
|
|
cflags = run_command([krb5_config, '--cflags'], check: false)
|
|
|
|
libs = run_command([krb5_config, '--libs'], check: false)
|
|
|
|
if cflags.returncode() == 0 and libs.returncode() == 0
|
|
|
|
krb5 = declare_dependency(
|
|
|
|
compile_args: cflags.stdout().split(),
|
|
|
|
link_args: libs.stdout().split(),
|
|
|
|
)
|
|
|
|
endif
|
2024-12-19 13:27:16 +02:00
|
|
|
endif
|
2025-01-29 13:23:29 +02:00
|
|
|
|
|
|
|
# MySQL
|
|
|
|
mysql = dependency('mariadb', required: false)
|
2024-12-19 13:27:16 +02:00
|
|
|
if not mysql.found()
|
2025-01-29 13:23:29 +02:00
|
|
|
mysql = dependency('mysql', required: false)
|
2024-12-19 13:27:16 +02:00
|
|
|
endif
|
2025-01-29 13:23:29 +02:00
|
|
|
foreach mysql_config : ['mariadb_config', 'mysql_config']
|
|
|
|
if mysql.found()
|
|
|
|
continue
|
|
|
|
endif
|
|
|
|
mysql_config = find_program(mysql_config, required: false)
|
|
|
|
if not mysql_config.found()
|
|
|
|
continue
|
|
|
|
endif
|
|
|
|
cflags = run_command([mysql_config, '--cflags'], check: false)
|
|
|
|
libs = run_command([mysql_config, '--libs'], check: false)
|
|
|
|
if cflags.returncode() == 0 and libs.returncode() == 0
|
|
|
|
mysql = declare_dependency(
|
|
|
|
compile_args: cflags.stdout().split(),
|
|
|
|
link_args: libs.stdout().split(),
|
|
|
|
)
|
|
|
|
break
|
|
|
|
endif
|
|
|
|
endforeach
|
|
|
|
if mysql.found()
|
|
|
|
conf_data.set('HAVE_MYSQL', true)
|
2024-12-19 13:27:16 +02:00
|
|
|
endif
|
2025-01-29 13:23:29 +02:00
|
|
|
|
|
|
|
# PostgreSQL
|
2024-12-19 13:27:16 +02:00
|
|
|
postgresql = dependency('libpq', required: false)
|
2025-01-29 13:23:29 +02:00
|
|
|
if not postgresql.found()
|
|
|
|
pg_config = find_program('pg_config', required: false)
|
|
|
|
cflags = run_command([pg_config, '--cflags'], check: false)
|
|
|
|
libs = run_command([pg_config, '--libs'], check: false)
|
|
|
|
if cflags.returncode() == 0 and libs.returncode() == 0
|
|
|
|
krb5 = declare_dependency(
|
|
|
|
compile_args: cflags.stdout().split(),
|
|
|
|
link_args: libs.stdout().split(),
|
|
|
|
)
|
|
|
|
endif
|
|
|
|
endif
|
|
|
|
postgresql_server_header = disabler()
|
|
|
|
foreach dir : ['/usr/include/pgsql/server', '/usr/include/postgresql/server']
|
|
|
|
if not fs.is_dir(dir)
|
|
|
|
continue
|
|
|
|
endif
|
|
|
|
exists = cpp.has_header(
|
|
|
|
'utils/errcodes.h',
|
|
|
|
include_directories: [include_directories(dir)],
|
|
|
|
required: false,
|
|
|
|
)
|
|
|
|
if exists
|
|
|
|
postgresql_server_header = declare_dependency(include_directories: dir)
|
|
|
|
break
|
|
|
|
endif
|
|
|
|
endforeach
|
|
|
|
if postgresql.found()
|
|
|
|
conf_data.set('HAVE_PGSQL', true)
|
|
|
|
endif
|
2024-12-19 13:27:16 +02:00
|
|
|
|
2025-01-29 13:23:29 +02:00
|
|
|
# NETCONF
|
2024-12-19 13:27:16 +02:00
|
|
|
netconf_deps = {}
|
|
|
|
netconf_deps_array = []
|
|
|
|
netconf_deps_found = true
|
|
|
|
foreach dep : ['yang', 'yang-cpp', 'sysrepo', 'sysrepo-cpp']
|
2025-01-29 13:23:29 +02:00
|
|
|
netconf_deps = netconf_deps + {dep: dependency(dep, required: false)}
|
|
|
|
if not netconf_deps[dep].found()
|
|
|
|
lib = cpp.find_library(dep, dirs: [f'/opt/@dep@/lib'], required: false)
|
|
|
|
if lib.found()
|
|
|
|
netconf_deps = netconf_deps + {
|
|
|
|
dep: declare_dependency(
|
|
|
|
dependencies: lib,
|
|
|
|
include_directories: include_directories(
|
|
|
|
f'/opt/@dep@/include',
|
|
|
|
),
|
|
|
|
),
|
|
|
|
}
|
|
|
|
endif
|
|
|
|
endif
|
|
|
|
if netconf_deps[dep].found()
|
|
|
|
netconf_deps_array += netconf_deps[dep]
|
|
|
|
else
|
|
|
|
netconf_deps_found = false
|
|
|
|
endif
|
2024-12-19 13:27:16 +02:00
|
|
|
endforeach
|
|
|
|
|
2025-01-29 13:23:29 +02:00
|
|
|
#### Compiler Checks
|
2024-12-19 13:27:16 +02:00
|
|
|
|
2025-01-29 13:23:29 +02:00
|
|
|
result = cpp.run(
|
|
|
|
fs.read('compiler-checks/chrono-same-duration.cc'),
|
|
|
|
name: 'CHRONO_SAME_DURATION',
|
|
|
|
dependencies: [boost],
|
|
|
|
)
|
|
|
|
conf_data.set('CHRONO_SAME_DURATION', result.returncode() == 0)
|
|
|
|
|
|
|
|
result = cpp.run(
|
|
|
|
fs.read('compiler-checks/have-generic-tls-method.cc'),
|
|
|
|
name: 'HAVE_GENERIC_TLS_METHOD',
|
|
|
|
dependencies: [crypto],
|
|
|
|
)
|
|
|
|
conf_data.set('HAVE_GENERIC_TLS_METHOD', result.returncode() == 0)
|
|
|
|
|
|
|
|
result = cpp.run(fs.read('compiler-checks/have-sa-len.cc'), name: 'HAVE_SA_LEN')
|
|
|
|
conf_data.set('HAVE_SA_LEN', result.returncode() == 0)
|
2024-12-19 13:27:16 +02:00
|
|
|
|
|
|
|
if mysql.found()
|
2025-01-29 13:23:29 +02:00
|
|
|
result = cpp.run(
|
|
|
|
fs.read('compiler-checks/mysql-my-bool.cc'),
|
|
|
|
name: 'HAVE_MYSQL_MY_BOOL',
|
|
|
|
dependencies: [mysql],
|
|
|
|
)
|
|
|
|
conf_data.set('HAVE_MYSQL_MY_BOOL', result.returncode() == 0)
|
2024-12-19 13:27:16 +02:00
|
|
|
endif
|
|
|
|
|
2025-01-29 13:23:29 +02:00
|
|
|
result = cpp.run(
|
|
|
|
fs.read('compiler-checks/stream-truncated-error.cc'),
|
|
|
|
name: 'HAVE_STREAM_TRUNCATED_ERROR',
|
|
|
|
dependencies: [crypto],
|
|
|
|
)
|
|
|
|
conf_data.set('HAVE_STREAM_TRUNCATED_ERROR', result.returncode() == 0)
|
|
|
|
|
|
|
|
#### System-specific Variables
|
|
|
|
|
|
|
|
SYSTEM = build_machine.system()
|
|
|
|
if SYSTEM == 'linux'
|
|
|
|
conf_data.set('OS_LINUX', true)
|
|
|
|
elif SYSTEM == 'freebsd'
|
|
|
|
conf_data.set('OS_BSD', true)
|
|
|
|
conf_data.set('OS_FREEBSD', true)
|
|
|
|
elif SYSTEM == 'netbsd'
|
|
|
|
conf_data.set('OS_BSD', true)
|
|
|
|
conf_data.set('OS_NETBSD', true)
|
|
|
|
elif SYSTEM == 'openbsd'
|
|
|
|
conf_data.set('OS_BSD', true)
|
|
|
|
conf_data.set('OS_OPENBSD', true)
|
|
|
|
elif SYSTEM == 'sun'
|
|
|
|
conf_data.set('OS_SOLARIS', true)
|
|
|
|
elif SYSTEM == 'darwin'
|
|
|
|
conf_data.set('OS_BSD', true)
|
|
|
|
conf_data.set('OS_OSX', true)
|
2024-12-19 13:27:16 +02:00
|
|
|
else
|
2025-01-29 13:23:29 +02:00
|
|
|
error(f'Build failed: Unsupported system "@SYSTEM@".')
|
2024-12-19 13:27:16 +02:00
|
|
|
endif
|
2025-01-29 13:23:29 +02:00
|
|
|
message(f'Detected system "@SYSTEM@".')
|
|
|
|
|
|
|
|
#### System-specific Compiler Flags
|
2024-12-19 13:27:16 +02:00
|
|
|
|
|
|
|
prefix = get_option('prefix')
|
2025-01-29 13:23:29 +02:00
|
|
|
if SYSTEM == 'darwin'
|
|
|
|
add_project_arguments('-D__APPLE_USE_RFC_3542', language: 'cpp')
|
|
|
|
add_project_link_arguments(f'-Wl,-rpath,@prefix@/lib', language: 'cpp')
|
2024-12-19 13:27:16 +02:00
|
|
|
else
|
2025-01-29 13:23:29 +02:00
|
|
|
add_project_link_arguments(f'-Wl,-rpath=@prefix@/lib', language: 'cpp')
|
2024-12-19 13:27:16 +02:00
|
|
|
endif
|
|
|
|
|
2025-01-29 13:23:29 +02:00
|
|
|
have_premium = fs.is_dir('premium')
|
|
|
|
if have_premium
|
|
|
|
conf_data.set('PREMIUM', true)
|
2024-12-19 13:27:16 +02:00
|
|
|
endif
|
|
|
|
|
2025-01-29 13:23:29 +02:00
|
|
|
#### Configuration Files
|
|
|
|
|
|
|
|
# TODO: Change to config.h.in when autotools are removed.
|
|
|
|
configure_file(
|
|
|
|
input: 'meson-config.h.in',
|
|
|
|
output: 'config.h',
|
|
|
|
configuration: conf_data,
|
|
|
|
)
|
|
|
|
|
|
|
|
# TODO: Change to kea_version.h.in when autotools are removed.
|
|
|
|
configure_file(
|
|
|
|
input: 'meson-kea_version.h.in',
|
|
|
|
output: 'kea_version.h',
|
|
|
|
configuration: conf_data,
|
|
|
|
)
|
2024-12-19 13:27:16 +02:00
|
|
|
|
2025-01-29 13:23:29 +02:00
|
|
|
#### Default Includes
|
2024-12-19 13:27:16 +02:00
|
|
|
|
2025-01-29 13:23:29 +02:00
|
|
|
INCLUDES = [
|
|
|
|
include_directories('.'),
|
|
|
|
include_directories('src/bin'),
|
|
|
|
include_directories('src/lib'),
|
2024-12-19 13:27:16 +02:00
|
|
|
]
|
|
|
|
|
2025-01-29 13:23:29 +02:00
|
|
|
#### Build Starts Here
|
2024-12-19 13:27:16 +02:00
|
|
|
|
2025-01-29 13:23:29 +02:00
|
|
|
LIBS_BUILT_SO_FAR = []
|
2024-12-19 13:27:16 +02:00
|
|
|
subdir('src')
|
|
|
|
if have_premium
|
2025-01-29 13:23:29 +02:00
|
|
|
subdir('premium')
|
2024-12-19 13:27:16 +02:00
|
|
|
endif
|