1
0
mirror of https://github.com/systemd/systemd synced 2026-03-28 09:44:50 +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')
if get_option('split-bin') == 'auto'
split_bin = not fs.is_symlink('/usr/sbin')
@ -351,7 +340,6 @@ cc = meson.get_compiler('c')
userspace_c_args = []
userspace_c_ld_args = []
userspace_sources = []
meson_build_sh = files('tools/meson-build.sh')
want_tests = get_option('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_generated_vmlinux_h = false
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')
if version_tag == ''
version_tag = meson.project_version()
@ -2053,6 +2019,7 @@ endif
conf.set_quoted('VERSION_TAG', version_tag)
subdir('tools')
subdir('src/version')
shared_lib_tag = get_option('shared-lib-tag')
@ -2072,7 +2039,7 @@ config_h = configure_file(
userspace_c_args += ['-include', 'config.h']
jinja2_cmdline = [meson_render_jinja2, config_h]
jinja2_cmdline = [meson_render_jinja2_py, config_h]
userspace = declare_dependency(
compile_args : userspace_c_args,
@ -2335,7 +2302,6 @@ else
}
endif
fuzz_additional_kwargs += {
'include_directories' : include_directories('src/fuzz'),
'c_args' : test_cflags,
}
@ -2566,9 +2532,9 @@ foreach dict : executables
kwargs = {}
foreach key, val : dict
if key in ['name', 'dbus', 'public', 'conditions',
'type', 'suite', 'timeout', 'parallel',
'objects', 'sources', 'extract']
if key in ['name', 'dbus', 'public', 'conditions', 'type', 'suite',
'timeout', 'parallel', 'objects', 'sources', 'extract',
'include_directories']
continue
endif
@ -2579,15 +2545,15 @@ foreach dict : executables
kwargs += { key : [ kwargs.get(key, []), val ]}
endforeach
include_directories = dict['include_directories']
if not is_test
include_directories += fs.parent(exe_sources[0])
endif
foreach val : dict.get('objects', [])
obj = objects_by_name[val]
kwargs += {
'objects' : obj['objects'],
'include_directories' : [
kwargs.get('include_directories', []),
obj['include_directories'],
],
}
kwargs += { 'objects' : obj['objects'] }
include_directories += obj['include_directories']
endforeach
if is_test
@ -2598,6 +2564,7 @@ foreach dict : executables
endif
if is_fuzz
include_directories += include_directories('src/fuzz')
foreach key, val : fuzz_additional_kwargs
if key == 'sources'
exe_sources += val
@ -2612,6 +2579,7 @@ foreach dict : executables
sources : exe_sources,
kwargs : kwargs,
implicit_include_directories : false,
include_directories : include_directories,
)
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
name = fs.name(exec.full_path())
if want_tests != 'false'
test('check-help-' + name,
check_help,
check_help_sh,
suite : 'dist',
args : exec.full_path(),
depends: exec)
test('check-version-' + name,
check_version,
check_version_sh,
suite : 'dist',
args : [exec.full_path(),
project_major_version],
@ -2950,7 +2915,7 @@ if git.found()
run_target(
'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
endforeach
find_unused_library_symbols = find_program('tools/find-unused-library-symbols.py')
test(
'libshared-unused-symbols',
find_unused_library_symbols,
find_unused_library_symbols_py,
suite : 'unused-symbols',
args : [libshared, libcore] + nss_targets + pam_targets + symbol_analysis_exes,
)
@ -3024,7 +2988,7 @@ test(
run_target(
'check-api-docs',
depends : [man, libsystemd, libudev],
command : [files('tools/check-api-docs.sh'),
command : [check_api_docs_sh,
libsystemd.full_path(),
libudev.full_path()])
@ -3039,7 +3003,7 @@ if not meson.is_cross_build()
output : fs.name(dbus_interfaces_dir),
install : dbus_interfaces_dir != 'no',
install_dir : fs.parent(dbus_interfaces_dir),
command : [export_dbus_interfaces_py, '@OUTPUT@', dbus_programs])
command : [dbus_exporter_py, '@OUTPUT@', dbus_programs])
endif
custom_target(
@ -3047,7 +3011,7 @@ custom_target(
capture : true,
install : want_tests != 'no' and install_tests,
install_dir : testdata_dir,
command : [files('tools/meson-extract-unit-files.py'),
command : [meson_extract_unit_files_py,
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_build_dir = meson.current_build_dir()
libcore_name = 'systemd-core-@0@'.format(shared_lib_tag)
core_includes = [includes, include_directories('.')]
libcore_static = static_library(
libcore_name,
libcore_sources,
include_directories : [includes, include_directories('.')],
include_directories : core_includes,
implicit_include_directories : false,
c_args : ['-fvisibility=default'],
dependencies : [libaudit_cflags,
@ -157,8 +158,6 @@ libcore = shared_library(
install : true,
install_dir : pkglibdir)
core_includes = [includes, include_directories('.')]
systemd_sources = files(
'main.c',
'crash-handler.c',
@ -210,7 +209,6 @@ executables += [
'name' : 'systemd-executor',
'public' : true,
'sources' : systemd_executor_sources,
'include_directories' : core_includes,
'link_with' : executor_libs,
'dependencies' : [
libapparmor_cflags,

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

@ -7,7 +7,7 @@ version_h = custom_target('version',
output : 'version.h',
capture : true,
command : [
meson.project_source_root() / 'tools/vcs-tag.sh',
vcs_tag_sh,
'@INPUT@',
get_option('mode'),
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