1
0
mirror of https://github.com/systemd/systemd synced 2026-03-28 17:54:51 +01:00

Compare commits

...

4 Commits

Author SHA1 Message Date
Yu Watanabe
929ce35f8d
meson: rework include_directories() and finding of tools (#39956)
This is a cleanup in preparation for later additions.
2025-12-02 20:07:37 +09:00
Zbigniew Jędrzejewski-Szmek
322f6adbcd meson: add tools/meson.build
Previously, we looked for scripts in the tools/ directory ad hoc,
wherever they were needed. Let's do those checks in one place.
The main meson.build file is shrunk somewhat, which is always nice.
2025-12-01 16:18:11 +01:00
Zbigniew Jędrzejewski-Szmek
963bebd7b0 meson: add source dir to include_directories automatically
Quite often we need to specify include_directories('.'). Normally, meson
does this automatically, but we specify implicit_include_directories : false,
see 30d20907bddfe064cc3437a888dd8f00d14929e4 for an explanation.
Passing the include_directories argument through the template layers was rather
cumbersome. Let's simplify things by always including the directory of the
first source file. This makes the definitions simpler, at the cost of having an
unnecessary include directory in the list in some cases.

(Tests are excluded from this change, because they happen to not need this, but
also because some tests have source[0] which is a custom target, and we'd need
newer meson to support that.)
2025-12-01 15:35:22 +01:00
Zbigniew Jędrzejewski-Szmek
4c3c60c270 meson: reuse variable in one more place 2025-12-01 14:40:03 +01:00
12 changed files with 61 additions and 71 deletions

View File

@ -79,17 +79,6 @@ summary({
##################################################################### #####################################################################
# Try to install the git pre-commit hook
git_setup_sh = find_program('tools/git-setup.sh', required : false)
if git_setup_sh.found()
git_hook = run_command(git_setup_sh, check : false)
if git_hook.returncode() == 0
message(git_hook.stdout().strip())
endif
endif
#####################################################################
fs = import('fs') fs = import('fs')
if get_option('split-bin') == 'auto' if get_option('split-bin') == 'auto'
split_bin = not fs.is_symlink('/usr/sbin') split_bin = not fs.is_symlink('/usr/sbin')
@ -351,7 +340,6 @@ cc = meson.get_compiler('c')
userspace_c_args = [] userspace_c_args = []
userspace_c_ld_args = [] userspace_c_ld_args = []
userspace_sources = [] userspace_sources = []
meson_build_sh = files('tools/meson-build.sh')
want_tests = get_option('tests') want_tests = get_option('tests')
want_slow_tests = want_tests != 'false' and get_option('slow-tests') want_slow_tests = want_tests != 'false' and get_option('slow-tests')
@ -1953,10 +1941,6 @@ conf.set10('ENABLE_UKIFY', want_ukify)
##################################################################### #####################################################################
check_efi_alignment_py = files('tools/check-efi-alignment.py')
#####################################################################
use_provided_vmlinux_h = false use_provided_vmlinux_h = false
use_generated_vmlinux_h = false use_generated_vmlinux_h = false
provided_vmlinux_h_path = get_option('vmlinux-h-path') provided_vmlinux_h_path = get_option('vmlinux-h-path')
@ -2028,24 +2012,6 @@ conf.set10('ENABLE_SYSCTL_BPF', conf.get('HAVE_VMLINUX_H') == 1 and libbpf.versi
##################################################################### #####################################################################
check_version_history_py = files('tools/check-version-history.py')
elf2efi_py = files('tools/elf2efi.py')
export_dbus_interfaces_py = files('tools/dbus_exporter.py')
generate_gperfs = files('tools/generate-gperfs.py')
make_autosuspend_rules_py = files('tools/make-autosuspend-rules.py')
make_directive_index_py = files('tools/make-directive-index.py')
sync_docs_py = files('tools/sync-docs.py')
make_man_index_py = files('tools/make-man-index.py')
meson_render_jinja2 = files('tools/meson-render-jinja2.py')
update_dbus_docs_py = files('tools/update-dbus-docs.py')
update_hwdb_autosuspend_sh = files('tools/update-hwdb-autosuspend.sh')
update_hwdb_sh = files('tools/update-hwdb.sh')
update_man_rules_py = files('tools/update-man-rules.py')
update_syscall_tables_sh = files('tools/update-syscall-tables.sh')
xml_helper_py = files('tools/xml_helper.py')
#####################################################################
version_tag = get_option('version-tag') version_tag = get_option('version-tag')
if version_tag == '' if version_tag == ''
version_tag = meson.project_version() version_tag = meson.project_version()
@ -2053,6 +2019,7 @@ endif
conf.set_quoted('VERSION_TAG', version_tag) conf.set_quoted('VERSION_TAG', version_tag)
subdir('tools')
subdir('src/version') subdir('src/version')
shared_lib_tag = get_option('shared-lib-tag') shared_lib_tag = get_option('shared-lib-tag')
@ -2072,7 +2039,7 @@ config_h = configure_file(
userspace_c_args += ['-include', 'config.h'] userspace_c_args += ['-include', 'config.h']
jinja2_cmdline = [meson_render_jinja2, config_h] jinja2_cmdline = [meson_render_jinja2_py, config_h]
userspace = declare_dependency( userspace = declare_dependency(
compile_args : userspace_c_args, compile_args : userspace_c_args,
@ -2335,7 +2302,6 @@ else
} }
endif endif
fuzz_additional_kwargs += { fuzz_additional_kwargs += {
'include_directories' : include_directories('src/fuzz'),
'c_args' : test_cflags, 'c_args' : test_cflags,
} }
@ -2566,9 +2532,9 @@ foreach dict : executables
kwargs = {} kwargs = {}
foreach key, val : dict foreach key, val : dict
if key in ['name', 'dbus', 'public', 'conditions', if key in ['name', 'dbus', 'public', 'conditions', 'type', 'suite',
'type', 'suite', 'timeout', 'parallel', 'timeout', 'parallel', 'objects', 'sources', 'extract',
'objects', 'sources', 'extract'] 'include_directories']
continue continue
endif endif
@ -2579,15 +2545,15 @@ foreach dict : executables
kwargs += { key : [ kwargs.get(key, []), val ]} kwargs += { key : [ kwargs.get(key, []), val ]}
endforeach endforeach
include_directories = dict['include_directories']
if not is_test
include_directories += fs.parent(exe_sources[0])
endif
foreach val : dict.get('objects', []) foreach val : dict.get('objects', [])
obj = objects_by_name[val] obj = objects_by_name[val]
kwargs += { kwargs += { 'objects' : obj['objects'] }
'objects' : obj['objects'], include_directories += obj['include_directories']
'include_directories' : [
kwargs.get('include_directories', []),
obj['include_directories'],
],
}
endforeach endforeach
if is_test if is_test
@ -2598,6 +2564,7 @@ foreach dict : executables
endif endif
if is_fuzz if is_fuzz
include_directories += include_directories('src/fuzz')
foreach key, val : fuzz_additional_kwargs foreach key, val : fuzz_additional_kwargs
if key == 'sources' if key == 'sources'
exe_sources += val exe_sources += val
@ -2612,6 +2579,7 @@ foreach dict : executables
sources : exe_sources, sources : exe_sources,
kwargs : kwargs, kwargs : kwargs,
implicit_include_directories : false, implicit_include_directories : false,
include_directories : include_directories,
) )
executables_by_name += { name : exe } executables_by_name += { name : exe }
@ -2906,20 +2874,17 @@ endif
##################################################################### #####################################################################
check_help = files('tools/check-help.sh')
check_version = files('tools/check-version.sh')
foreach exec : public_programs foreach exec : public_programs
name = fs.name(exec.full_path()) name = fs.name(exec.full_path())
if want_tests != 'false' if want_tests != 'false'
test('check-help-' + name, test('check-help-' + name,
check_help, check_help_sh,
suite : 'dist', suite : 'dist',
args : exec.full_path(), args : exec.full_path(),
depends: exec) depends: exec)
test('check-version-' + name, test('check-version-' + name,
check_version, check_version_sh,
suite : 'dist', suite : 'dist',
args : [exec.full_path(), args : [exec.full_path(),
project_major_version], project_major_version],
@ -2950,7 +2915,7 @@ if git.found()
run_target( run_target(
'git-contrib', 'git-contrib',
command : files('tools/git-contrib.sh')) command : git_contrib_sh)
#################################################### ####################################################
@ -3013,10 +2978,9 @@ foreach name, exe : executables_by_name
symbol_analysis_exes += exe symbol_analysis_exes += exe
endforeach endforeach
find_unused_library_symbols = find_program('tools/find-unused-library-symbols.py')
test( test(
'libshared-unused-symbols', 'libshared-unused-symbols',
find_unused_library_symbols, find_unused_library_symbols_py,
suite : 'unused-symbols', suite : 'unused-symbols',
args : [libshared, libcore] + nss_targets + pam_targets + symbol_analysis_exes, args : [libshared, libcore] + nss_targets + pam_targets + symbol_analysis_exes,
) )
@ -3024,7 +2988,7 @@ test(
run_target( run_target(
'check-api-docs', 'check-api-docs',
depends : [man, libsystemd, libudev], depends : [man, libsystemd, libudev],
command : [files('tools/check-api-docs.sh'), command : [check_api_docs_sh,
libsystemd.full_path(), libsystemd.full_path(),
libudev.full_path()]) libudev.full_path()])
@ -3039,7 +3003,7 @@ if not meson.is_cross_build()
output : fs.name(dbus_interfaces_dir), output : fs.name(dbus_interfaces_dir),
install : dbus_interfaces_dir != 'no', install : dbus_interfaces_dir != 'no',
install_dir : fs.parent(dbus_interfaces_dir), install_dir : fs.parent(dbus_interfaces_dir),
command : [export_dbus_interfaces_py, '@OUTPUT@', dbus_programs]) command : [dbus_exporter_py, '@OUTPUT@', dbus_programs])
endif endif
custom_target( custom_target(
@ -3047,7 +3011,7 @@ custom_target(
capture : true, capture : true,
install : want_tests != 'no' and install_tests, install : want_tests != 'no' and install_tests,
install_dir : testdata_dir, install_dir : testdata_dir,
command : [files('tools/meson-extract-unit-files.py'), command : [meson_extract_unit_files_py,
meson.project_build_root()]) meson.project_build_root()])
##################################################################### #####################################################################

View File

@ -125,11 +125,12 @@ generated_sources += [load_fragment_gperf_c, load_fragment_gperf_nulstr_c, bpf_d
libcore_sources += [load_fragment_gperf_c, load_fragment_gperf_nulstr_c, bpf_delegate_configs_inc] libcore_sources += [load_fragment_gperf_c, load_fragment_gperf_nulstr_c, bpf_delegate_configs_inc]
libcore_build_dir = meson.current_build_dir() libcore_build_dir = meson.current_build_dir()
libcore_name = 'systemd-core-@0@'.format(shared_lib_tag) libcore_name = 'systemd-core-@0@'.format(shared_lib_tag)
core_includes = [includes, include_directories('.')]
libcore_static = static_library( libcore_static = static_library(
libcore_name, libcore_name,
libcore_sources, libcore_sources,
include_directories : [includes, include_directories('.')], include_directories : core_includes,
implicit_include_directories : false, implicit_include_directories : false,
c_args : ['-fvisibility=default'], c_args : ['-fvisibility=default'],
dependencies : [libaudit_cflags, dependencies : [libaudit_cflags,
@ -157,8 +158,6 @@ libcore = shared_library(
install : true, install : true,
install_dir : pkglibdir) install_dir : pkglibdir)
core_includes = [includes, include_directories('.')]
systemd_sources = files( systemd_sources = files(
'main.c', 'main.c',
'crash-handler.c', 'crash-handler.c',
@ -210,7 +209,6 @@ executables += [
'name' : 'systemd-executor', 'name' : 'systemd-executor',
'public' : true, 'public' : true,
'sources' : systemd_executor_sources, 'sources' : systemd_executor_sources,
'include_directories' : core_includes,
'link_with' : executor_libs, 'link_with' : executor_libs,
'dependencies' : [ 'dependencies' : [
libapparmor_cflags, libapparmor_cflags,

View File

@ -37,7 +37,6 @@ executables += [
libexec_template + { libexec_template + {
'name' : 'systemd-coredump', 'name' : 'systemd-coredump',
'sources' : systemd_coredump_sources, 'sources' : systemd_coredump_sources,
'include_directories' : [libexec_template['include_directories'], include_directories('.')],
'extract' : systemd_coredump_extract_sources, 'extract' : systemd_coredump_extract_sources,
'link_with' : [libshared], 'link_with' : [libshared],
'dependencies' : common_dependencies, 'dependencies' : common_dependencies,

View File

@ -63,8 +63,6 @@ executables += [
'dbus' : true, 'dbus' : true,
'sources' : systemd_homed_sources, 'sources' : systemd_homed_sources,
'extract' : systemd_homed_extract_sources, 'extract' : systemd_homed_extract_sources,
'include_directories' : includes +
include_directories('.'),
'dependencies' : [ 'dependencies' : [
libcrypt, libcrypt,
libm, libm,

View File

@ -66,7 +66,6 @@ executables += [
'name' : 'systemd-journald', 'name' : 'systemd-journald',
'sources' : systemd_journald_sources, 'sources' : systemd_journald_sources,
'extract' : systemd_journald_extract_sources, 'extract' : systemd_journald_extract_sources,
'include_directories' : [libexec_template['include_directories'], include_directories('.')],
'dependencies' : [ 'dependencies' : [
liblz4_cflags, liblz4_cflags,
libselinux_cflags, libselinux_cflags,

View File

@ -47,7 +47,6 @@ executables += [
'dbus' : true, 'dbus' : true,
'sources' : systemd_logind_sources, 'sources' : systemd_logind_sources,
'extract' : systemd_logind_extract_sources, 'extract' : systemd_logind_extract_sources,
'include_directories' : [libexec_template['include_directories'], include_directories('.')],
'dependencies' : [ 'dependencies' : [
threads, threads,
], ],

View File

@ -32,7 +32,6 @@ executables += [
'name' : 'systemd-nsresourced', 'name' : 'systemd-nsresourced',
'sources' : systemd_nsresourced_sources, 'sources' : systemd_nsresourced_sources,
'extract' : systemd_nsresourced_extract_sources, 'extract' : systemd_nsresourced_extract_sources,
'include_directories' : [libexec_template['include_directories'], include_directories('.')],
'dependencies' : threads, 'dependencies' : threads,
}, },
libexec_template + { libexec_template + {

View File

@ -83,7 +83,6 @@ executables += [
'dbus' : true, 'dbus' : true,
'sources' : systemd_resolved_sources, 'sources' : systemd_resolved_sources,
'extract' : systemd_resolved_extract_sources, 'extract' : systemd_resolved_extract_sources,
'include_directories' : [libexec_template['include_directories'], include_directories('.')],
}, },
executable_template + resolve_common_template + { executable_template + resolve_common_template + {
'name' : 'resolvectl', 'name' : 'resolvectl',

View File

@ -5,7 +5,6 @@ executables += [
'name' : 'systemd-sleep', 'name' : 'systemd-sleep',
'sources' : files('sleep.c'), 'sources' : files('sleep.c'),
'extract' : files('battery-capacity.c'), 'extract' : files('battery-capacity.c'),
'include_directories' : [libexec_template['include_directories'], include_directories('.')],
}, },
test_template + { test_template + {
'sources' : files('test-battery-capacity.c'), 'sources' : files('test-battery-capacity.c'),

View File

@ -34,7 +34,6 @@ executables += [
'name' : 'systemd-timesyncd', 'name' : 'systemd-timesyncd',
'sources' : timesyncd_sources, 'sources' : timesyncd_sources,
'extract' : timesyncd_extract_sources, 'extract' : timesyncd_extract_sources,
'include_directories' : [libexec_template['include_directories'], include_directories('.')],
'link_with' : timesyncd_link_with, 'link_with' : timesyncd_link_with,
'dependencies' : [ 'dependencies' : [
libm, libm,

View File

@ -7,7 +7,7 @@ version_h = custom_target('version',
output : 'version.h', output : 'version.h',
capture : true, capture : true,
command : [ command : [
meson.project_source_root() / 'tools/vcs-tag.sh', vcs_tag_sh,
'@INPUT@', '@INPUT@',
get_option('mode'), get_option('mode'),
vcs_tag ? '1' : '0', vcs_tag ? '1' : '0',

37
tools/meson.build Normal file
View File

@ -0,0 +1,37 @@
# SPDX-License-Identifier: LGPL-2.1-or-later
check_api_docs_sh = files('check-api-docs.sh')
check_efi_alignment_py = files('check-efi-alignment.py')
check_help_sh = files('check-help.sh')
check_version_history_py = files('check-version-history.py')
check_version_sh = files('check-version.sh')
elf2efi_py = files('elf2efi.py')
dbus_exporter_py = files('dbus_exporter.py')
find_unused_library_symbols_py = files('find-unused-library-symbols.py')
generate_gperfs = files('generate-gperfs.py')
git_contrib_sh = files('git-contrib.sh')
make_autosuspend_rules_py = files('make-autosuspend-rules.py')
make_directive_index_py = files('make-directive-index.py')
make_man_index_py = files('make-man-index.py')
meson_build_sh = files('meson-build.sh')
meson_extract_unit_files_py = files('meson-extract-unit-files.py')
meson_render_jinja2_py = files('meson-render-jinja2.py')
sync_docs_py = files('sync-docs.py')
update_dbus_docs_py = files('update-dbus-docs.py')
update_hwdb_autosuspend_sh = files('update-hwdb-autosuspend.sh')
update_hwdb_sh = files('update-hwdb.sh')
update_man_rules_py = files('update-man-rules.py')
update_syscall_tables_sh = files('update-syscall-tables.sh')
vcs_tag_sh = files('vcs-tag.sh')
xml_helper_py = files('xml_helper.py')
#####################################################################
# Try to install the git pre-commit hook
git_setup_sh = find_program('./git-setup.sh', required : false)
if git_setup_sh.found()
git_hook = run_command(git_setup_sh, check : false)
if git_hook.returncode() == 0
message(git_hook.stdout().strip())
endif
endif