all.sh: Parse arguments before checking if a test is supported

Support for each test was checked before the command line had been
parsed, causing the support_ functions to ignore arguments that set a
tool's location.

Signed-off-by: Bence Szépkúti <bence.szepkuti@arm.com>
This commit is contained in:
Bence Szépkúti 2023-12-15 19:20:31 +01:00
parent cddab78612
commit 71c71eb91c

View File

@ -205,15 +205,8 @@ pre_initialize_variables () {
# defined in this script whose name starts with "component_". # defined in this script whose name starts with "component_".
ALL_COMPONENTS=$(compgen -A function component_ | sed 's/component_//') ALL_COMPONENTS=$(compgen -A function component_ | sed 's/component_//')
# Exclude components that are not supported on this platform. # Delay determinig SUPPORTED_COMPONENTS until the command line options have a chance to override
SUPPORTED_COMPONENTS= # the commands set by the environment
for component in $ALL_COMPONENTS; do
case $(type "support_$component" 2>&1) in
*' function'*)
if ! support_$component; then continue; fi;;
esac
SUPPORTED_COMPONENTS="$SUPPORTED_COMPONENTS $component"
done
} }
# Test whether the component $1 is included in the command line patterns. # Test whether the component $1 is included in the command line patterns.
@ -423,22 +416,11 @@ check_tools()
done done
} }
pre_parse_command_line_for_dirs () {
# Make an early pass through the options given, so we can set directories
# for Arm compilers, before SUPPORTED_COMPONENTS is determined.
while [ $# -gt 0 ]; do
case "$1" in
--armc5-bin-dir) shift; ARMC5_BIN_DIR="$1";;
--armc6-bin-dir) shift; ARMC6_BIN_DIR="$1";;
esac
shift
done
}
pre_parse_command_line () { pre_parse_command_line () {
COMMAND_LINE_COMPONENTS= COMMAND_LINE_COMPONENTS=
all_except=0 all_except=0
error_test=0 error_test=0
list_components=0
restore_first=0 restore_first=0
no_armcc= no_armcc=
@ -451,8 +433,8 @@ pre_parse_command_line () {
--arm-none-eabi-gcc-prefix) shift; ARM_NONE_EABI_GCC_PREFIX="$1";; --arm-none-eabi-gcc-prefix) shift; ARM_NONE_EABI_GCC_PREFIX="$1";;
--arm-linux-gnueabi-gcc-prefix) shift; ARM_LINUX_GNUEABI_GCC_PREFIX="$1";; --arm-linux-gnueabi-gcc-prefix) shift; ARM_LINUX_GNUEABI_GCC_PREFIX="$1";;
--armcc) no_armcc=;; --armcc) no_armcc=;;
--armc5-bin-dir) shift; ;; # assignment to ARMC5_BIN_DIR done in pre_parse_command_line_for_dirs --armc5-bin-dir) shift; ARMC5_BIN_DIR="$1";;
--armc6-bin-dir) shift; ;; # assignment to ARMC6_BIN_DIR done in pre_parse_command_line_for_dirs --armc6-bin-dir) shift; ARMC6_BIN_DIR="$1";;
--clang-earliest) shift; CLANG_EARLIEST="$1";; --clang-earliest) shift; CLANG_EARLIEST="$1";;
--clang-latest) shift; CLANG_LATEST="$1";; --clang-latest) shift; CLANG_LATEST="$1";;
--error-test) error_test=$((error_test + 1));; --error-test) error_test=$((error_test + 1));;
@ -467,7 +449,7 @@ pre_parse_command_line () {
--help|-h) usage; exit;; --help|-h) usage; exit;;
--keep-going|-k) KEEP_GOING=1;; --keep-going|-k) KEEP_GOING=1;;
--list-all-components) printf '%s\n' $ALL_COMPONENTS; exit;; --list-all-components) printf '%s\n' $ALL_COMPONENTS; exit;;
--list-components) printf '%s\n' $SUPPORTED_COMPONENTS; exit;; --list-components) list_components=1;;
--memory|-m) MEMORY=1;; --memory|-m) MEMORY=1;;
--no-append-outcome) append_outcome=0;; --no-append-outcome) append_outcome=0;;
--no-armcc) no_armcc=1;; --no-armcc) no_armcc=1;;
@ -494,6 +476,21 @@ pre_parse_command_line () {
shift shift
done done
# Exclude components that are not supported on this platform.
SUPPORTED_COMPONENTS=
for component in $ALL_COMPONENTS; do
case $(type "support_$component" 2>&1) in
*' function'*)
if ! support_$component; then continue; fi;;
esac
SUPPORTED_COMPONENTS="$SUPPORTED_COMPONENTS $component"
done
if [ $list_components -eq 1 ]; then
printf '%s\n' $SUPPORTED_COMPONENTS
exit
fi
# With no list of components, run everything. # With no list of components, run everything.
if [ -z "$COMMAND_LINE_COMPONENTS" ] && [ $restore_first -eq 0 ]; then if [ -z "$COMMAND_LINE_COMPONENTS" ] && [ $restore_first -eq 0 ]; then
all_except=1 all_except=1
@ -6157,7 +6154,6 @@ run_component () {
# Preliminary setup # Preliminary setup
pre_check_environment pre_check_environment
pre_parse_command_line_for_dirs "$@"
pre_initialize_variables pre_initialize_variables
pre_parse_command_line "$@" pre_parse_command_line "$@"