#
# For a description of the syntax of this configuration file,
# see scripts/kbuild/config-language.txt.
#

menu "Coreutils"

config BASENAME
	bool "basename"
	default n
	help
	  basename is used to strip the directory and suffix from filenames,
	  leaving just the filename itself. Enable this option if you wish
	  to enable the 'basename' utility.

config CAL
	bool "cal"
	default n
	help
	  cal is used to display a monthly calender.

config CAT
	bool "cat"
	default n
	help
	  cat is used to concatenate files and print them to the standard
	  output. Enable this option if you wish to enable the 'cat' utility.

config CATV
	bool "catv"
	default n
	help
	  Display nonprinting characters as escape sequences (like some
	  implementations' cat -v option).

config CHGRP
	bool "chgrp"
	default n
	help
	  chgrp is used to change the group ownership of files.

config CHMOD
	bool "chmod"
	default n
	help
	  chmod is used to change the access permission of files.

config CHOWN
	bool "chown"
	default n
	help
	  chown is used to change the user and/or group ownership
	  of files.

config CHROOT
	bool "chroot"
	default n
	help
	  chroot is used to change the root directory and run a command.
	  The default command is `/bin/sh'.

config CKSUM
	bool "cksum"
	default n
	help
	  cksum is used to calculate the CRC32 checksum of a file.

config COMM
	bool "comm"
	default n
	help
	  comm is used to compare two files line by line and return
	  a three-column output.

config CP
	bool "cp"
	default n
	help
	  cp is used to copy files and directories.

config CUT
	bool "cut"
	default n
	help
	  cut is used to print selected parts of lines from
	  each file to stdout.

config DATE
	bool "date"
	default n
	help
	  date is used to set the system date or display the
	  current time in the given format.

config FEATURE_DATE_ISOFMT
	bool "Enable ISO date format output (-I)"
	default y
	depends on DATE
	help
	  Enable option (-I) to output an ISO-8601 compliant
	  date/time string.

config DD
	bool "dd"
	default n
	help
	  dd copies a file (from standard input to standard output,
	  by default) using specific input and output blocksizes,
	  while optionally performing conversions on it.

config FEATURE_DD_SIGNAL_HANDLING
	bool "Enable DD signal handling for status reporting"
	default y
	depends on DD
	help
	  sending a SIGUSR1 signal to a running `dd' process makes it
	  print to standard error the number of records read and written
	  so far, then to resume copying.

	  $ dd if=/dev/zero of=/dev/null&
	  $ pid=$! kill -USR1 $pid; sleep 1; kill $pid
	  10899206+0 records in 10899206+0 records out

config FEATURE_DD_IBS_OBS
	bool "Enable ibs, obs and conv options"
	default n
	depends on DD
	help
	  Enables support for writing a certain number of bytes in and out,
	  at a time, and performing conversions on the data stream.

config DF
	bool "df"
	default n
	help
	  df reports the amount of disk space used and available
	  on filesystems.

config FEATURE_DF_FANCY
	bool "Enable -a, -i, -B"
	default n
	depends on DF
	help
	  This option enables -a, -i and -B.

config DIRNAME
	bool "dirname"
	default n
	help
	  dirname is used to strip a non-directory suffix from
	  a file name.

config DOS2UNIX
	bool "dos2unix/unix2dos"
	default n
	help
	  dos2unix is used to convert a text file from DOS format to
	  UNIX format, and vice versa.

config UNIX2DOS
	bool
	default y
	depends on DOS2UNIX
	help
	  unix2dos is used to convert a text file from UNIX format to
	  DOS format, and vice versa.

config DU
	bool "du (default blocksize of 512 bytes)"
	default n
	help
	  du is used to report the amount of disk space used
	  for specified files.

config FEATURE_DU_DEFAULT_BLOCKSIZE_1K
	bool "Use a default blocksize of 1024 bytes (1K)"
	default y
	depends on DU
	help
	  Use a blocksize of (1K) instead of the default 512b.

config ECHO
	bool "echo (basic SuSv3 version taking no options)"
	default n
	help
	  echo is used to print a specified string to stdout.

# this entry also appears in shell/Config.in, next to the echo builtin
config FEATURE_FANCY_ECHO
	bool "Enable echo options (-n and -e)"
	default y
	depends on ECHO || ASH_BUILTIN_ECHO || HUSH
	help
	  This adds options (-n and -e) to echo.

config ENV
	bool "env"
	default n
	help
	  env is used to set an environment variable and run
	  a command; without options it displays the current
	  environment.

config FEATURE_ENV_LONG_OPTIONS
	bool "Enable long options"
	default n
	depends on ENV && LONG_OPTS
	help
	  Support long options for the env applet.

config EXPAND
	bool "expand"
	default n
	help
	  By default, convert all tabs to spaces.

config FEATURE_EXPAND_LONG_OPTIONS
	bool "Enable long options"
	default n
	depends on EXPAND && LONG_OPTS
	help
	  Support long options for the expand applet.

config EXPR
	bool "expr"
	default n
	help
	  expr is used to calculate numbers and print the result
	  to standard output.

config EXPR_MATH_SUPPORT_64
	bool "Extend Posix numbers support to 64 bit"
	default n
	depends on EXPR
	help
	  Enable 64-bit math support in the expr applet. This will make
	  the applet slightly larger, but will allow computation with very
	  large numbers.

config FALSE
	bool "false"
	default n
	help
	  false returns an exit code of FALSE (1).

config FOLD
	bool "fold"
	default n
	help
	  Wrap text to fit a specific width.

config FSYNC
	bool "fsync"
	default n
	help
	  fsync is used to flush file-related cached blocks to disk.

config HEAD
	bool "head"
	default n
	help
	  head is used to print the first specified number of lines
	  from files.

config FEATURE_FANCY_HEAD
	bool "Enable head options (-c, -q, and -v)"
	default n
	depends on HEAD
	help
	  This enables the head options (-c, -q, and -v).

config HOSTID
	bool "hostid"
	default n
	help
	  hostid prints the numeric identifier (in hexadecimal) for
	  the current host.

config ID
	bool "id"
	default n
	help
	  id displays the current user and group ID names.

config INSTALL
	bool "install"
	default n
	help
	  Copy files and set attributes.

config FEATURE_INSTALL_LONG_OPTIONS
	bool "Enable long options"
	default n
	depends on INSTALL && LONG_OPTS
	help
	  Support long options for the install applet.

config LENGTH
	bool "length"
	default n
	help
	  length is used to print out the length of a specified string.

config LN
	bool "ln"
	default n
	help
	  ln is used to create hard or soft links between files.

config LOGNAME
	bool "logname"
	default n
	help
	  logname is used to print the current user's login name.

config LS
	bool "ls"
	default n
	help
	  ls is used to list the contents of directories.

config FEATURE_LS_FILETYPES
	bool "Enable filetyping options (-p and -F)"
	default y
	depends on LS
	help
	  Enable the ls options (-p and -F).

config FEATURE_LS_FOLLOWLINKS
	bool "Enable symlinks dereferencing (-L)"
	default y
	depends on LS
	help
	  Enable the ls option (-L).

config FEATURE_LS_RECURSIVE
	bool "Enable recursion (-R)"
	default y
	depends on LS
	help
	  Enable the ls option (-R).

config FEATURE_LS_SORTFILES
	bool "Sort the file names"
	default y
	depends on LS
	help
	  Allow ls to sort file names alphabetically.

config FEATURE_LS_TIMESTAMPS
	bool "Show file timestamps"
	default y
	depends on LS
	help
	  Allow ls to display timestamps for files.

config FEATURE_LS_USERNAME
	bool "Show username/groupnames"
	default y
	depends on LS
	help
	  Allow ls to display username/groupname for files.

config FEATURE_LS_COLOR
	bool "Allow use of color to identify file types"
	default y
	depends on LS && LONG_OPTS
	help
	  This enables the --color option to ls.

config FEATURE_LS_COLOR_IS_DEFAULT
	bool "Produce colored ls output by default"
	default n
	depends on FEATURE_LS_COLOR
	help
	  Saying yes here will turn coloring on by default,
	  even if no "--color" option is given to the ls command.
	  This is not recommended, since the colors are not
	  configurable, and the output may not be legible on
	  many output screens.

config MD5SUM
	bool "md5sum"
	default n
	help
	  md5sum is used to print or check MD5 checksums.

config MKDIR
	bool "mkdir"
	default n
	help
	  mkdir is used to create directories with the specified names.

config FEATURE_MKDIR_LONG_OPTIONS
	bool "Enable long options"
	default n
	depends on MKDIR && LONG_OPTS
	help
	  Support long options for the mkdir applet.

config MKFIFO
	bool "mkfifo"
	default n
	help
	  mkfifo is used to create FIFOs (named pipes).
	  The `mknod' program can also create FIFOs.

config MKNOD
	bool "mknod"
	default n
	help
	  mknod is used to create FIFOs or block/character special
	  files with the specified names.

config MV
	bool "mv"
	default n
	help
	  mv is used to move or rename files or directories.

config FEATURE_MV_LONG_OPTIONS
	bool "Enable long options"
	default n
	depends on MV && LONG_OPTS
	help
	  Support long options for the mv applet.

config NICE
	bool "nice"
	default n
	help
	  nice runs a program with modified scheduling priority.

config NOHUP
	bool "nohup"
	default n
	help
	  run a command immune to hangups, with output to a non-tty.

config OD
	bool "od"
	default n
	help
	  od is used to dump binary files in octal and other formats.

config PRINTENV
	bool "printenv"
	default n
	help
	  printenv is used to print all or part of environment.

config PRINTF
	bool "printf"
	default n
	help
	  printf is used to format and print specified strings.
	  It's similar to `echo' except it has more options.

config PWD
	bool "pwd"
	default n
	help
	  pwd is used to print the current directory.

config READLINK
	bool "readlink"
	default n
	help
	  This program reads a symbolic link and returns the name
	  of the file it points to

config FEATURE_READLINK_FOLLOW
	bool "Enable canonicalization by following all symlinks (-f)"
	default n
	depends on READLINK
	help
	  Enable the readlink option (-f).

config REALPATH
	bool "realpath"
	default n
	help
	  Return the canonicalized absolute pathname.
	  This isn't provided by GNU shellutils, but where else does it belong.

config RM
	bool "rm"
	default n
	help
	  rm is used to remove files or directories.

config RMDIR
	bool "rmdir"
	default n
	help
	  rmdir is used to remove empty directories.

config FEATURE_RMDIR_LONG_OPTIONS
	bool "Enable long options"
	default n
	depends on RMDIR && LONG_OPTS
	help
	  Support long options for the rmdir applet, including
	  --ignore-fail-on-non-empty for compatibility with GNU rmdir.

config SEQ
	bool "seq"
	default n
	help
	  print a sequence of numbers

config SHA1SUM
	bool "sha1sum"
	default n
	help
	  Compute and check SHA1 message digest

config SHA256SUM
	bool "sha256sum"
	default n
	help
	  Compute and check SHA256 message digest

config SHA512SUM
	bool "sha512sum"
	default n
	help
	  Compute and check SHA512 message digest

config SLEEP
	bool "sleep"
	default n
	help
	  sleep is used to pause for a specified number of seconds.
	  It comes in 3 versions:
	  - small: takes one integer parameter
	  - fancy: takes multiple integer arguments with suffixes:
	    sleep 1d 2h 3m 15s
	  - fancy with fractional numbers:
	    sleep 2.3s 4.5h sleeps for 16202.3 seconds
	  Last one is "the most compatible" with coreutils sleep,
	  but it adds around 1k of code.

config FEATURE_FANCY_SLEEP
	bool "Enable multiple arguments and s/m/h/d suffixes"
	default n
	depends on SLEEP
	help
	  Allow sleep to pause for specified minutes, hours, and days.

config FEATURE_FLOAT_SLEEP
	bool "Enable fractional arguments"
	default n
	depends on FEATURE_FANCY_SLEEP
	help
	  Allow for fractional numeric parameters.

config SORT
	bool "sort"
	default n
	help
	  sort is used to sort lines of text in specified files.

config FEATURE_SORT_BIG
	bool "Full SuSv3 compliant sort (support -ktcsbdfiozgM)"
	default y
	depends on SORT
	help
	  Without this, sort only supports -r, -u, and an integer version
	  of -n. Selecting this adds sort keys, floating point support, and
	  more. This adds a little over 3k to a nonstatic build on x86.

	  The SuSv3 sort standard is available at:
	  http://www.opengroup.org/onlinepubs/007904975/utilities/sort.html

config SPLIT
	bool "split"
	default n
	help
	  split a file into pieces.

config FEATURE_SPLIT_FANCY
	bool "Fancy extensions"
	default n
	depends on SPLIT
	help
	  Add support for features not required by SUSv3.
	  Supports additional suffixes 'b' for 512 bytes,
	  'g' for 1GiB for the -b option.

config STAT
	bool "stat"
	default n
	help
	  display file or filesystem status.

config FEATURE_STAT_FORMAT
	bool "Enable custom formats (-c)"
	default n
	depends on STAT
	help
	  Without this, stat will not support the '-c format' option where
	  users can pass a custom format string for output. This adds about
	  7k to a nonstatic build on amd64.

config STTY
	bool "stty"
	default n
	help
	  stty is used to change and print terminal line settings.

config SUM
	bool "sum"
	default n
	help
	  checksum and count the blocks in a file

config SYNC
	bool "sync"
	default n
	help
	  sync is used to flush filesystem buffers.

config TAC
	bool "tac"
	default n
	help
	  tac is used to concatenate and print files in reverse.

config TAIL
	bool "tail"
	default n
	help
	  tail is used to print the last specified number of lines
	  from files.

config FEATURE_FANCY_TAIL
	bool "Enable extra tail options (-q, -s, -v, and -F)"
	default y
	depends on TAIL
	help
	  The options (-q, -s, and -v) are provided by GNU tail, but
	  are not specific in the SUSv3 standard.

config TEE
	bool "tee"
	default n
	help
	  tee is used to read from standard input and write
	  to standard output and files.

config FEATURE_TEE_USE_BLOCK_IO
	bool "Enable block I/O (larger/faster) instead of byte I/O"
	default n
	depends on TEE
	help
	  Enable this option for a faster tee, at expense of size.

config TEST
	bool "test"
	default n
	help
	  test is used to check file types and compare values,
	  returning an appropriate exit code. The bash shell
	  has test built in, ash can build it in optionally.

config FEATURE_TEST_64
	bool "Extend test to 64 bit"
	default n
	depends on TEST || ASH_BUILTIN_TEST || HUSH
	help
	  Enable 64-bit support in test.

config TOUCH
	bool "touch"
	default n
	help
	  touch is used to create or change the access and/or
	  modification timestamp of specified files.

config TR
	bool "tr"
	default n
	help
	  tr is used to squeeze, and/or delete characters from standard
	  input, writing to standard output.

config FEATURE_TR_CLASSES
	bool "Enable character classes (such as [:upper:])"
	default n
	depends on TR
	help
	  Enable character classes, enabling commands such as:
	  tr [:upper:] [:lower:] to convert input into lowercase.

config FEATURE_TR_EQUIV
	bool "Enable equivalence classes"
	default n
	depends on TR
	help
	  Enable equivalence classes, which essentially add the enclosed
	  character to the current set. For instance, tr [=a=] xyz would
	  replace all instances of 'a' with 'xyz'. This option is mainly
	  useful for cases when no other way of expressing a character
	  is possible.

config TRUE
	bool "true"
	default n
	help
	  true returns an exit code of TRUE (0).

config TTY
	bool "tty"
	default n
	help
	  tty is used to print the name of the current terminal to
	  standard output.

config UNAME
	bool "uname"
	default n
	help
	  uname is used to print system information.

config UNEXPAND
	bool "unexpand"
	default n
	help
	  By default, convert only leading sequences of blanks to tabs.

config FEATURE_UNEXPAND_LONG_OPTIONS
	bool "Enable long options"
	default n
	depends on UNEXPAND && LONG_OPTS
	help
	  Support long options for the unexpand applet.

config UNIQ
	bool "uniq"
	default n
	help
	  uniq is used to remove duplicate lines from a sorted file.

config USLEEP
	bool "usleep"
	default n
	help
	  usleep is used to pause for a specified number of microseconds.

config UUDECODE
	bool "uudecode"
	default n
	help
	  uudecode is used to decode a uuencoded file.

config UUENCODE
	bool "uuencode"
	default n
	help
	  uuencode is used to uuencode a file.

config WC
	bool "wc"
	default n
	help
	  wc is used to print the number of bytes, words, and lines,
	  in specified files.

config FEATURE_WC_LARGE
	bool "Support very large files in wc"
	default n
	depends on WC
	help
	  Use "unsigned long long" in wc for counter variables.

config WHO
	bool "who"
	default n
	select FEATURE_UTMP
	help
	  who is used to show who is logged on.

config WHOAMI
	bool "whoami"
	default n
	help
	  whoami is used to print the username of the current
	  user id (same as id -un).

config YES
	bool "yes"
	default n
	help
	  yes is used to repeatedly output a specific string, or
	  the default string `y'.

comment "Common options for cp and mv"
	depends on CP || MV

config FEATURE_PRESERVE_HARDLINKS
	bool "Preserve hard links"
	default n
	depends on CP || MV
	help
	  Allow cp and mv to preserve hard links.

comment "Common options for ls, more and telnet"
	depends on LS || MORE || TELNET

config FEATURE_AUTOWIDTH
	bool "Calculate terminal & column widths"
	default y
	depends on LS || MORE || TELNET
	help
	  This option allows utilities such as 'ls', 'more' and 'telnet'
	  to determine the width of the screen, which can allow them to
	  display additional text or avoid wrapping text onto the next line.
	  If you leave this disabled, your utilities will be especially
	  primitive and will be unable to determine the current screen width.

comment "Common options for df, du, ls"
	depends on DF || DU || LS

config FEATURE_HUMAN_READABLE
	bool "Support for human readable output (example 13k, 23M, 235G)"
	default n
	depends on DF || DU || LS
	help
	  Allow df, du, and ls to have human readable output.

comment "Common options for md5sum, sha1sum"
	depends on MD5SUM || SHA1SUM

config FEATURE_MD5_SHA1_SUM_CHECK
	bool "Enable -c, -s and -w options"
	default n
	depends on MD5SUM || SHA1SUM
	help
	  Enabling the -c options allows files to be checked
	  against pre-calculated hash values.

	  -s and -w are useful options when verifying checksums.

endmenu
