From 068a45420f2c98887e220b45e946cc7074da550e Mon Sep 17 00:00:00 2001 From: Daniel Baumann Date: Wed, 10 Apr 2024 21:22:29 +0200 Subject: Adding upstream version 1.8. Signed-off-by: Daniel Baumann --- meson.build | 309 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 309 insertions(+) create mode 100644 meson.build (limited to 'meson.build') diff --git a/meson.build b/meson.build new file mode 100644 index 0000000..5d48278 --- /dev/null +++ b/meson.build @@ -0,0 +1,309 @@ +# SPDX-License-Identifier: LGPL-2.1-or-later +# +# This file is part of libnvme. +# Copyright (c) 2021 Dell Inc. +# +# Authors: Martin Belanger +# +project( + 'libnvme', ['c'], + meson_version: '>= 0.50.0', + version: '1.8', + license: 'LGPL-2.1-or-later', + default_options: [ + 'c_std=gnu99', + 'warning_level=1', + 'buildtype=debug', + 'prefix=/usr/local', + 'sysconfdir=etc', + 'wrap_mode=nofallback' + ] +) + +vstr = meson.project_version().split('-rc')[0] +vid = vstr.split('.') +library_version = '.'.join([vid[0], vid[1]]) +if vid.length() == 3 + library_version = '.'.join([library_version, vid[2]]) +else + library_version = library_version + '.0' +endif + +################################################################################ +cc = meson.get_compiler('c') +cxx_available = add_languages('cpp', required: false) + +prefixdir = get_option('prefix') +libdir = join_paths(prefixdir, get_option('libdir')) +includedir = join_paths(prefixdir, get_option('includedir')) +datadir = join_paths(prefixdir, get_option('datadir')) +mandir = join_paths(prefixdir, get_option('mandir')) +bindir = join_paths(prefixdir, get_option('bindir')) +sysconfdir = join_paths(prefixdir, get_option('sysconfdir')) + +################################################################################ +conf = configuration_data() + +version_tag = get_option('version-tag') +if version_tag != '' + conf.set('GIT_VERSION', '"@0@"'.format(version_tag)) +else + r = run_command('scripts/meson-vcs-tag.sh', + meson.current_source_dir(), + meson.project_version(), + check: true) + conf.set('GIT_VERSION', '"@0@"'.format(r.stdout().strip())) +endif +conf.set('PROJECT_VERSION', '"@0@"'.format(meson.project_version())) + +conf.set('SYSCONFDIR', '"@0@"'.format(sysconfdir)) + +if get_option('json-c').disabled() + json_c_dep = dependency('', required: false) +else + json_c_dep = dependency('json-c', + version: '>=0.13', + required: get_option('json-c'), + fallback : ['json-c', 'json_c_dep']) +endif +conf.set('CONFIG_JSONC', json_c_dep.found(), description: 'Is json-c required?') + +if get_option('openssl').disabled() + openssl_dep = dependency('', required: false) +else + openssl_dep = dependency('openssl', + version: '>=1.1.0', + required: get_option('openssl'), + fallback : ['openssl', 'libssl_dep']) + + if openssl_dep.found() + if openssl_dep.version().version_compare('<2.0.0') + api_version = 1 + endif + + if openssl_dep.version().version_compare('>=3.0.0') + api_version = 3 + endif + + # Test for LibreSSL v3.x with incomplete OpenSSL v3 APIs + if openssl_dep.type_name() != 'internal' + is_libressl = cc.has_header_symbol('openssl/opensslv.h', + 'LIBRESSL_VERSION_NUMBER', + dependencies: openssl_dep) + has_header = cc.has_header('openssl/core_names.h', + dependencies: openssl_dep) + if is_libressl and not has_header + api_version = 1 + endif + endif + + conf.set('CONFIG_OPENSSL_@0@'.format(api_version), true, + description: 'OpenSSL/LibreSSL API version @0@'.format(api_version)) + endif +endif + +conf.set('CONFIG_OPENSSL', openssl_dep.found(), + description: 'Is OpenSSL/LibreSSL available?') + +if get_option('keyutils').disabled() + keyutils_dep = dependency('', required: false) +else + keyutils_dep = dependency('libkeyutils', + required : get_option('keyutils')) +endif +conf.set('CONFIG_KEYUTILS', keyutils_dep.found(), + description: 'Is libkeyutils available?') + +if get_option('libdbus').disabled() + libdbus_dep = dependency('', required: false) +else + # Check for libdus availability. Optional, only required for MCTP dbus scan + libdbus_dep = dependency( + 'dbus-1', + required: true, + fallback: ['dbus', 'libdbus_dep'], + default_options: [ + 'default_library=static', + 'embedded_tests=false', + 'message_bus=false', + 'modular_tests=disabled', + 'tools=false', + ], + ) +endif + +conf.set('CONFIG_DBUS', libdbus_dep.found(), description: 'Enable dbus support?') + +# local (cross-compilable) implementations of ccan configure steps +conf.set10( + 'HAVE_BUILTIN_TYPES_COMPATIBLE_P', + cc.compiles( + '''int main(void) { + return __builtin_types_compatible_p(int, long); + } + ''', + name: '__builtin_type_compatible_p' + ), + description: 'Is __builtin_types_compatible_p available?' +) +conf.set10( + 'HAVE_TYPEOF', + cc.compiles( + '''int main(void) { + int a = 1; + typeof(a) b; + b = a; + } + ''', + name: 'typeof' + ), + description: 'Is typeof available?' +) +conf.set10( + 'HAVE_BYTESWAP_H', + cc.compiles( + '''#include ''', + name: 'byteswap.h' + ), + description: 'Is byteswap.h include-able?' +) +conf.set10( + 'HAVE_BSWAP_64', + cc.links( + '''#include + int main(void) { + return bswap_64(0); + } + ''', + name: 'bswap64' + ), + description: 'Is bswap_64 available?' +) +conf.set10( + 'HAVE_LITTLE_ENDIAN', + host_machine.endian() == 'little', + description: 'Building for little-endian' +) +conf.set10( + 'HAVE_BIG_ENDIAN', + host_machine.endian() == 'big', + description: 'Building for big-endian' +) +conf.set10( + 'HAVE_STATEMENT_EXPR', + cc.compiles( + '''int main(int argc, char **argv) { + return ({ int x = argc; x == 1; }); + } + ''', + name: 'statement-expr' + ), + description: 'Can we use a statement as an expression?' +) +conf.set10( + 'HAVE_ISBLANK', + cc.links( + '''#include + int main(int argc, char **argv) { + return isblank(argv[0][0]); + } + ''', + name: 'isblank' + ), + description: 'Is isblank() available?' +) +conf.set10( + 'HAVE_LINUX_MCTP_H', + cc.compiles( + '''#include ''', + name: 'linux/mctp.h' + ), + description: 'Is linux/mctp.h include-able?' +) + +conf.set( + 'HAVE_NETDB', + cc.links( + '''#include + #include + #include + int main(int argc, char **argv) { + struct addrinfo hints, *result; + return getaddrinfo(argv[1], argv[2], &hints, &result); + } + ''', + name: 'netdb', + ), + description: 'Is network address and service translation available' +) +conf.set( + 'HAVE_GLIBC_IOCTL', + cc.compiles( + '''#include + int ioctl(int fd, unsigned long request, ...); + ''', + name: 'ioctl has glibc-style prototype' + ), + description: 'Is ioctl the glibc interface (rather than POSIX)' +) + +if cc.has_function_attribute('fallthrough') + conf.set('fallthrough', '__attribute__((__fallthrough__))') +else + conf.set('fallthrough', 'do {} while (0) /* fallthrough */') +endif + +################################################################################ +substs = configuration_data() +substs.set('NAME', meson.project_name()) +substs.set('VERSION', meson.project_version()) +substs.set('LICENSE', meson.project_license()[0]) +configure_file( + input: 'libnvme.spec.in', + output: 'libnvme.spec', + configuration: substs, +) + +################################################################################ +add_project_arguments( + [ + '-fomit-frame-pointer', + '-D_GNU_SOURCE', + ], + language : 'c', +) +incdir = include_directories(['.', 'ccan', 'src']) + +################################################################################ +subdir('internal') +subdir('ccan') +subdir('src') +subdir('libnvme') +if get_option('tests') + subdir('test') +endif +subdir('examples') +subdir('doc') + +################################################################################ +if meson.version().version_compare('>=0.53.0') + path_dict = { + 'prefixdir': prefixdir, + 'sysconfdir': sysconfdir, + 'bindir': bindir, + 'includedir': includedir, + 'datadir': datadir, + 'mandir': mandir, + 'libdir': libdir, + 'build location': meson.current_build_dir(), + } + summary(path_dict, section: 'Paths') + dep_dict = { + 'json-c': json_c_dep.found(), + 'OpenSSL': openssl_dep.found(), + 'keyutitls': keyutils_dep.found(), + 'libdbus': libdbus_dep.found(), + 'Python 3': py3_dep.found(), + } + summary(dep_dict, section: 'Dependencies') +endif -- cgit v1.2.3