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

menu "Debian Utilities"

config MKTEMP
	bool "mktemp"
	default n
	help
	  mktemp is used to create unique temporary files

config PIPE_PROGRESS
	bool "pipe_progress"
	default n
	help
	  Display a dot to indicate pipe activity.

config READLINK
	bool "readlink"
	default n
	help
	  This program reads a symbolic link and returns the name
	  of the file it points to

config FEATURE_READLINK_FOLLOW
	bool "Enable canonicalization by following all symlinks (-f)"
	default n
	depends on READLINK
	help
	  Enable the readlink option (-f).

config RUN_PARTS
	bool "run-parts"
	default n
	help
	  run-parts is a utility designed to run all the scripts in a directory.

	  It is useful to set up a directory like cron.daily, where you need to
	  execute all the scripts in that directory.

	  In this implementation of run-parts some features (such as report mode)
	  are not implemented.

	  Unless you know that run-parts is used in some of your scripts
	  you can safely say N here.

config FEATURE_RUN_PARTS_LONG_OPTIONS
	bool "Enable long options"
	default n
	depends on RUN_PARTS && GETOPT_LONG
	help
	  Support long options for the run-parts applet.

config FEATURE_RUN_PARTS_FANCY
	bool "Support additional arguments"
	default n
	depends on RUN_PARTS
	help
	  Support additional options:
	  -l --list print the names of the all matching files (not
	            limited to executables), but don't actually run them.

config START_STOP_DAEMON
	bool "start-stop-daemon"
	default y
	help
	  start-stop-daemon is used to control the creation and
	  termination of system-level processes, usually the ones
	  started during the startup of the system.

config FEATURE_START_STOP_DAEMON_FANCY
	bool "Support additional arguments"
	default y
	depends on START_STOP_DAEMON
	help
	  Support additional arguments.
	  -o|--oknodo ignored since we exit with 0 anyway
	  -v|--verbose

config FEATURE_START_STOP_DAEMON_LONG_OPTIONS
	bool "Enable long options"
	default n
	depends on START_STOP_DAEMON && GETOPT_LONG
	help
	  Support long options for the start-stop-daemon applet.

config WHICH
	bool "which"
	default n
	help
	  which is used to find programs in your PATH and
	  print out their pathnames.

endmenu

