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

menu "Debian Utilities"

INSERT

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

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

config RUN_PARTS
	bool "run-parts"
	default y
	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 y
	depends on RUN_PARTS && LONG_OPTS
	help
	  Support long options for the run-parts applet.

config FEATURE_RUN_PARTS_FANCY
	bool "Support additional arguments"
	default y
	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
	  -N|--nicelevel N

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

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

endmenu
