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