1e07dc26bSmrg#! /bin/sh
2e07dc26bSmrg# Configuration validation subroutine script.
3636c353eSmrg#   Copyright 1992-2023 Free Software Foundation, Inc.
4e07dc26bSmrg
5636c353eSmrg# shellcheck disable=SC2006,SC2268 # see below for rationale
6636c353eSmrg
7636c353eSmrgtimestamp='2023-01-21'
8e07dc26bSmrg
9e07dc26bSmrg# This file is free software; you can redistribute it and/or modify it
10e07dc26bSmrg# under the terms of the GNU General Public License as published by
11636c353eSmrg# the Free Software Foundation, either version 3 of the License, or
12e07dc26bSmrg# (at your option) any later version.
13e07dc26bSmrg#
14e07dc26bSmrg# This program is distributed in the hope that it will be useful, but
15e07dc26bSmrg# WITHOUT ANY WARRANTY; without even the implied warranty of
16e07dc26bSmrg# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
17e07dc26bSmrg# General Public License for more details.
18e07dc26bSmrg#
19e07dc26bSmrg# You should have received a copy of the GNU General Public License
20636c353eSmrg# along with this program; if not, see <https://www.gnu.org/licenses/>.
21e07dc26bSmrg#
22e07dc26bSmrg# As a special exception to the GNU General Public License, if you
23e07dc26bSmrg# distribute this file as part of a program that contains a
24e07dc26bSmrg# configuration script generated by Autoconf, you may include it under
25e07dc26bSmrg# the same distribution terms that you use for the rest of that
26e07dc26bSmrg# program.  This Exception is an additional permission under section 7
27e07dc26bSmrg# of the GNU General Public License, version 3 ("GPLv3").
28e07dc26bSmrg
29e07dc26bSmrg
30e07dc26bSmrg# Please send patches to <config-patches@gnu.org>.
31e07dc26bSmrg#
32e07dc26bSmrg# Configuration subroutine to validate and canonicalize a configuration type.
33e07dc26bSmrg# Supply the specified configuration type as an argument.
34e07dc26bSmrg# If it is invalid, we print an error message on stderr and exit with code 1.
35e07dc26bSmrg# Otherwise, we print the canonical config type on stdout and succeed.
36e07dc26bSmrg
37e07dc26bSmrg# You can get the latest version of this script from:
38636c353eSmrg# https://git.savannah.gnu.org/cgit/config.git/plain/config.sub
39e07dc26bSmrg
40e07dc26bSmrg# This file is supposed to be the same for all GNU packages
41e07dc26bSmrg# and recognize all the CPU types, system types and aliases
42e07dc26bSmrg# that are meaningful with *any* GNU software.
43e07dc26bSmrg# Each package is responsible for reporting which valid configurations
44e07dc26bSmrg# it does not support.  The user should be able to distinguish
45e07dc26bSmrg# a failure to support a valid configuration from a meaningless
46e07dc26bSmrg# configuration.
47e07dc26bSmrg
48e07dc26bSmrg# The goal of this file is to map all the various variations of a given
49e07dc26bSmrg# machine specification into a single specification in the form:
50e07dc26bSmrg#	CPU_TYPE-MANUFACTURER-OPERATING_SYSTEM
51e07dc26bSmrg# or in some cases, the newer four-part form:
52e07dc26bSmrg#	CPU_TYPE-MANUFACTURER-KERNEL-OPERATING_SYSTEM
53e07dc26bSmrg# It is wrong to echo any other type of specification.
54e07dc26bSmrg
55636c353eSmrg# The "shellcheck disable" line above the timestamp inhibits complaints
56636c353eSmrg# about features and limitations of the classic Bourne shell that were
57636c353eSmrg# superseded or lifted in POSIX.  However, this script identifies a wide
58636c353eSmrg# variety of pre-POSIX systems that do not have POSIX shells at all, and
59636c353eSmrg# even some reasonably current systems (Solaris 10 as case-in-point) still
60636c353eSmrg# have a pre-POSIX /bin/sh.
61636c353eSmrg
62e07dc26bSmrgme=`echo "$0" | sed -e 's,.*/,,'`
63e07dc26bSmrg
64e07dc26bSmrgusage="\
65e07dc26bSmrgUsage: $0 [OPTION] CPU-MFR-OPSYS or ALIAS
66e07dc26bSmrg
67e07dc26bSmrgCanonicalize a configuration name.
68e07dc26bSmrg
69636c353eSmrgOptions:
70e07dc26bSmrg  -h, --help         print this help, then exit
71e07dc26bSmrg  -t, --time-stamp   print date of last modification, then exit
72e07dc26bSmrg  -v, --version      print version number, then exit
73e07dc26bSmrg
74e07dc26bSmrgReport bugs and patches to <config-patches@gnu.org>."
75e07dc26bSmrg
76e07dc26bSmrgversion="\
77e07dc26bSmrgGNU config.sub ($timestamp)
78e07dc26bSmrg
79636c353eSmrgCopyright 1992-2023 Free Software Foundation, Inc.
80e07dc26bSmrg
81e07dc26bSmrgThis is free software; see the source for copying conditions.  There is NO
82e07dc26bSmrgwarranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE."
83e07dc26bSmrg
84e07dc26bSmrghelp="
85e07dc26bSmrgTry \`$me --help' for more information."
86e07dc26bSmrg
87e07dc26bSmrg# Parse command line
88e07dc26bSmrgwhile test $# -gt 0 ; do
89e07dc26bSmrg  case $1 in
90e07dc26bSmrg    --time-stamp | --time* | -t )
91e07dc26bSmrg       echo "$timestamp" ; exit ;;
92e07dc26bSmrg    --version | -v )
93e07dc26bSmrg       echo "$version" ; exit ;;
94e07dc26bSmrg    --help | --h* | -h )
95e07dc26bSmrg       echo "$usage"; exit ;;
96e07dc26bSmrg    -- )     # Stop option processing
97e07dc26bSmrg       shift; break ;;
98e07dc26bSmrg    - )	# Use stdin as input.
99e07dc26bSmrg       break ;;
100e07dc26bSmrg    -* )
101636c353eSmrg       echo "$me: invalid option $1$help" >&2
102e07dc26bSmrg       exit 1 ;;
103e07dc26bSmrg
104e07dc26bSmrg    *local*)
105e07dc26bSmrg       # First pass through any local machine types.
106636c353eSmrg       echo "$1"
107e07dc26bSmrg       exit ;;
108e07dc26bSmrg
109e07dc26bSmrg    * )
110e07dc26bSmrg       break ;;
111e07dc26bSmrg  esac
112e07dc26bSmrgdone
113e07dc26bSmrg
114e07dc26bSmrgcase $# in
115e07dc26bSmrg 0) echo "$me: missing argument$help" >&2
116e07dc26bSmrg    exit 1;;
117e07dc26bSmrg 1) ;;
118e07dc26bSmrg *) echo "$me: too many arguments$help" >&2
119e07dc26bSmrg    exit 1;;
120e07dc26bSmrgesac
121e07dc26bSmrg
122636c353eSmrg# Split fields of configuration type
123636c353eSmrg# shellcheck disable=SC2162
124636c353eSmrgsaved_IFS=$IFS
125636c353eSmrgIFS="-" read field1 field2 field3 field4 <<EOF
126636c353eSmrg$1
127636c353eSmrgEOF
128636c353eSmrgIFS=$saved_IFS
129e07dc26bSmrg
130636c353eSmrg# Separate into logical components for further validation
131636c353eSmrgcase $1 in
132636c353eSmrg	*-*-*-*-*)
133636c353eSmrg		echo Invalid configuration \`"$1"\': more than four components >&2
134636c353eSmrg		exit 1
135e07dc26bSmrg		;;
136636c353eSmrg	*-*-*-*)
137636c353eSmrg		basic_machine=$field1-$field2
138636c353eSmrg		basic_os=$field3-$field4
139e07dc26bSmrg		;;
140636c353eSmrg	*-*-*)
141636c353eSmrg		# Ambiguous whether COMPANY is present, or skipped and KERNEL-OS is two
142636c353eSmrg		# parts
143636c353eSmrg		maybe_os=$field2-$field3
144636c353eSmrg		case $maybe_os in
145636c353eSmrg			nto-qnx* | linux-* | uclinux-uclibc* \
146636c353eSmrg			| uclinux-gnu* | kfreebsd*-gnu* | knetbsd*-gnu* | netbsd*-gnu* \
147636c353eSmrg			| netbsd*-eabi* | kopensolaris*-gnu* | cloudabi*-eabi* \
148636c353eSmrg			| storm-chaos* | os2-emx* | rtmk-nova* | managarm-*)
149636c353eSmrg				basic_machine=$field1
150636c353eSmrg				basic_os=$maybe_os
151636c353eSmrg				;;
152636c353eSmrg			android-linux)
153636c353eSmrg				basic_machine=$field1-unknown
154636c353eSmrg				basic_os=linux-android
155636c353eSmrg				;;
156636c353eSmrg			*)
157636c353eSmrg				basic_machine=$field1-$field2
158636c353eSmrg				basic_os=$field3
159636c353eSmrg				;;
160636c353eSmrg		esac
161e07dc26bSmrg		;;
162636c353eSmrg	*-*)
163636c353eSmrg		# A lone config we happen to match not fitting any pattern
164636c353eSmrg		case $field1-$field2 in
165636c353eSmrg			decstation-3100)
166636c353eSmrg				basic_machine=mips-dec
167636c353eSmrg				basic_os=
168636c353eSmrg				;;
169636c353eSmrg			*-*)
170636c353eSmrg				# Second component is usually, but not always the OS
171636c353eSmrg				case $field2 in
172636c353eSmrg					# Prevent following clause from handling this valid os
173636c353eSmrg					sun*os*)
174636c353eSmrg						basic_machine=$field1
175636c353eSmrg						basic_os=$field2
176636c353eSmrg						;;
177636c353eSmrg					zephyr*)
178636c353eSmrg						basic_machine=$field1-unknown
179636c353eSmrg						basic_os=$field2
180636c353eSmrg						;;
181636c353eSmrg					# Manufacturers
182636c353eSmrg					dec* | mips* | sequent* | encore* | pc533* | sgi* | sony* \
183636c353eSmrg					| att* | 7300* | 3300* | delta* | motorola* | sun[234]* \
184636c353eSmrg					| unicom* | ibm* | next | hp | isi* | apollo | altos* \
185636c353eSmrg					| convergent* | ncr* | news | 32* | 3600* | 3100* \
186636c353eSmrg					| hitachi* | c[123]* | convex* | sun | crds | omron* | dg \
187636c353eSmrg					| ultra | tti* | harris | dolphin | highlevel | gould \
188636c353eSmrg					| cbm | ns | masscomp | apple | axis | knuth | cray \
189636c353eSmrg					| microblaze* | sim | cisco \
190636c353eSmrg					| oki | wec | wrs | winbond)
191636c353eSmrg						basic_machine=$field1-$field2
192636c353eSmrg						basic_os=
193636c353eSmrg						;;
194636c353eSmrg					*)
195636c353eSmrg						basic_machine=$field1
196636c353eSmrg						basic_os=$field2
197636c353eSmrg						;;
198636c353eSmrg				esac
199636c353eSmrg			;;
200636c353eSmrg		esac
201e07dc26bSmrg		;;
202636c353eSmrg	*)
203636c353eSmrg		# Convert single-component short-hands not valid as part of
204636c353eSmrg		# multi-component configurations.
205636c353eSmrg		case $field1 in
206636c353eSmrg			386bsd)
207636c353eSmrg				basic_machine=i386-pc
208636c353eSmrg				basic_os=bsd
209636c353eSmrg				;;
210636c353eSmrg			a29khif)
211636c353eSmrg				basic_machine=a29k-amd
212636c353eSmrg				basic_os=udi
213636c353eSmrg				;;
214636c353eSmrg			adobe68k)
215636c353eSmrg				basic_machine=m68010-adobe
216636c353eSmrg				basic_os=scout
217636c353eSmrg				;;
218636c353eSmrg			alliant)
219636c353eSmrg				basic_machine=fx80-alliant
220636c353eSmrg				basic_os=
221636c353eSmrg				;;
222636c353eSmrg			altos | altos3068)
223636c353eSmrg				basic_machine=m68k-altos
224636c353eSmrg				basic_os=
225636c353eSmrg				;;
226636c353eSmrg			am29k)
227636c353eSmrg				basic_machine=a29k-none
228636c353eSmrg				basic_os=bsd
229636c353eSmrg				;;
230636c353eSmrg			amdahl)
231636c353eSmrg				basic_machine=580-amdahl
232636c353eSmrg				basic_os=sysv
233636c353eSmrg				;;
234636c353eSmrg			amiga)
235636c353eSmrg				basic_machine=m68k-unknown
236636c353eSmrg				basic_os=
237636c353eSmrg				;;
238636c353eSmrg			amigaos | amigados)
239636c353eSmrg				basic_machine=m68k-unknown
240636c353eSmrg				basic_os=amigaos
241636c353eSmrg				;;
242636c353eSmrg			amigaunix | amix)
243636c353eSmrg				basic_machine=m68k-unknown
244636c353eSmrg				basic_os=sysv4
245636c353eSmrg				;;
246636c353eSmrg			apollo68)
247636c353eSmrg				basic_machine=m68k-apollo
248636c353eSmrg				basic_os=sysv
249636c353eSmrg				;;
250636c353eSmrg			apollo68bsd)
251636c353eSmrg				basic_machine=m68k-apollo
252636c353eSmrg				basic_os=bsd
253636c353eSmrg				;;
254636c353eSmrg			aros)
255636c353eSmrg				basic_machine=i386-pc
256636c353eSmrg				basic_os=aros
257636c353eSmrg				;;
258636c353eSmrg			aux)
259636c353eSmrg				basic_machine=m68k-apple
260636c353eSmrg				basic_os=aux
261636c353eSmrg				;;
262636c353eSmrg			balance)
263636c353eSmrg				basic_machine=ns32k-sequent
264636c353eSmrg				basic_os=dynix
265636c353eSmrg				;;
266636c353eSmrg			blackfin)
267636c353eSmrg				basic_machine=bfin-unknown
268636c353eSmrg				basic_os=linux
269636c353eSmrg				;;
270636c353eSmrg			cegcc)
271636c353eSmrg				basic_machine=arm-unknown
272636c353eSmrg				basic_os=cegcc
273636c353eSmrg				;;
274636c353eSmrg			convex-c1)
275636c353eSmrg				basic_machine=c1-convex
276636c353eSmrg				basic_os=bsd
277636c353eSmrg				;;
278636c353eSmrg			convex-c2)
279636c353eSmrg				basic_machine=c2-convex
280636c353eSmrg				basic_os=bsd
281636c353eSmrg				;;
282636c353eSmrg			convex-c32)
283636c353eSmrg				basic_machine=c32-convex
284636c353eSmrg				basic_os=bsd
285636c353eSmrg				;;
286636c353eSmrg			convex-c34)
287636c353eSmrg				basic_machine=c34-convex
288636c353eSmrg				basic_os=bsd
289636c353eSmrg				;;
290636c353eSmrg			convex-c38)
291636c353eSmrg				basic_machine=c38-convex
292636c353eSmrg				basic_os=bsd
293636c353eSmrg				;;
294636c353eSmrg			cray)
295636c353eSmrg				basic_machine=j90-cray
296636c353eSmrg				basic_os=unicos
297636c353eSmrg				;;
298636c353eSmrg			crds | unos)
299636c353eSmrg				basic_machine=m68k-crds
300636c353eSmrg				basic_os=
301636c353eSmrg				;;
302636c353eSmrg			da30)
303636c353eSmrg				basic_machine=m68k-da30
304636c353eSmrg				basic_os=
305636c353eSmrg				;;
306636c353eSmrg			decstation | pmax | pmin | dec3100 | decstatn)
307636c353eSmrg				basic_machine=mips-dec
308636c353eSmrg				basic_os=
309636c353eSmrg				;;
310636c353eSmrg			delta88)
311636c353eSmrg				basic_machine=m88k-motorola
312636c353eSmrg				basic_os=sysv3
313636c353eSmrg				;;
314636c353eSmrg			dicos)
315636c353eSmrg				basic_machine=i686-pc
316636c353eSmrg				basic_os=dicos
317636c353eSmrg				;;
318636c353eSmrg			djgpp)
319636c353eSmrg				basic_machine=i586-pc
320636c353eSmrg				basic_os=msdosdjgpp
321636c353eSmrg				;;
322636c353eSmrg			ebmon29k)
323636c353eSmrg				basic_machine=a29k-amd
324636c353eSmrg				basic_os=ebmon
325636c353eSmrg				;;
326636c353eSmrg			es1800 | OSE68k | ose68k | ose | OSE)
327636c353eSmrg				basic_machine=m68k-ericsson
328636c353eSmrg				basic_os=ose
329636c353eSmrg				;;
330636c353eSmrg			gmicro)
331636c353eSmrg				basic_machine=tron-gmicro
332636c353eSmrg				basic_os=sysv
333636c353eSmrg				;;
334636c353eSmrg			go32)
335636c353eSmrg				basic_machine=i386-pc
336636c353eSmrg				basic_os=go32
337636c353eSmrg				;;
338636c353eSmrg			h8300hms)
339636c353eSmrg				basic_machine=h8300-hitachi
340636c353eSmrg				basic_os=hms
341636c353eSmrg				;;
342636c353eSmrg			h8300xray)
343636c353eSmrg				basic_machine=h8300-hitachi
344636c353eSmrg				basic_os=xray
345636c353eSmrg				;;
346636c353eSmrg			h8500hms)
347636c353eSmrg				basic_machine=h8500-hitachi
348636c353eSmrg				basic_os=hms
349636c353eSmrg				;;
350636c353eSmrg			harris)
351636c353eSmrg				basic_machine=m88k-harris
352636c353eSmrg				basic_os=sysv3
353636c353eSmrg				;;
354636c353eSmrg			hp300 | hp300hpux)
355636c353eSmrg				basic_machine=m68k-hp
356636c353eSmrg				basic_os=hpux
357636c353eSmrg				;;
358636c353eSmrg			hp300bsd)
359636c353eSmrg				basic_machine=m68k-hp
360636c353eSmrg				basic_os=bsd
361636c353eSmrg				;;
362636c353eSmrg			hppaosf)
363636c353eSmrg				basic_machine=hppa1.1-hp
364636c353eSmrg				basic_os=osf
365636c353eSmrg				;;
366636c353eSmrg			hppro)
367636c353eSmrg				basic_machine=hppa1.1-hp
368636c353eSmrg				basic_os=proelf
369636c353eSmrg				;;
370636c353eSmrg			i386mach)
371636c353eSmrg				basic_machine=i386-mach
372636c353eSmrg				basic_os=mach
373636c353eSmrg				;;
374636c353eSmrg			isi68 | isi)
375636c353eSmrg				basic_machine=m68k-isi
376636c353eSmrg				basic_os=sysv
377636c353eSmrg				;;
378636c353eSmrg			m68knommu)
379636c353eSmrg				basic_machine=m68k-unknown
380636c353eSmrg				basic_os=linux
381636c353eSmrg				;;
382636c353eSmrg			magnum | m3230)
383636c353eSmrg				basic_machine=mips-mips
384636c353eSmrg				basic_os=sysv
385636c353eSmrg				;;
386636c353eSmrg			merlin)
387636c353eSmrg				basic_machine=ns32k-utek
388636c353eSmrg				basic_os=sysv
389636c353eSmrg				;;
390636c353eSmrg			mingw64)
391636c353eSmrg				basic_machine=x86_64-pc
392636c353eSmrg				basic_os=mingw64
393636c353eSmrg				;;
394636c353eSmrg			mingw32)
395636c353eSmrg				basic_machine=i686-pc
396636c353eSmrg				basic_os=mingw32
397636c353eSmrg				;;
398636c353eSmrg			mingw32ce)
399636c353eSmrg				basic_machine=arm-unknown
400636c353eSmrg				basic_os=mingw32ce
401636c353eSmrg				;;
402636c353eSmrg			monitor)
403636c353eSmrg				basic_machine=m68k-rom68k
404636c353eSmrg				basic_os=coff
405636c353eSmrg				;;
406636c353eSmrg			morphos)
407636c353eSmrg				basic_machine=powerpc-unknown
408636c353eSmrg				basic_os=morphos
409636c353eSmrg				;;
410636c353eSmrg			moxiebox)
411636c353eSmrg				basic_machine=moxie-unknown
412636c353eSmrg				basic_os=moxiebox
413636c353eSmrg				;;
414636c353eSmrg			msdos)
415636c353eSmrg				basic_machine=i386-pc
416636c353eSmrg				basic_os=msdos
417636c353eSmrg				;;
418636c353eSmrg			msys)
419636c353eSmrg				basic_machine=i686-pc
420636c353eSmrg				basic_os=msys
421636c353eSmrg				;;
422636c353eSmrg			mvs)
423636c353eSmrg				basic_machine=i370-ibm
424636c353eSmrg				basic_os=mvs
425636c353eSmrg				;;
426636c353eSmrg			nacl)
427636c353eSmrg				basic_machine=le32-unknown
428636c353eSmrg				basic_os=nacl
429636c353eSmrg				;;
430636c353eSmrg			ncr3000)
431636c353eSmrg				basic_machine=i486-ncr
432636c353eSmrg				basic_os=sysv4
433636c353eSmrg				;;
434636c353eSmrg			netbsd386)
435636c353eSmrg				basic_machine=i386-pc
436636c353eSmrg				basic_os=netbsd
437636c353eSmrg				;;
438636c353eSmrg			netwinder)
439636c353eSmrg				basic_machine=armv4l-rebel
440636c353eSmrg				basic_os=linux
441636c353eSmrg				;;
442636c353eSmrg			news | news700 | news800 | news900)
443636c353eSmrg				basic_machine=m68k-sony
444636c353eSmrg				basic_os=newsos
445636c353eSmrg				;;
446636c353eSmrg			news1000)
447636c353eSmrg				basic_machine=m68030-sony
448636c353eSmrg				basic_os=newsos
449636c353eSmrg				;;
450636c353eSmrg			necv70)
451636c353eSmrg				basic_machine=v70-nec
452636c353eSmrg				basic_os=sysv
453636c353eSmrg				;;
454636c353eSmrg			nh3000)
455636c353eSmrg				basic_machine=m68k-harris
456636c353eSmrg				basic_os=cxux
457636c353eSmrg				;;
458636c353eSmrg			nh[45]000)
459636c353eSmrg				basic_machine=m88k-harris
460636c353eSmrg				basic_os=cxux
461636c353eSmrg				;;
462636c353eSmrg			nindy960)
463636c353eSmrg				basic_machine=i960-intel
464636c353eSmrg				basic_os=nindy
465636c353eSmrg				;;
466636c353eSmrg			mon960)
467636c353eSmrg				basic_machine=i960-intel
468636c353eSmrg				basic_os=mon960
469636c353eSmrg				;;
470636c353eSmrg			nonstopux)
471636c353eSmrg				basic_machine=mips-compaq
472636c353eSmrg				basic_os=nonstopux
473636c353eSmrg				;;
474636c353eSmrg			os400)
475636c353eSmrg				basic_machine=powerpc-ibm
476636c353eSmrg				basic_os=os400
477636c353eSmrg				;;
478636c353eSmrg			OSE68000 | ose68000)
479636c353eSmrg				basic_machine=m68000-ericsson
480636c353eSmrg				basic_os=ose
481636c353eSmrg				;;
482636c353eSmrg			os68k)
483636c353eSmrg				basic_machine=m68k-none
484636c353eSmrg				basic_os=os68k
485636c353eSmrg				;;
486636c353eSmrg			paragon)
487636c353eSmrg				basic_machine=i860-intel
488636c353eSmrg				basic_os=osf
489636c353eSmrg				;;
490636c353eSmrg			parisc)
491636c353eSmrg				basic_machine=hppa-unknown
492636c353eSmrg				basic_os=linux
493636c353eSmrg				;;
494636c353eSmrg			psp)
495636c353eSmrg				basic_machine=mipsallegrexel-sony
496636c353eSmrg				basic_os=psp
497636c353eSmrg				;;
498636c353eSmrg			pw32)
499636c353eSmrg				basic_machine=i586-unknown
500636c353eSmrg				basic_os=pw32
501636c353eSmrg				;;
502636c353eSmrg			rdos | rdos64)
503636c353eSmrg				basic_machine=x86_64-pc
504636c353eSmrg				basic_os=rdos
505636c353eSmrg				;;
506636c353eSmrg			rdos32)
507636c353eSmrg				basic_machine=i386-pc
508636c353eSmrg				basic_os=rdos
509636c353eSmrg				;;
510636c353eSmrg			rom68k)
511636c353eSmrg				basic_machine=m68k-rom68k
512636c353eSmrg				basic_os=coff
513636c353eSmrg				;;
514636c353eSmrg			sa29200)
515636c353eSmrg				basic_machine=a29k-amd
516636c353eSmrg				basic_os=udi
517636c353eSmrg				;;
518636c353eSmrg			sei)
519636c353eSmrg				basic_machine=mips-sei
520636c353eSmrg				basic_os=seiux
521636c353eSmrg				;;
522636c353eSmrg			sequent)
523636c353eSmrg				basic_machine=i386-sequent
524636c353eSmrg				basic_os=
525636c353eSmrg				;;
526636c353eSmrg			sps7)
527636c353eSmrg				basic_machine=m68k-bull
528636c353eSmrg				basic_os=sysv2
529636c353eSmrg				;;
530636c353eSmrg			st2000)
531636c353eSmrg				basic_machine=m68k-tandem
532636c353eSmrg				basic_os=
533636c353eSmrg				;;
534636c353eSmrg			stratus)
535636c353eSmrg				basic_machine=i860-stratus
536636c353eSmrg				basic_os=sysv4
537636c353eSmrg				;;
538636c353eSmrg			sun2)
539636c353eSmrg				basic_machine=m68000-sun
540636c353eSmrg				basic_os=
541636c353eSmrg				;;
542636c353eSmrg			sun2os3)
543636c353eSmrg				basic_machine=m68000-sun
544636c353eSmrg				basic_os=sunos3
545636c353eSmrg				;;
546636c353eSmrg			sun2os4)
547636c353eSmrg				basic_machine=m68000-sun
548636c353eSmrg				basic_os=sunos4
549636c353eSmrg				;;
550636c353eSmrg			sun3)
551636c353eSmrg				basic_machine=m68k-sun
552636c353eSmrg				basic_os=
553636c353eSmrg				;;
554636c353eSmrg			sun3os3)
555636c353eSmrg				basic_machine=m68k-sun
556636c353eSmrg				basic_os=sunos3
557636c353eSmrg				;;
558636c353eSmrg			sun3os4)
559636c353eSmrg				basic_machine=m68k-sun
560636c353eSmrg				basic_os=sunos4
561636c353eSmrg				;;
562636c353eSmrg			sun4)
563636c353eSmrg				basic_machine=sparc-sun
564636c353eSmrg				basic_os=
565636c353eSmrg				;;
566636c353eSmrg			sun4os3)
567636c353eSmrg				basic_machine=sparc-sun
568636c353eSmrg				basic_os=sunos3
569636c353eSmrg				;;
570636c353eSmrg			sun4os4)
571636c353eSmrg				basic_machine=sparc-sun
572636c353eSmrg				basic_os=sunos4
573636c353eSmrg				;;
574636c353eSmrg			sun4sol2)
575636c353eSmrg				basic_machine=sparc-sun
576636c353eSmrg				basic_os=solaris2
577636c353eSmrg				;;
578636c353eSmrg			sun386 | sun386i | roadrunner)
579636c353eSmrg				basic_machine=i386-sun
580636c353eSmrg				basic_os=
581636c353eSmrg				;;
582636c353eSmrg			sv1)
583636c353eSmrg				basic_machine=sv1-cray
584636c353eSmrg				basic_os=unicos
585636c353eSmrg				;;
586636c353eSmrg			symmetry)
587636c353eSmrg				basic_machine=i386-sequent
588636c353eSmrg				basic_os=dynix
589636c353eSmrg				;;
590636c353eSmrg			t3e)
591636c353eSmrg				basic_machine=alphaev5-cray
592636c353eSmrg				basic_os=unicos
593636c353eSmrg				;;
594636c353eSmrg			t90)
595636c353eSmrg				basic_machine=t90-cray
596636c353eSmrg				basic_os=unicos
597636c353eSmrg				;;
598636c353eSmrg			toad1)
599636c353eSmrg				basic_machine=pdp10-xkl
600636c353eSmrg				basic_os=tops20
601636c353eSmrg				;;
602636c353eSmrg			tpf)
603636c353eSmrg				basic_machine=s390x-ibm
604636c353eSmrg				basic_os=tpf
605636c353eSmrg				;;
606636c353eSmrg			udi29k)
607636c353eSmrg				basic_machine=a29k-amd
608636c353eSmrg				basic_os=udi
609636c353eSmrg				;;
610636c353eSmrg			ultra3)
611636c353eSmrg				basic_machine=a29k-nyu
612636c353eSmrg				basic_os=sym1
613636c353eSmrg				;;
614636c353eSmrg			v810 | necv810)
615636c353eSmrg				basic_machine=v810-nec
616636c353eSmrg				basic_os=none
617636c353eSmrg				;;
618636c353eSmrg			vaxv)
619636c353eSmrg				basic_machine=vax-dec
620636c353eSmrg				basic_os=sysv
621636c353eSmrg				;;
622636c353eSmrg			vms)
623636c353eSmrg				basic_machine=vax-dec
624636c353eSmrg				basic_os=vms
625636c353eSmrg				;;
626636c353eSmrg			vsta)
627636c353eSmrg				basic_machine=i386-pc
628636c353eSmrg				basic_os=vsta
629636c353eSmrg				;;
630636c353eSmrg			vxworks960)
631636c353eSmrg				basic_machine=i960-wrs
632636c353eSmrg				basic_os=vxworks
633636c353eSmrg				;;
634636c353eSmrg			vxworks68)
635636c353eSmrg				basic_machine=m68k-wrs
636636c353eSmrg				basic_os=vxworks
637636c353eSmrg				;;
638636c353eSmrg			vxworks29k)
639636c353eSmrg				basic_machine=a29k-wrs
640636c353eSmrg				basic_os=vxworks
641636c353eSmrg				;;
642636c353eSmrg			xbox)
643636c353eSmrg				basic_machine=i686-pc
644636c353eSmrg				basic_os=mingw32
645636c353eSmrg				;;
646636c353eSmrg			ymp)
647636c353eSmrg				basic_machine=ymp-cray
648636c353eSmrg				basic_os=unicos
649636c353eSmrg				;;
650636c353eSmrg			*)
651636c353eSmrg				basic_machine=$1
652636c353eSmrg				basic_os=
653636c353eSmrg				;;
654636c353eSmrg		esac
655e07dc26bSmrg		;;
656e07dc26bSmrgesac
657e07dc26bSmrg
658636c353eSmrg# Decode 1-component or ad-hoc basic machines
659e07dc26bSmrgcase $basic_machine in
660636c353eSmrg	# Here we handle the default manufacturer of certain CPU types.  It is in
661636c353eSmrg	# some cases the only manufacturer, in others, it is the most popular.
662636c353eSmrg	w89k)
663636c353eSmrg		cpu=hppa1.1
664636c353eSmrg		vendor=winbond
665e07dc26bSmrg		;;
666636c353eSmrg	op50n)
667636c353eSmrg		cpu=hppa1.1
668636c353eSmrg		vendor=oki
669e07dc26bSmrg		;;
670636c353eSmrg	op60c)
671636c353eSmrg		cpu=hppa1.1
672636c353eSmrg		vendor=oki
673e07dc26bSmrg		;;
674636c353eSmrg	ibm*)
675636c353eSmrg		cpu=i370
676636c353eSmrg		vendor=ibm
677e07dc26bSmrg		;;
678636c353eSmrg	orion105)
679636c353eSmrg		cpu=clipper
680636c353eSmrg		vendor=highlevel
681e07dc26bSmrg		;;
682636c353eSmrg	mac | mpw | mac-mpw)
683636c353eSmrg		cpu=m68k
684636c353eSmrg		vendor=apple
685e07dc26bSmrg		;;
686636c353eSmrg	pmac | pmac-mpw)
687636c353eSmrg		cpu=powerpc
688636c353eSmrg		vendor=apple
689e07dc26bSmrg		;;
690e07dc26bSmrg
691e07dc26bSmrg	# Recognize the various machine names and aliases which stand
692e07dc26bSmrg	# for a CPU type and a company and sometimes even an OS.
693e07dc26bSmrg	3b1 | 7300 | 7300-att | att-7300 | pc7300 | safari | unixpc)
694636c353eSmrg		cpu=m68000
695636c353eSmrg		vendor=att
696e07dc26bSmrg		;;
697e07dc26bSmrg	3b*)
698636c353eSmrg		cpu=we32k
699636c353eSmrg		vendor=att
700e07dc26bSmrg		;;
701e07dc26bSmrg	bluegene*)
702636c353eSmrg		cpu=powerpc
703636c353eSmrg		vendor=ibm
704636c353eSmrg		basic_os=cnk
705e07dc26bSmrg		;;
706e07dc26bSmrg	decsystem10* | dec10*)
707636c353eSmrg		cpu=pdp10
708636c353eSmrg		vendor=dec
709636c353eSmrg		basic_os=tops10
710e07dc26bSmrg		;;
711e07dc26bSmrg	decsystem20* | dec20*)
712636c353eSmrg		cpu=pdp10
713636c353eSmrg		vendor=dec
714636c353eSmrg		basic_os=tops20
715e07dc26bSmrg		;;
716e07dc26bSmrg	delta | 3300 | motorola-3300 | motorola-delta \
717e07dc26bSmrg	      | 3300-motorola | delta-motorola)
718636c353eSmrg		cpu=m68k
719636c353eSmrg		vendor=motorola
720e07dc26bSmrg		;;
721636c353eSmrg	dpx2*)
722636c353eSmrg		cpu=m68k
723636c353eSmrg		vendor=bull
724636c353eSmrg		basic_os=sysv3
725e07dc26bSmrg		;;
726e07dc26bSmrg	encore | umax | mmax)
727636c353eSmrg		cpu=ns32k
728636c353eSmrg		vendor=encore
729e07dc26bSmrg		;;
730636c353eSmrg	elxsi)
731636c353eSmrg		cpu=elxsi
732636c353eSmrg		vendor=elxsi
733636c353eSmrg		basic_os=${basic_os:-bsd}
734e07dc26bSmrg		;;
735e07dc26bSmrg	fx2800)
736636c353eSmrg		cpu=i860
737636c353eSmrg		vendor=alliant
738e07dc26bSmrg		;;
739e07dc26bSmrg	genix)
740636c353eSmrg		cpu=ns32k
741636c353eSmrg		vendor=ns
742e07dc26bSmrg		;;
743e07dc26bSmrg	h3050r* | hiux*)
744636c353eSmrg		cpu=hppa1.1
745636c353eSmrg		vendor=hitachi
746636c353eSmrg		basic_os=hiuxwe2
747e07dc26bSmrg		;;
748e07dc26bSmrg	hp3k9[0-9][0-9] | hp9[0-9][0-9])
749636c353eSmrg		cpu=hppa1.0
750636c353eSmrg		vendor=hp
751e07dc26bSmrg		;;
752e07dc26bSmrg	hp9k2[0-9][0-9] | hp9k31[0-9])
753636c353eSmrg		cpu=m68000
754636c353eSmrg		vendor=hp
755e07dc26bSmrg		;;
756e07dc26bSmrg	hp9k3[2-9][0-9])
757636c353eSmrg		cpu=m68k
758636c353eSmrg		vendor=hp
759e07dc26bSmrg		;;
760e07dc26bSmrg	hp9k6[0-9][0-9] | hp6[0-9][0-9])
761636c353eSmrg		cpu=hppa1.0
762636c353eSmrg		vendor=hp
763e07dc26bSmrg		;;
764e07dc26bSmrg	hp9k7[0-79][0-9] | hp7[0-79][0-9])
765636c353eSmrg		cpu=hppa1.1
766636c353eSmrg		vendor=hp
767e07dc26bSmrg		;;
768e07dc26bSmrg	hp9k78[0-9] | hp78[0-9])
769e07dc26bSmrg		# FIXME: really hppa2.0-hp
770636c353eSmrg		cpu=hppa1.1
771636c353eSmrg		vendor=hp
772e07dc26bSmrg		;;
773e07dc26bSmrg	hp9k8[67]1 | hp8[67]1 | hp9k80[24] | hp80[24] | hp9k8[78]9 | hp8[78]9 | hp9k893 | hp893)
774e07dc26bSmrg		# FIXME: really hppa2.0-hp
775636c353eSmrg		cpu=hppa1.1
776636c353eSmrg		vendor=hp
777e07dc26bSmrg		;;
778e07dc26bSmrg	hp9k8[0-9][13679] | hp8[0-9][13679])
779636c353eSmrg		cpu=hppa1.1
780636c353eSmrg		vendor=hp
781e07dc26bSmrg		;;
782e07dc26bSmrg	hp9k8[0-9][0-9] | hp8[0-9][0-9])
783636c353eSmrg		cpu=hppa1.0
784636c353eSmrg		vendor=hp
785e07dc26bSmrg		;;
786e07dc26bSmrg	i*86v32)
787636c353eSmrg		cpu=`echo "$1" | sed -e 's/86.*/86/'`
788636c353eSmrg		vendor=pc
789636c353eSmrg		basic_os=sysv32
790e07dc26bSmrg		;;
791e07dc26bSmrg	i*86v4*)
792636c353eSmrg		cpu=`echo "$1" | sed -e 's/86.*/86/'`
793636c353eSmrg		vendor=pc
794636c353eSmrg		basic_os=sysv4
795e07dc26bSmrg		;;
796e07dc26bSmrg	i*86v)
797636c353eSmrg		cpu=`echo "$1" | sed -e 's/86.*/86/'`
798636c353eSmrg		vendor=pc
799636c353eSmrg		basic_os=sysv
800e07dc26bSmrg		;;
801e07dc26bSmrg	i*86sol2)
802636c353eSmrg		cpu=`echo "$1" | sed -e 's/86.*/86/'`
803636c353eSmrg		vendor=pc
804636c353eSmrg		basic_os=solaris2
805e07dc26bSmrg		;;
806636c353eSmrg	j90 | j90-cray)
807636c353eSmrg		cpu=j90
808636c353eSmrg		vendor=cray
809636c353eSmrg		basic_os=${basic_os:-unicos}
810e07dc26bSmrg		;;
811e07dc26bSmrg	iris | iris4d)
812636c353eSmrg		cpu=mips
813636c353eSmrg		vendor=sgi
814636c353eSmrg		case $basic_os in
815636c353eSmrg		    irix*)
816e07dc26bSmrg			;;
817e07dc26bSmrg		    *)
818636c353eSmrg			basic_os=irix4
819e07dc26bSmrg			;;
820e07dc26bSmrg		esac
821e07dc26bSmrg		;;
822e07dc26bSmrg	miniframe)
823636c353eSmrg		cpu=m68000
824636c353eSmrg		vendor=convergent
825e07dc26bSmrg		;;
826636c353eSmrg	*mint | mint[0-9]* | *MiNT | *MiNT[0-9]*)
827636c353eSmrg		cpu=m68k
828636c353eSmrg		vendor=atari
829636c353eSmrg		basic_os=mint
830e07dc26bSmrg		;;
831e07dc26bSmrg	news-3600 | risc-news)
832636c353eSmrg		cpu=mips
833636c353eSmrg		vendor=sony
834636c353eSmrg		basic_os=newsos
835636c353eSmrg		;;
836636c353eSmrg	next | m*-next)
837636c353eSmrg		cpu=m68k
838636c353eSmrg		vendor=next
839636c353eSmrg		case $basic_os in
840636c353eSmrg		    openstep*)
841636c353eSmrg		        ;;
842636c353eSmrg		    nextstep*)
843e07dc26bSmrg			;;
844636c353eSmrg		    ns2*)
845636c353eSmrg		      basic_os=nextstep2
846e07dc26bSmrg			;;
847e07dc26bSmrg		    *)
848636c353eSmrg		      basic_os=nextstep3
849e07dc26bSmrg			;;
850e07dc26bSmrg		esac
851e07dc26bSmrg		;;
852e07dc26bSmrg	np1)
853636c353eSmrg		cpu=np1
854636c353eSmrg		vendor=gould
855e07dc26bSmrg		;;
856e07dc26bSmrg	op50n-* | op60c-*)
857636c353eSmrg		cpu=hppa1.1
858636c353eSmrg		vendor=oki
859636c353eSmrg		basic_os=proelf
860e07dc26bSmrg		;;
861e07dc26bSmrg	pa-hitachi)
862636c353eSmrg		cpu=hppa1.1
863636c353eSmrg		vendor=hitachi
864636c353eSmrg		basic_os=hiuxwe2
865e07dc26bSmrg		;;
866e07dc26bSmrg	pbd)
867636c353eSmrg		cpu=sparc
868636c353eSmrg		vendor=tti
869e07dc26bSmrg		;;
870e07dc26bSmrg	pbb)
871636c353eSmrg		cpu=m68k
872636c353eSmrg		vendor=tti
873e07dc26bSmrg		;;
874636c353eSmrg	pc532)
875636c353eSmrg		cpu=ns32k
876636c353eSmrg		vendor=pc532
877e07dc26bSmrg		;;
878e07dc26bSmrg	pn)
879636c353eSmrg		cpu=pn
880636c353eSmrg		vendor=gould
881e07dc26bSmrg		;;
882636c353eSmrg	power)
883636c353eSmrg		cpu=power
884636c353eSmrg		vendor=ibm
885e07dc26bSmrg		;;
886e07dc26bSmrg	ps2)
887636c353eSmrg		cpu=i386
888636c353eSmrg		vendor=ibm
889e07dc26bSmrg		;;
890e07dc26bSmrg	rm[46]00)
891636c353eSmrg		cpu=mips
892636c353eSmrg		vendor=siemens
893e07dc26bSmrg		;;
894e07dc26bSmrg	rtpc | rtpc-*)
895636c353eSmrg		cpu=romp
896636c353eSmrg		vendor=ibm
897e07dc26bSmrg		;;
898636c353eSmrg	sde)
899636c353eSmrg		cpu=mipsisa32
900636c353eSmrg		vendor=sde
901636c353eSmrg		basic_os=${basic_os:-elf}
902e07dc26bSmrg		;;
903636c353eSmrg	simso-wrs)
904636c353eSmrg		cpu=sparclite
905636c353eSmrg		vendor=wrs
906636c353eSmrg		basic_os=vxworks
907e07dc26bSmrg		;;
908636c353eSmrg	tower | tower-32)
909636c353eSmrg		cpu=m68k
910636c353eSmrg		vendor=ncr
911e07dc26bSmrg		;;
912636c353eSmrg	vpp*|vx|vx-*)
913636c353eSmrg		cpu=f301
914636c353eSmrg		vendor=fujitsu
915e07dc26bSmrg		;;
916636c353eSmrg	w65)
917636c353eSmrg		cpu=w65
918636c353eSmrg		vendor=wdc
919e07dc26bSmrg		;;
920636c353eSmrg	w89k-*)
921636c353eSmrg		cpu=hppa1.1
922636c353eSmrg		vendor=winbond
923636c353eSmrg		basic_os=proelf
924e07dc26bSmrg		;;
925636c353eSmrg	none)
926636c353eSmrg		cpu=none
927636c353eSmrg		vendor=none
928e07dc26bSmrg		;;
929636c353eSmrg	leon|leon[3-9])
930636c353eSmrg		cpu=sparc
931636c353eSmrg		vendor=$basic_machine
932e07dc26bSmrg		;;
933636c353eSmrg	leon-*|leon[3-9]-*)
934636c353eSmrg		cpu=sparc
935636c353eSmrg		vendor=`echo "$basic_machine" | sed 's/-.*//'`
936e07dc26bSmrg		;;
937636c353eSmrg
938636c353eSmrg	*-*)
939636c353eSmrg		# shellcheck disable=SC2162
940636c353eSmrg		saved_IFS=$IFS
941636c353eSmrg		IFS="-" read cpu vendor <<EOF
942636c353eSmrg$basic_machine
943636c353eSmrgEOF
944636c353eSmrg		IFS=$saved_IFS
945e07dc26bSmrg		;;
946636c353eSmrg	# We use `pc' rather than `unknown'
947636c353eSmrg	# because (1) that's what they normally are, and
948636c353eSmrg	# (2) the word "unknown" tends to confuse beginning users.
949636c353eSmrg	i*86 | x86_64)
950636c353eSmrg		cpu=$basic_machine
951636c353eSmrg		vendor=pc
952e07dc26bSmrg		;;
953636c353eSmrg	# These rules are duplicated from below for sake of the special case above;
954636c353eSmrg	# i.e. things that normalized to x86 arches should also default to "pc"
955636c353eSmrg	pc98)
956636c353eSmrg		cpu=i386
957636c353eSmrg		vendor=pc
958e07dc26bSmrg		;;
959636c353eSmrg	x64 | amd64)
960636c353eSmrg		cpu=x86_64
961636c353eSmrg		vendor=pc
962e07dc26bSmrg		;;
963636c353eSmrg	# Recognize the basic CPU types without company name.
964636c353eSmrg	*)
965636c353eSmrg		cpu=$basic_machine
966636c353eSmrg		vendor=unknown
967e07dc26bSmrg		;;
968636c353eSmrgesac
969636c353eSmrg
970636c353eSmrgunset -v basic_machine
971636c353eSmrg
972636c353eSmrg# Decode basic machines in the full and proper CPU-Company form.
973636c353eSmrgcase $cpu-$vendor in
974636c353eSmrg	# Here we handle the default manufacturer of certain CPU types in canonical form. It is in
975636c353eSmrg	# some cases the only manufacturer, in others, it is the most popular.
976636c353eSmrg	craynv-unknown)
977636c353eSmrg		vendor=cray
978636c353eSmrg		basic_os=${basic_os:-unicosmp}
979e07dc26bSmrg		;;
980636c353eSmrg	c90-unknown | c90-cray)
981636c353eSmrg		vendor=cray
982636c353eSmrg		basic_os=${Basic_os:-unicos}
983e07dc26bSmrg		;;
984636c353eSmrg	fx80-unknown)
985636c353eSmrg		vendor=alliant
986e07dc26bSmrg		;;
987636c353eSmrg	romp-unknown)
988636c353eSmrg		vendor=ibm
989e07dc26bSmrg		;;
990636c353eSmrg	mmix-unknown)
991636c353eSmrg		vendor=knuth
992e07dc26bSmrg		;;
993636c353eSmrg	microblaze-unknown | microblazeel-unknown)
994636c353eSmrg		vendor=xilinx
995e07dc26bSmrg		;;
996636c353eSmrg	rs6000-unknown)
997636c353eSmrg		vendor=ibm
998e07dc26bSmrg		;;
999636c353eSmrg	vax-unknown)
1000636c353eSmrg		vendor=dec
1001e07dc26bSmrg		;;
1002636c353eSmrg	pdp11-unknown)
1003636c353eSmrg		vendor=dec
1004e07dc26bSmrg		;;
1005636c353eSmrg	we32k-unknown)
1006636c353eSmrg		vendor=att
1007e07dc26bSmrg		;;
1008636c353eSmrg	cydra-unknown)
1009636c353eSmrg		vendor=cydrome
1010e07dc26bSmrg		;;
1011636c353eSmrg	i370-ibm*)
1012636c353eSmrg		vendor=ibm
1013e07dc26bSmrg		;;
1014636c353eSmrg	orion-unknown)
1015636c353eSmrg		vendor=highlevel
1016e07dc26bSmrg		;;
1017636c353eSmrg	xps-unknown | xps100-unknown)
1018636c353eSmrg		cpu=xps100
1019636c353eSmrg		vendor=honeywell
1020e07dc26bSmrg		;;
1021636c353eSmrg
1022636c353eSmrg	# Here we normalize CPU types with a missing or matching vendor
1023636c353eSmrg	armh-unknown | armh-alt)
1024636c353eSmrg		cpu=armv7l
1025636c353eSmrg		vendor=alt
1026636c353eSmrg		basic_os=${basic_os:-linux-gnueabihf}
1027e07dc26bSmrg		;;
1028636c353eSmrg	dpx20-unknown | dpx20-bull)
1029636c353eSmrg		cpu=rs6000
1030636c353eSmrg		vendor=bull
1031636c353eSmrg		basic_os=${basic_os:-bosx}
1032e07dc26bSmrg		;;
1033636c353eSmrg
1034636c353eSmrg	# Here we normalize CPU types irrespective of the vendor
1035636c353eSmrg	amd64-*)
1036636c353eSmrg		cpu=x86_64
1037e07dc26bSmrg		;;
1038636c353eSmrg	blackfin-*)
1039636c353eSmrg		cpu=bfin
1040636c353eSmrg		basic_os=linux
1041e07dc26bSmrg		;;
1042636c353eSmrg	c54x-*)
1043636c353eSmrg		cpu=tic54x
1044e07dc26bSmrg		;;
1045636c353eSmrg	c55x-*)
1046636c353eSmrg		cpu=tic55x
1047e07dc26bSmrg		;;
1048636c353eSmrg	c6x-*)
1049636c353eSmrg		cpu=tic6x
1050e07dc26bSmrg		;;
1051636c353eSmrg	e500v[12]-*)
1052636c353eSmrg		cpu=powerpc
1053636c353eSmrg		basic_os=${basic_os}"spe"
1054e07dc26bSmrg		;;
1055636c353eSmrg	mips3*-*)
1056636c353eSmrg		cpu=mips64
1057e07dc26bSmrg		;;
1058636c353eSmrg	ms1-*)
1059636c353eSmrg		cpu=mt
1060e07dc26bSmrg		;;
1061636c353eSmrg	m68knommu-*)
1062636c353eSmrg		cpu=m68k
1063636c353eSmrg		basic_os=linux
1064e07dc26bSmrg		;;
1065636c353eSmrg	m9s12z-* | m68hcs12z-* | hcs12z-* | s12z-*)
1066636c353eSmrg		cpu=s12z
1067e07dc26bSmrg		;;
1068636c353eSmrg	openrisc-*)
1069636c353eSmrg		cpu=or32
1070e07dc26bSmrg		;;
1071636c353eSmrg	parisc-*)
1072636c353eSmrg		cpu=hppa
1073636c353eSmrg		basic_os=linux
1074e07dc26bSmrg		;;
1075636c353eSmrg	pentium-* | p5-* | k5-* | k6-* | nexgen-* | viac3-*)
1076636c353eSmrg		cpu=i586
1077e07dc26bSmrg		;;
1078636c353eSmrg	pentiumpro-* | p6-* | 6x86-* | athlon-* | athlon_*-*)
1079636c353eSmrg		cpu=i686
1080e07dc26bSmrg		;;
1081636c353eSmrg	pentiumii-* | pentium2-* | pentiumiii-* | pentium3-*)
1082636c353eSmrg		cpu=i686
1083e07dc26bSmrg		;;
1084636c353eSmrg	pentium4-*)
1085636c353eSmrg		cpu=i786
1086e07dc26bSmrg		;;
1087636c353eSmrg	pc98-*)
1088636c353eSmrg		cpu=i386
1089e07dc26bSmrg		;;
1090636c353eSmrg	ppc-* | ppcbe-*)
1091636c353eSmrg		cpu=powerpc
1092e07dc26bSmrg		;;
1093636c353eSmrg	ppcle-* | powerpclittle-*)
1094636c353eSmrg		cpu=powerpcle
1095e07dc26bSmrg		;;
1096636c353eSmrg	ppc64-*)
1097636c353eSmrg		cpu=powerpc64
1098e07dc26bSmrg		;;
1099636c353eSmrg	ppc64le-* | powerpc64little-*)
1100636c353eSmrg		cpu=powerpc64le
1101e07dc26bSmrg		;;
1102636c353eSmrg	sb1-*)
1103636c353eSmrg		cpu=mipsisa64sb1
1104e07dc26bSmrg		;;
1105636c353eSmrg	sb1el-*)
1106636c353eSmrg		cpu=mipsisa64sb1el
1107e07dc26bSmrg		;;
1108636c353eSmrg	sh5e[lb]-*)
1109636c353eSmrg		cpu=`echo "$cpu" | sed 's/^\(sh.\)e\(.\)$/\1\2e/'`
1110e07dc26bSmrg		;;
1111636c353eSmrg	spur-*)
1112636c353eSmrg		cpu=spur
1113e07dc26bSmrg		;;
1114636c353eSmrg	strongarm-* | thumb-*)
1115636c353eSmrg		cpu=arm
1116e07dc26bSmrg		;;
1117636c353eSmrg	tx39-*)
1118636c353eSmrg		cpu=mipstx39
1119e07dc26bSmrg		;;
1120636c353eSmrg	tx39el-*)
1121636c353eSmrg		cpu=mipstx39el
1122e07dc26bSmrg		;;
1123636c353eSmrg	x64-*)
1124636c353eSmrg		cpu=x86_64
1125e07dc26bSmrg		;;
1126636c353eSmrg	xscale-* | xscalee[bl]-*)
1127636c353eSmrg		cpu=`echo "$cpu" | sed 's/^xscale/arm/'`
1128e07dc26bSmrg		;;
1129636c353eSmrg	arm64-* | aarch64le-*)
1130636c353eSmrg		cpu=aarch64
1131e07dc26bSmrg		;;
1132636c353eSmrg
1133636c353eSmrg	# Recognize the canonical CPU Types that limit and/or modify the
1134636c353eSmrg	# company names they are paired with.
1135636c353eSmrg	cr16-*)
1136636c353eSmrg		basic_os=${basic_os:-elf}
1137e07dc26bSmrg		;;
1138636c353eSmrg	crisv32-* | etraxfs*-*)
1139636c353eSmrg		cpu=crisv32
1140636c353eSmrg		vendor=axis
1141e07dc26bSmrg		;;
1142636c353eSmrg	cris-* | etrax*-*)
1143636c353eSmrg		cpu=cris
1144636c353eSmrg		vendor=axis
1145e07dc26bSmrg		;;
1146636c353eSmrg	crx-*)
1147636c353eSmrg		basic_os=${basic_os:-elf}
1148e07dc26bSmrg		;;
1149636c353eSmrg	neo-tandem)
1150636c353eSmrg		cpu=neo
1151636c353eSmrg		vendor=tandem
1152e07dc26bSmrg		;;
1153636c353eSmrg	nse-tandem)
1154636c353eSmrg		cpu=nse
1155636c353eSmrg		vendor=tandem
1156e07dc26bSmrg		;;
1157636c353eSmrg	nsr-tandem)
1158636c353eSmrg		cpu=nsr
1159636c353eSmrg		vendor=tandem
1160e07dc26bSmrg		;;
1161636c353eSmrg	nsv-tandem)
1162636c353eSmrg		cpu=nsv
1163636c353eSmrg		vendor=tandem
1164e07dc26bSmrg		;;
1165636c353eSmrg	nsx-tandem)
1166636c353eSmrg		cpu=nsx
1167636c353eSmrg		vendor=tandem
1168e07dc26bSmrg		;;
1169636c353eSmrg	mipsallegrexel-sony)
1170636c353eSmrg		cpu=mipsallegrexel
1171636c353eSmrg		vendor=sony
1172e07dc26bSmrg		;;
1173636c353eSmrg	tile*-*)
1174636c353eSmrg		basic_os=${basic_os:-linux-gnu}
1175e07dc26bSmrg		;;
1176636c353eSmrg
1177e07dc26bSmrg	*)
1178636c353eSmrg		# Recognize the canonical CPU types that are allowed with any
1179636c353eSmrg		# company name.
1180636c353eSmrg		case $cpu in
1181636c353eSmrg			1750a | 580 \
1182636c353eSmrg			| a29k \
1183636c353eSmrg			| aarch64 | aarch64_be \
1184636c353eSmrg			| abacus \
1185636c353eSmrg			| alpha | alphaev[4-8] | alphaev56 | alphaev6[78] \
1186636c353eSmrg			| alpha64 | alpha64ev[4-8] | alpha64ev56 | alpha64ev6[78] \
1187636c353eSmrg			| alphapca5[67] | alpha64pca5[67] \
1188636c353eSmrg			| am33_2.0 \
1189636c353eSmrg			| amdgcn \
1190636c353eSmrg			| arc | arceb | arc32 | arc64 \
1191636c353eSmrg			| arm | arm[lb]e | arme[lb] | armv* \
1192636c353eSmrg			| avr | avr32 \
1193636c353eSmrg			| asmjs \
1194636c353eSmrg			| ba \
1195636c353eSmrg			| be32 | be64 \
1196636c353eSmrg			| bfin | bpf | bs2000 \
1197636c353eSmrg			| c[123]* | c30 | [cjt]90 | c4x \
1198636c353eSmrg			| c8051 | clipper | craynv | csky | cydra \
1199636c353eSmrg			| d10v | d30v | dlx | dsp16xx \
1200636c353eSmrg			| e2k | elxsi | epiphany \
1201636c353eSmrg			| f30[01] | f700 | fido | fr30 | frv | ft32 | fx80 \
1202636c353eSmrg			| h8300 | h8500 \
1203636c353eSmrg			| hppa | hppa1.[01] | hppa2.0 | hppa2.0[nw] | hppa64 \
1204636c353eSmrg			| hexagon \
1205636c353eSmrg			| i370 | i*86 | i860 | i960 | ia16 | ia64 \
1206636c353eSmrg			| ip2k | iq2000 \
1207636c353eSmrg			| k1om \
1208636c353eSmrg			| le32 | le64 \
1209636c353eSmrg			| lm32 \
1210636c353eSmrg			| loongarch32 | loongarch64 \
1211636c353eSmrg			| m32c | m32r | m32rle \
1212636c353eSmrg			| m5200 | m68000 | m680[012346]0 | m68360 | m683?2 | m68k \
1213636c353eSmrg			| m6811 | m68hc11 | m6812 | m68hc12 | m68hcs12x \
1214636c353eSmrg			| m88110 | m88k | maxq | mb | mcore | mep | metag \
1215636c353eSmrg			| microblaze | microblazeel \
1216636c353eSmrg			| mips | mipsbe | mipseb | mipsel | mipsle \
1217636c353eSmrg			| mips16 \
1218636c353eSmrg			| mips64 | mips64eb | mips64el \
1219636c353eSmrg			| mips64octeon | mips64octeonel \
1220636c353eSmrg			| mips64orion | mips64orionel \
1221636c353eSmrg			| mips64r5900 | mips64r5900el \
1222636c353eSmrg			| mips64vr | mips64vrel \
1223636c353eSmrg			| mips64vr4100 | mips64vr4100el \
1224636c353eSmrg			| mips64vr4300 | mips64vr4300el \
1225636c353eSmrg			| mips64vr5000 | mips64vr5000el \
1226636c353eSmrg			| mips64vr5900 | mips64vr5900el \
1227636c353eSmrg			| mipsisa32 | mipsisa32el \
1228636c353eSmrg			| mipsisa32r2 | mipsisa32r2el \
1229636c353eSmrg			| mipsisa32r3 | mipsisa32r3el \
1230636c353eSmrg			| mipsisa32r5 | mipsisa32r5el \
1231636c353eSmrg			| mipsisa32r6 | mipsisa32r6el \
1232636c353eSmrg			| mipsisa64 | mipsisa64el \
1233636c353eSmrg			| mipsisa64r2 | mipsisa64r2el \
1234636c353eSmrg			| mipsisa64r3 | mipsisa64r3el \
1235636c353eSmrg			| mipsisa64r5 | mipsisa64r5el \
1236636c353eSmrg			| mipsisa64r6 | mipsisa64r6el \
1237636c353eSmrg			| mipsisa64sb1 | mipsisa64sb1el \
1238636c353eSmrg			| mipsisa64sr71k | mipsisa64sr71kel \
1239636c353eSmrg			| mipsr5900 | mipsr5900el \
1240636c353eSmrg			| mipstx39 | mipstx39el \
1241636c353eSmrg			| mmix \
1242636c353eSmrg			| mn10200 | mn10300 \
1243636c353eSmrg			| moxie \
1244636c353eSmrg			| mt \
1245636c353eSmrg			| msp430 \
1246636c353eSmrg			| nds32 | nds32le | nds32be \
1247636c353eSmrg			| nfp \
1248636c353eSmrg			| nios | nios2 | nios2eb | nios2el \
1249636c353eSmrg			| none | np1 | ns16k | ns32k | nvptx \
1250636c353eSmrg			| open8 \
1251636c353eSmrg			| or1k* \
1252636c353eSmrg			| or32 \
1253636c353eSmrg			| orion \
1254636c353eSmrg			| picochip \
1255636c353eSmrg			| pdp10 | pdp11 | pj | pjl | pn | power \
1256636c353eSmrg			| powerpc | powerpc64 | powerpc64le | powerpcle | powerpcspe \
1257636c353eSmrg			| pru \
1258636c353eSmrg			| pyramid \
1259636c353eSmrg			| riscv | riscv32 | riscv32be | riscv64 | riscv64be \
1260636c353eSmrg			| rl78 | romp | rs6000 | rx \
1261636c353eSmrg			| s390 | s390x \
1262636c353eSmrg			| score \
1263636c353eSmrg			| sh | shl \
1264636c353eSmrg			| sh[1234] | sh[24]a | sh[24]ae[lb] | sh[23]e | she[lb] | sh[lb]e \
1265636c353eSmrg			| sh[1234]e[lb] |  sh[12345][lb]e | sh[23]ele | sh64 | sh64le \
1266636c353eSmrg			| sparc | sparc64 | sparc64b | sparc64v | sparc86x | sparclet \
1267636c353eSmrg			| sparclite \
1268636c353eSmrg			| sparcv8 | sparcv9 | sparcv9b | sparcv9v | sv1 | sx* \
1269636c353eSmrg			| spu \
1270636c353eSmrg			| tahoe \
1271636c353eSmrg			| thumbv7* \
1272636c353eSmrg			| tic30 | tic4x | tic54x | tic55x | tic6x | tic80 \
1273636c353eSmrg			| tron \
1274636c353eSmrg			| ubicom32 \
1275636c353eSmrg			| v70 | v850 | v850e | v850e1 | v850es | v850e2 | v850e2v3 \
1276636c353eSmrg			| vax \
1277636c353eSmrg			| visium \
1278636c353eSmrg			| w65 \
1279636c353eSmrg			| wasm32 | wasm64 \
1280636c353eSmrg			| we32k \
1281636c353eSmrg			| x86 | x86_64 | xc16x | xgate | xps100 \
1282636c353eSmrg			| xstormy16 | xtensa* \
1283636c353eSmrg			| ymp \
1284636c353eSmrg			| z8k | z80)
1285636c353eSmrg				;;
1286636c353eSmrg
1287636c353eSmrg			*)
1288636c353eSmrg				echo Invalid configuration \`"$1"\': machine \`"$cpu-$vendor"\' not recognized 1>&2
1289636c353eSmrg				exit 1
1290636c353eSmrg				;;
1291636c353eSmrg		esac
1292e07dc26bSmrg		;;
1293e07dc26bSmrgesac
1294e07dc26bSmrg
1295e07dc26bSmrg# Here we canonicalize certain aliases for manufacturers.
1296636c353eSmrgcase $vendor in
1297636c353eSmrg	digital*)
1298636c353eSmrg		vendor=dec
1299e07dc26bSmrg		;;
1300636c353eSmrg	commodore*)
1301636c353eSmrg		vendor=cbm
1302e07dc26bSmrg		;;
1303e07dc26bSmrg	*)
1304e07dc26bSmrg		;;
1305e07dc26bSmrgesac
1306e07dc26bSmrg
1307e07dc26bSmrg# Decode manufacturer-specific aliases for certain operating systems.
1308e07dc26bSmrg
1309636c353eSmrgif test x$basic_os != x
1310e07dc26bSmrgthen
1311636c353eSmrg
1312636c353eSmrg# First recognize some ad-hoc cases, or perhaps split kernel-os, or else just
1313636c353eSmrg# set os.
1314636c353eSmrgcase $basic_os in
1315636c353eSmrg	gnu/linux*)
1316636c353eSmrg		kernel=linux
1317636c353eSmrg		os=`echo "$basic_os" | sed -e 's|gnu/linux|gnu|'`
1318636c353eSmrg		;;
1319636c353eSmrg	os2-emx)
1320636c353eSmrg		kernel=os2
1321636c353eSmrg		os=`echo "$basic_os" | sed -e 's|os2-emx|emx|'`
1322636c353eSmrg		;;
1323636c353eSmrg	nto-qnx*)
1324636c353eSmrg		kernel=nto
1325636c353eSmrg		os=`echo "$basic_os" | sed -e 's|nto-qnx|qnx|'`
1326636c353eSmrg		;;
1327636c353eSmrg	*-*)
1328636c353eSmrg		# shellcheck disable=SC2162
1329636c353eSmrg		saved_IFS=$IFS
1330636c353eSmrg		IFS="-" read kernel os <<EOF
1331636c353eSmrg$basic_os
1332636c353eSmrgEOF
1333636c353eSmrg		IFS=$saved_IFS
1334636c353eSmrg		;;
1335636c353eSmrg	# Default OS when just kernel was specified
1336636c353eSmrg	nto*)
1337636c353eSmrg		kernel=nto
1338636c353eSmrg		os=`echo "$basic_os" | sed -e 's|nto|qnx|'`
1339636c353eSmrg		;;
1340636c353eSmrg	linux*)
1341636c353eSmrg		kernel=linux
1342636c353eSmrg		os=`echo "$basic_os" | sed -e 's|linux|gnu|'`
1343636c353eSmrg		;;
1344636c353eSmrg	managarm*)
1345636c353eSmrg		kernel=managarm
1346636c353eSmrg		os=`echo "$basic_os" | sed -e 's|managarm|mlibc|'`
1347e07dc26bSmrg		;;
1348636c353eSmrg	*)
1349636c353eSmrg		kernel=
1350636c353eSmrg		os=$basic_os
1351e07dc26bSmrg		;;
1352636c353eSmrgesac
1353636c353eSmrg
1354636c353eSmrg# Now, normalize the OS (knowing we just have one component, it's not a kernel,
1355636c353eSmrg# etc.)
1356636c353eSmrgcase $os in
1357636c353eSmrg	# First match some system type aliases that might get confused
1358636c353eSmrg	# with valid system types.
1359636c353eSmrg	# solaris* is a basic system type, with this one exception.
1360636c353eSmrg	auroraux)
1361636c353eSmrg		os=auroraux
1362e07dc26bSmrg		;;
1363636c353eSmrg	bluegene*)
1364636c353eSmrg		os=cnk
1365e07dc26bSmrg		;;
1366636c353eSmrg	solaris1 | solaris1.*)
1367636c353eSmrg		os=`echo "$os" | sed -e 's|solaris1|sunos4|'`
1368e07dc26bSmrg		;;
1369636c353eSmrg	solaris)
1370636c353eSmrg		os=solaris2
1371e07dc26bSmrg		;;
1372636c353eSmrg	unixware*)
1373636c353eSmrg		os=sysv4.2uw
1374e07dc26bSmrg		;;
1375636c353eSmrg	# es1800 is here to avoid being matched by es* (a different OS)
1376636c353eSmrg	es1800*)
1377636c353eSmrg		os=ose
1378e07dc26bSmrg		;;
1379636c353eSmrg	# Some version numbers need modification
1380636c353eSmrg	chorusos*)
1381636c353eSmrg		os=chorusos
1382e07dc26bSmrg		;;
1383636c353eSmrg	isc)
1384636c353eSmrg		os=isc2.2
1385e07dc26bSmrg		;;
1386636c353eSmrg	sco6)
1387636c353eSmrg		os=sco5v6
1388e07dc26bSmrg		;;
1389636c353eSmrg	sco5)
1390636c353eSmrg		os=sco3.2v5
1391e07dc26bSmrg		;;
1392636c353eSmrg	sco4)
1393636c353eSmrg		os=sco3.2v4
1394e07dc26bSmrg		;;
1395636c353eSmrg	sco3.2.[4-9]*)
1396636c353eSmrg		os=`echo "$os" | sed -e 's/sco3.2./sco3.2v/'`
1397e07dc26bSmrg		;;
1398636c353eSmrg	sco*v* | scout)
1399636c353eSmrg		# Don't match below
1400e07dc26bSmrg		;;
1401636c353eSmrg	sco*)
1402636c353eSmrg		os=sco3.2v2
1403e07dc26bSmrg		;;
1404636c353eSmrg	psos*)
1405636c353eSmrg		os=psos
1406e07dc26bSmrg		;;
1407636c353eSmrg	qnx*)
1408636c353eSmrg		os=qnx
1409e07dc26bSmrg		;;
1410636c353eSmrg	hiux*)
1411636c353eSmrg		os=hiuxwe2
1412e07dc26bSmrg		;;
1413636c353eSmrg	lynx*178)
1414636c353eSmrg		os=lynxos178
1415e07dc26bSmrg		;;
1416636c353eSmrg	lynx*5)
1417636c353eSmrg		os=lynxos5
1418e07dc26bSmrg		;;
1419636c353eSmrg	lynxos*)
1420636c353eSmrg		# don't get caught up in next wildcard
1421e07dc26bSmrg		;;
1422636c353eSmrg	lynx*)
1423636c353eSmrg		os=lynxos
1424e07dc26bSmrg		;;
1425636c353eSmrg	mac[0-9]*)
1426636c353eSmrg		os=`echo "$os" | sed -e 's|mac|macos|'`
1427e07dc26bSmrg		;;
1428636c353eSmrg	opened*)
1429636c353eSmrg		os=openedition
1430e07dc26bSmrg		;;
1431636c353eSmrg	os400*)
1432636c353eSmrg		os=os400
1433e07dc26bSmrg		;;
1434636c353eSmrg	sunos5*)
1435636c353eSmrg		os=`echo "$os" | sed -e 's|sunos5|solaris2|'`
1436e07dc26bSmrg		;;
1437636c353eSmrg	sunos6*)
1438636c353eSmrg		os=`echo "$os" | sed -e 's|sunos6|solaris3|'`
1439e07dc26bSmrg		;;
1440636c353eSmrg	wince*)
1441636c353eSmrg		os=wince
1442e07dc26bSmrg		;;
1443636c353eSmrg	utek*)
1444636c353eSmrg		os=bsd
1445e07dc26bSmrg		;;
1446636c353eSmrg	dynix*)
1447636c353eSmrg		os=bsd
1448636c353eSmrg		;;
1449636c353eSmrg	acis*)
1450636c353eSmrg		os=aos
1451e07dc26bSmrg		;;
1452636c353eSmrg	atheos*)
1453636c353eSmrg		os=atheos
1454e07dc26bSmrg		;;
1455636c353eSmrg	syllable*)
1456636c353eSmrg		os=syllable
1457e07dc26bSmrg		;;
1458636c353eSmrg	386bsd)
1459636c353eSmrg		os=bsd
1460e07dc26bSmrg		;;
1461636c353eSmrg	ctix* | uts*)
1462636c353eSmrg		os=sysv
1463e07dc26bSmrg		;;
1464636c353eSmrg	nova*)
1465636c353eSmrg		os=rtmk-nova
1466e07dc26bSmrg		;;
1467636c353eSmrg	ns2)
1468636c353eSmrg		os=nextstep2
1469e07dc26bSmrg		;;
1470636c353eSmrg	# Preserve the version number of sinix5.
1471636c353eSmrg	sinix5.*)
1472636c353eSmrg		os=`echo "$os" | sed -e 's|sinix|sysv|'`
1473e07dc26bSmrg		;;
1474636c353eSmrg	sinix*)
1475636c353eSmrg		os=sysv4
1476e07dc26bSmrg		;;
1477636c353eSmrg	tpf*)
1478636c353eSmrg		os=tpf
1479e07dc26bSmrg		;;
1480636c353eSmrg	triton*)
1481636c353eSmrg		os=sysv3
1482e07dc26bSmrg		;;
1483636c353eSmrg	oss*)
1484636c353eSmrg		os=sysv3
1485e07dc26bSmrg		;;
1486636c353eSmrg	svr4*)
1487636c353eSmrg		os=sysv4
1488e07dc26bSmrg		;;
1489636c353eSmrg	svr3)
1490636c353eSmrg		os=sysv3
1491e07dc26bSmrg		;;
1492636c353eSmrg	sysvr4)
1493636c353eSmrg		os=sysv4
1494e07dc26bSmrg		;;
1495636c353eSmrg	ose*)
1496636c353eSmrg		os=ose
1497e07dc26bSmrg		;;
1498636c353eSmrg	*mint | mint[0-9]* | *MiNT | MiNT[0-9]*)
1499636c353eSmrg		os=mint
1500e07dc26bSmrg		;;
1501636c353eSmrg	dicos*)
1502636c353eSmrg		os=dicos
1503e07dc26bSmrg		;;
1504636c353eSmrg	pikeos*)
1505636c353eSmrg		# Until real need of OS specific support for
1506636c353eSmrg		# particular features comes up, bare metal
1507636c353eSmrg		# configurations are quite functional.
1508636c353eSmrg		case $cpu in
1509636c353eSmrg		    arm*)
1510636c353eSmrg			os=eabi
1511636c353eSmrg			;;
1512636c353eSmrg		    *)
1513636c353eSmrg			os=elf
1514636c353eSmrg			;;
1515636c353eSmrg		esac
1516e07dc26bSmrg		;;
1517e07dc26bSmrg	*)
1518636c353eSmrg		# No normalization, but not necessarily accepted, that comes below.
1519e07dc26bSmrg		;;
1520e07dc26bSmrgesac
1521636c353eSmrg
1522e07dc26bSmrgelse
1523e07dc26bSmrg
1524e07dc26bSmrg# Here we handle the default operating systems that come with various machines.
1525e07dc26bSmrg# The value should be what the vendor currently ships out the door with their
1526e07dc26bSmrg# machine or put another way, the most popular os provided with the machine.
1527e07dc26bSmrg
1528e07dc26bSmrg# Note that if you're going to try to match "-MANUFACTURER" here (say,
1529e07dc26bSmrg# "-sun"), then you have to tell the case statement up towards the top
1530e07dc26bSmrg# that MANUFACTURER isn't an operating system.  Otherwise, code above
1531e07dc26bSmrg# will signal an error saying that MANUFACTURER isn't an operating
1532e07dc26bSmrg# system, and we'll never get to this point.
1533e07dc26bSmrg
1534636c353eSmrgkernel=
1535636c353eSmrgcase $cpu-$vendor in
1536e07dc26bSmrg	score-*)
1537636c353eSmrg		os=elf
1538e07dc26bSmrg		;;
1539e07dc26bSmrg	spu-*)
1540636c353eSmrg		os=elf
1541e07dc26bSmrg		;;
1542e07dc26bSmrg	*-acorn)
1543636c353eSmrg		os=riscix1.2
1544e07dc26bSmrg		;;
1545e07dc26bSmrg	arm*-rebel)
1546636c353eSmrg		kernel=linux
1547636c353eSmrg		os=gnu
1548e07dc26bSmrg		;;
1549e07dc26bSmrg	arm*-semi)
1550636c353eSmrg		os=aout
1551e07dc26bSmrg		;;
1552e07dc26bSmrg	c4x-* | tic4x-*)
1553636c353eSmrg		os=coff
1554e07dc26bSmrg		;;
1555e07dc26bSmrg	c8051-*)
1556636c353eSmrg		os=elf
1557636c353eSmrg		;;
1558636c353eSmrg	clipper-intergraph)
1559636c353eSmrg		os=clix
1560e07dc26bSmrg		;;
1561e07dc26bSmrg	hexagon-*)
1562636c353eSmrg		os=elf
1563e07dc26bSmrg		;;
1564e07dc26bSmrg	tic54x-*)
1565636c353eSmrg		os=coff
1566e07dc26bSmrg		;;
1567e07dc26bSmrg	tic55x-*)
1568636c353eSmrg		os=coff
1569e07dc26bSmrg		;;
1570e07dc26bSmrg	tic6x-*)
1571636c353eSmrg		os=coff
1572e07dc26bSmrg		;;
1573e07dc26bSmrg	# This must come before the *-dec entry.
1574e07dc26bSmrg	pdp10-*)
1575636c353eSmrg		os=tops20
1576e07dc26bSmrg		;;
1577e07dc26bSmrg	pdp11-*)
1578636c353eSmrg		os=none
1579e07dc26bSmrg		;;
1580e07dc26bSmrg	*-dec | vax-*)
1581636c353eSmrg		os=ultrix4.2
1582e07dc26bSmrg		;;
1583e07dc26bSmrg	m68*-apollo)
1584636c353eSmrg		os=domain
1585e07dc26bSmrg		;;
1586e07dc26bSmrg	i386-sun)
1587636c353eSmrg		os=sunos4.0.2
1588e07dc26bSmrg		;;
1589e07dc26bSmrg	m68000-sun)
1590636c353eSmrg		os=sunos3
1591e07dc26bSmrg		;;
1592e07dc26bSmrg	m68*-cisco)
1593636c353eSmrg		os=aout
1594e07dc26bSmrg		;;
1595e07dc26bSmrg	mep-*)
1596636c353eSmrg		os=elf
1597e07dc26bSmrg		;;
1598e07dc26bSmrg	mips*-cisco)
1599636c353eSmrg		os=elf
1600e07dc26bSmrg		;;
1601e07dc26bSmrg	mips*-*)
1602636c353eSmrg		os=elf
1603e07dc26bSmrg		;;
1604e07dc26bSmrg	or32-*)
1605636c353eSmrg		os=coff
1606e07dc26bSmrg		;;
1607e07dc26bSmrg	*-tti)	# must be before sparc entry or we get the wrong os.
1608636c353eSmrg		os=sysv3
1609e07dc26bSmrg		;;
1610e07dc26bSmrg	sparc-* | *-sun)
1611636c353eSmrg		os=sunos4.1.1
1612e07dc26bSmrg		;;
1613636c353eSmrg	pru-*)
1614636c353eSmrg		os=elf
1615e07dc26bSmrg		;;
1616636c353eSmrg	*-be)
1617636c353eSmrg		os=beos
1618e07dc26bSmrg		;;
1619e07dc26bSmrg	*-ibm)
1620636c353eSmrg		os=aix
1621e07dc26bSmrg		;;
1622e07dc26bSmrg	*-knuth)
1623636c353eSmrg		os=mmixware
1624e07dc26bSmrg		;;
1625e07dc26bSmrg	*-wec)
1626636c353eSmrg		os=proelf
1627e07dc26bSmrg		;;
1628e07dc26bSmrg	*-winbond)
1629636c353eSmrg		os=proelf
1630e07dc26bSmrg		;;
1631e07dc26bSmrg	*-oki)
1632636c353eSmrg		os=proelf
1633e07dc26bSmrg		;;
1634e07dc26bSmrg	*-hp)
1635636c353eSmrg		os=hpux
1636e07dc26bSmrg		;;
1637e07dc26bSmrg	*-hitachi)
1638636c353eSmrg		os=hiux
1639e07dc26bSmrg		;;
1640e07dc26bSmrg	i860-* | *-att | *-ncr | *-altos | *-motorola | *-convergent)
1641636c353eSmrg		os=sysv
1642e07dc26bSmrg		;;
1643e07dc26bSmrg	*-cbm)
1644636c353eSmrg		os=amigaos
1645e07dc26bSmrg		;;
1646e07dc26bSmrg	*-dg)
1647636c353eSmrg		os=dgux
1648e07dc26bSmrg		;;
1649e07dc26bSmrg	*-dolphin)
1650636c353eSmrg		os=sysv3
1651e07dc26bSmrg		;;
1652e07dc26bSmrg	m68k-ccur)
1653636c353eSmrg		os=rtu
1654e07dc26bSmrg		;;
1655e07dc26bSmrg	m88k-omron*)
1656636c353eSmrg		os=luna
1657e07dc26bSmrg		;;
1658636c353eSmrg	*-next)
1659636c353eSmrg		os=nextstep
1660e07dc26bSmrg		;;
1661e07dc26bSmrg	*-sequent)
1662636c353eSmrg		os=ptx
1663e07dc26bSmrg		;;
1664e07dc26bSmrg	*-crds)
1665636c353eSmrg		os=unos
1666e07dc26bSmrg		;;
1667e07dc26bSmrg	*-ns)
1668636c353eSmrg		os=genix
1669e07dc26bSmrg		;;
1670e07dc26bSmrg	i370-*)
1671636c353eSmrg		os=mvs
1672e07dc26bSmrg		;;
1673e07dc26bSmrg	*-gould)
1674636c353eSmrg		os=sysv
1675e07dc26bSmrg		;;
1676e07dc26bSmrg	*-highlevel)
1677636c353eSmrg		os=bsd
1678e07dc26bSmrg		;;
1679e07dc26bSmrg	*-encore)
1680636c353eSmrg		os=bsd
1681e07dc26bSmrg		;;
1682e07dc26bSmrg	*-sgi)
1683636c353eSmrg		os=irix
1684e07dc26bSmrg		;;
1685e07dc26bSmrg	*-siemens)
1686636c353eSmrg		os=sysv4
1687e07dc26bSmrg		;;
1688e07dc26bSmrg	*-masscomp)
1689636c353eSmrg		os=rtu
1690e07dc26bSmrg		;;
1691e07dc26bSmrg	f30[01]-fujitsu | f700-fujitsu)
1692636c353eSmrg		os=uxpv
1693e07dc26bSmrg		;;
1694e07dc26bSmrg	*-rom68k)
1695636c353eSmrg		os=coff
1696e07dc26bSmrg		;;
1697e07dc26bSmrg	*-*bug)
1698636c353eSmrg		os=coff
1699e07dc26bSmrg		;;
1700e07dc26bSmrg	*-apple)
1701636c353eSmrg		os=macos
1702e07dc26bSmrg		;;
1703e07dc26bSmrg	*-atari*)
1704636c353eSmrg		os=mint
1705636c353eSmrg		;;
1706636c353eSmrg	*-wrs)
1707636c353eSmrg		os=vxworks
1708e07dc26bSmrg		;;
1709e07dc26bSmrg	*)
1710636c353eSmrg		os=none
1711e07dc26bSmrg		;;
1712e07dc26bSmrgesac
1713636c353eSmrg
1714e07dc26bSmrgfi
1715e07dc26bSmrg
1716636c353eSmrg# Now, validate our (potentially fixed-up) OS.
1717636c353eSmrgcase $os in
1718636c353eSmrg	# Sometimes we do "kernel-libc", so those need to count as OSes.
1719636c353eSmrg	musl* | newlib* | relibc* | uclibc*)
1720636c353eSmrg		;;
1721636c353eSmrg	# Likewise for "kernel-abi"
1722636c353eSmrg	eabi* | gnueabi*)
1723636c353eSmrg		;;
1724636c353eSmrg	# VxWorks passes extra cpu info in the 4th filed.
1725636c353eSmrg	simlinux | simwindows | spe)
1726636c353eSmrg		;;
1727636c353eSmrg	# Now accept the basic system types.
1728636c353eSmrg	# The portable systems comes first.
1729636c353eSmrg	# Each alternative MUST end in a * to match a version number.
1730636c353eSmrg	gnu* | android* | bsd* | mach* | minix* | genix* | ultrix* | irix* \
1731636c353eSmrg	     | *vms* | esix* | aix* | cnk* | sunos | sunos[34]* \
1732636c353eSmrg	     | hpux* | unos* | osf* | luna* | dgux* | auroraux* | solaris* \
1733636c353eSmrg	     | sym* |  plan9* | psp* | sim* | xray* | os68k* | v88r* \
1734636c353eSmrg	     | hiux* | abug | nacl* | netware* | windows* \
1735636c353eSmrg	     | os9* | macos* | osx* | ios* \
1736636c353eSmrg	     | mpw* | magic* | mmixware* | mon960* | lnews* \
1737636c353eSmrg	     | amigaos* | amigados* | msdos* | newsos* | unicos* | aof* \
1738636c353eSmrg	     | aos* | aros* | cloudabi* | sortix* | twizzler* \
1739636c353eSmrg	     | nindy* | vxsim* | vxworks* | ebmon* | hms* | mvs* \
1740636c353eSmrg	     | clix* | riscos* | uniplus* | iris* | isc* | rtu* | xenix* \
1741636c353eSmrg	     | mirbsd* | netbsd* | dicos* | openedition* | ose* \
1742636c353eSmrg	     | bitrig* | openbsd* | secbsd* | solidbsd* | libertybsd* | os108* \
1743636c353eSmrg	     | ekkobsd* | freebsd* | riscix* | lynxos* | os400* \
1744636c353eSmrg	     | bosx* | nextstep* | cxux* | aout* | elf* | oabi* \
1745636c353eSmrg	     | ptx* | coff* | ecoff* | winnt* | domain* | vsta* \
1746636c353eSmrg	     | udi* | lites* | ieee* | go32* | aux* | hcos* \
1747636c353eSmrg	     | chorusrdb* | cegcc* | glidix* | serenity* \
1748636c353eSmrg	     | cygwin* | msys* | pe* | moss* | proelf* | rtems* \
1749636c353eSmrg	     | midipix* | mingw32* | mingw64* | mint* \
1750636c353eSmrg	     | uxpv* | beos* | mpeix* | udk* | moxiebox* \
1751636c353eSmrg	     | interix* | uwin* | mks* | rhapsody* | darwin* \
1752636c353eSmrg	     | openstep* | oskit* | conix* | pw32* | nonstopux* \
1753636c353eSmrg	     | storm-chaos* | tops10* | tenex* | tops20* | its* \
1754636c353eSmrg	     | os2* | vos* | palmos* | uclinux* | nucleus* | morphos* \
1755636c353eSmrg	     | scout* | superux* | sysv* | rtmk* | tpf* | windiss* \
1756636c353eSmrg	     | powermax* | dnix* | nx6 | nx7 | sei* | dragonfly* \
1757636c353eSmrg	     | skyos* | haiku* | rdos* | toppers* | drops* | es* \
1758636c353eSmrg	     | onefs* | tirtos* | phoenix* | fuchsia* | redox* | bme* \
1759636c353eSmrg	     | midnightbsd* | amdhsa* | unleashed* | emscripten* | wasi* \
1760636c353eSmrg	     | nsk* | powerunix* | genode* | zvmoe* | qnx* | emx* | zephyr* \
1761636c353eSmrg	     | fiwix* | mlibc* )
1762636c353eSmrg		;;
1763636c353eSmrg	# This one is extra strict with allowed versions
1764636c353eSmrg	sco3.2v2 | sco3.2v[4-9]* | sco5v6*)
1765636c353eSmrg		# Don't forget version if it is 3.2v4 or newer.
1766636c353eSmrg		;;
1767636c353eSmrg	none)
1768636c353eSmrg		;;
1769636c353eSmrg	kernel* )
1770636c353eSmrg		# Restricted further below
1771636c353eSmrg		;;
1772636c353eSmrg	*)
1773636c353eSmrg		echo Invalid configuration \`"$1"\': OS \`"$os"\' not recognized 1>&2
1774636c353eSmrg		exit 1
1775636c353eSmrg		;;
1776636c353eSmrgesac
1777636c353eSmrg
1778636c353eSmrg# As a final step for OS-related things, validate the OS-kernel combination
1779636c353eSmrg# (given a valid OS), if there is a kernel.
1780636c353eSmrgcase $kernel-$os in
1781636c353eSmrg	linux-gnu* | linux-dietlibc* | linux-android* | linux-newlib* \
1782636c353eSmrg		   | linux-musl* | linux-relibc* | linux-uclibc* | linux-mlibc* )
1783636c353eSmrg		;;
1784636c353eSmrg	uclinux-uclibc* )
1785636c353eSmrg		;;
1786636c353eSmrg	managarm-mlibc* | managarm-kernel* )
1787636c353eSmrg		;;
1788636c353eSmrg	-dietlibc* | -newlib* | -musl* | -relibc* | -uclibc* | -mlibc* )
1789636c353eSmrg		# These are just libc implementations, not actual OSes, and thus
1790636c353eSmrg		# require a kernel.
1791636c353eSmrg		echo "Invalid configuration \`$1': libc \`$os' needs explicit kernel." 1>&2
1792636c353eSmrg		exit 1
1793636c353eSmrg		;;
1794636c353eSmrg	-kernel* )
1795636c353eSmrg		echo "Invalid configuration \`$1': \`$os' needs explicit kernel." 1>&2
1796636c353eSmrg		exit 1
1797636c353eSmrg		;;
1798636c353eSmrg	*-kernel* )
1799636c353eSmrg		echo "Invalid configuration \`$1': \`$kernel' does not support \`$os'." 1>&2
1800636c353eSmrg		exit 1
1801636c353eSmrg		;;
1802636c353eSmrg	kfreebsd*-gnu* | kopensolaris*-gnu*)
1803636c353eSmrg		;;
1804636c353eSmrg	vxworks-simlinux | vxworks-simwindows | vxworks-spe)
1805636c353eSmrg		;;
1806636c353eSmrg	nto-qnx*)
1807636c353eSmrg		;;
1808636c353eSmrg	os2-emx)
1809636c353eSmrg		;;
1810636c353eSmrg	*-eabi* | *-gnueabi*)
1811636c353eSmrg		;;
1812636c353eSmrg	-*)
1813636c353eSmrg		# Blank kernel with real OS is always fine.
1814636c353eSmrg		;;
1815636c353eSmrg	*-*)
1816636c353eSmrg		echo "Invalid configuration \`$1': Kernel \`$kernel' not known to work with OS \`$os'." 1>&2
1817636c353eSmrg		exit 1
1818636c353eSmrg		;;
1819636c353eSmrgesac
1820636c353eSmrg
1821e07dc26bSmrg# Here we handle the case where we know the os, and the CPU type, but not the
1822e07dc26bSmrg# manufacturer.  We pick the logical manufacturer.
1823636c353eSmrgcase $vendor in
1824636c353eSmrg	unknown)
1825636c353eSmrg		case $cpu-$os in
1826636c353eSmrg			*-riscix*)
1827e07dc26bSmrg				vendor=acorn
1828e07dc26bSmrg				;;
1829636c353eSmrg			*-sunos*)
1830e07dc26bSmrg				vendor=sun
1831e07dc26bSmrg				;;
1832636c353eSmrg			*-cnk* | *-aix*)
1833e07dc26bSmrg				vendor=ibm
1834e07dc26bSmrg				;;
1835636c353eSmrg			*-beos*)
1836e07dc26bSmrg				vendor=be
1837e07dc26bSmrg				;;
1838636c353eSmrg			*-hpux*)
1839e07dc26bSmrg				vendor=hp
1840e07dc26bSmrg				;;
1841636c353eSmrg			*-mpeix*)
1842e07dc26bSmrg				vendor=hp
1843e07dc26bSmrg				;;
1844636c353eSmrg			*-hiux*)
1845e07dc26bSmrg				vendor=hitachi
1846e07dc26bSmrg				;;
1847636c353eSmrg			*-unos*)
1848e07dc26bSmrg				vendor=crds
1849e07dc26bSmrg				;;
1850636c353eSmrg			*-dgux*)
1851e07dc26bSmrg				vendor=dg
1852e07dc26bSmrg				;;
1853636c353eSmrg			*-luna*)
1854e07dc26bSmrg				vendor=omron
1855e07dc26bSmrg				;;
1856636c353eSmrg			*-genix*)
1857e07dc26bSmrg				vendor=ns
1858e07dc26bSmrg				;;
1859636c353eSmrg			*-clix*)
1860636c353eSmrg				vendor=intergraph
1861636c353eSmrg				;;
1862636c353eSmrg			*-mvs* | *-opened*)
1863636c353eSmrg				vendor=ibm
1864636c353eSmrg				;;
1865636c353eSmrg			*-os400*)
1866e07dc26bSmrg				vendor=ibm
1867e07dc26bSmrg				;;
1868636c353eSmrg			s390-* | s390x-*)
1869e07dc26bSmrg				vendor=ibm
1870e07dc26bSmrg				;;
1871636c353eSmrg			*-ptx*)
1872e07dc26bSmrg				vendor=sequent
1873e07dc26bSmrg				;;
1874636c353eSmrg			*-tpf*)
1875e07dc26bSmrg				vendor=ibm
1876e07dc26bSmrg				;;
1877636c353eSmrg			*-vxsim* | *-vxworks* | *-windiss*)
1878e07dc26bSmrg				vendor=wrs
1879e07dc26bSmrg				;;
1880636c353eSmrg			*-aux*)
1881e07dc26bSmrg				vendor=apple
1882e07dc26bSmrg				;;
1883636c353eSmrg			*-hms*)
1884e07dc26bSmrg				vendor=hitachi
1885e07dc26bSmrg				;;
1886636c353eSmrg			*-mpw* | *-macos*)
1887e07dc26bSmrg				vendor=apple
1888e07dc26bSmrg				;;
1889636c353eSmrg			*-*mint | *-mint[0-9]* | *-*MiNT | *-MiNT[0-9]*)
1890e07dc26bSmrg				vendor=atari
1891e07dc26bSmrg				;;
1892636c353eSmrg			*-vos*)
1893e07dc26bSmrg				vendor=stratus
1894e07dc26bSmrg				;;
1895e07dc26bSmrg		esac
1896e07dc26bSmrg		;;
1897e07dc26bSmrgesac
1898e07dc26bSmrg
1899636c353eSmrgecho "$cpu-$vendor-${kernel:+$kernel-}$os"
1900e07dc26bSmrgexit
1901e07dc26bSmrg
1902e07dc26bSmrg# Local variables:
1903636c353eSmrg# eval: (add-hook 'before-save-hook 'time-stamp)
1904e07dc26bSmrg# time-stamp-start: "timestamp='"
1905e07dc26bSmrg# time-stamp-format: "%:y-%02m-%02d"
1906e07dc26bSmrg# time-stamp-end: "'"
1907e07dc26bSmrg# End:
1908