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 a10a1038719..65b77c52148 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 4588a9a6e88..a2ac978a20c 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 c2a894d3236..098f9435b85 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 0a135171fce..500fb13f9ba 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 b26940c6a3b..804e18bc67a 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 262ce9c4eff..333b3e0541f 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 9558bfb4ab9..988e5e0ce78 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 00000000000..5b8b582f27d --- /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 7f999197afe..e5c0c8361be 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 0a514dec7df..c25715c71d2 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 00000000000..3526723af03 --- /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('.') -- 2.47.3