menuconfig BR2_PACKAGE_UTIL_LINUX
	bool "util-linux"
	depends on BR2_USE_WCHAR
	select BR2_PACKAGE_GETTEXT if BR2_NEEDS_GETTEXT_IF_LOCALE
	help
	  Various useful/essential linux libraries and utilities.

	  Things like mkfs, mkswap, swapon, fdisk, mount, dmesg, etc...

	  http://www.kernel.org/pub/linux/utils/util-linux/

if BR2_PACKAGE_UTIL_LINUX

config BR2_PACKAGE_UTIL_LINUX_LIBBLKID
	select BR2_PACKAGE_UTIL_LINUX_LIBUUID
	depends on BR2_USE_MMU # fork
	bool "libblkid"
	help
	  Install libblkid.

config BR2_PACKAGE_UTIL_LINUX_LIBMOUNT
	select BR2_PACKAGE_UTIL_LINUX_LIBBLKID
	depends on BR2_USE_MMU # util-linux/libblkid
	bool "libmount"
	help
	  Install libmount.

config BR2_PACKAGE_UTIL_LINUX_LIBSMARTCOLS
	bool "libsmartcols"
	depends on BR2_USE_MMU # fork
	help
	  Install libsmartcols.

config BR2_PACKAGE_UTIL_LINUX_LIBUUID
	bool "libuuid"
	help
	  Install libuuid.

config BR2_PACKAGE_UTIL_LINUX_BINARIES
	bool "install utilities"
	depends on BR2_USE_MMU # fork()
	select BR2_PACKAGE_UTIL_LINUX_LIBBLKID
	select BR2_PACKAGE_UTIL_LINUX_LIBMOUNT
	select BR2_PACKAGE_UTIL_LINUX_LIBSMARTCOLS
	select BR2_PACKAGE_UTIL_LINUX_LIBUUID
	help
	  Install the basic set of util-linux binaries.

if BR2_PACKAGE_UTIL_LINUX_BINARIES

config BR2_PACKAGE_UTIL_LINUX_AGETTY
	bool "agetty"
	help
	  Alternative linux getty

config BR2_PACKAGE_UTIL_LINUX_BFS
	bool "bfs"
	help
	  SCO bfs filesystem support

config BR2_PACKAGE_UTIL_LINUX_CHFN_CHSH
	bool "chfn/chsh"
	depends on (BR2_ENABLE_LOCALE && BR2_USE_WCHAR) # linux-pam
	depends on !BR2_STATIC_LIBS
	depends on !BR2_TOOLCHAIN_USES_MUSL # linux-pam
	select BR2_PACKAGE_LINUX_PAM
	help
	  Change login shell, real user name and information

comment "chfn/chsh needs a uClibc or (e)glibc toolchain w/ wchar, locale, dynamic library"
	depends on !(BR2_ENABLE_LOCALE && BR2_USE_WCHAR) \
		|| BR2_STATIC_LIBS || BR2_TOOLCHAIN_USES_MUSL

config BR2_PACKAGE_UTIL_LINUX_CRAMFS
	bool "cramfs utilities"
	select BR2_PACKAGE_ZLIB
	help
	  Build fsck.cramfs and mkfs.cramfs

config BR2_PACKAGE_UTIL_LINUX_EJECT
	bool "eject"
	help
	  Eject removable media

config BR2_PACKAGE_UTIL_LINUX_FALLOCATE
	bool "fallocate"
	help
	  Preallocate space to a file

config BR2_PACKAGE_UTIL_LINUX_FDFORMAT
	bool "fdformat"
	help
	  Low-level format a floppy disk

config BR2_PACKAGE_UTIL_LINUX_FINDFS
	bool "findfs"
	help
	  Find a filesystem by label or UUID

config BR2_PACKAGE_UTIL_LINUX_FSCK
	bool "fsck"
	help
	  Check and repair a linux filesystem

config BR2_PACKAGE_UTIL_LINUX_HWCLOCK
	bool "hwclock"
	help
	  Query or set the hardware clock (RTC)

config BR2_PACKAGE_UTIL_LINUX_KILL
	bool "kill"
	help
	  Send a signal to a process

config BR2_PACKAGE_UTIL_LINUX_LAST
	bool "last"
	help
	  Show a listing of last logged in users

config BR2_PACKAGE_UTIL_LINUX_LINE
	bool "line"
	help
	  Read one line

config BR2_PACKAGE_UTIL_LINUX_LOGIN_UTILS
	bool "login utilities"
	depends on (BR2_ENABLE_LOCALE && BR2_USE_WCHAR) # linux-pam
	depends on !BR2_STATIC_LIBS
	depends on !BR2_TOOLCHAIN_USES_MUSL # linux-pam
	select BR2_PACKAGE_LINUX_PAM
	help
	  Build login utilities (last, login, su, sulogin)

comment "login utilities needs a uClibc or (e)glibc toolchain w/ wchar, locale, dynamic library"
	depends on !(BR2_ENABLE_LOCALE && BR2_USE_WCHAR) \
		|| BR2_STATIC_LIBS || BR2_TOOLCHAIN_USES_MUSL

config BR2_PACKAGE_UTIL_LINUX_LOSETUP
	bool "losetup"
	help
	  Set up and control loop devices

config BR2_PACKAGE_UTIL_LINUX_MESG
	bool "mesg"
	help
	  Control write access to your terminal

config BR2_PACKAGE_UTIL_LINUX_MINIX
	bool "minix"
	help
	  Minix filesystem support

config BR2_PACKAGE_UTIL_LINUX_MORE
	bool "more"
	select BR2_PACKAGE_NCURSES
	help
	  File perusal filter for crt viewing

config BR2_PACKAGE_UTIL_LINUX_MOUNT
	bool "mount/umount"
	help
	  Mount/unmount filesystems

config BR2_PACKAGE_UTIL_LINUX_MOUNTPOINT
	bool "mountpoint"
	help
	  See if a directory is a mountpoint

config BR2_PACKAGE_UTIL_LINUX_NEWGRP
	bool "newgrp"
	help
	  Log in to a new group

config BR2_PACKAGE_UTIL_LINUX_NOLOGIN
	bool "nologin"
	help
	  Politely refuse a login

config BR2_PACKAGE_UTIL_LINUX_NSENTER
	bool "nsenter"
	depends on BR2_TOOLCHAIN_HEADERS_AT_LEAST_3_0
	help
	  Enter the namespaces of another process.

comment "nsenter needs a toolchain w/ headers >= 3.0"
	depends on !BR2_TOOLCHAIN_HEADERS_AT_LEAST_3_0

config BR2_PACKAGE_UTIL_LINUX_PARTX
	bool "partition utilities"
	help
	  Partition tools (addpart, delpart, partx)

config BR2_PACKAGE_UTIL_LINUX_PIVOT_ROOT
	bool "pivot_root"
	help
	  Change the root filesystem

config BR2_PACKAGE_UTIL_LINUX_RAW
	bool "raw"
	help
	  Build a linux raw character device

config BR2_PACKAGE_UTIL_LINUX_RENAME
	bool "rename"
	help
	  Rename files

config BR2_PACKAGE_UTIL_LINUX_RESET
	bool "reset"
	help
	  Reset the terminal

config BR2_PACKAGE_UTIL_LINUX_SCHEDUTILS
	bool "schedutils"
	help
	  Scheduling utilities (chrt, ionice, taskset)

config BR2_PACKAGE_UTIL_LINUX_SETPRIV
	bool "setpriv"
	depends on !BR2_TOOLCHAIN_EXTERNAL_CODESOURCERY_NIOSII # libcap-ng
	select BR2_PACKAGE_LIBCAP_NG
	help
	  Run a program with different Linux privilege settings

config BR2_PACKAGE_UTIL_LINUX_SETTERM
	bool "setterm"
	select BR2_PACKAGE_NCURSES
	help
	  Set terminal attributes

config BR2_PACKAGE_UTIL_LINUX_SWITCH_ROOT
	bool "switch_root"
	help
	  Switch to another filesystem as the root of the mount tree

config BR2_PACKAGE_UTIL_LINUX_TUNELP
	bool "tunelp"
	select BR2_PACKAGE_NCURSES
	help
	  Set various parameters for the lp device

config BR2_PACKAGE_UTIL_LINUX_UL
	bool "ul"
	select BR2_PACKAGE_NCURSES
	help
	  Do underlining

config BR2_PACKAGE_UTIL_LINUX_UNSHARE
	bool "unshare"
	help
	  Run program with some namespaces unshared from parent

config BR2_PACKAGE_UTIL_LINUX_UTMPDUMP
	bool "utmpdump"
	help
	  Dump UTMP and WTMP files in raw format

config BR2_PACKAGE_UTIL_LINUX_UUIDD
	bool "uuidd"
	help
	  UUID generation daemon

config BR2_PACKAGE_UTIL_LINUX_VIPW
	bool "vipw"
	help
	  Edit the password, group, shadow-password or shadow-group file

config BR2_PACKAGE_UTIL_LINUX_WALL
	bool "wall"
	help
	  Send a message to everybody's terminal

config BR2_PACKAGE_UTIL_LINUX_WDCTL
	bool "wdctl"
	help
	  Shows hardware watchdog status

config BR2_PACKAGE_UTIL_LINUX_WRITE
	bool "write"
	help
	  Send a message to another user

config BR2_PACKAGE_UTIL_LINUX_ZRAMCTL
	bool "zramctl"
	help
	  Set up and control zram devices

endif

endif

comment "util-linux needs a toolchain w/ wchar"
	depends on !BR2_USE_WCHAR
