#
# 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_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.

if CONFIG_WATCH
	config CONFIG_DATE
		default y
	comment "date (forced enabled for use with watch)"
endif

if !CONFIG_WATCH
    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.
endif

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.

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.

if CONFIG_HUSH || CONFIG_LASH || CONFIG_MSH
	config CONFIG_FALSE
		default y
	comment "false (forced enabled for use with shell)"
endif

if !CONFIG_HUSH && !CONFIG_LASH && !CONFIG_MSH
    config CONFIG_FALSE
	    bool "false"
	    default n
	    help
	      false returns an exit code of FALSE (1).
endif

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 "  Use color to identify file types"
	default y
	depends on CONFIG_LS
	help
	  Allow ls to use color when displaying files.

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_OD
	bool "od"
	default n
	help
	  od is used to dump binary files in octal and other formats.

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_STTY
	bool "stty"
	default n
	help
	  stty is used to change and print terminal line settings.

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.

if CONFIG_ASH || CONFIG_HUSH || CONFIG_LASH || CONFIG_MSH
	config CONFIG_TEST
		default y
	comment "test (forced enabled for use with shell)"
endif

if !CONFIG_ASH && !CONFIG_HUSH && !CONFIG_LASH && !CONFIG_MSH
    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.
endif

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.

if CONFIG_HUSH || CONFIG_LASH || CONFIG_MSH
	config CONFIG_TRUE
		default y
	comment "true (forced enabled for use with shell)"
endif

if !CONFIG_HUSH && !CONFIG_LASH && !CONFIG_MSH
    config CONFIG_TRUE
	    bool "true"
	    default n
	    help
	      true returns an exit code of TRUE (0).

endif

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
	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
	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 and more"
	depends on CONFIG_LS || CONFIG_MORE

config CONFIG_FEATURE_AUTOWIDTH
	bool "  Calculate terminal & column widths"
	default y
	depends on CONFIG_LS || CONFIG_MORE
	help
	  This option allows utilities such as 'ls' and 'more' 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
