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

menu "Coreutils"

config 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 CONFIG_CAL
	bool "cal"
	default n
	help
	  cal is used to display a monthly calender.

config 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 CONFIG_CHGRP
	bool "chgrp"
	default n
	help
	  chgrp is used to change the group ownership of files.

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

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

config 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 CONFIG_CMP
	bool "cmp"
	default n
	help
	  cmp is used to compare two files and returns the result
	  to standard output.

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

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

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

config 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 CONFIG_FEATURE_DATE_ISOFMT
	bool "  Enable ISO date format output (-I)"
	default y
	depends on CONFIG_DATE
	help
	  Enable option (-I) to output an ISO-8601 compliant
	  date/time string.

config 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 CONFIG_DF
	bool "df"
	default n
	help
	  df reports the amount of disk space used and available
	  on filesystems.

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

config 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 CONFIG_UNIX2DOS
	bool
	default y
	depends on CONFIG_DOS2UNIX

config 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 CONFIG_FEATURE_DU_DEFALT_BLOCKSIZE_1K
	bool "  Use a default blocksize of 1024 bytes (1K)"
	default y
	depends on CONFIG_DU
	help
	  Use a blocksize of (1K) instead of the default 512b.

config 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 CONFIG_FEATURE_FANCY_ECHO
	bool "  Enable echo options (-n and -e)"
	default y
	depends on CONFIG_ECHO
	help
	  This adds options (-n and -e) to echo.

config 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 CONFIG_EXPR
	bool "expr"
	default n
	help
	  expr is used to calculate numbers and print the result
	  to standard output.

config CONFIG_EXPR_MATH_SUPPORT_64
	bool "    Extend Posix numbers support to 64 bit"
	default n
	depends on CONFIG_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 CONFIG_FALSE
	bool "false"
	default n
	help
	  false returns an exit code of FALSE (1).

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

config CONFIG_FEATURE_LS_COLOR
	bool "  Allow use of color to identify file types"
	default y
	depends on CONFIG_LS
	help
	  This enables the --color option to ls.

config CONFIG_FEATURE_LS_COLOR_IS_DEFAULT
	bool "  Produce colored ls output by default"
	default n
	depends on CONFIG_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 CONFIG_MD5SUM
	bool "md5sum"
	default n
	help
	  md5sum is used to print or check MD5 checksums.

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

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

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

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

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

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

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

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

config 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 CONFIG_PWD
	bool "pwd"
	default n
	help
	  pwd is used to print the current directory.

config 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 CONFIG_RM
	bool "rm"
	default n
	help
	  rm is used to remove files or directories.

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

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

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

config CONFIG_SLEEP
	bool "sleep (single integer arg with no suffix)"
	default n
	help
	  sleep is used to pause for a specified number of seconds,

config CONFIG_FEATURE_FANCY_SLEEP
	bool "  Enable multiple integer args and optional time suffixes"
	default n
	depends on CONFIG_SLEEP
	help
	  Allow sleep to pause for specified minutes, hours, and days.

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

config CONFIG_FEATURE_SORT_BIG
	bool "  full SuSv3 compliant sort (Support -ktcsbdfiozgM)"
	default y
	depends on CONFIG_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 CONFIG_STAT
	bool "stat"
	default n
	help
	  display file or filesystem status.

config CONFIG_FEATURE_STAT_FORMAT
	bool "  Enable custom formats (-c)"
	default n
	depends on CONFIG_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 CONFIG_STTY
	bool "stty"
	default n
	help
	  stty is used to change and print terminal line settings.

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

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

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

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

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

config CONFIG_FEATURE_TEE_USE_BLOCK_IO
	bool "  Enable block i/o (larger/faster) instead of byte i/o."
	default n
	depends on CONFIG_TEE
	help
	  Enable this option for a faster tee, at expense of size.

config CONFIG_TEST
	bool "test"
	default n
	help
	  test is used to check file types and compare values,
	  returning an appropriate exit code. The shells (ash
	  and bash) have test builtin.

config CONFIG_FEATURE_TEST_64
	bool "  Extend test to 64 bit"
	default n
	depends on CONFIG_TEST
	help
	  Enable 64-bit support in test.

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

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

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

config CONFIG_FEATURE_TR_EQUIV
	bool "  Enable equivalence classes"
	default n
	depends on CONFIG_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 CONFIG_TRUE
	bool "true"
	default n
	help
	  true returns an exit code of TRUE (0).

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

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

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

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

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

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

config CONFIG_WATCH
	bool "watch"
	default n
	select CONFIG_DATE
	help
	  watch is used to execute a program periodically, showing
	  output to the screen.

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

config CONFIG_WHO
	bool "who"
	default n
	select CONFIG_FEATURE_UTMP
	help
	  who is used to show who is logged on.

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

config 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 CONFIG_CP || CONFIG_MV

config CONFIG_FEATURE_PRESERVE_HARDLINKS
	bool "  Preserve hard links"
	default n
	depends on CONFIG_CP || CONFIG_MV
	help
	  Allow cp and mv to preserve hard links.

comment "Common options for ls, more and telnet"
	depends on CONFIG_LS || CONFIG_MORE || CONFIG_TELNET

config CONFIG_FEATURE_AUTOWIDTH
	bool "  Calculate terminal & column widths"
	default y
	depends on CONFIG_LS || CONFIG_MORE || CONFIG_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 CONFIG_DF || CONFIG_DU || CONFIG_LS

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

comment "Common options for md5sum, sha1sum"
	depends on CONFIG_MD5SUM || CONFIG_SHA1SUM

config CONFIG_FEATURE_MD5_SHA1_SUM_CHECK
	bool "  Enable -c, -s and -w options"
	default n
	depends on CONFIG_MD5SUM || CONFIG_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
