blob: b6efc42202c04bf8a5ea2f45835eae233d0323f4 [file] [log] [blame]
project('util-linux', 'c',
version : run_command('tools/git-version-gen', check: true).stdout(),
meson_version: '>=0.60.0',
license : 'GPLv2+',
default_options : [
'c_std=c99',
'cpp_std=c++11',
])
fs = import('fs')
pkgconfig = import('pkgconfig')
# soname versions; This never change because we use symbols versioing. There is also
# API version (LIB*_VERSION macros) and it follow package version.
libblkid_version = '1.1.0'
libblkid_date = '29-Feb-2024'
libuuid_version = '1.3.0'
liblastlog2_version = '2.0.0'
libmount_version = '1.1.0'
libsmartcols_version = '1.1.0'
libfdisk_version = '1.1.0'
prefixdir = get_option('prefix')
if not prefixdir.startswith('/')
error('Prefix is not absolute: "@0@"'.format(prefixdir))
endif
bindir = join_paths(prefixdir, get_option('bindir'))
sbindir = join_paths(prefixdir, get_option('sbindir'))
sysconfstaticdir = join_paths(prefixdir, 'lib')
docdir = join_paths(prefixdir, get_option('datadir'), 'doc', 'util-linux')
mandir = join_paths(prefixdir, get_option('mandir'))
runstatedir = '/run'
localstatedir = '/var'
execprefixdir = prefixdir
sysconfdir = join_paths(prefixdir, get_option('sysconfdir'))
usrbin_exec_dir = join_paths(execprefixdir, bindir)
usrsbin_exec_dir = join_paths(execprefixdir, sbindir)
bash_completion = dependency('bash-completion', required : get_option('build-bash-completion'))
vendordir = get_option('vendordir')
add_project_arguments('-D_GNU_SOURCE', language : 'c')
cc = meson.get_compiler('c')
conf = configuration_data()
conf.set_quoted('PACKAGE', meson.project_name())
conf.set_quoted('PACKAGE_VERSION', meson.project_version())
package_string = '@0@ @1@'.format(meson.project_name(), meson.project_version())
conf.set_quoted('PACKAGE_STRING', package_string)
pc_version = []
pc_version = meson.project_version().split('-')[0].split('.')
if pc_version.length() < 3
pc_version += '0'
endif
pc_version = '.'.join(pc_version)
conf.set_quoted('LIBBLKID_VERSION', pc_version)
conf.set_quoted('LIBBLKID_DATE', libblkid_date)
conf.set('bindir', bindir)
conf.set('sbindir', sbindir)
conf.set('runstatedir', runstatedir)
conf.set('localstatedir', localstatedir)
conf.set('sysconfdir', sysconfdir)
conf.set('usrbin_execdir', usrbin_exec_dir)
conf.set('usrsbin_execdir', usrsbin_exec_dir)
conf.set('docdir', docdir)
conf.set_quoted('_PATH_SYSCONFSTATICDIR', sysconfstaticdir)
conf.set_quoted('_PATH_RUNSTATEDIR', runstatedir)
conf.set_quoted('_PATH_LOCALSTATEDIR', localstatedir)
conf.set_quoted('CONFIG_ADJTIME_PATH', '/etc/adjtime')
conf.set_quoted('ADJTIME_PATH', '/etc/adjtime') # yes, both are used :(
conf.set_quoted('_PATH_VENDORDIR', vendordir)
conf.set('USE_VENDORDIR', vendordir == '' ? false : 1)
build_libblkid = not get_option('build-libblkid').disabled()
conf.set('HAVE_LIBBLKID', build_libblkid ? 1 : false)
summary('libblkid', build_libblkid ? 'enabled' : 'disabled', section : 'components')
build_libuuid = not get_option('build-libuuid').disabled()
conf.set('HAVE_LIBUUID', build_libuuid ? 1 : false)
summary('libuuid', build_libuuid ? 'enabled' : 'disabled', section : 'components')
build_liblastlog2 = not get_option('build-liblastlog2').disabled()
conf.set('HAVE_LIBLASTLOG2', build_liblastlog2 ? 1 : false)
summary('liblastlog2', build_liblastlog2 ? 'enabled' : 'disabled', section : 'components')
have_mountfd_api = cc.sizeof('struct mount_attr', prefix : '#include <linux/mount.h>') > 0
conf.set('HAVE_STRUCT_MOUNT_ATTR', have_mountfd_api ? 1 : false)
conf.set('HAVE_MOUNTFD_API', have_mountfd_api ? 1 : false)
have_struct_statx = cc.sizeof('struct statx', prefix : '#include <sys/stat.h>') > 0
conf.set('HAVE_STRUCT_STATX', have_struct_statx ? 1 : false)
build_libmount = not get_option('build-libmount').disabled()
conf.set('HAVE_LIBMOUNT', build_libmount ? 1 : false)
conf.set('USE_LIBMOUNT_SUPPORT_NAMESPACES', 1)
conf.set('USE_LIBMOUNT_MOUNTFD_SUPPORT', have_mountfd_api ? 1 : false)
summary('libmount', build_libmount ? 'enabled' : 'disabled', section : 'components')
build_libsmartcols = not get_option('build-libsmartcols').disabled()
conf.set('HAVE_LIBSMARTCOLS', build_libsmartcols ? 1 : false)
summary('libsmartcols', build_libsmartcols ? 'enabled' : 'disabled', section : 'components')
build_libfdisk = not get_option('build-libfdisk').disabled()
conf.set('HAVE_LIBFDISK', build_libfdisk ? 1 : false)
summary('libfdisk', build_libfdisk ? 'enabled' : 'disabled', section : 'components')
build_uuidd = not get_option('build-uuidd').disabled()
conf.set('HAVE_UUIDD', build_uuidd ? 1 : false)
summary('uuidd', build_uuidd ? 'enabled' : 'disabled', section : 'components')
static_programs = get_option('static-programs')
need_static_libs = static_programs.length() > 0 # a rough estimate...
summary('static programs', static_programs)
LINUX = host_machine.system() in ['linux']
BSD = host_machine.system() in ['dragonfly', 'freebsd', 'netbsd', 'openbsd']
############################################################
code = '''
#include <wchar.h>
#include <wctype.h>
#include <stdio.h>
#include <stdlib.h>
int main(void) {
wchar_t wc;
wint_t w;
w = fgetwc(stdin);
if (w == WEOF)
return 1;
wc = w;
fputwc(wc,stdout);
return 0;
}
'''
have = cc.compiles(code, name : 'wchar_t support')
if not have and get_option('widechar').enabled()
error('widechar support requested but unavailable')
endif
if get_option('ncurses').enabled() and get_option('widechar').enabled()
error('widechar support is incompatible with non-wide ncurses')
endif
conf.set('HAVE_WIDECHAR', have ? 1 : false)
headers = '''
byteswap.h
crypt.h
endian.h
err.h
errno.h
fcntl.h
getopt.h
inttypes.h
langinfo.h
lastlog.h
libutil.h
locale.h
mntent.h
paths.h
pty.h
shadow.h
stdint.h
stdio_ext.h
stdlib.h
string.h
strings.h
unistd.h
utmp.h
utmpx.h
asm-generic/fcntl.h
asm/fcntl.h
asm/io.h
linux/blkzoned.h
linux/capability.h
linux/cdrom.h
linux/compiler.h
linux/falloc.h
linux/fd.h
linux/fs.h
linux/fiemap.h
linux/gsmmux.h
linux/if_alg.h
linux/landlock.h
linux/kcmp.h
linux/net_namespace.h
linux/nsfs.h
linux/mount.h
linux/pr.h
linux/securebits.h
linux/tiocl.h
linux/version.h
linux/watchdog.h
net/if.h
net/if_dl.h
netinet/in.h
security/openpam.h
security/pam_appl.h
security/pam_misc.h
security/pam_modules.h
sys/disk.h
sys/disklabel.h
sys/endian.h
sys/file.h
sys/io.h
sys/ioccom.h
sys/ioctl.h
sys/mkdev.h
sys/mount.h
sys/param.h
sys/pidfd.h
sys/prctl.h
sys/resource.h
sys/sendfile.h
sys/signalfd.h
sys/socket.h
sys/sockio.h
sys/stat.h
sys/statfs.h
sys/swap.h
sys/syscall.h
sys/sysmacros.h
sys/time.h
sys/timex.h
sys/ttydefaults.h
sys/types.h
sys/ucred.h
sys/un.h
sys/vfs.h
sys/xattr.h
'''.split()
lib_m = cc.find_library('m')
lib_tinfo = dependency(
'tinfo',
required : get_option('tinfo'))
lib_ncursesw = dependency(
'ncursesw',
required : get_option('ncursesw'))
if lib_ncursesw.found()
headers += ['ncursesw/ncurses.h',
'ncursesw/term.h',
'ncurses.h',
'term.h']
lib_ncurses = disabler()
else
lib_ncurses = dependency(
'ncurses',
required : get_option('ncurses'))
headers += ['ncurses.h',
'term.h']
endif
conf.set('HAVE_LIBNCURSESW', lib_ncursesw.found())
conf.set('HAVE_LIBNCURSES', lib_ncurses.found())
conf.set('HAVE_NCURSES', lib_ncursesw.found() or lib_ncurses.found())
lib_slang = dependency(
'slang',
required : get_option('slang'))
if lib_slang.found()
headers += ['slang.h',
'slang/slang.h',
'slcurses.h',
'slang/slcurses.h']
endif
conf.set('HAVE_SLANG', lib_slang.found())
foreach curses_libs : [lib_slang, lib_ncursesw, lib_ncurses]
if curses_libs.found()
have = cc.has_function('use_default_colors', dependencies : curses_libs)
conf.set('HAVE_USE_DEFAULT_COLORS', have ? 1 : false)
have = cc.has_function('resizeterm', dependencies : curses_libs)
conf.set('HAVE_RESIZETERM', have ? 1 : false)
break
endif
endforeach
lib_z = dependency(
'zlib',
required : get_option('zlib'))
lib_readline = dependency(
'readline',
required : get_option('readline'))
conf.set('HAVE_LIBREADLINE', lib_readline.found() ? 1 : false)
lib_readline_static = dependency(
'readline',
static : true,
required : need_static_libs ? get_option('readline') : disabler())
if meson.version().version_compare('>= 0.59.0')
lib_intl = dependency(
'intl',
required : get_option('nls'))
conf.set('ENABLE_NLS', lib_intl.found() ? 1 : false)
else
if get_option('nls').enabled()
error('nls is not supported with meson before 0.59.0')
endif
lib_intl = dependency('', required : false)
endif
lib_user = dependency(
'libuser',
version : '>= 0.58',
required : get_option('libuser'))
conf.set('HAVE_LIBUSER', lib_user.found() ? 1 : false)
lib_util = cc.find_library(
'util',
required : get_option('libutil'))
conf.set('HAVE_LIBUTIL', lib_util.found() ? 1 : false)
lib_utempter = cc.find_library(
'utempter',
required : get_option('libutempter'))
conf.set('HAVE_LIBUTEMPTER', lib_utempter.found() ? 1 : false)
systemd = dependency(
'systemd',
required : get_option('systemd'))
lib_systemd = dependency(
'libsystemd',
required : get_option('systemd'))
conf.set('HAVE_LIBSYSTEMD', lib_systemd.found() ? 1 : false)
conf.set('USE_SYSTEMD', lib_systemd.found() ? 1 : false)
have = cc.has_function(
'sd_session_get_username',
dependencies : lib_systemd)
conf.set('HAVE_DECL_SD_SESSION_GET_USERNAME', have ? 1 : false)
lib_udev = dependency(
'libudev',
required : get_option('systemd'))
conf.set('HAVE_LIBUDEV', lib_udev.found() ? 1 : false)
lib_crypt = cc.find_library('crypt')
lib_pam = cc.find_library('pam', required : get_option('build-login'))
if not lib_pam.found()
lib_pam = cc.find_library('pam', required : get_option('build-chfn-chsh'))
endif
if not lib_pam.found()
lib_pam = cc.find_library('pam', required : get_option('build-su'))
endif
if not lib_pam.found()
lib_pam = cc.find_library('pam', required : get_option('build-runuser'))
endif
if lib_pam.found()
lib_pam_misc = cc.find_library('pam_misc')
lib_pam = [lib_pam, lib_pam_misc]
else
lib_pam_misc = declare_dependency()
endif
lib_cryptsetup = dependency(
'libcryptsetup',
required : get_option('cryptsetup'))
conf.set('HAVE_CRYPTSETUP', lib_cryptsetup.found() ? 1 : false)
cryptsetup_dlopen = not get_option('cryptsetup').disabled() and get_option('cryptsetup-dlopen').enabled()
if cryptsetup_dlopen
if meson.version().version_compare('>= 0.62.0')
lib_dl = dependency('dl')
else
lib_dl = cc.find_library('dl')
endif
conf.set('CRYPTSETUP_VIA_DLOPEN', 1)
summary('cryptsetup support (dlopen)',
'enabled',
section : 'components')
else
summary('cryptsetup support',
lib_cryptsetup.found() ? 'enabled' : 'disabled',
section : 'components')
endif
have = cc.has_function(
'crypt_activate_by_signed_key',
dependencies : lib_cryptsetup)
conf.set('HAVE_CRYPT_ACTIVATE_BY_SIGNED_KEY', have ? 1 : false)
lib_cap_ng = dependency(
'libcap-ng',
required : get_option('build-setpriv'))
if not lib_cap_ng.found()
lib_cap_ng = disabler()
endif
lib_selinux = dependency(
'libselinux',
version : '>= 2.5',
required : get_option('selinux'))
conf.set('HAVE_LIBSELINUX', lib_selinux.found() ? 1 : false)
lib_magic = dependency(
'libmagic',
required : get_option('magic'))
conf.set('HAVE_MAGIC', lib_magic.found() ? 1 : false)
lib_econf = dependency(
'libeconf',
required : get_option('econf'))
conf.set('HAVE_LIBECONF', lib_econf.found() ? 1 : false)
lib_audit = dependency(
'audit',
required : get_option('audit'))
conf.set('HAVE_LIBAUDIT', lib_audit.found() ? 1 : false)
conf.set('HAVE_SMACK', not get_option('smack').disabled())
lib_sqlite3 = dependency('sqlite3', required : get_option('build-liblastlog2'))
foreach header : headers
have = cc.has_header(header)
conf.set('HAVE_' + header.underscorify().to_upper(), have ? 1 : false)
endforeach
header = 'linux/btrfs.h'
enable_btrfs = cc.has_header(header,
required : get_option('btrfs'))
conf.set('HAVE_' + header.underscorify().to_upper(), enable_btrfs ? 1 : false)
conf.set('HAVE_BTRFS_SUPPORT', enable_btrfs ? 1 : false)
prefix = conf.get('HAVE_LINUX_COMPILER_H') ? '#include <linux/compiler.h>' : ''
foreach header : [
'linux/blkpg.h',
'linux/major.h',
]
have = cc.has_header(header,
prefix : prefix)
conf.set('HAVE_' + header.underscorify().to_upper(), have ? 1 : false)
endforeach
have = cc.has_header('sched.h')
conf.set10('HAVE_DECL_CPU_ALLOC', have)
# We get -1 if the size cannot be determined
have_cpu_set_t = cc.sizeof('cpu_set_t', prefix : '#define _GNU_SOURCE\n#include <sched.h>') > 0
conf.set('HAVE_CPU_SET_T', have_cpu_set_t ? 1 : false)
have = cc.has_header_symbol('unistd.h', 'environ', args : '-D_GNU_SOURCE')
conf.set10('HAVE_ENVIRON_DECL', have)
have = cc.has_header_symbol('signal.h', 'sighandler_t', args : '-D_GNU_SOURCE')
conf.set('HAVE_SIGHANDLER_T', have ? 1 : false)
have = cc.has_function('strsignal')
conf.set10('HAVE_STRSIGNAL_DECL', have)
have = cc.sizeof('union semun', prefix : '#include <sys/sem.h>') > 0
conf.set('HAVE_UNION_SEMUN', have ? 1 : false)
have = cc.has_type('loff_t',
args : '-D_GNU_SOURCE',
prefix : '#include <sys/types.h>')
conf.set('HAVE_LOFF_T', have ? 1 : false)
have = cc.compiles('''
#define _GNU_SOURCE 1
#include <langinfo.h>
int main(void) {
char *str;
str = nl_langinfo (ALTMON_1);
str = nl_langinfo (ALTMON_2);
str = nl_langinfo (ALTMON_3);
str = nl_langinfo (ALTMON_4);
str = nl_langinfo (ALTMON_5);
str = nl_langinfo (ALTMON_6);
str = nl_langinfo (ALTMON_7);
str = nl_langinfo (ALTMON_8);
str = nl_langinfo (ALTMON_9);
str = nl_langinfo (ALTMON_10);
str = nl_langinfo (ALTMON_11);
str = nl_langinfo (ALTMON_12);
return 0;
}
''',
name : 'langinfo.h defines ALTMON_x constants')
conf.set('HAVE_LANGINFO_ALTMON', have ? 1 : false)
have = cc.compiles('''
#define _GNU_SOURCE 1
#include <langinfo.h>
int main(void) {
char *str;
str = nl_langinfo (_NL_ABALTMON_1);
str = nl_langinfo (_NL_ABALTMON_2);
str = nl_langinfo (_NL_ABALTMON_3);
str = nl_langinfo (_NL_ABALTMON_4);
str = nl_langinfo (_NL_ABALTMON_5);
str = nl_langinfo (_NL_ABALTMON_6);
str = nl_langinfo (_NL_ABALTMON_7);
str = nl_langinfo (_NL_ABALTMON_8);
str = nl_langinfo (_NL_ABALTMON_9);
str = nl_langinfo (_NL_ABALTMON_10);
str = nl_langinfo (_NL_ABALTMON_11);
str = nl_langinfo (_NL_ABALTMON_12);
return 0;
}
''',
name : 'langinfo.h defines _NL_ABALTMON_x constants')
conf.set('HAVE_LANGINFO_NL_ABALTMON', have ? 1 : false)
have = cc.compiles('''
#define _GNU_SOURCE 1
#include <langinfo.h>
int main(void) {
char *str;
str = nl_langinfo (_NL_TIME_WEEK_1STDAY);
return 0;
}
''',
name : 'langinfo.h defines _NL_TIME_WEEK_1STDAY constant')
conf.set('HAVE_DECL__NL_TIME_WEEK_1STDAY', have ? 1 : false)
funcs = '''
cachestat
clearenv
close_range
__fpurge
fpurge
__fpending
secure_getenv
__secure_getenv
eaccess
err
errx
explicit_bzero
fnmatch
fseeko
fsconfig
fsmount
fsopen
fspick
fsync
getttynam
utimensat
getdomainname
getdtablesize
getexecname
getmntinfo
getrandom
getrlimit
getsgnam
inotify_init
jrand48
landlock_create_ruleset
landlock_add_rule
landlock_restrict_self
lchown
lgetxattr
llistxattr
llseek
newlocale
mempcpy
mkostemp
move_mount
mount_setattr
nanosleep
ntp_gettime
open_tree
personality
pidfd_open
pidfd_send_signal
posix_fadvise
prctl
qsort_r
reallocarray
renameat2
rpmatch
scandirat
setprogname
sendfile
setns
setresgid
setresuid
sched_setattr
sched_setscheduler
sigqueue
srandom
statx
strnchr
strndup
strnlen
strtod_l
sysconf
sysinfo
swapon
swapoff
timegm
unshare
usleep
uselocale
utimensat
vwarnx
warn
warnx
prlimit
openat
fstatat
unlinkat
ioperm
iopl
futimens
inotify_init1
open_memstream
reboot
getusershell
'''.split()
foreach func: funcs
have = cc.has_function(func)
# For autotools compatibility, use either #define FOO 1 or #undef FOO.
# This makes little sense, but is necessary to avoid warnings about
# redefined macros from Python.h, which uses this convention.
conf.set('HAVE_' + func.to_upper(), have ? 1 : false)
endforeach
have = conf.get('HAVE_FUTIMENS') in [1] and conf.get('HAVE_INOTIFY_INIT1') in [1]
conf.set('AGETTY_RELOAD', have ? 1 : false)
if not have
warning('futimens or inotify_init1 not found; agetty(8) will not provide --reload functionality')
endif
have_dirfd = (cc.has_function('dirfd') or
cc.has_header_symbol('dirent.h', 'dirfd',
prefix : '#include <sys/types.h>'))
conf.set('HAVE_DIRFD', have_dirfd ? 1 : false)
have_ddfd = cc.has_member('DIR', 'dd_fd',
prefix : '''
#include <sys/types.h>
#include <dirent.h>
''')
conf.set('HAVE_DECL_DDFD', have_ddfd ? 1 : false)
have = cc.has_member('struct tm', 'tm_gmtoff',
args : '-D_GNU_SOURCE',
prefix : '''
#include <time.h>
#include <unistd.h>
''')
conf.set('HAVE_TM_GMTOFF', have ? 1 : false)
have = cc.sizeof('enum fsconfig_command', prefix : '#include <linux/mount.h>') > 0
conf.set('HAVE_ENUM_FSCONFIG_COMMAND', have ? 1 : false)
have = cc.has_member('struct termios', 'c_line',
prefix : '#include <termios.h>')
conf.set('HAVE_STRUCT_TERMIOS_C_LINE', have ? 1 : false)
have = cc.has_member('struct stat', 'st_mtim.tv_nsec',
args : '-D_GNU_SOURCE',
prefix : '#include <sys/stat.h>')
conf.set('HAVE_STRUCT_STAT_ST_MTIM_TV_NSEC', have ? 1 : false)
have = cc.has_member('struct statx', 'stx_mnt_id',
prefix : '#include <sys/stat.h>')
conf.set('HAVE_STRUCT_STATX_STX_MNT_ID', have ? 1 : false)
# replacement for AC_STRUCT_TIMEZONE
have = cc.has_member('struct tm', 'tm_zone',
args : '-D_GNU_SOURCE',
prefix : '#include <time.h>')
conf.set('HAVE_STRUCT_TM_TM_ZONE', have ? 1 : false)
have = cc.has_header_symbol('time.h', 'tzname', args: '-D_GNU_SOURCE')
conf.set('HAVE_DECL_TZNAME', have ? 1 : false)
have = cc.has_header_symbol('linux/blkzoned.h', 'BLK_ZONE_REP_CAPACITY')
conf.set('HAVE_DECL_BLK_ZONE_REP_CAPACITY', have ? 1 : false)
have = cc.has_header_symbol('linux/pr.h', 'PR_REP_CAPACITY')
conf.set('HAVE_DECL_PR_REP_CAPACITY', have ? 1 : false)
code = '''
#include <time.h>
#if !@0@
extern char *tzname[];
#endif
int main(void) {
return tzname ? 0 : 1;
}
'''.format(have ? 1 : 0)
have = cc.compiles(code, name : 'using tzname[]')
conf.set('HAVE_TZNAME', have ? 1 : false)
have = cc.sizeof('time_t', prefix : '#include <time.h>')
if have < 8
add_global_arguments('-D_TIME_BITS=64', language : 'c')
have = cc.sizeof('time_t', args : '-D_TIME_BITS=64', prefix : '#include <time.h>')
if have < 8
if get_option('allow-32bit-time')
warning('Could not make time_t 64bits wide')
else
error('Could not make time_t 64bits wide')
endif
endif
endif
socket_libs = []
if not cc.has_function('socket')
socket_libs += cc.find_library('socket', required : true)
have = cc.has_function('socket',
dependencies : socket_libs)
if not have
error('socket() function not available')
endif
endif
realtime_libs = []
have = cc.has_function('clock_gettime')
if not have
realtime_libs += cc.find_library('rt', required : true)
have = cc.has_function('clock_gettime',
dependencies : realtime_libs)
endif
conf.set('HAVE_CLOCK_GETTIME', have ? 1 : false)
thread_libs = dependency('threads')
have = cc.has_function('timer_create')
if not have
realtime_libs = [cc.find_library('rt', required : true)]
have = cc.has_function('timer_create',
dependencies : realtime_libs)
if not have
realtime_libs += thread_libs
have = cc.has_function('timer_create',
dependencies : realtime_libs)
endif
endif
conf.set('HAVE_TIMER_CREATE', have ? 1 : false)
if not have
have = cc.has_function('setitimer')
conf.set('HAVE_SETITIMER', have ? 1 : false)
endif
rtas_libs = cc.find_library('rtas', required : false)
conf.set('HAVE_LIBRTAS', rtas_libs.found() ? 1 : false)
math_libs = []
if not cc.has_header_symbol('math.h', 'isnan')
lib = cc.find_library('m', required : true)
if (cc.has_function('isnan', dependencies : lib) and
cc.has_function('__isnan', dependencies : lib))
math_libs += lib
endif
endif
have = cc.has_header_symbol('errno.h', 'program_invocation_short_name',
args : '-D_GNU_SOURCE')
conf.set('HAVE_PROGRAM_INVOCATION_SHORT_NAME', have ? 1 : false)
code = '''
extern char *__progname;
int main(void) {
return (*__progname != 0);
}
'''
have = cc.compiles(code, name : 'using __progname')
conf.set('HAVE___PROGNAME', have ? 1 : false)
have = conf.get('HAVE_PTY_H').to_string() == '1' \
and conf.get('HAVE_SYS_SIGNALFD_H').to_string() == '1'
conf.set('HAVE_PTY', have ? 1 : false)
have_opal_get_status= cc.has_header_symbol('linux/sed-opal.h', 'IOC_OPAL_GET_STATUS')
conf.set('HAVE_OPAL_GET_STATUS', have_opal_get_status ? 1 : false)
build_plymouth_support = get_option('build-plymouth-support')
have_tiocglcktrmios = cc.has_header_symbol(
'sys/ioctl.h', 'TIOCGLCKTRMIOS',
required : build_plymouth_support.enabled())
have_sock_cloexec = cc.has_header_symbol(
'sys/socket.h', 'SOCK_CLOEXEC',
prefix : '#include <sys/types.h>',
required : build_plymouth_support.enabled())
have_sock_nonblock = cc.has_header_symbol(
'sys/socket.h', 'SOCK_NONBLOCK',
prefix : '#include <sys/types.h>',
required : build_plymouth_support.enabled())
have_so_passcred = cc.has_header_symbol(
'sys/socket.h', 'SO_PASSCRED',
args : ['-D_GNU_SOURCE'],
prefix : '#include <sys/types.h>',
required : build_plymouth_support.enabled())
build_plymouth_support = (not build_plymouth_support.disabled() and
have_tiocglcktrmios and
have_sock_cloexec and
have_sock_nonblock and
have_so_passcred)
conf.set('ENABLE_PLYMOUTH_SUPPORT', build_plymouth_support ? 1 : false)
summary('plymouth support',
build_plymouth_support ? 'enabled' : 'disabled',
section : 'components')
# check for valid fallocate() function
# with 32 bits glibc 2.10, fallocate() exists but not fallocate64()
# when _FILE_OFFSET_BITS==64, fallocate() is redirect to fallocate64()
# and program can't be linked.
code = '''
#define _GNU_SOURCE
#include <unistd.h>
#include <fcntl.h>
int main(void) {
long ret;
ret = fallocate(0, FALLOC_FL_KEEP_SIZE, 0xfffffffful, 0xfffffffful);
return ret == 0 ? 0 : 1;
}
'''
have = cc.links(code, name : 'fallocate() function')
conf.set('HAVE_FALLOCATE', have ? 1 : false)
code = '''
#include <unistd.h>
#include <fcntl.h>
int main(void) {
long ret;
ret = posix_fallocate(0, 0xfffffffful, 0xfffffffful);
return ret == 0 ? 0 : 1;
}
'''
have = cc.links(code, name : 'posix_fallocate() function')
conf.set('HAVE_POSIX_FALLOCATE', have ? 1 : false)
use_hwclock_cmos = host_machine.cpu_family() in ['x86', 'x86_64']
message('Use CMOS clock: @0@'.format(use_hwclock_cmos))
conf.set('USE_HWCLOCK_CMOS', use_hwclock_cmos ? 1 : false)
conf.set('HAVE_TLS', get_option('use-tls') ? 1 : false)
conf.set('PG_BELL', get_option('pg-bell') ? 1 : false)
conf.set('USE_COLORS_BY_DEFAULT', get_option('colors-default') ? 1 : false)
is_glibc = cc.has_header_symbol('limits.h', '__GLIBC__')
############################################################
fs_search_path = get_option('fs-search-path')
fs_search_path_extra = get_option('fs-search-path-extra')
if fs_search_path_extra != ''
fs_search_path = ':'.join(fs_search_path, fs_search_path_extra)
endif
conf.set_quoted('FS_SEARCH_PATH', fs_search_path)
systemdsystemunitdir = ''
if systemd.found()
systemdsystemunitdir = systemd.get_variable(pkgconfig : 'systemdsystemunitdir')
endif
sysvinit = get_option('sysvinit').enabled()
sysvinitrcdir = sysconfdir + '/init.d'
program_tests = get_option('program-tests')
chfn_chsh_password = get_option('chfn-chsh-password') or lib_user.found()
conf.set('CHFN_CHSH_PASSWORD', chfn_chsh_password ? 1 : false)
have = get_option('chsh-only-listed')
conf.set('ONLY_LISTED_SHELLS', have ? 1 : false)
have = get_option('use-tty-group')
conf.set('USE_TTY_GROUP', have ? 1 : false)
bison = find_program('bison')
flex = find_program('flex')
build_hwclock = not get_option('build-hwclock').disabled()
bison_gen = generator(
bison,
output : ['@BASENAME@.tab.c', '@BASENAME@.tab.h'],
arguments : ['@INPUT@', '--defines=@OUTPUT1@', '--output=@OUTPUT0@'])
meson_make_symlink = meson.current_source_dir() + '/tools/meson-make-symlink.sh'
meson_make_manpage_stub = meson.current_source_dir() + '/tools/meson-make-manpage-stub.sh'
configure_file(
output : 'config.h',
configuration : conf)
add_project_arguments('-include', meson.current_build_dir() / 'config.h', language : 'c')
compiler_flags = [
'-fno-common',
'-Waddress-of-packed-member',
'-Wdiscarded-qualifiers',
'-Wembedded-directive',
'-Wextra-semi',
'-Wformat-security',
'-Wimplicit-function-declaration',
'-Wmissing-declarations',
'-Wmissing-parameter-type',
'-Wmissing-prototypes',
'-Wnested-externs',
'-Wno-missing-field-initializers',
'-Wold-style-definition',
'-Wpointer-arith',
'-Wredundant-decls',
'-Wsign-compare',
'-Wstrict-prototypes',
'-Wtype-limits',
'-Wuninitialized',
'-Wunused-but-set-parameter',
'-Wunused-but-set-variable',
'-Wunused-parameter',
'-Wunused-result',
'-Wunused-variable',
'-Wvla',
'-Walloca',
]
foreach compiler_flag : compiler_flags
if cc.has_argument(compiler_flag)
add_project_arguments(compiler_flag, language : 'c')
endif
endforeach
manadocs = []
manlinks = {}
bashcompletions = []
bashcompletionslinks = {}
subdir('include')
subdir('lib')
subdir('libblkid')
subdir('libmount')
subdir('libsmartcols')
subdir('libuuid')
subdir('liblastlog2')
subdir('libfdisk')
subdir('pam_lastlog2')
subdir('login-utils')
subdir('sys-utils')
subdir('disk-utils')
subdir('misc-utils')
subdir('text-utils')
subdir('term-utils')
subdir('po')
includes = [dir_include,
dir_libblkid,
dir_libsmartcols,
dir_libmount,
dir_libfdisk,
dir_libuuid,
dir_liblastlog2,
dir_sys_utils]
exes = []
opt = not get_option('build-chfn-chsh').disabled()
exe = executable(
'chfn',
chfn_sources,
chfn_chsh_sources,
include_directories : includes,
link_with : [lib_common, logindefs_c],
dependencies : chfn_chsh_deps,
install_dir : usrbin_exec_dir,
install_mode : 'rwsr-xr-x',
install : opt,
build_by_default : opt)
exe2 = executable(
'chsh',
'login-utils/chsh.c',
'lib/shells.c',
chfn_chsh_sources,
include_directories : includes,
link_with : lib_common,
dependencies : chfn_chsh_deps,
install_dir : usrbin_exec_dir,
install_mode : 'rwsr-xr-x',
install : opt,
build_by_default : opt)
if opt and not is_disabler(exe)
exes += [exe, exe2]
manadocs += ['login-utils/chfn.1.adoc', 'login-utils/chsh.1.adoc']
bashcompletions += ['chfn', 'chsh']
endif
exe = executable(
'test_islocal',
test_islocal_sources,
include_directories : includes,
c_args : '-DTEST_PROGRAM',
build_by_default : program_tests)
exes += exe
exe = executable(
'test-consoles',
test_consoles_sources,
c_args : ['-DTEST_PROGRAM'],
include_directories : includes,
link_with : lib_common,
build_by_default : program_tests)
exes += exe
opt = not get_option('build-last').disabled()
exe = executable(
'last',
last_sources,
include_directories : includes,
link_with : [lib_common],
install_dir : usrbin_exec_dir,
install : opt,
build_by_default : opt)
if opt and not is_disabler(exe)
exes += exe
meson.add_install_script(meson_make_symlink,
'last',
join_paths(usrbin_exec_dir, 'lastb'))
manadocs += ['login-utils/last.1.adoc']
manlinks += {'lastb.1': 'last.1'}
bashcompletions += ['last']
bashcompletionslinks += {'lastb': 'last'}
endif
opt = not get_option('build-nologin').disabled()
exe = executable(
'nologin',
'login-utils/nologin.c',
include_directories : includes,
install_dir : sbindir,
link_with : [lib_common],
install : opt,
build_by_default : opt)
if opt and not is_disabler(exe)
exes += exe
manadocs += ['login-utils/nologin.8.adoc']
endif
opt = not get_option('build-utmpdump').disabled()
exe = executable(
'utmpdump',
'login-utils/utmpdump.c',
include_directories : includes,
link_with : [lib_common],
install_dir : usrbin_exec_dir,
install : opt,
build_by_default : opt)
if opt and not is_disabler(exe)
exes += exe
manadocs += ['login-utils/utmpdump.1.adoc']
bashcompletions += ['utmpdump']
endif
opt = not get_option('build-su').disabled()
exe = executable(
'su',
'login-utils/su.c',
'login-utils/su-common.c',
'login-utils/su-common.h',
'lib/shells.c',
pty_session_c,
monotonic_c,
include_directories : includes,
link_with : [lib_common, logindefs_c],
dependencies : [lib_pam,
lib_pam_misc,
lib_util,
realtime_libs],
install_mode : 'rwsr-xr-x',
install : opt,
build_by_default : opt)
if opt and not is_disabler(exe)
exes += exe
manadocs += ['login-utils/su.1.adoc']
bashcompletions += ['su']
endif
opt = not get_option('build-newgrp').disabled()
exe = executable(
'newgrp',
'login-utils/newgrp.c',
include_directories : includes,
dependencies : [lib_crypt],
install_dir : usrbin_exec_dir,
install_mode : 'rwsr-xr-x',
install : opt,
build_by_default : opt)
if opt and not is_disabler(exe)
exes += exe
manadocs += ['login-utils/newgrp.1.adoc']
bashcompletions += ['newgrp']
endif
opt = not get_option('build-lslogins').disabled()
exe = executable(
'lslogins',
'login-utils/lslogins.c',
include_directories : includes,
link_with : [lib_common,
lib_smartcols,
logindefs_c],
dependencies : [lib_selinux,
lib_systemd],
install_dir : usrbin_exec_dir,
install : opt,
build_by_default : opt)
if opt and not is_disabler(exe)
exes += exe
manadocs += ['login-utils/lslogins.1.adoc']
bashcompletions += ['lslogins']
endif
opt = not get_option('build-vipw').disabled()
exe = executable(
'vipw',
'login-utils/vipw.c',
'login-utils/setpwnam.h',
include_directories : includes,
link_with : [lib_common],
dependencies : [lib_selinux],
install_dir : usrbin_exec_dir,
install : opt,
build_by_default : opt)
if opt and not is_disabler(exe)
exes += exe
meson.add_install_script(meson_make_symlink,
'vipw',
join_paths(usrbin_exec_dir, 'vigr'))
manadocs += ['login-utils/vipw.8.adoc']
meson.add_install_script(meson_make_symlink,
'vipw.8',
join_paths(mandir, 'man8/vigr.8'))
endif
opt = not get_option('build-runuser').disabled()
exe = executable(
'runuser',
'login-utils/runuser.c',
'login-utils/su-common.c',
'login-utils/su-common.h',
'lib/shells.c',
pty_session_c,
monotonic_c,
include_directories : includes,
link_with : [lib_common, logindefs_c],
dependencies : [lib_pam,
lib_pam_misc,
lib_util,
realtime_libs],
install_dir : sbindir,
install : opt,
build_by_default : opt)
if opt and not is_disabler(exe)
exes += exe
manadocs += ['login-utils/runuser.1.adoc']
bashcompletionslinks += {'runuser': 'su'}
endif
############################################################
if is_glibc
exe = executable(
'col',
col_sources,
include_directories : includes,
link_with : lib_common,
install_dir : usrbin_exec_dir,
install : true)
exes += exe
manadocs += ['text-utils/col.1.adoc']
bashcompletions += ['col']
endif
exe = executable(
'colcrt',
colcrt_sources,
include_directories : includes,
install_dir : usrbin_exec_dir,
install : true)
exes += exe
manadocs += ['text-utils/colcrt.1.adoc']
bashcompletions += ['colcrt']
exe = executable(
'colrm',
colrm_sources,
include_directories : includes,
link_with : lib_common,
install_dir : usrbin_exec_dir,
install : true)
exes += exe
manadocs += ['text-utils/colrm.1.adoc']
bashcompletions += ['colrm']
exe = executable(
'rev',
rev_sources,
include_directories : includes,
install_dir : usrbin_exec_dir,
install : true)
exes += exe
manadocs += ['text-utils/rev.1.adoc']
bashcompletions += ['rev']
exe = executable(
'column',
column_sources,
include_directories : includes,
link_with : [lib_common,
lib_smartcols],
install_dir : usrbin_exec_dir,
install : true)
if not is_disabler(exe)
exes += exe
manadocs += ['text-utils/column.1.adoc']
bashcompletions += ['column']
endif
opt = not get_option('build-line').disabled()
exe = executable(
'line',
line_sources,
include_directories : includes,
install_dir : usrbin_exec_dir,
install : opt,
build_by_default : opt)
if opt and not is_disabler(exe)
exes += exe
manadocs += ['text-utils/line.1.adoc']
endif
opt = not get_option('build-pg').disabled()
exe = executable(
'pg',
pg_sources,
link_with : lib_common,
include_directories : includes,
dependencies : [lib_tinfo,
curses_libs],
install_dir : usrbin_exec_dir,
install : opt,
build_by_default : opt)
if opt and not is_disabler(exe)
exes += exe
manadocs += ['text-utils/pg.1.adoc']
bashcompletions += ['pg']
endif
opt = not get_option('build-ul').disabled()
exe = executable(
'ul',
ul_sources,
include_directories : includes,
dependencies : [lib_tinfo,
curses_libs],
install_dir : usrbin_exec_dir,
install : opt,
build_by_default : opt)
if opt and not is_disabler(exe)
exes += exe
manadocs += ['text-utils/ul.1.adoc']
bashcompletions += ['ul']
endif
opt = not get_option('build-more').disabled()
exe = executable(
'more',
more_sources,
link_with : [lib_common],
include_directories : includes,
dependencies : [lib_tinfo,
curses_libs,
lib_magic],
install : opt,
build_by_default : opt)
exe2 = executable(
'test_more',
more_sources,
link_with : [lib_common],
include_directories : includes,
c_args : '-DTEST_PROGRAM',
dependencies : [lib_tinfo,
curses_libs,
lib_magic],
build_by_default : opt and program_tests)
exes += exe
if opt and not is_disabler(exe)
exes += [exe, exe2]
manadocs += ['text-utils/more.1.adoc']
bashcompletions += ['more']
endif
exe = executable(
'hexdump',
hexdump_sources,
include_directories : includes,
link_with : [lib_common,
lib_tcolors],
install_dir : usrbin_exec_dir,
install : true)
if not is_disabler(exe)
exes += exe
manadocs += ['text-utils/hexdump.1.adoc']
bashcompletions += ['hexdump']
endif
opt = not get_option('build-lsmem').disabled()
exe = executable(
'lsmem',
lsmem_sources,
include_directories : includes,
link_with : [lib_common,
lib_smartcols],
install_dir : usrbin_exec_dir,
install : opt,
build_by_default : opt)
if opt and not is_disabler(exe)
exes += exe
manadocs += ['sys-utils/lsmem.1.adoc']
bashcompletions += ['lsmem']
endif
opt = not get_option('build-chmem').disabled()
exe = executable(
'chmem',
chmem_sources,
include_directories : includes,
link_with : [lib_common],
install_dir : usrbin_exec_dir,
install : opt,
build_by_default : opt)
if opt and not is_disabler(exe)
exes += exe
manadocs += ['sys-utils/chmem.8.adoc']
bashcompletions += ['chmem']
endif
exe = executable(
'choom',
choom_sources,
include_directories : includes,
link_with : [lib_common],
install_dir : usrbin_exec_dir,
install : true)
exes += exe
manadocs += ['sys-utils/choom.1.adoc']
exe = executable(
'ipcmk',
ipcmk_sources,
include_directories : includes,
link_with : [lib_common],
install_dir : usrbin_exec_dir,
install : true)
exes += exe
manadocs += ['sys-utils/ipcmk.1.adoc']
bashcompletions += ['ipcmk']
exe = executable(
'ipcrm',
ipcrm_sources,
include_directories : includes,
link_with : [lib_common],
install_dir : usrbin_exec_dir,
install : true)
exes += exe
manadocs += ['sys-utils/ipcrm.1.adoc']
bashcompletions += ['ipcrm']
opt = not get_option('build-ipcs').disabled()
exe = executable(
'ipcs',
ipcs_sources,
include_directories : includes,
link_with : [lib_common],
install_dir : usrbin_exec_dir,
install : opt,
build_by_default : opt)
if opt and not is_disabler(exe)
exes += exe
manadocs += ['sys-utils/ipcs.1.adoc']
bashcompletions += ['ipcs']
endif
opt = not get_option('build-rfkill').disabled()
exe = executable(
'rfkill',
rfkill_sources,
include_directories : includes,
link_with : [lib_common,
lib_smartcols],
install_dir : usrsbin_exec_dir,
install : opt,
build_by_default : opt)
if opt and not is_disabler(exe)
exes += exe
manadocs += ['sys-utils/rfkill.8.adoc']
bashcompletions += ['rfkill']
endif
exe = executable(
'renice',
renice_sources,
include_directories : includes,
link_with : [lib_common,
lib_smartcols],
install_dir : usrbin_exec_dir,
install : true)
if not is_disabler(exe)
exes += exe
manadocs += ['sys-utils/renice.1.adoc']
bashcompletions += ['renice']
endif
exe = executable(
'setpgid',
setpgid_sources,
include_directories: includes,
link_with : [lib_common,
lib_smartcols],
install_dir : usrbin_exec_dir,
install : true)
if opt and not is_disabler(exe)
exes += exe
manadocs += ['sys-utils/setpgid.1.adoc']
bashcompletions += ['setpgid']
endif
exe = executable(
'setsid',
setsid_sources,
include_directories : includes,
link_with : [lib_common,
lib_smartcols],
install_dir : usrbin_exec_dir,
install : true)
if opt and not is_disabler(exe)
exes += exe
manadocs += ['sys-utils/setsid.1.adoc']
bashcompletions += ['setsid']
endif
exe = executable(
'readprofile',
readprofile_sources,
include_directories : includes,
link_with : [lib_common,
lib_smartcols],
install_dir : usrsbin_exec_dir,
install : true)
if not is_disabler(exe)
exes += exe
manadocs += ['sys-utils/readprofile.8.adoc']
bashcompletions += ['readprofile']
endif
opt = not get_option('build-tunelp').disabled()
exe = executable(
'tunelp',
tunelp_sources,
include_directories : includes,
link_with : [lib_common],
install_dir : usrsbin_exec_dir,
install : opt,
build_by_default : opt)
if opt and not is_disabler(exe)
exes += exe
manadocs += ['sys-utils/tunelp.8.adoc']
bashcompletions += ['tunelp']
endif
exe = executable(
'fstrim',
fstrim_sources,
include_directories : includes,
link_with : [lib_common,
lib_mount],
install_dir : sbindir,
install : true)
if not is_disabler(exe)
exes += exe
manadocs += ['sys-utils/fstrim.8.adoc']
bashcompletions += ['fstrim']
endif
exe = executable(
'dmesg',
dmesg_sources,
include_directories : includes,
link_with : [lib_common,
lib_tcolors],
install : true)
if not is_disabler(exe)
exes += exe
manadocs += ['sys-utils/dmesg.1.adoc']
bashcompletions += ['dmesg']
endif
exe = executable(
'test_dmesg',
dmesg_sources,
include_directories : dir_include,
c_args : '-DTEST_DMESG',
link_with : [lib_common,
lib_tcolors],
build_by_default : program_tests)
if not is_disabler(exe)
exes += exe
endif
exe = executable(
'ctrlaltdel',
ctrlaltdel_sources,
include_directories : includes,
link_with : [lib_common],
install_dir : sbindir,
install : true)
exes += exe
manadocs += ['sys-utils/ctrlaltdel.8.adoc']
bashcompletions += ['ctrlaltdel']
exe = executable(
'fsfreeze',
fsfreeze_sources,
include_directories : includes,
install_dir : sbindir,
install : true)
exes += exe
manadocs += ['sys-utils/fsfreeze.8.adoc']
bashcompletions += ['fsfreeze']
exe = executable(
'blkdiscard',
blkdiscard_sources,
include_directories : includes,
link_with : [lib_common,
lib_blkid],
install_dir : sbindir,
install : true)
exes += exe
manadocs += ['sys-utils/blkdiscard.8.adoc']
bashcompletions += ['blkdiscard']
exe = executable(
'blkzone',
blkzone_sources,
include_directories : includes,
link_with : [lib_common],
install_dir : sbindir,
install : true)
exes += exe
manadocs += ['sys-utils/blkzone.8.adoc']
bashcompletions += ['blkzone']
exe = executable(
'blkpr',
blkpr_sources,
include_directories : includes,
link_with : [lib_common],
install_dir : sbindir,
install : true)
exes += exe
manadocs += ['sys-utils/blkpr.8.adoc']
exe = executable(
'ldattach',
ldattach_sources,
include_directories : includes,
link_with : [lib_common],
install_dir : usrsbin_exec_dir,
install : true)
exes += exe
manadocs += ['sys-utils/ldattach.8.adoc']
bashcompletions += ['ldattach']
exe = executable(
'rtcwake',
rtcwake_sources,
include_directories : includes,
link_with : [lib_common],
install_dir : usrsbin_exec_dir,
install : true)
exes += exe
manadocs += ['sys-utils/rtcwake.8.adoc']
bashcompletions += ['rtcwake']
exe = executable(
'setarch',
setarch_sources,
include_directories : includes,
link_with : [lib_common],
install_dir : usrbin_exec_dir,
install : true)
exes += exe
manadocs += ['sys-utils/setarch.8.adoc']
bashcompletions += ['setarch']
setarch_links = ['uname26', 'linux32', 'linux64']
setarch_links_arch = {
's390x' : ['s390', 's390x'],
'x86' : ['i386'],
'x86_64' : ['i386', 'x86_64'],
'ppc64' : ['ppc', 'ppc64', 'ppc32'],
'space64' : ['sparc', 'sparc64', 'sparc32', 'sparc32bash'],
'mips64' : ['mips', 'mips64', 'mips32'],
'ia64' : ['i386', 'ia64'],
'hppa' : ['parisc', 'parisc64', 'parisc32'],
}
setarch_links += setarch_links_arch.get(host_machine.cpu_family(), [])
foreach link: setarch_links
meson.add_install_script(meson_make_symlink,
'setarch',
join_paths(usrbin_exec_dir, link))
manlinks += {link + '.8': 'setarch.8'}
endforeach
opt = not get_option('build-eject').disabled()
exe = executable(
'eject',
eject_sources,
include_directories : includes,
link_with : [lib_common,
lib_mount],
install_dir : usrbin_exec_dir,
install : opt,
build_by_default : opt)
if opt and not is_disabler(exe)
exe = exe
manadocs += ['sys-utils/eject.1.adoc']
bashcompletions += ['eject']
endif
opt = not get_option('build-losetup').disabled()
exe = executable(
'losetup',
losetup_sources,
include_directories : includes,
link_with : [lib_common,
lib_smartcols],
install_dir : sbindir,
install : opt,
build_by_default : opt)
if opt and not is_disabler(exe)
manadocs += ['sys-utils/losetup.8.adoc']
exes += exe
bashcompletions += ['losetup']
endif
opt = opt and 'losetup' in static_programs
exe = executable(
'losetup.static',
losetup_sources,
include_directories : includes,
link_args : ['--static'],
link_with : [lib_common,
lib_smartcols.get_static_lib()],
install_dir : sbindir,
install : opt,
build_by_default : opt)
if opt and not is_disabler(exe)
exes += exe
endif
opt = not get_option('build-zramctl').disabled()
exe = executable(
'zramctl',
zramctl_sources,
include_directories : includes,
link_with : [lib_common,
lib_smartcols],
install_dir : sbindir,
install : opt,
build_by_default : opt)
if opt and not is_disabler(exe)
exes += exe
manadocs += ['sys-utils/zramctl.8.adoc']
bashcompletions += ['zramctl']
endif
exe = executable(
'prlimit',
prlimit_sources,
include_directories : includes,
link_with : [lib_common,
lib_smartcols],
install_dir : usrbin_exec_dir,
install : true)
if not is_disabler(exe)
exes += exe
manadocs += ['sys-utils/prlimit.1.adoc']
bashcompletions += ['prlimit']
endif
exe = executable(
'lsns',
lsns_sources,
include_directories : includes,
link_with : [lib_common,
lib_smartcols,
lib_mount],
install_dir : usrbin_exec_dir,
install : true)
if not is_disabler(exe)
exes += exe
manadocs += ['sys-utils/lsns.8.adoc']
bashcompletions += ['lsns']
endif
opt = not get_option('build-mount').disabled()
exe = executable(
'mount',
mount_sources,
include_directories : includes,
link_with : [lib_common,
lib_smartcols,
lib_mount],
dependencies : lib_selinux,
install_mode : 'rwsr-xr-x',
install : opt,
build_by_default : opt)
exe2 = executable(
'umount',
umount_sources,
include_directories : includes,
link_with : [lib_common,
lib_mount],
install_mode : 'rwsr-xr-x',
install : opt,
build_by_default : opt)
if opt and not is_disabler(exe)
exes += [exe, exe2]
manadocs += ['sys-utils/fstab.5.adoc',
'sys-utils/mount.8.adoc',
'sys-utils/umount.8.adoc']
bashcompletions += ['mount', 'umount']
endif
opt2 = opt and 'mount' in static_programs
exe = executable(
'mount.static',
mount_sources,
include_directories : includes,
link_args : ['--static'],
link_with : [lib_common,
lib_smartcols_static,
lib_mount_static],
install : opt2,
build_by_default : opt2)
if opt2 and not is_disabler(exe)
exes += exe
endif
opt2 = opt and 'umount' in static_programs
exe = executable(
'umount.static',
umount_sources,
include_directories : includes,
link_args : ['--static'],
link_with : [lib_common,
lib_mount_static],
install : opt2,
build_by_default : opt2)
if opt2 and not is_disabler(exe)
exes += exe
endif
# setuid?
exe = executable(
'swapon',
swapon_sources,
include_directories : includes,
link_with : [lib_common,
lib_blkid,
lib_mount,
lib_smartcols],
install_dir : sbindir,
install : true)
if not is_disabler(exe)
exes += exe
manadocs += ['sys-utils/swapon.8.adoc']
bashcompletions += ['swapon']
endif
exe = executable(
'swapoff',
swapoff_sources,
include_directories : includes,
link_with : [lib_common,
lib_blkid,
lib_mount],
install_dir : sbindir,
install : true)
if not is_disabler(exe)
exes += exe
manlinks += {'swapoff.8': 'swapon.8'}
bashcompletions += ['swapoff']
endif
exe = executable(
'lscpu',
lscpu_sources,
include_directories : includes,
link_with : [lib_common,
lib_smartcols],
dependencies : [rtas_libs],
install_dir : usrbin_exec_dir,
install : true)
if not is_disabler(exe)
exes += exe
manadocs += ['sys-utils/lscpu.1.adoc']
bashcompletions += ['lscpu']
endif
exe = executable(
'chcpu',
chcpu_sources,
include_directories : includes,
link_with : [lib_common],
install_dir : sbindir,
install : true)
exes += exe
manadocs += ['sys-utils/chcpu.8.adoc']
bashcompletions += ['chcpu']
exe = executable(
'wdctl',
wdctl_sources,
include_directories : includes,
link_with : [lib_common,
lib_smartcols],
install : true)
if not is_disabler(exe)
exes += exe
manadocs += ['sys-utils/wdctl.8.adoc']
bashcompletions += ['wdctl']
endif
opt = not get_option('build-mountpoint').disabled()
exe = executable(
'mountpoint',
mountpoint_sources,
include_directories : includes,
link_with : [lib_mount],
install : opt,
build_by_default : opt)
if opt and not is_disabler(exe)
exes += exe
manadocs += ['sys-utils/mountpoint.1.adoc']
bashcompletions += ['mountpoint']
endif
opt = not get_option('build-fallocate').disabled()
exe = executable(
'fallocate',
fallocate_sources,
include_directories : includes,
link_with : [lib_common],
install_dir : usrbin_exec_dir,
install : opt,
build_by_default : opt)
if opt and not is_disabler(exe)
exes += exe
manadocs += ['sys-utils/fallocate.1.adoc']
bashcompletions += ['fallocate']
endif
opt = not get_option('build-pivot_root').disabled()
exe = executable(
'pivot_root',
pivot_root_sources,
include_directories : includes,
install_dir : sbindir,
install : opt,
build_by_default : opt)
if opt and not is_disabler(exe)
exes += exe
manadocs += ['sys-utils/pivot_root.8.adoc']
bashcompletions += ['pivot_root']
endif
opt = not get_option('build-switch_root').disabled()
if opt and not have_dirfd and not have_ddfd
error('neither dirfd nor ddfd are available')
endif
exe = executable(
'switch_root',
switch_root_sources,
include_directories : includes,
install_dir : sbindir,
install : opt,
build_by_default : opt)
if opt and not is_disabler(exe)
exes += exe
manadocs += ['sys-utils/switch_root.8.adoc']
endif
opt = not get_option('build-unshare').disabled()
exe = executable(
'unshare',
unshare_sources,
include_directories : includes,
link_with : [lib_common],
install_dir : usrbin_exec_dir,
install : opt,
build_by_default : opt)
if opt and not is_disabler(exe)
exes += exe
manadocs += ['sys-utils/unshare.1.adoc']
bashcompletions += ['unshare']
endif
opt = opt and 'unshare' in static_programs
exe = executable(
'unshare.static',
unshare_sources,
include_directories : includes,
link_with : [lib_common],
install_dir : usrbin_exec_dir,
install : opt,
build_by_default : opt)
if opt and not is_disabler(exe)
exes += exe
endif
opt = not get_option('build-nsenter').disabled()
exe = executable(
'nsenter',
nsenter_sources,
include_directories : includes,
link_with : [lib_common],
dependencies : [lib_selinux],
install_dir : usrbin_exec_dir,
install : opt,
build_by_default : opt)
if opt and not is_disabler(exe)
exes += exe
manadocs += ['sys-utils/nsenter.1.adoc']
bashcompletions += ['nsenter']
endif
opt = opt and 'nsenter' in static_programs
exe = executable(
'nsenter.static',
nsenter_sources,
include_directories : includes,
link_with : [lib_common],
dependencies : [lib_selinux],
install_dir : usrbin_exec_dir,
install : opt,
build_by_default : opt)
if opt and not is_disabler(exe)
exes += exe
endif
opt = not get_option('build-setpriv').disabled() and lib_cap_ng.found()
exe = executable(
'setpriv',
setpriv_sources,
include_directories : includes,
link_with : [lib_common],
dependencies : [lib_cap_ng],
install_dir : usrbin_exec_dir,
install : opt,
build_by_default : opt)
if opt and not is_disabler(exe)
exes += exe
manadocs += ['sys-utils/setpriv.1.adoc']
bashcompletions += ['setpriv']
endif
exe = executable(
'flock',
flock_sources,
include_directories : includes,
link_with : [lib_common],
dependencies : realtime_libs,
install_dir : usrbin_exec_dir,
install : true)
exes += exe
manadocs += ['sys-utils/flock.1.adoc']
bashcompletions += ['flock']
opt = not get_option('build-lsirq').disabled()
exe = executable(
'lsirq',
lsirq_sources,
include_directories : includes,
link_with : [lib_common,
lib_smartcols],
install_dir : usrbin_exec_dir,
install : opt,
build_by_default : opt)
if opt and not is_disabler(exe)
exes += exe
manadocs += ['sys-utils/lsirq.1.adoc']
bashcompletions += ['lsirq']
endif
opt = not get_option('build-irqtop').disabled()
exe = executable(
'irqtop',
irqtop_sources,
include_directories : includes,
dependencies : [realtime_libs, curses_libs],
link_with : [lib_common,
lib_smartcols,
lib_tcolors],
install_dir : usrbin_exec_dir,
install : opt,
build_by_default : opt)
if opt and not is_disabler(exe)
exes += exe
manadocs += ['sys-utils/irqtop.1.adoc']
bashcompletions += ['irqtop']
endif
opt = not get_option('build-ipcs').disabled()
exe = executable(
'lsipc',
lsipc_sources,
include_directories : includes,
link_with : [lib_common,
lib_smartcols],
install_dir : usrbin_exec_dir,
install : opt,
build_by_default : opt)
if opt and not is_disabler(exe)
exes += exe
manadocs += ['sys-utils/lsipc.1.adoc']
bashcompletions += ['lsipc']
endif
opt = build_hwclock
exe = executable(
'hwclock',
hwclock_sources,
include_directories : includes,
link_with : [lib_common],
dependencies : [lib_m,
lib_audit],
install_dir : sbindir,
install : opt,
build_by_default : opt)
if opt and not is_disabler(exe)
exes += exe
manadocs += ['sys-utils/hwclock.8.adoc', 'sys-utils/adjtime_config.5.adoc']
bashcompletions += ['hwclock']
endif
exe = executable(
'mkfs',
mkfs_sources,
include_directories : includes,
install_dir : sbindir,
install : true)
exes += exe
manadocs += ['disk-utils/mkfs.8.adoc']
bashcompletions += ['mkfs']
opt = not get_option('build-bfs').disabled()
exe = executable(
'mkfs.bfs',
mkfs_bfs_sources,
include_directories : includes,
link_with : [lib_common],
install_dir : sbindir,
install : opt,
build_by_default : opt)
if opt and not is_disabler(exe)
exes += exe
manadocs += ['disk-utils/mkfs.bfs.8.adoc']
bashcompletions += ['mkfs.bfs']
endif
exe = executable(
'isosize',
isosize_sources,
include_directories : includes,
link_with : [lib_common],
install_dir : usrbin_exec_dir,
install : true)
exes += exe
manadocs += ['disk-utils/isosize.8.adoc']
bashcompletions += ['isosize']
exe = executable(
'mkswap',
mkswap_sources,
include_directories : includes,
link_with : [lib_common,
lib_blkid,
lib_uuid],
dependencies: [lib_selinux],
install_dir : sbindir,
install : true)
if not is_disabler(exe)
exes += exe
manadocs += ['disk-utils/mkswap.8.adoc']
bashcompletions += ['mkswap']
endif
exe = executable(
'swaplabel',
swaplabel_sources,
include_directories : includes,
link_with : [lib_common,
lib_blkid,
lib_uuid],
install_dir : sbindir,
install : true)
if not is_disabler(exe)
exes += exe
manadocs += ['disk-utils/swaplabel.8.adoc']
bashcompletions += ['swaplabel']
endif
opt = not get_option('build-fsck').disabled()
exe = executable(
'fsck',
fsck_sources,
include_directories : includes,
link_with : [lib_common,
lib_blkid,
lib_mount],
dependencies : realtime_libs,
install_dir : sbindir,
install : opt,
build_by_default : opt)
if opt and not is_disabler(exe)
exes += exe
manadocs += ['disk-utils/fsck.8.adoc']
bashcompletions += ['fsck']
endif
opt = not get_option('build-minix').disabled()
exe = executable(
'mkfs.minix',
mkfs_minix_sources,
include_directories : includes,
link_with : [lib_common],
install_dir : sbindir,
install : opt,
build_by_default : opt)
exe2 = executable(
'test_mkfs_minix',
mkfs_minix_sources,
include_directories : includes,
c_args : '-DTEST_SCRIPT',
link_with : [lib_common],
build_by_default : opt and program_tests)
exe3 = executable(
'fsck.minix',
fsck_minix_sources,
include_directories : includes,
link_with : [lib_common],
install_dir : sbindir,
install : opt,
build_by_default : opt)
if opt and not is_disabler(exe)
exes += [exe, exe2, exe3]
manadocs += ['disk-utils/mkfs.minix.8.adoc','disk-utils/fsck.minix.8.adoc']
bashcompletions += ['mkfs.minix', 'fsck.minix']
endif
opt = not get_option('build-cramfs').disabled()
exe = executable(
'mkfs.cramfs',
mkfs_cramfs_sources,
include_directories : includes,
link_with : [lib_common],
dependencies : [lib_z],
install_dir : sbindir,
install : opt,
build_by_default : opt)
exe2 = executable(
'fsck.cramfs',
fsck_cramfs_sources,
include_directories : includes,
link_with : [lib_common],
dependencies : [lib_z],
install_dir : sbindir,
install : opt,
build_by_default : opt)
if not is_disabler(exe)
exes += [exe, exe2]
manadocs += ['disk-utils/mkfs.cramfs.8.adoc','disk-utils/fsck.cramfs.8.adoc']
bashcompletions += ['mkfs.cramfs', 'fsck.cramfs']
endif
opt = not get_option('build-raw').disabled()
if opt
cc.has_header('linux/raw.h', required: opt)
endif
exe = executable(
'raw',
raw_sources,
include_directories : includes,
install_dir : sbindir,
install : opt,
build_by_default : opt)
if opt and not is_disabler(exe)
exes += exe
manadocs += ['disk-utils/raw.8.adoc']
bashcompletions += ['raw']
endif
opt = not get_option('build-fdformat').disabled()
exe = executable(
'fdformat',
fdformat_sources,
include_directories : includes,
link_with : [lib_common],
install_dir : usrsbin_exec_dir,
install : opt,
build_by_default : opt)
if opt and not is_disabler(exe)
exes += exe
manadocs += ['disk-utils/fdformat.8.adoc']
bashcompletions += ['fdformat']
endif
exe = executable(
'blockdev',
blockdev_sources,
include_directories : includes,
link_with : [lib_common],
install_dir : sbindir,
install : true)
manadocs += ['disk-utils/blockdev.8.adoc']
bashcompletions += ['blockdev']
opt = not get_option('build-fdisks').disabled()
if opt and not have_dirfd and not have_ddfd
error('neither dirfd nor ddfd are available')
endif
exe = executable(
'fdisk',
fdisk_sources,
include_directories : includes,
link_with : [lib_common,
lib_fdisk,
lib_smartcols,
lib_tcolors],
dependencies : [lib_readline],
install_dir : sbindir,
install : opt,
build_by_default : opt)
if opt and not is_disabler(exe)
exes += exe
bashcompletions += ['fdisk']
endif
opt2 = opt and 'fdisk' in static_programs
exe = executable(
'fdisk.static',
fdisk_sources,
link_args : ['--static'],
include_directories : includes,
link_with : [lib_common,
lib_tcolors,
lib_fdisk_static,
lib_smartcols.get_static_lib()],
dependencies : [lib_readline_static],
install_dir : sbindir,
install : opt2,
build_by_default : opt2)
if opt2 and not is_disabler(exe)
exes += exe
endif
exe = executable(
'sfdisk',
sfdisk_sources,
include_directories : includes,
link_with : [lib_common,
lib_fdisk,
lib_smartcols,
lib_tcolors],
dependencies : [lib_readline],
install_dir : sbindir,
install : opt,
build_by_default : opt)
if opt and not is_disabler(exe)
exes += exe
bashcompletions += ['sfdisk']
endif
opt2 = opt and 'sfdisk' in static_programs
exe = executable(
'sfdisk.static',
sfdisk_sources,
include_directories : includes,
link_with : [lib_common,
lib_tcolors,
lib_fdisk_static,
lib_smartcols.get_static_lib()],
dependencies : [lib_readline_static],
install_dir : sbindir,
install : opt2,
build_by_default : opt2)
if opt2 and not is_disabler(exe)
exes += exe
endif
exe = executable(
'cfdisk',
cfdisk_sources,
include_directories : includes,
link_with : [lib_common,
lib_fdisk,
lib_smartcols,
lib_tcolors,
lib_mount],
dependencies : [curses_libs],
install_dir : sbindir,
install : opt,
build_by_default : opt)
if opt and not is_disabler(exe)
exes += exe
manadocs += ['disk-utils/fdisk.8.adoc',
'disk-utils/sfdisk.8.adoc',
'disk-utils/cfdisk.8.adoc']
bashcompletions += ['cfdisk']
endif
opt = not get_option('build-partx').disabled()
exe = executable(
'addpart',
addpart_sources,
include_directories : includes,
link_with : [lib_common],
install_dir : usrsbin_exec_dir,
install : opt,
build_by_default : opt)
exe2 = executable(
'delpart',
delpart_sources,
include_directories : includes,
link_with : [lib_common],
install_dir : usrsbin_exec_dir,
install : opt,
build_by_default : opt)
exe3 = executable(
'resizepart',
resizepart_sources,
include_directories : includes,
link_with : [lib_common],
install_dir : usrsbin_exec_dir,
install : opt,
build_by_default : opt)
exe4 = executable(
'partx',
partx_sources,
include_directories : includes,
link_with : [lib_common,
lib_blkid,
lib_smartcols],
install_dir : usrsbin_exec_dir,
install : opt,
build_by_default : opt)
if opt
exes += [exe, exe2, exe3, exe4]
manadocs += ['disk-utils/addpart.8.adoc',
'disk-utils/delpart.8.adoc',
'disk-utils/resizepart.8.adoc',
'disk-utils/partx.8.adoc']
bashcompletions += ['addpart', 'delpart', 'resizepart', 'partx']
endif
############################################################
exe = executable(
'script',
script_sources,
include_directories : includes,
link_with : [lib_common],
dependencies : [lib_util,
lib_utempter,
realtime_libs,
math_libs],
install_dir : usrbin_exec_dir,
install : true)
exes += exe
manadocs += ['term-utils/script.1.adoc']
bashcompletions += ['script']
exe = executable(
'test_script',
script_sources,
include_directories : includes,
c_args : '-DTEST_SCRIPT',
link_with : [lib_common],
dependencies : [lib_util,
lib_utempter,
realtime_libs,
math_libs],
build_by_default : program_tests)
exes += exe
exe = executable(
'scriptlive',
scriptlive_sources,
include_directories : includes,
link_with : [lib_common],
dependencies : [lib_util,
realtime_libs,
math_libs],
install_dir : usrbin_exec_dir,
install : true)
exes += exe
manadocs += ['term-utils/scriptlive.1.adoc']
bashcompletions += ['scriptlive']
exe = executable(
'scriptreplay',
scriptreplay_sources,
include_directories : includes,
link_with : [lib_common],
dependencies : [math_libs],
install_dir : usrbin_exec_dir,
install : true)
exes += exe
manadocs += ['term-utils/scriptreplay.1.adoc']
bashcompletions += ['scriptreplay']
opt = not get_option('build-agetty').disabled()
exe = executable(
'agetty',
agetty_sources,
include_directories : includes,
link_with : [lib_common, logindefs_c],
dependencies : [BSD ? lib_util : [], lib_systemd],
install_dir : sbindir,
install : opt,
build_by_default : opt)
if opt
exes += exe
manadocs += ['term-utils/agetty.8.adoc']
endif
opt = not get_option('build-setterm').disabled()
exe = executable(
'setterm',
setterm_sources,
include_directories : includes,
link_with : [lib_common],
dependencies : [curses_libs],
install_dir : usrbin_exec_dir,
install : opt,
build_by_default : opt)
if opt
exes += exe
manadocs += ['term-utils/setterm.1.adoc']
bashcompletions += ['setterm']
endif
opt = not get_option('build-mesg').disabled()
exe = executable(
'mesg',
mesg_sources,
include_directories : includes,
link_with : [lib_common],
install_dir : usrbin_exec_dir,
install : opt,
build_by_default : opt)
if opt
exes += exe
manadocs += ['term-utils/mesg.1.adoc']
bashcompletions += ['mesg']
endif
opt = not get_option('build-wall').disabled()
exe = executable(
'wall',
wall_sources,
include_directories : includes,
link_with : [lib_common],
dependencies : [lib_systemd],
install_dir : usrbin_exec_dir,
install_mode : [ 'rwxr-sr-x', 'root', 'tty' ],
install : opt,
build_by_default : opt)
if opt
exes += exe
manadocs += ['term-utils/wall.1.adoc']
bashcompletions += ['wall']
endif
# chgrp tty $(DESTDIR)$(usrbin_execdir)/wall
# chmod g+s $(DESTDIR)$(usrbin_execdir)/wall
opt = not get_option('build-write').disabled()
exe = executable(
'write',
write_sources,
include_directories : includes,
link_with : [lib_common],
dependencies : [lib_systemd],
install_dir : usrbin_exec_dir,
install_mode : [ 'rwxr-sr-x', 'root', 'tty' ],
install : opt,
build_by_default : opt)
if opt
exes += exe
manadocs += ['term-utils/write.1.adoc']
bashcompletions += ['write']
endif
# chgrp tty $(DESTDIR)$(usrbin_execdir)/write
# chmod g+s $(DESTDIR)$(usrbin_execdir)/write
opt = not get_option('build-login').disabled()
exe = executable(
'login',
login_sources,
include_directories : includes,
link_with : [lib_common, logindefs_c],
dependencies : [lib_pam,
lib_audit,
lib_selinux],
install : opt,
build_by_default : opt)
if not is_disabler(exe)
exes += exe
manadocs += ['login-utils/login.1.adoc']
endif
opt = not get_option('build-sulogin').disabled()
exe = executable(
'sulogin',
sulogin_sources,
include_directories : includes,
link_with : [lib_common],
dependencies : [lib_crypt,
lib_selinux],
install_dir : sbindir,
install : opt,
build_by_default : opt)
if not is_disabler(exe)
exes += exe
manadocs += ['login-utils/sulogin.8.adoc']
endif
exe = executable(
'cal',
cal_sources,
include_directories : includes,
link_with : [lib_common,
lib_tcolors],
dependencies : [curses_libs],
install_dir : usrbin_exec_dir,
install : true)
exes += exe
manadocs += ['misc-utils/cal.1.adoc']
bashcompletions += ['cal']
opt = not get_option('build-logger').disabled()
exe = executable(
'logger',
logger_sources,
include_directories : includes,
link_with : [lib_common],
dependencies : [lib_systemd],
install_dir : usrbin_exec_dir,
install : opt,
build_by_default : opt)
if opt and not is_disabler(exe)
exes += exe
manadocs += ['misc-utils/logger.1.adoc']
bashcompletions += ['logger']
endif
exe = executable(
'test_logger',
logger_sources,
include_directories : includes,
c_args : '-DTEST_LOGGER',
link_with : [lib_common],
dependencies : [lib_systemd],
build_by_default: program_tests)
if not is_disabler(exe)
exes += exe
endif
exe = executable(
'look',
look_sources,
include_directories : includes,
install_dir : usrbin_exec_dir,
install : true)
exes += exe
manadocs += ['misc-utils/look.1.adoc']
bashcompletions += ['look']
exe = executable(
'mcookie',
mcookie_sources,
include_directories : includes,
link_with : [lib_common],
install_dir : usrbin_exec_dir,
install : true)
exes += exe
manadocs += ['misc-utils/mcookie.1.adoc']
bashcompletions += ['mcookie']
if build_liblastlog2
exe = executable(
'lastlog2',
lastlog2_sources,
include_directories : includes,
link_with : [lib_common, lib_lastlog2],
install_dir : usrbin_exec_dir,
install : true)
exes += exe
manadocs += ['misc-utils/lastlog2.8.adoc']
bashcompletions += ['lastlog2']
manadocs += ['liblastlog2/man/lastlog2.3.adoc',
'liblastlog2/man/ll2_write_entry.3.adoc',
'liblastlog2/man/ll2_read_entry.3.adoc',
'liblastlog2/man/ll2_import_lastlog.3.adoc',
'liblastlog2/man/ll2_read_all.3.adoc',
'liblastlog2/man/ll2_remove_entry.3.adoc',
'liblastlog2/man/ll2_rename_user.3.adoc',
'liblastlog2/man/ll2_update_login_time.3.adoc'
]
endif
exe = executable(
'namei',
namei_sources,
include_directories : includes,
dependencies : [lib_selinux],
install_dir : usrbin_exec_dir,
install : true)
exes += exe
manadocs += ['misc-utils/namei.1.adoc']
bashcompletions += ['namei']
exe = executable(
'whereis',
whereis_sources,
include_directories : includes,
link_with : [lib_common],
install_dir : usrbin_exec_dir,
install : true)
exes += exe
manadocs += ['misc-utils/whereis.1.adoc']
bashcompletions += ['whereis']
exe = executable(
'lslocks',
lslocks_sources,
include_directories : includes,
link_with : [lib_common,
lib_mount,
lib_smartcols],
install_dir : usrbin_exec_dir,
install : true)
if not is_disabler(exe)
exes += exe
manadocs += ['misc-utils/lslocks.8.adoc']
bashcompletions += ['lslocks']
endif
exe = executable(
'lsblk',
lsblk_sources,
include_directories : includes,
link_with : [lib_common,
lib_blkid,
lib_mount,
lib_tcolors,
lib_smartcols],
dependencies : lib_udev,
install : true)
if not is_disabler(exe)
exes += exe
manadocs += ['misc-utils/lsblk.8.adoc']
bashcompletions += ['lsblk']
endif
mq_libs = []
mq_libs += cc.find_library('rt', required : true)
exe = executable(
'lsfd',
lsfd_sources,
include_directories : includes,
link_with : [lib_common,
lib_smartcols],
dependencies : mq_libs,
install_dir : usrbin_exec_dir,
install : true)
if not is_disabler(exe)
exes += exe
manadocs += ['misc-utils/lsfd.1.adoc']
endif
exe = executable(
'uuidgen',
uuidgen_sources,
include_directories : includes,
link_with : [lib_common,
lib_uuid],
install_dir : usrbin_exec_dir,
install : true)
if not is_disabler(exe)
exes += exe
manadocs += ['misc-utils/uuidgen.1.adoc']
bashcompletions += ['uuidgen']
endif
exe = executable(
'uuidparse',
uuidparse_sources,
include_directories : includes,
link_with : [lib_common,
lib_uuid,
lib_smartcols],
install_dir : usrbin_exec_dir,
install : true)
if not is_disabler(exe)
exes += exe
manadocs += ['misc-utils/uuidparse.1.adoc']
bashcompletions += ['uuidparse']
endif
opt = build_uuidd
exe = executable(
'uuidd',
uuidd_sources,
include_directories : includes,
link_with : [lib_common,
lib_uuid],
dependencies : [realtime_libs,
lib_systemd],
install_dir : usrsbin_exec_dir,
install : opt,
build_by_default : opt)
exe2 = executable(
'test_uuidd',
test_uuidd_sources,
include_directories : includes,
link_with : [lib_common,
lib_uuid],
dependencies : thread_libs,
build_by_default : opt and program_tests)
if not is_disabler(exe)
exes += [exe, exe2]
manadocs += ['misc-utils/uuidd.8.adoc']
bashcompletions += ['uuidd']
endif
opt = build_libblkid
exe = executable(
'blkid',
blkid_sources,
include_directories : includes,
link_with : [lib_common,
lib_blkid],
install_dir : sbindir,
install : opt,
build_by_default : opt)
if opt and not is_disabler(exe)
exes += exe
manadocs += ['misc-utils/blkid.8.adoc']
bashcompletions += ['blkid']
endif
opt = opt and 'blkid' in static_programs
exe = executable(
'blkid.static',
blkid_sources,
include_directories : includes,
link_with : [lib_common,
lib_blkid_static],
install_dir : sbindir,
install : opt,
build_by_default : opt)
if opt and not is_disabler(exe)
exes += exe
endif
exe = executable(
'sample-mkfs',
'libblkid/samples/mkfs.c',
include_directories : includes,
link_with : lib_blkid)
if not is_disabler(exe)
exes += exe
endif
exe = executable(
'sample-partitions',
'libblkid/samples/partitions.c',
include_directories : includes,
link_with : lib_blkid)
if not is_disabler(exe)
exes += exe
endif
exe = executable(
'sample-superblocks',
'libblkid/samples/superblocks.c',
include_directories : includes,
link_with : lib_blkid)
if not is_disabler(exe)
exes += exe
endif
exe = executable(
'sample-topology',
'libblkid/samples/topology.c',
include_directories : includes,
link_with : lib_blkid)
if not is_disabler(exe)
exes += exe
endif
exe = executable(
'test_blkid_fuzz_sample',
'libblkid/src/fuzz.c',
include_directories: includes,
link_with: lib_blkid,
build_by_default: program_tests)
if not is_disabler(exe)
exes += exe
endif
############################################################
exe = executable(
'findfs',
findfs_sources,
include_directories : includes,
link_with : [lib_blkid],
install_dir : sbindir,
install : true)
if not is_disabler(exe)
exes += exe
manadocs += ['misc-utils/findfs.8.adoc']
bashcompletions += ['findfs']
endif
exe = executable(
'wipefs',
wipefs_sources,
include_directories : includes,
link_with : [lib_common,
lib_blkid,
lib_smartcols],
install_dir : sbindir,
install : true)
if not is_disabler(exe)
exes += exe
manadocs += ['misc-utils/wipefs.8.adoc']
bashcompletions += ['wipefs']
endif
exe = executable(
'findmnt',
findmnt_sources,
include_directories : includes,
link_with : [lib_common,
lib_blkid,
lib_mount,
lib_smartcols],
dependencies : [lib_udev],
install : true)
if not is_disabler(exe)
exes += exe
manadocs += ['misc-utils/findmnt.8.adoc']
bashcompletions += ['findmnt']
endif
exe = executable(
'kill',
kill_sources,
include_directories : includes,
link_with : [lib_common],
install : true)
if not is_disabler(exe)
exes += exe
manadocs += ['misc-utils/kill.1.adoc']
endif
opt = not get_option('build-rename').disabled()
exe = executable(
'rename',
rename_sources,
include_directories : includes,
install_dir : usrbin_exec_dir,
install : opt,
build_by_default : opt)
if opt and not is_disabler(exe)
exes += exe
manadocs += ['misc-utils/rename.1.adoc']
bashcompletions += ['rename']
endif
exe = executable(
'getopt',
getopt_sources,
include_directories : includes,
link_with : [lib_common],
install_dir : usrbin_exec_dir,
install : true)
exes += exe
manadocs += ['misc-utils/getopt.1.adoc']
bashcompletions += ['getopt']
exe = executable(
'fincore',
fincore_sources,
include_directories : includes,
link_with : [lib_common,
lib_smartcols],
install_dir : usrbin_exec_dir,
install : true)
if not is_disabler(exe)
exes += exe
manadocs += ['misc-utils/fincore.1.adoc']
bashcompletions += ['fincore']
endif
exe = executable(
'hardlink',
hardlink_sources,
include_directories : includes,
link_with : [lib_common],
install_dir : usrbin_exec_dir,
install : true)
if not is_disabler(exe)
exes += exe
manadocs += ['misc-utils/hardlink.1.adoc']
bashcompletions += ['hardlink']
endif
opt = not get_option('build-pipesz').disabled()
exe = executable(
'pipesz',
pipesz_sources,
include_directories : includes,
link_with : [lib_common],
install_dir : usrbin_exec_dir,
install : true)
if opt and not is_disabler(exe)
exes += exe
manadocs += ['misc-utils/pipesz.1.adoc']
bashcompletions += ['pipesz']
endif
exe = executable(
'test_cal',
cal_sources,
include_directories : includes,
c_args : '-DTEST_CAL',
link_with : [lib_common,
lib_tcolors],
dependencies : [curses_libs],
build_by_default: program_tests)
if not is_disabler(exe)
exes += exe
endif
exe = executable(
'fadvise',
fadvise_sources,
include_directories : includes,
link_with : [lib_common],
install_dir : usrbin_exec_dir,
install : true)
if not is_disabler(exe)
exes += exe
manadocs += ['misc-utils/fadvise.1.adoc']
bashcompletions += ['fadvise']
endif
if LINUX and conf.get('HAVE_PIDFD_OPEN').to_string() == '1'
exe = executable(
'waitpid',
waitpid_sources,
include_directories : includes,
link_with : [lib_common],
install_dir : usrbin_exec_dir,
install : true)
if not is_disabler(exe)
exes += exe
manadocs += ['misc-utils/waitpid.1.adoc']
bashcompletions += ['waitpid']
endif
endif
syscalls_h = custom_target('syscalls.h',
input : 'tools/all_syscalls',
output : 'syscalls.h',
command : ['tools/all_syscalls', cc.cmd_array()]
)
if cc.compiles(fs.read('include/audit-arch.h'), name : 'has AUDIT_ARCH_NATIVE')
exe = executable(
'enosys',
'misc-utils/enosys.c', syscalls_h,
include_directories : includes,
link_with : [lib_common],
install_dir : usrbin_exec_dir,
install : true)
if not is_disabler(exe)
exes += exe
manadocs += ['misc-utils/enosys.1.adoc']
bashcompletions += ['enosys']
endif
endif
exe = executable(
'lsclocks',
lsclocks_sources,
include_directories : includes,
link_with : [lib_common, lib_smartcols],
install_dir : usrbin_exec_dir,
install : true)
if not is_disabler(exe)
exes += exe
manadocs += ['misc-utils/lsclocks.1.adoc']
bashcompletions += ['lsclocks']
endif
if conf.get('HAVE_RENAMEAT2').to_string() == '1'
exe = executable(
'exch',
exch_sources,
include_directories : includes,
link_with : [lib_common],
install_dir : usrbin_exec_dir,
install : true)
if not is_disabler(exe)
exes += exe
manadocs += ['misc-utils/exch.1.adoc']
bashcompletions += ['exch']
endif
endif
############################################################
opt = not get_option('build-schedutils').disabled()
exe = executable(
'chrt',
'schedutils/chrt.c',
include_directories : includes,
link_with : lib_common,
install_dir : usrbin_exec_dir,
install : opt,
build_by_default : opt)
exe2 = executable(
'ionice',
'schedutils/ionice.c',
include_directories : includes,
link_with : lib_common,
install_dir : usrbin_exec_dir,
install : opt,
build_by_default : opt)
exe3 = executable(
'taskset',
'schedutils/taskset.c',
include_directories : includes,
link_with : lib_common,
install_dir : usrbin_exec_dir,
install : opt,
build_by_default : opt)
exe4 = executable(
'uclampset',
'schedutils/uclampset.c',
include_directories : includes,
link_with : lib_common,
install_dir : usrbin_exec_dir,
install : opt,
build_by_default : opt)
if opt and not is_disabler(exe)
exes += [exe, exe2, exe3, exe4]
manadocs += ['schedutils/chrt.1.adoc',
'schedutils/ionice.1.adoc',
'schedutils/taskset.1.adoc',
'schedutils/uclampset.1.adoc']
bashcompletions += ['chrt', 'ionice', 'taskset', 'uclampset']
endif
############################################################
# TODO: when autotools compat is not needed, s/_/-/g in file names?
exe = executable(
'test_ttyutils',
'lib/ttyutils.c',
c_args : ['-DTEST_PROGRAM_TTYUTILS'],
include_directories : dir_include,
link_with : lib_common,
build_by_default: program_tests)
exes += exe
exe = executable(
'test_blkdev',
'lib/blkdev.c',
c_args : ['-DTEST_PROGRAM_BLKDEV'],
include_directories : dir_include,
link_with : lib_common,
build_by_default: program_tests)
exes += exe
exe = executable(
'test_ismounted',
'lib/ismounted.c',
c_args : ['-DTEST_PROGRAM_ISMOUNTED'],
include_directories : dir_include,
link_with : lib_common,
build_by_default: program_tests)
exes += exe
exe = executable(
'test_mangle',
'lib/mangle.c',
c_args : ['-DTEST_PROGRAM_MANGLE'],
include_directories : dir_include,
build_by_default: program_tests)
exes += exe
exe = executable(
'test_strutils',
'lib/strutils.c',
c_args : ['-DTEST_PROGRAM_STRUTILS'],
include_directories : dir_include,
build_by_default: program_tests)
exes += exe
exe = executable(
'test_colors',
'lib/colors.c',
'lib/color-names.c',
c_args : ['-DTEST_PROGRAM_COLORS'],
include_directories : dir_include,
link_with : [lib_common, lib_tcolors],
build_by_default: program_tests)
exes += exe
exe = executable(
'test_randutils',
'lib/randutils.c',
c_args : ['-DTEST_PROGRAM_RANDUTILS'],
include_directories : dir_include,
build_by_default: program_tests)
exes += exe
if conf.get('HAVE_OPENAT').to_string() == '1' \
and conf.get('HAVE_DIRFD').to_string() == '1'
exe = executable(
'test_procfs',
'lib/procfs.c',
c_args : ['-DTEST_PROGRAM_PROCFS'],
include_directories : dir_include,
link_with : lib_common,
build_by_default: program_tests)
exes += exe
exe = executable(
'test_path',
'lib/path.c',
'lib/fileutils.c',
have_cpu_set_t ? 'lib/cpuset.c' : [],
c_args : ['-DTEST_PROGRAM_PATH'],
include_directories : dir_include,
link_with : lib_common,
build_by_default: program_tests)
exes += exe
endif
if conf.get('HAVE_PTY').to_string() == '1'
exe = executable(
'test_pty',
pty_session_c,
monotonic_c,
c_args : ['-DTEST_PROGRAM_PTY'],
include_directories : dir_include,
link_with : [lib_common],
dependencies : [lib_m,
realtime_libs,
lib_util],
build_by_default: program_tests)
exes += exe
endif
if LINUX
exe = executable(
'test_cpuset',
'lib/cpuset.c',
c_args : ['-DTEST_PROGRAM_CPUSET'],
include_directories : dir_include,
build_by_default: program_tests)
exes += exe
endif
exe = executable(
'test_sysfs',
'lib/sysfs.c',
'lib/path.c',
'lib/buffer.c',
'lib/mbsalign.c',
'lib/fileutils.c',
have_cpu_set_t ? 'lib/cpuset.c' : [],
c_args : ['-DTEST_PROGRAM_SYSFS'],
include_directories : dir_include,
build_by_default: program_tests)
exes += exe
exe = executable(
'test_pager',
'lib/pager.c',
c_args : ['-DTEST_PROGRAM_PAGER'],
include_directories : dir_include,
build_by_default: program_tests)
exes += exe
exe = executable(
'test_linux_version',
'lib/linux_version.c',
c_args : ['-DTEST_PROGRAM_LINUXVERSION'],
include_directories : dir_include,
build_by_default: program_tests)
exes += exe
exe = executable(
'test_fileutils',
'lib/fileutils.c',
c_args : ['-DTEST_PROGRAM_FILEUTILS'],
include_directories : dir_include,
build_by_default: program_tests)
exes += exe
exe = executable(
'test_canonicalize',
'lib/canonicalize.c',
c_args : ['-DTEST_PROGRAM_CANONICALIZE'],
include_directories : dir_include,
build_by_default: program_tests)
exes += exe
exe = executable(
'test_timeutils',
'lib/timeutils.c',
'lib/strutils.c',
c_args : ['-DTEST_PROGRAM_TIMEUTILS'],
include_directories : dir_include,
build_by_default: program_tests)
exes += exe
exe = executable(
'test_pwdutils',
'lib/pwdutils.c',
c_args : ['-DTEST_PROGRAM'],
include_directories : dir_include,
link_with : lib_common,
build_by_default: program_tests)
exes += exe
exe = executable(
'test_logindefs',
'lib/logindefs.c',
c_args : ['-DTEST_PROGRAM'],
include_directories : dir_include,
link_with : [lib_common, logindefs_c],
build_by_default: program_tests)
exes += exe
############################################################
exe = executable(
'test_uuid_parser',
'libuuid/src/test_uuid.c',
include_directories : [dir_include, dir_libuuid],
link_with : lib_uuid,
dependencies : socket_libs,
build_by_default: program_tests)
if not is_disabler(exe)
exes += exe
endif
############################################################
libfdisk_tests_cflags = ['-DTEST_PROGRAM']
libfdisk_tests_ldadd = [lib_fdisk_static, lib_uuid, lib_blkid]
exe = executable(
'test_fdisk_ask',
'libfdisk/src/ask.c',
c_args : libfdisk_tests_cflags,
include_directories : lib_fdisk_includes,
link_with : libfdisk_tests_ldadd,
build_by_default: program_tests)
if not is_disabler(exe)
exes += exe
endif
exe = executable(
'test_fdisk_gpt',
'libfdisk/src/gpt.c',
c_args : libfdisk_tests_cflags,
include_directories : lib_fdisk_includes,
link_with : libfdisk_tests_ldadd,
build_by_default: program_tests)
if not is_disabler(exe)
exes += exe
endif
exe = executable(
'test_fdisk_utils',
'libfdisk/src/utils.c',
c_args : libfdisk_tests_cflags,
include_directories : lib_fdisk_includes,
link_with : libfdisk_tests_ldadd,
build_by_default: program_tests)
if not is_disabler(exe)
exes += exe
endif
exe = executable(
'test_fdisk_script',
'libfdisk/src/script.c',
c_args : libfdisk_tests_cflags,
include_directories : lib_fdisk_includes,
link_with : libfdisk_tests_ldadd,
build_by_default: program_tests)
if not is_disabler(exe)
exes += exe
endif
exe = executable(
'test_fdisk_version',
'libfdisk/src/version.c',
c_args : libfdisk_tests_cflags,
include_directories : lib_fdisk_includes,
link_with : libfdisk_tests_ldadd,
build_by_default: program_tests)
if not is_disabler(exe)
exes += exe
endif
exe = executable(
'test_fdisk_item',
'libfdisk/src/item.c',
c_args : libfdisk_tests_cflags,
include_directories : lib_fdisk_includes,
link_with : libfdisk_tests_ldadd,
build_by_default: program_tests)
if not is_disabler(exe)
exes += exe
endif
sample_fdisk_ldadd = [lib_common, lib_fdisk]
exe = executable(
'sample-fdisk-mkpart',
'libfdisk/samples/mkpart.c',
include_directories : lib_fdisk_includes,
link_with : sample_fdisk_ldadd)
if not is_disabler(exe)
exes += exe
endif
exe = executable(
'sample-fdisk-mkpart-fullspec',
'libfdisk/samples/mkpart-fullspec.c',
include_directories : lib_fdisk_includes,
link_with : sample_fdisk_ldadd)
if not is_disabler(exe)
exes += exe
endif
############################################################
exe = executable(
'test_cap',
'tests/helpers/test_cap.c',
include_directories : includes,
dependencies : [lib_cap_ng],
build_by_default: program_tests)
if not is_disabler(exe)
exes += exe
endif
exe = executable(
'test_mbsencode',
'tests/helpers/test_mbsencode.c',
include_directories : includes,
link_with : lib_common,
build_by_default: program_tests)
exes += exe
exe = executable(
'test_byteswap',
'tests/helpers/test_byteswap.c',
include_directories : includes,
build_by_default: program_tests)
exes += exe
exe = executable(
'test_md5',
'tests/helpers/test_md5.c',
md5_c,
include_directories : includes,
build_by_default: program_tests)
exes += exe
exe = executable(
'test_sha1',
'tests/helpers/test_sha1.c',
sha1_c,
include_directories : includes,
build_by_default: program_tests)
exes += exe
exe = executable(
'test_pathnames',
'tests/helpers/test_pathnames.c',
include_directories : includes,
build_by_default: program_tests)
exes += exe
exe = executable(
'test_strerror',
'tests/helpers/test_strerror.c',
include_directories : includes,
build_by_default: program_tests)
exes += exe
exe = executable(
'test_sysinfo',
'tests/helpers/test_sysinfo.c',
include_directories : includes,
build_by_default: program_tests)
exes += exe
exe = executable(
'test_sigreceive',
'tests/helpers/test_sigreceive.c',
include_directories : includes,
link_with : lib_common,
build_by_default: program_tests)
exes += exe
exe = executable(
'test_tiocsti',
'tests/helpers/test_tiocsti.c',
include_directories : includes,
build_by_default: program_tests)
exes += exe
exe = executable(
'test_uuid_namespace',
'tests/helpers/test_uuid_namespace.c',
predefined_c,
unpack_c,
unparse_c,
include_directories : includes,
build_by_default: program_tests)
exes += exe
if LINUX
exe = executable(
'test_mkfds',
'tests/helpers/test_mkfds.c',
'tests/helpers/test_mkfds.h',
'tests/helpers/test_mkfds_ppoll.c',
include_directories : includes,
dependencies : mq_libs,
build_by_default: program_tests)
exes += exe
endif
exe = executable(
'test_enosys',
'tests/helpers/test_enosys.c',
include_directories : includes,
build_by_default: program_tests)
exes += exe
############################################################
if conf.get('HAVE_OPENAT').to_string() == '1'
exe = executable(
'sample-scols-tree',
'libsmartcols/samples/tree.c',
include_directories : includes,
link_with : [lib_smartcols, lib_common],
build_by_default: program_tests)
if not is_disabler(exe)
exes += exe
endif
endif
exe = executable(
'sample-scols-title',
'libsmartcols/samples/title.c',
include_directories : includes,
link_with : [lib_smartcols, lib_common])
if not is_disabler(exe)
exes += exe
endif
exe = executable(
'sample-scols-wrap',
'libsmartcols/samples/wrap.c',
include_directories : includes,
link_with : [lib_smartcols, lib_common])
if not is_disabler(exe)
exes += exe
endif
exe = executable(
'sample-scols-continuous',
'libsmartcols/samples/continuous.c',
include_directories : includes,
link_with : [lib_smartcols, lib_common])
if not is_disabler(exe)
exes += exe
endif
exe = executable(
'sample-scols-continuous-json',
'libsmartcols/samples/continuous-json.c',
include_directories : includes,
link_with : [lib_smartcols, lib_common])
if not is_disabler(exe)
exes += exe
endif
exe = executable(
'sample-scols-maxout',
'libsmartcols/samples/maxout.c',
include_directories : includes,
link_with : [lib_smartcols, lib_common])
if not is_disabler(exe)
exes += exe
endif
exe = executable(
'sample-scols-fromfile',
'libsmartcols/samples/fromfile.c',
include_directories : includes,
link_with : [lib_smartcols, lib_common])
if not is_disabler(exe)
exes += exe
endif
exe = executable(
'sample-scols-grouping-simple',
'libsmartcols/samples/grouping-simple.c',
include_directories : includes,
link_with : [lib_smartcols, lib_common])
if not is_disabler(exe)
exes += exe
endif
exe = executable(
'sample-scols-grouping-overlay',
'libsmartcols/samples/grouping-overlay.c',
include_directories : includes,
link_with : [lib_smartcols, lib_common])
if not is_disabler(exe)
exes += exe
endif
exe = executable(
'test_boilerplate',
'Documentation/boilerplate.c',
include_directories : includes,
build_by_default: program_tests)
if not is_disabler(exe)
exes += exe
endif
############################################################
# Let the test runner know whether we're running under asan and export
# some paths. We use a file on disk so that it is possible to run the
# test scripts from commandline without setting any variables.
configure_file(output : 'meson.conf',
capture : true,
command : ['echo',
'''asan=@0@
PYTHON=@1@
'''.format(get_option('b_sanitize')=='address' ? 'yes' : '',
python.full_path())])
run_sh = find_program('tests/run.sh')
run_target(
'check',
command : [run_sh,
'--srcdir=' + meson.current_source_dir(),
'--builddir=' + meson.current_build_dir(),
'--parallel',
'--nonroot'],
depends : exes)
manadocs += ['lib/terminal-colors.d.5.adoc']
manadocs += ['libblkid/libblkid.3.adoc']
if build_libuuid
manadocs += [
'libuuid/man/uuid.3.adoc',
'libuuid/man/uuid_clear.3.adoc',
'libuuid/man/uuid_compare.3.adoc',
'libuuid/man/uuid_copy.3.adoc',
'libuuid/man/uuid_generate.3.adoc',
'libuuid/man/uuid_is_null.3.adoc',
'libuuid/man/uuid_parse.3.adoc',
'libuuid/man/uuid_time.3.adoc',
'libuuid/man/uuid_unparse.3.adoc']
manlinks += {
'uuid_generate_random.3': 'uuid_generate.3',
'uuid_generate_time.3': 'uuid_generate.3',
'uuid_generate_time_safe.3': 'uuid_generate.3',
}
endif
asciidoctor = find_program('asciidoctor', required : false)
if asciidoctor.found()
foreach adoc : manadocs
name = adoc.split('/')[-1]
page = name.split('.adoc')[0]
section = page.split('.')[-1]
mandirn = join_paths(mandir, 'man' + section)
input = adoc
custom_target(
page,
command : [ asciidoctor,
'-b', 'manpage',
'-a', 'VERSION=' + meson.project_version(),
'-a', 'release-version=' + meson.project_version(),
'-a', 'ADJTIME_PATH=/etc/adjtime',
'-a', 'package-docdir=' + docdir,
'--base-dir=' + meson.current_source_dir(),
'--destination-dir=' + meson.current_build_dir(),
'--load-path', '@SOURCE_ROOT@/tools',
'--require', 'asciidoctor-includetracker',
'@INPUT@'],
input : input,
output : [page],
depfile : page + '.deps',
install: true,
install_dir : mandirn)
endforeach
foreach link_name, target : manlinks
link_section = link_name.split('.')[-1]
target_section = target.split('.')[-1]
meson.add_install_script(meson_make_manpage_stub,
join_paths('man' + target_section, target),
join_paths(mandir, 'man' + link_section, link_name))
endforeach
endif
if bash_completion.found()
foreach completion : bashcompletions
install_data(
join_paths('bash-completion', completion),
install_dir : bash_completion.get_variable(pkgconfig : 'completionsdir')
)
endforeach
foreach link_name, target : bashcompletionslinks
meson.add_install_script(meson_make_symlink,
target,
join_paths(bash_completion.get_variable(pkgconfig : 'completionsdir'), link_name))
endforeach
endif