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

menu "Another Bourne-like Shell"

choice
	prompt "Choose your default shell"
	default "none"
	help
	  Choose a shell. The ash shell is the most bash compatible
	  and full featured.

config CONFIG_FEATURE_SH_IS_ASH
	bool "ash"

config CONFIG_FEATURE_SH_IS_HUSH
	bool "hush"

config CONFIG_FEATURE_SH_IS_LASH
	bool "lash"

config CONFIG_FEATURE_SH_IS_MSH
	bool "msh"

config CONFIG_FEATURE_SH_IS_NONE
	bool "none"

endchoice

if CONFIG_FEATURE_SH_IS_ASH
	config CONFIG_ASH
	default y

	comment "ash (forced enabled as default shell)"
endif
	
if !CONFIG_FEATURE_SH_IS_ASH
config CONFIG_ASH
	bool "ash"
	default y
	help
	  Make sh a link to ash.
endif

comment "Ash Shell Options"
	depends on CONFIG_ASH

config CONFIG_ASH_JOB_CONTROL
	bool "  Enable Job control"
	default y
	depends on CONFIG_ASH
	help
	  Enable job control in the ash shell.

config CONFIG_ASH_ALIAS
	bool "  Enable alias support"
	default y
	depends on CONFIG_ASH
	help
	  Enable alias support in the ash shell.

config CONFIG_ASH_MATH_SUPPORT
	bool "  Enable Posix math support"
	default y
	depends on CONFIG_ASH
	help
	  Enable math support in the ash shell.

config CONFIG_ASH_GETOPTS
	bool "  Enable getopt builtin to parse positional parameters"
	default n
	depends on CONFIG_ASH
	help
	  Enable builtin getopt in the ash shell.

config CONFIG_ASH_CMDCMD
	bool "  Enable cmdcmd to override shell builtins"
	default n
	depends on CONFIG_ASH
	help
	  Please submit a patch to add help text for this item.

config CONFIG_ASH_MAIL
	bool "  Check for new mail on interactive shells"
	default y
	depends on CONFIG_ASH
	help
	  Enable "check for new mail" in the ash shell.

config CONFIG_ASH_OPTIMIZE_FOR_SIZE
	bool "  Optimize for size instead of speed"
	default y
	depends on CONFIG_ASH
	help
	  Compile ash for reduced size at price of speed.

if CONFIG_FEATURE_SH_IS_HUSH
	config CONFIG_HUSH
	default y

	comment "hush (forced enabled as default shell)"
endif
	
if !CONFIG_FEATURE_SH_IS_HUSH
config CONFIG_HUSH
	bool "hush"
	default n
	help
	  Make sh a link to hush.
endif

if CONFIG_FEATURE_SH_IS_LASH
	config CONFIG_LASH
	default y

	comment "lash (forced enabled as default shell)"
endif

if !CONFIG_FEATURE_SH_IS_LASH
config CONFIG_LASH
	bool "lash"
	default n
	help
	  Make sh a link to lash.
endif

if CONFIG_FEATURE_SH_IS_MSH
	config CONFIG_MSH
	default y

	comment "msh (forced enabled as default shell)"
endif

if !CONFIG_FEATURE_SH_IS_MSH
config CONFIG_MSH
	bool "msh"
	default n
	help
	  Make sh a link to msh.
endif


comment "Bourne Shell Options"
	depends on CONFIG_MSH || CONFIG_LASH || CONFIG_HUSH || CONFIG_ASH

config CONFIG_FEATURE_COMMAND_EDITING
	bool "command line editing"
	default n
	depends on CONFIG_MSH || CONFIG_LASH || CONFIG_HUSH || CONFIG_ASH
	help
	  Enable command editing in shell.

config CONFIG_FEATURE_COMMAND_SAVEHISTORY
	bool "  history saving"
	default n
	depends on CONFIG_ASH
	help
	  Enable history saving in ash shell.

config CONFIG_FEATURE_COMMAND_TAB_COMPLETION
	bool "tab completion"
	default n
	depends on CONFIG_MSH || CONFIG_LASH || CONFIG_HUSH || CONFIG_ASH
	help
	  Enable tab completion in shell.

config CONFIG_FEATURE_COMMAND_USERNAME_COMPLETION
	bool "username completion"
	default n
	depends on CONFIG_MSH || CONFIG_LASH || CONFIG_HUSH || CONFIG_ASH
	help
	  Enable username completion in shell.

config CONFIG_FEATURE_COMMAND_HISTORY
	int "history size"
	default 15
	depends on CONFIG_MSH || CONFIG_LASH || CONFIG_HUSH || CONFIG_ASH
	help
	  Specify command history size in shell.

config CONFIG_FEATURE_SH_STANDALONE_SHELL
	bool "Standalone shell"
	default n
	depends on CONFIG_MSH || CONFIG_LASH || CONFIG_HUSH || CONFIG_ASH
	help
	  Have all the busybox commands built into the shell, creating
	  a standalone shell.

config CONFIG_FEATURE_SH_APPLETS_ALWAYS_WIN
	bool "Standalone shell -- applets always win"
	default n
	depends on CONFIG_MSH || CONFIG_LASH || CONFIG_HUSH || CONFIG_ASH
	help
	  Use a command builtin to the shell over one with the same name,
	  that may be on the system.

config CONFIG_FEATURE_SH_FANCY_PROMPT
	bool "Fancy shell prompts"
	default n
	depends on CONFIG_MSH || CONFIG_LASH || CONFIG_HUSH || CONFIG_ASH
	help
	  Please submit a patch to add help text for this item.

config CONFIG_FEATURE_SH_EXTRA_QUIET
	bool "Hide message on interactive shell startup"
	default n
	depends on CONFIG_MSH || CONFIG_LASH || CONFIG_HUSH || CONFIG_ASH
	help
	  Please submit a patch to add help text for this item.

endmenu

