#
# 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 (-mmin 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' option (-xdev)"
	default y
	depends on FIND
	help
	  This option allows find to restrict searches to a single filesystem.

config FEATURE_FIND_MAXDEPTH
	bool "Enable -maxdepth N option"
	default y
	depends on FIND
	help
	  This option enables -maxdepth N option.

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 FEATURE_FIND_USER
	bool "Enable username/uid matching (-user option)"
	default y
	depends on FIND
	help
	  Support the 'find -user' option for searching by username or uid.

config FEATURE_FIND_GROUP
	bool "Enable group/gid matching (-group option)"
	default y
	depends on FIND
	help
	  Support the 'find -group' option for searching by group name or gid.

config FEATURE_FIND_NOT
	bool "Enable the 'not' (!) operator"
	default y
	depends on FIND
	help
	  Support the '!' operator to invert the test results.
	  If 'Enable full-blown desktop' is enabled, then will also support
	  the non-POSIX notation '-not'.

config FEATURE_FIND_DEPTH
	bool "Enable the -depth option"
	default y
	depends on FIND
	help
	  Process each directory's contents before the directory itself.

config FEATURE_FIND_PAREN
	bool "Enable parens in options"
	default y
	depends on FIND
	help
	  Enable usage of parens '(' to specify logical order of arguments.

config FEATURE_FIND_SIZE
	bool "Enable -size option allowing matching for file size"
	default y
	depends on FIND
	help
	  Support the 'find -size' option for searching by file size.

config FEATURE_FIND_PRUNE
	bool "Enable -prune option allowing to exclude subdirectories"
	default y
	depends on FIND
	help
	  If the file is a directory, dont descend into it. Useful for
	  exclusion .svn and CVS directories.

config FEATURE_FIND_DELETE
	bool "Enable -delete option allowing to delete files"
	default n
	depends on FIND && FEATURE_FIND_DEPTH
	help
	  Support the 'find -delete' option for deleting files and direcotries.
	  WARNING: This option can do much harm if used wrong. Busybox will not
	  try to protect the user from doing stupid things. Use with care.

config FEATURE_FIND_PATH
	bool "Enable -path option allowing to match pathname patterns"
	default y
	depends on FIND
	help
	  The -path option matches whole pathname instead of just filename.

config FEATURE_FIND_REGEX
	bool "Enable -regex: match pathname to regex"
	default y
	depends on FIND
	help
	  The -regex option matches whole pathname against regular expression.

config FEATURE_FIND_CONTEXT
	bool "Enable -context option for matching security context"
	default n
	depends on FIND && SELINUX
	help
	  Support the 'find -context' option for matching security context.

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
