Browse Source
To build: meson build && ninja -C build To run tests: ninja -C build check To install for packaging: DESTDIR=/var/tmp/inst ninja -C build install To install for realz: sudo ninja -C build install v2: - Optional items are now based on the 'feature' feature in meson. Built libraries which are disabled turn into disabler() objects and also poison any executables which link to them. What is there: - building of the binaries and libs and the python module - installation of binaries, libs, python module, localization files, man pages, pkgconfig files - running of tests - most options to configure build equivalently to the ./configure settings Partially implemented: - disabling of stuff when things missing. In the C code, the defines are all used, so that should be fine. In the build system, some files should be skipped, but that is probably not always done properly. Getting this right might require some testing of various build option combinations to get the details right. Not implemented: - static builds of fdisk and other binaries - things marked with XXX or FIXME - ??? Differences: - .la files are not created. They are useless and everybody hates them. - Requires.private in pkgconfig files are not present in the autogenerated .pc file. Not sure if they should be there or not. If necessary, they can be added by hand. - man pages and systemd units are installed by the install target. Not sure why 'make install' doesn't do that. - the split between / and /usr is probably wrong. But it's all pointless anyway, so maybe we could simplify things but not implementing it at all under meson?pull/1264/head


22 changed files with 4229 additions and 7 deletions
@ -0,0 +1,95 @@
|
||||
mkfs_sources = files( |
||||
'mkfs.c', |
||||
) |
||||
|
||||
mkfs_bfs_sources = files( |
||||
'mkfs.bfs.c', |
||||
) |
||||
|
||||
isosize_sources = files( |
||||
'isosize.c', |
||||
) |
||||
|
||||
mkswap_sources = files( |
||||
'mkswap.c', |
||||
) |
||||
|
||||
swaplabel_sources = files( |
||||
'swaplabel.c', |
||||
) + \ |
||||
swapprober_c |
||||
|
||||
fsck_sources = files( |
||||
'fsck.c', |
||||
) + \ |
||||
monotonic_c |
||||
|
||||
mkfs_minix_sources = files( |
||||
'mkfs.minix.c', |
||||
'minix_programs.h', |
||||
) |
||||
|
||||
fsck_minix_sources = files( |
||||
'fsck.minix.c', |
||||
'minix_programs.h', |
||||
) |
||||
|
||||
mkfs_cramfs_sources = files( |
||||
'mkfs.cramfs.c', |
||||
'cramfs.h', |
||||
'cramfs_common.c', |
||||
) |
||||
|
||||
fsck_cramfs_sources = files( |
||||
'fsck.cramfs.c', |
||||
'cramfs.h', |
||||
'cramfs_common.c', |
||||
) |
||||
|
||||
raw_sources = files( |
||||
'raw.c', |
||||
) |
||||
|
||||
fdformat_sources = files( |
||||
'fdformat.c', |
||||
) |
||||
|
||||
blockdev_sources = files( |
||||
'blockdev.c', |
||||
) |
||||
|
||||
fdisk_sources = files( |
||||
'fdisk.c', |
||||
'fdisk.h', |
||||
'fdisk-menu.c', |
||||
'fdisk-list.c', |
||||
'fdisk-list.h') |
||||
|
||||
sfdisk_sources = files( |
||||
'sfdisk.c', |
||||
'fdisk-list.c', |
||||
'fdisk-list.h') |
||||
|
||||
cfdisk_sources = files( |
||||
'cfdisk.c', |
||||
) |
||||
|
||||
addpart_sources = files( |
||||
'addpart.c', |
||||
) |
||||
delpart_sources = files( |
||||
'delpart.c', |
||||
) |
||||
resizepart_sources = files( |
||||
'resizepart.c', |
||||
) |
||||
partx_sources = files( |
||||
'partx.c', |
||||
) |
||||
|
||||
addpart_delpart_man = files( |
||||
'addpart.8', |
||||
'delpart.8', |
||||
'resizepart.8', |
||||
'partx.8', |
||||
) |
@ -0,0 +1,3 @@
|
||||
dir_include = include_directories('.') |
||||
|
||||
list_h = files('list.h') |
@ -0,0 +1,92 @@
|
||||
lib_common_sources = ''' |
||||
blkdev.c |
||||
canonicalize.c |
||||
color-names.c |
||||
crc32.c |
||||
crc32c.c |
||||
encode.c |
||||
env.c |
||||
exec_shell.c |
||||
fileutils.c |
||||
ismounted.c |
||||
mangle.c |
||||
match.c |
||||
mbsalign.c |
||||
mbsedit.c |
||||
pager.c |
||||
pwdutils.c |
||||
setproctitle.c |
||||
signames.c |
||||
timeutils.c |
||||
ttyutils.c |
||||
'''.split() |
||||
|
||||
idcache_c = files('idcache.c') |
||||
randutils_c = files('randutils.c') |
||||
md5_c = files('md5.c') |
||||
sha1_c = files('sha1.c') |
||||
strutils_c = files('strutils.c') |
||||
strv_c = files('strv.c') |
||||
|
||||
lib_common_sources += [idcache_c, |
||||
randutils_c, |
||||
md5_c, |
||||
sha1_c, |
||||
strutils_c, |
||||
strv_c] |
||||
|
||||
monotonic_c = files('monotonic.c') |
||||
timer_c = files('timer.c') |
||||
swapprober_c = files('swapprober.c') |
||||
pty_session_c = files('pty-session.c') |
||||
|
||||
if LINUX |
||||
lib_common_sources += ''' |
||||
caputils.c |
||||
linux_version.c |
||||
loopdev.c |
||||
'''.split() |
||||
endif |
||||
|
||||
if build_plymouth_support |
||||
lib_common_sources += ''' |
||||
plymouth-ctrl.c |
||||
'''.split() |
||||
endif |
||||
|
||||
if conf.get('HAVE_LANGINFO_H') in [1] |
||||
lib_common_sources += 'langinfo.c' |
||||
endif |
||||
|
||||
if conf.get('HAVE_CPU_SET_T') in [1] |
||||
lib_common_sources += 'cpuset.c' |
||||
endif |
||||
|
||||
if conf.get('HAVE_OPENAT') in [1] and conf.get('HAVE_DIRFD') in [1] |
||||
lib_common_sources += ''' |
||||
path.c |
||||
procutils.c |
||||
sysfs.c |
||||
'''.split() |
||||
endif |
||||
|
||||
lib_common = static_library( |
||||
'common', |
||||
lib_common_sources, |
||||
include_directories : dir_include) |
||||
|
||||
|
||||
lib_color_sources = files(''' |
||||
colors.c |
||||
color-names.c |
||||
'''.split()) |
||||
# colors.h include/color-names.h |
||||
|
||||
lib_tcolors = static_library( |
||||
'tcolors', |
||||
lib_color_sources, |
||||
include_directories : dir_include, |
||||
dependencies : curses_libs) |
||||
|
||||
install_man( |
||||
'terminal-colors.d.5') |
@ -0,0 +1,144 @@
|
||||
dir_libblkid = include_directories('.', 'src') |
||||
|
||||
blkid_h = configure_file( |
||||
input : 'src/blkid.h.in', |
||||
output : 'blkid.h', |
||||
configuration : conf) |
||||
|
||||
lib_blkid_sources = ''' |
||||
src/blkidP.h |
||||
src/init.c |
||||
src/cache.c |
||||
src/config.c |
||||
src/dev.c |
||||
src/devname.c |
||||
src/devno.c |
||||
src/encode.c |
||||
src/evaluate.c |
||||
src/getsize.c |
||||
src/llseek.c |
||||
src/probe.c |
||||
src/read.c |
||||
src/resolve.c |
||||
src/save.c |
||||
src/tag.c |
||||
src/verify.c |
||||
src/version.c |
||||
|
||||
src/partitions/aix.c |
||||
src/partitions/aix.h |
||||
src/partitions/atari.c |
||||
src/partitions/bsd.c |
||||
src/partitions/dos.c |
||||
src/partitions/gpt.c |
||||
src/partitions/mac.c |
||||
src/partitions/minix.c |
||||
src/partitions/partitions.c |
||||
src/partitions/partitions.h |
||||
src/partitions/sgi.c |
||||
src/partitions/solaris_x86.c |
||||
src/partitions/sun.c |
||||
src/partitions/ultrix.c |
||||
src/partitions/unixware.c |
||||
|
||||
src/superblocks/adaptec_raid.c |
||||
src/superblocks/apfs.c |
||||
src/superblocks/bcache.c |
||||
src/superblocks/befs.c |
||||
src/superblocks/bfs.c |
||||
src/superblocks/bitlocker.c |
||||
src/superblocks/bluestore.c |
||||
src/superblocks/btrfs.c |
||||
src/superblocks/cramfs.c |
||||
src/superblocks/ddf_raid.c |
||||
src/superblocks/drbd.c |
||||
src/superblocks/drbdproxy_datalog.c |
||||
src/superblocks/drbdmanage.c |
||||
src/superblocks/exfat.c |
||||
src/superblocks/exfs.c |
||||
src/superblocks/ext.c |
||||
src/superblocks/f2fs.c |
||||
src/superblocks/gfs.c |
||||
src/superblocks/hfs.c |
||||
src/superblocks/highpoint_raid.c |
||||
src/superblocks/hpfs.c |
||||
src/superblocks/iso9660.c |
||||
src/superblocks/isw_raid.c |
||||
src/superblocks/jfs.c |
||||
src/superblocks/jmicron_raid.c |
||||
src/superblocks/linux_raid.c |
||||
src/superblocks/lsi_raid.c |
||||
src/superblocks/luks.c |
||||
src/superblocks/lvm.c |
||||
src/superblocks/minix.c |
||||
src/superblocks/mpool.c |
||||
src/superblocks/netware.c |
||||
src/superblocks/nilfs.c |
||||
src/superblocks/ntfs.c |
||||
src/superblocks/refs.c |
||||
src/superblocks/nvidia_raid.c |
||||
src/superblocks/ocfs.c |
||||
src/superblocks/promise_raid.c |
||||
src/superblocks/reiserfs.c |
||||
src/superblocks/romfs.c |
||||
src/superblocks/silicon_raid.c |
||||
src/superblocks/squashfs.c |
||||
src/superblocks/stratis.c |
||||
src/superblocks/superblocks.c |
||||
src/superblocks/superblocks.h |
||||
src/superblocks/swap.c |
||||
src/superblocks/sysv.c |
||||
src/superblocks/ubi.c |
||||
src/superblocks/ubifs.c |
||||
src/superblocks/udf.c |
||||
src/superblocks/ufs.c |
||||
src/superblocks/vdo.c |
||||
src/superblocks/vfat.c |
||||
src/superblocks/via_raid.c |
||||
src/superblocks/vmfs.c |
||||
src/superblocks/vxfs.c |
||||
src/superblocks/xfs.c |
||||
src/superblocks/zfs.c |
||||
|
||||
src/topology/topology.c |
||||
src/topology/topology.h |
||||
'''.split() |
||||
|
||||
if LINUX |
||||
lib_blkid_sources += ''' |
||||
src/topology/dm.c |
||||
src/topology/evms.c |
||||
src/topology/ioctl.c |
||||
src/topology/lvm.c |
||||
src/topology/md.c |
||||
src/topology/sysfs.c |
||||
'''.split() |
||||
endif |
||||
|
||||
libblkid_sym = 'src/libblkid.sym' |
||||
libblkid_sym_path = '@0@/@1@'.format(meson.current_source_dir(), libblkid_sym) |
||||
|
||||
if build_libblkid and not have_dirfd and not have_ddfd |
||||
error('neither dirfd nor ddfd are available') |
||||
endif |
||||
|
||||
lib_blkid = both_libraries( |
||||
'blkid', |
||||
list_h, |
||||
lib_blkid_sources, |
||||
include_directories : [dir_include, dir_libblkid], |
||||
link_depends : libblkid_sym, |
||||
version : libblkid_version, |
||||
link_args : ['-Wl,--version-script=@0@'.format(libblkid_sym_path)], |
||||
link_with : lib_common, |
||||
dependencies : build_libblkid ? [] : disabler(), |
||||
install : build_libblkid) |
||||
|
||||
pkgconfig.generate(lib_blkid, |
||||
description : 'Block device id library', |
||||
subdirs : 'blkid', |
||||
version : pc_version) |
||||
|
||||
if build_libblkid |
||||
install_man('libblkid.3') |
||||
endif |
@ -0,0 +1,67 @@
|
||||
dir_libfdisk = include_directories('.', 'src') |
||||
|
||||
defs = configuration_data() |
||||
defs.set('LIBFDISK_VERSION', libfdisk_version) |
||||
defs.set('LIBFDISK_MAJOR_VERSION', libfdisk_version.split('.')[0]) |
||||
defs.set('LIBFDISK_MINOR_VERSION', libfdisk_version.split('.')[1]) |
||||
defs.set('LIBFDISK_PATCH_VERSION', libfdisk_version.split('.')[2]) |
||||
|
||||
libfdisk_h = configure_file( |
||||
input : 'src/libfdisk.h.in', |
||||
output : 'libfdisk.h', |
||||
configuration : defs) |
||||
|
||||
lib_fdisk_sources = ''' |
||||
src/fdiskP.h |
||||
src/init.c |
||||
src/field.c |
||||
src/item.c |
||||
src/test.c |
||||
src/ask.c |
||||
src/alignment.c |
||||
src/label.c |
||||
src/utils.c |
||||
src/context.c |
||||
src/parttype.c |
||||
src/partition.c |
||||
src/table.c |
||||
src/iter.c |
||||
src/script.c |
||||
src/version.c |
||||
src/wipe.c |
||||
|
||||
src/sun.c |
||||
src/sgi.c |
||||
src/dos.c |
||||
src/bsd.c |
||||
src/gpt.c |
||||
'''.split() + [ |
||||
list_h, |
||||
] |
||||
|
||||
libfdisk_sym = 'src/libfdisk.sym' |
||||
libfdisk_sym_path = '@0@/@1@'.format(meson.current_source_dir(), libfdisk_sym) |
||||
|
||||
lib_fdisk_includes = [dir_include, |
||||
dir_libblkid, |
||||
dir_libfdisk, |
||||
dir_libuuid] # XXX: should this be declared along with the lib? |
||||
|
||||
lib_fdisk = both_libraries( |
||||
'fdisk', |
||||
list_h, |
||||
lib_fdisk_sources, |
||||
include_directories : lib_fdisk_includes, |
||||
link_depends : libfdisk_sym, |
||||
version : libfdisk_version, |
||||
link_args : ['-Wl,--version-script=@0@'.format(libfdisk_sym_path)], |
||||
link_with : [lib_common, |
||||
lib_blkid, |
||||
lib_uuid], |
||||
dependencies : build_libfdisk ? [] : disabler(), |
||||
install : build_libfdisk) |
||||
|
||||
pkgconfig.generate(lib_fdisk, |
||||
description : 'fdisk library', |
||||
subdirs : 'libfdisk', |
||||
version : pc_version) |
@ -0,0 +1,80 @@
|
||||
dir_libmount = include_directories('.', 'src') |
||||
|
||||
defs = configuration_data() |
||||
defs.set('LIBMOUNT_VERSION', libmount_version) |
||||
defs.set('LIBMOUNT_MAJOR_VERSION', libmount_version.split('.')[0]) |
||||
defs.set('LIBMOUNT_MINOR_VERSION', libmount_version.split('.')[1]) |
||||
defs.set('LIBMOUNT_PATCH_VERSION', libmount_version.split('.')[2]) |
||||
|
||||
libmount_h = configure_file( |
||||
input : 'src/libmount.h.in', |
||||
output : 'libmount.h', |
||||
configuration : defs) |
||||
|
||||
lib_mount_sources = ''' |
||||
src/mountP.h |
||||
src/cache.c |
||||
src/fs.c |
||||
src/init.c |
||||
src/iter.c |
||||
src/lock.c |
||||
src/optmap.c |
||||
src/optstr.c |
||||
src/tab.c |
||||
src/tab_diff.c |
||||
src/tab_parse.c |
||||
src/tab_update.c |
||||
src/test.c |
||||
src/utils.c |
||||
src/version.c |
||||
'''.split() + [ |
||||
list_h, |
||||
monotonic_c, |
||||
] |
||||
|
||||
if LINUX |
||||
lib_mount_sources += ''' |
||||
src/context.c |
||||
src/context_loopdev.c |
||||
src/context_veritydev.c |
||||
src/context_mount.c |
||||
src/context_umount.c |
||||
src/monitor.c |
||||
'''.split() |
||||
endif |
||||
|
||||
if enable_btrfs |
||||
lib_mount_sources += 'src/btrfs.c' |
||||
endif |
||||
|
||||
libmount_sym = 'src/libmount.sym' |
||||
libmount_sym_path = '@0@/@1@'.format(meson.current_source_dir(), libmount_sym) |
||||
|
||||
if build_libmount and not have_dirfd and not have_ddfd |
||||
error('neither dirfd nor ddfd are available') |
||||
endif |
||||
|
||||
lib_mount = both_libraries( |
||||
'mount', |
||||
list_h, |
||||
lib_mount_sources, |
||||
monotonic_c, |
||||
include_directories : [dir_include, |
||||
dir_libmount, |
||||
dir_libblkid], |
||||
link_depends : libmount_sym, |
||||
version : libmount_version, |
||||
link_args : ['-Wl,--version-script=@0@'.format(libmount_sym_path)], |
||||
link_with : [lib_common, |
||||
lib_blkid], |
||||
dependencies : [lib_selinux, |
||||
lib_cryptsetup, |
||||
realtime_libs], |
||||
install : build_libmount) |
||||
|
||||
pkgconfig.generate(lib_mount, |
||||
description : 'mount library', |
||||
subdirs : 'libmount', |
||||
version : pc_version) |
||||
|
||||
subdir('python') |
@ -0,0 +1,34 @@
|
||||
python_module = import('python') |
||||
|
||||
python = python_module.find_installation( |
||||
get_option('python'), |
||||
required : get_option('build-python'), |
||||
disabler : true) |
||||
build_python = python.found() |
||||
|
||||
pylibmount_sources = ''' |
||||
pylibmount.c |
||||
pylibmount.h |
||||
fs.c |
||||
tab.c |
||||
'''.split() |
||||
|
||||
if LINUX |
||||
pylibmount_sources += 'context.c' |
||||
endif |
||||
|
||||
python.extension_module( |
||||
'pylibmount', |
||||
pylibmount_sources, |
||||
include_directories : [dir_include, dir_libmount], |
||||
subdir : 'libmount', |
||||
link_with : lib_mount, |
||||
dependencies : python.dependency(), |
||||
install : true) |
||||
|
||||
if build_python |
||||
python.install_sources( |
||||
'__init__.py', |
||||
subdir : 'libmount', |
||||
pure : false) |
||||
endif |
@ -0,0 +1,48 @@
|
||||
dir_libsmartcols = include_directories('.', 'src') |
||||
|
||||
defs = configuration_data() |
||||
defs.set('LIBSMARTCOLS_VERSION', libsmartcols_version) |
||||
|
||||
libsmartcols_h = configure_file( |
||||
input : 'src/libsmartcols.h.in', |
||||
output : 'libsmartcols.h', |
||||
configuration : defs) |
||||
|
||||
lib_smartcols_sources = ''' |
||||
src/smartcolsP.h |
||||
src/iter.c |
||||
src/symbols.c |
||||
src/cell.c |
||||
src/column.c |
||||
src/line.c |
||||
src/table.c |
||||
src/print.c |
||||
src/fput.c |
||||
src/print-api.c |
||||
src/version.c |
||||
src/buffer.c |
||||
src/calculate.c |
||||
src/grouping.c |
||||
src/walk.c |
||||
src/init.c |
||||
'''.split() |
||||
|
||||
libsmartcols_sym = 'src/libsmartcols.sym' |
||||
libsmartcols_sym_path = '@0@/@1@'.format(meson.current_source_dir(), libsmartcols_sym) |
||||
|
||||
lib_smartcols = both_libraries( |
||||
'smartcols', |
||||
list_h, |
||||
lib_smartcols_sources, |
||||
include_directories : [dir_include, dir_libsmartcols], |
||||
link_depends : libsmartcols_sym, |
||||
version : libsmartcols_version, |
||||
link_args : ['-Wl,--version-script=@0@'.format(libsmartcols_sym_path)], |
||||
link_with : lib_common, |
||||
dependencies : build_libsmartcols ? [] : disabler(), |
||||
install : build_libsmartcols) |
||||
|
||||
pkgconfig.generate(lib_smartcols, |
||||
description : 'table or tree library', |
||||
subdirs : 'libsmartcols', |
||||
version : pc_version) |
@ -0,0 +1,60 @@
|
||||
dir_libuuid = include_directories('src') |
||||
|
||||
lib_uuid_sources = ''' |
||||
src/uuidP.h |
||||
src/clear.c |
||||
src/compare.c |
||||
src/copy.c |
||||
src/gen_uuid.c |
||||
src/isnull.c |
||||
src/pack.c |
||||
src/parse.c |
||||
src/uuidd.h |
||||
src/uuid_time.c |
||||
'''.split() |
||||
|
||||
predefined_c = files('src/predefined.c') |
||||
unpack_c = files('src/unpack.c') |
||||
unparse_c = files('src/unparse.c') |
||||
|
||||
libuuid_sym = 'src/libuuid.sym' |
||||
libuuid_sym_path = '@0@/@1@'.format(meson.current_source_dir(), libuuid_sym) |
||||
|
||||
lib_uuid = both_libraries( |
||||
'uuid', |
||||
list_h, |
||||
lib_uuid_sources, |
||||
predefined_c, |
||||
unpack_c, |
||||
unparse_c, |
||||
randutils_c, |
||||
md5_c, |
||||
sha1_c, |
||||
include_directories : [dir_include, dir_libuuid], |
||||
link_depends : libuuid_sym, |
||||
version : libuuid_version, |
||||
link_args : ['-Wl,--version-script=@0@'.format(libuuid_sym_path)], |
||||
dependencies : [socket_libs, |
||||
build_libuuid ? [] : disabler()], |
||||
install : build_libuuid) |
||||
|
||||
pkgconfig.generate(lib_uuid, |
||||
description : 'Universally unique id library', |
||||
subdirs : 'uuid', |
||||
version : pc_version) |
||||
|
||||
if build_libuuid |
||||
install_man( |
||||
'man/uuid.3', |
||||
'man/uuid_clear.3', |
||||
'man/uuid_compare.3', |
||||
'man/uuid_copy.3', |
||||
'man/uuid_generate.3', |
||||
'man/uuid_is_null.3', |
||||
'man/uuid_parse.3', |
||||
'man/uuid_time.3', |
||||
'man/uuid_unparse.3', |
||||
'man/uuid_generate_random.3', |
||||
'man/uuid_generate_time.3', |
||||
'man/uuid_generate_time_safe.3') |
||||
endif |
@ -0,0 +1,75 @@
|
||||
chfn_chsh_sources = files( |
||||
'ch-common.c', |
||||
'ch-common.h', |
||||
) |
||||
chfn_chsh_deps = [lib_readline] |
||||
|
||||
if chfn_chsh_password |
||||
chfn_chsh_sources += files( |
||||
'auth.c', |
||||
'auth.h', |
||||
) |
||||
chfn_chsh_deps += [ |
||||
lib_pam, |
||||
lib_pam_misc, |
||||
] |
||||
endif |
||||
|
||||
if lib_user.found() |
||||
chfn_chsh_sources += files( |
||||
'libuser.c', |
||||
'libuser.h', |
||||
) |
||||
chfn_chsh_deps += lib_user |
||||
else |
||||
chfn_chsh_sources += files( |
||||
'islocal.c', |
||||
'islocal.h', |
||||
'setpwnam.c', |
||||
'setpwnam.h', |
||||
) |
||||
endif |
||||
|
||||
if lib_selinux.found() |
||||
chfn_chsh_sources += files( |
||||
'selinux_utils.c', |
||||
'selinux_utils.h', |
||||
) |
||||
chfn_chsh_deps += [lib_selinux] |
||||
endif |
||||
|
||||
chfn_sources = files( |
||||
'chfn.c', |
||||
'logindefs.c', |
||||
'logindefs.h', |
||||
) |
||||
|
||||
test_islocal_sources = files( |
||||
'islocal.c', |
||||
) |
||||
|
||||
test_logindefs_sources = files( |
||||
'logindefs.c', |
||||
'logindefs.h', |
||||
) |
||||
|
||||
test_consoles_sources = files( |
||||
'sulogin-consoles.c', |
||||
) |
||||
|
||||
last_sources = files( |
||||
'last.c', |
||||
) + \ |
||||
monotonic_c |
||||
|
||||
login_sources = files( |
||||
'login.c', |
||||
'logindefs.c', |
||||
'logindefs.h', |
||||
) |
||||
|
||||
sulogin_sources = files( |
||||
'sulogin.c', |
||||
'sulogin-consoles.c', |
||||
'sulogin-consoles.h', |
||||
) |
@ -0,0 +1,2828 @@
|
||||
project('util-linux', 'c', |
||||
version : '2.35-rc2', |
||||
license : 'GPLv2+') |
||||
|
||||
pkgconfig = import('pkgconfig') |
||||
|
||||
libblkid_version = '1.1.0' |
||||
libblkid_date = '11-Dec-2019' |
||||
libuuid_version = '1.3.0' |
||||
libmount_version = '1.1.0' |
||||
libsmartcols_version = '1.1.0' |
||||
libfdisk_version = '1.1.0' |
||||
|
||||
prefixdir = get_option('prefix') |
||||
if not prefixdir.startswith('/') |
||||
error('Prefix is not absolute: "@0@"'.format(prefixdir)) |
||||
endif |
||||
bindir = join_paths(prefixdir, get_option('bindir')) |
||||
sbindir = join_paths(prefixdir, get_option('sbindir')) |
||||
sysconfstaticdir = join_paths(prefixdir, 'lib') |
||||
docdir = '/usr/share/doc/util-linux' |
||||
runstatedir = '/run' |
||||
execprefixdir = '/usr' |
||||
usrbin_exec_dir = join_paths(execprefixdir, 'bin') |
||||
usrsbin_exec_dir = join_paths(execprefixdir, 'sbin') |
||||
|
||||
add_project_arguments('-D_GNU_SOURCE', language : 'c') |
||||
|
||||
cc = meson.get_compiler('c') |
||||
|
||||
conf = configuration_data() |
||||
package_string = '@0@ @1@'.format(meson.project_name(), meson.project_version()) |
||||
conf.set_quoted('PACKAGE_STRING', package_string) |
||||
conf.set_quoted('PACKAGE_VERSION', meson.project_version()) |
||||
|
||||
codes = [''' {print $1} ''', |
||||
''' {sub("-.*","",$2); print $2} ''', |
||||
''' {sub("-.*","",$3); print $3 ~ /^@<:@0-9@:>@+$/ ? $3 : 0} '''] |
||||
pc_version = [] |
||||
foreach code : codes |
||||
res = run_command('bash', '-c', |
||||
'''echo '@0@' | awk -F. '@1@' '''.format( |
||||
meson.project_version(), code)) |
||||
pc_version += res.stdout().strip() |
||||
endforeach |
||||
pc_version = '.'.join(pc_version) |
||||
|
||||
conf.set_quoted('LIBBLKID_VERSION', libblkid_version) |
||||
conf.set_quoted('LIBBLKID_DATE', libblkid_date) |
||||
|
||||
conf.set('bindir', bindir) |
||||
conf.set('sbindir', sbindir) |
||||
conf.set('runstatedir', runstatedir) |
||||
conf.set('usrsbin_execdir', usrsbin_exec_dir) |
||||
conf.set('docdir', docdir) |
||||
conf.set_quoted('_PATH_SYSCONFSTATICDIR', sysconfstaticdir) |
||||
conf.set_quoted('_PATH_RUNSTATEDIR', runstatedir) |
||||
conf.set_quoted('CONFIG_ADJTIME_PATH', '/etc/adjtime') |
||||
conf.set_quoted('ADJTIME_PATH', '/etc/adjtime') # yes, both are used :( |
||||
|
||||
build_libblkid = not get_option('build-libblkid').disabled() |
||||
conf.set('HAVE_LIBBLKID', build_libblkid ? 1 : false) |
||||
summary('libblkid', build_libblkid ? 'enabled' : 'disabled', section : 'components') |
||||
|
||||
build_libuuid = not get_option('build-libuuid').disabled() |
||||
conf.set('HAVE_LIBUUID', build_libuuid ? 1 : false) |
||||
summary('libuuid', build_libuuid ? 'enabled' : 'disabled', section : 'components') |
||||
|
||||
build_libmount = not get_option('build-libmount').disabled() |
||||
conf.set('HAVE_LIBMOUNT', build_libmount ? 1 : false) |
||||
summary('libmount', build_libmount ? 'enabled' : 'disabled', section : 'components') |
||||
|
||||
build_libsmartcols = not get_option('build-libsmartcols').disabled() |
||||
conf.set('HAVE_LIBSMARTCOLS', build_libsmartcols ? 1 : false) |
||||
summary('libsmartcols', build_libsmartcols ? 'enabled' : 'disabled', section : 'components') |
||||
|
||||
build_libfdisk = not get_option('build-libfdisk').disabled() |
||||
conf.set('HAVE_LIBFDISK', build_libfdisk ? 1 : false) |
||||
summary('libfdisk', build_libfdisk ? 'enabled' : 'disabled', section : 'components') |
||||
|
||||
build_uuidd = not get_option('build-uuidd').disabled() |
||||
conf.set('HAVE_UUIDD', build_uuidd ? 1 : false) |
||||
summary('uuidd', build_uuidd ? 'enabled' : 'disabled', section : 'components') |
||||
|
||||
LINUX = host_machine.system() in ['linux'] |
||||
BSD = host_machine.system() in ['dragonfly', 'freebsd', 'netbsd', 'openbsd'] |
||||
|
||||
############################################################ |
||||
|
||||
code = ''' |
||||
#include <wchar.h> |
||||
#include <wctype.h> |
||||
#include <stdio.h> |
||||
#include <stdlib.h> |
||||
int main(void) { |
||||
wchar_t wc; |
||||
wint_t w; |
||||
w = fgetwc(stdin); |
||||
if (w == WEOF) |
||||
return 1; |
||||
wc = w; |
||||
fputwc(wc,stdout); |
||||
return 0; |
||||
} |
||||
''' |
||||
have = cc.compiles(code, name : 'wchar_t support') |
||||
if not have and get_option('widechar').enabled() |
||||
error('widechar support requested but unavailable') |
||||
endif |
||||
if get_option('ncurses').enabled() and get_option('widechar').enabled() |
||||
error('widechar support is incompatible with non-wide ncurses') |
||||
endif |
||||
conf.set('HAVE_WIDECHAR', have ? 1 : false) |
||||
|
||||
headers = ''' |
||||
byteswap.h |
||||
crypt.h |
||||
endian.h |
||||
err.h |
||||
errno.h |
||||
fcntl.h |
||||
getopt.h |
||||
inttypes.h |
||||
langinfo.h |
||||
lastlog.h |
||||
libutil.h |
||||
locale.h |
||||
mntent.h |
||||
paths.h |
||||
pty.h |
||||
shadow.h |
||||
stdint.h |
||||
stdio_ext.h |
||||
stdlib.h |
||||
string.h |
||||
strings.h |
||||
unistd.h |
||||
utmp.h |
||||
utmpx.h |
||||
asm/io.h |
||||
linux/blkzoned.h |
||||
linux/capability.h |
||||
linux/cdrom.h |
||||
linux/compiler.h |
||||
linux/falloc.h |
||||
linux/fd.h |
||||
linux/fs.h |
||||
linux/net_namespace.h |
||||
linux/raw.h |
||||
linux/securebits.h |
||||
linux/tiocl.h |
||||
linux/version.h |
||||
linux/watchdog.h |
||||
net/if.h |
||||
net/if_dl.h |
||||
netinet/in.h |
||||
security/openpam.h |
||||
security/pam_appl.h |
||||
security/pam_misc.h |
||||
sys/disk.h |
||||
sys/disklabel.h |
||||
sys/endian.h |
||||
sys/file.h |
||||
sys/io.h |
||||
sys/ioccom.h |
||||
sys/ioctl.h |
||||
sys/mkdev.h |
||||
sys/mount.h |
||||
sys/param.h |
||||
sys/prctl.h |
||||
sys/resource.h |
||||
sys/signalfd.h |
||||
sys/socket.h |
||||
sys/sockio.h |
||||
sys/stat.h |
||||
sys/swap.h |
||||
sys/syscall.h |
||||
sys/sysmacros.h |
||||
sys/time.h |
||||
sys/timex.h |
||||
sys/ttydefaults.h |
||||
sys/types.h |
||||
sys/ucred.h |
||||
sys/un.h |
||||
'''.split() |
||||
|
||||
lib_m = cc.find_library('m') |
||||
|
||||
lib_tinfo = dependency( |
||||
'tinfo', |
||||
required : get_option('tinfo')) |
||||
|
||||
lib_ncursesw = dependency( |
||||
'ncursesw', |
||||
required : get_option('ncursesw')) |
||||
if lib_ncursesw.found() |
||||
headers += ['ncursesw/ncurses.h', |
||||
'ncursesw/term.h', |
||||
'ncurses.h', |
||||
'term.h'] |
||||
lib_ncurses = disabler() |
||||
else |
||||
lib_ncurses = dependency( |
||||
'ncurses', |
||||
required : get_option('ncurses')) |
||||
headers += ['ncurses.h', |
||||
'term.h'] |
||||
endif |
||||
|
||||
conf.set('HAVE_LIBNCURSESW', lib_ncursesw.found()) |
||||
conf.set('HAVE_LIBNCURSES', lib_ncurses.found()) |
||||
conf.set('HAVE_NCURSES', lib_ncursesw.found() or lib_ncurses.found()) |
||||
|
||||
lib_slang = dependency( |
||||
'slang', |
||||
required : get_option('slang')) |
||||
if lib_slang.found() |
||||
headers += ['slang.h', |
||||
'slang/slang.h', |
||||
'slcurses.h', |
||||
'slang/slcurses.h'] |
||||
endif |
||||
conf.set('HAVE_SLANG', lib_slang.found()) |
||||
|
||||
foreach curses_libs : [lib_slang, lib_ncursesw, lib_ncurses] |
||||
if curses_libs.found() |
||||
break |
||||
endif |
||||
endforeach |
||||
|
||||
lib_z = dependency( |
||||
'zlib', |
||||
required : get_option('zlib')) |
||||
|
||||
lib_readline = dependency( |
||||
'readline', |
||||
required : get_option('readline')) |
||||
conf.set('HAVE_LIBREADLINE', lib_readline.found() ? 1 : false) |
||||
|
||||
lib_pcre = dependency( |
||||
'libpcre2-8', |
||||
required : get_option('libpcre')) |
||||
conf.set('HAVE_PCRE', lib_pcre.found() ? 1 : false) |
||||
|
||||
lib_user = dependency( |
||||
'libuser', |
||||
version : '>= 0.58', |
||||
required : get_option('libuser')) |
||||
conf.set('HAVE_LIBUSER', lib_user.found() ? 1 : false) |
||||
|
||||
lib_util = cc.find_library( |
||||
'util', |
||||
required : get_option('libutil')) |
||||
conf.set('HAVE_LIBUTIL', lib_util.found() ? 1 : false) |
||||
|
||||
lib_utempter = cc.find_library( |
||||
'utempter', |
||||
required : get_option('libutempter')) |
||||
conf.set('HAVE_LIBUTEMPTER', lib_utempter.found() ? 1 : false) |
||||
|
||||
systemd = dependency( |
||||
'systemd', |
||||
required : get_option('systemd')) |
||||
|
||||
lib_systemd = dependency( |
||||
'libsystemd', |
||||
required : get_option('systemd')) |
||||
conf.set('HAVE_LIBSYSTEMD', lib_systemd.found() ? 1 : false) |
||||
|
||||
lib_udev = dependency( |
||||
'libudev', |
||||
required : get_option('systemd')) |
||||
conf.set('HAVE_LIBUDEV', lib_udev.found() ? 1 : false) |
||||
|
||||
lib_crypt = cc.find_library('crypt') |
||||
|
||||
lib_pam = cc.find_library('pam') |
||||
if lib_pam.found() |
||||
lib_pam_misc = cc.find_library('pam_misc') |
||||
lib_pam = [lib_pam, lib_pam_misc] |
||||
endif |
||||
|
||||
lib_cryptsetup = dependency( |
||||
'libcryptsetup', |
||||
required : get_option('cryptsetup')) |
||||
conf.set('HAVE_CRYPTSETUP', lib_cryptsetup.found() ? 1 : false) |
||||
|
||||
have = cc.has_function( |
||||
'crypt_activate_by_signed_key', |
||||
dependencies : lib_cryptsetup) |
||||
conf.set('HAVE_CRYPTSETUP', have ? 1 : false) |
||||
|
||||
lib_cap_ng = dependency( |
||||
'libcap-ng') |
||||
|
||||
lib_selinux = dependency( |
||||
'libselinux', |
||||
version : '>= 2.0', |
||||
required : get_option('selinux')) |
||||
conf.set('HAVE_LIBSELINUX', lib_selinux.found() ? 1 : false) |
||||
|
||||
lib_audit = dependency( |
||||
'libaudit', |
||||
required : get_option('audit')) |
||||
conf.set('HAVE_LIBAUDIT', lib_audit.found() ? 1 : false) |
||||
|
||||
conf.set('HAVE_SMACK', not get_option('smack').disabled()) |
||||
|
||||
foreach header : headers |
||||
have = cc.has_header(header) |
||||
conf.set('HAVE_' + header.underscorify().to_upper(), have ? 1 : false) |
||||
endforeach |
||||
|
||||
header = 'linux/btrfs.h' |
||||
enable_btrfs = cc.has_header(header, |
||||
required : get_option('btrfs')) |
||||
conf.set('HAVE_' + header.underscorify().to_upper(), enable_btrfs ? 1 : false) |
||||
conf.set('HAVE_BTRFS_SUPPORT', enable_btrfs ? 1 : false) |
||||
|
||||
prefix = conf.get('HAVE_LINUX_COMPILER_H') ? '#include <linux/compiler.h>' : '' |
||||
foreach header : [ |
||||
'linux/blkpg.h', |
||||
'linux/major.h', |
||||
] |
||||
have = cc.has_header(header, |
||||
prefix : prefix) |
||||
conf.set('HAVE_' + header.underscorify().to_upper(), have ? 1 : false) |
||||
endforeach |
||||
|
||||
have = cc.has_header('sched.h') |
||||
conf.set10('HAVE_DECL_CPU_ALLOC', have) |
||||
# We get -1 if the size cannot be determined |
||||
have_cpu_set_t = cc.sizeof('cpu_set_t', prefix : '#include <sched.h>') > 0 |
||||
conf.set('HAVE_CPU_SET_T', have_cpu_set_t ? 1 : false) |
||||
|
||||
have = cc.has_header_symbol('stdlib.h', 'environ') |
||||
conf.set10('HAVE_ENVIRON_DECL', have) |
||||
|
||||
have = cc.has_header_symbol('signal.h', 'sighandler_t') |
||||
conf.set('HAVE_SIGHANDLER_T', have ? 1 : false) |
||||
|
||||
have = cc.has_header_symbol('string.h', 'strsignal') |
||||
conf.set10('HAVE_STRSIGNAL_DECL', have) |
||||
|
||||
have = cc.sizeof('union semun', prefix : '#include <sys/sem.h>') > 0 |
||||
conf.set('HAVE_UNION_SEMUN', have ? 1 : false) |
||||
|
||||
have = cc.compiles(''' |
||||
#define _GNU_SOURCE 1 |
||||
#include <langinfo.h> |
||||
int main(void) { |
||||
char *str; |
||||
str = nl_langinfo (ALTMON_1); |
||||
str = nl_langinfo (ALTMON_2); |
||||
str = nl_langinfo (ALTMON_3); |
||||
str = nl_langinfo (ALTMON_4); |
||||
str = nl_langinfo (ALTMON_5); |
||||
str = nl_langinfo (ALTMON_6); |
||||
str = nl_langinfo (ALTMON_7); |
||||
str = nl_langinfo (ALTMON_8); |
||||
str = nl_langinfo (ALTMON_9); |
||||
str = nl_langinfo (ALTMON_10); |
||||
str = nl_langinfo (ALTMON_11); |
||||
str = nl_langinfo (ALTMON_12); |
||||
return 0; |
||||
} |
||||
''', |
||||
name : 'langinfo.h defines ALTMON_x constants') |
||||
conf.set('HAVE_LANGINFO_ALTMON', have ? 1 : false) |
||||
|
||||
have = cc.compiles(''' |
||||
#define _GNU_SOURCE 1 |
||||
#include <langinfo.h> |
||||
int main(void) { |
||||
char *str; |
||||
str = nl_langinfo (_NL_ABALTMON_1); |
||||
str = nl_langinfo (_NL_ABALTMON_2); |
||||
str = nl_langinfo (_NL_ABALTMON_3); |
||||
str = nl_langinfo (_NL_ABALTMON_4); |
||||
str = nl_langinfo (_NL_ABALTMON_5); |
||||
str = nl_langinfo (_NL_ABALTMON_6); |
||||
str = nl_langinfo (_NL_ABALTMON_7); |
||||
str = nl_langinfo (_NL_ABALTMON_8); |
||||
str = nl_langinfo (_NL_ABALTMON_9); |
||||
str = nl_langinfo (_NL_ABALTMON_10); |
||||
str = nl_langinfo (_NL_ABALTMON_11); |
||||
str = nl_langinfo (_NL_ABALTMON_12); |
||||
return 0; |
||||
} |
||||
''', |
||||
name : 'langinfo.h defines _NL_ABALTMON_x constants') |
||||
conf.set('HAVE_LANGINFO_NL_ABALTMON', have ? 1 : false) |
||||
|
||||
funcs = ''' |
||||
clearenv |
||||
__fpurge |
||||
fpurge |
||||
__fpending |
||||
secure_getenv |
||||
__secure_getenv |
||||
eaccess |
||||
err |
||||
errx |
||||
explicit_bzero |
||||
fmemopen |
||||
fseeko |
||||
fsync |
||||
utimensat |
||||
getdomainname |
||||
getdtablesize |
||||
getexecname |
||||
getmntinfo |
||||
getrandom |
||||
getrlimit |
||||
getsgnam |
||||
inotify_init |
||||
jrand48 |
||||
lchown |
||||
llseek |
||||
lseek64 |
||||
mempcpy |
||||
mkostemp |
||||
nanosleep |
||||
ntp_gettime |
||||
personality |
||||
pidfd_open |
||||
pidfd_send_signal |
||||
posix_fadvise |
||||
prctl |
||||
qsort_r |
||||
rpmatch |
||||
scandirat |
||||
setprogname |
||||
setns |
||||
setresgid |
||||
setresuid |
||||
sched_setattr |
||||
sched_setscheduler |
||||
sigqueue |
||||
srandom |
||||
strnchr |
||||
strndup |
||||
strnlen |
||||
sysconf |
||||
sysinfo |
||||
swapon |
||||
swapoff |
||||
timegm |
||||
unshare |
||||
usleep |
||||
vwarnx |
||||
warn |
||||
warnx |
||||
prlimit |
||||
|
||||
openat |
||||
fstatat |
||||
unlinkat |
||||
ioperm |
||||
iopl |
||||
futimens |
||||
inotify_init1 |
||||
open_memstream |
||||
reboot |
||||
getusershell |
||||
'''.split() |
||||
|
||||
foreach func: funcs |
||||
have = cc.has_function(func) |
||||
# For autotools compatiblity, use either #define FOO 1 or #undef FOO. |
||||
# This makes little sense, but is necessary to avoid warnings about |
||||
# redefined macros from Python.h, which uses this convention. |
||||
conf.set('HAVE_' + func.to_upper(), have ? 1 : false) |
||||
|
||||
if func == 'llseek' or func == 'lseek64' |
||||
conf.set('HAVE_' + func.to_upper() + '_PROTOTYPE', have ? 1 : false) |
||||
endif |
||||
endforeach |
||||
|
||||
have = conf.get('HAVE_FUTIMENS') in [1] and conf.get('HAVE_INOTIFY_INIT1') in [1] |
||||
conf.set('AGETTY_RELOAD', have ? 1 : false) |
||||
if not have |
||||
warning('futimens or inotify_init1 not found; agetty(8) will not provide --reload functionality') |
||||
endif |
||||
|
||||
have_dirfd = (cc.has_function('dirfd') or |
||||
cc.has_header_symbol('dirent.h', 'dirfd', |
||||
prefix : '#include <sys/types.h>')) |
||||
conf.set('HAVE_DIRFD', have_dirfd ? 1 : false) |
||||
|
||||
have_ddfd = cc.has_member('DIR', 'dd_fd', |
||||
prefix : ''' |
||||
#include <sys/types.h> |
||||
#include <dirent.h> |
||||
''') |
||||
conf.set('HAVE_DECL_DDFD', have_ddfd ? 1 : false) |
||||
|
||||
have = cc.has_member('struct tm', 'tm_gmtoff', |
||||
prefix : ''' |
||||
#include <time.h> |
||||
#include <unistd.h> |
||||
''') |
||||
conf.set('HAVE_TM_GMTOFF', have ? 1 : false) |
||||
|
||||
have = cc.has_member('struct termios', 'c_line', |
||||
prefix : '#include <termios.h>') |
||||
conf.set('HAVE_STRUCT_TERMIOS_C_LINE', have ? 1 : false) |
||||
|
||||
have = cc.has_member('struct stat', 'st_mtim.tv_nsec', |
||||
prefix : '#include <sys/stat.h>') |
||||
conf.set('HAVE_STRUCT_STAT_ST_MTIM_TV_NSEC', have ? 1 : false) |
||||
|
||||
# replacement for AC_STRUCT_TIMEZONE |
||||
have = cc.has_member('struct tm', 'tm_zone', |
||||
prefix : '#include <time.h>') |
||||
conf.set('HAVE_STRUCT_TM_TM_ZONE', have ? 1 : false) |
||||
|
||||
have = cc.sizeof('tzname', prefix : '#include <time.h>') > 0 |
||||
conf.set('HAVE_DECL_TZNAME', have ? 1 : false) |
||||
|
||||
code = ''' |
||||
#include <time.h> |
||||
#if !@0@ |
||||
extern char *tzname[]; |
||||
#endif |
||||
int main(void) { |
||||
return tzname ? 0 : 1; |
||||
} |
||||
'''.format(have ? 1 : 0) |
||||
result = cc.run(code, name : 'using tzname[]') |
||||
have = result.compiled() and result.returncode() == 0 |
||||
conf.set('HAVE_TZNAME', have ? 1 : false) |
||||
|
||||
socket_libs = [] |
||||
if not cc.has_function('socket') |
||||
socket_libs += cc.find_library('socket', required : true) |
||||
have = cc.has_function('socket', |
||||
dependencies : socket_libs) |
||||
if not have |
||||
error('socket() function not available') |
||||
endif |
||||
endif |
||||
|
||||
realtime_libs = [] |
||||
have = cc.has_function('clock_gettime') |
||||
if not have |
||||
realtime_libs += cc.find_library('rt', required : true) |
||||
have = cc.has_function('clock_gettime', |
||||
dependencies : realtime_libs) |
||||
endif |
||||
conf.set('HAVE_CLOCK_GETTIME', have_dirfd ? 1 : false) |
||||
|
||||
thread_libs = dependency('threads') |
||||
|
||||
have = cc.has_function('timer_create') |
||||
if not have |
||||
realtime_libs = cc.find_library('rt', required : true) |
||||
have = cc.has_function('timer_create', |
||||
dependencies : realtime_libs) |
||||
if not have |
||||
realtime_libs += thread_libs |
||||
have = cc.has_function('timer_create', |
||||
dependencies : realtime_libs) |
||||
endif |
||||
endif |
||||
conf.set('HAVE_TIMER_CREATE', have ? 1 : false) |
||||
if not have |
||||
have = cc.has_function('setitimer') |
||||
conf.set('HAVE_SETITIMER', have ? 1 : false) |
||||
endif |
||||
|
||||
rtas_libs = cc.find_library('rtas', required : false) |
||||
conf.set('HAVE_LIBRTAS', rtas_libs.found() ? 1 : false) |
||||
|
||||
math_libs = [] |
||||
if not cc.has_function('isnan') |
||||
lib = cc.find_library('m', required : true) |
||||
if (cc.has_function('isnan', dependencies : lib) and |
||||
cc.has_function('__isnan', dependencies : lib)) |
||||
math_libs += lib |
||||
endif |
||||
endif |
||||
|
||||
have = cc.has_header_symbol('errno.h', 'program_invocation_short_name', |
||||
args : '-D_GNU_SOURCE') |
||||
conf.set('HAVE_PROGRAM_INVOCATION_SHORT_NAME', have ? 1 : false) |
||||
|
||||
code = ''' |
||||
extern char *__progname; |
||||
int main(void) { |
||||
return (*__progname != 0); |
||||
} |
||||
''' |
||||
result = cc.run(code, name : 'using __progname') |
||||
have = result.compiled() and result.returncode() == 0 |
||||
conf.set('HAVE___PROGNAME', have ? 1 : false) |
||||
|
||||
code = ''' |
||||
#include <stdio.h> |
||||
#include <stdlib.h> |
||||
int main() |
||||
{ |
||||
int i; |
||||
int rc = 1; |
||||
char *s; |
||||
i = sscanf("x", "@0@", &s); |
||||
if (i == 1 && *s == 'x') |
||||
rc = 0; |
||||
free(s); |
||||
return rc; |
||||
} |
||||
''' |
||||
have = false |
||||
foreach mod : ['ms', 'as'] |
||||
if not have |
||||
result = cc.run(code.format('%' + mod), name : 'sscanf with %' + mod) |
||||
have = result.compiled() and result.returncode() == 0 |
||||
conf.set('HAVE_SCANF_@0@_MODIFIER'.format(mod.to_upper()), have ? 1 : false) |
||||
endif |
||||
endforeach |
||||
# XXX: handle cross cross-compilation w/o ability to run binaries: |
||||
# meson.is_cross_build() and not meson.has_exe_wrapper() |
||||
|
||||
build_plymouth_support = get_option('build-plymouth-support') |
||||
have_tiocglcktrmios = cc.has_header_symbol( |
||||
'sys/ioctl.h', 'TIOCGLCKTRMIOS', |
||||
required : build_plymouth_support.enabled()) |
||||
have_sock_cloexec = cc.has_header_symbol( |
||||
'sys/socket.h', 'SOCK_CLOEXEC', |
||||
prefix : '#include <sys/types.h>', |
||||
required : build_plymouth_support.enabled()) |
||||
have_sock_nonblock = cc.has_header_symbol( |
||||
'sys/socket.h', 'SOCK_NONBLOCK', |
||||
prefix : '#include <sys/types.h>', |
||||
required : build_plymouth_support.enabled()) |
||||
have_so_passcred = cc.has_header_symbol( |
||||
'sys/socket.h', 'SO_PASSCRED', |
||||
prefix : '#include <sys/types.h>', |
||||
required : build_plymouth_support.enabled()) |
||||
|
||||
build_plymouth_support = (not build_plymouth_support.disabled() and |
||||
have_tiocglcktrmios and |
||||
have_sock_cloexec and |
||||
have_sock_nonblock and |
||||
have_so_passcred) |
||||
conf.set('ENABLE_PLYMOUTH_SUPPORT', build_plymouth_support ? 1 : false) |
||||
summary('plymouth support', |
||||
build_plymouth_support ? 'enabled' : 'disabled', |
||||
section : 'components') |
||||
|
||||
# check for valid fallocate() function |
||||
# with 32 bits glibc 2.10, fallocate() exists but not fallocate64() |
||||
# when _FILE_OFFSET_BITS==64, fallocate() is redirect to fallocate64() |
||||
# and program can't be linked. |
||||
code = ''' |
||||
#define _GNU_SOURCE |
||||
#include <unistd.h> |
||||
#include <fcntl.h> |
||||
|
||||
int main(void) { |
||||