config-patches
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[PATCH 1/2] * config.sub: Properly recognise configs with 4 components


From: John Ericson
Subject: [PATCH 1/2] * config.sub: Properly recognise configs with 4 components
Date: Tue, 1 May 2018 14:53:46 -0400

---
 ChangeLog  | 27 ++++++++++++++++++++++++++
 config.sub | 65 ++++++++++++++++++++++++++++++++++++++------------------------
 2 files changed, 67 insertions(+), 25 deletions(-)

diff --git a/ChangeLog b/ChangeLog
index e32c2c5..1931be3 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,30 @@
+2018-04-24  John Ericson  <address@hidden>
+
+       * config.sub: Properly recognise configs with 4 components.
+
+       The old logic was a bit hard to follow due to lots of sed and
+       unintuitive collapsing of cases. The code now works like this
+
+               * 4 components is always parsed as
+                 CPU_TYPE-MANUFACTURER-KERNEL-OPERATING_SYSTEM
+
+               * 2 components is always parsed as
+                 CPU_TYPE-OPERATING_SYSTEM
+
+               * 1 component is always parsed as
+                 CPU_TYPE
+
+               * 3 components is ambiguous and parsed as either
+                 CPU_TYPE-MANUFACTURER-OPERATING_SYSTEM
+                 CPU_TYPE-KERNEL-OPERATING_SYSTEM
+
+       The old code differed semantically in that
+
+               * The 4-case was awkwardly folded into the 3-case disambiguation
+
+               * The "android-linux" ad-hoc fixdup did something different in
+                 the non-3 cases, but isn't intended to apply in those cases.
+
 2018-05-01  Ben Elliston  <address@hidden>
 
        * config.sub (maybe_os): Reindent this block.
diff --git a/config.sub b/config.sub
index 703b313..9992b9c 100755
--- a/config.sub
+++ b/config.sub
@@ -110,33 +110,48 @@ case $# in
     exit 1;;
 esac
 
-# Separate what the user gave into CPU-COMPANY and OS or KERNEL-OS (if any).
-# Here we must recognize all the valid KERNEL-OS combinations.
-maybe_os=`echo "$1" | sed 's/^\(.*\)-\([^-]*-[^-]*\)$/\2/'`
-case $maybe_os in
-       nto-qnx* | linux-gnu* | linux-android* | linux-dietlibc | linux-newlib* 
| \
-       linux-musl* | linux-uclibc* | uclinux-uclibc* | uclinux-gnu* | 
kfreebsd*-gnu* | \
-       knetbsd*-gnu* | netbsd*-gnu* | netbsd*-eabi* | \
-       kopensolaris*-gnu* | cloudabi*-eabi* | \
-       storm-chaos* | os2-emx* | rtmk-nova*)
-       os=-$maybe_os
-       basic_machine=`echo "$1" | sed 's/^\(.*\)-\([^-]*-[^-]*\)$/\1/'`
-       ;;
-    android-linux)
-       os=-linux-android
-       basic_machine=`echo "$1" | sed 's/^\(.*\)-\([^-]*-[^-]*\)$/\1/'`-unknown
-       ;;
-    *)
-       basic_machine=`echo "$1" | sed 's/-[^-]*$//'`
-       case $1 in
-           *-*)
-               os=`echo "$1" | sed 's/.*-/-/'`
-               ;;
-           *)
+# Physical components of config
+IFS="-" read comp1 comp2 comp3 comp4 <<EOF
+$1
+EOF
+
+# Separate into logical components for further validation
+case $1 in
+       *-*-*-*)
+               basic_machine=$comp1-$comp2
+               os=-$comp3-$comp4
+               ;;
+       *-*-*)
+               # Ambiguous whether COMPANY is present, or skipped and 
KERNEL-OS is two
+               # parts
+               maybe_os=$comp2-$comp3
+               case $maybe_os in
+                       nto-qnx* | linux-gnu* | linux-android* | linux-dietlibc 
\
+                       | linux-newlib* | linux-musl* | linux-uclibc* | 
uclinux-uclibc* \
+                       | uclinux-gnu* | kfreebsd*-gnu* | knetbsd*-gnu* | 
netbsd*-gnu* \
+                       | netbsd*-eabi* | kopensolaris*-gnu* | cloudabi*-eabi* \
+                       | storm-chaos* | os2-emx* | rtmk-nova*)
+                               basic_machine=$comp1
+                               os=-$maybe_os
+                               ;;
+                       android-linux)
+                               basic_machine=$comp1-unknown
+                               os=-linux-android
+                               ;;
+                       *)
+                               basic_machine=$comp1-$comp2
+                               os=-$comp3
+                               ;;
+               esac
+               ;;
+       *-*)
+               basic_machine=$comp1
+               os=-$comp2
+               ;;
+       *)
+               basic_machine=$1
                os=
                ;;
-       esac
-       ;;
 esac
 
 ### Let's recognize common machines as not being operating systems so
-- 
2.16.3




reply via email to

[Prev in Thread] Current Thread [Next in Thread]