From 30d20907bddfe064cc3437a888dd8f00d14929e4 Mon Sep 17 00:00:00 2001 From: Daan De Meyer Date: Fri, 9 May 2025 20:48:51 +0200 Subject: [PATCH] meson: Remove unneeded include directories meson by default adds the current source and build directory as include directories. Because we structure our meson code by gathering a giant dict of everything we want to do and then doing all the actual target generation in the top level meson.build, this behavior does not make sense at all because we end up adding the top level repository directory as an include directory which is never what we want. At the same time, let's also make sure the top level directory of the build directory is not an include directory, by moving the version.h generation into the src/version subdirectory and then adding the src/version subdirectory of the build directory as an include directory instead of the top level repository directory. Making this change means that language servers such as clangd can't get confused when they automatically insert an #include line and insert "#include "src/basic/fs-util.h" instead of "#include "fs-util.h". --- meson.build | 19 +++++------ src/basic/meson.build | 1 + src/boot/meson.build | 5 ++- src/core/meson.build | 4 ++- src/cryptsetup/cryptsetup-tokens/meson.build | 1 + src/libsystemd-network/meson.build | 1 + src/libsystemd/meson.build | 22 ++----------- src/libsystemd/sd-journal/meson.build | 34 ++++++++++++++++++++ src/libudev/meson.build | 1 + src/shared/meson.build | 3 ++ src/version/meson.build | 11 +++++++ 11 files changed, 69 insertions(+), 33 deletions(-) create mode 100644 src/libsystemd/sd-journal/meson.build create mode 100644 src/version/meson.build diff --git a/meson.build b/meson.build index a10a103871..65b77c5214 100644 --- a/meson.build +++ b/meson.build @@ -1957,14 +1957,7 @@ endif conf.set_quoted('VERSION_TAG', version_tag) -vcs_tag = get_option('vcs-tag') -version_h = custom_target('version', - build_always_stale : vcs_tag, - input : 'src/version/version.h.in', - output : 'version.h', - capture : true, - command : ['tools/vcs-tag.sh', '@INPUT@', get_option('mode'), vcs_tag ? '1' : '0'], -) +subdir('src/version') shared_lib_tag = get_option('shared-lib-tag') if shared_lib_tag == '' @@ -2018,19 +2011,17 @@ dbus_programs = [] # A list of boot stubs. Required for testing of ukify. boot_stubs = [] -build_dir_include = include_directories('.') - basic_includes = [ include_directories( 'src/basic', 'src/fundamental', 'src/systemd', - '.', ), include_directories( 'src/basic/include', is_system : true, ), + version_include, ] libsystemd_includes = [basic_includes, include_directories( @@ -2061,6 +2052,7 @@ libsystemd = shared_library( 'systemd', version : libsystemd_version, include_directories : libsystemd_includes, + implicit_include_directories : false, link_args : ['-shared', # Make sure our library is never deleted from memory, so that our open logging fds don't leak on dlopen/dlclose cycles. '-z', 'nodelete', @@ -2081,6 +2073,7 @@ install_libsystemd_static = static_library( basic_sources, fundamental_sources, include_directories : libsystemd_includes, + implicit_include_directories : false, build_by_default : static_libsystemd != 'false', install : static_libsystemd != 'false', install_tag: 'libsystemd', @@ -2111,6 +2104,7 @@ libudev = shared_library( 'udev', version : libudev_version, include_directories : includes, + implicit_include_directories : false, link_args : ['-shared', '-Wl,--version-script=' + libudev_sym_path], link_with : [libsystemd_static, libshared_static], @@ -2130,6 +2124,7 @@ install_libudev_static = static_library( libsystemd_sources, libudev_sources, include_directories : includes, + implicit_include_directories : false, build_by_default : static_libudev != 'false', install : static_libudev != 'false', install_tag: 'libudev', @@ -2470,6 +2465,7 @@ foreach dict : executables exe = executable( name, kwargs : kwargs, + implicit_include_directories : false, ) executables_by_name += { name : exe } @@ -2600,6 +2596,7 @@ foreach dict : modules lib = shared_library( name, kwargs : kwargs, + implicit_include_directories : false, ) if is_nss diff --git a/src/basic/meson.build b/src/basic/meson.build index 4588a9a6e8..a2ac978a20 100644 --- a/src/basic/meson.build +++ b/src/basic/meson.build @@ -290,6 +290,7 @@ libbasic_static = static_library( basic_sources, fundamental_sources, include_directories : basic_includes, + implicit_include_directories : false, dependencies : [libcap, libdl, libgcrypt_cflags, diff --git a/src/boot/meson.build b/src/boot/meson.build index c2a894d323..098f9435b8 100644 --- a/src/boot/meson.build +++ b/src/boot/meson.build @@ -15,6 +15,7 @@ libefitest = static_library( basic_includes, include_directories('.'), ], + implicit_include_directories : false, dependencies : userspace) efitest_base = { @@ -153,9 +154,9 @@ configure_file( ############################################################ efi_includes = [ - build_dir_include, fundamental_include, include_directories('.'), + version_include, ] efi_c_args = [ @@ -380,6 +381,7 @@ foreach archspec : efi_archspecs libefi_sources, version_h, include_directories : efi_includes, + implicit_include_directories : false, c_args : archspec['c_args'], gnu_symbol_visibility : 'hidden', override_options : efi_override_options, @@ -387,6 +389,7 @@ foreach archspec : efi_archspecs kwargs = { 'include_directories' : efi_includes, + 'implicit_include_directories' : false, 'c_args' : archspec['c_args'], 'link_args' : archspec['link_args'], 'gnu_symbol_visibility' : 'hidden', diff --git a/src/core/meson.build b/src/core/meson.build index 0a135171fc..500fb13f9b 100644 --- a/src/core/meson.build +++ b/src/core/meson.build @@ -105,7 +105,8 @@ libcore_static = static_library( libcore_sources, load_fragment_gperf_c, load_fragment_gperf_nulstr_c, - include_directories : includes, + include_directories : [includes, include_directories('.')], + implicit_include_directories : false, c_args : ['-fvisibility=default'], dependencies : [libacl, libaudit, @@ -123,6 +124,7 @@ libcore_static = static_library( libcore = shared_library( libcore_name, c_args : ['-fvisibility=default'], + implicit_include_directories : false, link_args : ['-shared', '-Wl,--version-script=' + libshared_sym_path], link_depends : libshared_sym_path, diff --git a/src/cryptsetup/cryptsetup-tokens/meson.build b/src/cryptsetup/cryptsetup-tokens/meson.build index b26940c6a3..804e18bc67 100644 --- a/src/cryptsetup/cryptsetup-tokens/meson.build +++ b/src/cryptsetup/cryptsetup-tokens/meson.build @@ -4,6 +4,7 @@ lib_cryptsetup_token_common = static_library( 'cryptsetup-token-common', 'cryptsetup-token-util.c', include_directories : includes, + implicit_include_directories : false, dependencies : userspace, link_with : libshared, build_by_default : false) diff --git a/src/libsystemd-network/meson.build b/src/libsystemd-network/meson.build index 262ce9c4ef..333b3e0541 100644 --- a/src/libsystemd-network/meson.build +++ b/src/libsystemd-network/meson.build @@ -40,6 +40,7 @@ libsystemd_network = static_library( 'systemd-network', sources, include_directories : includes, + implicit_include_directories : false, dependencies : userspace, build_by_default : false) diff --git a/src/libsystemd/meson.build b/src/libsystemd/meson.build index 9558bfb4ab..988e5e0ce7 100644 --- a/src/libsystemd/meson.build +++ b/src/libsystemd/meson.build @@ -14,26 +14,7 @@ sd_journal_sources = files( 'sd-journal/sd-journal.c', ) -audit_type_includes = [config_h, - missing_audit_h, - 'linux/audit.h'] -if conf.get('HAVE_AUDIT') == 1 - audit_type_includes += 'libaudit.h' -endif - -generate_audit_type_list = find_program('sd-journal/generate-audit_type-list.sh') -audit_type_list_txt = custom_target( - 'audit_type-list.txt', - output : 'audit_type-list.txt', - command : [generate_audit_type_list, cpp] + audit_type_includes, - capture : true) - -audit_type_to_name = custom_target( - 'audit_type-to-name.h', - input : ['sd-journal/audit_type-to-name.awk', audit_type_list_txt], - output : 'audit_type-to-name.h', - command : [awk, '-f', '@INPUT0@', '@INPUT1@'], - capture : true) +subdir('sd-journal') generated_sources += audit_type_to_name sd_journal_sources += audit_type_to_name @@ -160,6 +141,7 @@ libsystemd_static = static_library( 'systemd_static', libsystemd_sources, include_directories : libsystemd_includes, + implicit_include_directories : false, c_args : libsystemd_c_args, link_with : [libbasic_static], dependencies : [threads, diff --git a/src/libsystemd/sd-journal/meson.build b/src/libsystemd/sd-journal/meson.build new file mode 100644 index 0000000000..5b8b582f27 --- /dev/null +++ b/src/libsystemd/sd-journal/meson.build @@ -0,0 +1,34 @@ +# SPDX-License-Identifier: LGPL-2.1-or-later + +# We're generating a header file here intended to be included +# by audit-type.c. To make that work, we have to add the generated +# header file's directory to the include directories for libsystemd. +# In meson, adding include directories is done via include_directories(), +# which always adds two include directories for each argument, one relative to +# the source directory and one relative to the build directory. We don't +# want to add src/libsystemd to the include directories, yet custom_target() +# does not allow path segments in its output argument, so to make sure the +# generated header is written to src/libsystemd/sd-journal in the build directory, +# the custom_target() has to be defined here in src/libsystemd/sd-journal +# in the source directory. + +audit_type_includes = [config_h, + missing_audit_h, + 'linux/audit.h'] +if conf.get('HAVE_AUDIT') == 1 + audit_type_includes += 'libaudit.h' +endif + +generate_audit_type_list = find_program('generate-audit_type-list.sh') +audit_type_list_txt = custom_target( + 'audit_type-list.txt', + output : 'audit_type-list.txt', + command : [generate_audit_type_list, cpp] + audit_type_includes, + capture : true) + +audit_type_to_name = custom_target( + 'audit_type-to-name.h', + input : ['audit_type-to-name.awk', audit_type_list_txt], + output : 'audit_type-to-name.h', + command : [awk, '-f', '@INPUT0@', '@INPUT1@'], + capture : true) diff --git a/src/libudev/meson.build b/src/libudev/meson.build index 7f999197af..e5c0c8361b 100644 --- a/src/libudev/meson.build +++ b/src/libudev/meson.build @@ -27,6 +27,7 @@ libudev_basic = static_library( 'udev-basic', libudev_sources, include_directories : includes, + implicit_include_directories : false, dependencies : userspace, c_args : ['-fvisibility=default'], build_by_default : false) diff --git a/src/shared/meson.build b/src/shared/meson.build index 0a514dec7d..c25715c71d 100644 --- a/src/shared/meson.build +++ b/src/shared/meson.build @@ -360,6 +360,7 @@ libshared_static = static_library( libshared_name, shared_sources, include_directories : includes, + implicit_include_directories : false, dependencies : [libshared_deps, userspace], c_args : ['-fvisibility=default'], @@ -368,6 +369,7 @@ libshared_static = static_library( libshared = shared_library( libshared_name, include_directories : includes, + implicit_include_directories : false, c_args : ['-fvisibility=default'], link_args : ['-shared', '-Wl,--version-script=' + libshared_sym_path], @@ -386,6 +388,7 @@ libshared_fdisk = static_library( 'shared-fdisk', shared_fdisk_sources, include_directories : includes, + implicit_include_directories : false, dependencies : [libfdisk, userspace], c_args : ['-fvisibility=default'], diff --git a/src/version/meson.build b/src/version/meson.build new file mode 100644 index 0000000000..3526723af0 --- /dev/null +++ b/src/version/meson.build @@ -0,0 +1,11 @@ +# SPDX-License-Identifier: LGPL-2.1-or-later + +vcs_tag = get_option('vcs-tag') +version_h = custom_target('version', + build_always_stale : vcs_tag, + input : 'version.h.in', + output : 'version.h', + capture : true, + command : [meson.project_source_root() / 'tools/vcs-tag.sh', '@INPUT@', get_option('mode'), vcs_tag ? '1' : '0'], +) +version_include = include_directories('.')