[config] Change the way to select the CONFIG_SHELL

Transform the single boolean option to a 'choice' selection
with two options: "sh" and "ash".

This is needed to later add "bash" as override.
This commit is contained in:
Yann E. MORIN" 2009-08-02 23:43:15 +02:00
parent c0483fc7ec
commit a08142a02a
2 changed files with 48 additions and 12 deletions

View File

@ -44,16 +44,46 @@ config USE_PIPES
Use gcc's option -pipe to use pipes rather than temp files when building
the toolchain.
choice
bool
prompt "Shell to use as CONFIG_SHELL"
default CONFIG_SHELL_SYSTEM
config CONFIG_SHELL_SH
bool
prompt "sh (the system shell)"
help
Use 'sh' as CONFIG_SHELL.
./configure scripts and Makefiles make intensive use of calling
sub-shells. This is usually done by calling /bin/sh. /bin/sh ought
to be an at-least-POSIX-conformant shell (that is, able to interpret
POSIX shell scripts).
On many (most?) systems, /bin/sh is a symlink to bash. On some other
systems (eg. Ubuntu, latest Debian), /bin/sh points to dash (or ash).
bash is a full-featured shell, with many extension to POSIX, but is
quite slow (see ection BUGS in the bash man page), while dash is
faster, with very few extensions to POSIX. On the other hand, some
./configure scripts, although written to use /bin/sh, may really
require to be run by bash.
The default is to use your system's /bin/sh shell. If you want to
run faster, you can select to use dash. If you have problems with
either the system shell or when using dash, then you can force to
use bash.
config CONFIG_SHELL_ASH
bool
prompt "Use 'ash' as CONFIG_SHELL"
default n
prompt "ash"
help
Use /bin/ash as the shell used by ./configure scripts.
Use 'ash' as CONFIG_SHELL.
./configure scripts make intensive use of calling a sub-shell, and the
traditional bash is slow, whereas ash is faster.
Saying 'y' here should be safe enough, but some components may not
accept using a shell other than bash (this is most probably true for
old versions). If you have trouble, say 'n' here and see if it fixes it.
See help for CONFIG_SHELL_SH, above, for more explanations.
endchoice
config CONFIG_SHELL
string
default "sh" if CONFIG_SHELL_SH
default "ash" if CONFIG_SHELL_ASH

View File

@ -63,8 +63,13 @@ CT_DoExecLog DEBUG rm -f "${CT_WORK_DIR}/foo"
# What's our shell?
# Will be plain /bin/sh on most systems, except if we have /bin/ash and we
# _explictly_ required using it
CT_SHELL="/bin/sh"
[ "${CT_CONFIG_SHELL_ASH}" = "y" -a -x "/bin/ash" ] && CT_SHELL="/bin/ash"
case "${CT_CONFIG_SHELL}" in
sh) CT_SHELL="/bin/sh";;
ash) CT_SHELL="/bin/ash";;
esac
# Check the user is using an existing SHELL to be used by ./configure and Makefiles
CT_TestOrAbort "The CONFIG_SHELL '${CT_CONFIG_SHELL}' (${CT_SHELL}) is not valid" -f "${CT_SHELL}" -a -x "${CT_SHELL}"
# Create the bin-overide early
# Contains symlinks to the tools found by ./configure
@ -452,7 +457,8 @@ if [ -z "${CT_RESTART}" ]; then
# Set the shell to be used by ./configure scripts and by Makefiles (those
# that support it!).
export CONFIG_SHELL="${CT_SHELL}"
export CONFIG_SHELL="${CT_SHELL}" # for ./configure
export SHELL="${CT_SHELL}" # for Makefiles
# And help make go faster
PARALLELMFLAGS=