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

menu "Finding Utilities"

config FIND
	bool "find"
	default n
	help
	  find is used to search your system to find specified files.

config FEATURE_FIND_PRINT0
	bool "Enable -print0 option"
	default y
	depends on FIND
	help
	  Causes output names to be separated by a null character
	  rather than a newline.  This allows names that contain
	  newlines and other whitespace to be more easily
	  interpreted by other programs.

config FEATURE_FIND_MTIME
	bool "Enable modified time matching (-mtime) option"
	default y
	depends on FIND
	help
	  Allow searching based on the modification time of
	  files, in days.

config FEATURE_FIND_MMIN
	bool "Enable modified time matching (-min) option"
	default y
	depends on FIND
	help
	  Allow searching based on the modification time of
	  files, in minutes.

config FEATURE_FIND_PERM
	bool "Enable permissions matching (-perm) option"
	default y
	depends on FIND
	help
	  Enable searching based on file permissions.

config FEATURE_FIND_TYPE
	bool "Enable filetype matching (-type) option"
	default y
	depends on FIND
	help
	  Enable searching based on file type (file,
	  directory, socket, device, etc.).

config FEATURE_FIND_XDEV
	bool "Enable stay in filesystem (-xdev) option"
	default y
	depends on FIND
	help
	  This option will allow find to restrict searches to a single
	  filesystem.

config FEATURE_FIND_NEWER
	bool "Enable -newer option for comparing file mtimes"
	default y
	depends on FIND
	help
	  Support the 'find -newer' option for finding any files which have
	  a modified time that is more recent than the specified FILE.

config FEATURE_FIND_INUM
	bool "Enable inode number matching (-inum) option"
	default y
	depends on FIND
	help
	  Support the 'find -inum' option for searching by inode number.

config FEATURE_FIND_EXEC
	bool "Enable (-exec) option allowing execution of commands"
	default y
	depends on FIND
	help
	  Support the 'find -exec' option for executing commands based upon
	  the files matched.

config GREP
	bool "grep"
	default n
	help
	  grep is used to search files for a specified pattern.

config FEATURE_GREP_EGREP_ALIAS
	bool "Support extended regular expressions (egrep & grep -E)"
	default y
	depends on GREP
	help
	  Enabled support for extended regular expressions.  Extended
	  regular expressions allow for alternation (foo|bar), grouping,
	  and various repetition operators.

config FEATURE_GREP_FGREP_ALIAS
	bool "Alias fgrep to grep -F"
	default y
	depends on GREP
	help
	  fgrep sees the search pattern as a normal string rather than
	  regular expressions.
	  grep -F is always builtin, this just creates the fgrep alias.

config FEATURE_GREP_CONTEXT
	bool "Enable before and after context flags (-A, -B and -C)"
	default y
	depends on GREP
	help
	  Print the specified number of leading (-B) and/or trailing (-A)
	  context surrounding our matching lines.
	  Print the specified number of context lines (-C).

config XARGS
	bool "xargs"
	default n
	help
	  xargs is used to execute a specified command on
	  every item from standard input.

config FEATURE_XARGS_SUPPORT_CONFIRMATION
	bool "Enable prompt and confirmation option -p"
	default n
	depends on XARGS
	help
	  Support prompt the user about whether to run each command
	  line and read a line from the terminal.

config FEATURE_XARGS_SUPPORT_QUOTES
	bool "Enable support single and double quotes and backslash"
	default n
	depends on XARGS
	help
	  Default xargs unsupport single and double quotes
	  and backslash for can use aruments with spaces.

config FEATURE_XARGS_SUPPORT_TERMOPT
	bool "Enable support options -x"
	default n
	depends on XARGS
	help
	  Enable support exit if the size (see the -s or -n option)
	  is exceeded.

config FEATURE_XARGS_SUPPORT_ZERO_TERM
	bool "Enable null terminated option -0"
	default n
	depends on XARGS
	help
	  Enable input filenames are terminated by a null character
	  instead of by whitespace, and the quotes and backslash
	  are not special.

endmenu
