1943345d3Smrg#! /bin/sh
2943345d3Smrg# Configuration validation subroutine script.
315ffece8Smrg#   Copyright 1992-2023 Free Software Foundation, Inc.
4943345d3Smrg
515ffece8Smrg# shellcheck disable=SC2006,SC2268 # see below for rationale
6943345d3Smrg
715ffece8Smrgtimestamp='2023-01-21'
815ffece8Smrg
915ffece8Smrg# This file is free software; you can redistribute it and/or modify it
1015ffece8Smrg# under the terms of the GNU General Public License as published by
1115ffece8Smrg# the Free Software Foundation, either version 3 of the License, or
12943345d3Smrg# (at your option) any later version.
13943345d3Smrg#
1415ffece8Smrg# This program is distributed in the hope that it will be useful, but
1515ffece8Smrg# WITHOUT ANY WARRANTY; without even the implied warranty of
1615ffece8Smrg# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
1715ffece8Smrg# General Public License for more details.
18943345d3Smrg#
19943345d3Smrg# You should have received a copy of the GNU General Public License
2015ffece8Smrg# along with this program; if not, see <https://www.gnu.org/licenses/>.
21f67b85aaSmrg#
22943345d3Smrg# As a special exception to the GNU General Public License, if you
23943345d3Smrg# distribute this file as part of a program that contains a
24943345d3Smrg# configuration script generated by Autoconf, you may include it under
2515ffece8Smrg# the same distribution terms that you use for the rest of that
2615ffece8Smrg# program.  This Exception is an additional permission under section 7
2715ffece8Smrg# of the GNU General Public License, version 3 ("GPLv3").
28943345d3Smrg
29f67b85aaSmrg
3015ffece8Smrg# Please send patches to <config-patches@gnu.org>.
31943345d3Smrg#
32943345d3Smrg# Configuration subroutine to validate and canonicalize a configuration type.
33943345d3Smrg# Supply the specified configuration type as an argument.
34943345d3Smrg# If it is invalid, we print an error message on stderr and exit with code 1.
35943345d3Smrg# Otherwise, we print the canonical config type on stdout and succeed.
36943345d3Smrg
37a7b590b3Smrg# You can get the latest version of this script from:
3815ffece8Smrg# https://git.savannah.gnu.org/cgit/config.git/plain/config.sub
39a7b590b3Smrg
40943345d3Smrg# This file is supposed to be the same for all GNU packages
41943345d3Smrg# and recognize all the CPU types, system types and aliases
42943345d3Smrg# that are meaningful with *any* GNU software.
43943345d3Smrg# Each package is responsible for reporting which valid configurations
44943345d3Smrg# it does not support.  The user should be able to distinguish
45943345d3Smrg# a failure to support a valid configuration from a meaningless
46943345d3Smrg# configuration.
47943345d3Smrg
48943345d3Smrg# The goal of this file is to map all the various variations of a given
49943345d3Smrg# machine specification into a single specification in the form:
50943345d3Smrg#	CPU_TYPE-MANUFACTURER-OPERATING_SYSTEM
51943345d3Smrg# or in some cases, the newer four-part form:
52943345d3Smrg#	CPU_TYPE-MANUFACTURER-KERNEL-OPERATING_SYSTEM
53943345d3Smrg# It is wrong to echo any other type of specification.
54943345d3Smrg
5515ffece8Smrg# The "shellcheck disable" line above the timestamp inhibits complaints
5615ffece8Smrg# about features and limitations of the classic Bourne shell that were
5715ffece8Smrg# superseded or lifted in POSIX.  However, this script identifies a wide
5815ffece8Smrg# variety of pre-POSIX systems that do not have POSIX shells at all, and
5915ffece8Smrg# even some reasonably current systems (Solaris 10 as case-in-point) still
6015ffece8Smrg# have a pre-POSIX /bin/sh.
6115ffece8Smrg
62943345d3Smrgme=`echo "$0" | sed -e 's,.*/,,'`
63943345d3Smrg
64943345d3Smrgusage="\
6515ffece8SmrgUsage: $0 [OPTION] CPU-MFR-OPSYS or ALIAS
66943345d3Smrg
67943345d3SmrgCanonicalize a configuration name.
68943345d3Smrg
6915ffece8SmrgOptions:
70943345d3Smrg  -h, --help         print this help, then exit
71943345d3Smrg  -t, --time-stamp   print date of last modification, then exit
72943345d3Smrg  -v, --version      print version number, then exit
73943345d3Smrg
74943345d3SmrgReport bugs and patches to <config-patches@gnu.org>."
75943345d3Smrg
76943345d3Smrgversion="\
77943345d3SmrgGNU config.sub ($timestamp)
78943345d3Smrg
7915ffece8SmrgCopyright 1992-2023 Free Software Foundation, Inc.
80943345d3Smrg
81943345d3SmrgThis is free software; see the source for copying conditions.  There is NO
82943345d3Smrgwarranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE."
83943345d3Smrg
84943345d3Smrghelp="
85943345d3SmrgTry \`$me --help' for more information."
86943345d3Smrg
87943345d3Smrg# Parse command line
88943345d3Smrgwhile test $# -gt 0 ; do
89943345d3Smrg  case $1 in
90943345d3Smrg    --time-stamp | --time* | -t )
91f67b85aaSmrg       echo "$timestamp" ; exit ;;
92943345d3Smrg    --version | -v )
93f67b85aaSmrg       echo "$version" ; exit ;;
94943345d3Smrg    --help | --h* | -h )
95f67b85aaSmrg       echo "$usage"; exit ;;
96943345d3Smrg    -- )     # Stop option processing
97943345d3Smrg       shift; break ;;
98943345d3Smrg    - )	# Use stdin as input.
99943345d3Smrg       break ;;
100943345d3Smrg    -* )
10115ffece8Smrg       echo "$me: invalid option $1$help" >&2
102943345d3Smrg       exit 1 ;;
103943345d3Smrg
104943345d3Smrg    *local*)
105943345d3Smrg       # First pass through any local machine types.
10615ffece8Smrg       echo "$1"
107f67b85aaSmrg       exit ;;
108943345d3Smrg
109943345d3Smrg    * )
110943345d3Smrg       break ;;
111943345d3Smrg  esac
112943345d3Smrgdone
113943345d3Smrg
114943345d3Smrgcase $# in
115943345d3Smrg 0) echo "$me: missing argument$help" >&2
116943345d3Smrg    exit 1;;
117943345d3Smrg 1) ;;
118943345d3Smrg *) echo "$me: too many arguments$help" >&2
119943345d3Smrg    exit 1;;
120943345d3Smrgesac
121943345d3Smrg
12215ffece8Smrg# Split fields of configuration type
12315ffece8Smrg# shellcheck disable=SC2162
12415ffece8Smrgsaved_IFS=$IFS
12515ffece8SmrgIFS="-" read field1 field2 field3 field4 <<EOF
12615ffece8Smrg$1
12715ffece8SmrgEOF
12815ffece8SmrgIFS=$saved_IFS
129943345d3Smrg
13015ffece8Smrg# Separate into logical components for further validation
13115ffece8Smrgcase $1 in
13215ffece8Smrg	*-*-*-*-*)
13315ffece8Smrg		echo Invalid configuration \`"$1"\': more than four components >&2
13415ffece8Smrg		exit 1
135943345d3Smrg		;;
13615ffece8Smrg	*-*-*-*)
13715ffece8Smrg		basic_machine=$field1-$field2
13815ffece8Smrg		basic_os=$field3-$field4
139943345d3Smrg		;;
14015ffece8Smrg	*-*-*)
14115ffece8Smrg		# Ambiguous whether COMPANY is present, or skipped and KERNEL-OS is two
14215ffece8Smrg		# parts
14315ffece8Smrg		maybe_os=$field2-$field3
14415ffece8Smrg		case $maybe_os in
14515ffece8Smrg			nto-qnx* | linux-* | uclinux-uclibc* \
14615ffece8Smrg			| uclinux-gnu* | kfreebsd*-gnu* | knetbsd*-gnu* | netbsd*-gnu* \
14715ffece8Smrg			| netbsd*-eabi* | kopensolaris*-gnu* | cloudabi*-eabi* \
14815ffece8Smrg			| storm-chaos* | os2-emx* | rtmk-nova* | managarm-*)
14915ffece8Smrg				basic_machine=$field1
15015ffece8Smrg				basic_os=$maybe_os
15115ffece8Smrg				;;
15215ffece8Smrg			android-linux)
15315ffece8Smrg				basic_machine=$field1-unknown
15415ffece8Smrg				basic_os=linux-android
15515ffece8Smrg				;;
15615ffece8Smrg			*)
15715ffece8Smrg				basic_machine=$field1-$field2
15815ffece8Smrg				basic_os=$field3
15915ffece8Smrg				;;
16015ffece8Smrg		esac
161943345d3Smrg		;;
16215ffece8Smrg	*-*)
16315ffece8Smrg		# A lone config we happen to match not fitting any pattern
16415ffece8Smrg		case $field1-$field2 in
16515ffece8Smrg			decstation-3100)
16615ffece8Smrg				basic_machine=mips-dec
16715ffece8Smrg				basic_os=
16815ffece8Smrg				;;
16915ffece8Smrg			*-*)
17015ffece8Smrg				# Second component is usually, but not always the OS
17115ffece8Smrg				case $field2 in
17215ffece8Smrg					# Prevent following clause from handling this valid os
17315ffece8Smrg					sun*os*)
17415ffece8Smrg						basic_machine=$field1
17515ffece8Smrg						basic_os=$field2
17615ffece8Smrg						;;
17715ffece8Smrg					zephyr*)
17815ffece8Smrg						basic_machine=$field1-unknown
17915ffece8Smrg						basic_os=$field2
18015ffece8Smrg						;;
18115ffece8Smrg					# Manufacturers
18215ffece8Smrg					dec* | mips* | sequent* | encore* | pc533* | sgi* | sony* \
18315ffece8Smrg					| att* | 7300* | 3300* | delta* | motorola* | sun[234]* \
18415ffece8Smrg					| unicom* | ibm* | next | hp | isi* | apollo | altos* \
18515ffece8Smrg					| convergent* | ncr* | news | 32* | 3600* | 3100* \
18615ffece8Smrg					| hitachi* | c[123]* | convex* | sun | crds | omron* | dg \
18715ffece8Smrg					| ultra | tti* | harris | dolphin | highlevel | gould \
18815ffece8Smrg					| cbm | ns | masscomp | apple | axis | knuth | cray \
18915ffece8Smrg					| microblaze* | sim | cisco \
19015ffece8Smrg					| oki | wec | wrs | winbond)
19115ffece8Smrg						basic_machine=$field1-$field2
19215ffece8Smrg						basic_os=
19315ffece8Smrg						;;
19415ffece8Smrg					*)
19515ffece8Smrg						basic_machine=$field1
19615ffece8Smrg						basic_os=$field2
19715ffece8Smrg						;;
19815ffece8Smrg				esac
19915ffece8Smrg			;;
20015ffece8Smrg		esac
201943345d3Smrg		;;
20215ffece8Smrg	*)
20315ffece8Smrg		# Convert single-component short-hands not valid as part of
20415ffece8Smrg		# multi-component configurations.
20515ffece8Smrg		case $field1 in
20615ffece8Smrg			386bsd)
20715ffece8Smrg				basic_machine=i386-pc
20815ffece8Smrg				basic_os=bsd
20915ffece8Smrg				;;
21015ffece8Smrg			a29khif)
21115ffece8Smrg				basic_machine=a29k-amd
21215ffece8Smrg				basic_os=udi
21315ffece8Smrg				;;
21415ffece8Smrg			adobe68k)
21515ffece8Smrg				basic_machine=m68010-adobe
21615ffece8Smrg				basic_os=scout
21715ffece8Smrg				;;
21815ffece8Smrg			alliant)
21915ffece8Smrg				basic_machine=fx80-alliant
22015ffece8Smrg				basic_os=
22115ffece8Smrg				;;
22215ffece8Smrg			altos | altos3068)
22315ffece8Smrg				basic_machine=m68k-altos
22415ffece8Smrg				basic_os=
22515ffece8Smrg				;;
22615ffece8Smrg			am29k)
22715ffece8Smrg				basic_machine=a29k-none
22815ffece8Smrg				basic_os=bsd
22915ffece8Smrg				;;
23015ffece8Smrg			amdahl)
23115ffece8Smrg				basic_machine=580-amdahl
23215ffece8Smrg				basic_os=sysv
23315ffece8Smrg				;;
23415ffece8Smrg			amiga)
23515ffece8Smrg				basic_machine=m68k-unknown
23615ffece8Smrg				basic_os=
23715ffece8Smrg				;;
23815ffece8Smrg			amigaos | amigados)
23915ffece8Smrg				basic_machine=m68k-unknown
24015ffece8Smrg				basic_os=amigaos
24115ffece8Smrg				;;
24215ffece8Smrg			amigaunix | amix)
24315ffece8Smrg				basic_machine=m68k-unknown
24415ffece8Smrg				basic_os=sysv4
24515ffece8Smrg				;;
24615ffece8Smrg			apollo68)
24715ffece8Smrg				basic_machine=m68k-apollo
24815ffece8Smrg				basic_os=sysv
24915ffece8Smrg				;;
25015ffece8Smrg			apollo68bsd)
25115ffece8Smrg				basic_machine=m68k-apollo
25215ffece8Smrg				basic_os=bsd
25315ffece8Smrg				;;
25415ffece8Smrg			aros)
25515ffece8Smrg				basic_machine=i386-pc
25615ffece8Smrg				basic_os=aros
25715ffece8Smrg				;;
25815ffece8Smrg			aux)
25915ffece8Smrg				basic_machine=m68k-apple
26015ffece8Smrg				basic_os=aux
26115ffece8Smrg				;;
26215ffece8Smrg			balance)
26315ffece8Smrg				basic_machine=ns32k-sequent
26415ffece8Smrg				basic_os=dynix
26515ffece8Smrg				;;
26615ffece8Smrg			blackfin)
26715ffece8Smrg				basic_machine=bfin-unknown
26815ffece8Smrg				basic_os=linux
26915ffece8Smrg				;;
27015ffece8Smrg			cegcc)
27115ffece8Smrg				basic_machine=arm-unknown
27215ffece8Smrg				basic_os=cegcc
27315ffece8Smrg				;;
27415ffece8Smrg			convex-c1)
27515ffece8Smrg				basic_machine=c1-convex
27615ffece8Smrg				basic_os=bsd
27715ffece8Smrg				;;
27815ffece8Smrg			convex-c2)
27915ffece8Smrg				basic_machine=c2-convex
28015ffece8Smrg				basic_os=bsd
28115ffece8Smrg				;;
28215ffece8Smrg			convex-c32)
28315ffece8Smrg				basic_machine=c32-convex
28415ffece8Smrg				basic_os=bsd
28515ffece8Smrg				;;
28615ffece8Smrg			convex-c34)
28715ffece8Smrg				basic_machine=c34-convex
28815ffece8Smrg				basic_os=bsd
28915ffece8Smrg				;;
29015ffece8Smrg			convex-c38)
29115ffece8Smrg				basic_machine=c38-convex
29215ffece8Smrg				basic_os=bsd
29315ffece8Smrg				;;
29415ffece8Smrg			cray)
29515ffece8Smrg				basic_machine=j90-cray
29615ffece8Smrg				basic_os=unicos
29715ffece8Smrg				;;
29815ffece8Smrg			crds | unos)
29915ffece8Smrg				basic_machine=m68k-crds
30015ffece8Smrg				basic_os=
30115ffece8Smrg				;;
30215ffece8Smrg			da30)
30315ffece8Smrg				basic_machine=m68k-da30
30415ffece8Smrg				basic_os=
30515ffece8Smrg				;;
30615ffece8Smrg			decstation | pmax | pmin | dec3100 | decstatn)
30715ffece8Smrg				basic_machine=mips-dec
30815ffece8Smrg				basic_os=
30915ffece8Smrg				;;
31015ffece8Smrg			delta88)
31115ffece8Smrg				basic_machine=m88k-motorola
31215ffece8Smrg				basic_os=sysv3
31315ffece8Smrg				;;
31415ffece8Smrg			dicos)
31515ffece8Smrg				basic_machine=i686-pc
31615ffece8Smrg				basic_os=dicos
31715ffece8Smrg				;;
31815ffece8Smrg			djgpp)
31915ffece8Smrg				basic_machine=i586-pc
32015ffece8Smrg				basic_os=msdosdjgpp
32115ffece8Smrg				;;
32215ffece8Smrg			ebmon29k)
32315ffece8Smrg				basic_machine=a29k-amd
32415ffece8Smrg				basic_os=ebmon
32515ffece8Smrg				;;
32615ffece8Smrg			es1800 | OSE68k | ose68k | ose | OSE)
32715ffece8Smrg				basic_machine=m68k-ericsson
32815ffece8Smrg				basic_os=ose
32915ffece8Smrg				;;
33015ffece8Smrg			gmicro)
33115ffece8Smrg				basic_machine=tron-gmicro
33215ffece8Smrg				basic_os=sysv
33315ffece8Smrg				;;
33415ffece8Smrg			go32)
33515ffece8Smrg				basic_machine=i386-pc
33615ffece8Smrg				basic_os=go32
33715ffece8Smrg				;;
33815ffece8Smrg			h8300hms)
33915ffece8Smrg				basic_machine=h8300-hitachi
34015ffece8Smrg				basic_os=hms
34115ffece8Smrg				;;
34215ffece8Smrg			h8300xray)
34315ffece8Smrg				basic_machine=h8300-hitachi
34415ffece8Smrg				basic_os=xray
34515ffece8Smrg				;;
34615ffece8Smrg			h8500hms)
34715ffece8Smrg				basic_machine=h8500-hitachi
34815ffece8Smrg				basic_os=hms
34915ffece8Smrg				;;
35015ffece8Smrg			harris)
35115ffece8Smrg				basic_machine=m88k-harris
35215ffece8Smrg				basic_os=sysv3
35315ffece8Smrg				;;
35415ffece8Smrg			hp300 | hp300hpux)
35515ffece8Smrg				basic_machine=m68k-hp
35615ffece8Smrg				basic_os=hpux
35715ffece8Smrg				;;
35815ffece8Smrg			hp300bsd)
35915ffece8Smrg				basic_machine=m68k-hp
36015ffece8Smrg				basic_os=bsd
36115ffece8Smrg				;;
36215ffece8Smrg			hppaosf)
36315ffece8Smrg				basic_machine=hppa1.1-hp
36415ffece8Smrg				basic_os=osf
36515ffece8Smrg				;;
36615ffece8Smrg			hppro)
36715ffece8Smrg				basic_machine=hppa1.1-hp
36815ffece8Smrg				basic_os=proelf
36915ffece8Smrg				;;
37015ffece8Smrg			i386mach)
37115ffece8Smrg				basic_machine=i386-mach
37215ffece8Smrg				basic_os=mach
37315ffece8Smrg				;;
37415ffece8Smrg			isi68 | isi)
37515ffece8Smrg				basic_machine=m68k-isi
37615ffece8Smrg				basic_os=sysv
37715ffece8Smrg				;;
37815ffece8Smrg			m68knommu)
37915ffece8Smrg				basic_machine=m68k-unknown
38015ffece8Smrg				basic_os=linux
38115ffece8Smrg				;;
38215ffece8Smrg			magnum | m3230)
38315ffece8Smrg				basic_machine=mips-mips
38415ffece8Smrg				basic_os=sysv
38515ffece8Smrg				;;
38615ffece8Smrg			merlin)
38715ffece8Smrg				basic_machine=ns32k-utek
38815ffece8Smrg				basic_os=sysv
38915ffece8Smrg				;;
39015ffece8Smrg			mingw64)
39115ffece8Smrg				basic_machine=x86_64-pc
39215ffece8Smrg				basic_os=mingw64
39315ffece8Smrg				;;
39415ffece8Smrg			mingw32)
39515ffece8Smrg				basic_machine=i686-pc
39615ffece8Smrg				basic_os=mingw32
39715ffece8Smrg				;;
39815ffece8Smrg			mingw32ce)
39915ffece8Smrg				basic_machine=arm-unknown
40015ffece8Smrg				basic_os=mingw32ce
40115ffece8Smrg				;;
40215ffece8Smrg			monitor)
40315ffece8Smrg				basic_machine=m68k-rom68k
40415ffece8Smrg				basic_os=coff
40515ffece8Smrg				;;
40615ffece8Smrg			morphos)
40715ffece8Smrg				basic_machine=powerpc-unknown
40815ffece8Smrg				basic_os=morphos
40915ffece8Smrg				;;
41015ffece8Smrg			moxiebox)
41115ffece8Smrg				basic_machine=moxie-unknown
41215ffece8Smrg				basic_os=moxiebox
41315ffece8Smrg				;;
41415ffece8Smrg			msdos)
41515ffece8Smrg				basic_machine=i386-pc
41615ffece8Smrg				basic_os=msdos
41715ffece8Smrg				;;
41815ffece8Smrg			msys)
41915ffece8Smrg				basic_machine=i686-pc
42015ffece8Smrg				basic_os=msys
42115ffece8Smrg				;;
42215ffece8Smrg			mvs)
42315ffece8Smrg				basic_machine=i370-ibm
42415ffece8Smrg				basic_os=mvs
42515ffece8Smrg				;;
42615ffece8Smrg			nacl)
42715ffece8Smrg				basic_machine=le32-unknown
42815ffece8Smrg				basic_os=nacl
42915ffece8Smrg				;;
43015ffece8Smrg			ncr3000)
43115ffece8Smrg				basic_machine=i486-ncr
43215ffece8Smrg				basic_os=sysv4
43315ffece8Smrg				;;
43415ffece8Smrg			netbsd386)
43515ffece8Smrg				basic_machine=i386-pc
43615ffece8Smrg				basic_os=netbsd
43715ffece8Smrg				;;
43815ffece8Smrg			netwinder)
43915ffece8Smrg				basic_machine=armv4l-rebel
44015ffece8Smrg				basic_os=linux
44115ffece8Smrg				;;
44215ffece8Smrg			news | news700 | news800 | news900)
44315ffece8Smrg				basic_machine=m68k-sony
44415ffece8Smrg				basic_os=newsos
44515ffece8Smrg				;;
44615ffece8Smrg			news1000)
44715ffece8Smrg				basic_machine=m68030-sony
44815ffece8Smrg				basic_os=newsos
44915ffece8Smrg				;;
45015ffece8Smrg			necv70)
45115ffece8Smrg				basic_machine=v70-nec
45215ffece8Smrg				basic_os=sysv
45315ffece8Smrg				;;
45415ffece8Smrg			nh3000)
45515ffece8Smrg				basic_machine=m68k-harris
45615ffece8Smrg				basic_os=cxux
45715ffece8Smrg				;;
45815ffece8Smrg			nh[45]000)
45915ffece8Smrg				basic_machine=m88k-harris
46015ffece8Smrg				basic_os=cxux
46115ffece8Smrg				;;
46215ffece8Smrg			nindy960)
46315ffece8Smrg				basic_machine=i960-intel
46415ffece8Smrg				basic_os=nindy
46515ffece8Smrg				;;
46615ffece8Smrg			mon960)
46715ffece8Smrg				basic_machine=i960-intel
46815ffece8Smrg				basic_os=mon960
46915ffece8Smrg				;;
47015ffece8Smrg			nonstopux)
47115ffece8Smrg				basic_machine=mips-compaq
47215ffece8Smrg				basic_os=nonstopux
47315ffece8Smrg				;;
47415ffece8Smrg			os400)
47515ffece8Smrg				basic_machine=powerpc-ibm
47615ffece8Smrg				basic_os=os400
47715ffece8Smrg				;;
47815ffece8Smrg			OSE68000 | ose68000)
47915ffece8Smrg				basic_machine=m68000-ericsson
48015ffece8Smrg				basic_os=ose
48115ffece8Smrg				;;
48215ffece8Smrg			os68k)
48315ffece8Smrg				basic_machine=m68k-none
48415ffece8Smrg				basic_os=os68k
48515ffece8Smrg				;;
48615ffece8Smrg			paragon)
48715ffece8Smrg				basic_machine=i860-intel
48815ffece8Smrg				basic_os=osf
48915ffece8Smrg				;;
49015ffece8Smrg			parisc)
49115ffece8Smrg				basic_machine=hppa-unknown
49215ffece8Smrg				basic_os=linux
49315ffece8Smrg				;;
49415ffece8Smrg			psp)
49515ffece8Smrg				basic_machine=mipsallegrexel-sony
49615ffece8Smrg				basic_os=psp
49715ffece8Smrg				;;
49815ffece8Smrg			pw32)
49915ffece8Smrg				basic_machine=i586-unknown
50015ffece8Smrg				basic_os=pw32
50115ffece8Smrg				;;
50215ffece8Smrg			rdos | rdos64)
50315ffece8Smrg				basic_machine=x86_64-pc
50415ffece8Smrg				basic_os=rdos
50515ffece8Smrg				;;
50615ffece8Smrg			rdos32)
50715ffece8Smrg				basic_machine=i386-pc
50815ffece8Smrg				basic_os=rdos
50915ffece8Smrg				;;
51015ffece8Smrg			rom68k)
51115ffece8Smrg				basic_machine=m68k-rom68k
51215ffece8Smrg				basic_os=coff
51315ffece8Smrg				;;
51415ffece8Smrg			sa29200)
51515ffece8Smrg				basic_machine=a29k-amd
51615ffece8Smrg				basic_os=udi
51715ffece8Smrg				;;
51815ffece8Smrg			sei)
51915ffece8Smrg				basic_machine=mips-sei
52015ffece8Smrg				basic_os=seiux
52115ffece8Smrg				;;
52215ffece8Smrg			sequent)
52315ffece8Smrg				basic_machine=i386-sequent
52415ffece8Smrg				basic_os=
52515ffece8Smrg				;;
52615ffece8Smrg			sps7)
52715ffece8Smrg				basic_machine=m68k-bull
52815ffece8Smrg				basic_os=sysv2
52915ffece8Smrg				;;
53015ffece8Smrg			st2000)
53115ffece8Smrg				basic_machine=m68k-tandem
53215ffece8Smrg				basic_os=
53315ffece8Smrg				;;
53415ffece8Smrg			stratus)
53515ffece8Smrg				basic_machine=i860-stratus
53615ffece8Smrg				basic_os=sysv4
53715ffece8Smrg				;;
53815ffece8Smrg			sun2)
53915ffece8Smrg				basic_machine=m68000-sun
54015ffece8Smrg				basic_os=
54115ffece8Smrg				;;
54215ffece8Smrg			sun2os3)
54315ffece8Smrg				basic_machine=m68000-sun
54415ffece8Smrg				basic_os=sunos3
54515ffece8Smrg				;;
54615ffece8Smrg			sun2os4)
54715ffece8Smrg				basic_machine=m68000-sun
54815ffece8Smrg				basic_os=sunos4
54915ffece8Smrg				;;
55015ffece8Smrg			sun3)
55115ffece8Smrg				basic_machine=m68k-sun
55215ffece8Smrg				basic_os=
55315ffece8Smrg				;;
55415ffece8Smrg			sun3os3)
55515ffece8Smrg				basic_machine=m68k-sun
55615ffece8Smrg				basic_os=sunos3
55715ffece8Smrg				;;
55815ffece8Smrg			sun3os4)
55915ffece8Smrg				basic_machine=m68k-sun
56015ffece8Smrg				basic_os=sunos4
56115ffece8Smrg				;;
56215ffece8Smrg			sun4)
56315ffece8Smrg				basic_machine=sparc-sun
56415ffece8Smrg				basic_os=
56515ffece8Smrg				;;
56615ffece8Smrg			sun4os3)
56715ffece8Smrg				basic_machine=sparc-sun
56815ffece8Smrg				basic_os=sunos3
56915ffece8Smrg				;;
57015ffece8Smrg			sun4os4)
57115ffece8Smrg				basic_machine=sparc-sun
57215ffece8Smrg				basic_os=sunos4
57315ffece8Smrg				;;
57415ffece8Smrg			sun4sol2)
57515ffece8Smrg				basic_machine=sparc-sun
57615ffece8Smrg				basic_os=solaris2
57715ffece8Smrg				;;
57815ffece8Smrg			sun386 | sun386i | roadrunner)
57915ffece8Smrg				basic_machine=i386-sun
58015ffece8Smrg				basic_os=
58115ffece8Smrg				;;
58215ffece8Smrg			sv1)
58315ffece8Smrg				basic_machine=sv1-cray
58415ffece8Smrg				basic_os=unicos
58515ffece8Smrg				;;
58615ffece8Smrg			symmetry)
58715ffece8Smrg				basic_machine=i386-sequent
58815ffece8Smrg				basic_os=dynix
58915ffece8Smrg				;;
59015ffece8Smrg			t3e)
59115ffece8Smrg				basic_machine=alphaev5-cray
59215ffece8Smrg				basic_os=unicos
59315ffece8Smrg				;;
59415ffece8Smrg			t90)
59515ffece8Smrg				basic_machine=t90-cray
59615ffece8Smrg				basic_os=unicos
59715ffece8Smrg				;;
59815ffece8Smrg			toad1)
59915ffece8Smrg				basic_machine=pdp10-xkl
60015ffece8Smrg				basic_os=tops20
60115ffece8Smrg				;;
60215ffece8Smrg			tpf)
60315ffece8Smrg				basic_machine=s390x-ibm
60415ffece8Smrg				basic_os=tpf
60515ffece8Smrg				;;
60615ffece8Smrg			udi29k)
60715ffece8Smrg				basic_machine=a29k-amd
60815ffece8Smrg				basic_os=udi
60915ffece8Smrg				;;
61015ffece8Smrg			ultra3)
61115ffece8Smrg				basic_machine=a29k-nyu
61215ffece8Smrg				basic_os=sym1
61315ffece8Smrg				;;
61415ffece8Smrg			v810 | necv810)
61515ffece8Smrg				basic_machine=v810-nec
61615ffece8Smrg				basic_os=none
61715ffece8Smrg				;;
61815ffece8Smrg			vaxv)
61915ffece8Smrg				basic_machine=vax-dec
62015ffece8Smrg				basic_os=sysv
62115ffece8Smrg				;;
62215ffece8Smrg			vms)
62315ffece8Smrg				basic_machine=vax-dec
62415ffece8Smrg				basic_os=vms
62515ffece8Smrg				;;
62615ffece8Smrg			vsta)
62715ffece8Smrg				basic_machine=i386-pc
62815ffece8Smrg				basic_os=vsta
62915ffece8Smrg				;;
63015ffece8Smrg			vxworks960)
63115ffece8Smrg				basic_machine=i960-wrs
63215ffece8Smrg				basic_os=vxworks
63315ffece8Smrg				;;
63415ffece8Smrg			vxworks68)
63515ffece8Smrg				basic_machine=m68k-wrs
63615ffece8Smrg				basic_os=vxworks
63715ffece8Smrg				;;
63815ffece8Smrg			vxworks29k)
63915ffece8Smrg				basic_machine=a29k-wrs
64015ffece8Smrg				basic_os=vxworks
64115ffece8Smrg				;;
64215ffece8Smrg			xbox)
64315ffece8Smrg				basic_machine=i686-pc
64415ffece8Smrg				basic_os=mingw32
64515ffece8Smrg				;;
64615ffece8Smrg			ymp)
64715ffece8Smrg				basic_machine=ymp-cray
64815ffece8Smrg				basic_os=unicos
64915ffece8Smrg				;;
65015ffece8Smrg			*)
65115ffece8Smrg				basic_machine=$1
65215ffece8Smrg				basic_os=
65315ffece8Smrg				;;
65415ffece8Smrg		esac
655943345d3Smrg		;;
656943345d3Smrgesac
657943345d3Smrg
65815ffece8Smrg# Decode 1-component or ad-hoc basic machines
659943345d3Smrgcase $basic_machine in
66015ffece8Smrg	# Here we handle the default manufacturer of certain CPU types.  It is in
66115ffece8Smrg	# some cases the only manufacturer, in others, it is the most popular.
66215ffece8Smrg	w89k)
66315ffece8Smrg		cpu=hppa1.1
66415ffece8Smrg		vendor=winbond
665f67b85aaSmrg		;;
66615ffece8Smrg	op50n)
66715ffece8Smrg		cpu=hppa1.1
66815ffece8Smrg		vendor=oki
6693e51e026Smrg		;;
67015ffece8Smrg	op60c)
67115ffece8Smrg		cpu=hppa1.1
67215ffece8Smrg		vendor=oki
6733e51e026Smrg		;;
67415ffece8Smrg	ibm*)
67515ffece8Smrg		cpu=i370
67615ffece8Smrg		vendor=ibm
6773e51e026Smrg		;;
67815ffece8Smrg	orion105)
67915ffece8Smrg		cpu=clipper
68015ffece8Smrg		vendor=highlevel
681943345d3Smrg		;;
68215ffece8Smrg	mac | mpw | mac-mpw)
68315ffece8Smrg		cpu=m68k
68415ffece8Smrg		vendor=apple
68515ffece8Smrg		;;
68615ffece8Smrg	pmac | pmac-mpw)
68715ffece8Smrg		cpu=powerpc
68815ffece8Smrg		vendor=apple
6895e695a52Smrg		;;
69015ffece8Smrg
691943345d3Smrg	# Recognize the various machine names and aliases which stand
692943345d3Smrg	# for a CPU type and a company and sometimes even an OS.
693943345d3Smrg	3b1 | 7300 | 7300-att | att-7300 | pc7300 | safari | unixpc)
69415ffece8Smrg		cpu=m68000
69515ffece8Smrg		vendor=att
696943345d3Smrg		;;
697943345d3Smrg	3b*)
69815ffece8Smrg		cpu=we32k
69915ffece8Smrg		vendor=att
7005e695a52Smrg		;;
701a7b590b3Smrg	bluegene*)
70215ffece8Smrg		cpu=powerpc
70315ffece8Smrg		vendor=ibm
70415ffece8Smrg		basic_os=cnk
705943345d3Smrg		;;
706943345d3Smrg	decsystem10* | dec10*)
70715ffece8Smrg		cpu=pdp10
70815ffece8Smrg		vendor=dec
70915ffece8Smrg		basic_os=tops10
710943345d3Smrg		;;
711943345d3Smrg	decsystem20* | dec20*)
71215ffece8Smrg		cpu=pdp10
71315ffece8Smrg		vendor=dec
71415ffece8Smrg		basic_os=tops20
715943345d3Smrg		;;
716943345d3Smrg	delta | 3300 | motorola-3300 | motorola-delta \
717943345d3Smrg	      | 3300-motorola | delta-motorola)
71815ffece8Smrg		cpu=m68k
71915ffece8Smrg		vendor=motorola
720f67b85aaSmrg		;;
72115ffece8Smrg	dpx2*)
72215ffece8Smrg		cpu=m68k
72315ffece8Smrg		vendor=bull
72415ffece8Smrg		basic_os=sysv3
725943345d3Smrg		;;
726943345d3Smrg	encore | umax | mmax)
72715ffece8Smrg		cpu=ns32k
72815ffece8Smrg		vendor=encore
729943345d3Smrg		;;
73015ffece8Smrg	elxsi)
73115ffece8Smrg		cpu=elxsi
73215ffece8Smrg		vendor=elxsi
73315ffece8Smrg		basic_os=${basic_os:-bsd}
734943345d3Smrg		;;
735943345d3Smrg	fx2800)
73615ffece8Smrg		cpu=i860
73715ffece8Smrg		vendor=alliant
738943345d3Smrg		;;
739943345d3Smrg	genix)
74015ffece8Smrg		cpu=ns32k
74115ffece8Smrg		vendor=ns
742943345d3Smrg		;;
743943345d3Smrg	h3050r* | hiux*)
74415ffece8Smrg		cpu=hppa1.1
74515ffece8Smrg		vendor=hitachi
74615ffece8Smrg		basic_os=hiuxwe2
747943345d3Smrg		;;
748943345d3Smrg	hp3k9[0-9][0-9] | hp9[0-9][0-9])
74915ffece8Smrg		cpu=hppa1.0
75015ffece8Smrg		vendor=hp
751943345d3Smrg		;;
752943345d3Smrg	hp9k2[0-9][0-9] | hp9k31[0-9])
75315ffece8Smrg		cpu=m68000
75415ffece8Smrg		vendor=hp
755943345d3Smrg		;;
756943345d3Smrg	hp9k3[2-9][0-9])
75715ffece8Smrg		cpu=m68k
75815ffece8Smrg		vendor=hp
759943345d3Smrg		;;
760943345d3Smrg	hp9k6[0-9][0-9] | hp6[0-9][0-9])
76115ffece8Smrg		cpu=hppa1.0
76215ffece8Smrg		vendor=hp
763943345d3Smrg		;;
764943345d3Smrg	hp9k7[0-79][0-9] | hp7[0-79][0-9])
76515ffece8Smrg		cpu=hppa1.1
76615ffece8Smrg		vendor=hp
767943345d3Smrg		;;
768943345d3Smrg	hp9k78[0-9] | hp78[0-9])
769943345d3Smrg		# FIXME: really hppa2.0-hp
77015ffece8Smrg		cpu=hppa1.1
77115ffece8Smrg		vendor=hp
772943345d3Smrg		;;
773943345d3Smrg	hp9k8[67]1 | hp8[67]1 | hp9k80[24] | hp80[24] | hp9k8[78]9 | hp8[78]9 | hp9k893 | hp893)
774943345d3Smrg		# FIXME: really hppa2.0-hp
77515ffece8Smrg		cpu=hppa1.1
77615ffece8Smrg		vendor=hp
777943345d3Smrg		;;
778943345d3Smrg	hp9k8[0-9][13679] | hp8[0-9][13679])
77915ffece8Smrg		cpu=hppa1.1
78015ffece8Smrg		vendor=hp
781943345d3Smrg		;;
782943345d3Smrg	hp9k8[0-9][0-9] | hp8[0-9][0-9])
78315ffece8Smrg		cpu=hppa1.0
78415ffece8Smrg		vendor=hp
785943345d3Smrg		;;
786943345d3Smrg	i*86v32)
78715ffece8Smrg		cpu=`echo "$1" | sed -e 's/86.*/86/'`
78815ffece8Smrg		vendor=pc
78915ffece8Smrg		basic_os=sysv32
790943345d3Smrg		;;
791943345d3Smrg	i*86v4*)
79215ffece8Smrg		cpu=`echo "$1" | sed -e 's/86.*/86/'`
79315ffece8Smrg		vendor=pc
79415ffece8Smrg		basic_os=sysv4
795943345d3Smrg		;;
796943345d3Smrg	i*86v)
79715ffece8Smrg		cpu=`echo "$1" | sed -e 's/86.*/86/'`
79815ffece8Smrg		vendor=pc
79915ffece8Smrg		basic_os=sysv
800943345d3Smrg		;;
801943345d3Smrg	i*86sol2)
80215ffece8Smrg		cpu=`echo "$1" | sed -e 's/86.*/86/'`
80315ffece8Smrg		vendor=pc
80415ffece8Smrg		basic_os=solaris2
805943345d3Smrg		;;
80615ffece8Smrg	j90 | j90-cray)
80715ffece8Smrg		cpu=j90
80815ffece8Smrg		vendor=cray
80915ffece8Smrg		basic_os=${basic_os:-unicos}
810943345d3Smrg		;;
811943345d3Smrg	iris | iris4d)
81215ffece8Smrg		cpu=mips
81315ffece8Smrg		vendor=sgi
81415ffece8Smrg		case $basic_os in
81515ffece8Smrg		    irix*)
816943345d3Smrg			;;
817943345d3Smrg		    *)
81815ffece8Smrg			basic_os=irix4
819943345d3Smrg			;;
820943345d3Smrg		esac
821943345d3Smrg		;;
822943345d3Smrg	miniframe)
82315ffece8Smrg		cpu=m68000
82415ffece8Smrg		vendor=convergent
825943345d3Smrg		;;
82615ffece8Smrg	*mint | mint[0-9]* | *MiNT | *MiNT[0-9]*)
82715ffece8Smrg		cpu=m68k
82815ffece8Smrg		vendor=atari
82915ffece8Smrg		basic_os=mint
830943345d3Smrg		;;
831943345d3Smrg	news-3600 | risc-news)
83215ffece8Smrg		cpu=mips
83315ffece8Smrg		vendor=sony
83415ffece8Smrg		basic_os=newsos
83515ffece8Smrg		;;
83615ffece8Smrg	next | m*-next)
83715ffece8Smrg		cpu=m68k
83815ffece8Smrg		vendor=next
83915ffece8Smrg		case $basic_os in
84015ffece8Smrg		    openstep*)
84115ffece8Smrg		        ;;
84215ffece8Smrg		    nextstep*)
843943345d3Smrg			;;
84415ffece8Smrg		    ns2*)
84515ffece8Smrg		      basic_os=nextstep2
846943345d3Smrg			;;
847943345d3Smrg		    *)
84815ffece8Smrg		      basic_os=nextstep3
849943345d3Smrg			;;
850943345d3Smrg		esac
851943345d3Smrg		;;
852943345d3Smrg	np1)
85315ffece8Smrg		cpu=np1
85415ffece8Smrg		vendor=gould
855943345d3Smrg		;;
856943345d3Smrg	op50n-* | op60c-*)
85715ffece8Smrg		cpu=hppa1.1
85815ffece8Smrg		vendor=oki
85915ffece8Smrg		basic_os=proelf
860943345d3Smrg		;;
861943345d3Smrg	pa-hitachi)
86215ffece8Smrg		cpu=hppa1.1
86315ffece8Smrg		vendor=hitachi
86415ffece8Smrg		basic_os=hiuxwe2
8655e695a52Smrg		;;
866943345d3Smrg	pbd)
86715ffece8Smrg		cpu=sparc
86815ffece8Smrg		vendor=tti
869943345d3Smrg		;;
870943345d3Smrg	pbb)
87115ffece8Smrg		cpu=m68k
87215ffece8Smrg		vendor=tti
873943345d3Smrg		;;
87415ffece8Smrg	pc532)
87515ffece8Smrg		cpu=ns32k
87615ffece8Smrg		vendor=pc532
877943345d3Smrg		;;
878943345d3Smrg	pn)
87915ffece8Smrg		cpu=pn
88015ffece8Smrg		vendor=gould
881943345d3Smrg		;;
88215ffece8Smrg	power)
88315ffece8Smrg		cpu=power
88415ffece8Smrg		vendor=ibm
885943345d3Smrg		;;
886943345d3Smrg	ps2)
88715ffece8Smrg		cpu=i386
88815ffece8Smrg		vendor=ibm
889943345d3Smrg		;;
890943345d3Smrg	rm[46]00)
89115ffece8Smrg		cpu=mips
89215ffece8Smrg		vendor=siemens
893943345d3Smrg		;;
894943345d3Smrg	rtpc | rtpc-*)
89515ffece8Smrg		cpu=romp
89615ffece8Smrg		vendor=ibm
897f67b85aaSmrg		;;
89815ffece8Smrg	sde)
89915ffece8Smrg		cpu=mipsisa32
90015ffece8Smrg		vendor=sde
90115ffece8Smrg		basic_os=${basic_os:-elf}
902943345d3Smrg		;;
90315ffece8Smrg	simso-wrs)
90415ffece8Smrg		cpu=sparclite
90515ffece8Smrg		vendor=wrs
90615ffece8Smrg		basic_os=vxworks
907943345d3Smrg		;;
90815ffece8Smrg	tower | tower-32)
90915ffece8Smrg		cpu=m68k
91015ffece8Smrg		vendor=ncr
911943345d3Smrg		;;
91215ffece8Smrg	vpp*|vx|vx-*)
91315ffece8Smrg		cpu=f301
91415ffece8Smrg		vendor=fujitsu
915f67b85aaSmrg		;;
91615ffece8Smrg	w65)
91715ffece8Smrg		cpu=w65
91815ffece8Smrg		vendor=wdc
919943345d3Smrg		;;
92015ffece8Smrg	w89k-*)
92115ffece8Smrg		cpu=hppa1.1
92215ffece8Smrg		vendor=winbond
92315ffece8Smrg		basic_os=proelf
924943345d3Smrg		;;
92515ffece8Smrg	none)
92615ffece8Smrg		cpu=none
92715ffece8Smrg		vendor=none
928943345d3Smrg		;;
92915ffece8Smrg	leon|leon[3-9])
93015ffece8Smrg		cpu=sparc
93115ffece8Smrg		vendor=$basic_machine
9325e695a52Smrg		;;
93315ffece8Smrg	leon-*|leon[3-9]-*)
93415ffece8Smrg		cpu=sparc
93515ffece8Smrg		vendor=`echo "$basic_machine" | sed 's/-.*//'`
936943345d3Smrg		;;
93715ffece8Smrg
93815ffece8Smrg	*-*)
93915ffece8Smrg		# shellcheck disable=SC2162
94015ffece8Smrg		saved_IFS=$IFS
94115ffece8Smrg		IFS="-" read cpu vendor <<EOF
94215ffece8Smrg$basic_machine
94315ffece8SmrgEOF
94415ffece8Smrg		IFS=$saved_IFS
945943345d3Smrg		;;
94615ffece8Smrg	# We use `pc' rather than `unknown'
94715ffece8Smrg	# because (1) that's what they normally are, and
94815ffece8Smrg	# (2) the word "unknown" tends to confuse beginning users.
94915ffece8Smrg	i*86 | x86_64)
95015ffece8Smrg		cpu=$basic_machine
95115ffece8Smrg		vendor=pc
952943345d3Smrg		;;
95315ffece8Smrg	# These rules are duplicated from below for sake of the special case above;
95415ffece8Smrg	# i.e. things that normalized to x86 arches should also default to "pc"
95515ffece8Smrg	pc98)
95615ffece8Smrg		cpu=i386
95715ffece8Smrg		vendor=pc
958943345d3Smrg		;;
95915ffece8Smrg	x64 | amd64)
96015ffece8Smrg		cpu=x86_64
96115ffece8Smrg		vendor=pc
962943345d3Smrg		;;
96315ffece8Smrg	# Recognize the basic CPU types without company name.
96415ffece8Smrg	*)
96515ffece8Smrg		cpu=$basic_machine
96615ffece8Smrg		vendor=unknown
967943345d3Smrg		;;
96815ffece8Smrgesac
96915ffece8Smrg
97015ffece8Smrgunset -v basic_machine
97115ffece8Smrg
97215ffece8Smrg# Decode basic machines in the full and proper CPU-Company form.
97315ffece8Smrgcase $cpu-$vendor in
97415ffece8Smrg	# Here we handle the default manufacturer of certain CPU types in canonical form. It is in
97515ffece8Smrg	# some cases the only manufacturer, in others, it is the most popular.
97615ffece8Smrg	craynv-unknown)
97715ffece8Smrg		vendor=cray
97815ffece8Smrg		basic_os=${basic_os:-unicosmp}
9793e51e026Smrg		;;
98015ffece8Smrg	c90-unknown | c90-cray)
98115ffece8Smrg		vendor=cray
98215ffece8Smrg		basic_os=${Basic_os:-unicos}
983943345d3Smrg		;;
98415ffece8Smrg	fx80-unknown)
98515ffece8Smrg		vendor=alliant
986943345d3Smrg		;;
98715ffece8Smrg	romp-unknown)
98815ffece8Smrg		vendor=ibm
989943345d3Smrg		;;
99015ffece8Smrg	mmix-unknown)
99115ffece8Smrg		vendor=knuth
992943345d3Smrg		;;
99315ffece8Smrg	microblaze-unknown | microblazeel-unknown)
99415ffece8Smrg		vendor=xilinx
995943345d3Smrg		;;
99615ffece8Smrg	rs6000-unknown)
99715ffece8Smrg		vendor=ibm
998943345d3Smrg		;;
99915ffece8Smrg	vax-unknown)
100015ffece8Smrg		vendor=dec
1001943345d3Smrg		;;
100215ffece8Smrg	pdp11-unknown)
100315ffece8Smrg		vendor=dec
1004943345d3Smrg		;;
100515ffece8Smrg	we32k-unknown)
100615ffece8Smrg		vendor=att
1007943345d3Smrg		;;
100815ffece8Smrg	cydra-unknown)
100915ffece8Smrg		vendor=cydrome
1010943345d3Smrg		;;
101115ffece8Smrg	i370-ibm*)
101215ffece8Smrg		vendor=ibm
1013943345d3Smrg		;;
101415ffece8Smrg	orion-unknown)
101515ffece8Smrg		vendor=highlevel
1016943345d3Smrg		;;
101715ffece8Smrg	xps-unknown | xps100-unknown)
101815ffece8Smrg		cpu=xps100
101915ffece8Smrg		vendor=honeywell
1020943345d3Smrg		;;
102115ffece8Smrg
102215ffece8Smrg	# Here we normalize CPU types with a missing or matching vendor
102315ffece8Smrg	armh-unknown | armh-alt)
102415ffece8Smrg		cpu=armv7l
102515ffece8Smrg		vendor=alt
102615ffece8Smrg		basic_os=${basic_os:-linux-gnueabihf}
1027943345d3Smrg		;;
102815ffece8Smrg	dpx20-unknown | dpx20-bull)
102915ffece8Smrg		cpu=rs6000
103015ffece8Smrg		vendor=bull
103115ffece8Smrg		basic_os=${basic_os:-bosx}
1032943345d3Smrg		;;
103315ffece8Smrg
103415ffece8Smrg	# Here we normalize CPU types irrespective of the vendor
103515ffece8Smrg	amd64-*)
103615ffece8Smrg		cpu=x86_64
10375e695a52Smrg		;;
103815ffece8Smrg	blackfin-*)
103915ffece8Smrg		cpu=bfin
104015ffece8Smrg		basic_os=linux
1041943345d3Smrg		;;
104215ffece8Smrg	c54x-*)
104315ffece8Smrg		cpu=tic54x
1044943345d3Smrg		;;
104515ffece8Smrg	c55x-*)
104615ffece8Smrg		cpu=tic55x
1047943345d3Smrg		;;
104815ffece8Smrg	c6x-*)
104915ffece8Smrg		cpu=tic6x
1050943345d3Smrg		;;
105115ffece8Smrg	e500v[12]-*)
105215ffece8Smrg		cpu=powerpc
105315ffece8Smrg		basic_os=${basic_os}"spe"
1054f67b85aaSmrg		;;
105515ffece8Smrg	mips3*-*)
105615ffece8Smrg		cpu=mips64
1057943345d3Smrg		;;
105815ffece8Smrg	ms1-*)
105915ffece8Smrg		cpu=mt
1060943345d3Smrg		;;
106115ffece8Smrg	m68knommu-*)
106215ffece8Smrg		cpu=m68k
106315ffece8Smrg		basic_os=linux
1064943345d3Smrg		;;
106515ffece8Smrg	m9s12z-* | m68hcs12z-* | hcs12z-* | s12z-*)
106615ffece8Smrg		cpu=s12z
1067943345d3Smrg		;;
106815ffece8Smrg	openrisc-*)
106915ffece8Smrg		cpu=or32
1070943345d3Smrg		;;
107115ffece8Smrg	parisc-*)
107215ffece8Smrg		cpu=hppa
107315ffece8Smrg		basic_os=linux
1074943345d3Smrg		;;
107515ffece8Smrg	pentium-* | p5-* | k5-* | k6-* | nexgen-* | viac3-*)
107615ffece8Smrg		cpu=i586
1077943345d3Smrg		;;
107815ffece8Smrg	pentiumpro-* | p6-* | 6x86-* | athlon-* | athlon_*-*)
107915ffece8Smrg		cpu=i686
1080943345d3Smrg		;;
108115ffece8Smrg	pentiumii-* | pentium2-* | pentiumiii-* | pentium3-*)
108215ffece8Smrg		cpu=i686
1083943345d3Smrg		;;
108415ffece8Smrg	pentium4-*)
108515ffece8Smrg		cpu=i786
1086943345d3Smrg		;;
108715ffece8Smrg	pc98-*)
108815ffece8Smrg		cpu=i386
1089943345d3Smrg		;;
109015ffece8Smrg	ppc-* | ppcbe-*)
109115ffece8Smrg		cpu=powerpc
1092f67b85aaSmrg		;;
109315ffece8Smrg	ppcle-* | powerpclittle-*)
109415ffece8Smrg		cpu=powerpcle
1095943345d3Smrg		;;
109615ffece8Smrg	ppc64-*)
109715ffece8Smrg		cpu=powerpc64
10983e51e026Smrg		;;
109915ffece8Smrg	ppc64le-* | powerpc64little-*)
110015ffece8Smrg		cpu=powerpc64le
1101943345d3Smrg		;;
110215ffece8Smrg	sb1-*)
110315ffece8Smrg		cpu=mipsisa64sb1
1104943345d3Smrg		;;
110515ffece8Smrg	sb1el-*)
110615ffece8Smrg		cpu=mipsisa64sb1el
1107a7b590b3Smrg		;;
110815ffece8Smrg	sh5e[lb]-*)
110915ffece8Smrg		cpu=`echo "$cpu" | sed 's/^\(sh.\)e\(.\)$/\1\2e/'`
1110943345d3Smrg		;;
111115ffece8Smrg	spur-*)
111215ffece8Smrg		cpu=spur
1113943345d3Smrg		;;
111415ffece8Smrg	strongarm-* | thumb-*)
111515ffece8Smrg		cpu=arm
1116943345d3Smrg		;;
111715ffece8Smrg	tx39-*)
111815ffece8Smrg		cpu=mipstx39
1119943345d3Smrg		;;
112015ffece8Smrg	tx39el-*)
112115ffece8Smrg		cpu=mipstx39el
1122943345d3Smrg		;;
112315ffece8Smrg	x64-*)
112415ffece8Smrg		cpu=x86_64
1125f67b85aaSmrg		;;
112615ffece8Smrg	xscale-* | xscalee[bl]-*)
112715ffece8Smrg		cpu=`echo "$cpu" | sed 's/^xscale/arm/'`
1128943345d3Smrg		;;
112915ffece8Smrg	arm64-* | aarch64le-*)
113015ffece8Smrg		cpu=aarch64
1131943345d3Smrg		;;
113215ffece8Smrg
113315ffece8Smrg	# Recognize the canonical CPU Types that limit and/or modify the
113415ffece8Smrg	# company names they are paired with.
113515ffece8Smrg	cr16-*)
113615ffece8Smrg		basic_os=${basic_os:-elf}
1137943345d3Smrg		;;
113815ffece8Smrg	crisv32-* | etraxfs*-*)
113915ffece8Smrg		cpu=crisv32
114015ffece8Smrg		vendor=axis
1141943345d3Smrg		;;
114215ffece8Smrg	cris-* | etrax*-*)
114315ffece8Smrg		cpu=cris
114415ffece8Smrg		vendor=axis
1145943345d3Smrg		;;
114615ffece8Smrg	crx-*)
114715ffece8Smrg		basic_os=${basic_os:-elf}
1148943345d3Smrg		;;
114915ffece8Smrg	neo-tandem)
115015ffece8Smrg		cpu=neo
115115ffece8Smrg		vendor=tandem
1152943345d3Smrg		;;
115315ffece8Smrg	nse-tandem)
115415ffece8Smrg		cpu=nse
115515ffece8Smrg		vendor=tandem
1156943345d3Smrg		;;
115715ffece8Smrg	nsr-tandem)
115815ffece8Smrg		cpu=nsr
115915ffece8Smrg		vendor=tandem
1160943345d3Smrg		;;
116115ffece8Smrg	nsv-tandem)
116215ffece8Smrg		cpu=nsv
116315ffece8Smrg		vendor=tandem
1164943345d3Smrg		;;
116515ffece8Smrg	nsx-tandem)
116615ffece8Smrg		cpu=nsx
116715ffece8Smrg		vendor=tandem
1168943345d3Smrg		;;
116915ffece8Smrg	mipsallegrexel-sony)
117015ffece8Smrg		cpu=mipsallegrexel
117115ffece8Smrg		vendor=sony
1172943345d3Smrg		;;
117315ffece8Smrg	tile*-*)
117415ffece8Smrg		basic_os=${basic_os:-linux-gnu}
1175943345d3Smrg		;;
117615ffece8Smrg
1177943345d3Smrg	*)
117815ffece8Smrg		# Recognize the canonical CPU types that are allowed with any
117915ffece8Smrg		# company name.
118015ffece8Smrg		case $cpu in
118115ffece8Smrg			1750a | 580 \
118215ffece8Smrg			| a29k \
118315ffece8Smrg			| aarch64 | aarch64_be \
118415ffece8Smrg			| abacus \
118515ffece8Smrg			| alpha | alphaev[4-8] | alphaev56 | alphaev6[78] \
118615ffece8Smrg			| alpha64 | alpha64ev[4-8] | alpha64ev56 | alpha64ev6[78] \
118715ffece8Smrg			| alphapca5[67] | alpha64pca5[67] \
118815ffece8Smrg			| am33_2.0 \
118915ffece8Smrg			| amdgcn \
119015ffece8Smrg			| arc | arceb | arc32 | arc64 \
119115ffece8Smrg			| arm | arm[lb]e | arme[lb] | armv* \
119215ffece8Smrg			| avr | avr32 \
119315ffece8Smrg			| asmjs \
119415ffece8Smrg			| ba \
119515ffece8Smrg			| be32 | be64 \
119615ffece8Smrg			| bfin | bpf | bs2000 \
119715ffece8Smrg			| c[123]* | c30 | [cjt]90 | c4x \
119815ffece8Smrg			| c8051 | clipper | craynv | csky | cydra \
119915ffece8Smrg			| d10v | d30v | dlx | dsp16xx \
120015ffece8Smrg			| e2k | elxsi | epiphany \
120115ffece8Smrg			| f30[01] | f700 | fido | fr30 | frv | ft32 | fx80 \
120215ffece8Smrg			| h8300 | h8500 \
120315ffece8Smrg			| hppa | hppa1.[01] | hppa2.0 | hppa2.0[nw] | hppa64 \
120415ffece8Smrg			| hexagon \
120515ffece8Smrg			| i370 | i*86 | i860 | i960 | ia16 | ia64 \
120615ffece8Smrg			| ip2k | iq2000 \
120715ffece8Smrg			| k1om \
120815ffece8Smrg			| le32 | le64 \
120915ffece8Smrg			| lm32 \
121015ffece8Smrg			| loongarch32 | loongarch64 \
121115ffece8Smrg			| m32c | m32r | m32rle \
121215ffece8Smrg			| m5200 | m68000 | m680[012346]0 | m68360 | m683?2 | m68k \
121315ffece8Smrg			| m6811 | m68hc11 | m6812 | m68hc12 | m68hcs12x \
121415ffece8Smrg			| m88110 | m88k | maxq | mb | mcore | mep | metag \
121515ffece8Smrg			| microblaze | microblazeel \
121615ffece8Smrg			| mips | mipsbe | mipseb | mipsel | mipsle \
121715ffece8Smrg			| mips16 \
121815ffece8Smrg			| mips64 | mips64eb | mips64el \
121915ffece8Smrg			| mips64octeon | mips64octeonel \
122015ffece8Smrg			| mips64orion | mips64orionel \
122115ffece8Smrg			| mips64r5900 | mips64r5900el \
122215ffece8Smrg			| mips64vr | mips64vrel \
122315ffece8Smrg			| mips64vr4100 | mips64vr4100el \
122415ffece8Smrg			| mips64vr4300 | mips64vr4300el \
122515ffece8Smrg			| mips64vr5000 | mips64vr5000el \
122615ffece8Smrg			| mips64vr5900 | mips64vr5900el \
122715ffece8Smrg			| mipsisa32 | mipsisa32el \
122815ffece8Smrg			| mipsisa32r2 | mipsisa32r2el \
122915ffece8Smrg			| mipsisa32r3 | mipsisa32r3el \
123015ffece8Smrg			| mipsisa32r5 | mipsisa32r5el \
123115ffece8Smrg			| mipsisa32r6 | mipsisa32r6el \
123215ffece8Smrg			| mipsisa64 | mipsisa64el \
123315ffece8Smrg			| mipsisa64r2 | mipsisa64r2el \
123415ffece8Smrg			| mipsisa64r3 | mipsisa64r3el \
123515ffece8Smrg			| mipsisa64r5 | mipsisa64r5el \
123615ffece8Smrg			| mipsisa64r6 | mipsisa64r6el \
123715ffece8Smrg			| mipsisa64sb1 | mipsisa64sb1el \
123815ffece8Smrg			| mipsisa64sr71k | mipsisa64sr71kel \
123915ffece8Smrg			| mipsr5900 | mipsr5900el \
124015ffece8Smrg			| mipstx39 | mipstx39el \
124115ffece8Smrg			| mmix \
124215ffece8Smrg			| mn10200 | mn10300 \
124315ffece8Smrg			| moxie \
124415ffece8Smrg			| mt \
124515ffece8Smrg			| msp430 \
124615ffece8Smrg			| nds32 | nds32le | nds32be \
124715ffece8Smrg			| nfp \
124815ffece8Smrg			| nios | nios2 | nios2eb | nios2el \
124915ffece8Smrg			| none | np1 | ns16k | ns32k | nvptx \
125015ffece8Smrg			| open8 \
125115ffece8Smrg			| or1k* \
125215ffece8Smrg			| or32 \
125315ffece8Smrg			| orion \
125415ffece8Smrg			| picochip \
125515ffece8Smrg			| pdp10 | pdp11 | pj | pjl | pn | power \
125615ffece8Smrg			| powerpc | powerpc64 | powerpc64le | powerpcle | powerpcspe \
125715ffece8Smrg			| pru \
125815ffece8Smrg			| pyramid \
125915ffece8Smrg			| riscv | riscv32 | riscv32be | riscv64 | riscv64be \
126015ffece8Smrg			| rl78 | romp | rs6000 | rx \
126115ffece8Smrg			| s390 | s390x \
126215ffece8Smrg			| score \
126315ffece8Smrg			| sh | shl \
126415ffece8Smrg			| sh[1234] | sh[24]a | sh[24]ae[lb] | sh[23]e | she[lb] | sh[lb]e \
126515ffece8Smrg			| sh[1234]e[lb] |  sh[12345][lb]e | sh[23]ele | sh64 | sh64le \
126615ffece8Smrg			| sparc | sparc64 | sparc64b | sparc64v | sparc86x | sparclet \
126715ffece8Smrg			| sparclite \
126815ffece8Smrg			| sparcv8 | sparcv9 | sparcv9b | sparcv9v | sv1 | sx* \
126915ffece8Smrg			| spu \
127015ffece8Smrg			| tahoe \
127115ffece8Smrg			| thumbv7* \
127215ffece8Smrg			| tic30 | tic4x | tic54x | tic55x | tic6x | tic80 \
127315ffece8Smrg			| tron \
127415ffece8Smrg			| ubicom32 \
127515ffece8Smrg			| v70 | v850 | v850e | v850e1 | v850es | v850e2 | v850e2v3 \
127615ffece8Smrg			| vax \
127715ffece8Smrg			| visium \
127815ffece8Smrg			| w65 \
127915ffece8Smrg			| wasm32 | wasm64 \
128015ffece8Smrg			| we32k \
128115ffece8Smrg			| x86 | x86_64 | xc16x | xgate | xps100 \
128215ffece8Smrg			| xstormy16 | xtensa* \
128315ffece8Smrg			| ymp \
128415ffece8Smrg			| z8k | z80)
128515ffece8Smrg				;;
128615ffece8Smrg
128715ffece8Smrg			*)
128815ffece8Smrg				echo Invalid configuration \`"$1"\': machine \`"$cpu-$vendor"\' not recognized 1>&2
128915ffece8Smrg				exit 1
129015ffece8Smrg				;;
129115ffece8Smrg		esac
1292943345d3Smrg		;;
1293943345d3Smrgesac
1294943345d3Smrg
1295943345d3Smrg# Here we canonicalize certain aliases for manufacturers.
129615ffece8Smrgcase $vendor in
129715ffece8Smrg	digital*)
129815ffece8Smrg		vendor=dec
1299943345d3Smrg		;;
130015ffece8Smrg	commodore*)
130115ffece8Smrg		vendor=cbm
1302943345d3Smrg		;;
1303943345d3Smrg	*)
1304943345d3Smrg		;;
1305943345d3Smrgesac
1306943345d3Smrg
1307943345d3Smrg# Decode manufacturer-specific aliases for certain operating systems.
1308943345d3Smrg
130915ffece8Smrgif test x$basic_os != x
1310943345d3Smrgthen
131115ffece8Smrg
131215ffece8Smrg# First recognize some ad-hoc cases, or perhaps split kernel-os, or else just
131315ffece8Smrg# set os.
131415ffece8Smrgcase $basic_os in
131515ffece8Smrg	gnu/linux*)
131615ffece8Smrg		kernel=linux
131715ffece8Smrg		os=`echo "$basic_os" | sed -e 's|gnu/linux|gnu|'`
131815ffece8Smrg		;;
131915ffece8Smrg	os2-emx)
132015ffece8Smrg		kernel=os2
132115ffece8Smrg		os=`echo "$basic_os" | sed -e 's|os2-emx|emx|'`
132215ffece8Smrg		;;
132315ffece8Smrg	nto-qnx*)
132415ffece8Smrg		kernel=nto
132515ffece8Smrg		os=`echo "$basic_os" | sed -e 's|nto-qnx|qnx|'`
132615ffece8Smrg		;;
132715ffece8Smrg	*-*)
132815ffece8Smrg		# shellcheck disable=SC2162
132915ffece8Smrg		saved_IFS=$IFS
133015ffece8Smrg		IFS="-" read kernel os <<EOF
133115ffece8Smrg$basic_os
133215ffece8SmrgEOF
133315ffece8Smrg		IFS=$saved_IFS
133415ffece8Smrg		;;
133515ffece8Smrg	# Default OS when just kernel was specified
133615ffece8Smrg	nto*)
133715ffece8Smrg		kernel=nto
133815ffece8Smrg		os=`echo "$basic_os" | sed -e 's|nto|qnx|'`
133915ffece8Smrg		;;
134015ffece8Smrg	linux*)
134115ffece8Smrg		kernel=linux
134215ffece8Smrg		os=`echo "$basic_os" | sed -e 's|linux|gnu|'`
134315ffece8Smrg		;;
134415ffece8Smrg	managarm*)
134515ffece8Smrg		kernel=managarm
134615ffece8Smrg		os=`echo "$basic_os" | sed -e 's|managarm|mlibc|'`
1347a7b590b3Smrg		;;
134815ffece8Smrg	*)
134915ffece8Smrg		kernel=
135015ffece8Smrg		os=$basic_os
1351943345d3Smrg		;;
135215ffece8Smrgesac
135315ffece8Smrg
135415ffece8Smrg# Now, normalize the OS (knowing we just have one component, it's not a kernel,
135515ffece8Smrg# etc.)
135615ffece8Smrgcase $os in
135715ffece8Smrg	# First match some system type aliases that might get confused
135815ffece8Smrg	# with valid system types.
135915ffece8Smrg	# solaris* is a basic system type, with this one exception.
136015ffece8Smrg	auroraux)
136115ffece8Smrg		os=auroraux
1362943345d3Smrg		;;
136315ffece8Smrg	bluegene*)
136415ffece8Smrg		os=cnk
1365943345d3Smrg		;;
136615ffece8Smrg	solaris1 | solaris1.*)
136715ffece8Smrg		os=`echo "$os" | sed -e 's|solaris1|sunos4|'`
1368943345d3Smrg		;;
136915ffece8Smrg	solaris)
137015ffece8Smrg		os=solaris2
1371943345d3Smrg		;;
137215ffece8Smrg	unixware*)
137315ffece8Smrg		os=sysv4.2uw
1374943345d3Smrg		;;
137515ffece8Smrg	# es1800 is here to avoid being matched by es* (a different OS)
137615ffece8Smrg	es1800*)
137715ffece8Smrg		os=ose
1378943345d3Smrg		;;
137915ffece8Smrg	# Some version numbers need modification
138015ffece8Smrg	chorusos*)
138115ffece8Smrg		os=chorusos
1382943345d3Smrg		;;
138315ffece8Smrg	isc)
138415ffece8Smrg		os=isc2.2
1385943345d3Smrg		;;
138615ffece8Smrg	sco6)
138715ffece8Smrg		os=sco5v6
1388943345d3Smrg		;;
138915ffece8Smrg	sco5)
139015ffece8Smrg		os=sco3.2v5
1391f67b85aaSmrg		;;
139215ffece8Smrg	sco4)
139315ffece8Smrg		os=sco3.2v4
1394943345d3Smrg		;;
139515ffece8Smrg	sco3.2.[4-9]*)
139615ffece8Smrg		os=`echo "$os" | sed -e 's/sco3.2./sco3.2v/'`
1397943345d3Smrg		;;
139815ffece8Smrg	sco*v* | scout)
139915ffece8Smrg		# Don't match below
1400943345d3Smrg		;;
140115ffece8Smrg	sco*)
140215ffece8Smrg		os=sco3.2v2
1403943345d3Smrg		;;
140415ffece8Smrg	psos*)
140515ffece8Smrg		os=psos
1406f67b85aaSmrg		;;
140715ffece8Smrg	qnx*)
140815ffece8Smrg		os=qnx
1409943345d3Smrg		;;
141015ffece8Smrg	hiux*)
141115ffece8Smrg		os=hiuxwe2
1412943345d3Smrg		;;
141315ffece8Smrg	lynx*178)
141415ffece8Smrg		os=lynxos178
1415943345d3Smrg		;;
141615ffece8Smrg	lynx*5)
141715ffece8Smrg		os=lynxos5
1418943345d3Smrg		;;
141915ffece8Smrg	lynxos*)
142015ffece8Smrg		# don't get caught up in next wildcard
1421943345d3Smrg		;;
142215ffece8Smrg	lynx*)
142315ffece8Smrg		os=lynxos
1424943345d3Smrg		;;
142515ffece8Smrg	mac[0-9]*)
142615ffece8Smrg		os=`echo "$os" | sed -e 's|mac|macos|'`
1427943345d3Smrg		;;
142815ffece8Smrg	opened*)
142915ffece8Smrg		os=openedition
1430f67b85aaSmrg		;;
143115ffece8Smrg	os400*)
143215ffece8Smrg		os=os400
1433943345d3Smrg		;;
143415ffece8Smrg	sunos5*)
143515ffece8Smrg		os=`echo "$os" | sed -e 's|sunos5|solaris2|'`
1436943345d3Smrg		;;
143715ffece8Smrg	sunos6*)
143815ffece8Smrg		os=`echo "$os" | sed -e 's|sunos6|solaris3|'`
1439943345d3Smrg		;;
144015ffece8Smrg	wince*)
144115ffece8Smrg		os=wince
1442943345d3Smrg		;;
144315ffece8Smrg	utek*)
144415ffece8Smrg		os=bsd
1445943345d3Smrg		;;
144615ffece8Smrg	dynix*)
144715ffece8Smrg		os=bsd
1448943345d3Smrg		;;
144915ffece8Smrg	acis*)
145015ffece8Smrg		os=aos
1451943345d3Smrg		;;
145215ffece8Smrg	atheos*)
145315ffece8Smrg		os=atheos
1454f67b85aaSmrg		;;
145515ffece8Smrg	syllable*)
145615ffece8Smrg		os=syllable
1457943345d3Smrg		;;
145815ffece8Smrg	386bsd)
145915ffece8Smrg		os=bsd
1460943345d3Smrg		;;
146115ffece8Smrg	ctix* | uts*)
146215ffece8Smrg		os=sysv
1463943345d3Smrg		;;
146415ffece8Smrg	nova*)
146515ffece8Smrg		os=rtmk-nova
1466943345d3Smrg		;;
146715ffece8Smrg	ns2)
146815ffece8Smrg		os=nextstep2
1469943345d3Smrg		;;
147015ffece8Smrg	# Preserve the version number of sinix5.
147115ffece8Smrg	sinix5.*)
147215ffece8Smrg		os=`echo "$os" | sed -e 's|sinix|sysv|'`
1473943345d3Smrg		;;
147415ffece8Smrg	sinix*)
147515ffece8Smrg		os=sysv4
1476943345d3Smrg		;;
147715ffece8Smrg	tpf*)
147815ffece8Smrg		os=tpf
1479943345d3Smrg		;;
148015ffece8Smrg	triton*)
148115ffece8Smrg		os=sysv3
1482943345d3Smrg		;;
148315ffece8Smrg	oss*)
148415ffece8Smrg		os=sysv3
1485943345d3Smrg		;;
148615ffece8Smrg	svr4*)
148715ffece8Smrg		os=sysv4
1488943345d3Smrg		;;
148915ffece8Smrg	svr3)
149015ffece8Smrg		os=sysv3
1491943345d3Smrg		;;
149215ffece8Smrg	sysvr4)
149315ffece8Smrg		os=sysv4
1494f67b85aaSmrg		;;
149515ffece8Smrg	ose*)
149615ffece8Smrg		os=ose
1497a7b590b3Smrg		;;
149815ffece8Smrg	*mint | mint[0-9]* | *MiNT | MiNT[0-9]*)
149915ffece8Smrg		os=mint
15003e51e026Smrg		;;
150115ffece8Smrg	dicos*)
150215ffece8Smrg		os=dicos
150315ffece8Smrg		;;
150415ffece8Smrg	pikeos*)
150515ffece8Smrg		# Until real need of OS specific support for
150615ffece8Smrg		# particular features comes up, bare metal
150715ffece8Smrg		# configurations are quite functional.
150815ffece8Smrg		case $cpu in
150915ffece8Smrg		    arm*)
151015ffece8Smrg			os=eabi
151115ffece8Smrg			;;
151215ffece8Smrg		    *)
151315ffece8Smrg			os=elf
151415ffece8Smrg			;;
151515ffece8Smrg		esac
1516943345d3Smrg		;;
1517943345d3Smrg	*)
151815ffece8Smrg		# No normalization, but not necessarily accepted, that comes below.
1519943345d3Smrg		;;
1520943345d3Smrgesac
152115ffece8Smrg
1522943345d3Smrgelse
1523943345d3Smrg
1524943345d3Smrg# Here we handle the default operating systems that come with various machines.
1525943345d3Smrg# The value should be what the vendor currently ships out the door with their
1526943345d3Smrg# machine or put another way, the most popular os provided with the machine.
1527943345d3Smrg
1528943345d3Smrg# Note that if you're going to try to match "-MANUFACTURER" here (say,
1529943345d3Smrg# "-sun"), then you have to tell the case statement up towards the top
1530943345d3Smrg# that MANUFACTURER isn't an operating system.  Otherwise, code above
1531943345d3Smrg# will signal an error saying that MANUFACTURER isn't an operating
1532943345d3Smrg# system, and we'll never get to this point.
1533943345d3Smrg
153415ffece8Smrgkernel=
153515ffece8Smrgcase $cpu-$vendor in
15363e51e026Smrg	score-*)
153715ffece8Smrg		os=elf
1538f67b85aaSmrg		;;
15393e51e026Smrg	spu-*)
154015ffece8Smrg		os=elf
1541f67b85aaSmrg		;;
1542943345d3Smrg	*-acorn)
154315ffece8Smrg		os=riscix1.2
1544943345d3Smrg		;;
1545943345d3Smrg	arm*-rebel)
154615ffece8Smrg		kernel=linux
154715ffece8Smrg		os=gnu
1548943345d3Smrg		;;
1549943345d3Smrg	arm*-semi)
155015ffece8Smrg		os=aout
1551943345d3Smrg		;;
15523e51e026Smrg	c4x-* | tic4x-*)
155315ffece8Smrg		os=coff
155415ffece8Smrg		;;
155515ffece8Smrg	c8051-*)
155615ffece8Smrg		os=elf
155715ffece8Smrg		;;
155815ffece8Smrg	clipper-intergraph)
155915ffece8Smrg		os=clix
156015ffece8Smrg		;;
156115ffece8Smrg	hexagon-*)
156215ffece8Smrg		os=elf
15633e51e026Smrg		;;
15643e51e026Smrg	tic54x-*)
156515ffece8Smrg		os=coff
15663e51e026Smrg		;;
15673e51e026Smrg	tic55x-*)
156815ffece8Smrg		os=coff
15693e51e026Smrg		;;
15703e51e026Smrg	tic6x-*)
157115ffece8Smrg		os=coff
1572943345d3Smrg		;;
1573943345d3Smrg	# This must come before the *-dec entry.
1574943345d3Smrg	pdp10-*)
157515ffece8Smrg		os=tops20
1576943345d3Smrg		;;
1577943345d3Smrg	pdp11-*)
157815ffece8Smrg		os=none
1579943345d3Smrg		;;
1580943345d3Smrg	*-dec | vax-*)
158115ffece8Smrg		os=ultrix4.2
1582943345d3Smrg		;;
1583943345d3Smrg	m68*-apollo)
158415ffece8Smrg		os=domain
1585943345d3Smrg		;;
1586943345d3Smrg	i386-sun)
158715ffece8Smrg		os=sunos4.0.2
1588943345d3Smrg		;;
1589943345d3Smrg	m68000-sun)
159015ffece8Smrg		os=sunos3
1591943345d3Smrg		;;
1592943345d3Smrg	m68*-cisco)
159315ffece8Smrg		os=aout
1594943345d3Smrg		;;
15953e51e026Smrg	mep-*)
159615ffece8Smrg		os=elf
15975e695a52Smrg		;;
1598943345d3Smrg	mips*-cisco)
159915ffece8Smrg		os=elf
1600943345d3Smrg		;;
1601943345d3Smrg	mips*-*)
160215ffece8Smrg		os=elf
1603943345d3Smrg		;;
1604943345d3Smrg	or32-*)
160515ffece8Smrg		os=coff
1606943345d3Smrg		;;
1607943345d3Smrg	*-tti)	# must be before sparc entry or we get the wrong os.
160815ffece8Smrg		os=sysv3
1609943345d3Smrg		;;
1610943345d3Smrg	sparc-* | *-sun)
161115ffece8Smrg		os=sunos4.1.1
1612943345d3Smrg		;;
161315ffece8Smrg	pru-*)
161415ffece8Smrg		os=elf
1615943345d3Smrg		;;
161615ffece8Smrg	*-be)
161715ffece8Smrg		os=beos
1618f67b85aaSmrg		;;
1619943345d3Smrg	*-ibm)
162015ffece8Smrg		os=aix
1621943345d3Smrg		;;
16223e51e026Smrg	*-knuth)
162315ffece8Smrg		os=mmixware
1624f67b85aaSmrg		;;
1625943345d3Smrg	*-wec)
162615ffece8Smrg		os=proelf
1627943345d3Smrg		;;
1628943345d3Smrg	*-winbond)
162915ffece8Smrg		os=proelf
1630943345d3Smrg		;;
1631943345d3Smrg	*-oki)
163215ffece8Smrg		os=proelf
1633943345d3Smrg		;;
1634943345d3Smrg	*-hp)
163515ffece8Smrg		os=hpux
1636943345d3Smrg		;;
1637943345d3Smrg	*-hitachi)
163815ffece8Smrg		os=hiux
1639943345d3Smrg		;;
1640943345d3Smrg	i860-* | *-att | *-ncr | *-altos | *-motorola | *-convergent)
164115ffece8Smrg		os=sysv
1642943345d3Smrg		;;
1643943345d3Smrg	*-cbm)
164415ffece8Smrg		os=amigaos
1645943345d3Smrg		;;
1646943345d3Smrg	*-dg)
164715ffece8Smrg		os=dgux
1648943345d3Smrg		;;
1649943345d3Smrg	*-dolphin)
165015ffece8Smrg		os=sysv3
1651943345d3Smrg		;;
1652943345d3Smrg	m68k-ccur)
165315ffece8Smrg		os=rtu
1654943345d3Smrg		;;
1655943345d3Smrg	m88k-omron*)
165615ffece8Smrg		os=luna
1657943345d3Smrg		;;
165815ffece8Smrg	*-next)
165915ffece8Smrg		os=nextstep
1660943345d3Smrg		;;
1661943345d3Smrg	*-sequent)
166215ffece8Smrg		os=ptx
1663943345d3Smrg		;;
1664943345d3Smrg	*-crds)
166515ffece8Smrg		os=unos
1666943345d3Smrg		;;
1667943345d3Smrg	*-ns)
166815ffece8Smrg		os=genix
1669943345d3Smrg		;;
1670943345d3Smrg	i370-*)
167115ffece8Smrg		os=mvs
1672943345d3Smrg		;;
1673943345d3Smrg	*-gould)
167415ffece8Smrg		os=sysv
1675943345d3Smrg		;;
1676943345d3Smrg	*-highlevel)
167715ffece8Smrg		os=bsd
1678943345d3Smrg		;;
1679943345d3Smrg	*-encore)
168015ffece8Smrg		os=bsd
1681943345d3Smrg		;;
1682943345d3Smrg	*-sgi)
168315ffece8Smrg		os=irix
1684943345d3Smrg		;;
1685943345d3Smrg	*-siemens)
168615ffece8Smrg		os=sysv4
1687943345d3Smrg		;;
1688943345d3Smrg	*-masscomp)
168915ffece8Smrg		os=rtu
1690943345d3Smrg		;;
1691943345d3Smrg	f30[01]-fujitsu | f700-fujitsu)
169215ffece8Smrg		os=uxpv
1693943345d3Smrg		;;
1694943345d3Smrg	*-rom68k)
169515ffece8Smrg		os=coff
1696943345d3Smrg		;;
1697943345d3Smrg	*-*bug)
169815ffece8Smrg		os=coff
1699943345d3Smrg		;;
1700943345d3Smrg	*-apple)
170115ffece8Smrg		os=macos
1702943345d3Smrg		;;
1703943345d3Smrg	*-atari*)
170415ffece8Smrg		os=mint
170515ffece8Smrg		;;
170615ffece8Smrg	*-wrs)
170715ffece8Smrg		os=vxworks
1708943345d3Smrg		;;
1709943345d3Smrg	*)
171015ffece8Smrg		os=none
1711943345d3Smrg		;;
1712943345d3Smrgesac
171315ffece8Smrg
1714943345d3Smrgfi
1715943345d3Smrg
171615ffece8Smrg# Now, validate our (potentially fixed-up) OS.
171715ffece8Smrgcase $os in
171815ffece8Smrg	# Sometimes we do "kernel-libc", so those need to count as OSes.
171915ffece8Smrg	musl* | newlib* | relibc* | uclibc*)
172015ffece8Smrg		;;
172115ffece8Smrg	# Likewise for "kernel-abi"
172215ffece8Smrg	eabi* | gnueabi*)
172315ffece8Smrg		;;
172415ffece8Smrg	# VxWorks passes extra cpu info in the 4th filed.
172515ffece8Smrg	simlinux | simwindows | spe)
172615ffece8Smrg		;;
172715ffece8Smrg	# Now accept the basic system types.
172815ffece8Smrg	# The portable systems comes first.
172915ffece8Smrg	# Each alternative MUST end in a * to match a version number.
173015ffece8Smrg	gnu* | android* | bsd* | mach* | minix* | genix* | ultrix* | irix* \
173115ffece8Smrg	     | *vms* | esix* | aix* | cnk* | sunos | sunos[34]* \
173215ffece8Smrg	     | hpux* | unos* | osf* | luna* | dgux* | auroraux* | solaris* \
173315ffece8Smrg	     | sym* |  plan9* | psp* | sim* | xray* | os68k* | v88r* \
173415ffece8Smrg	     | hiux* | abug | nacl* | netware* | windows* \
173515ffece8Smrg	     | os9* | macos* | osx* | ios* \
173615ffece8Smrg	     | mpw* | magic* | mmixware* | mon960* | lnews* \
173715ffece8Smrg	     | amigaos* | amigados* | msdos* | newsos* | unicos* | aof* \
173815ffece8Smrg	     | aos* | aros* | cloudabi* | sortix* | twizzler* \
173915ffece8Smrg	     | nindy* | vxsim* | vxworks* | ebmon* | hms* | mvs* \
174015ffece8Smrg	     | clix* | riscos* | uniplus* | iris* | isc* | rtu* | xenix* \
174115ffece8Smrg	     | mirbsd* | netbsd* | dicos* | openedition* | ose* \
174215ffece8Smrg	     | bitrig* | openbsd* | secbsd* | solidbsd* | libertybsd* | os108* \
174315ffece8Smrg	     | ekkobsd* | freebsd* | riscix* | lynxos* | os400* \
174415ffece8Smrg	     | bosx* | nextstep* | cxux* | aout* | elf* | oabi* \
174515ffece8Smrg	     | ptx* | coff* | ecoff* | winnt* | domain* | vsta* \
174615ffece8Smrg	     | udi* | lites* | ieee* | go32* | aux* | hcos* \
174715ffece8Smrg	     | chorusrdb* | cegcc* | glidix* | serenity* \
174815ffece8Smrg	     | cygwin* | msys* | pe* | moss* | proelf* | rtems* \
174915ffece8Smrg	     | midipix* | mingw32* | mingw64* | mint* \
175015ffece8Smrg	     | uxpv* | beos* | mpeix* | udk* | moxiebox* \
175115ffece8Smrg	     | interix* | uwin* | mks* | rhapsody* | darwin* \
175215ffece8Smrg	     | openstep* | oskit* | conix* | pw32* | nonstopux* \
175315ffece8Smrg	     | storm-chaos* | tops10* | tenex* | tops20* | its* \
175415ffece8Smrg	     | os2* | vos* | palmos* | uclinux* | nucleus* | morphos* \
175515ffece8Smrg	     | scout* | superux* | sysv* | rtmk* | tpf* | windiss* \
175615ffece8Smrg	     | powermax* | dnix* | nx6 | nx7 | sei* | dragonfly* \
175715ffece8Smrg	     | skyos* | haiku* | rdos* | toppers* | drops* | es* \
175815ffece8Smrg	     | onefs* | tirtos* | phoenix* | fuchsia* | redox* | bme* \
175915ffece8Smrg	     | midnightbsd* | amdhsa* | unleashed* | emscripten* | wasi* \
176015ffece8Smrg	     | nsk* | powerunix* | genode* | zvmoe* | qnx* | emx* | zephyr* \
176115ffece8Smrg	     | fiwix* | mlibc* )
176215ffece8Smrg		;;
176315ffece8Smrg	# This one is extra strict with allowed versions
176415ffece8Smrg	sco3.2v2 | sco3.2v[4-9]* | sco5v6*)
176515ffece8Smrg		# Don't forget version if it is 3.2v4 or newer.
176615ffece8Smrg		;;
176715ffece8Smrg	none)
176815ffece8Smrg		;;
176915ffece8Smrg	kernel* )
177015ffece8Smrg		# Restricted further below
177115ffece8Smrg		;;
177215ffece8Smrg	*)
177315ffece8Smrg		echo Invalid configuration \`"$1"\': OS \`"$os"\' not recognized 1>&2
177415ffece8Smrg		exit 1
177515ffece8Smrg		;;
177615ffece8Smrgesac
177715ffece8Smrg
177815ffece8Smrg# As a final step for OS-related things, validate the OS-kernel combination
177915ffece8Smrg# (given a valid OS), if there is a kernel.
178015ffece8Smrgcase $kernel-$os in
178115ffece8Smrg	linux-gnu* | linux-dietlibc* | linux-android* | linux-newlib* \
178215ffece8Smrg		   | linux-musl* | linux-relibc* | linux-uclibc* | linux-mlibc* )
178315ffece8Smrg		;;
178415ffece8Smrg	uclinux-uclibc* )
178515ffece8Smrg		;;
178615ffece8Smrg	managarm-mlibc* | managarm-kernel* )
178715ffece8Smrg		;;
178815ffece8Smrg	-dietlibc* | -newlib* | -musl* | -relibc* | -uclibc* | -mlibc* )
178915ffece8Smrg		# These are just libc implementations, not actual OSes, and thus
179015ffece8Smrg		# require a kernel.
179115ffece8Smrg		echo "Invalid configuration \`$1': libc \`$os' needs explicit kernel." 1>&2
179215ffece8Smrg		exit 1
179315ffece8Smrg		;;
179415ffece8Smrg	-kernel* )
179515ffece8Smrg		echo "Invalid configuration \`$1': \`$os' needs explicit kernel." 1>&2
179615ffece8Smrg		exit 1
179715ffece8Smrg		;;
179815ffece8Smrg	*-kernel* )
179915ffece8Smrg		echo "Invalid configuration \`$1': \`$kernel' does not support \`$os'." 1>&2
180015ffece8Smrg		exit 1
180115ffece8Smrg		;;
180215ffece8Smrg	kfreebsd*-gnu* | kopensolaris*-gnu*)
180315ffece8Smrg		;;
180415ffece8Smrg	vxworks-simlinux | vxworks-simwindows | vxworks-spe)
180515ffece8Smrg		;;
180615ffece8Smrg	nto-qnx*)
180715ffece8Smrg		;;
180815ffece8Smrg	os2-emx)
180915ffece8Smrg		;;
181015ffece8Smrg	*-eabi* | *-gnueabi*)
181115ffece8Smrg		;;
181215ffece8Smrg	-*)
181315ffece8Smrg		# Blank kernel with real OS is always fine.
181415ffece8Smrg		;;
181515ffece8Smrg	*-*)
181615ffece8Smrg		echo "Invalid configuration \`$1': Kernel \`$kernel' not known to work with OS \`$os'." 1>&2
181715ffece8Smrg		exit 1
181815ffece8Smrg		;;
181915ffece8Smrgesac
182015ffece8Smrg
1821943345d3Smrg# Here we handle the case where we know the os, and the CPU type, but not the
1822943345d3Smrg# manufacturer.  We pick the logical manufacturer.
182315ffece8Smrgcase $vendor in
182415ffece8Smrg	unknown)
182515ffece8Smrg		case $cpu-$os in
182615ffece8Smrg			*-riscix*)
1827943345d3Smrg				vendor=acorn
1828943345d3Smrg				;;
182915ffece8Smrg			*-sunos*)
1830943345d3Smrg				vendor=sun
1831943345d3Smrg				;;
183215ffece8Smrg			*-cnk* | *-aix*)
1833943345d3Smrg				vendor=ibm
1834943345d3Smrg				;;
183515ffece8Smrg			*-beos*)
1836943345d3Smrg				vendor=be
1837943345d3Smrg				;;
183815ffece8Smrg			*-hpux*)
1839943345d3Smrg				vendor=hp
1840943345d3Smrg				;;
184115ffece8Smrg			*-mpeix*)
1842943345d3Smrg				vendor=hp
1843943345d3Smrg				;;
184415ffece8Smrg			*-hiux*)
1845943345d3Smrg				vendor=hitachi
1846943345d3Smrg				;;
184715ffece8Smrg			*-unos*)
1848943345d3Smrg				vendor=crds
1849943345d3Smrg				;;
185015ffece8Smrg			*-dgux*)
1851943345d3Smrg				vendor=dg
1852943345d3Smrg				;;
185315ffece8Smrg			*-luna*)
1854943345d3Smrg				vendor=omron
1855943345d3Smrg				;;
185615ffece8Smrg			*-genix*)
1857943345d3Smrg				vendor=ns
1858943345d3Smrg				;;
185915ffece8Smrg			*-clix*)
186015ffece8Smrg				vendor=intergraph
186115ffece8Smrg				;;
186215ffece8Smrg			*-mvs* | *-opened*)
186315ffece8Smrg				vendor=ibm
186415ffece8Smrg				;;
186515ffece8Smrg			*-os400*)
1866943345d3Smrg				vendor=ibm
1867943345d3Smrg				;;
186815ffece8Smrg			s390-* | s390x-*)
1869f67b85aaSmrg				vendor=ibm
1870f67b85aaSmrg				;;
187115ffece8Smrg			*-ptx*)
1872943345d3Smrg				vendor=sequent
1873943345d3Smrg				;;
187415ffece8Smrg			*-tpf*)
1875f67b85aaSmrg				vendor=ibm
1876f67b85aaSmrg				;;
187715ffece8Smrg			*-vxsim* | *-vxworks* | *-windiss*)
1878943345d3Smrg				vendor=wrs
1879943345d3Smrg				;;
188015ffece8Smrg			*-aux*)
1881943345d3Smrg				vendor=apple
1882943345d3Smrg				;;
188315ffece8Smrg			*-hms*)
1884943345d3Smrg				vendor=hitachi
1885943345d3Smrg				;;
188615ffece8Smrg			*-mpw* | *-macos*)
1887943345d3Smrg				vendor=apple
1888943345d3Smrg				;;
188915ffece8Smrg			*-*mint | *-mint[0-9]* | *-*MiNT | *-MiNT[0-9]*)
1890943345d3Smrg				vendor=atari
1891943345d3Smrg				;;
189215ffece8Smrg			*-vos*)
1893943345d3Smrg				vendor=stratus
1894943345d3Smrg				;;
1895943345d3Smrg		esac
1896943345d3Smrg		;;
1897943345d3Smrgesac
1898943345d3Smrg
189915ffece8Smrgecho "$cpu-$vendor-${kernel:+$kernel-}$os"
1900f67b85aaSmrgexit
1901943345d3Smrg
1902943345d3Smrg# Local variables:
190315ffece8Smrg# eval: (add-hook 'before-save-hook 'time-stamp)
1904943345d3Smrg# time-stamp-start: "timestamp='"
1905943345d3Smrg# time-stamp-format: "%:y-%02m-%02d"
1906943345d3Smrg# time-stamp-end: "'"
1907943345d3Smrg# End:
1908