]> git.ipfire.org Git - thirdparty/util-linux.git/blob - meson.build
meson: Add build-dmesg 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 prefixdir.startswith('/')
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 if cc.has_header('linux/blkzoned.h')
1601 exe = executable(
1602 'blkzone',
1603 blkzone_sources,
1604 include_directories : includes,
1605 link_with : [lib_common],
1606 install_dir : sbindir,
1607 install : true)
1608 exes += exe
1609 manadocs += ['sys-utils/blkzone.8.adoc']
1610 bashcompletions += ['blkzone']
1611 endif
1612
1613 if cc.has_header('linux/pr.h')
1614 exe = executable(
1615 'blkpr',
1616 blkpr_sources,
1617 include_directories : includes,
1618 link_with : [lib_common],
1619 install_dir : sbindir,
1620 install : true)
1621 exes += exe
1622 manadocs += ['sys-utils/blkpr.8.adoc']
1623 endif
1624
1625 exe = executable(
1626 'ldattach',
1627 ldattach_sources,
1628 include_directories : includes,
1629 link_with : [lib_common],
1630 install_dir : usrsbin_exec_dir,
1631 install : true)
1632 exes += exe
1633 manadocs += ['sys-utils/ldattach.8.adoc']
1634 bashcompletions += ['ldattach']
1635
1636 exe = executable(
1637 'rtcwake',
1638 rtcwake_sources,
1639 include_directories : includes,
1640 link_with : [lib_common],
1641 install_dir : usrsbin_exec_dir,
1642 install : true)
1643 exes += exe
1644 manadocs += ['sys-utils/rtcwake.8.adoc']
1645 bashcompletions += ['rtcwake']
1646
1647 exe = executable(
1648 'setarch',
1649 setarch_sources,
1650 include_directories : includes,
1651 link_with : [lib_common],
1652 install_dir : usrbin_exec_dir,
1653 install : true)
1654 exes += exe
1655 manadocs += ['sys-utils/setarch.8.adoc']
1656 bashcompletions += ['setarch']
1657
1658 setarch_links = ['uname26', 'linux32', 'linux64']
1659 setarch_links_arch = {
1660 's390x' : ['s390', 's390x'],
1661 'x86' : ['i386'],
1662 'x86_64' : ['i386', 'x86_64'],
1663 'ppc64' : ['ppc', 'ppc64', 'ppc32'],
1664 'space64' : ['sparc', 'sparc64', 'sparc32', 'sparc32bash'],
1665 'mips64' : ['mips', 'mips64', 'mips32'],
1666 'ia64' : ['i386', 'ia64'],
1667 'hppa' : ['parisc', 'parisc64', 'parisc32'],
1668 }
1669 setarch_links += setarch_links_arch.get(host_machine.cpu_family(), [])
1670
1671 foreach link: setarch_links
1672 meson.add_install_script(meson_make_symlink,
1673 'setarch',
1674 join_paths(usrbin_exec_dir, link))
1675 manlinks += {link + '.8': 'setarch.8'}
1676 endforeach
1677
1678 opt = not get_option('build-eject').disabled()
1679 exe = executable(
1680 'eject',
1681 eject_sources,
1682 include_directories : includes,
1683 link_with : [lib_common],
1684 dependencies : [mount_dep],
1685 install_dir : usrbin_exec_dir,
1686 install : opt,
1687 build_by_default : opt)
1688 if opt and not is_disabler(exe)
1689 exe = exe
1690 manadocs += ['sys-utils/eject.1.adoc']
1691 bashcompletions += ['eject']
1692 endif
1693
1694 opt = not get_option('build-losetup').disabled()
1695 exe = executable(
1696 'losetup',
1697 losetup_sources,
1698 include_directories : includes,
1699 link_with : [lib_common,
1700 lib_smartcols],
1701 install_dir : sbindir,
1702 install : opt,
1703 build_by_default : opt)
1704 if opt and not is_disabler(exe)
1705 manadocs += ['sys-utils/losetup.8.adoc']
1706 exes += exe
1707 bashcompletions += ['losetup']
1708 endif
1709
1710 opt = opt and 'losetup' in static_programs
1711 exe = executable(
1712 'losetup.static',
1713 losetup_sources,
1714 include_directories : includes,
1715 link_args : ['--static'],
1716 link_with : [lib_common,
1717 lib_smartcols.get_static_lib()],
1718 install_dir : sbindir,
1719 install : opt,
1720 build_by_default : opt)
1721 if opt and not is_disabler(exe)
1722 exes += exe
1723 endif
1724
1725 opt = not get_option('build-zramctl').disabled()
1726 exe = executable(
1727 'zramctl',
1728 zramctl_sources,
1729 include_directories : includes,
1730 link_with : [lib_common,
1731 lib_smartcols],
1732 install_dir : sbindir,
1733 install : opt,
1734 build_by_default : opt)
1735 if opt and not is_disabler(exe)
1736 exes += exe
1737 manadocs += ['sys-utils/zramctl.8.adoc']
1738 bashcompletions += ['zramctl']
1739 endif
1740
1741 exe = executable(
1742 'prlimit',
1743 prlimit_sources,
1744 include_directories : includes,
1745 link_with : [lib_common,
1746 lib_smartcols],
1747 install_dir : usrbin_exec_dir,
1748 install : true)
1749 if not is_disabler(exe)
1750 exes += exe
1751 manadocs += ['sys-utils/prlimit.1.adoc']
1752 bashcompletions += ['prlimit']
1753 endif
1754
1755 opt = not get_option('build-lsns').disabled()
1756 exe = executable(
1757 'lsns',
1758 lsns_sources,
1759 include_directories : includes,
1760 link_with : [lib_common,
1761 lib_smartcols],
1762 dependencies : [mount_dep],
1763 install_dir : usrbin_exec_dir,
1764 install : opt,
1765 build_by_default : opt)
1766 if opt and not is_disabler(exe)
1767 exes += exe
1768 manadocs += ['sys-utils/lsns.8.adoc']
1769 bashcompletions += ['lsns']
1770 endif
1771
1772 opt = not get_option('build-mount').disabled()
1773 exe = executable(
1774 'mount',
1775 mount_sources,
1776 include_directories : includes,
1777 link_with : [lib_common,
1778 lib_smartcols],
1779 dependencies : [lib_selinux, mount_dep],
1780 install_mode : 'rwsr-xr-x',
1781 install : opt,
1782 build_by_default : opt)
1783 exe2 = executable(
1784 'umount',
1785 umount_sources,
1786 include_directories : includes,
1787 link_with : [lib_common],
1788 dependencies : [mount_dep],
1789 install_mode : 'rwsr-xr-x',
1790 install : opt,
1791 build_by_default : opt)
1792 if opt and not is_disabler(exe)
1793 exes += [exe, exe2]
1794 manadocs += ['sys-utils/fstab.5.adoc',
1795 'sys-utils/mount.8.adoc',
1796 'sys-utils/umount.8.adoc']
1797 bashcompletions += ['mount', 'umount']
1798 endif
1799
1800 opt2 = opt and 'mount' in static_programs
1801 exe = executable(
1802 'mount.static',
1803 mount_sources,
1804 include_directories : includes,
1805 link_args : ['--static'],
1806 link_with : [lib_common,
1807 lib_smartcols_static],
1808 dependencies : [mount_static_dep],
1809 install : opt2,
1810 build_by_default : opt2)
1811 if opt2 and not is_disabler(exe)
1812 exes += exe
1813 endif
1814
1815 opt2 = opt and 'umount' in static_programs
1816 exe = executable(
1817 'umount.static',
1818 umount_sources,
1819 include_directories : includes,
1820 link_args : ['--static'],
1821 link_with : [lib_common],
1822 dependencies : [mount_static_dep],
1823 install : opt2,
1824 build_by_default : opt2)
1825 if opt2 and not is_disabler(exe)
1826 exes += exe
1827 endif
1828
1829 # setuid?
1830
1831 opt = not get_option('build-swapon').disabled()
1832 exe = executable(
1833 'swapon',
1834 swapon_sources,
1835 include_directories : includes,
1836 link_with : [lib_common,
1837 lib_smartcols],
1838 dependencies : [blkid_dep, mount_dep],
1839 install_dir : sbindir,
1840 install : opt,
1841 build_by_default : opt)
1842 if opt and not is_disabler(exe)
1843 exes += exe
1844 manadocs += ['sys-utils/swapon.8.adoc']
1845 bashcompletions += ['swapon']
1846 endif
1847
1848 opt = not get_option('build-swapoff').disabled()
1849 exe = executable(
1850 'swapoff',
1851 swapoff_sources,
1852 include_directories : includes,
1853 link_with : [lib_common],
1854 dependencies : [blkid_dep, mount_dep],
1855 install_dir : sbindir,
1856 install : opt,
1857 build_by_default : opt)
1858 if opt and not is_disabler(exe)
1859 exes += exe
1860 manlinks += {'swapoff.8': 'swapon.8'}
1861 bashcompletions += ['swapoff']
1862 endif
1863
1864 exe = executable(
1865 'lscpu',
1866 lscpu_sources,
1867 include_directories : includes,
1868 link_with : [lib_common,
1869 lib_smartcols],
1870 dependencies : [rtas_libs],
1871 install_dir : usrbin_exec_dir,
1872 install : true)
1873 if not is_disabler(exe)
1874 exes += exe
1875 manadocs += ['sys-utils/lscpu.1.adoc']
1876 bashcompletions += ['lscpu']
1877 endif
1878
1879 exe = executable(
1880 'chcpu',
1881 chcpu_sources,
1882 include_directories : includes,
1883 link_with : [lib_common],
1884 install_dir : sbindir,
1885 install : true)
1886 exes += exe
1887 manadocs += ['sys-utils/chcpu.8.adoc']
1888 bashcompletions += ['chcpu']
1889
1890 exe = executable(
1891 'wdctl',
1892 wdctl_sources,
1893 include_directories : includes,
1894 link_with : [lib_common,
1895 lib_smartcols],
1896 install : true)
1897 if not is_disabler(exe)
1898 exes += exe
1899 manadocs += ['sys-utils/wdctl.8.adoc']
1900 bashcompletions += ['wdctl']
1901 endif
1902
1903 opt = not get_option('build-mountpoint').disabled()
1904 exe = executable(
1905 'mountpoint',
1906 mountpoint_sources,
1907 include_directories : includes,
1908 dependencies : [mount_dep],
1909 install : opt,
1910 build_by_default : opt)
1911 if opt and not is_disabler(exe)
1912 exes += exe
1913 manadocs += ['sys-utils/mountpoint.1.adoc']
1914 bashcompletions += ['mountpoint']
1915 endif
1916
1917 opt = not get_option('build-fallocate').disabled()
1918 exe = executable(
1919 'fallocate',
1920 fallocate_sources,
1921 include_directories : includes,
1922 link_with : [lib_common],
1923 install_dir : usrbin_exec_dir,
1924 install : opt,
1925 build_by_default : opt)
1926 if opt and not is_disabler(exe)
1927 exes += exe
1928 manadocs += ['sys-utils/fallocate.1.adoc']
1929 bashcompletions += ['fallocate']
1930 endif
1931
1932 opt = not get_option('build-pivot_root').disabled()
1933 exe = executable(
1934 'pivot_root',
1935 pivot_root_sources,
1936 include_directories : includes,
1937 install_dir : sbindir,
1938 install : opt,
1939 build_by_default : opt)
1940 if opt and not is_disabler(exe)
1941 exes += exe
1942 manadocs += ['sys-utils/pivot_root.8.adoc']
1943 bashcompletions += ['pivot_root']
1944 endif
1945
1946 opt = not get_option('build-switch_root').disabled()
1947 if opt and not have_dirfd and not have_ddfd
1948 error('neither dirfd nor ddfd are available')
1949 endif
1950 exe = executable(
1951 'switch_root',
1952 switch_root_sources,
1953 include_directories : includes,
1954 install_dir : sbindir,
1955 install : opt,
1956 build_by_default : opt)
1957 if opt and not is_disabler(exe)
1958 exes += exe
1959 manadocs += ['sys-utils/switch_root.8.adoc']
1960 endif
1961
1962 opt = not get_option('build-unshare').disabled()
1963 exe = executable(
1964 'unshare',
1965 unshare_sources,
1966 include_directories : includes,
1967 link_with : [lib_common],
1968 dependencies : [mount_dep],
1969 install_dir : usrbin_exec_dir,
1970 install : opt,
1971 build_by_default : opt)
1972 if opt and not is_disabler(exe)
1973 exes += exe
1974 manadocs += ['sys-utils/unshare.1.adoc']
1975 bashcompletions += ['unshare']
1976 endif
1977
1978 opt = opt and 'unshare' in static_programs
1979 exe = executable(
1980 'unshare.static',
1981 unshare_sources,
1982 include_directories : includes,
1983 link_with : [lib_common],
1984 dependencies : [mount_dep],
1985 install_dir : usrbin_exec_dir,
1986 install : opt,
1987 build_by_default : opt)
1988 if opt and not is_disabler(exe)
1989 exes += exe
1990 endif
1991
1992 opt = not get_option('build-nsenter').disabled()
1993 exe = executable(
1994 'nsenter',
1995 nsenter_sources,
1996 include_directories : includes,
1997 link_with : [lib_common],
1998 dependencies : [lib_selinux],
1999 install_dir : usrbin_exec_dir,
2000 install : opt,
2001 build_by_default : opt)
2002 if opt and not is_disabler(exe)
2003 exes += exe
2004 manadocs += ['sys-utils/nsenter.1.adoc']
2005 bashcompletions += ['nsenter']
2006 endif
2007
2008 opt = opt and 'nsenter' in static_programs
2009 exe = executable(
2010 'nsenter.static',
2011 nsenter_sources,
2012 include_directories : includes,
2013 link_with : [lib_common],
2014 dependencies : [lib_selinux],
2015 install_dir : usrbin_exec_dir,
2016 install : opt,
2017 build_by_default : opt)
2018 if opt and not is_disabler(exe)
2019 exes += exe
2020 endif
2021
2022 opt = not get_option('build-setpriv').disabled() and lib_cap_ng.found()
2023 exe = executable(
2024 'setpriv',
2025 setpriv_sources,
2026 include_directories : includes,
2027 link_with : [lib_common],
2028 dependencies : [lib_cap_ng],
2029 install_dir : usrbin_exec_dir,
2030 install : opt,
2031 build_by_default : opt)
2032 if opt and not is_disabler(exe)
2033 exes += exe
2034 manadocs += ['sys-utils/setpriv.1.adoc']
2035 bashcompletions += ['setpriv']
2036 endif
2037
2038 exe = executable(
2039 'flock',
2040 flock_sources,
2041 include_directories : includes,
2042 link_with : [lib_common],
2043 dependencies : realtime_libs,
2044 install_dir : usrbin_exec_dir,
2045 install : true)
2046 exes += exe
2047 manadocs += ['sys-utils/flock.1.adoc']
2048 bashcompletions += ['flock']
2049
2050 opt = not get_option('build-lsirq').disabled()
2051 exe = executable(
2052 'lsirq',
2053 lsirq_sources,
2054 include_directories : includes,
2055 link_with : [lib_common,
2056 lib_smartcols],
2057 install_dir : usrbin_exec_dir,
2058 install : opt,
2059 build_by_default : opt)
2060 if opt and not is_disabler(exe)
2061 exes += exe
2062 manadocs += ['sys-utils/lsirq.1.adoc']
2063 bashcompletions += ['lsirq']
2064 endif
2065
2066 opt = not get_option('build-irqtop').disabled()
2067 exe = executable(
2068 'irqtop',
2069 irqtop_sources,
2070 include_directories : includes,
2071 dependencies : [realtime_libs, curses_libs],
2072 link_with : [lib_common,
2073 lib_smartcols,
2074 lib_tcolors],
2075 install_dir : usrbin_exec_dir,
2076 install : opt,
2077 build_by_default : opt)
2078 if opt and not is_disabler(exe)
2079 exes += exe
2080 manadocs += ['sys-utils/irqtop.1.adoc']
2081 bashcompletions += ['irqtop']
2082 endif
2083
2084 opt = not get_option('build-ipcs').disabled()
2085 exe = executable(
2086 'lsipc',
2087 lsipc_sources,
2088 include_directories : includes,
2089 link_with : [lib_common,
2090 lib_smartcols],
2091 install_dir : usrbin_exec_dir,
2092 install : opt,
2093 build_by_default : opt)
2094 if opt and not is_disabler(exe)
2095 exes += exe
2096 manadocs += ['sys-utils/lsipc.1.adoc']
2097 bashcompletions += ['lsipc']
2098 endif
2099
2100 opt = build_hwclock
2101 exe = executable(
2102 'hwclock',
2103 hwclock_sources,
2104 include_directories : includes,
2105 link_with : [lib_common],
2106 dependencies : [lib_m,
2107 lib_audit],
2108 install_dir : sbindir,
2109 install : opt,
2110 build_by_default : opt)
2111 if opt and not is_disabler(exe)
2112 exes += exe
2113 manadocs += ['sys-utils/hwclock.8.adoc', 'sys-utils/adjtime_config.5.adoc']
2114 bashcompletions += ['hwclock']
2115 endif
2116
2117 exe = executable(
2118 'mkfs',
2119 mkfs_sources,
2120 include_directories : includes,
2121 install_dir : sbindir,
2122 install : true)
2123 exes += exe
2124 manadocs += ['disk-utils/mkfs.8.adoc']
2125 bashcompletions += ['mkfs']
2126
2127 opt = not get_option('build-bfs').disabled()
2128 exe = executable(
2129 'mkfs.bfs',
2130 mkfs_bfs_sources,
2131 include_directories : includes,
2132 link_with : [lib_common],
2133 install_dir : sbindir,
2134 install : opt,
2135 build_by_default : opt)
2136 if opt and not is_disabler(exe)
2137 exes += exe
2138 manadocs += ['disk-utils/mkfs.bfs.8.adoc']
2139 bashcompletions += ['mkfs.bfs']
2140 endif
2141
2142 exe = executable(
2143 'isosize',
2144 isosize_sources,
2145 include_directories : includes,
2146 link_with : [lib_common],
2147 install_dir : usrbin_exec_dir,
2148 install : true)
2149 exes += exe
2150 manadocs += ['disk-utils/isosize.8.adoc']
2151 bashcompletions += ['isosize']
2152
2153 exe = executable(
2154 'mkswap',
2155 mkswap_sources,
2156 include_directories : includes,
2157 link_with : [lib_common,
2158 lib_uuid],
2159 dependencies: [blkid_dep, lib_selinux],
2160 install_dir : sbindir,
2161 install : true)
2162 if not is_disabler(exe)
2163 exes += exe
2164 manadocs += ['disk-utils/mkswap.8.adoc']
2165 bashcompletions += ['mkswap']
2166 endif
2167
2168 exe = executable(
2169 'swaplabel',
2170 swaplabel_sources,
2171 include_directories : includes,
2172 link_with : [lib_common,
2173 lib_uuid],
2174 dependencies : [blkid_dep],
2175 install_dir : sbindir,
2176 install : true)
2177 if not is_disabler(exe)
2178 exes += exe
2179 manadocs += ['disk-utils/swaplabel.8.adoc']
2180 bashcompletions += ['swaplabel']
2181 endif
2182
2183 opt = not get_option('build-fsck').disabled()
2184 exe = executable(
2185 'fsck',
2186 fsck_sources,
2187 include_directories : includes,
2188 link_with : [lib_common],
2189 dependencies : [blkid_dep, mount_dep, realtime_libs],
2190 install_dir : sbindir,
2191 install : opt,
2192 build_by_default : opt)
2193 if opt and not is_disabler(exe)
2194 exes += exe
2195 manadocs += ['disk-utils/fsck.8.adoc']
2196 bashcompletions += ['fsck']
2197 endif
2198
2199 opt = not get_option('build-minix').disabled()
2200 exe = executable(
2201 'mkfs.minix',
2202 mkfs_minix_sources,
2203 include_directories : includes,
2204 link_with : [lib_common],
2205 install_dir : sbindir,
2206 install : opt,
2207 build_by_default : opt)
2208 exe2 = executable(
2209 'test_mkfs_minix',
2210 mkfs_minix_sources,
2211 include_directories : includes,
2212 c_args : '-DTEST_SCRIPT',
2213 link_with : [lib_common],
2214 build_by_default : opt and program_tests)
2215 exe3 = executable(
2216 'fsck.minix',
2217 fsck_minix_sources,
2218 include_directories : includes,
2219 link_with : [lib_common],
2220 install_dir : sbindir,
2221 install : opt,
2222 build_by_default : opt)
2223 if opt and not is_disabler(exe)
2224 exes += [exe, exe2, exe3]
2225 manadocs += ['disk-utils/mkfs.minix.8.adoc','disk-utils/fsck.minix.8.adoc']
2226 bashcompletions += ['mkfs.minix', 'fsck.minix']
2227 endif
2228
2229 opt = not get_option('build-cramfs').disabled()
2230 exe = executable(
2231 'mkfs.cramfs',
2232 mkfs_cramfs_sources,
2233 include_directories : includes,
2234 link_with : [lib_common],
2235 dependencies : [lib_z],
2236 install_dir : sbindir,
2237 install : opt,
2238 build_by_default : opt)
2239 exe2 = executable(
2240 'fsck.cramfs',
2241 fsck_cramfs_sources,
2242 include_directories : includes,
2243 link_with : [lib_common],
2244 dependencies : [lib_z],
2245 install_dir : sbindir,
2246 install : opt,
2247 build_by_default : opt)
2248 if not is_disabler(exe)
2249 exes += [exe, exe2]
2250 manadocs += ['disk-utils/mkfs.cramfs.8.adoc','disk-utils/fsck.cramfs.8.adoc']
2251 bashcompletions += ['mkfs.cramfs', 'fsck.cramfs']
2252 endif
2253
2254 opt = not get_option('build-raw').disabled()
2255 if opt
2256 cc.has_header('linux/raw.h', required: opt)
2257 endif
2258 exe = executable(
2259 'raw',
2260 raw_sources,
2261 include_directories : includes,
2262 install_dir : sbindir,
2263 install : opt,
2264 build_by_default : opt)
2265 if opt and not is_disabler(exe)
2266 exes += exe
2267 manadocs += ['disk-utils/raw.8.adoc']
2268 bashcompletions += ['raw']
2269 endif
2270
2271 opt = not get_option('build-fdformat').disabled()
2272 exe = executable(
2273 'fdformat',
2274 fdformat_sources,
2275 include_directories : includes,
2276 link_with : [lib_common],
2277 install_dir : usrsbin_exec_dir,
2278 install : opt,
2279 build_by_default : opt)
2280 if opt and not is_disabler(exe)
2281 exes += exe
2282 manadocs += ['disk-utils/fdformat.8.adoc']
2283 bashcompletions += ['fdformat']
2284 endif
2285
2286 exe = executable(
2287 'blockdev',
2288 blockdev_sources,
2289 include_directories : includes,
2290 link_with : [lib_common],
2291 install_dir : sbindir,
2292 install : true)
2293 manadocs += ['disk-utils/blockdev.8.adoc']
2294 bashcompletions += ['blockdev']
2295
2296 opt = not get_option('build-fdisks').disabled()
2297 if opt and not have_dirfd and not have_ddfd
2298 error('neither dirfd nor ddfd are available')
2299 endif
2300 exe = executable(
2301 'fdisk',
2302 fdisk_sources,
2303 include_directories : includes,
2304 link_with : [lib_common,
2305 lib_fdisk,
2306 lib_smartcols,
2307 lib_tcolors],
2308 dependencies : [lib_readline],
2309 install_dir : sbindir,
2310 install : opt,
2311 build_by_default : opt)
2312 if opt and not is_disabler(exe)
2313 exes += exe
2314 bashcompletions += ['fdisk']
2315 endif
2316
2317 opt2 = opt and 'fdisk' in static_programs
2318 exe = executable(
2319 'fdisk.static',
2320 fdisk_sources,
2321 link_args : ['--static'],
2322 include_directories : includes,
2323 link_with : [lib_common,
2324 lib_tcolors,
2325 lib_fdisk_static,
2326 lib_smartcols.get_static_lib()],
2327 dependencies : [lib_readline_static],
2328 install_dir : sbindir,
2329 install : opt2,
2330 build_by_default : opt2)
2331 if opt2 and not is_disabler(exe)
2332 exes += exe
2333 endif
2334
2335 exe = executable(
2336 'sfdisk',
2337 sfdisk_sources,
2338 include_directories : includes,
2339 link_with : [lib_common,
2340 lib_fdisk,
2341 lib_smartcols,
2342 lib_tcolors],
2343 dependencies : [lib_readline],
2344 install_dir : sbindir,
2345 install : opt,
2346 build_by_default : opt)
2347 if opt and not is_disabler(exe)
2348 exes += exe
2349 bashcompletions += ['sfdisk']
2350 endif
2351
2352 opt2 = opt and 'sfdisk' in static_programs
2353 exe = executable(
2354 'sfdisk.static',
2355 sfdisk_sources,
2356 include_directories : includes,
2357 link_with : [lib_common,
2358 lib_tcolors,
2359 lib_fdisk_static,
2360 lib_smartcols.get_static_lib()],
2361 dependencies : [lib_readline_static],
2362 install_dir : sbindir,
2363 install : opt2,
2364 build_by_default : opt2)
2365 if opt2 and not is_disabler(exe)
2366 exes += exe
2367 endif
2368
2369 exe = executable(
2370 'cfdisk',
2371 cfdisk_sources,
2372 include_directories : includes,
2373 link_with : [lib_common,
2374 lib_fdisk,
2375 lib_smartcols,
2376 lib_tcolors],
2377 dependencies : [curses_libs, mount_dep],
2378 install_dir : sbindir,
2379 install : opt,
2380 build_by_default : opt)
2381 if opt and not is_disabler(exe)
2382 exes += exe
2383 manadocs += ['disk-utils/fdisk.8.adoc',
2384 'disk-utils/sfdisk.8.adoc',
2385 'disk-utils/cfdisk.8.adoc']
2386 bashcompletions += ['cfdisk']
2387 endif
2388
2389 opt = not get_option('build-partx').disabled()
2390 exe = executable(
2391 'addpart',
2392 addpart_sources,
2393 include_directories : includes,
2394 link_with : [lib_common],
2395 install_dir : usrsbin_exec_dir,
2396 install : opt,
2397 build_by_default : opt)
2398 exe2 = executable(
2399 'delpart',
2400 delpart_sources,
2401 include_directories : includes,
2402 link_with : [lib_common],
2403 install_dir : usrsbin_exec_dir,
2404 install : opt,
2405 build_by_default : opt)
2406 exe3 = executable(
2407 'resizepart',
2408 resizepart_sources,
2409 include_directories : includes,
2410 link_with : [lib_common],
2411 install_dir : usrsbin_exec_dir,
2412 install : opt,
2413 build_by_default : opt)
2414 exe4 = executable(
2415 'partx',
2416 partx_sources,
2417 include_directories : includes,
2418 link_with : [lib_common,
2419 lib_smartcols],
2420 dependencies : [blkid_dep],
2421 install_dir : usrsbin_exec_dir,
2422 install : opt,
2423 build_by_default : opt)
2424 if opt
2425 exes += [exe, exe2, exe3, exe4]
2426 manadocs += ['disk-utils/addpart.8.adoc',
2427 'disk-utils/delpart.8.adoc',
2428 'disk-utils/resizepart.8.adoc',
2429 'disk-utils/partx.8.adoc']
2430 bashcompletions += ['addpart', 'delpart', 'resizepart', 'partx']
2431 endif
2432 opt = opt and 'partx' in static_programs
2433 exe = executable(
2434 'addpart.static',
2435 addpart_sources,
2436 include_directories : includes,
2437 link_args : ['--static'],
2438 link_with : [lib_common],
2439 install_dir : usrsbin_exec_dir,
2440 install : opt,
2441 build_by_default : opt)
2442 exe2 = executable(
2443 'delpart.static',
2444 delpart_sources,
2445 include_directories : includes,
2446 link_args : ['--static'],
2447 link_with : [lib_common],
2448 install_dir : usrsbin_exec_dir,
2449 install : opt,
2450 build_by_default : opt)
2451 exe3 = executable(
2452 'resizepart.static',
2453 resizepart_sources,
2454 include_directories : includes,
2455 link_args : ['--static'],
2456 link_with : [lib_common],
2457 install_dir : usrsbin_exec_dir,
2458 install : opt,
2459 build_by_default : opt)
2460 exe4 = executable(
2461 'partx.static',
2462 partx_sources,
2463 include_directories : includes,
2464 link_args : ['--static'],
2465 link_with : [lib_common,
2466 lib_smartcols.get_static_lib()],
2467 dependencies : [blkid_static_dep],
2468 install_dir : usrsbin_exec_dir,
2469 install : opt,
2470 build_by_default : opt)
2471
2472 if opt
2473 exes += [exe, exe2, exe3, exe4]
2474 endif
2475
2476 ############################################################
2477
2478 exe = executable(
2479 'script',
2480 script_sources,
2481 include_directories : includes,
2482 link_with : [lib_common],
2483 dependencies : [lib_util,
2484 lib_utempter,
2485 realtime_libs,
2486 math_libs],
2487 install_dir : usrbin_exec_dir,
2488 install : true)
2489 exes += exe
2490 manadocs += ['term-utils/script.1.adoc']
2491 bashcompletions += ['script']
2492
2493 exe = executable(
2494 'test_script',
2495 script_sources,
2496 include_directories : includes,
2497 c_args : '-DTEST_SCRIPT',
2498 link_with : [lib_common],
2499 dependencies : [lib_util,
2500 lib_utempter,
2501 realtime_libs,
2502 math_libs],
2503 build_by_default : program_tests)
2504 exes += exe
2505
2506 exe = executable(
2507 'scriptlive',
2508 scriptlive_sources,
2509 include_directories : includes,
2510 link_with : [lib_common],
2511 dependencies : [lib_util,
2512 realtime_libs,
2513 math_libs],
2514 install_dir : usrbin_exec_dir,
2515 install : true)
2516 exes += exe
2517 manadocs += ['term-utils/scriptlive.1.adoc']
2518 bashcompletions += ['scriptlive']
2519
2520 exe = executable(
2521 'scriptreplay',
2522 scriptreplay_sources,
2523 include_directories : includes,
2524 link_with : [lib_common],
2525 dependencies : [math_libs],
2526 install_dir : usrbin_exec_dir,
2527 install : true)
2528 exes += exe
2529 manadocs += ['term-utils/scriptreplay.1.adoc']
2530 bashcompletions += ['scriptreplay']
2531
2532 opt = not get_option('build-agetty').disabled()
2533 exe = executable(
2534 'agetty',
2535 agetty_sources,
2536 include_directories : includes,
2537 link_with : [lib_common, logindefs_c],
2538 dependencies : [BSD ? lib_util : [], lib_systemd],
2539 install_dir : sbindir,
2540 install : opt,
2541 build_by_default : opt)
2542 if opt
2543 exes += exe
2544 manadocs += ['term-utils/agetty.8.adoc']
2545 endif
2546
2547 opt = not get_option('build-setterm').disabled()
2548 exe = executable(
2549 'setterm',
2550 setterm_sources,
2551 include_directories : includes,
2552 link_with : [lib_common],
2553 dependencies : [curses_libs],
2554 install_dir : usrbin_exec_dir,
2555 install : opt,
2556 build_by_default : opt)
2557 if opt
2558 exes += exe
2559 manadocs += ['term-utils/setterm.1.adoc']
2560 bashcompletions += ['setterm']
2561 endif
2562
2563 opt = not get_option('build-mesg').disabled()
2564 exe = executable(
2565 'mesg',
2566 mesg_sources,
2567 include_directories : includes,
2568 link_with : [lib_common],
2569 install_dir : usrbin_exec_dir,
2570 install : opt,
2571 build_by_default : opt)
2572 if opt
2573 exes += exe
2574 manadocs += ['term-utils/mesg.1.adoc']
2575 bashcompletions += ['mesg']
2576 endif
2577
2578 opt = not get_option('build-wall').disabled()
2579 exe = executable(
2580 'wall',
2581 wall_sources,
2582 include_directories : includes,
2583 link_with : [lib_common],
2584 dependencies : [lib_systemd],
2585 install_dir : usrbin_exec_dir,
2586 install_mode : [ 'rwxr-sr-x', 'root', 'tty' ],
2587 install : opt,
2588 build_by_default : opt)
2589 if opt
2590 exes += exe
2591 manadocs += ['term-utils/wall.1.adoc']
2592 bashcompletions += ['wall']
2593 endif
2594
2595 # chgrp tty $(DESTDIR)$(usrbin_execdir)/wall
2596 # chmod g+s $(DESTDIR)$(usrbin_execdir)/wall
2597
2598 opt = not get_option('build-write').disabled()
2599 exe = executable(
2600 'write',
2601 write_sources,
2602 include_directories : includes,
2603 link_with : [lib_common],
2604 dependencies : [lib_systemd],
2605 install_dir : usrbin_exec_dir,
2606 install_mode : [ 'rwxr-sr-x', 'root', 'tty' ],
2607 install : opt,
2608 build_by_default : opt)
2609 if opt
2610 exes += exe
2611 manadocs += ['term-utils/write.1.adoc']
2612 bashcompletions += ['write']
2613 endif
2614
2615 # chgrp tty $(DESTDIR)$(usrbin_execdir)/write
2616 # chmod g+s $(DESTDIR)$(usrbin_execdir)/write
2617
2618 opt = not get_option('build-login').disabled()
2619 exe = executable(
2620 'login',
2621 login_sources,
2622 include_directories : includes,
2623 link_with : [lib_common, logindefs_c],
2624 dependencies : [lib_pam,
2625 lib_audit,
2626 lib_selinux],
2627 install : opt,
2628 build_by_default : opt)
2629 if not is_disabler(exe)
2630 exes += exe
2631 manadocs += ['login-utils/login.1.adoc']
2632 endif
2633
2634 opt = not get_option('build-sulogin').disabled()
2635 exe = executable(
2636 'sulogin',
2637 sulogin_sources,
2638 include_directories : includes,
2639 link_with : [lib_common],
2640 dependencies : [lib_crypt,
2641 lib_selinux],
2642 install_dir : sbindir,
2643 install : opt,
2644 build_by_default : opt)
2645 if not is_disabler(exe)
2646 exes += exe
2647 manadocs += ['login-utils/sulogin.8.adoc']
2648 endif
2649
2650 exe = executable(
2651 'cal',
2652 cal_sources,
2653 include_directories : includes,
2654 link_with : [lib_common,
2655 lib_tcolors],
2656 dependencies : [curses_libs],
2657 install_dir : usrbin_exec_dir,
2658 install : true)
2659 exes += exe
2660 manadocs += ['misc-utils/cal.1.adoc']
2661 bashcompletions += ['cal']
2662
2663 opt = not get_option('build-logger').disabled()
2664 exe = executable(
2665 'logger',
2666 logger_sources,
2667 include_directories : includes,
2668 link_with : [lib_common],
2669 dependencies : [lib_systemd],
2670 install_dir : usrbin_exec_dir,
2671 install : opt,
2672 build_by_default : opt)
2673 if opt and not is_disabler(exe)
2674 exes += exe
2675 manadocs += ['misc-utils/logger.1.adoc']
2676 bashcompletions += ['logger']
2677 endif
2678
2679 exe = executable(
2680 'test_logger',
2681 logger_sources,
2682 include_directories : includes,
2683 c_args : '-DTEST_LOGGER',
2684 link_with : [lib_common],
2685 dependencies : [lib_systemd],
2686 build_by_default: program_tests)
2687 if not is_disabler(exe)
2688 exes += exe
2689 endif
2690
2691 exe = executable(
2692 'look',
2693 look_sources,
2694 include_directories : includes,
2695 install_dir : usrbin_exec_dir,
2696 install : true)
2697 exes += exe
2698 manadocs += ['misc-utils/look.1.adoc']
2699 bashcompletions += ['look']
2700
2701 exe = executable(
2702 'mcookie',
2703 mcookie_sources,
2704 include_directories : includes,
2705 link_with : [lib_common],
2706 install_dir : usrbin_exec_dir,
2707 install : true)
2708 exes += exe
2709 manadocs += ['misc-utils/mcookie.1.adoc']
2710 bashcompletions += ['mcookie']
2711
2712 if build_liblastlog2
2713 exe = executable(
2714 'lastlog2',
2715 lastlog2_sources,
2716 include_directories : includes,
2717 link_with : [lib_common, lib_lastlog2],
2718 install_dir : usrbin_exec_dir,
2719 install : true)
2720 exes += exe
2721 manadocs += ['misc-utils/lastlog2.8.adoc']
2722 bashcompletions += ['lastlog2']
2723 manadocs += ['liblastlog2/man/lastlog2.3.adoc',
2724 'liblastlog2/man/ll2_write_entry.3.adoc',
2725 'liblastlog2/man/ll2_read_entry.3.adoc',
2726 'liblastlog2/man/ll2_import_lastlog.3.adoc',
2727 'liblastlog2/man/ll2_read_all.3.adoc',
2728 'liblastlog2/man/ll2_remove_entry.3.adoc',
2729 'liblastlog2/man/ll2_rename_user.3.adoc',
2730 'liblastlog2/man/ll2_update_login_time.3.adoc'
2731 ]
2732 endif
2733
2734 exe = executable(
2735 'namei',
2736 namei_sources,
2737 include_directories : includes,
2738 dependencies : [lib_selinux],
2739 install_dir : usrbin_exec_dir,
2740 install : true)
2741 exes += exe
2742 manadocs += ['misc-utils/namei.1.adoc']
2743 bashcompletions += ['namei']
2744
2745 exe = executable(
2746 'whereis',
2747 whereis_sources,
2748 include_directories : includes,
2749 link_with : [lib_common],
2750 install_dir : usrbin_exec_dir,
2751 install : true)
2752 exes += exe
2753 manadocs += ['misc-utils/whereis.1.adoc']
2754 bashcompletions += ['whereis']
2755
2756 opt = not get_option('build-lslocks').disabled()
2757 exe = executable(
2758 'lslocks',
2759 lslocks_sources,
2760 include_directories : includes,
2761 link_with : [lib_common,
2762 lib_smartcols],
2763 dependencies : [mount_dep],
2764 install_dir : usrbin_exec_dir,
2765 install : opt,
2766 build_by_default : opt)
2767 if opt and not is_disabler(exe)
2768 exes += exe
2769 manadocs += ['misc-utils/lslocks.8.adoc']
2770 bashcompletions += ['lslocks']
2771 endif
2772
2773 opt = not get_option('build-lsblk').disabled()
2774 exe = executable(
2775 'lsblk',
2776 lsblk_sources,
2777 include_directories : includes,
2778 link_with : [lib_common,
2779 lib_tcolors,
2780 lib_smartcols],
2781 dependencies : [blkid_dep, lib_udev, mount_dep],
2782 install : opt,
2783 build_by_default : opt)
2784 if opt and not is_disabler(exe)
2785 exes += exe
2786 manadocs += ['misc-utils/lsblk.8.adoc']
2787 bashcompletions += ['lsblk']
2788 endif
2789
2790 errnos_h = custom_target('errnos.h',
2791 input : 'tools/all_errnos',
2792 output : 'errnos.h',
2793 command : ['tools/all_errnos', sed.full_path(),
2794 cc.cmd_array(), get_option('c_args')],
2795 )
2796
2797 opt = not get_option('build-lsfd').require(lib_rt.found()).disabled()
2798 exe = executable(
2799 'lsfd',
2800 lsfd_sources, errnos_h,
2801 include_directories : includes,
2802 link_with : [lib_common,
2803 lib_smartcols],
2804 dependencies : [lib_rt],
2805 install_dir : usrbin_exec_dir,
2806 install : opt,
2807 build_by_default : opt)
2808 if opt and not is_disabler(exe)
2809 exes += exe
2810 manadocs += ['lsfd-cmd/lsfd.1.adoc']
2811 endif
2812
2813 exe = executable(
2814 'uuidgen',
2815 uuidgen_sources,
2816 include_directories : includes,
2817 link_with : [lib_common,
2818 lib_uuid],
2819 install_dir : usrbin_exec_dir,
2820 install : true)
2821 if not is_disabler(exe)
2822 exes += exe
2823 manadocs += ['misc-utils/uuidgen.1.adoc']
2824 bashcompletions += ['uuidgen']
2825 endif
2826
2827 exe = executable(
2828 'uuidparse',
2829 uuidparse_sources,
2830 include_directories : includes,
2831 link_with : [lib_common,
2832 lib_uuid,
2833 lib_smartcols],
2834 install_dir : usrbin_exec_dir,
2835 install : true)
2836 if not is_disabler(exe)
2837 exes += exe
2838 manadocs += ['misc-utils/uuidparse.1.adoc']
2839 bashcompletions += ['uuidparse']
2840 endif
2841
2842 opt = build_uuidd
2843 exe = executable(
2844 'uuidd',
2845 uuidd_sources,
2846 include_directories : includes,
2847 link_with : [lib_common,
2848 lib_uuid],
2849 dependencies : [realtime_libs,
2850 lib_systemd],
2851 install_dir : usrsbin_exec_dir,
2852 install : opt,
2853 build_by_default : opt)
2854 exe2 = executable(
2855 'test_uuidd',
2856 test_uuidd_sources,
2857 include_directories : includes,
2858 link_with : [lib_common,
2859 lib_uuid],
2860 dependencies : thread_libs,
2861 build_by_default : opt and program_tests)
2862 if not is_disabler(exe)
2863 exes += [exe, exe2]
2864 manadocs += ['misc-utils/uuidd.8.adoc']
2865 bashcompletions += ['uuidd']
2866 endif
2867
2868 opt = build_libblkid
2869 exe = executable(
2870 'blkid',
2871 blkid_sources,
2872 include_directories : includes,
2873 link_with : [lib_common],
2874 dependencies : [blkid_dep],
2875 install_dir : sbindir,
2876 install : opt,
2877 build_by_default : opt)
2878 if opt and not is_disabler(exe)
2879 exes += exe
2880 manadocs += ['misc-utils/blkid.8.adoc']
2881 bashcompletions += ['blkid']
2882 endif
2883
2884 opt = opt and 'blkid' in static_programs
2885 exe = executable(
2886 'blkid.static',
2887 blkid_sources,
2888 include_directories : includes,
2889 link_with : [lib_common],
2890 dependencies : [blkid_static_dep],
2891 install_dir : sbindir,
2892 install : opt,
2893 build_by_default : opt)
2894 if opt and not is_disabler(exe)
2895 exes += exe
2896 endif
2897
2898 exe = executable(
2899 'sample-mkfs',
2900 'libblkid/samples/mkfs.c',
2901 include_directories : includes,
2902 dependencies : [blkid_dep])
2903 if not is_disabler(exe)
2904 exes += exe
2905 endif
2906
2907 exe = executable(
2908 'sample-partitions',
2909 'libblkid/samples/partitions.c',
2910 include_directories : includes,
2911 dependencies : [blkid_dep])
2912 if not is_disabler(exe)
2913 exes += exe
2914 endif
2915
2916 exe = executable(
2917 'sample-superblocks',
2918 'libblkid/samples/superblocks.c',
2919 include_directories : includes,
2920 dependencies : [blkid_dep])
2921 if not is_disabler(exe)
2922 exes += exe
2923 endif
2924
2925 exe = executable(
2926 'sample-topology',
2927 'libblkid/samples/topology.c',
2928 include_directories : includes,
2929 dependencies : [blkid_dep])
2930 if not is_disabler(exe)
2931 exes += exe
2932 endif
2933
2934 exe = executable(
2935 'test_blkid_fuzz_sample',
2936 'libblkid/src/fuzz.c',
2937 include_directories: includes,
2938 dependencies : [blkid_dep],
2939 build_by_default: program_tests)
2940 if not is_disabler(exe)
2941 exes += exe
2942 endif
2943
2944 ############################################################
2945
2946 exe = executable(
2947 'findfs',
2948 findfs_sources,
2949 include_directories : includes,
2950 dependencies : [blkid_dep],
2951 install_dir : sbindir,
2952 install : true)
2953 if not is_disabler(exe)
2954 exes += exe
2955 manadocs += ['misc-utils/findfs.8.adoc']
2956 bashcompletions += ['findfs']
2957 endif
2958
2959 exe = executable(
2960 'wipefs',
2961 wipefs_sources,
2962 include_directories : includes,
2963 link_with : [lib_common,
2964 lib_smartcols],
2965 dependencies : [blkid_dep],
2966 install_dir : sbindir,
2967 install : true)
2968 if not is_disabler(exe)
2969 exes += exe
2970 manadocs += ['misc-utils/wipefs.8.adoc']
2971 bashcompletions += ['wipefs']
2972 endif
2973
2974 opt = not get_option('build-findmnt').disabled()
2975 exe = executable(
2976 'findmnt',
2977 findmnt_sources,
2978 include_directories : includes,
2979 link_with : [lib_common,
2980 lib_smartcols],
2981 dependencies : [blkid_dep, lib_udev, mount_dep],
2982 install : opt,
2983 build_by_default : opt)
2984 if opt and not is_disabler(exe)
2985 exes += exe
2986 manadocs += ['misc-utils/findmnt.8.adoc']
2987 bashcompletions += ['findmnt']
2988 endif
2989
2990 exe = executable(
2991 'kill',
2992 kill_sources,
2993 include_directories : includes,
2994 link_with : [lib_common],
2995 install : true)
2996 if not is_disabler(exe)
2997 exes += exe
2998 manadocs += ['misc-utils/kill.1.adoc']
2999 endif
3000
3001 opt = not get_option('build-rename').disabled()
3002 exe = executable(
3003 'rename',
3004 rename_sources,
3005 include_directories : includes,
3006 install_dir : usrbin_exec_dir,
3007 install : opt,
3008 build_by_default : opt)
3009 if opt and not is_disabler(exe)
3010 exes += exe
3011 manadocs += ['misc-utils/rename.1.adoc']
3012 bashcompletions += ['rename']
3013 endif
3014
3015 exe = executable(
3016 'getopt',
3017 getopt_sources,
3018 include_directories : includes,
3019 link_with : [lib_common],
3020 install_dir : usrbin_exec_dir,
3021 install : true)
3022 exes += exe
3023 manadocs += ['misc-utils/getopt.1.adoc']
3024 bashcompletions += ['getopt']
3025
3026 exe = executable(
3027 'fincore',
3028 fincore_sources,
3029 include_directories : includes,
3030 link_with : [lib_common,
3031 lib_smartcols],
3032 install_dir : usrbin_exec_dir,
3033 install : true)
3034 if not is_disabler(exe)
3035 exes += exe
3036 manadocs += ['misc-utils/fincore.1.adoc']
3037 bashcompletions += ['fincore']
3038 endif
3039
3040 exe = executable(
3041 'hardlink',
3042 hardlink_sources,
3043 include_directories : includes,
3044 link_with : [lib_common],
3045 install_dir : usrbin_exec_dir,
3046 install : true)
3047 if not is_disabler(exe)
3048 exes += exe
3049 manadocs += ['misc-utils/hardlink.1.adoc']
3050 bashcompletions += ['hardlink']
3051 endif
3052
3053 opt = not get_option('build-pipesz').disabled()
3054 exe = executable(
3055 'pipesz',
3056 pipesz_sources,
3057 include_directories : includes,
3058 link_with : [lib_common],
3059 install_dir : usrbin_exec_dir,
3060 install : true)
3061 if opt and not is_disabler(exe)
3062 exes += exe
3063 manadocs += ['misc-utils/pipesz.1.adoc']
3064 bashcompletions += ['pipesz']
3065 endif
3066
3067 exe = executable(
3068 'test_cal',
3069 cal_sources,
3070 include_directories : includes,
3071 c_args : '-DTEST_CAL',
3072 link_with : [lib_common,
3073 lib_tcolors],
3074 dependencies : [curses_libs],
3075 build_by_default: program_tests)
3076 if not is_disabler(exe)
3077 exes += exe
3078 endif
3079
3080 exe = executable(
3081 'fadvise',
3082 fadvise_sources,
3083 include_directories : includes,
3084 link_with : [lib_common],
3085 install_dir : usrbin_exec_dir,
3086 install : true)
3087 if not is_disabler(exe)
3088 exes += exe
3089 manadocs += ['misc-utils/fadvise.1.adoc']
3090 bashcompletions += ['fadvise']
3091 endif
3092
3093 if LINUX and conf.get('HAVE_PIDFD_OPEN').to_string() == '1'
3094 exe = executable(
3095 'waitpid',
3096 waitpid_sources,
3097 include_directories : includes,
3098 link_with : [lib_common],
3099 install_dir : usrbin_exec_dir,
3100 install : true)
3101 if not is_disabler(exe)
3102 exes += exe
3103 manadocs += ['misc-utils/waitpid.1.adoc']
3104 bashcompletions += ['waitpid']
3105 endif
3106 endif
3107
3108 syscalls_h = custom_target('syscalls.h',
3109 input : 'tools/all_syscalls',
3110 output : 'syscalls.h',
3111 command : ['tools/all_syscalls', sed.full_path(),
3112 cc.cmd_array(), get_option('c_args')],
3113 )
3114
3115 if cc.compiles(fs.read('include/audit-arch.h'), name : 'has AUDIT_ARCH_NATIVE')
3116 exe = executable(
3117 'enosys',
3118 'misc-utils/enosys.c', syscalls_h, errnos_h,
3119 include_directories : includes,
3120 link_with : [lib_common],
3121 install_dir : usrbin_exec_dir,
3122 install : true)
3123 if not is_disabler(exe)
3124 exes += exe
3125 manadocs += ['misc-utils/enosys.1.adoc']
3126 bashcompletions += ['enosys']
3127 endif
3128 endif
3129
3130 exe = executable(
3131 'lsclocks',
3132 lsclocks_sources,
3133 include_directories : includes,
3134 link_with : [lib_common, lib_smartcols],
3135 install_dir : usrbin_exec_dir,
3136 install : true)
3137 if not is_disabler(exe)
3138 exes += exe
3139 manadocs += ['misc-utils/lsclocks.1.adoc']
3140 bashcompletions += ['lsclocks']
3141 endif
3142
3143 if conf.get('HAVE_RENAMEAT2').to_string() == '1'
3144 exe = executable(
3145 'exch',
3146 exch_sources,
3147 include_directories : includes,
3148 link_with : [lib_common],
3149 install_dir : usrbin_exec_dir,
3150 install : true)
3151 if not is_disabler(exe)
3152 exes += exe
3153 manadocs += ['misc-utils/exch.1.adoc']
3154 bashcompletions += ['exch']
3155 endif
3156 endif
3157
3158 ############################################################
3159
3160 opt = not get_option('build-schedutils').disabled()
3161 exe = executable(
3162 'chrt',
3163 'schedutils/chrt.c',
3164 include_directories : includes,
3165 link_with : lib_common,
3166 install_dir : usrbin_exec_dir,
3167 install : opt,
3168 build_by_default : opt)
3169
3170 exe2 = executable(
3171 'ionice',
3172 'schedutils/ionice.c',
3173 include_directories : includes,
3174 link_with : lib_common,
3175 install_dir : usrbin_exec_dir,
3176 install : opt,
3177 build_by_default : opt)
3178
3179 exe3 = executable(
3180 'taskset',
3181 'schedutils/taskset.c',
3182 include_directories : includes,
3183 link_with : lib_common,
3184 install_dir : usrbin_exec_dir,
3185 install : opt,
3186 build_by_default : opt)
3187
3188 exe4 = executable(
3189 'uclampset',
3190 'schedutils/uclampset.c',
3191 include_directories : includes,
3192 link_with : lib_common,
3193 install_dir : usrbin_exec_dir,
3194 install : opt,
3195 build_by_default : opt)
3196
3197 if opt and not is_disabler(exe)
3198 exes += [exe, exe2, exe3, exe4]
3199 manadocs += ['schedutils/chrt.1.adoc',
3200 'schedutils/ionice.1.adoc',
3201 'schedutils/taskset.1.adoc',
3202 'schedutils/uclampset.1.adoc']
3203 bashcompletions += ['chrt', 'ionice', 'taskset', 'uclampset']
3204 endif
3205
3206 ############################################################
3207
3208 # TODO: when autotools compat is not needed, s/_/-/g in file names?
3209
3210 exe = executable(
3211 'test_ttyutils',
3212 'lib/ttyutils.c',
3213 c_args : ['-DTEST_PROGRAM_TTYUTILS'],
3214 include_directories : dir_include,
3215 link_with : lib_common,
3216 build_by_default: program_tests)
3217 exes += exe
3218
3219 exe = executable(
3220 'test_blkdev',
3221 'lib/blkdev.c',
3222 c_args : ['-DTEST_PROGRAM_BLKDEV'],
3223 include_directories : dir_include,
3224 link_with : lib_common,
3225 build_by_default: program_tests)
3226 exes += exe
3227
3228 exe = executable(
3229 'test_ismounted',
3230 'lib/ismounted.c',
3231 c_args : ['-DTEST_PROGRAM_ISMOUNTED'],
3232 include_directories : dir_include,
3233 link_with : lib_common,
3234 build_by_default: program_tests)
3235 exes += exe
3236
3237 exe = executable(
3238 'test_mangle',
3239 'lib/mangle.c',
3240 c_args : ['-DTEST_PROGRAM_MANGLE'],
3241 include_directories : dir_include,
3242 build_by_default: program_tests)
3243 exes += exe
3244
3245 exe = executable(
3246 'test_strutils',
3247 'lib/strutils.c',
3248 c_args : ['-DTEST_PROGRAM_STRUTILS'],
3249 include_directories : dir_include,
3250 build_by_default: program_tests)
3251 exes += exe
3252
3253 exe = executable(
3254 'test_colors',
3255 'lib/colors.c',
3256 'lib/color-names.c',
3257 c_args : ['-DTEST_PROGRAM_COLORS'],
3258 include_directories : dir_include,
3259 link_with : [lib_common, lib_tcolors],
3260 build_by_default: program_tests)
3261 exes += exe
3262
3263 exe = executable(
3264 'test_randutils',
3265 'lib/randutils.c',
3266 c_args : ['-DTEST_PROGRAM_RANDUTILS'],
3267 include_directories : dir_include,
3268 build_by_default: program_tests)
3269 exes += exe
3270
3271 if conf.get('HAVE_OPENAT').to_string() == '1' \
3272 and conf.get('HAVE_DIRFD').to_string() == '1'
3273 exe = executable(
3274 'test_procfs',
3275 'lib/procfs.c',
3276 c_args : ['-DTEST_PROGRAM_PROCFS'],
3277 include_directories : dir_include,
3278 link_with : lib_common,
3279 build_by_default: program_tests)
3280 exes += exe
3281
3282 exe = executable(
3283 'test_path',
3284 'lib/path.c',
3285 'lib/fileutils.c',
3286 have_cpu_set_t ? 'lib/cpuset.c' : [],
3287 c_args : ['-DTEST_PROGRAM_PATH'],
3288 include_directories : dir_include,
3289 link_with : lib_common,
3290 build_by_default: program_tests)
3291 exes += exe
3292 endif
3293
3294 if conf.get('HAVE_PTY').to_string() == '1'
3295 exe = executable(
3296 'test_pty',
3297 pty_session_c,
3298 monotonic_c,
3299 c_args : ['-DTEST_PROGRAM_PTY'],
3300 include_directories : dir_include,
3301 link_with : [lib_common],
3302 dependencies : [lib_m,
3303 realtime_libs,
3304 lib_util],
3305 build_by_default: program_tests)
3306 exes += exe
3307 endif
3308
3309 if LINUX
3310 exe = executable(
3311 'test_cpuset',
3312 'lib/cpuset.c',
3313 c_args : ['-DTEST_PROGRAM_CPUSET'],
3314 include_directories : dir_include,
3315 build_by_default: program_tests)
3316 exes += exe
3317 endif
3318
3319 exe = executable(
3320 'test_sysfs',
3321 'lib/sysfs.c',
3322 'lib/path.c',
3323 'lib/buffer.c',
3324 'lib/mbsalign.c',
3325 'lib/fileutils.c',
3326 have_cpu_set_t ? 'lib/cpuset.c' : [],
3327 c_args : ['-DTEST_PROGRAM_SYSFS'],
3328 include_directories : dir_include,
3329 build_by_default: program_tests)
3330 exes += exe
3331
3332 exe = executable(
3333 'test_pager',
3334 'lib/pager.c',
3335 c_args : ['-DTEST_PROGRAM_PAGER'],
3336 include_directories : dir_include,
3337 build_by_default: program_tests)
3338 exes += exe
3339
3340 exe = executable(
3341 'test_linux_version',
3342 'lib/linux_version.c',
3343 c_args : ['-DTEST_PROGRAM_LINUXVERSION'],
3344 include_directories : dir_include,
3345 build_by_default: program_tests)
3346 exes += exe
3347
3348 exe = executable(
3349 'test_fileutils',
3350 'lib/fileutils.c',
3351 c_args : ['-DTEST_PROGRAM_FILEUTILS'],
3352 include_directories : dir_include,
3353 build_by_default: program_tests)
3354 exes += exe
3355
3356 exe = executable(
3357 'test_canonicalize',
3358 'lib/canonicalize.c',
3359 c_args : ['-DTEST_PROGRAM_CANONICALIZE'],
3360 include_directories : dir_include,
3361 build_by_default: program_tests)
3362 exes += exe
3363
3364 exe = executable(
3365 'test_timeutils',
3366 'lib/timeutils.c',
3367 'lib/strutils.c',
3368 c_args : ['-DTEST_PROGRAM_TIMEUTILS'],
3369 include_directories : dir_include,
3370 build_by_default: program_tests)
3371 exes += exe
3372
3373 exe = executable(
3374 'test_pwdutils',
3375 'lib/pwdutils.c',
3376 c_args : ['-DTEST_PROGRAM'],
3377 include_directories : dir_include,
3378 link_with : lib_common,
3379 build_by_default: program_tests)
3380 exes += exe
3381
3382 exe = executable(
3383 'test_logindefs',
3384 'lib/logindefs.c',
3385 c_args : ['-DTEST_PROGRAM'],
3386 include_directories : dir_include,
3387 link_with : [lib_common, logindefs_c],
3388 build_by_default: program_tests)
3389 exes += exe
3390
3391
3392 ############################################################
3393
3394 exe = executable(
3395 'test_uuid_parser',
3396 'libuuid/src/test_uuid.c',
3397 include_directories : [dir_include, dir_libuuid],
3398 link_with : lib_uuid,
3399 dependencies : socket_libs,
3400 build_by_default: program_tests)
3401 if not is_disabler(exe)
3402 exes += exe
3403 endif
3404
3405 ############################################################
3406
3407 libfdisk_tests_cflags = ['-DTEST_PROGRAM']
3408 libfdisk_tests_ldadd = [lib_fdisk_static, lib_uuid]
3409 libfdisk_tests_ldadd_deps = [blkid_dep]
3410
3411 exe = executable(
3412 'test_fdisk_ask',
3413 'libfdisk/src/ask.c',
3414 c_args : libfdisk_tests_cflags,
3415 include_directories : lib_fdisk_includes,
3416 link_with : libfdisk_tests_ldadd,
3417 dependencies : libfdisk_tests_ldadd_deps,
3418 build_by_default: program_tests)
3419 if not is_disabler(exe)
3420 exes += exe
3421 endif
3422
3423 exe = executable(
3424 'test_fdisk_gpt',
3425 'libfdisk/src/gpt.c',
3426 c_args : libfdisk_tests_cflags,
3427 include_directories : lib_fdisk_includes,
3428 link_with : libfdisk_tests_ldadd,
3429 dependencies : libfdisk_tests_ldadd_deps,
3430 build_by_default: program_tests)
3431 if not is_disabler(exe)
3432 exes += exe
3433 endif
3434
3435 exe = executable(
3436 'test_fdisk_utils',
3437 'libfdisk/src/utils.c',
3438 c_args : libfdisk_tests_cflags,
3439 include_directories : lib_fdisk_includes,
3440 link_with : libfdisk_tests_ldadd,
3441 dependencies : libfdisk_tests_ldadd_deps,
3442 build_by_default: program_tests)
3443 if not is_disabler(exe)
3444 exes += exe
3445 endif
3446
3447 exe = executable(
3448 'test_fdisk_script',
3449 'libfdisk/src/script.c',
3450 c_args : libfdisk_tests_cflags,
3451 include_directories : lib_fdisk_includes,
3452 link_with : libfdisk_tests_ldadd,
3453 dependencies : libfdisk_tests_ldadd_deps,
3454 build_by_default: program_tests)
3455 if not is_disabler(exe)
3456 exes += exe
3457 endif
3458
3459 exe = executable(
3460 'test_fdisk_version',
3461 'libfdisk/src/version.c',
3462 c_args : libfdisk_tests_cflags,
3463 include_directories : lib_fdisk_includes,
3464 link_with : libfdisk_tests_ldadd,
3465 dependencies : libfdisk_tests_ldadd_deps,
3466 build_by_default: program_tests)
3467 if not is_disabler(exe)
3468 exes += exe
3469 endif
3470
3471 exe = executable(
3472 'test_fdisk_item',
3473 'libfdisk/src/item.c',
3474 c_args : libfdisk_tests_cflags,
3475 include_directories : lib_fdisk_includes,
3476 link_with : libfdisk_tests_ldadd,
3477 dependencies : libfdisk_tests_ldadd_deps,
3478 build_by_default: program_tests)
3479 if not is_disabler(exe)
3480 exes += exe
3481 endif
3482
3483 sample_fdisk_ldadd = [lib_common, lib_fdisk]
3484
3485 exe = executable(
3486 'sample-fdisk-mkpart',
3487 'libfdisk/samples/mkpart.c',
3488 include_directories : lib_fdisk_includes,
3489 link_with : sample_fdisk_ldadd)
3490 if not is_disabler(exe)
3491 exes += exe
3492 endif
3493
3494 exe = executable(
3495 'sample-fdisk-mkpart-fullspec',
3496 'libfdisk/samples/mkpart-fullspec.c',
3497 include_directories : lib_fdisk_includes,
3498 link_with : sample_fdisk_ldadd)
3499 if not is_disabler(exe)
3500 exes += exe
3501 endif
3502
3503 ############################################################
3504
3505 exe = executable(
3506 'test_cap',
3507 'tests/helpers/test_cap.c',
3508 include_directories : includes,
3509 dependencies : [lib_cap_ng],
3510 build_by_default: program_tests)
3511 if not is_disabler(exe)
3512 exes += exe
3513 endif
3514
3515 exe = executable(
3516 'test_mbsencode',
3517 'tests/helpers/test_mbsencode.c',
3518 include_directories : includes,
3519 link_with : lib_common,
3520 build_by_default: program_tests)
3521 exes += exe
3522
3523 exe = executable(
3524 'test_byteswap',
3525 'tests/helpers/test_byteswap.c',
3526 include_directories : includes,
3527 build_by_default: program_tests)
3528 exes += exe
3529
3530 exe = executable(
3531 'test_md5',
3532 'tests/helpers/test_md5.c',
3533 md5_c,
3534 include_directories : includes,
3535 build_by_default: program_tests)
3536 exes += exe
3537
3538 exe = executable(
3539 'test_sha1',
3540 'tests/helpers/test_sha1.c',
3541 sha1_c,
3542 include_directories : includes,
3543 build_by_default: program_tests)
3544 exes += exe
3545
3546 exe = executable(
3547 'test_pathnames',
3548 'tests/helpers/test_pathnames.c',
3549 include_directories : includes,
3550 build_by_default: program_tests)
3551 exes += exe
3552
3553 exe = executable(
3554 'test_strerror',
3555 'tests/helpers/test_strerror.c',
3556 include_directories : includes,
3557 build_by_default: program_tests)
3558 exes += exe
3559
3560 exe = executable(
3561 'test_sysinfo',
3562 'tests/helpers/test_sysinfo.c',
3563 include_directories : includes,
3564 build_by_default: program_tests)
3565 exes += exe
3566
3567 exe = executable(
3568 'test_sigreceive',
3569 'tests/helpers/test_sigreceive.c',
3570 include_directories : includes,
3571 link_with : lib_common,
3572 build_by_default: program_tests)
3573 exes += exe
3574
3575 exe = executable(
3576 'test_tiocsti',
3577 'tests/helpers/test_tiocsti.c',
3578 include_directories : includes,
3579 build_by_default: program_tests)
3580 exes += exe
3581
3582 exe = executable(
3583 'test_uuid_namespace',
3584 'tests/helpers/test_uuid_namespace.c',
3585 predefined_c,
3586 unpack_c,
3587 unparse_c,
3588 include_directories : includes,
3589 build_by_default: program_tests)
3590 exes += exe
3591
3592 if LINUX and lib_rt.found()
3593 exe = executable(
3594 'test_mkfds',
3595 'tests/helpers/test_mkfds.c',
3596 'tests/helpers/test_mkfds.h',
3597 'tests/helpers/test_mkfds_ppoll.c',
3598 include_directories : includes,
3599 dependencies : [lib_rt],
3600 build_by_default: program_tests)
3601 exes += exe
3602 endif
3603
3604 exe = executable(
3605 'test_enosys',
3606 'tests/helpers/test_enosys.c',
3607 include_directories : includes,
3608 build_by_default: program_tests)
3609 exes += exe
3610
3611 ############################################################
3612
3613 if conf.get('HAVE_OPENAT').to_string() == '1'
3614 exe = executable(
3615 'sample-scols-tree',
3616 'libsmartcols/samples/tree.c',
3617 include_directories : includes,
3618 link_with : [lib_smartcols, lib_common],
3619 build_by_default: program_tests)
3620 if not is_disabler(exe)
3621 exes += exe
3622 endif
3623 endif
3624
3625 exe = executable(
3626 'sample-scols-title',
3627 'libsmartcols/samples/title.c',
3628 include_directories : includes,
3629 link_with : [lib_smartcols, lib_common])
3630 if not is_disabler(exe)
3631 exes += exe
3632 endif
3633
3634 exe = executable(
3635 'sample-scols-wrap',
3636 'libsmartcols/samples/wrap.c',
3637 include_directories : includes,
3638 link_with : [lib_smartcols, lib_common])
3639 if not is_disabler(exe)
3640 exes += exe
3641 endif
3642
3643 exe = executable(
3644 'sample-scols-continuous',
3645 'libsmartcols/samples/continuous.c',
3646 include_directories : includes,
3647 link_with : [lib_smartcols, lib_common])
3648 if not is_disabler(exe)
3649 exes += exe
3650 endif
3651
3652 exe = executable(
3653 'sample-scols-continuous-json',
3654 'libsmartcols/samples/continuous-json.c',
3655 include_directories : includes,
3656 link_with : [lib_smartcols, lib_common])
3657 if not is_disabler(exe)
3658 exes += exe
3659 endif
3660
3661 exe = executable(
3662 'sample-scols-maxout',
3663 'libsmartcols/samples/maxout.c',
3664 include_directories : includes,
3665 link_with : [lib_smartcols, lib_common])
3666 if not is_disabler(exe)
3667 exes += exe
3668 endif
3669
3670 exe = executable(
3671 'sample-scols-fromfile',
3672 'libsmartcols/samples/fromfile.c',
3673 include_directories : includes,
3674 link_with : [lib_smartcols, lib_common])
3675 if not is_disabler(exe)
3676 exes += exe
3677 endif
3678
3679 exe = executable(
3680 'sample-scols-grouping-simple',
3681 'libsmartcols/samples/grouping-simple.c',
3682 include_directories : includes,
3683 link_with : [lib_smartcols, lib_common])
3684 if not is_disabler(exe)
3685 exes += exe
3686 endif
3687
3688 exe = executable(
3689 'sample-scols-grouping-overlay',
3690 'libsmartcols/samples/grouping-overlay.c',
3691 include_directories : includes,
3692 link_with : [lib_smartcols, lib_common])
3693 if not is_disabler(exe)
3694 exes += exe
3695 endif
3696
3697 exe = executable(
3698 'test_boilerplate',
3699 'Documentation/boilerplate.c',
3700 include_directories : includes,
3701 build_by_default: program_tests)
3702 if not is_disabler(exe)
3703 exes += exe
3704 endif
3705
3706 ############################################################
3707
3708 # Let the test runner know whether we're running under asan and export
3709 # some paths. We use a file on disk so that it is possible to run the
3710 # test scripts from commandline without setting any variables.
3711 configure_file(output : 'meson.conf',
3712 capture : true,
3713 command : ['echo',
3714 '''asan=@0@
3715 PYTHON=@1@
3716 '''.format(get_option('b_sanitize')=='address' ? 'yes' : '',
3717 python.full_path())])
3718
3719 run_sh = find_program('tests/run.sh')
3720 run_target(
3721 'check',
3722 command : [run_sh,
3723 '--srcdir=' + meson.current_source_dir(),
3724 '--builddir=' + meson.current_build_dir(),
3725 '--parallel',
3726 '--nonroot'],
3727 depends : exes)
3728
3729
3730 manadocs += ['lib/terminal-colors.d.5.adoc']
3731 manadocs += ['libblkid/libblkid.3.adoc']
3732
3733 if build_libuuid
3734 manadocs += [
3735 'libuuid/man/uuid.3.adoc',
3736 'libuuid/man/uuid_clear.3.adoc',
3737 'libuuid/man/uuid_compare.3.adoc',
3738 'libuuid/man/uuid_copy.3.adoc',
3739 'libuuid/man/uuid_generate.3.adoc',
3740 'libuuid/man/uuid_is_null.3.adoc',
3741 'libuuid/man/uuid_parse.3.adoc',
3742 'libuuid/man/uuid_time.3.adoc',
3743 'libuuid/man/uuid_unparse.3.adoc']
3744 manlinks += {
3745 'uuid_generate_random.3': 'uuid_generate.3',
3746 'uuid_generate_time.3': 'uuid_generate.3',
3747 'uuid_generate_time_safe.3': 'uuid_generate.3',
3748 }
3749 endif
3750
3751 asciidoctor = find_program('asciidoctor', required : false)
3752 if asciidoctor.found()
3753 foreach adoc : manadocs
3754 name = adoc.split('/')[-1]
3755 page = name.split('.adoc')[0]
3756 section = page.split('.')[-1]
3757 mandirn = join_paths(mandir, 'man' + section)
3758 input = adoc
3759
3760 custom_target(
3761 page,
3762 command : [ asciidoctor,
3763 '-b', 'manpage',
3764 '-a', 'VERSION=' + meson.project_version(),
3765 '-a', 'release-version=' + meson.project_version(),
3766 '-a', 'ADJTIME_PATH=/etc/adjtime',
3767 '-a', 'package-docdir=' + docdir,
3768 '--base-dir=' + meson.current_source_dir(),
3769 '--destination-dir=' + meson.current_build_dir(),
3770 '--load-path', '@SOURCE_ROOT@/tools',
3771 '--require', 'asciidoctor-includetracker',
3772 '@INPUT@'],
3773 input : input,
3774 output : [page],
3775 depfile : page + '.deps',
3776 install: true,
3777 install_dir : mandirn)
3778 endforeach
3779
3780 foreach link_name, target : manlinks
3781 link_section = link_name.split('.')[-1]
3782 target_section = target.split('.')[-1]
3783 meson.add_install_script(meson_make_manpage_stub,
3784 join_paths('man' + target_section, target),
3785 join_paths(mandir, 'man' + link_section, link_name))
3786 endforeach
3787 endif
3788
3789 if bash_completion.found()
3790 foreach completion : bashcompletions
3791 install_data(
3792 join_paths('bash-completion', completion),
3793 install_dir : bash_completion.get_variable(pkgconfig : 'completionsdir')
3794 )
3795 endforeach
3796 foreach link_name, target : bashcompletionslinks
3797 meson.add_install_script(meson_make_symlink,
3798 target,
3799 join_paths(bash_completion.get_variable(pkgconfig : 'completionsdir'), link_name))
3800 endforeach
3801 endif