X-Git-Url: http://git.ipfire.org/?a=blobdiff_plain;f=meson.build;h=c7c0c3ffd06f5d14fdee7f8b341c504df4f9f519;hb=3041250a9f7426b925498bdd9616e2172bd62a0a;hp=23a606fb90aaf2cbc543c9daac6f9e932354dd87;hpb=3170dfe42d8f609cacd29e3f260c78e6ced17a59;p=thirdparty%2Fsystemd.git diff --git a/meson.build b/meson.build index 23a606fb90a..c7c0c3ffd06 100644 --- a/meson.build +++ b/meson.build @@ -1,7 +1,7 @@ # SPDX-License-Identifier: LGPL-2.1+ project('systemd', 'c', - version : '241', + version : '242', license : 'LGPLv2+', default_options: [ 'c_std=gnu99', @@ -12,8 +12,8 @@ project('systemd', 'c', 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 @@ -26,17 +26,24 @@ substs = configuration_data() 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 @@ -276,6 +283,7 @@ substs.set('RC_LOCAL_SCRIPT_PATH_START', get_option('rc-loc 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()) ##################################################################### @@ -296,9 +304,18 @@ else 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 = [ @@ -336,7 +353,8 @@ 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', @@ -378,6 +396,16 @@ if get_option('buildtype') != 'debug' 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') @@ -396,11 +424,14 @@ endif 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 ')) conf.set('SIZEOF_UID_T', cc.sizeof('uid_t', prefix : '#include ')) @@ -439,96 +470,6 @@ endforeach 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 '], - ['IFLA_IPTUN_ENCAP_DPORT', 'linux/if_tunnel.h', '#include '], - ['IFLA_IPTUN_COLLECT_METADATA', 'linux/if_tunnel.h', '#include '], - ['IFLA_IPTUN_FWMARK', 'linux/if_tunnel.h', '#include '], - ['IFLA_GRE_ENCAP_DPORT', 'linux/if_tunnel.h', '#include '], - ['IFLA_GRE_COLLECT_METADATA', 'linux/if_tunnel.h', '#include '], - ['IFLA_GRE_IGNORE_DF', 'linux/if_tunnel.h', '#include '], - ['IFLA_GRE_FWMARK', 'linux/if_tunnel.h', '#include '], - ['IFLA_GRE_ERSPAN_INDEX', 'linux/if_tunnel.h', '#include '], - ['IFLA_GRE_ERSPAN_HWID', 'linux/if_tunnel.h', '#include '], - ['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 @@ -574,8 +515,8 @@ endif ##################################################################### -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()] @@ -594,7 +535,7 @@ git = find_program('git', required : false) 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') @@ -665,11 +606,8 @@ if not cc.has_header('sys/capability.h') 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', @@ -817,7 +755,9 @@ conf.set10('ENABLE_WHEEL_GROUP', get_option('wheel-group')) 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) @@ -891,7 +831,7 @@ libmount = dependency('mount', 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') @@ -903,7 +843,7 @@ endif 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') @@ -915,7 +855,7 @@ endif 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() @@ -933,7 +873,7 @@ endif 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', @@ -946,7 +886,7 @@ endif 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 @@ -956,7 +896,7 @@ endif 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 @@ -966,7 +906,7 @@ endif 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 @@ -976,7 +916,7 @@ endif 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') @@ -988,7 +928,7 @@ endif 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() @@ -1000,7 +940,7 @@ endif 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') @@ -1012,7 +952,7 @@ endif 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') @@ -1030,7 +970,7 @@ conf.set10('HAVE_LIBCRYPTSETUP', have) 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') @@ -1047,7 +987,7 @@ if want_libidn == 'true' and want_libidn2 == '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() @@ -1056,7 +996,7 @@ else 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') @@ -1067,7 +1007,7 @@ endif 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() @@ -1078,7 +1018,7 @@ endif 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() @@ -1089,7 +1029,7 @@ endif 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() @@ -1104,7 +1044,7 @@ endif 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') @@ -1116,7 +1056,7 @@ endif 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') @@ -1128,7 +1068,7 @@ endif 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() @@ -1139,7 +1079,7 @@ endif 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() @@ -1150,7 +1090,7 @@ endif 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() @@ -1161,7 +1101,7 @@ endif 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() @@ -1172,7 +1112,7 @@ endif 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') @@ -1184,7 +1124,7 @@ endif 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') @@ -1207,7 +1147,7 @@ endif 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') @@ -1226,7 +1166,7 @@ endif 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') @@ -1238,7 +1178,7 @@ endif 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 @@ -1279,7 +1219,7 @@ conf.set10('DNS_OVER_TLS_USE_GNUTLS', have_gnutls) 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 @@ -1310,7 +1250,7 @@ if want_remote != 'false' 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') @@ -1475,7 +1415,7 @@ libjournal_core = static_library( 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, @@ -1578,7 +1518,7 @@ foreach tuple : [['myhostname', 'ENABLE_NSS_MYHOSTNAME'], 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, @@ -1589,8 +1529,7 @@ foreach tuple : [['myhostname', 'ENABLE_NSS_MYHOSTNAME'], # 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, @@ -1715,9 +1654,9 @@ executable('systemd-run-generator', 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) @@ -1844,7 +1783,7 @@ if conf.get('ENABLE_LOGIND') == 1 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, @@ -1943,7 +1882,10 @@ else 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, @@ -2355,20 +2297,18 @@ endif 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) @@ -2546,6 +2486,7 @@ exe = executable('systemd-mount', 'src/mount/mount-tool.c', include_directories : includes, link_with : [libshared], + dependencies: [libmount], install_rpath : rootlibexecdir, install : true) public_programs += exe @@ -2680,12 +2621,9 @@ public_programs += exe executable('systemd-shutdown', systemd_shutdown_sources, - 'src/core/mount-setup.c', - 'src/core/mount-setup.h', - 'src/core/killall.c', - 'src/core/killall.h', include_directories : includes, - link_with : [libshared], + link_with : [libcore_shared, + libshared], dependencies : [libmount], install_rpath : rootlibexecdir, install : true, @@ -2726,14 +2664,12 @@ endif 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 @@ -2785,7 +2721,7 @@ custom_target( '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) @@ -2897,13 +2833,24 @@ foreach tuple : fuzzers 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( @@ -2913,6 +2860,7 @@ foreach tuple : fuzzers link_with : link_with, dependencies : dependencies, c_args : defs, + link_args: link_args, install : false) endforeach endif @@ -3015,7 +2963,7 @@ foreach tuple : sanitizers 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 @@ -3027,7 +2975,7 @@ endforeach 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()) @@ -3035,10 +2983,10 @@ if git.found() 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() @@ -3051,17 +2999,17 @@ endif 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'])