build: use project-local build and source directories

I think it should be possible to embed libratbag as a meson subproject
now (not tested).
This commit is contained in:
Yaroslav Chvanov
2023-03-02 13:58:21 +03:00
parent a00531fe8b
commit 1d24aa71d3
2 changed files with 31 additions and 21 deletions

View File

@@ -5,11 +5,11 @@ cmd_sphinx = find_program('sphinx-build-3', 'sphinx-build3', 'sphinx-build')
doc_config = configuration_data()
doc_config.set('PACKAGE_NAME', meson.project_name())
doc_config.set('PACKAGE_VERSION', meson.project_version())
doc_config.set('top_srcdir', meson.source_root())
doc_config.set('top_srcdir', project_source_root)
# Sphinx really really wants a _static directory in its source tree. Let's
# make it happy
run_command('mkdir', '-p', join_paths(meson.build_root(), 'doc', '_static'))
run_command('mkdir', '-p', join_paths(project_build_root, 'doc', '_static'))
# Effectively a noop copy. We *must* generate enums.rst so that will end up
# in the build directory. sphinx doesn't allow for multiple source
@@ -34,8 +34,8 @@ custom_target('sphinx',
input : [ sphinx_conf, dst_rsts ],
output : 'html',
command : [ cmd_sphinx, '-b', 'html', '-q', '-n',
join_paths(meson.build_root(), 'doc'),
join_paths(meson.build_root(), 'doc', 'html') ],
join_paths(project_build_root, 'doc'),
join_paths(project_build_root, 'doc', 'html') ],
build_by_default : true,
install : false)

View File

@@ -4,6 +4,16 @@ project('libratbag', 'c',
default_options : [ 'c_std=gnu99', 'warning_level=2' ],
meson_version : '>= 0.50.0')
# TODO: remove this once we bump meson version.
if meson.version().version_compare('>=0.56')
project_build_root = meson.project_build_root()
project_source_root = meson.project_source_root()
else
project_build_root = meson.build_root()
project_source_root = meson.source_root()
message('Embedding libratbag source will not work because an older version of meson is used')
endif
# The DBus API version. Increase this every time the DBus API changes.
# No backwards/forwards guarantee, clients are expected to understand
# whatever ratbagd speaks or bail out. This should be removed if we ever
@@ -45,7 +55,7 @@ config_h.set('RATBAGD_API_VERSION', ratbagd_api_version)
libratbag_data_dir = join_paths(get_option('prefix'),
get_option('datadir'),
'libratbag')
libratbag_data_dir_devel = join_paths(meson.source_root(), 'data', 'devices')
libratbag_data_dir_devel = join_paths(project_source_root, 'data', 'devices')
config_h.set_quoted('LIBRATBAG_DATA_DIR', libratbag_data_dir)
# Coverity breaks because it doesn't define _Float128 correctly, you'll end
@@ -302,13 +312,13 @@ install_subdir('data/devices',
exclude_files : ['device.example', 'README.md'],
install_dir : join_paths(get_option('datadir'), 'libratbag'))
data_parse_test = find_program(join_paths(meson.source_root(), 'test/data-parse-test.py'))
data_parse_test = find_program(join_paths(project_source_root, 'test/data-parse-test.py'))
test('data-parse-test', data_parse_test, args: libratbag_data_dir_devel)
duplicate_test = find_program(join_paths(meson.source_root(), 'test/duplicate-check.py'))
duplicate_test = find_program(join_paths(project_source_root, 'test/duplicate-check.py'))
test('duplicate-test', duplicate_test, args : libratbag_data_dir_devel)
receiver_id_test = find_program(join_paths(meson.source_root(), 'test/receiver-check.py'))
receiver_id_test = find_program(join_paths(project_source_root, 'test/receiver-check.py'))
test('receiver-id-test', receiver_id_test, args : libratbag_data_dir_devel)
#### tests ####
@@ -347,7 +357,7 @@ if enable_tests
valgrind = find_program('valgrind', required : false)
if valgrind.found()
valgrind_suppressions_file = join_paths(meson.source_root(), 'test', 'valgrind.suppressions')
valgrind_suppressions_file = join_paths(project_source_root, 'test', 'valgrind.suppressions')
add_test_setup('valgrind',
exe_wrapper : [
valgrind,
@@ -421,7 +431,7 @@ executable('ratbagd.devel',
include_directories : include_directories('src'),
install : false,
c_args : ['-DRATBAG_DBUS_INTERFACE="ratbag_devel1"',
'-DDBUS_POLICY_SRC="@0@/@1@"'.format(meson.build_root(), dbus_devel_policy),
'-DDBUS_POLICY_SRC="@0@/@1@"'.format(project_build_root, dbus_devel_policy),
'-DDBUS_POLICY_DST="@0@/@1@"'.format(dbussystemdir, dbus_devel_policy),
'-DDISABLE_COREDUMP=1'],
)
@@ -523,7 +533,7 @@ custom_target('ratbagctl',
output : 'ratbagctl',
input : [ratbagctl_body, 'tools/ratbagd.py'],
build_by_default : true,
command : [py3, join_paths(meson.source_root(), 'tools', 'merge_ratbagd.py'),
command : [py3, join_paths(project_source_root, 'tools', 'merge_ratbagd.py'),
'@INPUT@',
'--output', '@OUTPUT@'],
install: true,
@@ -538,7 +548,7 @@ man_ratbagctl = configure_file (
)
config_ratbagctl_devel = configuration_data()
config_ratbagctl_devel.set('MESON_BUILD_ROOT', meson.build_root())
config_ratbagctl_devel.set('MESON_BUILD_ROOT', project_build_root)
config_ratbagctl_devel.set('LIBRATBAG_DATA_DIR', libratbag_data_dir_devel)
config_ratbagctl_devel.set('RATBAGD_API_VERSION', ratbagd_api_version)
@@ -557,8 +567,8 @@ configure_file(input : 'tools/ratbagctl.test.py.in',
env_test = environment()
env_test.set('LIBRATBAG_DATA_DIR', libratbag_data_dir_devel)
# See: https://github.com/mesonbuild/meson/issues/3306.
env_test.set('MESON_SOURCE_ROOT', meson.source_root())
ratbagctl_test = find_program(join_paths(meson.build_root(), 'ratbagctl.test'))
env_test.set('MESON_SOURCE_ROOT', project_source_root)
ratbagctl_test = find_program(join_paths(project_build_root, 'ratbagctl.test'))
test('ratbagctl-test', ratbagctl_test, args: ['-v'], env : env_test)
# ratbag-command uses Swig bindings to call libratbag directly
@@ -568,8 +578,8 @@ swig_gen = generator(
output: ['@BASENAME@.c'],
arguments: ['-python', '-py3', '-o', './@OUTPUT@',
'-outdir', '.',
'-I' + join_paths(meson.source_root(), 'src'),
'-I' + join_paths(meson.source_root(), 'tools'),
'-I' + join_paths(project_source_root, 'src'),
'-I' + join_paths(project_source_root, 'tools'),
'@INPUT@'],
)
@@ -579,7 +589,7 @@ wrapper_deps = [
dep_libshared,
]
i_source = join_paths(meson.source_root(), 'src', 'libratbag.i')
i_source = join_paths(project_source_root, 'src', 'libratbag.i')
c_source = swig_gen.process(i_source)
shared_library(
'libratbag',
@@ -594,7 +604,7 @@ shared_library(
install: false,
)
i_source = join_paths(meson.source_root(), 'src', 'hidpp.i')
i_source = join_paths(project_source_root, 'src', 'hidpp.i')
c_source = swig_gen.process(i_source)
shared_library(
'hidpp',
@@ -624,7 +634,7 @@ custom_target('ratbag-command',
output : 'ratbag-command',
input : [ratbagctl_body, ratbagc_py],
build_by_default : true,
command : [py3, join_paths(meson.source_root(), 'tools', 'merge_ratbagd.py'),
command : [py3, join_paths(project_source_root, 'tools', 'merge_ratbagd.py'),
'@INPUT@',
'--output', '@OUTPUT@'],
install: false)
@@ -638,7 +648,7 @@ run_target(
command : 'tools/python-black.sh',
)
python_black_check = find_program(join_paths(meson.source_root(), 'test/python-black-check.sh'))
python_black_check = find_program(join_paths(project_source_root, 'test/python-black-check.sh'))
run_target(
'python-black-check',
command : python_black_check,
@@ -655,7 +665,7 @@ run_target(
command : 'tools/python-ruff.sh',
)
python_ruff_check = find_program(join_paths(meson.source_root(), 'test/python-ruff-check.sh'))
python_ruff_check = find_program(join_paths(project_source_root, 'test/python-ruff-check.sh'))
run_target(
'python-ruff-check',
command : python_ruff_check,