X-Git-Url: https://www.chiark.greenend.org.uk/ucgi/~ianmdlvl/git?a=blobdiff_plain;f=meson.build;h=cdb4dedc880eabd2f0e5177cdac9894dd5b6be6a;hb=70140c4f0c80a9e51ed1ea51915ac2a6407d1a2b;hp=060a2dc9ea34fffd78407ebff4b346b386c3cf2d;hpb=a6c581818f140ba4d91fcd82a009ac074d22968b;p=elogind.git diff --git a/meson.build b/meson.build index 060a2dc9e..cdb4dedc8 100644 --- a/meson.build +++ b/meson.build @@ -1,22 +1,7 @@ # SPDX-License-Identifier: LGPL-2.1+ -# -# Copyright 2017 Zbigniew Jędrzejewski-Szmek -# -# elogind is free software; you can redistribute it and/or modify it -# under the terms of the GNU Lesser General Public License as published by -# the Free Software Foundation; either version 2.1 of the License, or -# (at your option) any later version. -# -# elogind is distributed in the hope that it will be useful, but -# WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -# Lesser General Public License for more details. -# -# You should have received a copy of the GNU Lesser General Public License -# along with elogind; If not, see . project('elogind', 'c', - version : '236', + version : '239', license : 'LGPLv2+', default_options: [ 'c_std=gnu99', @@ -24,17 +9,17 @@ project('elogind', 'c', 'sysconfdir=/etc', 'localstatedir=/var', ], - meson_version : '>= 0.41', + meson_version : '>= 0.44', ) #if 0 /// UNNEEDED by elogind - libudev is external -# libsystemd_version = '0.20.0' -# libudev_version = '1.6.8' +# libsystemd_version = '0.23.0' +# libudev_version = '1.6.11' #else -libelogind_version = '0.20.0' +libelogind_version = '0.22.0' #endif // 0 -# We need the same data in three different formats, ugh! +# We need the same data in two different formats, ugh! # Also, for hysterical reasons, we use different variable # names, sometimes. Not all variables are included in every # set. Ugh, ugh, ugh! @@ -50,8 +35,6 @@ substs.set('PACKAGE_URL', 'https://github.com/elogind/elogind') #endif // 0 substs.set('PACKAGE_VERSION', meson.project_version()) -m4_defines = [] - ##################################################################### #if 0 /// elogind does not need this # @@ -70,13 +53,26 @@ m4_defines = [] ##################################################################### -split_usr = get_option('split-usr') -conf.set10('HAVE_SPLIT_USR', split_usr) +if get_option('split-usr') == 'auto' + split_usr = run_command('test', '-L', '/bin').returncode() != 0 +else + split_usr = get_option('split-usr') == 'true' +endif +conf.set10('HAVE_SPLIT_USR', split_usr, + description : '/usr/bin and /bin directories are separate') + +if get_option('split-bin') == 'auto' + split_bin = run_command('test', '-L', '/usr/sbin').returncode() != 0 +else + split_bin = get_option('split-bin') == 'true' +endif +conf.set10('HAVE_SPLIT_BIN', split_bin, + description : 'bin and sbin directories are separate') rootprefixdir = get_option('rootprefix') # Unusual rootprefixdir values are used by some distros # (see https://github.com/systemd/systemd/pull/7461). -rootprefix_default = get_option('split-usr') ? '/' : '/usr' +rootprefix_default = split_usr ? '/' : '/usr' if rootprefixdir == '' rootprefixdir = rootprefix_default endif @@ -84,10 +80,8 @@ endif #if 0 /// UNNEEDED by elogind # sysvinit_path = get_option('sysvinit-path') # sysvrcnd_path = get_option('sysvrcnd-path') -# have = sysvinit_path != '' and sysvrcnd_path != '' -# conf.set10('HAVE_SYSV_COMPAT', have, +# conf.set10('HAVE_SYSV_COMPAT', sysvinit_path != '' and sysvrcnd_path != '', # description : 'SysV init scripts and rcN.d links are supported') -# m4_defines += have ? ['-DHAVE_SYSV_COMPAT'] : [] #endif // 0 # join_paths ignore the preceding arguments if an absolute component is @@ -105,6 +99,7 @@ datadir = join_paths(prefixdir, get_option('datadir')) localstatedir = join_paths('/', get_option('localstatedir')) rootbindir = join_paths(rootprefixdir, 'bin') +rootsbindir = join_paths(rootprefixdir, split_bin ? 'sbin' : 'bin') #if 0 /// elogind has a different default # rootlibexecdir = join_paths(rootprefixdir, 'lib/systemd') #else @@ -162,12 +157,17 @@ modprobedir = join_paths(rootprefixdir, 'lib/modprobe.d') # catalogdir = join_paths(prefixdir, 'lib/systemd/catalog') # kernelinstalldir = join_paths(prefixdir, 'lib/kernel/install.d') # factorydir = join_paths(datadir, 'factory') -# docdir = join_paths(datadir, 'doc/systemd') # bootlibdir = join_paths(prefixdir, 'lib/systemd/boot/efi') # testsdir = join_paths(prefixdir, 'lib/systemd/tests') # systemdstatedir = join_paths(localstatedir, 'lib/systemd') # catalogstatedir = join_paths(systemdstatedir, 'catalog') # randomseeddir = join_paths(localstatedir, 'lib/systemd') +# profiledir = join_paths(rootlibexecdir, 'portable', 'profile') +# +# docdir = get_option('docdir') +# if docdir == '' +# docdir = join_paths(datadir, 'doc/systemd') +# endif #else pkgdatadir = join_paths(datadir, 'elogind') pkgsysconfdir = join_paths(sysconfdir, 'elogind') @@ -214,6 +214,10 @@ if pamconfdir == '' pamconfdir = join_paths(sysconfdir, 'pam.d') endif +#if 0 /// UNNEEDED by elogind +# memory_accounting_default = get_option('memory-accounting-default') +#endif // 0 + conf.set_quoted('PKGSYSCONFDIR', pkgsysconfdir) conf.set_quoted('SYSTEM_CONFIG_UNIT_PATH', join_paths(pkgsysconfdir, 'system')) #if 0 /// UNNEEDED by elogind @@ -222,6 +226,9 @@ conf.set_quoted('SYSTEM_CONFIG_UNIT_PATH', join_paths(pkgsysc # 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('USER_CONFIG_UNIT_PATH', join_paths(pkgsysconfdir, 'user')) # conf.set_quoted('USER_DATA_UNIT_PATH', userunitdir) # conf.set_quoted('CERTIFICATE_ROOT', get_option('certificate-root')) @@ -270,6 +277,8 @@ conf.set_quoted('ROOTLIBEXECDIR', rootlibexecdir) # conf.set_quoted('VENDOR_KEYRING_PATH', join_paths(rootlibexecdir, 'import-pubring.gpg')) # conf.set_quoted('USER_KEYRING_PATH', join_paths(pkgsysconfdir, 'import-pubring.gpg')) # conf.set_quoted('DOCUMENT_ROOT', join_paths(pkgdatadir, 'gatewayd')) +# conf.set('MEMORY_ACCOUNTING_DEFAULT', memory_accounting_default ? 'true' : 'false') +# conf.set_quoted('MEMORY_ACCOUNTING_DEFAULT_YES_NO', memory_accounting_default ? 'yes' : 'no') #endif // 0 conf.set_quoted('ABS_BUILD_DIR', meson.build_root()) @@ -294,12 +303,14 @@ substs.set('rootlibexecdir', rootlibexecdir) substs.set('udevrulesdir', udevrulesdir) substs.set('udevlibexecdir', udevlibexecdir) #if 0 /// UNNEEDED by elogind +# substs.set('environmentdir', environmentdir) # substs.set('catalogdir', catalogdir) # substs.set('tmpfilesdir', tmpfilesdir) # substs.set('sysusersdir', sysusersdir) # substs.set('sysctldir', sysctldir) # substs.set('binfmtdir', binfmtdir) # substs.set('modulesloaddir', modulesloaddir) +# substs.set('modprobedir', modprobedir) # substs.set('systemgeneratordir', systemgeneratordir) # substs.set('usergeneratordir', usergeneratordir) # substs.set('systemenvgeneratordir', systemenvgeneratordir) @@ -316,6 +327,7 @@ substs.set('VARLOGDIR', varlogdir) # 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') #endif // 0 ##################################################################### @@ -323,57 +335,106 @@ substs.set('VARLOGDIR', varlogdir) cc = meson.get_compiler('c') pkgconfig = import('pkgconfig') check_compilation_sh = find_program('tools/meson-check-compilation.sh') +meson_build_sh = find_program('tools/meson-build.sh') -cxx = find_program('c++', required : false) -if cxx.found() - # Used only for tests - add_languages('cpp') +if get_option('tests') != 'false' + cxx = find_program('c++', required : false) + if cxx.found() + # Used only for tests + add_languages('cpp') + endif endif -foreach arg : ['-Wextra', - '-Werror=undef', - '-Wlogical-op', - '-Wmissing-include-dirs', - '-Wold-style-definition', - '-Wpointer-arith', - '-Winit-self', - '-Wdeclaration-after-statement', - '-Wfloat-equal', - '-Wsuggest-attribute=noreturn', - '-Werror=missing-prototypes', - '-Werror=implicit-function-declaration', - '-Werror=missing-declarations', - '-Werror=return-type', - '-Werror=incompatible-pointer-types', - '-Werror=format=2', - '-Wstrict-prototypes', - '-Wredundant-decls', - '-Wmissing-noreturn', - '-Wimplicit-fallthrough=5', - '-Wshadow', - '-Wendif-labels', - '-Wstrict-aliasing=2', - '-Wwrite-strings', - '-Werror=overflow', - '-Wdate-time', - '-Wnested-externs', - '-ffast-math', - '-fno-common', - '-fdiagnostics-show-option', - '-fno-strict-aliasing', - '-fvisibility=hidden', - '-fstack-protector', - '-fstack-protector-strong', - '-fPIE', - '--param=ssp-buffer-size=4', - ] - if cc.has_argument(arg) - add_project_arguments(arg, language : 'c') - endif -endforeach +#if 0 /// elogind does not support fuzz stress testing (, yet). +# want_ossfuzz = get_option('oss-fuzz') +# want_libfuzzer = get_option('llvm-fuzz') +# fuzzer_build = want_ossfuzz or want_libfuzzer +# if want_ossfuzz and want_libfuzzer +# error('only one of oss-fuzz and llvm-fuzz can be specified') +# endif +# if want_libfuzzer +# fuzzing_engine = meson.get_compiler('cpp').find_library('Fuzzer') +# endif +# if want_ossfuzz +# fuzzing_engine = meson.get_compiler('cpp').find_library('FuzzingEngine') +# endif +#else +fuzzer_build = false +#endif // 0 + +possible_cc_flags = [ + '-Wextra', + '-Werror=undef', + '-Wlogical-op', + '-Wmissing-include-dirs', + '-Wold-style-definition', + '-Wpointer-arith', + '-Winit-self', + '-Wfloat-equal', + '-Wsuggest-attribute=noreturn', + '-Werror=missing-prototypes', + '-Werror=implicit-function-declaration', + '-Werror=missing-declarations', + '-Werror=return-type', + '-Werror=incompatible-pointer-types', + '-Werror=format=2', + '-Wstrict-prototypes', + '-Wredundant-decls', + '-Wmissing-noreturn', + '-Wimplicit-fallthrough=5', + '-Wshadow', + '-Wendif-labels', + '-Wstrict-aliasing=2', + '-Wwrite-strings', + '-Werror=overflow', + '-Werror=shift-count-overflow', + '-Werror=shift-overflow=2', + '-Wdate-time', + '-Wnested-externs', + '-ffast-math', + '-fno-common', + '-fdiagnostics-show-option', + '-fno-strict-aliasing', + '-fvisibility=hidden', + '-fstack-protector', + '-fstack-protector-strong', + '--param=ssp-buffer-size=4', +] + +# --as-needed and --no-undefined are provided by meson by default, +# run mesonconf to see what is enabled +possible_link_flags = [ + '-Wl,-z,relro', + '-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', + '-Wno-gnu-variable-sized-type-not-at-end', + ] +endif + +if get_option('buildtype') != 'debug' + possible_cc_flags += [ + '-ffunction-sections', + '-fdata-sections', + ] + + possible_link_flags += '-Wl,--gc-sections' +endif + +add_project_arguments(cc.get_supported_arguments(possible_cc_flags), language : 'c') # "negative" arguments: gcc on purpose does not return an error for "-Wno-" -# arguments, just emits a warnings. So test for the "positive" version instead. +# arguments, just emits a warning. So test for the "positive" version instead. foreach arg : ['unused-parameter', 'missing-field-initializers', 'unused-result', @@ -385,7 +446,7 @@ foreach arg : ['unused-parameter', endif endforeach -if cc.compiles(' +if cc.compiles(''' #include #include typedef uint64_t usec_t; @@ -394,30 +455,13 @@ if cc.compiles(' struct timespec now; return 0; } -', name : '-Werror=shadow with local shadowing') +''', name : '-Werror=shadow with local shadowing') add_project_arguments('-Werror=shadow', language : 'c') endif -if cc.get_id() == 'clang' - foreach arg : ['-Wno-typedef-redefinition', - '-Wno-gnu-variable-sized-type-not-at-end', - ] - if cc.has_argument(arg, - name : '@0@ is supported'.format(arg)) - add_project_arguments(arg, language : 'c') - endif - endforeach -endif - link_test_c = files('tools/meson-link-test.c') -# --as-needed and --no-undefined are provided by meson by default, -# run mesonconf to see what is enabled -foreach arg : ['-Wl,-z,relro', - '-Wl,-z,now', - '-pie', - ] - +foreach arg : possible_link_flags have = run_command(check_compilation_sh, cc.cmd_array(), '-x', 'c', arg, '-include', link_test_c).returncode() == 0 @@ -427,26 +471,6 @@ foreach arg : ['-Wl,-z,relro', endif endforeach -if get_option('buildtype') != 'debug' - foreach arg : ['-ffunction-sections', - '-fdata-sections'] - if cc.has_argument(arg, - name : '@0@ is supported'.format(arg)) - add_project_arguments(arg, language : 'c') - endif - endforeach - - foreach arg : ['-Wl,--gc-sections'] - have = run_command(check_compilation_sh, - cc.cmd_array(), '-x', 'c', arg, - '-include', link_test_c).returncode() == 0 - message('Linking with @0@ supported: @1@'.format(arg, have ? 'yes' : 'no')) - if have - add_project_link_arguments(arg, language : 'c') - endif - endforeach -endif - cpp = ' '.join(cc.cmd_array()) + ' -E' ##################################################################### @@ -467,6 +491,8 @@ decl_headers = ''' #include #include #include +//#include +//#include ''' # FIXME: key_serial_t is only defined in keyutils.h, this is bound to fail @@ -475,6 +501,7 @@ foreach decl : ['char16_t', 'key_serial_t', 'struct ethtool_link_settings', 'struct fib_rule_uid_range', + 'struct statx', ] # We get -1 if the size cannot be determined @@ -486,7 +513,7 @@ foreach decl : [['IFLA_INET6_ADDR_GEN_MODE', 'linux/if_link.h'], ['IN6_ADDR_GEN_MODE_STABLE_PRIVACY', 'linux/if_link.h'], ['IFLA_VRF_TABLE', 'linux/if_link.h'], ['IFLA_MACVLAN_FLAGS', 'linux/if_link.h'], - ['IFLA_IPVLAN_MODE', 'linux/if_link.h'], + ['IFLA_IPVLAN_FLAGS', 'linux/if_link.h'], ['IFLA_PHYS_PORT_ID', 'linux/if_link.h'], ['IFLA_BOND_AD_INFO', 'linux/if_link.h'], ['IFLA_VLAN_PROTOCOL', 'linux/if_link.h'], @@ -501,6 +528,7 @@ foreach decl : [['IFLA_INET6_ADDR_GEN_MODE', 'linux/if_link.h'], ['IFLA_BRPORT_PROXYARP', 'linux/if_link.h'], ['IFLA_BRPORT_LEARNING_SYNC', 'linux/if_link.h'], ['IFLA_BR_VLAN_DEFAULT_PVID', 'linux/if_link.h'], + ['IPVLAN_F_PRIVATE', 'linux/if_link.h'], ['NDA_IFINDEX', 'linux/neighbour.h'], ['IFA_FLAGS', 'linux/if_addr.h'], ['FRA_UID_RANGE', 'linux/fib_rules.h'], @@ -517,17 +545,17 @@ foreach ident : ['secure_getenv', '__secure_getenv'] endforeach foreach ident : [ - ['memfd_create', '''#define _GNU_SOURCE -// #include '''], - ['gettid', '''#include '''], - ['pivot_root', '''#include '''], # no known header declares pivot_root - ['name_to_handle_at', '''#define _GNU_SOURCE -// #include + ['memfd_create', '''#include '''], + ['gettid', '''#include + #include '''], + ['pivot_root', '''#include + #include '''], # no known header declares pivot_root + ['name_to_handle_at', '''#include #include #include '''], - ['setns', '''#define _GNU_SOURCE -// #include '''], - ['renameat2', '''#include '''], + ['setns', '''#include '''], + ['renameat2', '''#include +// #include '''], ['kcmp', '''#include '''], ['keyctl', '''#include #include '''], @@ -535,14 +563,18 @@ foreach ident : [ #include '''], ['bpf', '''#include #include '''], + ['statx', '''#include + #include +// #include '''], ['explicit_bzero' , '''#include '''], + ['reallocarray', '''#include '''], ] - have = cc.has_function(ident[0], prefix : ident[1]) + have = cc.has_function(ident[0], prefix : ident[1], args : '-D_GNU_SOURCE') conf.set10('HAVE_' + ident[0].to_upper(), have) endforeach -if cc.has_function('getrandom', prefix : '''#include ''') +if cc.has_function('getrandom', prefix : '''#include ''', args : '-D_GNU_SOURCE') conf.set10('USE_SYS_RANDOM_H', true) conf.set10('HAVE_GETRANDOM', true) else @@ -558,11 +590,14 @@ awk = find_program('awk') m4 = find_program('m4') stat = find_program('stat') 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' -#if 1 /// Needed by elogind +#if 0 /// elogind does not use this but needs a tool to symlink its installed headers. +# meson_make_symlink = meson.source_root() + '/tools/meson-make-symlink.sh' +#else /// Needed by elogind meson_symlink_headers = meson.source_root() + '/tools/meson-symlink_headers.sh' -#endif // 1 +#endif // 0 mkdir_p = 'mkdir -p $DESTDIR/@0@' #if 0 /// unneeded by elogind # test_efi_create_disk_sh = find_program('test/test-efi-create-disk.sh') @@ -572,10 +607,8 @@ mkdir_p = 'mkdir -p $DESTDIR/@0@' # if -Dxxx-path option is found, use that. Otherwise, check in $PATH, # /usr/sbin, /sbin, and fall back to the default from middle column. #if 0 /// elogind has a bit different list and some adaptions -# progs = [['telinit', '/lib/sysvinit/telinit'], -# ['quotaon', '/usr/sbin/quotaon' ], +# progs = [['quotaon', '/usr/sbin/quotaon' ], # ['quotacheck', '/usr/sbin/quotacheck' ], -# ['kill', '/usr/bin/kill' ], # ['kmod', '/usr/bin/kmod' ], # ['kexec', '/usr/sbin/kexec' ], # ['sulogin', '/usr/sbin/sulogin' ], @@ -585,9 +618,10 @@ mkdir_p = 'mkdir -p $DESTDIR/@0@' # ['setfont', '/usr/bin/setfont', 'KBD_SETFONT'], # ] #else -progs = [['kexec', '/usr/sbin/kexec', 'KEXEC'], +progs = [['halt', '/sbin/halt', 'HALT'], + ['kexec', '/usr/sbin/kexec', 'KEXEC'], + ['poweroff', '/sbin/poweroff', 'POWEROFF'], ['reboot', '/sbin/reboot', 'REBOOT'], - ['halt', '/sbin/halt', 'HALT'], ] #endif // 0 foreach prog : progs @@ -606,9 +640,13 @@ foreach prog : progs substs.set(name, path) endforeach -if run_command('ln', '--relative', '--help').returncode() != 0 - error('ln does not support --relative') -endif +#if 0 /// unneeded by elogind +# conf.set_quoted('TELINIT', get_option('telinit-path')) +# +# if run_command('ln', '--relative', '--help').returncode() != 0 +# error('ln does not support --relative (added in coreutils 8.16)') +# endif +#endif // 0 ############################################################ @@ -641,7 +679,8 @@ conf.set('GPERF_LEN_TYPE', gperf_len_type, if not cc.has_header('sys/capability.h') error('POSIX caps headers not found') endif -foreach header : ['linux/btrfs.h', +foreach header : ['crypt.h', + 'linux/btrfs.h', 'linux/memfd.h', 'linux/vm_sockets.h', 'sys/auxv.h', @@ -709,8 +748,11 @@ system_uid_max = get_option('system-uid-max') if system_uid_max == '' system_uid_max = run_command( awk, - 'BEGIN { uid=999 } /^\s*SYS_UID_MAX\s+/ { uid=$2 } END { print uid }', - '/etc/login.defs').stdout() + '/^\s*SYS_UID_MAX\s+/ { uid=$2 } END { print uid }', + '/etc/login.defs').stdout().strip() + if system_uid_max == '' + system_uid_max = '999' + endif endif system_uid_max = system_uid_max.to_int() conf.set('SYSTEM_UID_MAX', system_uid_max) @@ -721,8 +763,11 @@ system_gid_max = get_option('system-gid-max') if system_gid_max == '' system_gid_max = run_command( awk, - 'BEGIN { gid=999 } /^\s*SYS_GID_MAX\s+/ { gid=$2 } END { print gid }', - '/etc/login.defs').stdout() + '/^\s*SYS_GID_MAX\s+/ { gid=$2 } END { print gid }', + '/etc/login.defs').stdout().strip() + if system_gid_max == '' + system_gid_max = '999' + endif endif system_gid_max = system_gid_max.to_int() conf.set('SYSTEM_GID_MAX', system_gid_max) @@ -752,18 +797,18 @@ getent_result = run_command('getent', 'passwd', '65534') if getent_result.returncode() == 0 name = getent_result.stdout().split(':')[0] if name != nobody_user - message('WARNING:\n' + - ' The local user with the UID 65534 does not match the configured user name "@0@" of the nobody user (its name is @1@).\n'.format(nobody_user, name) + - ' Your build will result in an user table setup that is incompatible with the local system.') + warning('\n' + + 'The local user with the UID 65534 does not match the configured user name "@0@" of the nobody user (its name is @1@).\n'.format(nobody_user, name) + + 'Your build will result in an user table setup that is incompatible with the local system.') endif endif id_result = run_command('id', '-u', nobody_user) if id_result.returncode() == 0 id = id_result.stdout().to_int() if id != 65534 - message('WARNING:\n' + - ' The local user with the configured user name "@0@" of the nobody user does not have UID 65534 (it has @1@).\n'.format(nobody_user, id) + - ' Your build will result in an user table setup that is incompatible with the local system.') + warning('\n' + + 'The local user with the configured user name "@0@" of the nobody user does not have UID 65534 (it has @1@).\n'.format(nobody_user, id) + + 'Your build will result in an user table setup that is incompatible with the local system.') endif endif @@ -771,24 +816,24 @@ getent_result = run_command('getent', 'group', '65534') if getent_result.returncode() == 0 name = getent_result.stdout().split(':')[0] if name != nobody_group - message('WARNING:\n' + - ' The local group with the GID 65534 does not match the configured group name "@0@" of the nobody group (its name is @1@).\n'.format(nobody_group, name) + - ' Your build will result in an group table setup that is incompatible with the local system.') + warning('\n' + + 'The local group with the GID 65534 does not match the configured group name "@0@" of the nobody group (its name is @1@).\n'.format(nobody_group, name) + + 'Your build will result in an group table setup that is incompatible with the local system.') endif endif id_result = run_command('id', '-g', nobody_group) if id_result.returncode() == 0 id = id_result.stdout().to_int() if id != 65534 - message('WARNING:\n' + - ' The local group with the configured group name "@0@" of the nobody group does not have UID 65534 (it has @1@).\n'.format(nobody_group, id) + - ' Your build will result in an group table setup that is incompatible with the local system.') + warning('\n' + + 'The local group with the configured group name "@0@" of the nobody group does not have UID 65534 (it has @1@).\n'.format(nobody_group, id) + + 'Your build will result in an group table setup that is incompatible with the local system.') endif endif if nobody_user != nobody_group and not (nobody_user == 'nobody' and nobody_group == 'nogroup') - message('WARNING:\n' + - ' The configured user name "@0@" and group name "@0@" of the nobody user/group are not equivalent.\n'.format(nobody_user, nobody_group) + - ' Please re-check that both "nobody-user" and "nobody-group" options are correctly set.') + warning('\n' + + 'The configured user name "@0@" and group name "@0@" of the nobody user/group are not equivalent.\n'.format(nobody_user, nobody_group) + + 'Please re-check that both "nobody-user" and "nobody-group" options are correctly set.') endif conf.set_quoted('NOBODY_USER_NAME', nobody_user) @@ -809,13 +854,8 @@ substs.set('TTY_GID', tty_gid) # endif # substs.set('USERS_GID', users_gid) # -# if get_option('adm-group') -# m4_defines += ['-DENABLE_ADM_GROUP'] -# endif -# -# if get_option('wheel-group') -# m4_defines += ['-DENABLE_WHEEL_GROUP'] -# endif +# conf.set10('ENABLE_ADM_GROUP', get_option('adm-group')) +# conf.set10('ENABLE_WHEEL_GROUP', get_option('wheel-group')) # # substs.set('DEV_KVM_MODE', get_option('dev-kvm-mode')) # substs.set('GROUP_RENDER_MODE', get_option('group-render-mode')) @@ -823,6 +863,7 @@ substs.set('TTY_GID', tty_gid) kill_user_processes = get_option('default-kill-user-processes') conf.set10('KILL_USER_PROCESSES', kill_user_processes) +conf.set_quoted('KILL_USER_PROCESSES_YES_NO', kill_user_processes ? 'yes' : 'no') substs.set('KILL_USER_PROCESSES', kill_user_processes ? 'yes' : 'no') #if 0 /// UNNEEDED by elogind @@ -842,33 +883,32 @@ conf.set_quoted('GETTEXT_PACKAGE', meson.project_name()) # substs.set('DEBUGTTY', get_option('debug-tty')) #endif // 0 -debug = get_option('debug') enable_debug_hashmap = false enable_debug_mmap_cache = false #if 1 /// additional elogind debug mode enable_debug_elogind = false #endif // 1 -if debug != '' - foreach name : debug.split(',') - if name == 'hashmap' - enable_debug_hashmap = true - elif name == 'mmap-cache' - enable_debug_mmap_cache = true +foreach name : get_option('debug') + if name == 'hashmap' + enable_debug_hashmap = true + elif name == 'mmap-cache' + enable_debug_mmap_cache = true #if 1 /// additional elogind debug mode - elif name == 'elogind' - enable_debug_elogind = true + elif name == 'elogind' + enable_debug_elogind = true #endif // 1 - else - message('unknown debug option "@0@", ignoring'.format(name)) - endif - endforeach -endif + else + message('unknown debug option "@0@", ignoring'.format(name)) + endif +endforeach conf.set10('ENABLE_DEBUG_HASHMAP', enable_debug_hashmap) conf.set10('ENABLE_DEBUG_MMAP_CACHE', enable_debug_mmap_cache) #if 1 /// additional elogind debug mode conf.set10('ENABLE_DEBUG_ELOGIND', enable_debug_elogind) #endif // 1 +conf.set10('VALGRIND', get_option('valgrind')) + ##################################################################### threads = dependency('threads') @@ -885,10 +925,10 @@ endif #if 0 /// UNNEEDED by elogind # libmount = dependency('mount', -# version : '>= 2.30') +# version : fuzzer_build ? '>= 0' : '>= 2.30') # # want_seccomp = get_option('seccomp') -# if want_seccomp != 'false' +# if want_seccomp != 'false' and not fuzzer_build # libseccomp = dependency('libseccomp', # version : '>= 2.3.1', # required : want_seccomp == 'true') @@ -901,10 +941,9 @@ endif libseccomp = [] #endif // 0 conf.set10('HAVE_SECCOMP', have) -m4_defines += have ? ['-DHAVE_SECCOMP'] : [] want_selinux = get_option('selinux') -if want_selinux != 'false' +if want_selinux != 'false' and not fuzzer_build libselinux = dependency('libselinux', version : '>= 2.1.9', required : want_selinux == 'true') @@ -914,11 +953,10 @@ else libselinux = [] endif conf.set10('HAVE_SELINUX', have) -m4_defines += have ? ['-DHAVE_SELINUX'] : [] #if 0 /// UNNEEDED by elogind # want_apparmor = get_option('apparmor') -# if want_apparmor != 'false' +# if want_apparmor != 'false' and not fuzzer_build # libapparmor = dependency('libapparmor', # required : want_apparmor == 'true') # have = libapparmor.found() @@ -930,18 +968,16 @@ m4_defines += have ? ['-DHAVE_SELINUX'] : [] libapparmor = [] #endif // 0 conf.set10('HAVE_APPARMOR', have) -m4_defines += have ? ['-DHAVE_APPARMOR'] : [] smack_run_label = get_option('smack-run-label') if smack_run_label != '' conf.set_quoted('SMACK_RUN_LABEL', smack_run_label) - m4_defines += ['-DHAVE_SMACK_RUN_LABEL'] endif want_polkit = get_option('polkit') install_polkit = false install_polkit_pkla = false -if want_polkit != 'false' +if want_polkit != 'false' and not fuzzer_build install_polkit = true libpolkit = dependency('polkit-gobject-1', @@ -954,7 +990,7 @@ endif conf.set10('ENABLE_POLKIT', install_polkit) want_acl = get_option('acl') -if want_acl != 'false' +if want_acl != 'false' and not fuzzer_build libacl = cc.find_library('acl', required : want_acl == 'true') have = libacl.found() else @@ -962,10 +998,9 @@ else libacl = [] endif conf.set10('HAVE_ACL', have) -m4_defines += have ? ['-DHAVE_ACL'] : [] want_audit = get_option('audit') -if want_audit != 'false' +if want_audit != 'false' and not fuzzer_build libaudit = dependency('audit', required : want_audit == 'true') have = libaudit.found() else @@ -976,7 +1011,7 @@ conf.set10('HAVE_AUDIT', have) #if 0 /// UNNEEDED by elogind # want_blkid = get_option('blkid') -# if want_blkid != 'false' +# if want_blkid != 'false' and not fuzzer_build # libblkid = dependency('blkid', required : want_blkid == 'true') # have = libblkid.found() # else @@ -986,7 +1021,7 @@ conf.set10('HAVE_AUDIT', have) # conf.set10('HAVE_BLKID', have) # # want_kmod = get_option('kmod') -# if want_kmod != 'false' +# if want_kmod != 'false' and not fuzzer_build # libkmod = dependency('libkmod', # version : '>= 15', # required : want_kmod == 'true') @@ -1002,7 +1037,7 @@ libkmod = [] #endif // 0 want_pam = get_option('pam') -if want_pam != 'false' +if want_pam != 'false' and not fuzzer_build 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() @@ -1012,11 +1047,10 @@ else libpam_misc = [] endif conf.set10('HAVE_PAM', have) -m4_defines += have ? ['-DHAVE_PAM'] : [] #if 0 /// UNNEEDED by elogind # want_microhttpd = get_option('microhttpd') -# if want_microhttpd != 'false' +# if want_microhttpd != 'false' and not fuzzer_build # libmicrohttpd = dependency('libmicrohttpd', # version : '>= 0.9.33', # required : want_microhttpd == 'true') @@ -1026,10 +1060,9 @@ m4_defines += have ? ['-DHAVE_PAM'] : [] # libmicrohttpd = [] # endif # conf.set10('HAVE_MICROHTTPD', have) -# m4_defines += have ? ['-DHAVE_MICROHTTPD'] : [] # # want_libcryptsetup = get_option('libcryptsetup') -# if want_libcryptsetup != 'false' +# if want_libcryptsetup != 'false' and not fuzzer_build # libcryptsetup = dependency('libcryptsetup', # version : '>= 1.6.0', # required : want_libcryptsetup == 'true') @@ -1041,7 +1074,7 @@ m4_defines += have ? ['-DHAVE_PAM'] : [] # conf.set10('HAVE_LIBCRYPTSETUP', have) # # want_libcurl = get_option('libcurl') -# if want_libcurl != 'false' +# if want_libcurl != 'false' and not fuzzer_build # libcurl = dependency('libcurl', # version : '>= 7.32.0', # required : want_libcurl == 'true') @@ -1051,7 +1084,6 @@ m4_defines += have ? ['-DHAVE_PAM'] : [] # libcurl = [] # endif # conf.set10('HAVE_LIBCURL', have) -# m4_defines += have ? ['-DHAVE_LIBCURL'] : [] # # want_libidn = get_option('libidn') # want_libidn2 = get_option('libidn2') @@ -1059,7 +1091,7 @@ m4_defines += have ? ['-DHAVE_PAM'] : [] # error('libidn and libidn2 cannot be requested simultaneously') # endif # -# if want_libidn != 'false' and want_libidn2 != 'true' +# if want_libidn != 'false' and want_libidn2 != 'true' and not fuzzer_build # libidn = dependency('libidn', # required : want_libidn == 'true') # have = libidn.found() @@ -1068,8 +1100,7 @@ m4_defines += have ? ['-DHAVE_PAM'] : [] # libidn = [] # endif # conf.set10('HAVE_LIBIDN', have) -# m4_defines += have ? ['-DHAVE_LIBIDN'] : [] -# if not have and want_libidn2 != 'false' +# if not have and want_libidn2 != 'false' and not fuzzer_build # # libidn is used for both libidn and libidn2 objects # libidn = dependency('libidn2', # required : want_libidn2 == 'true') @@ -1078,10 +1109,9 @@ m4_defines += have ? ['-DHAVE_PAM'] : [] # have = false # endif # conf.set10('HAVE_LIBIDN2', have) -# m4_defines += have ? ['-DHAVE_LIBIDN2'] : [] # # want_libiptc = get_option('libiptc') -# if want_libiptc != 'false' +# if want_libiptc != 'false' and not fuzzer_build # libiptc = dependency('libiptc', # required : want_libiptc == 'true') # have = libiptc.found() @@ -1090,10 +1120,9 @@ m4_defines += have ? ['-DHAVE_PAM'] : [] # libiptc = [] # endif # conf.set10('HAVE_LIBIPTC', have) -# m4_defines += have ? ['-DHAVE_LIBIPTC'] : [] # # want_qrencode = get_option('qrencode') -# if want_qrencode != 'false' +# if want_qrencode != 'false' and not fuzzer_build # libqrencode = dependency('libqrencode', # required : want_qrencode == 'true') # have = libqrencode.found() @@ -1104,7 +1133,7 @@ m4_defines += have ? ['-DHAVE_PAM'] : [] # conf.set10('HAVE_QRENCODE', have) # # want_gcrypt = get_option('gcrypt') -# if want_gcrypt != 'false' +# if want_gcrypt != 'false' and not fuzzer_build # 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() @@ -1119,7 +1148,7 @@ m4_defines += have ? ['-DHAVE_PAM'] : [] # conf.set10('HAVE_GCRYPT', have) # # want_gnutls = get_option('gnutls') -# if want_gnutls != 'false' +# if want_gnutls != 'false' and not fuzzer_build # libgnutls = dependency('gnutls', # version : '>= 3.1.4', # required : want_gnutls == 'true') @@ -1131,7 +1160,7 @@ m4_defines += have ? ['-DHAVE_PAM'] : [] # conf.set10('HAVE_GNUTLS', have) # # want_elfutils = get_option('elfutils') -# if want_elfutils != 'false' +# if want_elfutils != 'false' and not fuzzer_build # libdw = dependency('libdw', # required : want_elfutils == 'true') # have = libdw.found() @@ -1142,7 +1171,7 @@ m4_defines += have ? ['-DHAVE_PAM'] : [] # conf.set10('HAVE_ELFUTILS', have) # # want_zlib = get_option('zlib') -# if want_zlib != 'false' +# if want_zlib != 'false' and not fuzzer_build # libz = dependency('zlib', # required : want_zlib == 'true') # have = libz.found() @@ -1153,7 +1182,7 @@ m4_defines += have ? ['-DHAVE_PAM'] : [] # conf.set10('HAVE_ZLIB', have) # # want_bzip2 = get_option('bzip2') -# if want_bzip2 != 'false' +# if want_bzip2 != 'false' and not fuzzer_build # libbzip2 = cc.find_library('bz2', # required : want_bzip2 == 'true') # have = libbzip2.found() @@ -1164,7 +1193,7 @@ m4_defines += have ? ['-DHAVE_PAM'] : [] # conf.set10('HAVE_BZIP2', have) # # want_xz = get_option('xz') -# if want_xz != 'false' +# if want_xz != 'false' and not fuzzer_build # libxz = dependency('liblzma', # required : want_xz == 'true') # have = libxz.found() @@ -1175,7 +1204,7 @@ m4_defines += have ? ['-DHAVE_PAM'] : [] # conf.set10('HAVE_XZ', have) # # want_lz4 = get_option('lz4') -# if want_lz4 != 'false' +# if want_lz4 != 'false' and not fuzzer_build # liblz4 = dependency('liblz4', # required : want_lz4 == 'true') # have = liblz4.found() @@ -1186,7 +1215,7 @@ m4_defines += have ? ['-DHAVE_PAM'] : [] # conf.set10('HAVE_LZ4', have) # # want_xkbcommon = get_option('xkbcommon') -# if want_xkbcommon != 'false' +# if want_xkbcommon != 'false' and not fuzzer_build # libxkbcommon = dependency('xkbcommon', # version : '>= 0.3.0', # required : want_xkbcommon == 'true') @@ -1214,8 +1243,19 @@ libxkbcommon = [] #endif // 0 conf.set10('HAVE_XKBCOMMON', have) +want_pcre2 = get_option('pcre2') +if want_pcre2 != 'false' + libpcre2 = dependency('libpcre2-8', + required : want_pcre2 == 'true') + have = libpcre2.found() +else + have = false + libpcre2 = [] +endif +conf.set10('HAVE_PCRE2', have) + want_glib = get_option('glib') -if want_glib != 'false' +if want_glib != 'false' and not fuzzer_build libglib = dependency('glib-2.0', version : '>= 2.22.0', required : want_glib == 'true') @@ -1234,7 +1274,7 @@ endif conf.set10('HAVE_GLIB', have) want_dbus = get_option('dbus') -if want_dbus != 'false' +if want_dbus != 'false' and not fuzzer_build libdbus = dependency('dbus-1', version : '>= 1.3.2', required : want_dbus == 'true') @@ -1247,6 +1287,9 @@ conf.set10('HAVE_DBUS', have) #if 0 /// UNNEEDED by elogind # default_dnssec = get_option('default-dnssec') +# if fuzzer_build +# default_dnssec = 'no' +# endif # if default_dnssec != 'no' and conf.get('HAVE_GCRYPT') == 0 # message('default-dnssec cannot be set to yes or allow-downgrade when gcrypt is disabled. Setting default-dnssec to no.') # default_dnssec = 'no' @@ -1255,6 +1298,29 @@ conf.set10('HAVE_DBUS', have) # 'DNSSEC_' + default_dnssec.underscorify().to_upper()) # substs.set('DEFAULT_DNSSEC_MODE', default_dnssec) # +# dns_over_tls = get_option('dns-over-tls') +# if dns_over_tls != 'false' +# have = conf.get('HAVE_GNUTLS') == 1 +# if dns_over_tls == 'true' and not have +# error('DNS-over-TLS support was requested, but dependencies are not available') +# endif +# else +# have = false +# endif +# conf.set10('ENABLE_DNS_OVER_TLS', have) +# +# default_dns_over_tls = get_option('default-dns-over-tls') +# if fuzzer_build +# default_dns_over_tls = 'no' +# endif +# if default_dns_over_tls != 'no' and conf.get('ENABLE_DNS_OVER_TLS') == 0 +# message('default-dns-over-tls cannot be set to opportunistic when DNS-over-TLS support is disabled. Setting default-dns-over-tls to no.') +# default_dns_over_tls = 'no' +# endif +# conf.set('DEFAULT_DNS_OVER_TLS_MODE', +# 'DNS_OVER_TLS_' + default_dns_over_tls.underscorify().to_upper()) +# substs.set('DEFAULT_DNS_OVER_TLS_MODE', default_dns_over_tls) +# # want_importd = get_option('importd') # if want_importd != 'false' # have = (conf.get('HAVE_LIBCURL') == 1 and @@ -1299,6 +1365,7 @@ foreach term : ['utmp', # 'hostnamed', # 'localed', # 'machined', +# 'portabled', # 'networkd', # 'timedated', # 'timesyncd', @@ -1326,14 +1393,19 @@ foreach term : ['utmp', have = get_option(term) name = 'ENABLE_' + term.underscorify().to_upper() conf.set10(name, have) - m4_defines += have ? ['-D' + name] : [] endforeach +#if 0 /// UNNEEDED by elogind +# conf.set10('ENABLE_TIMEDATECTL', get_option('timedated') or get_option('timesyncd')) +#endif // 0 + want_tests = get_option('tests') install_tests = get_option('install-tests') +slow_tests = get_option('slow-tests') tests = [] +fuzzers = [] -conf.set10('SYSTEMD_SLOW_TESTS_DEFAULT', get_option('slow-tests')) +conf.set10('SYSTEMD_SLOW_TESTS_DEFAULT', slow_tests) ##################################################################### @@ -1374,13 +1446,18 @@ config_h = configure_file( output : 'config.h', configuration : conf) +meson_apply_m4 = find_program('tools/meson-apply-m4.sh') + includes = include_directories('src/basic', 'src/shared', 'src/systemd', #if 0 /// UNNEEDED by elogind # 'src/journal', +# 'src/journal-remote', +# 'src/nspawn', # 'src/resolve', # 'src/timesync', +# 'src/time-wait-sync', #endif // 0 'src/login', #if 0 /// UNNEEDED by elogind @@ -1402,16 +1479,10 @@ includes = include_directories('src/basic', 'src/sleep', 'src/update-utmp', #endif // 0 - '.', - ) + '.') add_project_arguments('-include', 'config.h', language : 'c') -#if 0 /// UNNEEDED by elogind -# gcrypt_util_sources = files('src/shared/gcrypt-util.h', -# 'src/shared/gcrypt-util.c') -#endif // 0 - subdir('po') #if 0 /// UNNEEDED by elogind # subdir('catalog') @@ -1437,40 +1508,69 @@ subdir('src/login') # journald_gperf_c, # include_directories : includes, # install : false) -# -# libsystemd_sym_path = '@0@/@1@'.format(meson.current_source_dir(), libsystemd_sym) -# libsystemd = shared_library( -# 'systemd', -# journal_internal_sources, -# version : libsystemd_version, -# include_directories : includes, -# link_args : ['-shared', -# '-Wl,--version-script=' + libsystemd_sym_path], -# link_with : libbasic, -# link_whole : libsystemd_static, -# dependencies : [threads, -# libgcrypt, -# librt, -# libxz, -# liblz4], -# link_depends : libsystemd_sym, -# install : true, -# install_dir : rootlibdir) -#else +#endif // 0 + libelogind_sym_path = '@0@/@1@'.format(meson.current_source_dir(), libelogind_sym) libelogind = shared_library( 'elogind', - libelogind_internal_sources, + 'src/systemd/sd-id128.h', # pick a header file at random to work around old meson bug version : libelogind_version, include_directories : includes, link_args : ['-shared', '-Wl,--version-script=' + libelogind_sym_path], +#if 0 /// elogind does not need gcrypt or libjournal_client, only threads. +# link_with : [libbasic, +# libbasic_gcrypt], +# link_whole : [libsystemd_static, +# libjournal_client], +# dependencies : [threads, +# librt, +# libxz, +# liblz4], +# link_depends : libsystemd_sym, +#else link_with : [libbasic], + link_whole : [libelogind_static], dependencies : [threads], link_depends : libelogind_sym, +#endif // 0 install : true, install_dir : rootlibdir) + +static_libelogind = get_option('static-libelogind') +static_libelogind_pic = static_libelogind == 'true' or static_libelogind == 'pic' + +install_libelogind_static = static_library( + 'elogind', + libelogind_sources, +#if 0 /// No journald with elogind (And before you ask: NO!) +# journal_client_sources, +#endif // 0 + basic_sources, +#if 0 /// No gcrypt with elogind +# basic_gcrypt_sources, +#endif // 0 + include_directories : includes, + build_by_default : static_libelogind != 'false', + install : static_libelogind != 'false', + install_dir : rootlibdir, + pic : static_libelogind == 'true' or static_libelogind == 'pic', + dependencies : [threads, + librt, + libxz, + liblz4, + libcap, + libblkid, +#if 0 /// libmount isn't built with elogind (and absolutely not needed anyway.) +# libmount, +#endif // 0 + libselinux, +#if 0 /// No grypt with elogind +# libgcrypt], +#else + ], #endif // 0 + c_args : libelogind_c_args + (static_libelogind_pic ? [] : ['-fno-PIC'])) ############################################################ @@ -1498,6 +1598,7 @@ subdir('src/shared') # subdir('src/kernel-install') # subdir('src/locale') # subdir('src/machine') +# subdir('src/portable') # subdir('src/nspawn') # subdir('src/resolve') # subdir('src/timedate') @@ -1507,7 +1608,8 @@ subdir('src/shared') #endif // 0 subdir('src/test') -#if 0 /// UNNEEDED in elogind +#if 0 /// UNNEEDED by elogind +# subdir('src/fuzz') # subdir('rules') # subdir('test') #endif // 0 @@ -1585,6 +1687,10 @@ test_dlopen = executable( # install : true, # install_dir : rootlibexecdir) # +# meson.add_install_script(meson_make_symlink, +# join_paths(rootlibexecdir, 'systemd'), +# join_paths(rootsbindir, 'init')) +# # exe = executable('systemd-analyze', # systemd_analyze_sources, # include_directories : includes, @@ -1630,7 +1736,8 @@ test_dlopen = executable( # dependencies : [threads, # libqrencode, # libxz, -# liblz4], +# liblz4, +# libpcre2], # install_rpath : rootlibexecdir, # install : true, # install_dir : rootbindir) @@ -1717,31 +1824,36 @@ test_dlopen = executable( # if conf.get('ENABLE_RESOLVE') == 1 # executable('systemd-resolved', # systemd_resolved_sources, -# gcrypt_util_sources, # include_directories : includes, -# link_with : [libshared], -# dependencies : [threads, -# libgcrypt, -# libgpg_error, -# libm, -# libidn], +# link_with : [libshared, +# libbasic_gcrypt, +# libsystemd_resolve_core], +# dependencies : systemd_resolved_dependencies, # install_rpath : rootlibexecdir, # install : true, # install_dir : rootlibexecdir) # -# exe = executable('systemd-resolve', -# systemd_resolve_sources, -# gcrypt_util_sources, +# exe = executable('resolvectl', +# resolvectl_sources, # include_directories : includes, -# link_with : [libshared], +# link_with : [libshared, +# libbasic_gcrypt, +# libsystemd_resolve_core], # dependencies : [threads, -# libgcrypt, # libgpg_error, # libm, # libidn], # install_rpath : rootlibexecdir, # install : true) # public_programs += [exe] +# +# meson.add_install_script(meson_make_symlink, +# join_paths(bindir, 'resolvectl'), +# join_paths(rootsbindir, 'resolvconf')) +# +# meson.add_install_script(meson_make_symlink, +# join_paths(bindir, 'resolvectl'), +# join_paths(bindir, 'systemd-resolve')) # endif # # if conf.get('ENABLE_LOGIND') == 1 @@ -1800,6 +1912,15 @@ test_dlopen = executable( # args : [pam_systemd.full_path()]) # path to dlopen must include a slash # endif # endif +# +# executable('systemd-user-runtime-dir', +# user_runtime_dir_sources, +# include_directories : includes, +# link_with : [libshared, liblogind_core], +# install_rpath : rootlibexecdir, +# install : true, +# install_dir : rootlibexecdir) +# #else executable('elogind', @@ -1844,7 +1965,7 @@ if conf.get('HAVE_PAM') == 1 include_directories : includes, link_args : ['-shared', '-Wl,--version-script=' + version_script_arg], - link_with : [libelogind, + link_with : [libelogind_static, libshared_static], dependencies : [threads, libpam, @@ -1887,9 +2008,19 @@ endif # install : true) # public_programs += [exe] # +# +# if get_option('link-systemctl-shared') +# systemctl_link_with = [libshared] +# else +# systemctl_link_with = [libsystemd_static, +# libshared_static, +# libjournal_client, +# libbasic_gcrypt] +# endif +# # exe = executable('systemctl', 'src/systemctl/systemctl.c', # include_directories : includes, -# link_with : [libshared], +# link_with : systemctl_link_with, # dependencies : [threads, # libcap, # libselinux, @@ -1900,6 +2031,32 @@ endif # install_dir : rootbindir) # public_programs += [exe] # +# if conf.get('ENABLE_PORTABLED') == 1 +# executable('systemd-portabled', +# systemd_portabled_sources, +# include_directories : includes, +# link_with : [libshared], +# dependencies : [threads], +# install_rpath : rootlibexecdir, +# install : true, +# install_dir : rootlibexecdir) +# +# exe = executable('portablectl', 'src/portable/portablectl.c', +# include_directories : includes, +# link_with : [libshared], +# dependencies : [threads], +# install_rpath : rootlibexecdir, +# install : true, +# install_dir : rootlibexecdir) +# public_programs += [exe] +# endif +# +# foreach alias : ['halt', 'poweroff', 'reboot', 'runlevel', 'shutdown', 'telinit'] +# meson.add_install_script(meson_make_symlink, +# join_paths(rootbindir, 'systemctl'), +# join_paths(rootsbindir, alias)) +# endforeach +# # if conf.get('ENABLE_BACKLIGHT') == 1 # executable('systemd-backlight', # 'src/backlight/backlight.c', @@ -2036,12 +2193,15 @@ endif # install_rpath : rootlibexecdir, # install : true, # install_dir : rootlibexecdir) +# endif # +# if conf.get('ENABLE_TIMEDATECTL') == 1 # exe = executable('timedatectl', # 'src/timedate/timedatectl.c', # include_directories : includes, # install_rpath : rootlibexecdir, # link_with : [libshared], +# dependencies : [libm], # install : true) # public_programs += [exe] # endif @@ -2056,6 +2216,14 @@ endif # install_rpath : rootlibexecdir, # install : true, # install_dir : rootlibexecdir) +# +# executable('systemd-time-wait-sync', +# 'src/time-wait-sync/time-wait-sync.c', +# include_directories : includes, +# link_with : [libshared], +# install_rpath : rootlibexecdir, +# install : true, +# install_dir : rootlibexecdir) # endif # # if conf.get('ENABLE_MACHINED') == 1 @@ -2150,7 +2318,8 @@ endif # s_j_remote = executable('systemd-journal-remote', # systemd_journal_remote_sources, # include_directories : includes, -# link_with : [libshared], +# link_with : [libshared, +# libsystemd_journal_remote], # dependencies : [threads, # libmicrohttpd, # libgnutls, @@ -2371,7 +2540,7 @@ endif executable('elogind-cgroups-agent', 'src/cgroups-agent/cgroups-agent.c', include_directories : includes, - link_with : [libshared_static], + link_with : [libshared], install_rpath : rootlibexecdir, install : true, install_dir : rootlibexecdir) @@ -2506,7 +2675,7 @@ executable('elogind-cgroups-agent', # 'src/hwdb/hwdb.c', # 'src/libsystemd/sd-hwdb/hwdb-internal.h', # include_directories : includes, -# link_with : [libudev_internal], +# link_with : [libudev_static], # install_rpath : udev_rpath, # install : true, # install_dir : rootbindir) @@ -2539,7 +2708,7 @@ executable('elogind-cgroups-agent', # c_args : ['-DLOG_REALM=LOG_REALM_UDEV'], # link_with : [libudev_core, # libsystemd_network, -# libudev_internal], +# libudev_static], # dependencies : [threads, # libkmod, # libidn, @@ -2556,7 +2725,7 @@ executable('elogind-cgroups-agent', # include_directories : includes, # link_with : [libudev_core, # libsystemd_network, -# libudev_internal], +# libudev_static], # dependencies : [threads, # libkmod, # libidn, @@ -2571,6 +2740,7 @@ executable('elogind-cgroups-agent', # systemd_shutdown_sources, # include_directories : includes, # link_with : [libshared], +# dependencies : [libmount], # install_rpath : rootlibexecdir, # install : true, # install_dir : rootlibexecdir) @@ -2614,12 +2784,10 @@ executable('elogind-cgroups-agent', # 'src/core/mount-setup.h', # 'src/core/loopback-setup.c', # 'src/core/loopback-setup.h', -# include_directories : [includes, include_directories('src/nspawn')], -# link_with : [libshared], -# dependencies : [libacl, -# libblkid, -# libseccomp, -# libselinux], +# include_directories : includes, +# link_with : [libnspawn_core, +# libshared], +# dependencies : [libblkid], # install_rpath : rootlibexecdir, # install : true) # public_programs += [exe] @@ -2630,7 +2798,7 @@ executable('elogind-cgroups-agent', # include_directories : includes, # link_with : [libnetworkd_core, # libsystemd_network, -# libudev_internal, +# libudev_static, # libshared], # dependencies : [threads], # install_rpath : rootlibexecdir, @@ -2669,7 +2837,7 @@ executable('elogind-uaccess-command', 'src/uaccess-command/uaccess-command.c', include_directories : includes, link_with : [liblogind_core, - libshared_static], + libshared], dependencies: [libacl, libudev], install_rpath : rootlibexecdir, @@ -2694,8 +2862,9 @@ foreach tuple : tests timeout = type.split('=')[1].to_int() type = '' endif - - if condition == '' or conf.get(condition) == 1 + if want_tests == 'false' + message('Not compiling @0@ because tests is set to false'.format(name)) + elif condition == '' or conf.get(condition) == 1 exe = executable( name, sources, @@ -2722,17 +2891,30 @@ foreach tuple : tests endforeach #if 0 /// UNNEEDED by elogind -# test_libsystemd_sym = executable( +# exe = executable( # 'test-libsystemd-sym', # test_libsystemd_sym_c, # include_directories : includes, # link_with : [libsystemd], # install : install_tests, # install_dir : testsdir) -# test('test-libsystemd-sym', -# test_libsystemd_sym) +# test('test-libsystemd-sym', exe) +# +# exe = executable( +# 'test-libsystemd-static-sym', +# test_libsystemd_sym_c, +# include_directories : includes, +# link_with : [install_libsystemd_static], +# dependencies : [threads], # threads is already included in dependencies on the library, +# # but does not seem to get propagated. Add here as a work-around. +# build_by_default : static_libsystemd_pic, +# install : install_tests and static_libsystemd_pic, +# install_dir : testsdir) +# if static_libsystemd_pic +# test('test-libsystemd-static-sym', exe) +# endif # -# test_libudev_sym = executable( +# exe = executable( # 'test-libudev-sym', # test_libudev_sym_c, # include_directories : includes, @@ -2740,8 +2922,56 @@ endforeach # link_with : [libudev], # install : install_tests, # install_dir : testsdir) -# test('test-libudev-sym', -# test_libudev_sym) +# test('test-libudev-sym', exe) +# +# exe = executable( +# 'test-libudev-static-sym', +# test_libudev_sym_c, +# include_directories : includes, +# c_args : ['-Wno-deprecated-declarations'], +# link_with : [install_libudev_static], +# build_by_default : static_libudev_pic, +# install : install_tests and static_libudev_pic, +# install_dir : testsdir) +# if static_libudev_pic +# test('test-libudev-static-sym', exe) +# endif +# +# ############################################################ +# +# fuzzer_exes = [] +# +# foreach tuple : fuzzers +# sources = tuple[0] +# link_with = tuple[1].length() > 0 ? tuple[1] : [libshared] +# dependencies = tuple[2] +# defs = tuple.length() >= 4 ? tuple[3] : [] +# incs = tuple.length() >= 5 ? tuple[4] : includes +# +# if fuzzer_build +# dependencies += fuzzing_engine +# else +# sources += 'src/fuzz/fuzz-main.c' +# endif +# +# name = sources[0].split('/')[-1].split('.')[0] +# +# fuzzer_exes += executable( +# name, +# sources, +# include_directories : [incs, include_directories('src/fuzz')], +# link_with : link_with, +# dependencies : dependencies, +# c_args : defs, +# install : false) +# endforeach +# +# run_target('fuzzers', +# depends : fuzzer_exes, +# command : ['true']) +# +# ############################################################ +# #else test_libelogind_sym = executable( 'test-libelogind-sym', @@ -2753,9 +2983,6 @@ test_libelogind_sym = executable( test('test-libelogind-sym', test_libelogind_sym) #endif // 0 - -############################################################ - make_directive_index_py = find_program('tools/make-directive-index.py') make_man_index_py = find_program('tools/make-man-index.py') xml_helper_py = find_program('tools/xml_helper.py') @@ -2774,8 +3001,8 @@ subdir('man') subdir('shell-completion/bash') subdir('shell-completion/zsh') #if 0 /// UNNEEDED by elogind -# subdir('docs/sysvinit') -# subdir('docs/var-log') +# subdir('doc/sysvinit') +# subdir('doc/var-log') #endif // 0 # FIXME: figure out if the warning is true: @@ -2790,15 +3017,19 @@ install_subdir('factory/etc', # install_data('modprobe.d/systemd.conf', # install_dir : modprobedir) #endif // 0 -install_data('README', +install_data('LICENSE.GPL2', + 'LICENSE.LGPL2.1', 'NEWS', - 'CODING_STYLE', -#if 0 /// UNNEEDED by elogind -# 'DISTRO_PORTING', -# 'ENVIRONMENT.md', + 'README', + 'doc/CODING_STYLE', +#if 0 /// irrelevant for elogind +# 'doc/DISTRO_PORTING', +# 'doc/ENVIRONMENT.md', +# 'doc/HACKING', +# 'doc/TRANSIENT-SETTINGS.md', +# 'doc/TRANSLATORS', +# 'doc/UIDS-GIDS.md', #endif // 0 - 'LICENSE.GPL2', - 'LICENSE.LGPL2.1', 'src/libelogind/sd-bus/GVARIANT-SERIALIZATION', install_dir : docdir) @@ -2818,6 +3049,60 @@ foreach exec : public_programs args : [exec.full_path()]) endforeach +############################################################ + +#if 0 /// fuzz regression tests are not supported by elogind +# # Enable tests for all supported sanitizers +# foreach tuple : sanitizers +# sanitizer = tuple[0] +# build = tuple[1] +# +# have = run_command(check_compilation_sh, +# cc.cmd_array(), '-x', 'c', +# '-fsanitize=@0@'.format(sanitizer), +# '-include', link_test_c).returncode() == 0 +# message('@0@ sanitizer supported: @1@'.format(sanitizer, have ? 'yes' : 'no')) +# +# if have +# prev = '' +# foreach p : fuzz_regression_tests +# b = p.split('/')[-2] +# c = p.split('/')[-1] +# +# name = '@0@:@1@'.format(b, sanitizer) +# +# if name != prev +# if want_tests == 'false' +# message('Not compiling @0@ because tests is set to false'.format(name)) +# elif slow_tests +# exe = custom_target( +# name, +# output : name, +# depends : build, +# command : [env, 'ln', '-fs', +# join_paths(build.full_path(), b), +# '@OUTPUT@'], +# build_by_default : true) +# else +# message('Not compiling @0@ because slow-tests is set to false'.format(name)) +# endif +# endif +# prev = name +# +# if want_tests != 'false' and slow_tests +# test('@0@:@1@:@2@'.format(b, c, sanitizer), +# env, +# args : [exe.full_path(), +# join_paths(meson.source_root(), +# 'test/fuzz-regressions', +# p)]) +# endif +# endforeach +# endif +# endforeach +#endif // 0 + + ############################################################ if git.found() @@ -2831,11 +3116,10 @@ if git.found() custom_target( 'tags', output : 'tags', - command : ['env', 'etags', '-o', '@0@/TAGS'.format(meson.current_source_dir())] + all_files) - custom_target( + command : [env, 'etags', '-o', '@0@/TAGS'.format(meson.current_source_dir())] + all_files) + run_target( 'ctags', - output : 'ctags', - command : ['env', 'ctags', '-o', '@0@/tags'.format(meson.current_source_dir())] + all_files) + command : [env, 'ctags', '-o', '@0@/tags'.format(meson.current_source_dir())] + all_files) endif #if 0 /// UNNEEDED by elogind @@ -2868,9 +3152,24 @@ endif ############################################################ +meson_check_api_docs_sh = find_program('tools/meson-check-api-docs.sh') +run_target( + 'check-api-docs', +#if 0 /// libudev is external, elogind does not need to document it. +# depends : [man, libsystemd, libudev], +# command : [meson_check_api_docs_sh, libsystemd.full_path(), libudev.full_path()]) +#else + depends : [man, libelogind], + command : [meson_check_api_docs_sh, libelogind.full_path()]) +#endif // 0 + +############################################################ + status = [ '@0@ @1@'.format(meson.project_name(), meson.project_version()), + 'split /usr: @0@'.format(split_usr), + 'split bin-sbin: @0@'.format(split_bin), #if 0 /// UNSUPPORTED by elogind # 'prefix directory: @0@'.format(prefixdir), # 'rootprefix directory: @0@'.format(rootprefixdir), @@ -2919,6 +3218,7 @@ status = [ # 'symbolic gateway hostnames: @0@'.format(', '.join(gateway_hostnames)), # # 'default DNSSEC mode: @0@'.format(default_dnssec), +# 'default DNS-over-TLS mode: @0@'.format(default_dns_over_tls), # 'default cgroup hierarchy: @0@'.format(default_hierarchy), #endif // 0 'default KillUserProcesses setting: @0@'.format(kill_user_processes)] @@ -3006,6 +3306,7 @@ foreach tuple : [ # ['rfkill'], # ['logind'], # ['machined'], +# ['portabled'], # ['importd'], # ['hostnamed'], # ['timedated'], @@ -3013,6 +3314,7 @@ foreach tuple : [ # ['localed'], # ['networkd'], # ['resolve'], +# ['DNS-over-TLS'], # ['coredump'], #endif // 0 ['polkit'], @@ -3022,6 +3324,7 @@ foreach tuple : [ # ['gnu-efi', have_gnu_efi], # ['kmod'], # ['xkbcommon'], +# ['pcre2'], # ['blkid'], #endif // 0 ['dbus'], @@ -3035,7 +3338,6 @@ foreach tuple : [ ['html pages', want_html], ['man page indices', want_man and have_lxml], #if 0 /// UNNEEDED by elogind -# ['split /usr', conf.get('HAVE_SPLIT_USR') == 1], # ['SysV compat'], #endif // 0 ['utmp'], @@ -3045,15 +3347,18 @@ foreach tuple : [ # ['adm group', get_option('adm-group')], # ['wheel group', get_option('wheel-group')], # ['gshadow'], -#else - ['debug elogind'], #endif // 0 + ['valgrind', conf.get('VALGRIND') == 1], +#if 1 /// Extra debugging for elogind + ['debug elogind'], +#endif // 1 ['debug hashmap'], ['debug mmap cache'], ] - cond = tuple.get(1, '') - if cond == '' + if tuple.length() >= 2 + cond = tuple[1] + else ident1 = 'HAVE_' + tuple[0].underscorify().to_upper() ident2 = 'ENABLE_' + tuple[0].underscorify().to_upper() cond = conf.get(ident1, 0) == 1 or conf.get(ident2, 0) == 1 @@ -3073,9 +3378,11 @@ status += [ ''] message('\n '.join(status)) -if rootprefixdir != rootprefix_default - message('WARNING:\n' + - ' Note that the installation prefix was changed to "@0@".\n'.format(rootprefixdir) + - ' elogind used fixed names for unit file directories and other paths, so anything\n' + - ' except the default ("@0@") is strongly discouraged.'.format(rootprefix_default)) -endif +#if 0 /// Nicely enough this isn't true for elogind. :-) +# if rootprefixdir != rootprefix_default +# warning('\n' + +# 'Note that the installation prefix was changed to "@0@".\n'.format(rootprefixdir) + +# 'systemd used fixed names for unit file directories and other paths, so anything\n' + +# 'except the default ("@0@") is strongly discouraged.'.format(rootprefix_default)) +# endif +#endif // 0