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".
This commit is contained in:
Daan De Meyer
2025-05-09 20:48:51 +02:00
parent 6350d2dbd9
commit 30d20907bd
11 changed files with 69 additions and 33 deletions

View File

@@ -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

View File

@@ -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,

View File

@@ -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',

View File

@@ -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,

View File

@@ -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)

View File

@@ -40,6 +40,7 @@ libsystemd_network = static_library(
'systemd-network',
sources,
include_directories : includes,
implicit_include_directories : false,
dependencies : userspace,
build_by_default : false)

View File

@@ -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,

View File

@@ -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)

View File

@@ -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)

View File

@@ -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'],

11
src/version/meson.build Normal file
View File

@@ -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('.')