# SPDX-License-Identifier: LGPL-2.1+
project('systemd', 'c',
- version : '239',
+ version : '241',
license : 'LGPLv2+',
default_options: [
'c_std=gnu99',
meson_version : '>= 0.46',
)
-libsystemd_version = '0.23.0'
-libudev_version = '1.6.11'
+libsystemd_version = '0.25.0'
+libudev_version = '1.6.13'
# We need the same data in two different formats, ugh!
# Also, for hysterical reasons, we use different variable
substs.set('PROJECT_URL', 'https://www.freedesktop.org/wiki/Software/systemd')
substs.set('PROJECT_VERSION', meson.project_version())
+# This is to be used instead of meson.source_root(), as the latter will return
+# the wrong result when systemd is being built as a meson subproject
+project_source_root = meson.current_source_dir()
+
want_ossfuzz = get_option('oss-fuzz')
want_libfuzzer = get_option('llvm-fuzz')
if want_ossfuzz and want_libfuzzer
#####################################################################
# Try to install the git pre-commit hook
-git_hook = run_command(join_paths(meson.source_root(), 'tools/add-git-hook.sh'))
+git_hook = run_command(join_paths(project_source_root, 'tools/add-git-hook.sh'))
if git_hook.returncode() == 0
message(git_hook.stdout().strip())
endif
if rootprefixdir == ''
rootprefixdir = rootprefix_default
endif
+rootprefixdir_noslash = rootprefixdir == '/' ? '' : rootprefixdir
sysvinit_path = get_option('sysvinit-path')
sysvrcnd_path = get_option('sysvrcnd-path')
conf.set10('BUMP_PROC_SYS_FS_NR_OPEN', get_option('bump-proc-sys-fs-nr-open'))
conf.set('HIGH_RLIMIT_NOFILE', 512*1024)
-# join_paths ignore the preceding arguments if an absolute component is
+# join_paths ignores the preceding arguments if an absolute component is
# encountered, so this should canonicalize various paths when they are
# absolute or relative.
prefixdir = get_option('prefix')
pkgincludedir = join_paths(includedir, 'systemd')
systemgeneratordir = join_paths(rootlibexecdir, 'system-generators')
usergeneratordir = join_paths(prefixdir, 'lib/systemd/user-generators')
+pkgsysconfsystemgeneratordir = join_paths(pkgsysconfdir, 'system-generators')
+pkgsysconfusergeneratordir = join_paths(pkgsysconfdir, 'user-generators')
systemenvgeneratordir = join_paths(prefixdir, 'lib/systemd/system-environment-generators')
userenvgeneratordir = join_paths(prefixdir, 'lib/systemd/user-environment-generators')
systemshutdowndir = join_paths(rootlibexecdir, 'system-shutdown')
systemunitdir = join_paths(rootprefixdir, 'lib/systemd/system')
systempresetdir = join_paths(rootprefixdir, 'lib/systemd/system-preset')
udevlibexecdir = join_paths(rootprefixdir, 'lib/udev')
-udevhomedir = udevlibexecdir
udevrulesdir = join_paths(udevlibexecdir, 'rules.d')
udevhwdbdir = join_paths(udevlibexecdir, 'hwdb.d')
catalogdir = join_paths(prefixdir, 'lib/systemd/catalog')
conf.set_quoted('MEMORY_ACCOUNTING_DEFAULT_YES_NO', memory_accounting_default ? 'yes' : 'no')
substs.set('prefix', prefixdir)
+substs.set('rootprefix', rootprefixdir)
+substs.set('rootprefix_noslash', rootprefixdir_noslash)
substs.set('exec_prefix', prefixdir)
substs.set('libdir', libdir)
substs.set('rootlibdir', rootlibdir)
substs.set('includedir', includedir)
-substs.set('pkgsysconfdir', pkgsysconfdir)
+substs.set('sysconfdir', sysconfdir)
substs.set('bindir', bindir)
substs.set('rootbindir', rootbindir)
substs.set('rootlibexecdir', rootlibexecdir)
slow_tests = want_tests != 'false' and get_option('slow-tests')
install_tests = get_option('install-tests')
-cxx = find_program('c++', required : fuzzer_build)
-if cxx.found()
+if add_languages('cpp', required : fuzzer_build)
# Used only for tests
- add_languages('cpp')
cxx_cmd = ' '.join(meson.get_compiler('cpp').cmd_array())
else
cxx_cmd = ''
'-Wno-missing-field-initializers',
'-Wno-unused-result',
'-Wno-format-signedness',
+ '-Wno-error=#warnings', # clang
+ '-Wno-string-plus-int', # clang
# work-around for gcc 7.1 turning this on on its own.
'-Wno-error=nonnull',
'-Wl,-z,now',
]
-# the oss-fuzz fuzzers are not built with -fPIE, so don't
-# enable it when we are linking against them
-if not fuzzer_build
- possible_cc_flags += '-fPIE'
- possible_link_flags += '-pie'
-endif
-
if cc.get_id() == 'clang'
possible_cc_flags += [
'-Wno-typedef-redefinition',
possible_link_flags += '-Wl,--gc-sections'
endif
+if get_option('b_ndebug') == 'true'
+ # With asserts disabled with get a bunch of warnings about variables which
+ # are used only in the asserts. This is not useful at all, so let's just silence
+ # those warnings.
+ possible_cc_flags += [
+ '-Wno-unused-variable',
+ '-Wno-unused-but-set-variable',
+ ]
+endif
+
add_project_arguments(cc.get_supported_arguments(possible_cc_flags), language : 'c')
add_project_link_arguments(cc.get_supported_link_arguments(possible_link_flags), language : 'c')
decl_headers = '''
#include <uchar.h>
-#include <linux/ethtool.h>
-#include <linux/fib_rules.h>
#include <sys/stat.h>
'''
foreach decl : ['char16_t',
'char32_t',
- 'struct fib_rule_uid_range',
- 'struct fib_rule_port_range',
'struct statx',
]
['IFLA_TARGET_NETNSID', 'linux/if_link.h'],
['IFLA_NEW_IFINDEX', 'linux/if_link.h'],
['IFLA_MAX_MTU', 'linux/if_link.h'],
+ ['IFLA_BOND_MODE', 'linux/if_link.h'],
['IFLA_BOND_ACTIVE_SLAVE', 'linux/if_link.h'],
['IFLA_BOND_AD_INFO', 'linux/if_link.h'],
['IFLA_BOND_AD_ACTOR_SYSTEM', 'linux/if_link.h'],
#####################################################################
-vcs_tagger = [meson.source_root() + '/tools/meson-vcs-tag.sh',
- '@0@/.git'.format(meson.source_root()),
+vcs_tagger = [project_source_root + '/tools/meson-vcs-tag.sh',
+ project_source_root,
+ get_option('version-tag'),
meson.project_version()]
+version_h = vcs_tag(
+ input : 'src/version/version.h.in',
+ output : 'version.h',
+ command: vcs_tagger)
+
+versiondep = declare_dependency(sources: version_h)
+
sed = find_program('sed')
awk = find_program('awk')
m4 = find_program('m4')
env = find_program('env')
perl = find_program('perl', required : false)
-meson_make_symlink = meson.source_root() + '/tools/meson-make-symlink.sh'
+meson_make_symlink = project_source_root + '/tools/meson-make-symlink.sh'
mkdir_p = 'mkdir -p $DESTDIR/@0@'
test_efi_create_disk_sh = find_program('test/test-efi-create-disk.sh')
splash_bmp = files('test/splash.bmp')
dev_kvm_mode = get_option('dev-kvm-mode')
substs.set('DEV_KVM_MODE', dev_kvm_mode)
conf.set10('DEV_KVM_UACCESS', dev_kvm_mode != '0666')
-substs.set('GROUP_RENDER_MODE', get_option('group-render-mode'))
+group_render_mode = get_option('group-render-mode')
+substs.set('GROUP_RENDER_MODE', group_render_mode)
+conf.set10('GROUP_RENDER_UACCESS', group_render_mode != '0666')
kill_user_processes = get_option('default-kill-user-processes')
conf.set10('KILL_USER_PROCESSES', kill_user_processes)
conf.set_quoted('NTP_SERVERS', ntp_servers)
substs.set('NTP_SERVERS', ntp_servers)
+default_locale = get_option('default-locale')
+if default_locale == ''
+ if not meson.is_cross_build()
+ choose_default_locale_sh = find_program('tools/choose-default-locale.sh')
+ default_locale = run_command(choose_default_locale_sh).stdout().strip()
+ else
+ default_locale = 'C.UTF-8'
+ endif
+endif
+conf.set_quoted('SYSTEMD_DEFAULT_LOCALE', default_locale)
+
conf.set_quoted('GETTEXT_PACKAGE', meson.project_name())
substs.set('SUSHELL', get_option('debug-shell'))
'src/udev',
'src/libudev',
'src/core',
+ 'src/shutdown',
'src/libsystemd/sd-bus',
'src/libsystemd/sd-device',
'src/libsystemd/sd-event',
include_directories : includes,
install : false)
-libsystemd_sym_path = '@0@/@1@'.format(meson.current_source_dir(), libsystemd_sym)
+libsystemd_sym_path = '@0@/@1@'.format(project_source_root, libsystemd_sym)
libsystemd = shared_library(
'systemd',
disable_mempool_c,
subdir('src/libudev')
subdir('src/shared')
subdir('src/core')
+subdir('src/shutdown')
subdir('src/udev')
subdir('src/network')
module = tuple[0]
sym = 'src/nss-@0@/nss-@0@.sym'.format(module)
- version_script_arg = join_paths(meson.source_root(), sym)
+ version_script_arg = join_paths(project_source_root, sym)
nss = shared_library(
'nss_' + module,
include_directories : includes,
link_with : [libcore,
libshared],
- dependencies : [threads,
+ dependencies : [versiondep,
+ threads,
librt,
libseccomp,
libselinux,
include_directories : includes,
link_with : [libcore,
libshared],
- dependencies : [threads,
+ dependencies : [versiondep,
+ threads,
librt,
libseccomp,
libselinux,
executable('systemd-fstab-generator',
'src/fstab-generator/fstab-generator.c',
- 'src/core/mount-setup.c',
include_directories : includes,
- link_with : [libshared],
+ link_with : [libcore_shared,
+ libshared],
install_rpath : rootlibexecdir,
install : true,
install_dir : systemgeneratordir)
public_programs += exe
if conf.get('HAVE_PAM') == 1
- version_script_arg = join_paths(meson.source_root(), pam_systemd_sym)
+ version_script_arg = join_paths(project_source_root, pam_systemd_sym)
pam_systemd = shared_library(
'pam_systemd',
pam_systemd_c,
libbasic_gcrypt]
endif
-exe = executable('systemctl', 'src/systemctl/systemctl.c',
+exe = executable('systemctl',
+ 'src/systemctl/systemctl.c',
+ 'src/systemctl/sysv-compat.h',
+ 'src/systemctl/sysv-compat.c',
include_directories : includes,
link_with : systemctl_link_with,
dependencies : [threads,
systemd_pull_sources,
include_directories : includes,
link_with : [libshared],
- dependencies : [libcurl,
+ dependencies : [versiondep,
+ libcurl,
libz,
libbzip2,
libxz,
systemd_journal_upload_sources,
include_directories : includes,
link_with : [libshared],
- dependencies : [threads,
+ dependencies : [versiondep,
+ threads,
libcurl,
libgnutls,
libxz,
executable('systemd-remount-fs',
'src/remount-fs/remount-fs.c',
- 'src/core/mount-setup.c',
- 'src/core/mount-setup.h',
include_directories : includes,
- link_with : [libshared],
+ link_with : [libcore_shared,
+ libshared],
install_rpath : rootlibexecdir,
install : true,
install_dir : rootlibexecdir)
executable('systemd-machine-id-setup',
'src/machine-id-setup/machine-id-setup-main.c',
- 'src/core/machine-id-setup.c',
- 'src/core/machine-id-setup.h',
include_directories : includes,
- link_with : [libshared],
+ link_with : [libcore_shared,
+ libshared],
install_rpath : rootlibexecdir,
install : true,
install_dir : rootbindir)
install : true,
install_dir : rootlibexecdir)
+install_data('src/sleep/sleep.conf',
+ install_dir : pkgsysconfdir)
+
exe = executable('systemd-sysctl',
'src/sysctl/sysctl.c',
include_directories : includes,
'src/stdio-bridge/stdio-bridge.c',
include_directories : includes,
link_with : [libshared],
+ dependencies : [versiondep],
install_rpath : rootlibexecdir,
install : true)
public_programs += exe
link_with : [libudev_core,
libsystemd_network,
libudev_static],
- dependencies : [threads,
+ dependencies : [versiondep,
+ threads,
libkmod,
libidn,
libacl,
link_with : [libudev_core,
libsystemd_network,
libudev_static],
- dependencies : [threads,
+ dependencies : [versiondep,
+ threads,
libkmod,
libidn,
libacl,
executable('systemd-shutdown',
systemd_shutdown_sources,
include_directories : includes,
- link_with : [libshared],
+ link_with : [libcore_shared,
+ libshared],
dependencies : [libmount],
install_rpath : rootlibexecdir,
install : true,
exe = executable('systemd-nspawn',
systemd_nspawn_sources,
- 'src/core/mount-setup.c', # FIXME: use a variable?
- 'src/core/mount-setup.h',
- 'src/core/loopback-setup.c',
- 'src/core/loopback-setup.h',
include_directories : includes,
- link_with : [libnspawn_core,
+ link_with : [libcore_shared,
+ libnspawn_core,
libshared],
- dependencies : [libblkid],
+ dependencies : [libblkid,
+ libseccomp],
install_rpath : rootlibexecdir,
install : true)
public_programs += exe
'systemd-runtest.env',
output : 'systemd-runtest.env',
command : ['sh', '-c', '{ ' +
- 'echo SYSTEMD_TEST_DATA=@0@; '.format(join_paths(meson.current_source_dir(), 'test')) +
+ 'echo SYSTEMD_TEST_DATA=@0@; '.format(join_paths(project_source_root, 'test')) +
'echo SYSTEMD_CATALOG_DIR=@0@; '.format(join_paths(meson.current_build_dir(), 'catalog')) +
'} >@OUTPUT@'],
build_by_default : true)
sources,
include_directories : incs,
link_with : link_with,
- dependencies : dependencies,
+ dependencies : [versiondep,
+ dependencies],
c_args : defs,
build_by_default : want_tests != 'false',
install_rpath : rootlibexecdir,
test('@0@:@1@:@2@'.format(b, c, sanitizer),
env,
args : [exe.full_path(),
- join_paths(meson.source_root(), p)])
+ join_paths(project_source_root, p)])
endif
endforeach
endif
if git.found()
all_files = run_command(
git,
- ['--git-dir=@0@/.git'.format(meson.source_root()),
+ ['--git-dir=@0@/.git'.format(project_source_root),
'ls-files',
':/*.[ch]'])
all_files = files(all_files.stdout().split())
custom_target(
'tags',
output : 'tags',
- command : [env, 'etags', '-o', '@0@/TAGS'.format(meson.source_root())] + all_files)
+ command : [env, 'etags', '-o', '@0@/TAGS'.format(project_source_root)] + all_files)
run_target(
'ctags',
- command : [env, 'ctags', '-o', '@0@/tags'.format(meson.source_root())] + all_files)
+ command : [env, 'ctags', '-o', '@0@/tags'.format(project_source_root)] + all_files)
endif
if git.found()
if git.found()
git_head = run_command(
git,
- ['--git-dir=@0@/.git'.format(meson.source_root()),
+ ['--git-dir=@0@/.git'.format(project_source_root),
'rev-parse', 'HEAD']).stdout().strip()
git_head_short = run_command(
git,
- ['--git-dir=@0@/.git'.format(meson.source_root()),
+ ['--git-dir=@0@/.git'.format(project_source_root),
'rev-parse', '--short=7', 'HEAD']).stdout().strip()
run_target(
'git-snapshot',
command : ['git', 'archive',
- '-o', '@0@/systemd-@1@.tar.gz'.format(meson.source_root(),
+ '-o', '@0@/systemd-@1@.tar.gz'.format(project_source_root,
git_head_short),
'--prefix', 'systemd-@0@/'.format(git_head),
'HEAD'])
depends : [man, libsystemd, libudev],
command : [meson_check_api_docs_sh, libsystemd.full_path(), libudev.full_path()])
-run_target(
- 'make-index-md',
- command : ['sh', '@0@/tools/make-index-md.sh'.format(meson.source_root()), meson.source_root()])
-
############################################################
status = [
'default DNS-over-TLS mode: @0@'.format(default_dns_over_tls),
'default cgroup hierarchy: @0@'.format(default_hierarchy),
'default net.naming-scheme setting: @0@'.format(default_net_naming_scheme),
- 'default KillUserProcesses setting: @0@'.format(kill_user_processes)]
+ 'default KillUserProcesses setting: @0@'.format(kill_user_processes),
+ 'default locale: @0@'.format(default_locale)]
alt_dns_servers = '\n '.join(dns_servers.split(' '))
alt_ntp_servers = '\n '.join(ntp_servers.split(' '))