all.sh: Always build the list of components to run

Build the list of components to run in $RUN_COMPONENTS as part of
command line parsing. After parsing the command line, it no longer
matters how this list was built.
diff --git a/tests/scripts/all.sh b/tests/scripts/all.sh
index 8faa441..46ca5d5 100755
--- a/tests/scripts/all.sh
+++ b/tests/scripts/all.sh
@@ -103,8 +103,6 @@
     CONFIG_H='include/mbedtls/config.h'
     CONFIG_BAK="$CONFIG_H.bak"
 
-    COMPONENTS=
-    ALL_EXCEPT=0
     MEMORY=0
     FORCE=0
     KEEP_GOING=0
@@ -150,7 +148,7 @@
     # Is $1 excluded via $COMPONENTS (a space-separated list of wildcard
     # patterns)?
     set -f
-    for pattern in $COMPONENTS; do
+    for pattern in $COMMAND_LINE_COMPONENTS; do
         set +f
         case ${1#component_} in $pattern) return 0;; esac
     done
@@ -291,12 +289,15 @@
 }
 
 pre_parse_command_line () {
+    COMMAND_LINE_COMPONENTS=
+    all_except=
+
     while [ $# -gt 0 ]; do
         case "$1" in
             --armcc) RUN_ARMCC=1;;
             --armc5-bin-dir) shift; ARMC5_BIN_DIR="$1";;
             --armc6-bin-dir) shift; ARMC6_BIN_DIR="$1";;
-            --except) ALL_EXCEPT=1;;
+            --except) all_except=1;;
             --force|-f) FORCE=1;;
             --gnutls-cli) shift; GNUTLS_CLI="$1";;
             --gnutls-legacy-cli) shift; GNUTLS_LEGACY_CLI="$1";;
@@ -323,11 +324,28 @@
                 echo >&2 "Run $0 --help for usage."
                 exit 120
                 ;;
-            *)
-                COMPONENTS="$COMPONENTS $1";;
+            *) COMMAND_LINE_COMPONENTS="$COMMAND_LINE_COMPONENTS $1";;
         esac
         shift
     done
+
+    if [ -z "$COMMAND_LINE_COMPONENTS" ]; then
+        all_except=1
+    fi
+
+    # Build the list of components to run.
+    if [ -n "$all_except" ]; then
+        RUN_COMPONENTS=
+        for component in $SUPPORTED_COMPONENTS; do
+            if ! is_component_excluded "$component"; then
+                RUN_COMPONENTS="$RUN_COMPONENTS $component"
+            fi
+        done
+    else
+        RUN_COMPONENTS="$COMMAND_LINE_COMPONENTS"
+    fi
+
+    unset all_except
 }
 
 pre_check_git () {
@@ -1213,19 +1231,10 @@
 pre_print_tools
 cleanup
 
-if [ -n "$COMPONENTS" ] && [ $ALL_EXCEPT -eq 0 ]; then
-    # Run the components passed on the command line.
-    for component in $COMPONENTS; do
-        run_component "component_$component"
-    done
-else
-    # Run all components except those excluded on the command line.
-    for component in $SUPPORTED_COMPONENTS; do
-        if ! is_component_excluded "$component"; then
-            run_component "component_$component"
-        fi
-    done
-fi
+# Run the requested tests.
+for component in $RUN_COMPONENTS; do
+    run_component "component_$component"
+done
 
 # We're done.
 post_report