#
# 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 CONFIG_FEATURE_SH_IS_NONE
	help
	  Choose a shell. The ash shell is the most bash compatible
	  and full featured one.

config CONFIG_FEATURE_SH_IS_ASH
	select CONFIG_ASH
	bool "ash"

config CONFIG_FEATURE_SH_IS_HUSH
	select CONFIG_HUSH
	bool "hush"

config CONFIG_FEATURE_SH_IS_LASH
	select CONFIG_LASH
	bool "lash"

config CONFIG_FEATURE_SH_IS_MSH
	select CONFIG_MSH
	bool "msh"

config CONFIG_FEATURE_SH_IS_NONE
	bool "none"

endchoice

config CONFIG_ASH
	bool "ash"
	default y
	help
	  Tha 'ash' shell adds about 60k in the default configuration and is
	  the most complete and most pedantically correct shell included with
	  busybox.  This shell is actually a derivative of the Debian 'dash'
	  shell (by Herbert Xu), which was created by porting the 'ash' shell
	  (written by Kenneth Almquist) from NetBSD.

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_MATH_SUPPORT_64
	bool "    Extend Posix math support to 64 bit"
	default n
	depends on CONFIG_ASH_MATH_SUPPORT
	help
	  Enable 64-bit math support in the ash shell.  This will make
	  the shell slightly larger, but will allow computation with very
	  large numbers.

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

config CONFIG_ASH_CMDCMD
	bool "  Enable cmdcmd to override shell builtins"
	default n
	depends on CONFIG_ASH
	help
	  Enable support for the ash 'command' builtin, which allows
	  you to run the specified command with the specified arguments,
	  even when there is an ash builtin command with the same name.

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.

config CONFIG_ASH_RANDOM_SUPPORT
	bool "  Enable pseudorandom generator and variable $RANDOM"
	default n
	depends on CONFIG_ASH
	help
	  Enable pseudorandom generator and dynamic variable "$RANDOM".
	  Each read of "$RANDOM" will generate a new pseudorandom value.
	  You can reset the generator by using a specified start value.
	  After "unset RANDOM" then generator will switch off and this
	  variable will no longer have special treatment.

config CONFIG_HUSH
	bool "hush"
	default n
	help
	  hush is a very small shell (just 18k) and it has fairly complete
	  Bourne shell grammar.  It even handles all the normal flow control
	  options such as if/then/elif/else/fi, for/in/do/done, while loops,
	  etc.

	  It does not handle case/esac, select, function, here documents ( <<
	  word ), arithmetic expansion, aliases, brace expansion, tilde
	  expansion, &> and >& redirection of stdout+stderr, etc.


config CONFIG_LASH
	bool "lash"
	default n
	help
	  lash is the very smallest shell (adds just 10k) and it is quite
	  usable as a command prompt, but it is not suitable for any but the
	  most trivial scripting (such as an initrd that calls insmod a few
	  times) since it does not understand any Bourne shell grammar.  It
	  does handle pipes, redirects, and job control though.  Adding in
	  command editing makes it a very nice lightweight command prompt.


config CONFIG_MSH
	bool "msh"
	default n
	help
	  The minix shell (adds just 30k) is quite complete and handles things
	  like for/do/done, case/esac and all the things you expect a Bourne
	  shell to do.  It is not always pedantically correct about Bourne
	  shell grammar (try running the shell testscript "tests/sh.testcases"
	  on it and compare vs bash) but for most things it works quite well.
	  It also uses only vfork, so it can be used on uClinux systems.

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

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
	  Remove the busybox introduction when starting a shell.

config CONFIG_FEATURE_SH_STANDALONE_SHELL
	bool "Standalone shell"
	default n
	depends on CONFIG_MSH || CONFIG_LASH || CONFIG_HUSH || CONFIG_ASH
	help
	  This option causes the selected busybox shell to use busybox applets
	  in preference to executables in the PATH whenever possible.  For
	  example, entering the command 'ifconfig' into the shell would cause
	  busybox to use the ifconfig busybox applet.  Specifying the fully
	  qualified executable name, such as '/sbin/ifconfig' will still
	  execute the /sbin/ifconfig executable on the filesystem.  This option
	  is generally used when creating a staticly linked version of busybox
	  for use as a rescue shell, in the event that you screw up your system.

	  Note that when using this option, the shell will attempt to directly
	  run '/bin/busybox'.  If you do not have the busybox binary sitting in
	  that exact location with that exact name, this option will not work at
	  all.

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_HISTORY
	int "history size"
	default 15
	depends on CONFIG_FEATURE_COMMAND_EDITING
	help
	  Specify command history size in shell.

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

config CONFIG_FEATURE_COMMAND_TAB_COMPLETION
	bool "tab completion"
	default n
	depends on CONFIG_FEATURE_COMMAND_EDITING
	help
	  Enable tab completion in shell.

config CONFIG_FEATURE_COMMAND_USERNAME_COMPLETION
	bool "username completion"
	default n
	depends on CONFIG_FEATURE_COMMAND_TAB_COMPLETION
	help
	  Enable username completion in shell.

config CONFIG_FEATURE_SH_FANCY_PROMPT
	bool "Fancy shell prompts"
	default n
	depends on CONFIG_FEATURE_COMMAND_EDITING
	help
	  Setting this option allows for prompts to use things like \w and
	  \$ and also using escape codes.

endmenu
