#
# 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: NUL-terminated output"
	default y
	depends on FIND
	help
	  Causes output names to be separated by a NUL 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 -mtime: modified time matching"
	default y
	depends on FIND
	help
	  Allow searching based on the modification time of
	  files, in days.

config FEATURE_FIND_MMIN
	bool "Enable -mmin: modified time matching by minutes"
	default y
	depends on FIND
	help
	  Allow searching based on the modification time of
	  files, in minutes.

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

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

config FEATURE_FIND_XDEV
	bool "Enable -xdev: 'stay in filesystem'"
	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"
	default y
	depends on FIND
	help
	  This option enables -maxdepth N option.

config FEATURE_FIND_NEWER
	bool "Enable -newer: compare file modification times"
	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 -inum: inode number matching"
	default y
	depends on FIND
	help
	  Support the 'find -inum' option for searching by inode number.

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

config FEATURE_FIND_GROUP
	bool "Enable -group: group/gid matching"
	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 -depth"
	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: file size matching"
	default y
	depends on FIND
	help
	  Support the 'find -size' option for searching by file size.

config FEATURE_FIND_PRUNE
	bool "Enable -prune: 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: delete files/dirs"
	default n
	depends on FIND && FEATURE_FIND_DEPTH
	help
	  Support the 'find -delete' option for deleting files and directories.
	  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: match pathname with shell pattern"
	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 with regex"
	default y
	depends on FIND
	help
	  The -regex option matches whole pathname against regular expression.

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

config FEATURE_FIND_LINKS
	bool "Enable -links: link count matching"
	default n
	depends on FIND
	help
	  Support the 'find -links' option for matching number of links.

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

config FEATURE_GREP_EGREP_ALIAS
	bool "Enable 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 always works, 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 for
	  every item from standard input.

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

config FEATURE_XARGS_SUPPORT_QUOTES
	bool "Enable single and double quotes and backslash"
	default n
	depends on XARGS
	help
	  Support quoting in the input.

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

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

endmenu
