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

menu "Shells"

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

config FEATURE_SH_IS_ASH
	select ASH
	bool "ash"

config FEATURE_SH_IS_HUSH
	select HUSH
	bool "hush"

####config FEATURE_SH_IS_LASH
####	select LASH
####	bool "lash"

config FEATURE_SH_IS_MSH
	select MSH
	bool "msh"

config FEATURE_SH_IS_NONE
	bool "none"

endchoice

config ASH
	bool "ash"
	default n
	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 ASH

config ASH_BASH_COMPAT
	bool "bash-compatible extensions"
	default y
	depends on ASH
	help
	  Enable bash-compatible extensions.

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

config ASH_READ_NCHARS
	bool "'read -n N' and 'read -s' support"
	default n
	depends on ASH
	help
	  'read -n N' will return a value after N characters have been read.
	  'read -s' will read without echoing the user's input.

config ASH_READ_TIMEOUT
	bool "'read -t S' support"
	default n
	depends on ASH
	help
	  'read -t S' will return a value after S seconds have passed.
	  This implementation will allow fractional seconds, expressed
	  as a decimal fraction, e.g. 'read -t 2.5 foo'.

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

config ASH_GETOPTS
	bool "Builtin getopt to parse positional parameters"
	default n
	depends on ASH
	help
	  Enable getopts builtin in the ash shell.

config ASH_BUILTIN_ECHO
	bool "Builtin version of 'echo'"
	default y
	depends on ASH
	help
	  Enable support for echo, builtin to ash.

config ASH_BUILTIN_PRINTF
	bool "Builtin version of 'printf'"
	default y
	depends on ASH
	help
	  Enable support for printf, builtin to ash.

config ASH_BUILTIN_TEST
	bool "Builtin version of 'test'"
	default y
	depends on ASH
	help
	  Enable support for test, builtin to ash.

config ASH_CMDCMD
	bool "'command' command to override shell builtins"
	default n
	depends on 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 ASH_MAIL
	bool "Check for new mail on interactive shells"
	default y
	depends on ASH
	help
	  Enable "check for new mail" in the ash shell.

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

config ASH_RANDOM_SUPPORT
	bool "Pseudorandom generator and $RANDOM variable"
	default n
	depends on 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" the generator will switch off and this
	  variable will no longer have special treatment.

config ASH_EXPAND_PRMT
	bool "Expand prompt string"
	default n
	depends on ASH
	help
	  "PS#" may contain volatile content, such as backquote commands.
	  This option recreates the prompt string from the environment
	  variable each time it is displayed.

config HUSH
	bool "hush"
	default n
	help
	  hush is a small shell (22k). It handles the normal flow control
	  constructs such as if/then/elif/else/fi, for/in/do/done, while loops,
	  case/esac. Redirections, here documents, $((arithmetic))
	  and functions are supported.

	  It will compile and work on no-mmu systems.

	  It does not handle select, aliases, brace expansion,
	  tilde expansion, &>file and >&file redirection of stdout+stderr.

config HUSH_HELP
	bool "help builtin"
	default n
	depends on HUSH
	help
	  Enable help builtin in hush. Code size + ~1 kbyte.

config HUSH_INTERACTIVE
	bool "Interactive mode"
	default y
	depends on HUSH
	help
	  Enable interactive mode (prompt and command editing).
	  Without this, hush simply reads and executes commands
	  from stdin just like a shell script from the file.
	  No prompt, no PS1/PS2 magic shell variables.

config HUSH_JOB
	bool "Job control"
	default n
	depends on HUSH_INTERACTIVE
	help
	  Enable job control: Ctrl-Z backgrounds, Ctrl-C interrupts current
	  command (not entire shell), fg/bg builtins work. Without this option,
	  "cmd &" still works by simply spawning a process and immediately
	  prompting for next command (or executing next command in a script),
	  but no separate process group is formed.

config HUSH_TICK
	bool "Process substitution"
	default n
	depends on HUSH
	help
	  Enable process substitution `command` and $(command) in hush.

config HUSH_IF
	bool "Support if/then/elif/else/fi"
	default n
	depends on HUSH
	help
	  Enable if/then/elif/else/fi in hush.

config HUSH_LOOPS
	bool "Support for, while and until loops"
	default n
	depends on HUSH
	help
	  Enable for, while and until loops in hush.

config HUSH_CASE
	bool "Support case ... esac statement"
	default n
	depends on HUSH
	help
	  Enable case ... esac statement in hush. +400 bytes.

config HUSH_FUNCTIONS
	bool "Support funcname() { commands; } syntax"
	default n
	depends on HUSH
	help
	  Enable support for shell functions in hush. +800 bytes.

config LASH
	bool "lash (deprecated: aliased to hush)"
	default n
	select HUSH
	help
	  lash is deprecated and will be removed, please migrate to hush.

config MSH
	bool "msh (deprecated: please use hush)"
	default n
	help
	  msh is deprecated and will be removed, please migrate to hush.
	  If there is a feature msh has but hush does not, please let us know.

#	  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 uses only vfork, so it can be used on uClinux systems.


comment "Bourne Shell Options"
	depends on MSH || LASH || HUSH || ASH

config SH_MATH_SUPPORT
	bool "POSIX math support"
	default y
	depends on ASH || HUSH
	help
	  Enable math support in the shell via $((...)) syntax.

config SH_MATH_SUPPORT_64
	bool "Extend POSIX math support to 64 bit"
	default n
	depends on SH_MATH_SUPPORT
	help
	  Enable 64-bit math support in the shell. This will make the shell
	  slightly larger, but will allow computation with very large numbers.
	  This is not in POSIX, so do not rely on this in portable code.

config FEATURE_SH_EXTRA_QUIET
	bool "Hide message on interactive shell startup"
	default n
	depends on MSH || LASH || HUSH || ASH
	help
	  Remove the busybox introduction when starting a shell.

config FEATURE_SH_STANDALONE
	bool "Standalone shell"
	default n
	depends on (MSH || LASH || HUSH || ASH) && FEATURE_PREFER_APPLETS
	help
	  This option causes busybox shells 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 statically linked version of busybox
	  for use as a rescue shell, in the event that you screw up your system.

	  This is implemented by re-execing /proc/self/exe (typically)
	  with right parameters. Some selected applets ("NOFORK" applets)
	  can even be executed without creating new process.
	  Instead, busybox will call <applet>_main() internally.

	  However, this causes problems in chroot jails without mounted /proc
	  and with ps/top (command name can be shown as 'exe' for applets
	  started this way).
# untrue?
#	  Note that this will *also* cause applets to take precedence
#	  over shell builtins of the same name. So turning this on will
#	  eliminate any performance gained by turning on the builtin "echo"
#	  and "test" commands in ash.
# untrue?
#	  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 FEATURE_SH_NOFORK
	bool "Run 'nofork' applets directly"
	default n
	depends on (MSH || LASH || HUSH || ASH) && FEATURE_PREFER_APPLETS
	help
	  This option causes busybox shells [currently only ash]
	  to not execute typical fork/exec/wait sequence, but call <applet>_main
	  directly, if possible. (Sometimes it is not possible: for example,
	  this is not possible in pipes).

	  This will be done only for some applets (those which are marked
	  NOFORK in include/applets.h).

	  This may significantly speed up some shell scripts.

	  This feature is relatively new. Use with care.

config CTTYHACK
	bool "cttyhack"
	default n
	help
	  One common problem reported on the mailing list is "can't access tty;
	  job control turned off" error message which typically appears when
	  one tries to use shell with stdin/stdout opened to /dev/console.
	  This device is special - it cannot be a controlling tty.

	  Proper solution is to use correct device instead of /dev/console.

	  cttyhack provides "quick and dirty" solution to this problem.
	  It analyzes stdin with various ioctls, trying to determine whether
	  it is a /dev/ttyN or /dev/ttySN (virtual terminal or serial line).
	  If it detects one, it closes stdin/out/err and reopens that device.
	  Then it executes given program. Usage example for /etc/inittab
	  (for busybox init):

	  ::respawn:/bin/cttyhack /bin/sh

endmenu
