menuconfig BR2_PACKAGE_UTIL_LINUX
	bool "util-linux"
	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
	bool "libblkid"
	depends on BR2_USE_MMU # fork()
	select BR2_PACKAGE_UTIL_LINUX_LIBUUID
	help
	  Install libblkid.

config BR2_PACKAGE_UTIL_LINUX_LIBFDISK
	bool "libfdisk"
	depends on BR2_USE_MMU # fork()
	select BR2_PACKAGE_UTIL_LINUX_LIBBLKID
	select BR2_PACKAGE_UTIL_LINUX_LIBUUID
	help
	  Install libfdisk.

config BR2_PACKAGE_UTIL_LINUX_LIBMOUNT
	bool "libmount"
	depends on BR2_USE_MMU # fork()
	select BR2_PACKAGE_UTIL_LINUX_LIBBLKID
	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 "basic set"
	depends on BR2_USE_MMU # fork()
	select BR2_PACKAGE_UTIL_LINUX_LIBBLKID
	select BR2_PACKAGE_UTIL_LINUX_LIBMOUNT
	select BR2_PACKAGE_UTIL_LINUX_LIBFDISK
	select BR2_PACKAGE_UTIL_LINUX_LIBSMARTCOLS
	select BR2_PACKAGE_UTIL_LINUX_LIBUUID
	help
	  Install the basic set of util-linux binaries.

	  blkdiscard, blkid, blockdev, chcpu, col, colcrt, colrm,
	  column, ctrlaltdel, dmesg, fdisk, fincore, findfs, findmnt,
	  flock, fsfreeze, fstrim, getopt, hexdump, ipcmk, isosize,
	  ldattach, look, lsblk, lscpu, lsipc, lslocks, lsns, mcookie,
	  mkfs, mkswap, namei, prlimit, readprofile, renice, rev,
	  rtcwake, script, scriptreplay, setarch, setsid, sfdisk,
	  swaplabel, swapoff, swapon, uuidgen, uuidparse, whereis,
	  wipefs

	  The setarch utility also installs architecture-specific
	  symlinks like linux32, linux64, uname26, i386 and x86_64.

config BR2_PACKAGE_UTIL_LINUX_AGETTY
	bool "agetty"
	depends on BR2_USE_MMU # fork()
	help
	  Alternative linux getty

config BR2_PACKAGE_UTIL_LINUX_BFS
	bool "bfs"
	help
	  SCO bfs filesystem support

config BR2_PACKAGE_UTIL_LINUX_CAL
	bool "cal"
	help
	  Display a calendar, or some part of it

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
	depends on BR2_USE_MMU # linux-pam
	select BR2_PACKAGE_LINUX_PAM
	help
	  Change login shell, real user name and information

comment "chfn/chsh needs a uClibc or 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_CHMEM
	bool "chmem"
	help
	  Sets a particular size or range of memory online or offline

config BR2_PACKAGE_UTIL_LINUX_CRAMFS
	bool "cramfs utilities"
	select BR2_PACKAGE_ZLIB
	help
	  Utilities for compressed ROM file system (fsck.cramfs,
	  mkfs.cramfs)

config BR2_PACKAGE_UTIL_LINUX_EJECT
	bool "eject"
	depends on BR2_USE_MMU # fork()
	select BR2_PACKAGE_UTIL_LINUX_LIBBLKID
	select BR2_PACKAGE_UTIL_LINUX_LIBMOUNT
	select BR2_PACKAGE_UTIL_LINUX_LIBUUID
	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_FSCK
	bool "fsck"
	depends on BR2_USE_MMU # fork()
	select BR2_PACKAGE_UTIL_LINUX_LIBBLKID
	select BR2_PACKAGE_UTIL_LINUX_LIBMOUNT
	select BR2_PACKAGE_UTIL_LINUX_LIBUUID
	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_IPCRM
	bool "ipcrm"
	help
	  Remove certain IPC resources

config BR2_PACKAGE_UTIL_LINUX_IPCS
	bool "ipcs"
	help
	  Show information on IPC facilities

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_LOGGER
	bool "logger"
	help
	  Enter messages into the system log

config BR2_PACKAGE_UTIL_LINUX_LOGIN
	bool "login"
	depends on BR2_ENABLE_LOCALE # linux-pam
	depends on BR2_USE_WCHAR # linux-pam
	depends on !BR2_STATIC_LIBS # linux-pam
	depends on !BR2_TOOLCHAIN_USES_MUSL # linux-pam
	depends on BR2_USE_MMU # fork(), linux-pam
	select BR2_PACKAGE_LINUX_PAM
	help
	  Begin a session on the system

comment "login needs a uClibc or 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"
	depends on BR2_USE_MMU # libsmartcols
	select BR2_PACKAGE_UTIL_LINUX_LIBSMARTCOLS
	help
	  Set up and control loop devices

config BR2_PACKAGE_UTIL_LINUX_LSLOGINS
	bool "lslogins"
	depends on BR2_USE_MMU # libsmartcols
	select BR2_PACKAGE_UTIL_LINUX_LIBSMARTCOLS
	help
	  Display information about known users in the system

config BR2_PACKAGE_UTIL_LINUX_LSMEM
	bool "lsmem"
	depends on BR2_USE_MMU # libsmartcols
	select BR2_PACKAGE_UTIL_LINUX_LIBSMARTCOLS
	help
	  List the ranges of available memory with their online status

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"
	depends on BR2_USE_MMU # fork()
	select BR2_PACKAGE_NCURSES
	help
	  File perusal filter for crt viewing

config BR2_PACKAGE_UTIL_LINUX_MOUNT
	bool "mount/umount"
	depends on BR2_USE_MMU # fork()
	select BR2_PACKAGE_UTIL_LINUX_LIBBLKID
	select BR2_PACKAGE_UTIL_LINUX_LIBMOUNT
	select BR2_PACKAGE_UTIL_LINUX_LIBUUID
	help
	  Mount/unmount filesystems

config BR2_PACKAGE_UTIL_LINUX_MOUNTPOINT
	bool "mountpoint"
	depends on BR2_USE_MMU # fork()
	select BR2_PACKAGE_UTIL_LINUX_LIBBLKID
	select BR2_PACKAGE_UTIL_LINUX_LIBMOUNT
	select BR2_PACKAGE_UTIL_LINUX_LIBUUID
	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_USE_MMU # fork()
	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_PG
	bool "pg"
	depends on BR2_USE_MMU # fork()
	select BR2_PACKAGE_NCURSES
	help
	  Browse pagewise through text files

config BR2_PACKAGE_UTIL_LINUX_PARTX
	bool "partition utilities"
	depends on BR2_USE_MMU # fork()
	select BR2_PACKAGE_UTIL_LINUX_LIBBLKID
	select BR2_PACKAGE_UTIL_LINUX_LIBSMARTCOLS
	select BR2_PACKAGE_UTIL_LINUX_LIBUUID
	help
	  Partition utilities (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_RFKILL
	bool "rfkill"
	depends on BR2_USE_MMU # libsmartcols
	select BR2_PACKAGE_UTIL_LINUX_LIBSMARTCOLS
	help
	  Tool for enabling and disabling wireless devices. This new
	  implementation is based upon, and backward compatible with,
	  the original rfkill from Johannes Berg and Marcel Holtmann.

config BR2_PACKAGE_UTIL_LINUX_RUNUSER
	bool "runuser"
	depends on (BR2_ENABLE_LOCALE && BR2_USE_WCHAR) # linux-pam
	depends on !BR2_STATIC_LIBS
	depends on !BR2_TOOLCHAIN_USES_MUSL # linux-pam
	depends on BR2_USE_MMU # fork(), linux-pam
	select BR2_PACKAGE_LINUX_PAM
	help
	  Run a command with substitute user and group ID (does not need
	  to ask for a password, because it may be executed by the root
	  user only)

comment "runuser needs a uClibc or 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_SCHEDUTILS
	bool "scheduling utilities"
	help
	  Scheduling utilities (chrt, ionice, taskset)

config BR2_PACKAGE_UTIL_LINUX_SETPRIV
	bool "setpriv"
	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_SU
	bool "su"
	depends on (BR2_ENABLE_LOCALE && BR2_USE_WCHAR) # linux-pam
	depends on !BR2_STATIC_LIBS
	depends on !BR2_TOOLCHAIN_USES_MUSL # linux-pam
	depends on BR2_USE_MMU # fork(), linux-pam
	select BR2_PACKAGE_LINUX_PAM
	help
	  Run a command with substitute user and group ID

comment "su needs a uClibc or 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_SULOGIN
	bool "sulogin"
	depends on BR2_USE_MMU # fork()
	help
	  Single-user login

config BR2_PACKAGE_UTIL_LINUX_SWITCH_ROOT
	bool "switch_root"
	depends on BR2_USE_MMU # fork()
	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"
	depends on BR2_USE_MMU # fork()
	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"
	depends on BR2_USE_MMU # fork()
	select BR2_PACKAGE_UTIL_LINUX_LIBUUID
	help
	  UUID generation daemon

config BR2_PACKAGE_UTIL_LINUX_VIPW
	bool "vipw"
	depends on BR2_USE_MMU # fork()
	help
	  Edit the password, group, shadow-password or shadow-group file

config BR2_PACKAGE_UTIL_LINUX_WALL
	bool "wall"
	depends on BR2_USE_MMU # fork()
	help
	  Send a message to everybody's terminal

config BR2_PACKAGE_UTIL_LINUX_WDCTL
	bool "wdctl"
	depends on BR2_USE_MMU # libsmartcols
	select BR2_PACKAGE_UTIL_LINUX_LIBSMARTCOLS
	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"
	depends on BR2_USE_MMU # libsmartcols
	select BR2_PACKAGE_UTIL_LINUX_LIBSMARTCOLS
	help
	  Set up and control zram devices

endif
