]> git.ipfire.org Git - thirdparty/util-linux.git/blob - meson.build
meson: Add build-blkzone option
[thirdparty/util-linux.git] / meson.build
1 project('util-linux', 'c',
2 version : run_command('tools/git-version-gen', check: true).stdout(),
3 meson_version: '>=0.60.0',
4 license : 'GPLv2+',
5 default_options : [
6 'c_std=c99',
7 'cpp_std=c++11',
8 ])
9
10 fs = import('fs')
11 pkgconfig = import('pkgconfig')
12
13 # soname versions; This never change because we use symbols versioing. There is also
14 # API version (LIB*_VERSION macros) and it follow package version.
15 libblkid_version = '1.1.0'
16 libblkid_date = '01-Jun-2021'
17 libuuid_version = '1.3.0'
18 liblastlog2_version = '2.0.0'
19 libmount_version = '1.1.0'
20 libsmartcols_version = '1.1.0'
21 libfdisk_version = '1.1.0'
22
23 prefixdir = get_option('prefix')
24 if not fs.is_absolute(prefixdir)
25 error('Prefix is not absolute: "@0@"'.format(prefixdir))
26 endif
27 bindir = join_paths(prefixdir, get_option('bindir'))
28 sbindir = join_paths(prefixdir, get_option('sbindir'))
29 sysconfstaticdir = join_paths(prefixdir, 'lib')
30 docdir = join_paths(prefixdir, get_option('datadir'), 'doc', 'util-linux')
31 mandir = join_paths(prefixdir, get_option('mandir'))
32 runstatedir = '/run'
33 localstatedir = '/var'
34 execprefixdir = prefixdir
35 sysconfdir = join_paths(prefixdir, get_option('sysconfdir'))
36 usrbin_exec_dir = join_paths(execprefixdir, bindir)
37 usrsbin_exec_dir = join_paths(execprefixdir, sbindir)
38 bash_completion = dependency('bash-completion', required : get_option('build-bash-completion'))
39
40 vendordir = get_option('vendordir')
41
42 add_project_arguments('-D_GNU_SOURCE', '-fsigned-char', language : 'c')
43
44 cc = meson.get_compiler('c')
45
46 conf = configuration_data()
47 conf.set_quoted('PACKAGE', meson.project_name())
48 conf.set_quoted('PACKAGE_VERSION', meson.project_version())
49 package_string = '@0@ @1@'.format(meson.project_name(), meson.project_version())
50 conf.set_quoted('PACKAGE_STRING', package_string)
51
52 pc_version = []
53 pc_version = meson.project_version().split('-')[0].split('.')
54
55 if pc_version.length() < 3
56 pc_version += '0'
57 endif
58
59 pc_version = '.'.join(pc_version)
60
61 conf.set_quoted('LIBBLKID_VERSION', pc_version)
62 conf.set_quoted('LIBBLKID_DATE', libblkid_date)
63
64 conf.set('bindir', bindir)
65 conf.set('sbindir', sbindir)
66 conf.set('runstatedir', runstatedir)
67 conf.set('localstatedir', localstatedir)
68 conf.set('sysconfdir', sysconfdir)
69 conf.set('usrbin_execdir', usrbin_exec_dir)
70 conf.set('usrsbin_execdir', usrsbin_exec_dir)
71 conf.set('docdir', docdir)
72 conf.set_quoted('_PATH_SYSCONFSTATICDIR', sysconfstaticdir)
73 conf.set_quoted('_PATH_RUNSTATEDIR', runstatedir)
74 conf.set_quoted('_PATH_LOCALSTATEDIR', localstatedir)
75 conf.set_quoted('CONFIG_ADJTIME_PATH', '/etc/adjtime')
76 conf.set_quoted('ADJTIME_PATH', '/etc/adjtime') # yes, both are used :(
77
78 conf.set_quoted('_PATH_VENDORDIR', vendordir)
79 conf.set('USE_VENDORDIR', vendordir == '' ? false : 1)
80
81 build_libblkid = get_option('build-libblkid').allowed()
82 conf.set('HAVE_LIBBLKID', build_libblkid ? 1 : false)
83 summary('libblkid', build_libblkid ? 'enabled' : 'disabled', section : 'components')
84
85 build_libuuid = not get_option('build-libuuid').disabled()
86 conf.set('HAVE_LIBUUID', build_libuuid ? 1 : false)
87 summary('libuuid', build_libuuid ? 'enabled' : 'disabled', section : 'components')
88
89 lib_sqlite3 = dependency('sqlite3', required : get_option('build-liblastlog2'))
90 build_liblastlog2 = get_option('build-liblastlog2').require(lib_sqlite3.found()).allowed()
91 conf.set('HAVE_LIBLASTLOG2', build_liblastlog2 ? 1 : false)
92 summary('liblastlog2', build_liblastlog2 ? 'enabled' : 'disabled', section : 'components')
93
94 login_lastlogin = get_option('login-lastlogin')
95 conf.set('USE_LOGIN_LASTLOG', login_lastlogin ? 1 : false)
96 summary('login-lastlogin', login_lastlogin ? 'enabled' : 'disabled', section : 'components')
97
98 have_mountfd_api = cc.sizeof('struct mount_attr', prefix : '#include <linux/mount.h>') > 0
99 conf.set('HAVE_STRUCT_MOUNT_ATTR', have_mountfd_api ? 1 : false)
100 conf.set('HAVE_MOUNTFD_API', have_mountfd_api ? 1 : false)
101
102 have_struct_statx = cc.sizeof('struct statx', prefix : '#include <sys/stat.h>') > 0
103 conf.set('HAVE_STRUCT_STATX', have_struct_statx ? 1 : false)
104
105 have_sys_vfs_header = cc.has_header('sys/vfs.h')
106
107 build_libmount = get_option('build-libmount').require(
108 get_option('build-libblkid').allowed() \
109 and have_sys_vfs_header \
110 ).allowed()
111
112 conf.set('HAVE_LIBMOUNT', build_libmount ? 1 : false)
113 conf.set('USE_LIBMOUNT_SUPPORT_NAMESPACES', 1)
114 conf.set('USE_LIBMOUNT_MOUNTFD_SUPPORT', have_mountfd_api ? 1 : false)
115 summary('libmount', build_libmount ? 'enabled' : 'disabled', section : 'components')
116
117 build_libsmartcols = not get_option('build-libsmartcols').disabled()
118 conf.set('HAVE_LIBSMARTCOLS', build_libsmartcols ? 1 : false)
119 summary('libsmartcols', build_libsmartcols ? 'enabled' : 'disabled', section : 'components')
120
121 build_libfdisk = not get_option('build-libfdisk').require(get_option('build-libblkid').allowed()).disabled()
122 conf.set('HAVE_LIBFDISK', build_libfdisk ? 1 : false)
123 summary('libfdisk', build_libfdisk ? 'enabled' : 'disabled', section : 'components')
124
125 build_uuidd = not get_option('build-uuidd').disabled()
126 conf.set('HAVE_UUIDD', build_uuidd ? 1 : false)
127 summary('uuidd', build_uuidd ? 'enabled' : 'disabled', section : 'components')
128
129 static_programs = get_option('static-programs')
130 need_static_libs = static_programs.length() > 0 # a rough estimate...
131 summary('static programs', static_programs)
132
133 LINUX = host_machine.system() in ['linux']
134 BSD = host_machine.system() in ['dragonfly', 'freebsd', 'netbsd', 'openbsd']
135
136 ############################################################
137
138 code = '''
139 #include <wchar.h>
140 #include <wctype.h>
141 #include <stdio.h>
142 #include <stdlib.h>
143 int main(void) {
144 wchar_t wc;
145 wint_t w;
146 w = fgetwc(stdin);
147 if (w == WEOF)
148 return 1;
149 wc = w;
150 fputwc(wc,stdout);
151 return 0;
152 }
153 '''
154 have = cc.compiles(code, name : 'wchar_t support')
155 if not have and get_option('widechar').enabled()
156 error('widechar support requested but unavailable')
157 endif
158 if get_option('ncurses').enabled() and get_option('widechar').enabled()
159 error('widechar support is incompatible with non-wide ncurses')
160 endif
161 conf.set('HAVE_WIDECHAR', have ? 1 : false)
162
163 headers = '''
164 byteswap.h
165 crypt.h
166 endian.h
167 err.h
168 errno.h
169 fcntl.h
170 getopt.h
171 inttypes.h
172 langinfo.h
173 lastlog.h
174 libutil.h
175 locale.h
176 mntent.h
177 paths.h
178 pty.h
179 shadow.h
180 stdint.h
181 stdio_ext.h
182 stdlib.h
183 string.h
184 strings.h
185 unistd.h
186 utmp.h
187 utmpx.h
188 asm-generic/fcntl.h
189 asm/fcntl.h
190 asm/io.h
191 linux/blkzoned.h
192 linux/capability.h
193 linux/cdrom.h
194 linux/compiler.h
195 linux/falloc.h
196 linux/fd.h
197 linux/fs.h
198 linux/fiemap.h
199 linux/gsmmux.h
200 linux/if_alg.h
201 linux/landlock.h
202 linux/kcmp.h
203 linux/net_namespace.h
204 linux/nsfs.h
205 linux/mount.h
206 linux/pr.h
207 linux/securebits.h
208 linux/tiocl.h
209 linux/version.h
210 linux/watchdog.h
211 net/if.h
212 net/if_dl.h
213 netinet/in.h
214 security/openpam.h
215 security/pam_appl.h
216 security/pam_misc.h
217 security/pam_modules.h
218 sys/disk.h
219 sys/disklabel.h
220 sys/endian.h
221 sys/file.h
222 sys/io.h
223 sys/ioccom.h
224 sys/ioctl.h
225 sys/mkdev.h
226 sys/mount.h
227 sys/param.h
228 sys/pidfd.h
229 sys/prctl.h
230 sys/resource.h
231 sys/sendfile.h
232 sys/signalfd.h
233 sys/socket.h
234 sys/sockio.h
235 sys/stat.h
236 sys/statfs.h
237 sys/swap.h
238 sys/syscall.h
239 sys/sysmacros.h
240 sys/time.h
241 sys/timex.h
242 sys/ttydefaults.h
243 sys/types.h
244 sys/ucred.h
245 sys/un.h
246 sys/vfs.h
247 sys/xattr.h
248 '''.split()
249
250 lib_m = cc.find_library('m')
251
252 lib_tinfo = dependency(
253 'tinfo',
254 disabler : true,
255 required : get_option('tinfo'))
256
257 lib_ncursesw = dependency(
258 'ncursesw',
259 required : get_option('ncursesw'))
260 if lib_ncursesw.found()
261 headers += ['ncursesw/ncurses.h',
262 'ncursesw/term.h',
263 'ncurses.h',
264 'term.h']
265 lib_ncurses = disabler()
266 else
267 lib_ncurses = dependency(
268 'ncurses',
269 disabler : true,
270 required : get_option('ncurses'))
271 headers += ['ncurses.h',
272 'term.h']
273 endif
274
275 conf.set('HAVE_LIBNCURSESW', lib_ncursesw.found())
276 conf.set('HAVE_LIBNCURSES', lib_ncurses.found())
277 conf.set('HAVE_NCURSES', lib_ncursesw.found() or lib_ncurses.found())
278
279 lib_slang = dependency(
280 'slang',
281 required : get_option('slang'))
282 if lib_slang.found()
283 headers += ['slang.h',
284 'slang/slang.h',
285 'slcurses.h',
286 'slang/slcurses.h']
287 endif
288 conf.set('HAVE_SLANG', lib_slang.found())
289
290 foreach curses_libs : [lib_slang, lib_ncursesw, lib_ncurses]
291 if curses_libs.found()
292 have = cc.has_function('use_default_colors', dependencies : curses_libs)
293 conf.set('HAVE_USE_DEFAULT_COLORS', have ? 1 : false)
294 have = cc.has_function('resizeterm', dependencies : curses_libs)
295 conf.set('HAVE_RESIZETERM', have ? 1 : false)
296 break
297 endif
298 endforeach
299
300 lib_z = dependency(
301 'zlib',
302 disabler : true,
303 required : get_option('zlib'))
304
305 lib_readline = dependency(
306 'readline',
307 required : get_option('readline'))
308 conf.set('HAVE_LIBREADLINE', lib_readline.found() ? 1 : false)
309
310 lib_readline_static = dependency(
311 'readline',
312 static : true,
313 required : need_static_libs ? get_option('readline') : disabler())
314
315 if meson.version().version_compare('>= 0.59.0')
316 lib_intl = dependency(
317 'intl',
318 required : get_option('nls'))
319 conf.set('ENABLE_NLS', lib_intl.found() ? 1 : false)
320 else
321 if get_option('nls').enabled()
322 error('nls is not supported with meson before 0.59.0')
323 endif
324 lib_intl = dependency('', required : false)
325 endif
326
327 lib_user = dependency(
328 'libuser',
329 version : '>= 0.58',
330 required : get_option('libuser'))
331 conf.set('HAVE_LIBUSER', lib_user.found() ? 1 : false)
332
333 lib_util = cc.find_library(
334 'util',
335 required : get_option('libutil'))
336 conf.set('HAVE_LIBUTIL', lib_util.found() ? 1 : false)
337
338 lib_utempter = cc.find_library(
339 'utempter',
340 required : get_option('libutempter'))
341 conf.set('HAVE_LIBUTEMPTER', lib_utempter.found() ? 1 : false)
342
343 systemd = dependency(
344 'systemd',
345 required : get_option('systemd'))
346
347 lib_systemd = dependency(
348 'libsystemd',
349 required : get_option('systemd'))
350 conf.set('HAVE_LIBSYSTEMD', lib_systemd.found() ? 1 : false)
351 conf.set('USE_SYSTEMD', lib_systemd.found() ? 1 : false)
352
353 have = cc.has_function(
354 'sd_session_get_username',
355 dependencies : lib_systemd)
356 conf.set('HAVE_DECL_SD_SESSION_GET_USERNAME', have ? 1 : false)
357
358 lib_udev = dependency(
359 'libudev',
360 required : get_option('systemd'))
361 conf.set('HAVE_LIBUDEV', lib_udev.found() ? 1 : false)
362
363 lib_crypt = cc.find_library('crypt', required : get_option('build-newgrp'))
364 if not lib_crypt.found()
365 lib_crypt = cc.find_library('crypt', required : get_option('build-sulogin'))
366 endif
367
368 lib_pam = cc.find_library(
369 'pam',
370 disabler : true,
371 required : get_option('build-login').enabled() or \
372 get_option('build-chfn-chsh').enabled() or \
373 get_option('build-su').enabled() or \
374 get_option('build-runuser').enabled())
375 if lib_pam.found()
376 lib_pam_misc = cc.find_library('pam_misc')
377 lib_pam = [lib_pam, lib_pam_misc]
378 else
379 lib_pam_misc = declare_dependency()
380 endif
381
382 lib_cryptsetup = dependency(
383 'libcryptsetup',
384 required : get_option('cryptsetup'))
385 conf.set('HAVE_CRYPTSETUP', lib_cryptsetup.found() ? 1 : false)
386
387 cryptsetup_dlopen = not get_option('cryptsetup').disabled() and get_option('cryptsetup-dlopen').enabled()
388 if cryptsetup_dlopen
389 if meson.version().version_compare('>= 0.62.0')
390 lib_dl = dependency('dl')
391 else
392 lib_dl = cc.find_library('dl')
393 endif
394 conf.set('CRYPTSETUP_VIA_DLOPEN', 1)
395 summary('cryptsetup support (dlopen)',
396 'enabled',
397 section : 'components')
398 else
399 summary('cryptsetup support',
400 lib_cryptsetup.found() ? 'enabled' : 'disabled',
401 section : 'components')
402 endif
403
404 have = cc.has_function(
405 'crypt_activate_by_signed_key',
406 dependencies : lib_cryptsetup)
407 conf.set('HAVE_CRYPT_ACTIVATE_BY_SIGNED_KEY', have ? 1 : false)
408
409 lib_cap_ng = dependency(
410 'libcap-ng',
411 required : get_option('build-setpriv'))
412 if not lib_cap_ng.found()
413 lib_cap_ng = disabler()
414 endif
415
416 lib_selinux = dependency(
417 'libselinux',
418 version : '>= 2.5',
419 required : get_option('selinux'))
420 conf.set('HAVE_LIBSELINUX', lib_selinux.found() ? 1 : false)
421
422 lib_magic = dependency(
423 'libmagic',
424 required : get_option('magic'))
425 conf.set('HAVE_MAGIC', lib_magic.found() ? 1 : false)
426
427 lib_econf = dependency(
428 'libeconf',
429 required : get_option('econf'))
430 conf.set('HAVE_LIBECONF', lib_econf.found() ? 1 : false)
431
432 lib_audit = dependency(
433 'audit',
434 required : get_option('audit'))
435 conf.set('HAVE_LIBAUDIT', lib_audit.found() ? 1 : false)
436
437 conf.set('HAVE_SMACK', not get_option('smack').disabled())
438
439
440 foreach header : headers
441 have = cc.has_header(header)
442 conf.set('HAVE_' + header.underscorify().to_upper(), have ? 1 : false)
443 endforeach
444
445 header = 'linux/btrfs.h'
446 enable_btrfs = cc.has_header(header,
447 required : get_option('btrfs'))
448 conf.set('HAVE_' + header.underscorify().to_upper(), enable_btrfs ? 1 : false)
449 conf.set('HAVE_BTRFS_SUPPORT', enable_btrfs ? 1 : false)
450
451 prefix = conf.get('HAVE_LINUX_COMPILER_H') ? '#include <linux/compiler.h>' : ''
452 foreach header : [
453 'linux/blkpg.h',
454 'linux/major.h',
455 ]
456 have = cc.has_header(header,
457 prefix : prefix)
458 conf.set('HAVE_' + header.underscorify().to_upper(), have ? 1 : false)
459 endforeach
460
461 have = cc.has_header('sched.h')
462 conf.set10('HAVE_DECL_CPU_ALLOC', have)
463 # We get -1 if the size cannot be determined
464 have_cpu_set_t = cc.sizeof('cpu_set_t', prefix : '#define _GNU_SOURCE\n#include <sched.h>') > 0
465 conf.set('HAVE_CPU_SET_T', have_cpu_set_t ? 1 : false)
466
467 have = cc.has_header_symbol('unistd.h', 'environ', args : '-D_GNU_SOURCE')
468 conf.set('HAVE_ENVIRON_DECL', have ? 1 : false)
469
470 have = cc.has_header_symbol('signal.h', 'sighandler_t', args : '-D_GNU_SOURCE')
471 conf.set('HAVE_SIGHANDLER_T', have ? 1 : false)
472
473 have = cc.has_function('strsignal')
474 conf.set10('HAVE_STRSIGNAL_DECL', have)
475
476 have = cc.sizeof('union semun', prefix : '#include <sys/sem.h>') > 0
477 conf.set('HAVE_UNION_SEMUN', have ? 1 : false)
478
479 have = cc.has_type('loff_t',
480 args : '-D_GNU_SOURCE',
481 prefix : '#include <sys/types.h>')
482 conf.set('HAVE_LOFF_T', have ? 1 : false)
483
484 have = cc.compiles('''
485 #define _GNU_SOURCE 1
486 #include <langinfo.h>
487 int main(void) {
488 char *str;
489 str = nl_langinfo (ALTMON_1);
490 str = nl_langinfo (ALTMON_2);
491 str = nl_langinfo (ALTMON_3);
492 str = nl_langinfo (ALTMON_4);
493 str = nl_langinfo (ALTMON_5);
494 str = nl_langinfo (ALTMON_6);
495 str = nl_langinfo (ALTMON_7);
496 str = nl_langinfo (ALTMON_8);
497 str = nl_langinfo (ALTMON_9);
498 str = nl_langinfo (ALTMON_10);
499 str = nl_langinfo (ALTMON_11);
500 str = nl_langinfo (ALTMON_12);
501 return 0;
502 }
503 ''',
504 name : 'langinfo.h defines ALTMON_x constants')
505 conf.set('HAVE_LANGINFO_ALTMON', have ? 1 : false)
506
507 have = cc.compiles('''
508 #define _GNU_SOURCE 1
509 #include <langinfo.h>
510 int main(void) {
511 char *str;
512 str = nl_langinfo (_NL_ABALTMON_1);
513 str = nl_langinfo (_NL_ABALTMON_2);
514 str = nl_langinfo (_NL_ABALTMON_3);
515 str = nl_langinfo (_NL_ABALTMON_4);
516 str = nl_langinfo (_NL_ABALTMON_5);
517 str = nl_langinfo (_NL_ABALTMON_6);
518 str = nl_langinfo (_NL_ABALTMON_7);
519 str = nl_langinfo (_NL_ABALTMON_8);
520 str = nl_langinfo (_NL_ABALTMON_9);
521 str = nl_langinfo (_NL_ABALTMON_10);
522 str = nl_langinfo (_NL_ABALTMON_11);
523 str = nl_langinfo (_NL_ABALTMON_12);
524 return 0;
525 }
526 ''',
527 name : 'langinfo.h defines _NL_ABALTMON_x constants')
528 conf.set('HAVE_LANGINFO_NL_ABALTMON', have ? 1 : false)
529
530 have = cc.compiles('''
531 #define _GNU_SOURCE 1
532 #include <langinfo.h>
533 int main(void) {
534 char *str;
535 str = nl_langinfo (_NL_TIME_WEEK_1STDAY);
536 return 0;
537 }
538 ''',
539 name : 'langinfo.h defines _NL_TIME_WEEK_1STDAY constant')
540 conf.set('HAVE_DECL__NL_TIME_WEEK_1STDAY', have ? 1 : false)
541
542 funcs = '''
543 cachestat
544 clearenv
545 close_range
546 __fpurge
547 fpurge
548 __fpending
549 secure_getenv
550 __secure_getenv
551 eaccess
552 err
553 errx
554 explicit_bzero
555 fnmatch
556 fseeko
557 fsconfig
558 fsmount
559 fsopen
560 fspick
561 fsync
562 getttynam
563 utimensat
564 getdomainname
565 getdtablesize
566 getexecname
567 getmntinfo
568 getrandom
569 getrlimit
570 getsgnam
571 inotify_init
572 jrand48
573 landlock_create_ruleset
574 landlock_add_rule
575 landlock_restrict_self
576 lchown
577 lgetxattr
578 llistxattr
579 llseek
580 newlocale
581 mkostemp
582 move_mount
583 mount_setattr
584 nanosleep
585 ntp_gettime
586 open_tree
587 personality
588 pidfd_open
589 pidfd_send_signal
590 posix_fadvise
591 prctl
592 qsort_r
593 reallocarray
594 renameat2
595 rpmatch
596 scandirat
597 setprogname
598 sendfile
599 setns
600 setresgid
601 setresuid
602 sched_setattr
603 sched_setscheduler
604 sigqueue
605 srandom
606 statx
607 strnchr
608 strndup
609 strnlen
610 strtod_l
611 sysconf
612 sysinfo
613 swapon
614 swapoff
615 timegm
616 unshare
617 usleep
618 uselocale
619 utimensat
620 vwarnx
621 warn
622 warnx
623 prlimit
624
625 openat
626 fstatat
627 unlinkat
628 ioperm
629 iopl
630 futimens
631 inotify_init1
632 open_memstream
633 reboot
634 getusershell
635 '''.split()
636
637 foreach func: funcs
638 have = cc.has_function(func)
639 # For autotools compatibility, use either #define FOO 1 or #undef FOO.
640 # This makes little sense, but is necessary to avoid warnings about
641 # redefined macros from Python.h, which uses this convention.
642 conf.set('HAVE_' + func.to_upper(), have ? 1 : false)
643 endforeach
644
645 have_mempcpy = cc.has_function('mempcpy', prefix: '#include <string.h>', args: '-D_GNU_SOURCE')
646 conf.set('HAVE_MEMPCPY', have_mempcpy ? 1 : false)
647
648 have = conf.get('HAVE_FUTIMENS') in [1] and conf.get('HAVE_INOTIFY_INIT1') in [1]
649 conf.set('AGETTY_RELOAD', have ? 1 : false)
650 if not have
651 warning('futimens or inotify_init1 not found; agetty(8) will not provide --reload functionality')
652 endif
653
654 have_dirfd = (cc.has_function('dirfd') or
655 cc.has_header_symbol('dirent.h', 'dirfd',
656 prefix : '#include <sys/types.h>'))
657 conf.set('HAVE_DIRFD', have_dirfd ? 1 : false)
658
659 have_ddfd = cc.has_member('DIR', 'dd_fd',
660 prefix : '''
661 #include <sys/types.h>
662 #include <dirent.h>
663 ''')
664 conf.set('HAVE_DECL_DDFD', have_ddfd ? 1 : false)
665
666 have = cc.has_member('struct tm', 'tm_gmtoff',
667 args : '-D_GNU_SOURCE',
668 prefix : '''
669 #include <time.h>
670 #include <unistd.h>
671 ''')
672 conf.set('HAVE_TM_GMTOFF', have ? 1 : false)
673
674
675
676 have = cc.sizeof('enum fsconfig_command', prefix : '#include <linux/mount.h>') > 0
677 conf.set('HAVE_ENUM_FSCONFIG_COMMAND', have ? 1 : false)
678
679 have = cc.has_member('struct termios', 'c_line',
680 prefix : '#include <termios.h>')
681 conf.set('HAVE_STRUCT_TERMIOS_C_LINE', have ? 1 : false)
682
683 have = cc.has_member('struct stat', 'st_mtim.tv_nsec',
684 args : '-D_GNU_SOURCE',
685 prefix : '#include <sys/stat.h>')
686 conf.set('HAVE_STRUCT_STAT_ST_MTIM_TV_NSEC', have ? 1 : false)
687
688 have = cc.has_member('struct statx', 'stx_mnt_id',
689 prefix : '#include <sys/stat.h>')
690 conf.set('HAVE_STRUCT_STATX_STX_MNT_ID', have ? 1 : false)
691
692 # replacement for AC_STRUCT_TIMEZONE
693 have = cc.has_member('struct tm', 'tm_zone',
694 args : '-D_GNU_SOURCE',
695 prefix : '#include <time.h>')
696 conf.set('HAVE_STRUCT_TM_TM_ZONE', have ? 1 : false)
697
698 have = cc.has_header_symbol('time.h', 'tzname', args: '-D_GNU_SOURCE')
699 conf.set('HAVE_DECL_TZNAME', have ? 1 : false)
700
701 have = cc.has_header_symbol('linux/blkzoned.h', 'BLK_ZONE_REP_CAPACITY')
702 conf.set('HAVE_DECL_BLK_ZONE_REP_CAPACITY', have ? 1 : false)
703
704 have = cc.has_header_symbol('linux/pr.h', 'PR_REP_CAPACITY')
705 conf.set('HAVE_DECL_PR_REP_CAPACITY', have ? 1 : false)
706
707 code = '''
708 #include <time.h>
709 #if !@0@
710 extern char *tzname[];
711 #endif
712 int main(void) {
713 return tzname ? 0 : 1;
714 }
715 '''.format(have ? 1 : 0)
716 have = cc.compiles(code, name : 'using tzname[]')
717 conf.set('HAVE_TZNAME', have ? 1 : false)
718
719 have = cc.sizeof('time_t', prefix : '#include <time.h>')
720 if have < 8
721 add_global_arguments('-D_TIME_BITS=64', language : 'c')
722 have = cc.sizeof('time_t', args : '-D_TIME_BITS=64', prefix : '#include <time.h>')
723 if have < 8
724 if get_option('allow-32bit-time')
725 warning('Could not make time_t 64bits wide')
726 else
727 error('Could not make time_t 64bits wide')
728 endif
729 endif
730 endif
731
732 socket_libs = []
733 if not cc.has_function('socket')
734 socket_libs += cc.find_library('socket', required : true)
735 have = cc.has_function('socket',
736 dependencies : socket_libs)
737 if not have
738 error('socket() function not available')
739 endif
740 endif
741
742 lib_rt = cc.find_library('rt', required : false)
743 realtime_libs = []
744 have = cc.has_function('clock_gettime')
745 if not have
746 if lib_rt.found()
747 realtime_libs += lib_rt
748 have = cc.has_function('clock_gettime',
749 dependencies : realtime_libs)
750 endif
751 endif
752 conf.set('HAVE_CLOCK_GETTIME', have ? 1 : false)
753
754 thread_libs = dependency('threads')
755
756 have = cc.has_function('timer_create')
757 if not have
758 if lib_rt.found()
759 realtime_libs = [lib_rt]
760 have = cc.has_function('timer_create',
761 dependencies : realtime_libs)
762 endif
763 if not have
764 realtime_libs += thread_libs
765 have = cc.has_function('timer_create',
766 dependencies : realtime_libs)
767 endif
768 endif
769 conf.set('HAVE_TIMER_CREATE', have ? 1 : false)
770 if not have
771 have = cc.has_function('setitimer')
772 conf.set('HAVE_SETITIMER', have ? 1 : false)
773 endif
774
775 rtas_libs = cc.find_library('rtas', required : false)
776 conf.set('HAVE_LIBRTAS', rtas_libs.found() ? 1 : false)
777
778 math_libs = []
779 if not cc.has_header_symbol('math.h', 'isnan')
780 lib = cc.find_library('m', required : true)
781 if (cc.has_function('isnan', dependencies : lib) and
782 cc.has_function('__isnan', dependencies : lib))
783 math_libs += lib
784 endif
785 endif
786
787 have = cc.has_header_symbol('errno.h', 'program_invocation_short_name',
788 args : '-D_GNU_SOURCE')
789 conf.set('HAVE_PROGRAM_INVOCATION_SHORT_NAME', have ? 1 : false)
790
791 code = '''
792 extern char *__progname;
793 int main(void) {
794 return (*__progname != 0);
795 }
796 '''
797 have = cc.compiles(code, name : 'using __progname')
798 conf.set('HAVE___PROGNAME', have ? 1 : false)
799
800 have = conf.get('HAVE_PTY_H').to_string() == '1' \
801 and conf.get('HAVE_SYS_SIGNALFD_H').to_string() == '1'
802 conf.set('HAVE_PTY', have ? 1 : false)
803
804 have_opal_get_status= cc.has_header_symbol('linux/sed-opal.h', 'IOC_OPAL_GET_STATUS')
805 conf.set('HAVE_OPAL_GET_STATUS', have_opal_get_status ? 1 : false)
806
807 build_plymouth_support = get_option('build-plymouth-support')
808 have_tiocglcktrmios = cc.has_header_symbol(
809 'sys/ioctl.h', 'TIOCGLCKTRMIOS',
810 required : build_plymouth_support.enabled())
811 have_sock_cloexec = cc.has_header_symbol(
812 'sys/socket.h', 'SOCK_CLOEXEC',
813 prefix : '#include <sys/types.h>',
814 required : build_plymouth_support.enabled())
815 have_sock_nonblock = cc.has_header_symbol(
816 'sys/socket.h', 'SOCK_NONBLOCK',
817 prefix : '#include <sys/types.h>',
818 required : build_plymouth_support.enabled())
819 have_so_passcred = cc.has_header_symbol(
820 'sys/socket.h', 'SO_PASSCRED',
821 args : ['-D_GNU_SOURCE'],
822 prefix : '#include <sys/types.h>',
823 required : build_plymouth_support.enabled())
824
825 build_plymouth_support = (not build_plymouth_support.disabled() and
826 have_tiocglcktrmios and
827 have_sock_cloexec and
828 have_sock_nonblock and
829 have_so_passcred)
830 conf.set('ENABLE_PLYMOUTH_SUPPORT', build_plymouth_support ? 1 : false)
831 summary('plymouth support',
832 build_plymouth_support ? 'enabled' : 'disabled',
833 section : 'components')
834
835 # check for valid fallocate() function
836 # with 32 bits glibc 2.10, fallocate() exists but not fallocate64()
837 # when _FILE_OFFSET_BITS==64, fallocate() is redirect to fallocate64()
838 # and program can't be linked.
839 code = '''
840 #define _GNU_SOURCE
841 #include <unistd.h>
842 #include <fcntl.h>
843
844 int main(void) {
845 long ret;
846 ret = fallocate(0, FALLOC_FL_KEEP_SIZE, 0xfffffffful, 0xfffffffful);
847 return ret == 0 ? 0 : 1;
848 }
849 '''
850 have = cc.links(code, name : 'fallocate() function')
851 conf.set('HAVE_FALLOCATE', have ? 1 : false)
852
853 code = '''
854 #include <unistd.h>
855 #include <fcntl.h>
856
857 int main(void) {
858 long ret;
859 ret = posix_fallocate(0, 0xfffffffful, 0xfffffffful);
860 return ret == 0 ? 0 : 1;
861 }
862 '''
863 have = cc.links(code, name : 'posix_fallocate() function')
864 conf.set('HAVE_POSIX_FALLOCATE', have ? 1 : false)
865
866 use_hwclock_cmos = host_machine.cpu_family() in ['x86', 'x86_64']
867 message('Use CMOS clock: @0@'.format(use_hwclock_cmos))
868 conf.set('USE_HWCLOCK_CMOS', use_hwclock_cmos ? 1 : false)
869
870 conf.set('HAVE_TLS', get_option('use-tls') ? 1 : false)
871 conf.set('PG_BELL', get_option('pg-bell') ? 1 : false)
872 conf.set('USE_COLORS_BY_DEFAULT', get_option('colors-default') ? 1 : false)
873
874 is_glibc = cc.has_header_symbol('limits.h', '__GLIBC__')
875
876 ############################################################
877
878
879 fs_search_path = get_option('fs-search-path')
880 fs_search_path_extra = get_option('fs-search-path-extra')
881 if fs_search_path_extra != ''
882 fs_search_path = ':'.join(fs_search_path, fs_search_path_extra)
883 endif
884 conf.set_quoted('FS_SEARCH_PATH', fs_search_path)
885
886 systemdsystemunitdir = ''
887 if systemd.found()
888 systemdsystemunitdir = systemd.get_variable(pkgconfig : 'systemdsystemunitdir')
889 endif
890
891 sysvinit = get_option('sysvinit').enabled()
892 sysvinitrcdir = sysconfdir + '/init.d'
893
894 program_tests = get_option('program-tests')
895
896 chfn_chsh_password = get_option('chfn-chsh-password') or lib_user.found()
897 conf.set('CHFN_CHSH_PASSWORD', chfn_chsh_password ? 1 : false)
898
899 have = get_option('chsh-only-listed')
900 conf.set('ONLY_LISTED_SHELLS', have ? 1 : false)
901
902 have = get_option('use-tty-group')
903 conf.set('USE_TTY_GROUP', have ? 1 : false)
904
905 bison = find_program('bison')
906 flex = find_program('flex')
907 sed = find_program('sed')
908
909 build_hwclock = not get_option('build-hwclock').disabled()
910 bison_gen = generator(
911 bison,
912 output : ['@BASENAME@.tab.c', '@BASENAME@.tab.h'],
913 arguments : ['@INPUT@', '--defines=@OUTPUT1@', '--output=@OUTPUT0@'])
914
915 python_module = import('python')
916 python = python_module.find_installation(
917 get_option('python'),
918 required : true,
919 disabler : true)
920
921 meson_make_symlink = meson.current_source_dir() + '/tools/meson-make-symlink.sh'
922 meson_make_manpage_stub = meson.current_source_dir() + '/tools/meson-make-manpage-stub.sh'
923
924 configure_file(
925 output : 'config.h',
926 configuration : conf)
927
928 add_project_arguments('-include', meson.current_build_dir() / 'config.h', language : 'c')
929
930 compiler_flags = [
931 '-fno-common',
932
933 '-Waddress-of-packed-member',
934 '-Wdiscarded-qualifiers',
935 '-Wembedded-directive',
936 '-Wextra-semi',
937 '-Wformat-security',
938 '-Wimplicit-function-declaration',
939 '-Wmissing-declarations',
940 '-Wmissing-parameter-type',
941 '-Wmissing-prototypes',
942 '-Wnested-externs',
943 '-Wno-missing-field-initializers',
944 '-Wold-style-definition',
945 '-Wpointer-arith',
946 '-Wredundant-decls',
947 '-Wsign-compare',
948 '-Wstrict-prototypes',
949 '-Wtype-limits',
950 '-Wuninitialized',
951 '-Wunused-but-set-parameter',
952 '-Wunused-but-set-variable',
953 '-Wunused-parameter',
954 '-Wunused-result',
955 '-Wunused-variable',
956 '-Wvla',
957 '-Walloca',
958 ]
959 foreach compiler_flag : compiler_flags
960 if cc.has_argument(compiler_flag)
961 add_project_arguments(compiler_flag, language : 'c')
962 endif
963 endforeach
964
965 manadocs = []
966 manlinks = {}
967
968 bashcompletions = []
969 bashcompletionslinks = {}
970
971 subdir('include')
972 subdir('lib')
973 subdir('libblkid')
974 subdir('libmount')
975 subdir('libsmartcols')
976 subdir('libuuid')
977 subdir('liblastlog2')
978 subdir('libfdisk')
979 subdir('pam_lastlog2')
980 subdir('login-utils')
981 subdir('sys-utils')
982 subdir('disk-utils')
983 subdir('misc-utils')
984 subdir('text-utils')
985 subdir('term-utils')
986 subdir('lsfd-cmd')
987 subdir('po')
988
989 includes = [dir_include,
990 dir_libsmartcols,
991 dir_libfdisk,
992 dir_libuuid,
993 dir_liblastlog2,
994 dir_sys_utils]
995
996 exes = []
997
998 opt = not get_option('build-chfn-chsh').disabled()
999 exe = executable(
1000 'chfn',
1001 chfn_sources,
1002 chfn_chsh_sources,
1003 include_directories : includes,
1004 link_with : [lib_common, logindefs_c],
1005 dependencies : chfn_chsh_deps,
1006 install_dir : usrbin_exec_dir,
1007 install_mode : 'rwsr-xr-x',
1008 install : opt,
1009 build_by_default : opt)
1010
1011 exe2 = executable(
1012 'chsh',
1013 'login-utils/chsh.c',
1014 'lib/shells.c',
1015 chfn_chsh_sources,
1016 include_directories : includes,
1017 link_with : lib_common,
1018 dependencies : chfn_chsh_deps,
1019 install_dir : usrbin_exec_dir,
1020 install_mode : 'rwsr-xr-x',
1021 install : opt,
1022 build_by_default : opt)
1023 if opt and not is_disabler(exe)
1024 exes += [exe, exe2]
1025 manadocs += ['login-utils/chfn.1.adoc', 'login-utils/chsh.1.adoc']
1026 bashcompletions += ['chfn', 'chsh']
1027 endif
1028
1029 exe = executable(
1030 'test_islocal',
1031 test_islocal_sources,
1032 include_directories : includes,
1033 c_args : '-DTEST_PROGRAM',
1034 build_by_default : program_tests)
1035 exes += exe
1036
1037 exe = executable(
1038 'test-consoles',
1039 test_consoles_sources,
1040 c_args : ['-DTEST_PROGRAM'],
1041 include_directories : includes,
1042 link_with : lib_common,
1043 build_by_default : program_tests)
1044 exes += exe
1045
1046 opt = not get_option('build-last').disabled()
1047 exe = executable(
1048 'last',
1049 last_sources,
1050 include_directories : includes,
1051 link_with : [lib_common],
1052 install_dir : usrbin_exec_dir,
1053 install : opt,
1054 build_by_default : opt)
1055 if opt and not is_disabler(exe)
1056 exes += exe
1057 meson.add_install_script(meson_make_symlink,
1058 'last',
1059 join_paths(usrbin_exec_dir, 'lastb'))
1060 manadocs += ['login-utils/last.1.adoc']
1061 manlinks += {'lastb.1': 'last.1'}
1062 bashcompletions += ['last']
1063 bashcompletionslinks += {'lastb': 'last'}
1064 endif
1065
1066 opt = not get_option('build-nologin').disabled()
1067 exe = executable(
1068 'nologin',
1069 'login-utils/nologin.c',
1070 include_directories : includes,
1071 install_dir : sbindir,
1072 link_with : [lib_common],
1073 install : opt,
1074 build_by_default : opt)
1075 if opt and not is_disabler(exe)
1076 exes += exe
1077 manadocs += ['login-utils/nologin.8.adoc']
1078 endif
1079
1080 opt = not get_option('build-utmpdump').disabled()
1081 exe = executable(
1082 'utmpdump',
1083 'login-utils/utmpdump.c',
1084 include_directories : includes,
1085 link_with : [lib_common],
1086 install_dir : usrbin_exec_dir,
1087 install : opt,
1088 build_by_default : opt)
1089 if opt and not is_disabler(exe)
1090 exes += exe
1091 manadocs += ['login-utils/utmpdump.1.adoc']
1092 bashcompletions += ['utmpdump']
1093 endif
1094
1095 opt = not get_option('build-su').disabled()
1096 exe = executable(
1097 'su',
1098 'login-utils/su.c',
1099 'login-utils/su-common.c',
1100 'login-utils/su-common.h',
1101 'lib/shells.c',
1102 pty_session_c,
1103 monotonic_c,
1104 include_directories : includes,
1105 link_with : [lib_common, logindefs_c],
1106 dependencies : [lib_pam,
1107 lib_pam_misc,
1108 lib_util,
1109 realtime_libs],
1110 install_mode : 'rwsr-xr-x',
1111 install : opt,
1112 build_by_default : opt)
1113 if opt and not is_disabler(exe)
1114 exes += exe
1115 manadocs += ['login-utils/su.1.adoc']
1116 bashcompletions += ['su']
1117 endif
1118
1119 opt = not get_option('build-newgrp').disabled()
1120 exe = executable(
1121 'newgrp',
1122 'login-utils/newgrp.c',
1123 include_directories : includes,
1124 dependencies : [lib_crypt],
1125 install_dir : usrbin_exec_dir,
1126 install_mode : 'rwsr-xr-x',
1127 install : opt,
1128 build_by_default : opt)
1129 if opt and not is_disabler(exe)
1130 exes += exe
1131 manadocs += ['login-utils/newgrp.1.adoc']
1132 bashcompletions += ['newgrp']
1133 endif
1134
1135 opt = not get_option('build-lslogins').disabled()
1136 exe = executable(
1137 'lslogins',
1138 'login-utils/lslogins.c',
1139 include_directories : includes,
1140 link_with : [lib_common,
1141 lib_smartcols,
1142 logindefs_c] +
1143 (build_liblastlog2 ? [lib_lastlog2] : []),
1144 dependencies : [lib_selinux,
1145 lib_systemd],
1146 install_dir : usrbin_exec_dir,
1147 install : opt,
1148 build_by_default : opt)
1149 if opt and not is_disabler(exe)
1150 exes += exe
1151 manadocs += ['login-utils/lslogins.1.adoc']
1152 bashcompletions += ['lslogins']
1153 endif
1154
1155 opt = not get_option('build-vipw').disabled()
1156 exe = executable(
1157 'vipw',
1158 'login-utils/vipw.c',
1159 'login-utils/setpwnam.h',
1160 include_directories : includes,
1161 link_with : [lib_common],
1162 dependencies : [lib_selinux],
1163 install_dir : usrbin_exec_dir,
1164 install : opt,
1165 build_by_default : opt)
1166 if opt and not is_disabler(exe)
1167 exes += exe
1168 meson.add_install_script(meson_make_symlink,
1169 'vipw',
1170 join_paths(usrbin_exec_dir, 'vigr'))
1171 manadocs += ['login-utils/vipw.8.adoc']
1172 meson.add_install_script(meson_make_symlink,
1173 'vipw.8',
1174 join_paths(mandir, 'man8/vigr.8'))
1175 endif
1176
1177 opt = not get_option('build-runuser').disabled()
1178 exe = executable(
1179 'runuser',
1180 'login-utils/runuser.c',
1181 'login-utils/su-common.c',
1182 'login-utils/su-common.h',
1183 'lib/shells.c',
1184 pty_session_c,
1185 monotonic_c,
1186 include_directories : includes,
1187 link_with : [lib_common, logindefs_c],
1188 dependencies : [lib_pam,
1189 lib_pam_misc,
1190 lib_util,
1191 realtime_libs],
1192 install_dir : sbindir,
1193 install : opt,
1194 build_by_default : opt)
1195 if opt and not is_disabler(exe)
1196 exes += exe
1197 manadocs += ['login-utils/runuser.1.adoc']
1198 bashcompletionslinks += {'runuser': 'su'}
1199 endif
1200
1201 ############################################################
1202
1203 if is_glibc
1204 exe = executable(
1205 'col',
1206 col_sources,
1207 include_directories : includes,
1208 link_with : lib_common,
1209 install_dir : usrbin_exec_dir,
1210 install : true)
1211 exes += exe
1212 manadocs += ['text-utils/col.1.adoc']
1213 bashcompletions += ['col']
1214 endif
1215
1216 exe = executable(
1217 'colcrt',
1218 colcrt_sources,
1219 include_directories : includes,
1220 install_dir : usrbin_exec_dir,
1221 install : true)
1222 exes += exe
1223 manadocs += ['text-utils/colcrt.1.adoc']
1224 bashcompletions += ['colcrt']
1225
1226 exe = executable(
1227 'colrm',
1228 colrm_sources,
1229 include_directories : includes,
1230 link_with : lib_common,
1231 install_dir : usrbin_exec_dir,
1232 install : true)
1233 exes += exe
1234 manadocs += ['text-utils/colrm.1.adoc']
1235 bashcompletions += ['colrm']
1236
1237 exe = executable(
1238 'rev',
1239 rev_sources,
1240 include_directories : includes,
1241 install_dir : usrbin_exec_dir,
1242 install : true)
1243 exes += exe
1244 manadocs += ['text-utils/rev.1.adoc']
1245 bashcompletions += ['rev']
1246
1247 exe = executable(
1248 'column',
1249 column_sources,
1250 include_directories : includes,
1251 link_with : [lib_common,
1252 lib_smartcols],
1253 install_dir : usrbin_exec_dir,
1254 install : true)
1255 if not is_disabler(exe)
1256 exes += exe
1257 manadocs += ['text-utils/column.1.adoc']
1258 bashcompletions += ['column']
1259 endif
1260
1261 opt = not get_option('build-line').disabled()
1262 exe = executable(
1263 'line',
1264 line_sources,
1265 include_directories : includes,
1266 install_dir : usrbin_exec_dir,
1267 install : opt,
1268 build_by_default : opt)
1269 if opt and not is_disabler(exe)
1270 exes += exe
1271 manadocs += ['text-utils/line.1.adoc']
1272 endif
1273
1274 opt = not get_option('build-pg').disabled()
1275 exe = executable(
1276 'pg',
1277 pg_sources,
1278 link_with : lib_common,
1279 include_directories : includes,
1280 dependencies : [lib_tinfo,
1281 curses_libs],
1282 install_dir : usrbin_exec_dir,
1283 install : opt,
1284 build_by_default : opt)
1285 if opt and not is_disabler(exe)
1286 exes += exe
1287 manadocs += ['text-utils/pg.1.adoc']
1288 bashcompletions += ['pg']
1289 endif
1290
1291 opt = not get_option('build-ul').disabled()
1292 exe = executable(
1293 'ul',
1294 ul_sources,
1295 include_directories : includes,
1296 dependencies : [lib_tinfo,
1297 curses_libs],
1298 install_dir : usrbin_exec_dir,
1299 install : opt,
1300 build_by_default : opt)
1301 if opt and not is_disabler(exe)
1302 exes += exe
1303 manadocs += ['text-utils/ul.1.adoc']
1304 bashcompletions += ['ul']
1305 endif
1306
1307 opt = not get_option('build-more').disabled()
1308 exe = executable(
1309 'more',
1310 more_sources,
1311 link_with : [lib_common],
1312 include_directories : includes,
1313 dependencies : [lib_tinfo,
1314 curses_libs,
1315 lib_magic],
1316 install : opt,
1317 build_by_default : opt)
1318 exe2 = executable(
1319 'test_more',
1320 more_sources,
1321 link_with : [lib_common],
1322 include_directories : includes,
1323 c_args : '-DTEST_PROGRAM',
1324 dependencies : [lib_tinfo,
1325 curses_libs,
1326 lib_magic],
1327 build_by_default : opt and program_tests)
1328 exes += exe
1329 if opt and not is_disabler(exe)
1330 exes += [exe, exe2]
1331 manadocs += ['text-utils/more.1.adoc']
1332 bashcompletions += ['more']
1333 endif
1334
1335 exe = executable(
1336 'hexdump',
1337 hexdump_sources,
1338 include_directories : includes,
1339 link_with : [lib_common,
1340 lib_tcolors],
1341 install_dir : usrbin_exec_dir,
1342 install : true)
1343 if not is_disabler(exe)
1344 exes += exe
1345 manadocs += ['text-utils/hexdump.1.adoc']
1346 bashcompletions += ['hexdump']
1347 endif
1348
1349 opt = not get_option('build-lsmem').disabled()
1350 exe = executable(
1351 'lsmem',
1352 lsmem_sources,
1353 include_directories : includes,
1354 link_with : [lib_common,
1355 lib_smartcols],
1356 install_dir : usrbin_exec_dir,
1357 install : opt,
1358 build_by_default : opt)
1359 if opt and not is_disabler(exe)
1360 exes += exe
1361 manadocs += ['sys-utils/lsmem.1.adoc']
1362 bashcompletions += ['lsmem']
1363 endif
1364
1365 opt = not get_option('build-chmem').disabled()
1366 exe = executable(
1367 'chmem',
1368 chmem_sources,
1369 include_directories : includes,
1370 link_with : [lib_common],
1371 install_dir : usrbin_exec_dir,
1372 install : opt,
1373 build_by_default : opt)
1374 if opt and not is_disabler(exe)
1375 exes += exe
1376 manadocs += ['sys-utils/chmem.8.adoc']
1377 bashcompletions += ['chmem']
1378 endif
1379
1380 exe = executable(
1381 'choom',
1382 choom_sources,
1383 include_directories : includes,
1384 link_with : [lib_common],
1385 install_dir : usrbin_exec_dir,
1386 install : true)
1387 exes += exe
1388 manadocs += ['sys-utils/choom.1.adoc']
1389
1390 has_seminfo_type = cc.has_type('struct seminfo', args : '-D_GNU_SOURCE', prefix : '#include <sys/sem.h>')
1391
1392 opt = get_option('build-ipcmk').require(has_seminfo_type).allowed()
1393 exe = executable(
1394 'ipcmk',
1395 ipcmk_sources,
1396 include_directories : includes,
1397 link_with : [lib_common],
1398 install_dir : usrbin_exec_dir,
1399 install : opt,
1400 build_by_default : opt)
1401 if opt and not is_disabler(exe)
1402 exes += exe
1403 manadocs += ['sys-utils/ipcmk.1.adoc']
1404 bashcompletions += ['ipcmk']
1405 endif
1406
1407 opt = get_option('build-ipcrm').require(has_seminfo_type).allowed()
1408 exe = executable(
1409 'ipcrm',
1410 ipcrm_sources,
1411 include_directories : includes,
1412 link_with : [lib_common],
1413 install_dir : usrbin_exec_dir,
1414 install : opt,
1415 build_by_default : opt)
1416 if opt and not is_disabler(exe)
1417 exes += exe
1418 manadocs += ['sys-utils/ipcrm.1.adoc']
1419 bashcompletions += ['ipcrm']
1420 endif
1421
1422 opt = not get_option('build-ipcs').require(has_seminfo_type).disabled()
1423 exe = executable(
1424 'ipcs',
1425 ipcs_sources,
1426 include_directories : includes,
1427 link_with : [lib_common],
1428 install_dir : usrbin_exec_dir,
1429 install : opt,
1430 build_by_default : opt)
1431 if opt and not is_disabler(exe)
1432 exes += exe
1433 manadocs += ['sys-utils/ipcs.1.adoc']
1434 bashcompletions += ['ipcs']
1435 endif
1436
1437 opt = not get_option('build-rfkill').disabled()
1438 exe = executable(
1439 'rfkill',
1440 rfkill_sources,
1441 include_directories : includes,
1442 link_with : [lib_common,
1443 lib_smartcols],
1444 install_dir : usrsbin_exec_dir,
1445 install : opt,
1446 build_by_default : opt)
1447 if opt and not is_disabler(exe)
1448 exes += exe
1449 manadocs += ['sys-utils/rfkill.8.adoc']
1450 bashcompletions += ['rfkill']
1451 endif
1452
1453 exe = executable(
1454 'renice',
1455 renice_sources,
1456 include_directories : includes,
1457 link_with : [lib_common,
1458 lib_smartcols],
1459 install_dir : usrbin_exec_dir,
1460 install : true)
1461 if not is_disabler(exe)
1462 exes += exe
1463 manadocs += ['sys-utils/renice.1.adoc']
1464 bashcompletions += ['renice']
1465 endif
1466
1467 exe = executable(
1468 'setpgid',
1469 setpgid_sources,
1470 include_directories: includes,
1471 link_with : [lib_common,
1472 lib_smartcols],
1473 install_dir : usrbin_exec_dir,
1474 install : true)
1475 if opt and not is_disabler(exe)
1476 exes += exe
1477 manadocs += ['sys-utils/setpgid.1.adoc']
1478 bashcompletions += ['setpgid']
1479 endif
1480
1481 exe = executable(
1482 'setsid',
1483 setsid_sources,
1484 include_directories : includes,
1485 link_with : [lib_common,
1486 lib_smartcols],
1487 install_dir : usrbin_exec_dir,
1488 install : true)
1489 if opt and not is_disabler(exe)
1490 exes += exe
1491 manadocs += ['sys-utils/setsid.1.adoc']
1492 bashcompletions += ['setsid']
1493 endif
1494
1495 exe = executable(
1496 'readprofile',
1497 readprofile_sources,
1498 include_directories : includes,
1499 link_with : [lib_common,
1500 lib_smartcols],
1501 install_dir : usrsbin_exec_dir,
1502 install : true)
1503 if not is_disabler(exe)
1504 exes += exe
1505 manadocs += ['sys-utils/readprofile.8.adoc']
1506 bashcompletions += ['readprofile']
1507 endif
1508
1509 opt = not get_option('build-tunelp').disabled()
1510 exe = executable(
1511 'tunelp',
1512 tunelp_sources,
1513 include_directories : includes,
1514 link_with : [lib_common],
1515 install_dir : usrsbin_exec_dir,
1516 install : opt,
1517 build_by_default : opt)
1518 if opt and not is_disabler(exe)
1519 exes += exe
1520 manadocs += ['sys-utils/tunelp.8.adoc']
1521 bashcompletions += ['tunelp']
1522 endif
1523
1524 opt = get_option('build-fstrim').require(have_sys_vfs_header).allowed()
1525 exe = executable(
1526 'fstrim',
1527 fstrim_sources,
1528 include_directories : includes,
1529 link_with : [lib_common],
1530 dependencies : [mount_dep],
1531 install_dir : sbindir,
1532 install : opt,
1533 build_by_default : opt)
1534 if opt and not is_disabler(exe)
1535 exes += exe
1536 manadocs += ['sys-utils/fstrim.8.adoc']
1537 bashcompletions += ['fstrim']
1538 endif
1539
1540 opt = get_option('build-dmesg').require(cc.has_header('sys/klog.h')).allowed()
1541 exe = executable(
1542 'dmesg',
1543 dmesg_sources,
1544 include_directories : includes,
1545 link_with : [lib_common,
1546 lib_tcolors],
1547 install : opt,
1548 build_by_default : opt)
1549 if opt and not is_disabler(exe)
1550 exes += exe
1551 manadocs += ['sys-utils/dmesg.1.adoc']
1552 bashcompletions += ['dmesg']
1553 endif
1554
1555 exe = executable(
1556 'test_dmesg',
1557 dmesg_sources,
1558 include_directories : dir_include,
1559 c_args : '-DTEST_DMESG',
1560 link_with : [lib_common,
1561 lib_tcolors],
1562 build_by_default : program_tests)
1563 if not is_disabler(exe)
1564 exes += exe
1565 endif
1566
1567 exe = executable(
1568 'ctrlaltdel',
1569 ctrlaltdel_sources,
1570 include_directories : includes,
1571 link_with : [lib_common],
1572 install_dir : sbindir,
1573 install : true)
1574 exes += exe
1575 manadocs += ['sys-utils/ctrlaltdel.8.adoc']
1576 bashcompletions += ['ctrlaltdel']
1577
1578 exe = executable(
1579 'fsfreeze',
1580 fsfreeze_sources,
1581 include_directories : includes,
1582 install_dir : sbindir,
1583 install : true)
1584 exes += exe
1585 manadocs += ['sys-utils/fsfreeze.8.adoc']
1586 bashcompletions += ['fsfreeze']
1587
1588 exe = executable(
1589 'blkdiscard',
1590 blkdiscard_sources,
1591 include_directories : includes,
1592 link_with : [lib_common],
1593 dependencies : [blkid_dep],
1594 install_dir : sbindir,
1595 install : true)
1596 exes += exe
1597 manadocs += ['sys-utils/blkdiscard.8.adoc']
1598 bashcompletions += ['blkdiscard']
1599
1600 opt = get_option('build-blkzone').require(cc.has_header('linux/blkzoned.h')).allowed()
1601 exe = executable(
1602 'blkzone',
1603 blkzone_sources,
1604 include_directories : includes,
1605 link_with : [lib_common],
1606 install_dir : sbindir,
1607 install : opt,
1608 build_by_default : opt)
1609 if opt and not is_disabler(exe)
1610 exes += exe
1611 manadocs += ['sys-utils/blkzone.8.adoc']
1612 bashcompletions += ['blkzone']
1613 endif
1614
1615 opt = get_option('build-blkpr').require(cc.has_header('linux/pr.h')).allowed()
1616 exe = executable(
1617 'blkpr',
1618 blkpr_sources,
1619 include_directories : includes,
1620 link_with : [lib_common],
1621 install_dir : sbindir,
1622 install : opt,
1623 build_by_default : opt)
1624 if opt and not is_disabler(exe)
1625 exes += exe
1626 manadocs += ['sys-utils/blkpr.8.adoc']
1627 endif
1628
1629 exe = executable(
1630 'ldattach',
1631 ldattach_sources,
1632 include_directories : includes,
1633 link_with : [lib_common],
1634 install_dir : usrsbin_exec_dir,
1635 install : true)
1636 exes += exe
1637 manadocs += ['sys-utils/ldattach.8.adoc']
1638 bashcompletions += ['ldattach']
1639
1640 exe = executable(
1641 'rtcwake',
1642 rtcwake_sources,
1643 include_directories : includes,
1644 link_with : [lib_common],
1645 install_dir : usrsbin_exec_dir,
1646 install : true)
1647 exes += exe
1648 manadocs += ['sys-utils/rtcwake.8.adoc']
1649 bashcompletions += ['rtcwake']
1650
1651 exe = executable(
1652 'setarch',
1653 setarch_sources,
1654 include_directories : includes,
1655 link_with : [lib_common],
1656 install_dir : usrbin_exec_dir,
1657 install : true)
1658 exes += exe
1659 manadocs += ['sys-utils/setarch.8.adoc']
1660 bashcompletions += ['setarch']
1661
1662 setarch_links = ['uname26', 'linux32', 'linux64']
1663 setarch_links_arch = {
1664 's390x' : ['s390', 's390x'],
1665 'x86' : ['i386'],
1666 'x86_64' : ['i386', 'x86_64'],
1667 'ppc64' : ['ppc', 'ppc64', 'ppc32'],
1668 'space64' : ['sparc', 'sparc64', 'sparc32', 'sparc32bash'],
1669 'mips64' : ['mips', 'mips64', 'mips32'],
1670 'ia64' : ['i386', 'ia64'],
1671 'hppa' : ['parisc', 'parisc64', 'parisc32'],
1672 }
1673 setarch_links += setarch_links_arch.get(host_machine.cpu_family(), [])
1674
1675 foreach link: setarch_links
1676 meson.add_install_script(meson_make_symlink,
1677 'setarch',
1678 join_paths(usrbin_exec_dir, link))
1679 manlinks += {link + '.8': 'setarch.8'}
1680 endforeach
1681
1682 opt = not get_option('build-eject').disabled()
1683 exe = executable(
1684 'eject',
1685 eject_sources,
1686 include_directories : includes,
1687 link_with : [lib_common],
1688 dependencies : [mount_dep],
1689 install_dir : usrbin_exec_dir,
1690 install : opt,
1691 build_by_default : opt)
1692 if opt and not is_disabler(exe)
1693 exe = exe
1694 manadocs += ['sys-utils/eject.1.adoc']
1695 bashcompletions += ['eject']
1696 endif
1697
1698 opt = not get_option('build-losetup').disabled()
1699 exe = executable(
1700 'losetup',
1701 losetup_sources,
1702 include_directories : includes,
1703 link_with : [lib_common,
1704 lib_smartcols],
1705 install_dir : sbindir,
1706 install : opt,
1707 build_by_default : opt)
1708 if opt and not is_disabler(exe)
1709 manadocs += ['sys-utils/losetup.8.adoc']
1710 exes += exe
1711 bashcompletions += ['losetup']
1712 endif
1713
1714 opt = opt and 'losetup' in static_programs
1715 exe = executable(
1716 'losetup.static',
1717 losetup_sources,
1718 include_directories : includes,
1719 link_args : ['--static'],
1720 link_with : [lib_common,
1721 lib_smartcols.get_static_lib()],
1722 install_dir : sbindir,
1723 install : opt,
1724 build_by_default : opt)
1725 if opt and not is_disabler(exe)
1726 exes += exe
1727 endif
1728
1729 opt = not get_option('build-zramctl').disabled()
1730 exe = executable(
1731 'zramctl',
1732 zramctl_sources,
1733 include_directories : includes,
1734 link_with : [lib_common,
1735 lib_smartcols],
1736 install_dir : sbindir,
1737 install : opt,
1738 build_by_default : opt)
1739 if opt and not is_disabler(exe)
1740 exes += exe
1741 manadocs += ['sys-utils/zramctl.8.adoc']
1742 bashcompletions += ['zramctl']
1743 endif
1744
1745 exe = executable(
1746 'prlimit',
1747 prlimit_sources,
1748 include_directories : includes,
1749 link_with : [lib_common,
1750 lib_smartcols],
1751 install_dir : usrbin_exec_dir,
1752 install : true)
1753 if not is_disabler(exe)
1754 exes += exe
1755 manadocs += ['sys-utils/prlimit.1.adoc']
1756 bashcompletions += ['prlimit']
1757 endif
1758
1759 opt = not get_option('build-lsns').disabled()
1760 exe = executable(
1761 'lsns',
1762 lsns_sources,
1763 include_directories : includes,
1764 link_with : [lib_common,
1765 lib_smartcols],
1766 dependencies : [mount_dep],
1767 install_dir : usrbin_exec_dir,
1768 install : opt,
1769 build_by_default : opt)
1770 if opt and not is_disabler(exe)
1771 exes += exe
1772 manadocs += ['sys-utils/lsns.8.adoc']
1773 bashcompletions += ['lsns']
1774 endif
1775
1776 opt = not get_option('build-mount').disabled()
1777 exe = executable(
1778 'mount',
1779 mount_sources,
1780 include_directories : includes,
1781 link_with : [lib_common,
1782 lib_smartcols],
1783 dependencies : [lib_selinux, mount_dep],
1784 install_mode : 'rwsr-xr-x',
1785 install : opt,
1786 build_by_default : opt)
1787 exe2 = executable(
1788 'umount',
1789 umount_sources,
1790 include_directories : includes,
1791 link_with : [lib_common],
1792 dependencies : [mount_dep],
1793 install_mode : 'rwsr-xr-x',
1794 install : opt,
1795 build_by_default : opt)
1796 if opt and not is_disabler(exe)
1797 exes += [exe, exe2]
1798 manadocs += ['sys-utils/fstab.5.adoc',
1799 'sys-utils/mount.8.adoc',
1800 'sys-utils/umount.8.adoc']
1801 bashcompletions += ['mount', 'umount']
1802 endif
1803
1804 opt2 = opt and 'mount' in static_programs
1805 exe = executable(
1806 'mount.static',
1807 mount_sources,
1808 include_directories : includes,
1809 link_args : ['--static'],
1810 link_with : [lib_common,
1811 lib_smartcols_static],
1812 dependencies : [mount_static_dep],
1813 install : opt2,
1814 build_by_default : opt2)
1815 if opt2 and not is_disabler(exe)
1816 exes += exe
1817 endif
1818
1819 opt2 = opt and 'umount' in static_programs
1820 exe = executable(
1821 'umount.static',
1822 umount_sources,
1823 include_directories : includes,
1824 link_args : ['--static'],
1825 link_with : [lib_common],
1826 dependencies : [mount_static_dep],
1827 install : opt2,
1828 build_by_default : opt2)
1829 if opt2 and not is_disabler(exe)
1830 exes += exe
1831 endif
1832
1833 # setuid?
1834
1835 opt = not get_option('build-swapon').disabled()
1836 exe = executable(
1837 'swapon',
1838 swapon_sources,
1839 include_directories : includes,
1840 link_with : [lib_common,
1841 lib_smartcols],
1842 dependencies : [blkid_dep, mount_dep],
1843 install_dir : sbindir,
1844 install : opt,
1845 build_by_default : opt)
1846 if opt and not is_disabler(exe)
1847 exes += exe
1848 manadocs += ['sys-utils/swapon.8.adoc']
1849 bashcompletions += ['swapon']
1850 endif
1851
1852 opt = not get_option('build-swapoff').disabled()
1853 exe = executable(
1854 'swapoff',
1855 swapoff_sources,
1856 include_directories : includes,
1857 link_with : [lib_common],
1858 dependencies : [blkid_dep, mount_dep],
1859 install_dir : sbindir,
1860 install : opt,
1861 build_by_default : opt)
1862 if opt and not is_disabler(exe)
1863 exes += exe
1864 manlinks += {'swapoff.8': 'swapon.8'}
1865 bashcompletions += ['swapoff']
1866 endif
1867
1868 exe = executable(
1869 'lscpu',
1870 lscpu_sources,
1871 include_directories : includes,
1872 link_with : [lib_common,
1873 lib_smartcols],
1874 dependencies : [rtas_libs],
1875 install_dir : usrbin_exec_dir,
1876 install : true)
1877 if not is_disabler(exe)
1878 exes += exe
1879 manadocs += ['sys-utils/lscpu.1.adoc']
1880 bashcompletions += ['lscpu']
1881 endif
1882
1883 exe = executable(
1884 'chcpu',
1885 chcpu_sources,
1886 include_directories : includes,
1887 link_with : [lib_common],
1888 install_dir : sbindir,
1889 install : true)
1890 exes += exe
1891 manadocs += ['sys-utils/chcpu.8.adoc']
1892 bashcompletions += ['chcpu']
1893
1894 exe = executable(
1895 'wdctl',
1896 wdctl_sources,
1897 include_directories : includes,
1898 link_with : [lib_common,
1899 lib_smartcols],
1900 install : true)
1901 if not is_disabler(exe)
1902 exes += exe
1903 manadocs += ['sys-utils/wdctl.8.adoc']
1904 bashcompletions += ['wdctl']
1905 endif
1906
1907 opt = not get_option('build-mountpoint').disabled()
1908 exe = executable(
1909 'mountpoint',
1910 mountpoint_sources,
1911 include_directories : includes,
1912 dependencies : [mount_dep],
1913 install : opt,
1914 build_by_default : opt)
1915 if opt and not is_disabler(exe)
1916 exes += exe
1917 manadocs += ['sys-utils/mountpoint.1.adoc']
1918 bashcompletions += ['mountpoint']
1919 endif
1920
1921 opt = not get_option('build-fallocate').disabled()
1922 exe = executable(
1923 'fallocate',
1924 fallocate_sources,
1925 include_directories : includes,
1926 link_with : [lib_common],
1927 install_dir : usrbin_exec_dir,
1928 install : opt,
1929 build_by_default : opt)
1930 if opt and not is_disabler(exe)
1931 exes += exe
1932 manadocs += ['sys-utils/fallocate.1.adoc']
1933 bashcompletions += ['fallocate']
1934 endif
1935
1936 opt = not get_option('build-pivot_root').disabled()
1937 exe = executable(
1938 'pivot_root',
1939 pivot_root_sources,
1940 include_directories : includes,
1941 install_dir : sbindir,
1942 install : opt,
1943 build_by_default : opt)
1944 if opt and not is_disabler(exe)
1945 exes += exe
1946 manadocs += ['sys-utils/pivot_root.8.adoc']
1947 bashcompletions += ['pivot_root']
1948 endif
1949
1950 opt = not get_option('build-switch_root').disabled()
1951 if opt and not have_dirfd and not have_ddfd
1952 error('neither dirfd nor ddfd are available')
1953 endif
1954 exe = executable(
1955 'switch_root',
1956 switch_root_sources,
1957 include_directories : includes,
1958 install_dir : sbindir,
1959 install : opt,
1960 build_by_default : opt)
1961 if opt and not is_disabler(exe)
1962 exes += exe
1963 manadocs += ['sys-utils/switch_root.8.adoc']
1964 endif
1965
1966 opt = not get_option('build-unshare').disabled()
1967 exe = executable(
1968 'unshare',
1969 unshare_sources,
1970 include_directories : includes,
1971 link_with : [lib_common],
1972 dependencies : [mount_dep],
1973 install_dir : usrbin_exec_dir,
1974 install : opt,
1975 build_by_default : opt)
1976 if opt and not is_disabler(exe)
1977 exes += exe
1978 manadocs += ['sys-utils/unshare.1.adoc']
1979 bashcompletions += ['unshare']
1980 endif
1981
1982 opt = opt and 'unshare' in static_programs
1983 exe = executable(
1984 'unshare.static',
1985 unshare_sources,
1986 include_directories : includes,
1987 link_with : [lib_common],
1988 dependencies : [mount_dep],
1989 install_dir : usrbin_exec_dir,
1990 install : opt,
1991 build_by_default : opt)
1992 if opt and not is_disabler(exe)
1993 exes += exe
1994 endif
1995
1996 opt = not get_option('build-nsenter').disabled()
1997 exe = executable(
1998 'nsenter',
1999 nsenter_sources,
2000 include_directories : includes,
2001 link_with : [lib_common],
2002 dependencies : [lib_selinux],
2003 install_dir : usrbin_exec_dir,
2004 install : opt,
2005 build_by_default : opt)
2006 if opt and not is_disabler(exe)
2007 exes += exe
2008 manadocs += ['sys-utils/nsenter.1.adoc']
2009 bashcompletions += ['nsenter']
2010 endif
2011
2012 opt = opt and 'nsenter' in static_programs
2013 exe = executable(
2014 'nsenter.static',
2015 nsenter_sources,
2016 include_directories : includes,
2017 link_with : [lib_common],
2018 dependencies : [lib_selinux],
2019 install_dir : usrbin_exec_dir,
2020 install : opt,
2021 build_by_default : opt)
2022 if opt and not is_disabler(exe)
2023 exes += exe
2024 endif
2025
2026 opt = not get_option('build-setpriv').disabled() and lib_cap_ng.found()
2027 exe = executable(
2028 'setpriv',
2029 setpriv_sources,
2030 include_directories : includes,
2031 link_with : [lib_common],
2032 dependencies : [lib_cap_ng],
2033 install_dir : usrbin_exec_dir,
2034 install : opt,
2035 build_by_default : opt)
2036 if opt and not is_disabler(exe)
2037 exes += exe
2038 manadocs += ['sys-utils/setpriv.1.adoc']
2039 bashcompletions += ['setpriv']
2040 endif
2041
2042 exe = executable(
2043 'flock',
2044 flock_sources,
2045 include_directories : includes,
2046 link_with : [lib_common],
2047 dependencies : realtime_libs,
2048 install_dir : usrbin_exec_dir,
2049 install : true)
2050 exes += exe
2051 manadocs += ['sys-utils/flock.1.adoc']
2052 bashcompletions += ['flock']
2053
2054 opt = not get_option('build-lsirq').disabled()
2055 exe = executable(
2056 'lsirq',
2057 lsirq_sources,
2058 include_directories : includes,
2059 link_with : [lib_common,
2060 lib_smartcols],
2061 install_dir : usrbin_exec_dir,
2062 install : opt,
2063 build_by_default : opt)
2064 if opt and not is_disabler(exe)
2065 exes += exe
2066 manadocs += ['sys-utils/lsirq.1.adoc']
2067 bashcompletions += ['lsirq']
2068 endif
2069
2070 opt = not get_option('build-irqtop').disabled()
2071 exe = executable(
2072 'irqtop',
2073 irqtop_sources,
2074 include_directories : includes,
2075 dependencies : [realtime_libs, curses_libs],
2076 link_with : [lib_common,
2077 lib_smartcols,
2078 lib_tcolors],
2079 install_dir : usrbin_exec_dir,
2080 install : opt,
2081 build_by_default : opt)
2082 if opt and not is_disabler(exe)
2083 exes += exe
2084 manadocs += ['sys-utils/irqtop.1.adoc']
2085 bashcompletions += ['irqtop']
2086 endif
2087
2088 opt = not get_option('build-ipcs').disabled()
2089 exe = executable(
2090 'lsipc',
2091 lsipc_sources,
2092 include_directories : includes,
2093 link_with : [lib_common,
2094 lib_smartcols],
2095 install_dir : usrbin_exec_dir,
2096 install : opt,
2097 build_by_default : opt)
2098 if opt and not is_disabler(exe)
2099 exes += exe
2100 manadocs += ['sys-utils/lsipc.1.adoc']
2101 bashcompletions += ['lsipc']
2102 endif
2103
2104 opt = build_hwclock
2105 exe = executable(
2106 'hwclock',
2107 hwclock_sources,
2108 include_directories : includes,
2109 link_with : [lib_common],
2110 dependencies : [lib_m,
2111 lib_audit],
2112 install_dir : sbindir,
2113 install : opt,
2114 build_by_default : opt)
2115 if opt and not is_disabler(exe)
2116 exes += exe
2117 manadocs += ['sys-utils/hwclock.8.adoc', 'sys-utils/adjtime_config.5.adoc']
2118 bashcompletions += ['hwclock']
2119 endif
2120
2121 exe = executable(
2122 'mkfs',
2123 mkfs_sources,
2124 include_directories : includes,
2125 install_dir : sbindir,
2126 install : true)
2127 exes += exe
2128 manadocs += ['disk-utils/mkfs.8.adoc']
2129 bashcompletions += ['mkfs']
2130
2131 opt = not get_option('build-bfs').disabled()
2132 exe = executable(
2133 'mkfs.bfs',
2134 mkfs_bfs_sources,
2135 include_directories : includes,
2136 link_with : [lib_common],
2137 install_dir : sbindir,
2138 install : opt,
2139 build_by_default : opt)
2140 if opt and not is_disabler(exe)
2141 exes += exe
2142 manadocs += ['disk-utils/mkfs.bfs.8.adoc']
2143 bashcompletions += ['mkfs.bfs']
2144 endif
2145
2146 exe = executable(
2147 'isosize',
2148 isosize_sources,
2149 include_directories : includes,
2150 link_with : [lib_common],
2151 install_dir : usrbin_exec_dir,
2152 install : true)
2153 exes += exe
2154 manadocs += ['disk-utils/isosize.8.adoc']
2155 bashcompletions += ['isosize']
2156
2157 exe = executable(
2158 'mkswap',
2159 mkswap_sources,
2160 include_directories : includes,
2161 link_with : [lib_common,
2162 lib_uuid],
2163 dependencies: [blkid_dep, lib_selinux],
2164 install_dir : sbindir,
2165 install : true)
2166 if not is_disabler(exe)
2167 exes += exe
2168 manadocs += ['disk-utils/mkswap.8.adoc']
2169 bashcompletions += ['mkswap']
2170 endif
2171
2172 exe = executable(
2173 'swaplabel',
2174 swaplabel_sources,
2175 include_directories : includes,
2176 link_with : [lib_common,
2177 lib_uuid],
2178 dependencies : [blkid_dep],
2179 install_dir : sbindir,
2180 install : true)
2181 if not is_disabler(exe)
2182 exes += exe
2183 manadocs += ['disk-utils/swaplabel.8.adoc']
2184 bashcompletions += ['swaplabel']
2185 endif
2186
2187 opt = not get_option('build-fsck').disabled()
2188 exe = executable(
2189 'fsck',
2190 fsck_sources,
2191 include_directories : includes,
2192 link_with : [lib_common],
2193 dependencies : [blkid_dep, mount_dep, realtime_libs],
2194 install_dir : sbindir,
2195 install : opt,
2196 build_by_default : opt)
2197 if opt and not is_disabler(exe)
2198 exes += exe
2199 manadocs += ['disk-utils/fsck.8.adoc']
2200 bashcompletions += ['fsck']
2201 endif
2202
2203 opt = not get_option('build-minix').disabled()
2204 exe = executable(
2205 'mkfs.minix',
2206 mkfs_minix_sources,
2207 include_directories : includes,
2208 link_with : [lib_common],
2209 install_dir : sbindir,
2210 install : opt,
2211 build_by_default : opt)
2212 exe2 = executable(
2213 'test_mkfs_minix',
2214 mkfs_minix_sources,
2215 include_directories : includes,
2216 c_args : '-DTEST_SCRIPT',
2217 link_with : [lib_common],
2218 build_by_default : opt and program_tests)
2219 exe3 = executable(
2220 'fsck.minix',
2221 fsck_minix_sources,
2222 include_directories : includes,
2223 link_with : [lib_common],
2224 install_dir : sbindir,
2225 install : opt,
2226 build_by_default : opt)
2227 if opt and not is_disabler(exe)
2228 exes += [exe, exe2, exe3]
2229 manadocs += ['disk-utils/mkfs.minix.8.adoc','disk-utils/fsck.minix.8.adoc']
2230 bashcompletions += ['mkfs.minix', 'fsck.minix']
2231 endif
2232
2233 opt = not get_option('build-cramfs').disabled()
2234 exe = executable(
2235 'mkfs.cramfs',
2236 mkfs_cramfs_sources,
2237 include_directories : includes,
2238 link_with : [lib_common],
2239 dependencies : [lib_z],
2240 install_dir : sbindir,
2241 install : opt,
2242 build_by_default : opt)
2243 exe2 = executable(
2244 'fsck.cramfs',
2245 fsck_cramfs_sources,
2246 include_directories : includes,
2247 link_with : [lib_common],
2248 dependencies : [lib_z],
2249 install_dir : sbindir,
2250 install : opt,
2251 build_by_default : opt)
2252 if not is_disabler(exe)
2253 exes += [exe, exe2]
2254 manadocs += ['disk-utils/mkfs.cramfs.8.adoc','disk-utils/fsck.cramfs.8.adoc']
2255 bashcompletions += ['mkfs.cramfs', 'fsck.cramfs']
2256 endif
2257
2258 opt = not get_option('build-raw').disabled()
2259 if opt
2260 cc.has_header('linux/raw.h', required: opt)
2261 endif
2262 exe = executable(
2263 'raw',
2264 raw_sources,
2265 include_directories : includes,
2266 install_dir : sbindir,
2267 install : opt,
2268 build_by_default : opt)
2269 if opt and not is_disabler(exe)
2270 exes += exe
2271 manadocs += ['disk-utils/raw.8.adoc']
2272 bashcompletions += ['raw']
2273 endif
2274
2275 opt = not get_option('build-fdformat').disabled()
2276 exe = executable(
2277 'fdformat',
2278 fdformat_sources,
2279 include_directories : includes,
2280 link_with : [lib_common],
2281 install_dir : usrsbin_exec_dir,
2282 install : opt,
2283 build_by_default : opt)
2284 if opt and not is_disabler(exe)
2285 exes += exe
2286 manadocs += ['disk-utils/fdformat.8.adoc']
2287 bashcompletions += ['fdformat']
2288 endif
2289
2290 exe = executable(
2291 'blockdev',
2292 blockdev_sources,
2293 include_directories : includes,
2294 link_with : [lib_common],
2295 install_dir : sbindir,
2296 install : true)
2297 manadocs += ['disk-utils/blockdev.8.adoc']
2298 bashcompletions += ['blockdev']
2299
2300 opt = not get_option('build-fdisks').disabled()
2301 if opt and not have_dirfd and not have_ddfd
2302 error('neither dirfd nor ddfd are available')
2303 endif
2304 exe = executable(
2305 'fdisk',
2306 fdisk_sources,
2307 include_directories : includes,
2308 link_with : [lib_common,
2309 lib_fdisk,
2310 lib_smartcols,
2311 lib_tcolors],
2312 dependencies : [lib_readline],
2313 install_dir : sbindir,
2314 install : opt,
2315 build_by_default : opt)
2316 if opt and not is_disabler(exe)
2317 exes += exe
2318 bashcompletions += ['fdisk']
2319 endif
2320
2321 opt2 = opt and 'fdisk' in static_programs
2322 exe = executable(
2323 'fdisk.static',
2324 fdisk_sources,
2325 link_args : ['--static'],
2326 include_directories : includes,
2327 link_with : [lib_common,
2328 lib_tcolors,
2329 lib_fdisk_static,
2330 lib_smartcols.get_static_lib()],
2331 dependencies : [lib_readline_static],
2332 install_dir : sbindir,
2333 install : opt2,
2334 build_by_default : opt2)
2335 if opt2 and not is_disabler(exe)
2336 exes += exe
2337 endif
2338
2339 exe = executable(
2340 'sfdisk',
2341 sfdisk_sources,
2342 include_directories : includes,
2343 link_with : [lib_common,
2344 lib_fdisk,
2345 lib_smartcols,
2346 lib_tcolors],
2347 dependencies : [lib_readline],
2348 install_dir : sbindir,
2349 install : opt,
2350 build_by_default : opt)
2351 if opt and not is_disabler(exe)
2352 exes += exe
2353 bashcompletions += ['sfdisk']
2354 endif
2355
2356 opt2 = opt and 'sfdisk' in static_programs
2357 exe = executable(
2358 'sfdisk.static',
2359 sfdisk_sources,
2360 include_directories : includes,
2361 link_with : [lib_common,
2362 lib_tcolors,
2363 lib_fdisk_static,
2364 lib_smartcols.get_static_lib()],
2365 dependencies : [lib_readline_static],
2366 install_dir : sbindir,
2367 install : opt2,
2368 build_by_default : opt2)
2369 if opt2 and not is_disabler(exe)
2370 exes += exe
2371 endif
2372
2373 exe = executable(
2374 'cfdisk',
2375 cfdisk_sources,
2376 include_directories : includes,
2377 link_with : [lib_common,
2378 lib_fdisk,
2379 lib_smartcols,
2380 lib_tcolors],
2381 dependencies : [curses_libs, mount_dep],
2382 install_dir : sbindir,
2383 install : opt,
2384 build_by_default : opt)
2385 if opt and not is_disabler(exe)
2386 exes += exe
2387 manadocs += ['disk-utils/fdisk.8.adoc',
2388 'disk-utils/sfdisk.8.adoc',
2389 'disk-utils/cfdisk.8.adoc']
2390 bashcompletions += ['cfdisk']
2391 endif
2392
2393 opt = not get_option('build-partx').disabled()
2394 exe = executable(
2395 'addpart',
2396 addpart_sources,
2397 include_directories : includes,
2398 link_with : [lib_common],
2399 install_dir : usrsbin_exec_dir,
2400 install : opt,
2401 build_by_default : opt)
2402 exe2 = executable(
2403 'delpart',
2404 delpart_sources,
2405 include_directories : includes,
2406 link_with : [lib_common],
2407 install_dir : usrsbin_exec_dir,
2408 install : opt,
2409 build_by_default : opt)
2410 exe3 = executable(
2411 'resizepart',
2412 resizepart_sources,
2413 include_directories : includes,
2414 link_with : [lib_common],
2415 install_dir : usrsbin_exec_dir,
2416 install : opt,
2417 build_by_default : opt)
2418 exe4 = executable(
2419 'partx',
2420 partx_sources,
2421 include_directories : includes,
2422 link_with : [lib_common,
2423 lib_smartcols],
2424 dependencies : [blkid_dep],
2425 install_dir : usrsbin_exec_dir,
2426 install : opt,
2427 build_by_default : opt)
2428 if opt
2429 exes += [exe, exe2, exe3, exe4]
2430 manadocs += ['disk-utils/addpart.8.adoc',
2431 'disk-utils/delpart.8.adoc',
2432 'disk-utils/resizepart.8.adoc',
2433 'disk-utils/partx.8.adoc']
2434 bashcompletions += ['addpart', 'delpart', 'resizepart', 'partx']
2435 endif
2436 opt = opt and 'partx' in static_programs
2437 exe = executable(
2438 'addpart.static',
2439 addpart_sources,
2440 include_directories : includes,
2441 link_args : ['--static'],
2442 link_with : [lib_common],
2443 install_dir : usrsbin_exec_dir,
2444 install : opt,
2445 build_by_default : opt)
2446 exe2 = executable(
2447 'delpart.static',
2448 delpart_sources,
2449 include_directories : includes,
2450 link_args : ['--static'],
2451 link_with : [lib_common],
2452 install_dir : usrsbin_exec_dir,
2453 install : opt,
2454 build_by_default : opt)
2455 exe3 = executable(
2456 'resizepart.static',
2457 resizepart_sources,
2458 include_directories : includes,
2459 link_args : ['--static'],
2460 link_with : [lib_common],
2461 install_dir : usrsbin_exec_dir,
2462 install : opt,
2463 build_by_default : opt)
2464 exe4 = executable(
2465 'partx.static',
2466 partx_sources,
2467 include_directories : includes,
2468 link_args : ['--static'],
2469 link_with : [lib_common,
2470 lib_smartcols.get_static_lib()],
2471 dependencies : [blkid_static_dep],
2472 install_dir : usrsbin_exec_dir,
2473 install : opt,
2474 build_by_default : opt)
2475
2476 if opt
2477 exes += [exe, exe2, exe3, exe4]
2478 endif
2479
2480 ############################################################
2481
2482 exe = executable(
2483 'script',
2484 script_sources,
2485 include_directories : includes,
2486 link_with : [lib_common],
2487 dependencies : [lib_util,
2488 lib_utempter,
2489 realtime_libs,
2490 math_libs],
2491 install_dir : usrbin_exec_dir,
2492 install : true)
2493 exes += exe
2494 manadocs += ['term-utils/script.1.adoc']
2495 bashcompletions += ['script']
2496
2497 exe = executable(
2498 'test_script',
2499 script_sources,
2500 include_directories : includes,
2501 c_args : '-DTEST_SCRIPT',
2502 link_with : [lib_common],
2503 dependencies : [lib_util,
2504 lib_utempter,
2505 realtime_libs,
2506 math_libs],
2507 build_by_default : program_tests)
2508 exes += exe
2509
2510 exe = executable(
2511 'scriptlive',
2512 scriptlive_sources,
2513 include_directories : includes,
2514 link_with : [lib_common],
2515 dependencies : [lib_util,
2516 realtime_libs,
2517 math_libs],
2518 install_dir : usrbin_exec_dir,
2519 install : true)
2520 exes += exe
2521 manadocs += ['term-utils/scriptlive.1.adoc']
2522 bashcompletions += ['scriptlive']
2523
2524 exe = executable(
2525 'scriptreplay',
2526 scriptreplay_sources,
2527 include_directories : includes,
2528 link_with : [lib_common],
2529 dependencies : [math_libs],
2530 install_dir : usrbin_exec_dir,
2531 install : true)
2532 exes += exe
2533 manadocs += ['term-utils/scriptreplay.1.adoc']
2534 bashcompletions += ['scriptreplay']
2535
2536 opt = not get_option('build-agetty').disabled()
2537 exe = executable(
2538 'agetty',
2539 agetty_sources,
2540 include_directories : includes,
2541 link_with : [lib_common, logindefs_c],
2542 dependencies : [BSD ? lib_util : [], lib_systemd],
2543 install_dir : sbindir,
2544 install : opt,
2545 build_by_default : opt)
2546 if opt
2547 exes += exe
2548 manadocs += ['term-utils/agetty.8.adoc']
2549 endif
2550
2551 opt = not get_option('build-setterm').disabled()
2552 exe = executable(
2553 'setterm',
2554 setterm_sources,
2555 include_directories : includes,
2556 link_with : [lib_common],
2557 dependencies : [curses_libs],
2558 install_dir : usrbin_exec_dir,
2559 install : opt,
2560 build_by_default : opt)
2561 if opt
2562 exes += exe
2563 manadocs += ['term-utils/setterm.1.adoc']
2564 bashcompletions += ['setterm']
2565 endif
2566
2567 opt = not get_option('build-mesg').disabled()
2568 exe = executable(
2569 'mesg',
2570 mesg_sources,
2571 include_directories : includes,
2572 link_with : [lib_common],
2573 install_dir : usrbin_exec_dir,
2574 install : opt,
2575 build_by_default : opt)
2576 if opt
2577 exes += exe
2578 manadocs += ['term-utils/mesg.1.adoc']
2579 bashcompletions += ['mesg']
2580 endif
2581
2582 opt = not get_option('build-wall').disabled()
2583 exe = executable(
2584 'wall',
2585 wall_sources,
2586 include_directories : includes,
2587 link_with : [lib_common],
2588 dependencies : [lib_systemd],
2589 install_dir : usrbin_exec_dir,
2590 install_mode : [ 'rwxr-sr-x', 'root', 'tty' ],
2591 install : opt,
2592 build_by_default : opt)
2593 if opt
2594 exes += exe
2595 manadocs += ['term-utils/wall.1.adoc']
2596 bashcompletions += ['wall']
2597 endif
2598
2599 # chgrp tty $(DESTDIR)$(usrbin_execdir)/wall
2600 # chmod g+s $(DESTDIR)$(usrbin_execdir)/wall
2601
2602 opt = not get_option('build-write').disabled()
2603 exe = executable(
2604 'write',
2605 write_sources,
2606 include_directories : includes,
2607 link_with : [lib_common],
2608 dependencies : [lib_systemd],
2609 install_dir : usrbin_exec_dir,
2610 install_mode : [ 'rwxr-sr-x', 'root', 'tty' ],
2611 install : opt,
2612 build_by_default : opt)
2613 if opt
2614 exes += exe
2615 manadocs += ['term-utils/write.1.adoc']
2616 bashcompletions += ['write']
2617 endif
2618
2619 # chgrp tty $(DESTDIR)$(usrbin_execdir)/write
2620 # chmod g+s $(DESTDIR)$(usrbin_execdir)/write
2621
2622 opt = not get_option('build-login').disabled()
2623 exe = executable(
2624 'login',
2625 login_sources,
2626 include_directories : includes,
2627 link_with : [lib_common, logindefs_c],
2628 dependencies : [lib_pam,
2629 lib_audit,
2630 lib_selinux],
2631 install : opt,
2632 build_by_default : opt)
2633 if not is_disabler(exe)
2634 exes += exe
2635 manadocs += ['login-utils/login.1.adoc']
2636 endif
2637
2638 opt = not get_option('build-sulogin').disabled()
2639 exe = executable(
2640 'sulogin',
2641 sulogin_sources,
2642 include_directories : includes,
2643 link_with : [lib_common],
2644 dependencies : [lib_crypt,
2645 lib_selinux],
2646 install_dir : sbindir,
2647 install : opt,
2648 build_by_default : opt)
2649 if not is_disabler(exe)
2650 exes += exe
2651 manadocs += ['login-utils/sulogin.8.adoc']
2652 endif
2653
2654 exe = executable(
2655 'cal',
2656 cal_sources,
2657 include_directories : includes,
2658 link_with : [lib_common,
2659 lib_tcolors],
2660 dependencies : [curses_libs],
2661 install_dir : usrbin_exec_dir,
2662 install : true)
2663 exes += exe
2664 manadocs += ['misc-utils/cal.1.adoc']
2665 bashcompletions += ['cal']
2666
2667 opt = not get_option('build-logger').disabled()
2668 exe = executable(
2669 'logger',
2670 logger_sources,
2671 include_directories : includes,
2672 link_with : [lib_common],
2673 dependencies : [lib_systemd],
2674 install_dir : usrbin_exec_dir,
2675 install : opt,
2676 build_by_default : opt)
2677 if opt and not is_disabler(exe)
2678 exes += exe
2679 manadocs += ['misc-utils/logger.1.adoc']
2680 bashcompletions += ['logger']
2681 endif
2682
2683 exe = executable(
2684 'test_logger',
2685 logger_sources,
2686 include_directories : includes,
2687 c_args : '-DTEST_LOGGER',
2688 link_with : [lib_common],
2689 dependencies : [lib_systemd],
2690 build_by_default: program_tests)
2691 if not is_disabler(exe)
2692 exes += exe
2693 endif
2694
2695 exe = executable(
2696 'look',
2697 look_sources,
2698 include_directories : includes,
2699 install_dir : usrbin_exec_dir,
2700 install : true)
2701 exes += exe
2702 manadocs += ['misc-utils/look.1.adoc']
2703 bashcompletions += ['look']
2704
2705 exe = executable(
2706 'mcookie',
2707 mcookie_sources,
2708 include_directories : includes,
2709 link_with : [lib_common],
2710 install_dir : usrbin_exec_dir,
2711 install : true)
2712 exes += exe
2713 manadocs += ['misc-utils/mcookie.1.adoc']
2714 bashcompletions += ['mcookie']
2715
2716 if build_liblastlog2
2717 exe = executable(
2718 'lastlog2',
2719 lastlog2_sources,
2720 include_directories : includes,
2721 link_with : [lib_common, lib_lastlog2],
2722 install_dir : usrbin_exec_dir,
2723 install : true)
2724 exes += exe
2725 manadocs += ['misc-utils/lastlog2.8.adoc']
2726 bashcompletions += ['lastlog2']
2727 manadocs += ['liblastlog2/man/lastlog2.3.adoc',
2728 'liblastlog2/man/ll2_write_entry.3.adoc',
2729 'liblastlog2/man/ll2_read_entry.3.adoc',
2730 'liblastlog2/man/ll2_import_lastlog.3.adoc',
2731 'liblastlog2/man/ll2_read_all.3.adoc',
2732 'liblastlog2/man/ll2_remove_entry.3.adoc',
2733 'liblastlog2/man/ll2_rename_user.3.adoc',
2734 'liblastlog2/man/ll2_update_login_time.3.adoc'
2735 ]
2736 endif
2737
2738 exe = executable(
2739 'namei',
2740 namei_sources,
2741 include_directories : includes,
2742 dependencies : [lib_selinux],
2743 install_dir : usrbin_exec_dir,
2744 install : true)
2745 exes += exe
2746 manadocs += ['misc-utils/namei.1.adoc']
2747 bashcompletions += ['namei']
2748
2749 exe = executable(
2750 'whereis',
2751 whereis_sources,
2752 include_directories : includes,
2753 link_with : [lib_common],
2754 install_dir : usrbin_exec_dir,
2755 install : true)
2756 exes += exe
2757 manadocs += ['misc-utils/whereis.1.adoc']
2758 bashcompletions += ['whereis']
2759
2760 opt = not get_option('build-lslocks').disabled()
2761 exe = executable(
2762 'lslocks',
2763 lslocks_sources,
2764 include_directories : includes,
2765 link_with : [lib_common,
2766 lib_smartcols],
2767 dependencies : [mount_dep],
2768 install_dir : usrbin_exec_dir,
2769 install : opt,
2770 build_by_default : opt)
2771 if opt and not is_disabler(exe)
2772 exes += exe
2773 manadocs += ['misc-utils/lslocks.8.adoc']
2774 bashcompletions += ['lslocks']
2775 endif
2776
2777 opt = not get_option('build-lsblk').disabled()
2778 exe = executable(
2779 'lsblk',
2780 lsblk_sources,
2781 include_directories : includes,
2782 link_with : [lib_common,
2783 lib_tcolors,
2784 lib_smartcols],
2785 dependencies : [blkid_dep, lib_udev, mount_dep],
2786 install : opt,
2787 build_by_default : opt)
2788 if opt and not is_disabler(exe)
2789 exes += exe
2790 manadocs += ['misc-utils/lsblk.8.adoc']
2791 bashcompletions += ['lsblk']
2792 endif
2793
2794 errnos_h = custom_target('errnos.h',
2795 input : 'tools/all_errnos',
2796 output : 'errnos.h',
2797 command : ['tools/all_errnos', sed.full_path(),
2798 cc.cmd_array(), get_option('c_args')],
2799 )
2800
2801 opt = not get_option('build-lsfd').require(lib_rt.found()).disabled()
2802 exe = executable(
2803 'lsfd',
2804 lsfd_sources, errnos_h,
2805 include_directories : includes,
2806 link_with : [lib_common,
2807 lib_smartcols],
2808 dependencies : [lib_rt],
2809 install_dir : usrbin_exec_dir,
2810 install : opt,
2811 build_by_default : opt)
2812 if opt and not is_disabler(exe)
2813 exes += exe
2814 manadocs += ['lsfd-cmd/lsfd.1.adoc']
2815 endif
2816
2817 exe = executable(
2818 'uuidgen',
2819 uuidgen_sources,
2820 include_directories : includes,
2821 link_with : [lib_common,
2822 lib_uuid],
2823 install_dir : usrbin_exec_dir,
2824 install : true)
2825 if not is_disabler(exe)
2826 exes += exe
2827 manadocs += ['misc-utils/uuidgen.1.adoc']
2828 bashcompletions += ['uuidgen']
2829 endif
2830
2831 exe = executable(
2832 'uuidparse',
2833 uuidparse_sources,
2834 include_directories : includes,
2835 link_with : [lib_common,
2836 lib_uuid,
2837 lib_smartcols],
2838 install_dir : usrbin_exec_dir,
2839 install : true)
2840 if not is_disabler(exe)
2841 exes += exe
2842 manadocs += ['misc-utils/uuidparse.1.adoc']
2843 bashcompletions += ['uuidparse']
2844 endif
2845
2846 opt = build_uuidd
2847 exe = executable(
2848 'uuidd',
2849 uuidd_sources,
2850 include_directories : includes,
2851 link_with : [lib_common,
2852 lib_uuid],
2853 dependencies : [realtime_libs,
2854 lib_systemd],
2855 install_dir : usrsbin_exec_dir,
2856 install : opt,
2857 build_by_default : opt)
2858 exe2 = executable(
2859 'test_uuidd',
2860 test_uuidd_sources,
2861 include_directories : includes,
2862 link_with : [lib_common,
2863 lib_uuid],
2864 dependencies : thread_libs,
2865 build_by_default : opt and program_tests)
2866 if not is_disabler(exe)
2867 exes += [exe, exe2]
2868 manadocs += ['misc-utils/uuidd.8.adoc']
2869 bashcompletions += ['uuidd']
2870 endif
2871
2872 opt = build_libblkid
2873 exe = executable(
2874 'blkid',
2875 blkid_sources,
2876 include_directories : includes,
2877 link_with : [lib_common],
2878 dependencies : [blkid_dep],
2879 install_dir : sbindir,
2880 install : opt,
2881 build_by_default : opt)
2882 if opt and not is_disabler(exe)
2883 exes += exe
2884 manadocs += ['misc-utils/blkid.8.adoc']
2885 bashcompletions += ['blkid']
2886 endif
2887
2888 opt = opt and 'blkid' in static_programs
2889 exe = executable(
2890 'blkid.static',
2891 blkid_sources,
2892 include_directories : includes,
2893 link_with : [lib_common],
2894 dependencies : [blkid_static_dep],
2895 install_dir : sbindir,
2896 install : opt,
2897 build_by_default : opt)
2898 if opt and not is_disabler(exe)
2899 exes += exe
2900 endif
2901
2902 exe = executable(
2903 'sample-mkfs',
2904 'libblkid/samples/mkfs.c',
2905 include_directories : includes,
2906 dependencies : [blkid_dep])
2907 if not is_disabler(exe)
2908 exes += exe
2909 endif
2910
2911 exe = executable(
2912 'sample-partitions',
2913 'libblkid/samples/partitions.c',
2914 include_directories : includes,
2915 dependencies : [blkid_dep])
2916 if not is_disabler(exe)
2917 exes += exe
2918 endif
2919
2920 exe = executable(
2921 'sample-superblocks',
2922 'libblkid/samples/superblocks.c',
2923 include_directories : includes,
2924 dependencies : [blkid_dep])
2925 if not is_disabler(exe)
2926 exes += exe
2927 endif
2928
2929 exe = executable(
2930 'sample-topology',
2931 'libblkid/samples/topology.c',
2932 include_directories : includes,
2933 dependencies : [blkid_dep])
2934 if not is_disabler(exe)
2935 exes += exe
2936 endif
2937
2938 exe = executable(
2939 'test_blkid_fuzz_sample',
2940 'libblkid/src/fuzz.c',
2941 include_directories: includes,
2942 dependencies : [blkid_dep],
2943 build_by_default: program_tests)
2944 if not is_disabler(exe)
2945 exes += exe
2946 endif
2947
2948 ############################################################
2949
2950 exe = executable(
2951 'findfs',
2952 findfs_sources,
2953 include_directories : includes,
2954 dependencies : [blkid_dep],
2955 install_dir : sbindir,
2956 install : true)
2957 if not is_disabler(exe)
2958 exes += exe
2959 manadocs += ['misc-utils/findfs.8.adoc']
2960 bashcompletions += ['findfs']
2961 endif
2962
2963 exe = executable(
2964 'wipefs',
2965 wipefs_sources,
2966 include_directories : includes,
2967 link_with : [lib_common,
2968 lib_smartcols],
2969 dependencies : [blkid_dep],
2970 install_dir : sbindir,
2971 install : true)
2972 if not is_disabler(exe)
2973 exes += exe
2974 manadocs += ['misc-utils/wipefs.8.adoc']
2975 bashcompletions += ['wipefs']
2976 endif
2977
2978 opt = not get_option('build-findmnt').disabled()
2979 exe = executable(
2980 'findmnt',
2981 findmnt_sources,
2982 include_directories : includes,
2983 link_with : [lib_common,
2984 lib_smartcols],
2985 dependencies : [blkid_dep, lib_udev, mount_dep],
2986 install : opt,
2987 build_by_default : opt)
2988 if opt and not is_disabler(exe)
2989 exes += exe
2990 manadocs += ['misc-utils/findmnt.8.adoc']
2991 bashcompletions += ['findmnt']
2992 endif
2993
2994 exe = executable(
2995 'kill',
2996 kill_sources,
2997 include_directories : includes,
2998 link_with : [lib_common],
2999 install : true)
3000 if not is_disabler(exe)
3001 exes += exe
3002 manadocs += ['misc-utils/kill.1.adoc']
3003 endif
3004
3005 opt = not get_option('build-rename').disabled()
3006 exe = executable(
3007 'rename',
3008 rename_sources,
3009 include_directories : includes,
3010 install_dir : usrbin_exec_dir,
3011 install : opt,
3012 build_by_default : opt)
3013 if opt and not is_disabler(exe)
3014 exes += exe
3015 manadocs += ['misc-utils/rename.1.adoc']
3016 bashcompletions += ['rename']
3017 endif
3018
3019 exe = executable(
3020 'getopt',
3021 getopt_sources,
3022 include_directories : includes,
3023 link_with : [lib_common],
3024 install_dir : usrbin_exec_dir,
3025 install : true)
3026 exes += exe
3027 manadocs += ['misc-utils/getopt.1.adoc']
3028 bashcompletions += ['getopt']
3029
3030 exe = executable(
3031 'fincore',
3032 fincore_sources,
3033 include_directories : includes,
3034 link_with : [lib_common,
3035 lib_smartcols],
3036 install_dir : usrbin_exec_dir,
3037 install : true)
3038 if not is_disabler(exe)
3039 exes += exe
3040 manadocs += ['misc-utils/fincore.1.adoc']
3041 bashcompletions += ['fincore']
3042 endif
3043
3044 exe = executable(
3045 'hardlink',
3046 hardlink_sources,
3047 include_directories : includes,
3048 link_with : [lib_common],
3049 install_dir : usrbin_exec_dir,
3050 install : true)
3051 if not is_disabler(exe)
3052 exes += exe
3053 manadocs += ['misc-utils/hardlink.1.adoc']
3054 bashcompletions += ['hardlink']
3055 endif
3056
3057 opt = not get_option('build-pipesz').disabled()
3058 exe = executable(
3059 'pipesz',
3060 pipesz_sources,
3061 include_directories : includes,
3062 link_with : [lib_common],
3063 install_dir : usrbin_exec_dir,
3064 install : true)
3065 if opt and not is_disabler(exe)
3066 exes += exe
3067 manadocs += ['misc-utils/pipesz.1.adoc']
3068 bashcompletions += ['pipesz']
3069 endif
3070
3071 exe = executable(
3072 'test_cal',
3073 cal_sources,
3074 include_directories : includes,
3075 c_args : '-DTEST_CAL',
3076 link_with : [lib_common,
3077 lib_tcolors],
3078 dependencies : [curses_libs],
3079 build_by_default: program_tests)
3080 if not is_disabler(exe)
3081 exes += exe
3082 endif
3083
3084 exe = executable(
3085 'fadvise',
3086 fadvise_sources,
3087 include_directories : includes,
3088 link_with : [lib_common],
3089 install_dir : usrbin_exec_dir,
3090 install : true)
3091 if not is_disabler(exe)
3092 exes += exe
3093 manadocs += ['misc-utils/fadvise.1.adoc']
3094 bashcompletions += ['fadvise']
3095 endif
3096
3097 if LINUX and conf.get('HAVE_PIDFD_OPEN').to_string() == '1'
3098 exe = executable(
3099 'waitpid',
3100 waitpid_sources,
3101 include_directories : includes,
3102 link_with : [lib_common],
3103 install_dir : usrbin_exec_dir,
3104 install : true)
3105 if not is_disabler(exe)
3106 exes += exe
3107 manadocs += ['misc-utils/waitpid.1.adoc']
3108 bashcompletions += ['waitpid']
3109 endif
3110 endif
3111
3112 syscalls_h = custom_target('syscalls.h',
3113 input : 'tools/all_syscalls',
3114 output : 'syscalls.h',
3115 command : ['tools/all_syscalls', sed.full_path(),
3116 cc.cmd_array(), get_option('c_args')],
3117 )
3118
3119 if cc.compiles(fs.read('include/audit-arch.h'), name : 'has AUDIT_ARCH_NATIVE')
3120 exe = executable(
3121 'enosys',
3122 'misc-utils/enosys.c', syscalls_h, errnos_h,
3123 include_directories : includes,
3124 link_with : [lib_common],
3125 install_dir : usrbin_exec_dir,
3126 install : true)
3127 if not is_disabler(exe)
3128 exes += exe
3129 manadocs += ['misc-utils/enosys.1.adoc']
3130 bashcompletions += ['enosys']
3131 endif
3132 endif
3133
3134 exe = executable(
3135 'lsclocks',
3136 lsclocks_sources,
3137 include_directories : includes,
3138 link_with : [lib_common, lib_smartcols],
3139 install_dir : usrbin_exec_dir,
3140 install : true)
3141 if not is_disabler(exe)
3142 exes += exe
3143 manadocs += ['misc-utils/lsclocks.1.adoc']
3144 bashcompletions += ['lsclocks']
3145 endif
3146
3147 if conf.get('HAVE_RENAMEAT2').to_string() == '1'
3148 exe = executable(
3149 'exch',
3150 exch_sources,
3151 include_directories : includes,
3152 link_with : [lib_common],
3153 install_dir : usrbin_exec_dir,
3154 install : true)
3155 if not is_disabler(exe)
3156 exes += exe
3157 manadocs += ['misc-utils/exch.1.adoc']
3158 bashcompletions += ['exch']
3159 endif
3160 endif
3161
3162 ############################################################
3163
3164 opt = not get_option('build-schedutils').disabled()
3165 exe = executable(
3166 'chrt',
3167 'schedutils/chrt.c',
3168 include_directories : includes,
3169 link_with : lib_common,
3170 install_dir : usrbin_exec_dir,
3171 install : opt,
3172 build_by_default : opt)
3173
3174 exe2 = executable(
3175 'ionice',
3176 'schedutils/ionice.c',
3177 include_directories : includes,
3178 link_with : lib_common,
3179 install_dir : usrbin_exec_dir,
3180 install : opt,
3181 build_by_default : opt)
3182
3183 exe3 = executable(
3184 'taskset',
3185 'schedutils/taskset.c',
3186 include_directories : includes,
3187 link_with : lib_common,
3188 install_dir : usrbin_exec_dir,
3189 install : opt,
3190 build_by_default : opt)
3191
3192 exe4 = executable(
3193 'uclampset',
3194 'schedutils/uclampset.c',
3195 include_directories : includes,
3196 link_with : lib_common,
3197 install_dir : usrbin_exec_dir,
3198 install : opt,
3199 build_by_default : opt)
3200
3201 if opt and not is_disabler(exe)
3202 exes += [exe, exe2, exe3, exe4]
3203 manadocs += ['schedutils/chrt.1.adoc',
3204 'schedutils/ionice.1.adoc',
3205 'schedutils/taskset.1.adoc',
3206 'schedutils/uclampset.1.adoc']
3207 bashcompletions += ['chrt', 'ionice', 'taskset', 'uclampset']
3208 endif
3209
3210 ############################################################
3211
3212 # TODO: when autotools compat is not needed, s/_/-/g in file names?
3213
3214 exe = executable(
3215 'test_ttyutils',
3216 'lib/ttyutils.c',
3217 c_args : ['-DTEST_PROGRAM_TTYUTILS'],
3218 include_directories : dir_include,
3219 link_with : lib_common,
3220 build_by_default: program_tests)
3221 exes += exe
3222
3223 exe = executable(
3224 'test_blkdev',
3225 'lib/blkdev.c',
3226 c_args : ['-DTEST_PROGRAM_BLKDEV'],
3227 include_directories : dir_include,
3228 link_with : lib_common,
3229 build_by_default: program_tests)
3230 exes += exe
3231
3232 exe = executable(
3233 'test_ismounted',
3234 'lib/ismounted.c',
3235 c_args : ['-DTEST_PROGRAM_ISMOUNTED'],
3236 include_directories : dir_include,
3237 link_with : lib_common,
3238 build_by_default: program_tests)
3239 exes += exe
3240
3241 exe = executable(
3242 'test_mangle',
3243 'lib/mangle.c',
3244 c_args : ['-DTEST_PROGRAM_MANGLE'],
3245 include_directories : dir_include,
3246 build_by_default: program_tests)
3247 exes += exe
3248
3249 exe = executable(
3250 'test_strutils',
3251 'lib/strutils.c',
3252 c_args : ['-DTEST_PROGRAM_STRUTILS'],
3253 include_directories : dir_include,
3254 build_by_default: program_tests)
3255 exes += exe
3256
3257 exe = executable(
3258 'test_colors',
3259 'lib/colors.c',
3260 'lib/color-names.c',
3261 c_args : ['-DTEST_PROGRAM_COLORS'],
3262 include_directories : dir_include,
3263 link_with : [lib_common, lib_tcolors],
3264 build_by_default: program_tests)
3265 exes += exe
3266
3267 exe = executable(
3268 'test_randutils',
3269 'lib/randutils.c',
3270 c_args : ['-DTEST_PROGRAM_RANDUTILS'],
3271 include_directories : dir_include,
3272 build_by_default: program_tests)
3273 exes += exe
3274
3275 if conf.get('HAVE_OPENAT').to_string() == '1' \
3276 and conf.get('HAVE_DIRFD').to_string() == '1'
3277 exe = executable(
3278 'test_procfs',
3279 'lib/procfs.c',
3280 c_args : ['-DTEST_PROGRAM_PROCFS'],
3281 include_directories : dir_include,
3282 link_with : lib_common,
3283 build_by_default: program_tests)
3284 exes += exe
3285
3286 exe = executable(
3287 'test_path',
3288 'lib/path.c',
3289 'lib/fileutils.c',
3290 have_cpu_set_t ? 'lib/cpuset.c' : [],
3291 c_args : ['-DTEST_PROGRAM_PATH'],
3292 include_directories : dir_include,
3293 link_with : lib_common,
3294 build_by_default: program_tests)
3295 exes += exe
3296 endif
3297
3298 if conf.get('HAVE_PTY').to_string() == '1'
3299 exe = executable(
3300 'test_pty',
3301 pty_session_c,
3302 monotonic_c,
3303 c_args : ['-DTEST_PROGRAM_PTY'],
3304 include_directories : dir_include,
3305 link_with : [lib_common],
3306 dependencies : [lib_m,
3307 realtime_libs,
3308 lib_util],
3309 build_by_default: program_tests)
3310 exes += exe
3311 endif
3312
3313 if LINUX
3314 exe = executable(
3315 'test_cpuset',
3316 'lib/cpuset.c',
3317 c_args : ['-DTEST_PROGRAM_CPUSET'],
3318 include_directories : dir_include,
3319 build_by_default: program_tests)
3320 exes += exe
3321 endif
3322
3323 exe = executable(
3324 'test_sysfs',
3325 'lib/sysfs.c',
3326 'lib/path.c',
3327 'lib/buffer.c',
3328 'lib/mbsalign.c',
3329 'lib/fileutils.c',
3330 have_cpu_set_t ? 'lib/cpuset.c' : [],
3331 c_args : ['-DTEST_PROGRAM_SYSFS'],
3332 include_directories : dir_include,
3333 build_by_default: program_tests)
3334 exes += exe
3335
3336 exe = executable(
3337 'test_pager',
3338 'lib/pager.c',
3339 c_args : ['-DTEST_PROGRAM_PAGER'],
3340 include_directories : dir_include,
3341 build_by_default: program_tests)
3342 exes += exe
3343
3344 exe = executable(
3345 'test_linux_version',
3346 'lib/linux_version.c',
3347 c_args : ['-DTEST_PROGRAM_LINUXVERSION'],
3348 include_directories : dir_include,
3349 build_by_default: program_tests)
3350 exes += exe
3351
3352 exe = executable(
3353 'test_fileutils',
3354 'lib/fileutils.c',
3355 c_args : ['-DTEST_PROGRAM_FILEUTILS'],
3356 include_directories : dir_include,
3357 build_by_default: program_tests)
3358 exes += exe
3359
3360 exe = executable(
3361 'test_canonicalize',
3362 'lib/canonicalize.c',
3363 c_args : ['-DTEST_PROGRAM_CANONICALIZE'],
3364 include_directories : dir_include,
3365 build_by_default: program_tests)
3366 exes += exe
3367
3368 exe = executable(
3369 'test_timeutils',
3370 'lib/timeutils.c',
3371 'lib/strutils.c',
3372 c_args : ['-DTEST_PROGRAM_TIMEUTILS'],
3373 include_directories : dir_include,
3374 build_by_default: program_tests)
3375 exes += exe
3376
3377 exe = executable(
3378 'test_pwdutils',
3379 'lib/pwdutils.c',
3380 c_args : ['-DTEST_PROGRAM'],
3381 include_directories : dir_include,
3382 link_with : lib_common,
3383 build_by_default: program_tests)
3384 exes += exe
3385
3386 exe = executable(
3387 'test_logindefs',
3388 'lib/logindefs.c',
3389 c_args : ['-DTEST_PROGRAM'],
3390 include_directories : dir_include,
3391 link_with : [lib_common, logindefs_c],
3392 build_by_default: program_tests)
3393 exes += exe
3394
3395
3396 ############################################################
3397
3398 exe = executable(
3399 'test_uuid_parser',
3400 'libuuid/src/test_uuid.c',
3401 include_directories : [dir_include, dir_libuuid],
3402 link_with : lib_uuid,
3403 dependencies : socket_libs,
3404 build_by_default: program_tests)
3405 if not is_disabler(exe)
3406 exes += exe
3407 endif
3408
3409 ############################################################
3410
3411 libfdisk_tests_cflags = ['-DTEST_PROGRAM']
3412 libfdisk_tests_ldadd = [lib_fdisk_static, lib_uuid]
3413 libfdisk_tests_ldadd_deps = [blkid_dep]
3414
3415 exe = executable(
3416 'test_fdisk_ask',
3417 'libfdisk/src/ask.c',
3418 c_args : libfdisk_tests_cflags,
3419 include_directories : lib_fdisk_includes,
3420 link_with : libfdisk_tests_ldadd,
3421 dependencies : libfdisk_tests_ldadd_deps,
3422 build_by_default: program_tests)
3423 if not is_disabler(exe)
3424 exes += exe
3425 endif
3426
3427 exe = executable(
3428 'test_fdisk_gpt',
3429 'libfdisk/src/gpt.c',
3430 c_args : libfdisk_tests_cflags,
3431 include_directories : lib_fdisk_includes,
3432 link_with : libfdisk_tests_ldadd,
3433 dependencies : libfdisk_tests_ldadd_deps,
3434 build_by_default: program_tests)
3435 if not is_disabler(exe)
3436 exes += exe
3437 endif
3438
3439 exe = executable(
3440 'test_fdisk_utils',
3441 'libfdisk/src/utils.c',
3442 c_args : libfdisk_tests_cflags,
3443 include_directories : lib_fdisk_includes,
3444 link_with : libfdisk_tests_ldadd,
3445 dependencies : libfdisk_tests_ldadd_deps,
3446 build_by_default: program_tests)
3447 if not is_disabler(exe)
3448 exes += exe
3449 endif
3450
3451 exe = executable(
3452 'test_fdisk_script',
3453 'libfdisk/src/script.c',
3454 c_args : libfdisk_tests_cflags,
3455 include_directories : lib_fdisk_includes,
3456 link_with : libfdisk_tests_ldadd,
3457 dependencies : libfdisk_tests_ldadd_deps,
3458 build_by_default: program_tests)
3459 if not is_disabler(exe)
3460 exes += exe
3461 endif
3462
3463 exe = executable(
3464 'test_fdisk_version',
3465 'libfdisk/src/version.c',
3466 c_args : libfdisk_tests_cflags,
3467 include_directories : lib_fdisk_includes,
3468 link_with : libfdisk_tests_ldadd,
3469 dependencies : libfdisk_tests_ldadd_deps,
3470 build_by_default: program_tests)
3471 if not is_disabler(exe)
3472 exes += exe
3473 endif
3474
3475 exe = executable(
3476 'test_fdisk_item',
3477 'libfdisk/src/item.c',
3478 c_args : libfdisk_tests_cflags,
3479 include_directories : lib_fdisk_includes,
3480 link_with : libfdisk_tests_ldadd,
3481 dependencies : libfdisk_tests_ldadd_deps,
3482 build_by_default: program_tests)
3483 if not is_disabler(exe)
3484 exes += exe
3485 endif
3486
3487 sample_fdisk_ldadd = [lib_common, lib_fdisk]
3488
3489 exe = executable(
3490 'sample-fdisk-mkpart',
3491 'libfdisk/samples/mkpart.c',
3492 include_directories : lib_fdisk_includes,
3493 link_with : sample_fdisk_ldadd)
3494 if not is_disabler(exe)
3495 exes += exe
3496 endif
3497
3498 exe = executable(
3499 'sample-fdisk-mkpart-fullspec',
3500 'libfdisk/samples/mkpart-fullspec.c',
3501 include_directories : lib_fdisk_includes,
3502 link_with : sample_fdisk_ldadd)
3503 if not is_disabler(exe)
3504 exes += exe
3505 endif
3506
3507 ############################################################
3508
3509 exe = executable(
3510 'test_cap',
3511 'tests/helpers/test_cap.c',
3512 include_directories : includes,
3513 dependencies : [lib_cap_ng],
3514 build_by_default: program_tests)
3515 if not is_disabler(exe)
3516 exes += exe
3517 endif
3518
3519 exe = executable(
3520 'test_mbsencode',
3521 'tests/helpers/test_mbsencode.c',
3522 include_directories : includes,
3523 link_with : lib_common,
3524 build_by_default: program_tests)
3525 exes += exe
3526
3527 exe = executable(
3528 'test_byteswap',
3529 'tests/helpers/test_byteswap.c',
3530 include_directories : includes,
3531 build_by_default: program_tests)
3532 exes += exe
3533
3534 exe = executable(
3535 'test_md5',
3536 'tests/helpers/test_md5.c',
3537 md5_c,
3538 include_directories : includes,
3539 build_by_default: program_tests)
3540 exes += exe
3541
3542 exe = executable(
3543 'test_sha1',
3544 'tests/helpers/test_sha1.c',
3545 sha1_c,
3546 include_directories : includes,
3547 build_by_default: program_tests)
3548 exes += exe
3549
3550 exe = executable(
3551 'test_pathnames',
3552 'tests/helpers/test_pathnames.c',
3553 include_directories : includes,
3554 build_by_default: program_tests)
3555 exes += exe
3556
3557 exe = executable(
3558 'test_strerror',
3559 'tests/helpers/test_strerror.c',
3560 include_directories : includes,
3561 build_by_default: program_tests)
3562 exes += exe
3563
3564 exe = executable(
3565 'test_sysinfo',
3566 'tests/helpers/test_sysinfo.c',
3567 include_directories : includes,
3568 build_by_default: program_tests)
3569 exes += exe
3570
3571 exe = executable(
3572 'test_sigreceive',
3573 'tests/helpers/test_sigreceive.c',
3574 include_directories : includes,
3575 link_with : lib_common,
3576 build_by_default: program_tests)
3577 exes += exe
3578
3579 exe = executable(
3580 'test_tiocsti',
3581 'tests/helpers/test_tiocsti.c',
3582 include_directories : includes,
3583 build_by_default: program_tests)
3584 exes += exe
3585
3586 exe = executable(
3587 'test_uuid_namespace',
3588 'tests/helpers/test_uuid_namespace.c',
3589 predefined_c,
3590 unpack_c,
3591 unparse_c,
3592 include_directories : includes,
3593 build_by_default: program_tests)
3594 exes += exe
3595
3596 if LINUX and lib_rt.found()
3597 exe = executable(
3598 'test_mkfds',
3599 'tests/helpers/test_mkfds.c',
3600 'tests/helpers/test_mkfds.h',
3601 'tests/helpers/test_mkfds_ppoll.c',
3602 include_directories : includes,
3603 dependencies : [lib_rt],
3604 build_by_default: program_tests)
3605 exes += exe
3606 endif
3607
3608 exe = executable(
3609 'test_enosys',
3610 'tests/helpers/test_enosys.c',
3611 include_directories : includes,
3612 build_by_default: program_tests)
3613 exes += exe
3614
3615 ############################################################
3616
3617 if conf.get('HAVE_OPENAT').to_string() == '1'
3618 exe = executable(
3619 'sample-scols-tree',
3620 'libsmartcols/samples/tree.c',
3621 include_directories : includes,
3622 link_with : [lib_smartcols, lib_common],
3623 build_by_default: program_tests)
3624 if not is_disabler(exe)
3625 exes += exe
3626 endif
3627 endif
3628
3629 exe = executable(
3630 'sample-scols-title',
3631 'libsmartcols/samples/title.c',
3632 include_directories : includes,
3633 link_with : [lib_smartcols, lib_common])
3634 if not is_disabler(exe)
3635 exes += exe
3636 endif
3637
3638 exe = executable(
3639 'sample-scols-wrap',
3640 'libsmartcols/samples/wrap.c',
3641 include_directories : includes,
3642 link_with : [lib_smartcols, lib_common])
3643 if not is_disabler(exe)
3644 exes += exe
3645 endif
3646
3647 exe = executable(
3648 'sample-scols-continuous',
3649 'libsmartcols/samples/continuous.c',
3650 include_directories : includes,
3651 link_with : [lib_smartcols, lib_common])
3652 if not is_disabler(exe)
3653 exes += exe
3654 endif
3655
3656 exe = executable(
3657 'sample-scols-continuous-json',
3658 'libsmartcols/samples/continuous-json.c',
3659 include_directories : includes,
3660 link_with : [lib_smartcols, lib_common])
3661 if not is_disabler(exe)
3662 exes += exe
3663 endif
3664
3665 exe = executable(
3666 'sample-scols-maxout',
3667 'libsmartcols/samples/maxout.c',
3668 include_directories : includes,
3669 link_with : [lib_smartcols, lib_common])
3670 if not is_disabler(exe)
3671 exes += exe
3672 endif
3673
3674 exe = executable(
3675 'sample-scols-fromfile',
3676 'libsmartcols/samples/fromfile.c',
3677 include_directories : includes,
3678 link_with : [lib_smartcols, lib_common])
3679 if not is_disabler(exe)
3680 exes += exe
3681 endif
3682
3683 exe = executable(
3684 'sample-scols-grouping-simple',
3685 'libsmartcols/samples/grouping-simple.c',
3686 include_directories : includes,
3687 link_with : [lib_smartcols, lib_common])
3688 if not is_disabler(exe)
3689 exes += exe
3690 endif
3691
3692 exe = executable(
3693 'sample-scols-grouping-overlay',
3694 'libsmartcols/samples/grouping-overlay.c',
3695 include_directories : includes,
3696 link_with : [lib_smartcols, lib_common])
3697 if not is_disabler(exe)
3698 exes += exe
3699 endif
3700
3701 exe = executable(
3702 'test_boilerplate',
3703 'Documentation/boilerplate.c',
3704 include_directories : includes,
3705 build_by_default: program_tests)
3706 if not is_disabler(exe)
3707 exes += exe
3708 endif
3709
3710 ############################################################
3711
3712 # Let the test runner know whether we're running under asan and export
3713 # some paths. We use a file on disk so that it is possible to run the
3714 # test scripts from commandline without setting any variables.
3715 configure_file(output : 'meson.conf',
3716 capture : true,
3717 command : ['echo',
3718 '''asan=@0@
3719 PYTHON=@1@
3720 '''.format(get_option('b_sanitize')=='address' ? 'yes' : '',
3721 python.full_path())])
3722
3723 run_sh = find_program('tests/run.sh')
3724 run_target(
3725 'check',
3726 command : [run_sh,
3727 '--srcdir=' + meson.current_source_dir(),
3728 '--builddir=' + meson.current_build_dir(),
3729 '--parallel',
3730 '--nonroot'],
3731 depends : exes)
3732
3733
3734 manadocs += ['lib/terminal-colors.d.5.adoc']
3735 manadocs += ['libblkid/libblkid.3.adoc']
3736
3737 if build_libuuid
3738 manadocs += [
3739 'libuuid/man/uuid.3.adoc',
3740 'libuuid/man/uuid_clear.3.adoc',
3741 'libuuid/man/uuid_compare.3.adoc',
3742 'libuuid/man/uuid_copy.3.adoc',
3743 'libuuid/man/uuid_generate.3.adoc',
3744 'libuuid/man/uuid_is_null.3.adoc',
3745 'libuuid/man/uuid_parse.3.adoc',
3746 'libuuid/man/uuid_time.3.adoc',
3747 'libuuid/man/uuid_unparse.3.adoc']
3748 manlinks += {
3749 'uuid_generate_random.3': 'uuid_generate.3',
3750 'uuid_generate_time.3': 'uuid_generate.3',
3751 'uuid_generate_time_safe.3': 'uuid_generate.3',
3752 }
3753 endif
3754
3755 asciidoctor = find_program('asciidoctor', required : false)
3756 if asciidoctor.found()
3757 foreach adoc : manadocs
3758 name = adoc.split('/')[-1]
3759 page = name.split('.adoc')[0]
3760 section = page.split('.')[-1]
3761 mandirn = join_paths(mandir, 'man' + section)
3762 input = adoc
3763
3764 custom_target(
3765 page,
3766 command : [ asciidoctor,
3767 '-b', 'manpage',
3768 '-a', 'VERSION=' + meson.project_version(),
3769 '-a', 'release-version=' + meson.project_version(),
3770 '-a', 'ADJTIME_PATH=/etc/adjtime',
3771 '-a', 'package-docdir=' + docdir,
3772 '--base-dir=' + meson.current_source_dir(),
3773 '--destination-dir=' + meson.current_build_dir(),
3774 '--load-path', '@SOURCE_ROOT@/tools',
3775 '--require', 'asciidoctor-includetracker',
3776 '@INPUT@'],
3777 input : input,
3778 output : [page],
3779 depfile : page + '.deps',
3780 install: true,
3781 install_dir : mandirn)
3782 endforeach
3783
3784 foreach link_name, target : manlinks
3785 link_section = link_name.split('.')[-1]
3786 target_section = target.split('.')[-1]
3787 meson.add_install_script(meson_make_manpage_stub,
3788 join_paths('man' + target_section, target),
3789 join_paths(mandir, 'man' + link_section, link_name))
3790 endforeach
3791 endif
3792
3793 if bash_completion.found()
3794 foreach completion : bashcompletions
3795 install_data(
3796 join_paths('bash-completion', completion),
3797 install_dir : bash_completion.get_variable(pkgconfig : 'completionsdir')
3798 )
3799 endforeach
3800 foreach link_name, target : bashcompletionslinks
3801 meson.add_install_script(meson_make_symlink,
3802 target,
3803 join_paths(bash_completion.get_variable(pkgconfig : 'completionsdir'), link_name))
3804 endforeach
3805 endif