--- ChangeLog | 27 +++++++++++++++++++++++++++ config.sub | 46 +++++++++++++++++++++++++++++++--------------- 2 files changed, 58 insertions(+), 15 deletions(-)
diff --git a/ChangeLog b/ChangeLog index 0655aad..7e675c9 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,30 @@ +2018-04-24 John Ericson <john.ericson@obsidian.systems> + + * 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 John Ericson <john.ericson@obsidian.systems> * config.sub (os, maybe_os): Normalize indentation to match rest of diff --git a/config.sub b/config.sub index 5e5eac2..06c755b 100755 --- a/config.sub +++ b/config.sub @@ -110,33 +110,49 @@ 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 +# Physical components of config +comp1=`echo "$1" | sed 's/^\([^-]*\).*$/\1/'` +comp2=`echo "$1" | sed 's/^[^-]*-\([^-]*\).*$/\1/'` +comp3=`echo "$1" | sed 's/^[^-]*-[^-]*-\([^-]*\).*$/\1/'` +comp4=`echo "$1" | sed 's/^[^-]*-[^-]*-[^-]*-\([^-]*\).*$/\1/'` + +# 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 - basic_machine=`echo "$1" | sed 's/^\(.*\)-\([^-]*-[^-]*\)$/\1/'` ;; android-linux) + basic_machine=$comp1-unknown 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/.*-/-/'` - ;; - *) - os= - ;; - esac + basic_machine=$comp1-$comp2 + os=-$comp3 ;; + esac + ;; + *-*) + basic_machine=$comp1 + os=-$comp2 + ;; + *) + basic_machine=$1 + os= + ;; esac ### Let's recognize common machines as not being operating systems so -- 2.16.3 _______________________________________________ config-patches mailing list config-patches@gnu.org https://lists.gnu.org/mailman/listinfo/config-patches