summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--config/global/build-behave.in74
-rw-r--r--scripts/crosstool-NG.sh.in14
2 files changed, 77 insertions, 11 deletions
diff --git a/config/global/build-behave.in b/config/global/build-behave.in
index 7f8a854..9ee8316 100644
--- a/config/global/build-behave.in
+++ b/config/global/build-behave.in
@@ -44,16 +44,74 @@ 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 (READ HELP!)"
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.
+ See help for CONFIG_SHELL_SH, above, for more explanations.
- 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.
+ NOTE: It is advised that you do NOT use ash as CONFIG_SHELL, as some
+ components are broken. If you decide to use ash, and the build breaks,
+ don't come moaning and set the CONFIG_SHELL to bash, below.
+
+config CONFIG_SHELL_BASH
+ bool
+ prompt "bash"
+ help
+ Use 'bash' as CONFIG_SHELL.
+
+ See help for CONFIG_SHELL_SH, above, for more explanations.
+
+config CONFIG_SHELL_CUSTOM
+ bool
+ prompt "custom shell"
+ help
+ Enter full path to the custom shell below.
+
+ See help for CONFIG_SHELL_SH, above, for more explanations.
+
+config CONFIG_SHELL_CUSTOM_PATH
+ string
+ prompt "Path to custom shell"
+ depends on CONFIG_SHELL_CUSTOM
+ default "/bin/sh"
+
+endchoice
+
+config CONFIG_SHELL
+ string
+ default "sh" if CONFIG_SHELL_SH
+ default "ash" if CONFIG_SHELL_ASH
+ default "bash" if CONFIG_SHELL_BASH
+ default "custom" if CONFIG_SHELL_CUSTOM
diff --git a/scripts/crosstool-NG.sh.in b/scripts/crosstool-NG.sh.in
index 6382c0a..ba30c4f 100644
--- a/scripts/crosstool-NG.sh.in
+++ b/scripts/crosstool-NG.sh.in
@@ -63,8 +63,15 @@ 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";;
+ bash) CT_SHELL="${BASH}";;
+ custom) CT_SHELL="${CT_CONFIG_SHELL_CUSTOM_PATH}";;
+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 +459,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=