1
0
Fork 0
libnvme/libnvme/meson.build
Daniel Baumann 476f38f2bb
Merging upstream version 1.7.1.
Signed-off-by: Daniel Baumann <daniel@debian.org>
2025-02-16 10:16:49 +01:00

82 lines
3.2 KiB
Meson

# SPDX-License-Identifier: LGPL-2.1-or-later
#
# This file is part of libnvme.
# Copyright (c) 2021 Dell Inc.
#
# Authors: Martin Belanger <Martin.Belanger@dell.com>
#
want_python = get_option('python')
if want_python.disabled()
build_python_bindings = false
py3_dep = dependency('', required: false) # Needed for muon
else
python3 = import('python').find_installation('python3')
py3_dep = python3.dependency(required: want_python)
swig = find_program('swig', required: want_python)
header_found = cc.has_header('Python.h', dependencies: py3_dep, required: want_python)
build_python_bindings = py3_dep.found() and swig.found() and header_found
endif
if build_python_bindings
r = run_command(swig, ['-version'], check: true) # Returns: "\nSWIG Version 4.1.1\n\nCompiled with ..."
swig_version = r.stdout().split('\n')[1].split()[2].strip()
if swig_version.version_compare('<4.1.0')
swig_cmd = [swig, '-python', '-py3', '-o', '@OUTPUT1@', '@INPUT0@']
else
swig_cmd = [swig, '-python', '-o', '@OUTPUT1@', '@INPUT0@']
endif
pymod_swig = custom_target(
'nvme.py',
input: ['nvme.i'],
output: ['nvme.py', 'nvme_wrap.c'],
command: swig_cmd,
install: true,
install_dir: [python3.get_install_dir(pure: false, subdir: 'libnvme'), false],
)
pynvme_clib = python3.extension_module(
'_nvme',
pymod_swig[1],
dependencies : [libnvme_dep, py3_dep],
include_directories: [incdir, internal_incdir],
link_with: [libccan],
install: true,
subdir: 'libnvme',
)
# Little hack to copy file __init__.py to the build directory.
# This is needed to create the proper directory layout to run the tests.
# It's a hack because we don't really "configure" file __init__.py and we
# could simply install directly from the source tree with:
# python3.install_sources(['__init__.py', ], pure:false, subdir:'libnvme')
# However, since we need __init__.py in the build directory to run the tests
# we resort to this hack to copy it.
configure_file(
input: '__init__.py',
output: '__init__.py',
configuration: conf,
install_dir: python3.get_install_dir(pure: false, subdir: 'libnvme'),
)
# Set the PYTHONPATH so that we can run the
# tests directly from the build directory.
test_env = environment()
test_env.append('MALLOC_PERTURB_', '0')
test_env.append('PYTHONPATH', join_paths(meson.current_build_dir(), '..'))
test_env.append('PYTHONMALLOC', 'malloc')
# Test section
test('python-import-libnvme', python3, args: ['-c', 'from libnvme import nvme'], env: test_env, depends: pynvme_clib)
py_tests = [
[ 'create-ctrl-object', [ files('tests/create-ctrl-obj.py'), ] ],
[ 'sigsegv-during-gc', [ files('tests/gc.py'), ] ],
[ 'read-nbft-file', [ files('tests/test-nbft.py'), '--filename', join_paths(meson.current_source_dir(), 'tests', 'NBFT') ] ],
]
foreach test: py_tests
description = test[0]
args = test[1]
test('python-' + description, python3, args: args, env: test_env, depends: pynvme_clib)
endforeach
endif