# SPDX-License-Identifier: LGPL-2.1+
project('systemd', 'c',
- version : '241',
+ version : '242',
license : 'LGPLv2+',
default_options: [
'c_std=gnu99',
meson_version : '>= 0.46',
)
-libsystemd_version = '0.25.0'
-libudev_version = '1.6.13'
+libsystemd_version = '0.26.0'
+libudev_version = '1.6.14'
# 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
- error('only one of oss-fuzz and llvm-fuzz can be specified')
+want_fuzzbuzz = get_option('fuzzbuzz')
+if want_ossfuzz + want_libfuzzer + want_fuzzbuzz > 1
+ error('only one of oss-fuzz, llvm-fuzz or fuzzbuzz can be specified')
endif
-fuzzer_build = want_ossfuzz or want_libfuzzer
+
+skip_deps = want_ossfuzz or want_libfuzzer
+fuzzer_build = want_ossfuzz or want_libfuzzer or want_fuzzbuzz
#####################################################################
# 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')
conf.set_quoted('SYSTEM_SYSVINIT_PATH', sysvinit_path)
conf.set_quoted('SYSTEM_SYSVRCND_PATH', sysvrcnd_path)
conf.set_quoted('RC_LOCAL_SCRIPT_PATH_START', get_option('rc-local'))
-conf.set_quoted('RC_LOCAL_SCRIPT_PATH_STOP', get_option('halt-local'))
conf.set('ANSI_OK_COLOR', 'ANSI_' + get_option('ok-color').underscorify().to_upper())
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)
substs.set('SYSTEM_SYSVINIT_PATH', sysvinit_path)
substs.set('SYSTEM_SYSVRCND_PATH', sysvrcnd_path)
substs.set('RC_LOCAL_SCRIPT_PATH_START', get_option('rc-local'))
-substs.set('RC_LOCAL_SCRIPT_PATH_STOP', get_option('halt-local'))
substs.set('MEMORY_ACCOUNTING_DEFAULT', memory_accounting_default ? 'yes' : 'no')
substs.set('HIGH_RLIMIT_NOFILE', conf.get('HIGH_RLIMIT_NOFILE'))
+substs.set('BUILD_ROOT', meson.current_build_dir())
#####################################################################
endif
if want_libfuzzer
- fuzzing_engine = meson.get_compiler('cpp').find_library('Fuzzer')
+ fuzzing_engine = meson.get_compiler('cpp').find_library('Fuzzer', required : false)
+ if fuzzing_engine.found()
+ add_project_arguments('-fsanitize-coverage=trace-pc-guard,trace-cmp', language : 'c')
+ elif cc.has_argument('-fsanitize=fuzzer-no-link')
+ add_project_arguments('-fsanitize=fuzzer-no-link', language : 'c')
+ else
+ error('Looks like neither libFuzzer nor -fsanitize=fuzzer-no-link is supported')
+ endif
elif want_ossfuzz
fuzzing_engine = meson.get_compiler('cpp').find_library('FuzzingEngine')
+elif want_fuzzbuzz
+ fuzzing_engine = meson.get_compiler('cpp').find_library(get_option('fuzzbuzz-engine'), dirs: get_option('fuzzbuzz-engine-dir'))
endif
possible_cc_flags = [
'-Wno-missing-field-initializers',
'-Wno-unused-result',
'-Wno-format-signedness',
- '-Wno-error=#warnings',
+ '-Wno-error=#warnings', # clang
+ '-Wno-string-plus-int', # clang
# work-around for gcc 7.1 turning this on on its own.
'-Wno-error=nonnull',
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')
cpp = ' '.join(cc.cmd_array()) + ' -E'
+has_wstringop_truncation = cc.has_argument('-Wstringop-truncation')
+
#####################################################################
# compilation result tests
conf.set('_GNU_SOURCE', true)
conf.set('__SANE_USERSPACE_TYPES__', true)
+conf.set10('HAVE_WSTRINGOP_TRUNCATION', has_wstringop_truncation)
conf.set('SIZEOF_PID_T', cc.sizeof('pid_t', prefix : '#include <sys/types.h>'))
conf.set('SIZEOF_UID_T', cc.sizeof('uid_t', prefix : '#include <sys/types.h>'))
conf.set10('WANT_LINUX_STAT_H', want_linux_stat_h)
-foreach decl : [['ETHTOOL_LINK_MODE_10baseT_Half_BIT', 'linux/ethtool.h'],
- ['ETHTOOL_LINK_MODE_25000baseCR_Full_BIT', 'linux/ethtool.h'],
- ['ETHTOOL_LINK_MODE_50000baseSR2_Full_BIT', 'linux/ethtool.h'],
- ['ETHTOOL_LINK_MODE_1000baseX_Full_BIT', 'linux/ethtool.h'],
- ['ETHTOOL_LINK_MODE_2500baseT_Full_BIT', 'linux/ethtool.h'],
- ['ETHTOOL_LINK_MODE_FEC_NONE_BIT', 'linux/ethtool.h'],
- ['FRA_TUN_ID', 'linux/fib_rules.h'],
- ['FRA_SUPPRESS_PREFIXLEN', 'linux/fib_rules.h'],
- ['FRA_PAD', 'linux/fib_rules.h'],
- ['FRA_L3MDEV', 'linux/fib_rules.h'],
- ['FRA_UID_RANGE', 'linux/fib_rules.h'],
- ['FRA_DPORT_RANGE', 'linux/fib_rules.h'],
- ['FOU_ATTR_REMCSUM_NOPARTIAL', 'linux/fou.h'],
- ['FOU_CMD_GET', 'linux/fou.h'],
- ['IFA_FLAGS', 'linux/if_addr.h'],
- ['IFLA_BRIDGE_VLAN_TUNNEL_INFO', 'linux/if_bridge.h'],
- ['IFLA_INET6_ADDR_GEN_MODE', 'linux/if_link.h'],
- ['IN6_ADDR_GEN_MODE_STABLE_PRIVACY', 'linux/if_link.h'],
- ['IN6_ADDR_GEN_MODE_RANDOM', 'linux/if_link.h'],
- ['IFLA_IPVLAN_MODE', 'linux/if_link.h'],
- ['IPVLAN_MODE_L3S', 'linux/if_link.h'],
- ['IFLA_IPVLAN_FLAGS', 'linux/if_link.h'],
- ['IFLA_PHYS_PORT_ID', 'linux/if_link.h'],
- ['IFLA_CARRIER_CHANGES', 'linux/if_link.h'],
- ['IFLA_PHYS_SWITCH_ID', 'linux/if_link.h'],
- ['IFLA_LINK_NETNSID', 'linux/if_link.h'],
- ['IFLA_PHYS_PORT_NAME', 'linux/if_link.h'],
- ['IFLA_PROTO_DOWN', 'linux/if_link.h'],
- ['IFLA_GSO_MAX_SIZE', 'linux/if_link.h'],
- ['IFLA_PAD', 'linux/if_link.h'],
- ['IFLA_XDP', 'linux/if_link.h'],
- ['IFLA_EVENT', 'linux/if_link.h'],
- ['IFLA_IF_NETNSID', 'linux/if_link.h'],
- ['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'],
- ['IFLA_BOND_TLB_DYNAMIC_LB', 'linux/if_link.h'],
- ['IFLA_VXLAN_UDP_ZERO_CSUM6_RX', 'linux/if_link.h'],
- ['IFLA_VXLAN_REMCSUM_NOPARTIAL', 'linux/if_link.h'],
- ['IFLA_VXLAN_COLLECT_METADATA', 'linux/if_link.h'],
- ['IFLA_VXLAN_LABEL', 'linux/if_link.h'],
- ['IFLA_VXLAN_GPE', 'linux/if_link.h'],
- ['IFLA_VXLAN_TTL_INHERIT', 'linux/if_link.h'],
- ['IFLA_GENEVE_TOS', 'linux/if_link.h'],
- ['IFLA_GENEVE_COLLECT_METADATA', 'linux/if_link.h'],
- ['IFLA_GENEVE_REMOTE6', 'linux/if_link.h'],
- ['IFLA_GENEVE_UDP_ZERO_CSUM6_RX', 'linux/if_link.h'],
- ['IFLA_GENEVE_LABEL', 'linux/if_link.h'],
- ['IFLA_GENEVE_TTL_INHERIT', 'linux/if_link.h'],
- ['IFLA_BR_MAX_AGE', 'linux/if_link.h'],
- ['IFLA_BR_PRIORITY', 'linux/if_link.h'],
- ['IFLA_BR_VLAN_PROTOCOL', 'linux/if_link.h'],
- ['IFLA_BR_VLAN_DEFAULT_PVID', 'linux/if_link.h'],
- ['IFLA_BR_VLAN_STATS_ENABLED', 'linux/if_link.h'],
- ['IFLA_BR_MCAST_STATS_ENABLED', 'linux/if_link.h'],
- ['IFLA_BR_MCAST_MLD_VERSION', 'linux/if_link.h'],
- ['IFLA_BR_VLAN_STATS_PER_PORT', 'linux/if_link.h'],
- ['IFLA_BRPORT_LEARNING_SYNC', 'linux/if_link.h'],
- ['IFLA_BRPORT_PROXYARP_WIFI', 'linux/if_link.h'],
- ['IFLA_BRPORT_MULTICAST_ROUTER', 'linux/if_link.h'],
- ['IFLA_BRPORT_PAD', 'linux/if_link.h'],
- ['IFLA_BRPORT_MCAST_FLOOD', 'linux/if_link.h'],
- ['IFLA_BRPORT_VLAN_TUNNEL', 'linux/if_link.h'],
- ['IFLA_BRPORT_BCAST_FLOOD', 'linux/if_link.h'],
- ['IFLA_BRPORT_NEIGH_SUPPRESS', 'linux/if_link.h'],
- ['IFLA_BRPORT_ISOLATED', 'linux/if_link.h'],
- ['IFLA_BRPORT_BACKUP_PORT', 'linux/if_link.h'],
- ['IFLA_VRF_TABLE', 'linux/if_link.h'],
- # if_tunnel.h is buggy and cannot be included on its own
- ['IFLA_VTI_FWMARK', 'linux/if_tunnel.h', '#include <net/if.h>'],
- ['IFLA_IPTUN_ENCAP_DPORT', 'linux/if_tunnel.h', '#include <net/if.h>'],
- ['IFLA_IPTUN_COLLECT_METADATA', 'linux/if_tunnel.h', '#include <net/if.h>'],
- ['IFLA_IPTUN_FWMARK', 'linux/if_tunnel.h', '#include <net/if.h>'],
- ['IFLA_GRE_ENCAP_DPORT', 'linux/if_tunnel.h', '#include <net/if.h>'],
- ['IFLA_GRE_COLLECT_METADATA', 'linux/if_tunnel.h', '#include <net/if.h>'],
- ['IFLA_GRE_IGNORE_DF', 'linux/if_tunnel.h', '#include <net/if.h>'],
- ['IFLA_GRE_FWMARK', 'linux/if_tunnel.h', '#include <net/if.h>'],
- ['IFLA_GRE_ERSPAN_INDEX', 'linux/if_tunnel.h', '#include <net/if.h>'],
- ['IFLA_GRE_ERSPAN_HWID', 'linux/if_tunnel.h', '#include <net/if.h>'],
- ['LO_FLAGS_PARTSCAN', 'linux/loop.h'],
- ]
- prefix = decl.length() > 2 ? decl[2] : ''
- have = cc.has_header_symbol(decl[1], decl[0], prefix : prefix)
- conf.set10('HAVE_' + decl[0], have)
-endforeach
-
foreach ident : ['secure_getenv', '__secure_getenv']
conf.set10('HAVE_' + ident.to_upper(), cc.has_function(ident))
endforeach
#####################################################################
-vcs_tagger = [meson.source_root() + '/tools/meson-vcs-tag.sh',
- meson.source_root(),
+vcs_tagger = [project_source_root + '/tools/meson-vcs-tag.sh',
+ project_source_root,
get_option('version-tag'),
meson.project_version()]
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')
error('POSIX caps headers not found')
endif
foreach header : ['crypt.h',
- 'linux/btrfs_tree.h',
- 'linux/fou.h',
'linux/memfd.h',
'linux/vm_sockets.h',
- 'linux/can/vxcan.h',
'sys/auxv.h',
'valgrind/memcheck.h',
'valgrind/valgrind.h',
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)
version : fuzzer_build ? '>= 0' : '>= 2.30')
want_seccomp = get_option('seccomp')
-if want_seccomp != 'false' and not fuzzer_build
+if want_seccomp != 'false' and not skip_deps
libseccomp = dependency('libseccomp',
version : '>= 2.3.1',
required : want_seccomp == 'true')
conf.set10('HAVE_SECCOMP', have)
want_selinux = get_option('selinux')
-if want_selinux != 'false' and not fuzzer_build
+if want_selinux != 'false' and not skip_deps
libselinux = dependency('libselinux',
version : '>= 2.1.9',
required : want_selinux == 'true')
conf.set10('HAVE_SELINUX', have)
want_apparmor = get_option('apparmor')
-if want_apparmor != 'false' and not fuzzer_build
+if want_apparmor != 'false' and not skip_deps
libapparmor = dependency('libapparmor',
required : want_apparmor == 'true')
have = libapparmor.found()
want_polkit = get_option('polkit')
install_polkit = false
install_polkit_pkla = false
-if want_polkit != 'false' and not fuzzer_build
+if want_polkit != 'false' and not skip_deps
install_polkit = true
libpolkit = dependency('polkit-gobject-1',
conf.set10('ENABLE_POLKIT', install_polkit)
want_acl = get_option('acl')
-if want_acl != 'false' and not fuzzer_build
+if want_acl != 'false' and not skip_deps
libacl = cc.find_library('acl', required : want_acl == 'true')
have = libacl.found()
else
conf.set10('HAVE_ACL', have)
want_audit = get_option('audit')
-if want_audit != 'false' and not fuzzer_build
+if want_audit != 'false' and not skip_deps
libaudit = dependency('audit', required : want_audit == 'true')
have = libaudit.found()
else
conf.set10('HAVE_AUDIT', have)
want_blkid = get_option('blkid')
-if want_blkid != 'false' and not fuzzer_build
+if want_blkid != 'false' and not skip_deps
libblkid = dependency('blkid', required : want_blkid == 'true')
have = libblkid.found()
else
conf.set10('HAVE_BLKID', have)
want_kmod = get_option('kmod')
-if want_kmod != 'false' and not fuzzer_build
+if want_kmod != 'false' and not skip_deps
libkmod = dependency('libkmod',
version : '>= 15',
required : want_kmod == 'true')
conf.set10('HAVE_KMOD', have)
want_pam = get_option('pam')
-if want_pam != 'false' and not fuzzer_build
+if want_pam != 'false' and not skip_deps
libpam = cc.find_library('pam', required : want_pam == 'true')
libpam_misc = cc.find_library('pam_misc', required : want_pam == 'true')
have = libpam.found() and libpam_misc.found()
conf.set10('HAVE_PAM', have)
want_microhttpd = get_option('microhttpd')
-if want_microhttpd != 'false' and not fuzzer_build
+if want_microhttpd != 'false' and not skip_deps
libmicrohttpd = dependency('libmicrohttpd',
version : '>= 0.9.33',
required : want_microhttpd == 'true')
conf.set10('HAVE_MICROHTTPD', have)
want_libcryptsetup = get_option('libcryptsetup')
-if want_libcryptsetup != 'false' and not fuzzer_build
+if want_libcryptsetup != 'false' and not skip_deps
libcryptsetup = dependency('libcryptsetup',
version : '>= 1.6.0',
required : want_libcryptsetup == 'true')
conf.set10('HAVE_LIBCRYPTSETUP_SECTOR_SIZE', have_sector)
want_libcurl = get_option('libcurl')
-if want_libcurl != 'false' and not fuzzer_build
+if want_libcurl != 'false' and not skip_deps
libcurl = dependency('libcurl',
version : '>= 7.32.0',
required : want_libcurl == 'true')
error('libidn and libidn2 cannot be requested simultaneously')
endif
-if want_libidn != 'false' and want_libidn2 != 'true' and not fuzzer_build
+if want_libidn != 'false' and want_libidn2 != 'true' and not skip_deps
libidn = dependency('libidn',
required : want_libidn == 'true')
have = libidn.found()
libidn = []
endif
conf.set10('HAVE_LIBIDN', have)
-if not have and want_libidn2 != 'false' and not fuzzer_build
+if not have and want_libidn2 != 'false' and not skip_deps
# libidn is used for both libidn and libidn2 objects
libidn = dependency('libidn2',
required : want_libidn2 == 'true')
conf.set10('HAVE_LIBIDN2', have)
want_libiptc = get_option('libiptc')
-if want_libiptc != 'false' and not fuzzer_build
+if want_libiptc != 'false' and not skip_deps
libiptc = dependency('libiptc',
required : want_libiptc == 'true')
have = libiptc.found()
conf.set10('HAVE_LIBIPTC', have)
want_qrencode = get_option('qrencode')
-if want_qrencode != 'false' and not fuzzer_build
+if want_qrencode != 'false' and not skip_deps
libqrencode = dependency('libqrencode',
required : want_qrencode == 'true')
have = libqrencode.found()
conf.set10('HAVE_QRENCODE', have)
want_gcrypt = get_option('gcrypt')
-if want_gcrypt != 'false' and not fuzzer_build
+if want_gcrypt != 'false' and not skip_deps
libgcrypt = cc.find_library('gcrypt', required : want_gcrypt == 'true')
libgpg_error = cc.find_library('gpg-error', required : want_gcrypt == 'true')
have = libgcrypt.found() and libgpg_error.found()
conf.set10('HAVE_GCRYPT', have)
want_gnutls = get_option('gnutls')
-if want_gnutls != 'false' and not fuzzer_build
+if want_gnutls != 'false' and not skip_deps
libgnutls = dependency('gnutls',
version : '>= 3.1.4',
required : want_gnutls == 'true')
conf.set10('HAVE_GNUTLS', have)
want_openssl = get_option('openssl')
-if want_openssl != 'false' and not fuzzer_build
+if want_openssl != 'false' and not skip_deps
libopenssl = dependency('openssl',
version : '>= 1.1.0',
required : want_openssl == 'true')
conf.set10('HAVE_OPENSSL', have)
want_elfutils = get_option('elfutils')
-if want_elfutils != 'false' and not fuzzer_build
+if want_elfutils != 'false' and not skip_deps
libdw = dependency('libdw',
required : want_elfutils == 'true')
have = libdw.found()
conf.set10('HAVE_ELFUTILS', have)
want_zlib = get_option('zlib')
-if want_zlib != 'false' and not fuzzer_build
+if want_zlib != 'false' and not skip_deps
libz = dependency('zlib',
required : want_zlib == 'true')
have = libz.found()
conf.set10('HAVE_ZLIB', have)
want_bzip2 = get_option('bzip2')
-if want_bzip2 != 'false' and not fuzzer_build
+if want_bzip2 != 'false' and not skip_deps
libbzip2 = cc.find_library('bz2',
required : want_bzip2 == 'true')
have = libbzip2.found()
conf.set10('HAVE_BZIP2', have)
want_xz = get_option('xz')
-if want_xz != 'false' and not fuzzer_build
+if want_xz != 'false' and not skip_deps
libxz = dependency('liblzma',
required : want_xz == 'true')
have = libxz.found()
conf.set10('HAVE_XZ', have)
want_lz4 = get_option('lz4')
-if want_lz4 != 'false' and not fuzzer_build
+if want_lz4 != 'false' and not skip_deps
liblz4 = dependency('liblz4',
version : '>= 1.3.0',
required : want_lz4 == 'true')
conf.set10('HAVE_LZ4', have)
want_xkbcommon = get_option('xkbcommon')
-if want_xkbcommon != 'false' and not fuzzer_build
+if want_xkbcommon != 'false' and not skip_deps
libxkbcommon = dependency('xkbcommon',
version : '>= 0.3.0',
required : want_xkbcommon == 'true')
conf.set10('HAVE_PCRE2', have)
want_glib = get_option('glib')
-if want_glib != 'false' and not fuzzer_build
+if want_glib != 'false' and not skip_deps
libglib = dependency('glib-2.0',
version : '>= 2.22.0',
required : want_glib == 'true')
conf.set10('HAVE_GLIB', have)
want_dbus = get_option('dbus')
-if want_dbus != 'false' and not fuzzer_build
+if want_dbus != 'false' and not skip_deps
libdbus = dependency('dbus-1',
version : '>= 1.3.2',
required : want_dbus == 'true')
conf.set10('HAVE_DBUS', have)
default_dnssec = get_option('default-dnssec')
-if fuzzer_build
+if skip_deps
default_dnssec = 'no'
endif
if default_dnssec != 'no' and conf.get('HAVE_GCRYPT') == 0
have_openssl = conf.get('HAVE_OPENSSL') == 1
if dns_over_tls != 'auto' and not have_openssl
str = dns_over_tls == 'openssl' ? ' with openssl' : ''
- error('DNS-over-TLS support was requested$0$, but dependencies are not available'.format(str))
+ error('DNS-over-TLS support was requested@0@, but dependencies are not available'.format(str))
endif
endif
have = have_gnutls or have_openssl
conf.set10('DNS_OVER_TLS_USE_OPENSSL', have_openssl)
default_dns_over_tls = get_option('default-dns-over-tls')
-if fuzzer_build
+if skip_deps
default_dns_over_tls = 'no'
endif
if default_dns_over_tls != 'no' and conf.get('ENABLE_DNS_OVER_TLS') == 0
conf.get('HAVE_LIBCURL') == 1]
# sd-j-remote requires µhttpd, and sd-j-upload requires libcurl, so
# it's possible to build one without the other. Complain only if
- # support was explictly requested. The auxiliary files like sysusers
+ # support was explicitly requested. The auxiliary files like sysusers
# config should be installed when any of the programs are built.
if want_remote == 'true' and not (have_deps[0] and have_deps[1])
error('remote support was requested, but dependencies are not available')
'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,
# Note that we link NSS modules with '-z nodelete' so that mempools never get orphaned
link_args : ['-Wl,-z,nodelete',
'-shared',
- '-Wl,--version-script=' + version_script_arg,
- '-Wl,--undefined'],
+ '-Wl,--version-script=' + version_script_arg],
link_with : [libsystemd_static,
libbasic],
dependencies : [threads,
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,
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)
'src/mount/mount-tool.c',
include_directories : includes,
link_with : [libshared],
+ dependencies: [libmount],
install_rpath : rootlibexecdir,
install : true)
public_programs += exe
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)
dependencies = tuple[2]
defs = tuple.length() >= 4 ? tuple[3] : []
incs = tuple.length() >= 5 ? tuple[4] : includes
+ link_args = []
- if fuzzer_build
+ if want_ossfuzz or want_fuzzbuzz
dependencies += fuzzing_engine
+ elif want_libfuzzer
+ if fuzzing_engine.found()
+ dependencies += fuzzing_engine
+ else
+ link_args += ['-fsanitize=fuzzer']
+ endif
else
sources += 'src/fuzz/fuzz-main.c'
endif
+ if want_fuzzbuzz
+ sources += 'src/fuzz/fuzzer-entry-point.c'
+ endif
+
name = sources[0].split('/')[-1].split('.')[0]
fuzzer_exes += executable(
link_with : link_with,
dependencies : dependencies,
c_args : defs,
+ link_args: link_args,
install : false)
endforeach
endif
############################################################
+check_directives_sh = find_program('tools/check-directives.sh')
+
+if want_tests != 'false'
+ test('check-directives',
+ check_directives_sh,
+ args : project_source_root)
+endif
+
+############################################################
+
# Enable tests for all supported sanitizers
foreach tuple : sanitizers
sanitizer = tuple[0]
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'])
'bash completions directory: @0@'.format(bashcompletiondir),
'zsh completions directory: @0@'.format(zshcompletiondir),
'extra start script: @0@'.format(get_option('rc-local')),
- 'extra stop script: @0@'.format(get_option('halt-local')),
'debug shell: @0@ @ @1@'.format(get_option('debug-shell'),
get_option('debug-tty')),
'TTY GID: @0@'.format(tty_gid),