#
# 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 FEATURE_CHOWN_LONG_OPTIONS
	bool "Enable long options"
	default n
	depends on CHOWN && LONG_OPTS
	help
	  Enable use of long options

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 FEATURE_CP_LONG_OPTIONS
	bool "Enable long options for cp"
	default n
	depends on CP && LONG_OPTS
	help
	  Enable long options for cp.
	  Also add support for --parents option.

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 FEATURE_DATE_COMPAT
	bool "Support weird 'date MMDDhhmm[[YY]YY][.ss]' format"
	default y
	depends on DATE
	help
	  System time can be set by 'date -s DATE' and simply 'date DATE',
	  but formats of DATE string are different. 'date DATE' accepts
	  a rather weird MMDDhhmm[[YY]YY][.ss] format with completely
	  unnatural placement of year between minutes and seconds.
	  date -s (and other commands like touch -d) use more sensible
	  formats (for one, ISO format YYYY-MM-DD hh:mm:ss.ssssss).

	  With this option off, 'date DATE' is 'date -s DATE' support
	  the same format. With it on, 'date DATE' additionally supports
	  MMDDhhmm[[YY]YY][.ss] format.

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_THIRD_STATUS_LINE
	bool "Enable the third status line upon signal"
	default n
	depends on DD && FEATURE_DD_SIGNAL_HANDLING
	help
	  Displays a coreutils-like third status line with transferred bytes,
	  elapsed time and speed.

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.

	    -a Show all filesystems
	    -i Inodes
	    -B <SIZE> Blocksize

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.

	    -q      Never output headers giving file names
	    -s SEC  Wait SEC seconds between reads with -f
	    -v      Always output headers giving file names

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
	depends on 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, sha256sum, sha512sum"
	depends on MD5SUM || SHA1SUM || SHA256SUM || SHA512SUM

config FEATURE_MD5_SHA1_SUM_CHECK
	bool "Enable -c, -s and -w options"
	default n
	depends on MD5SUM || SHA1SUM || SHA256SUM || SHA512SUM
	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
