1145b7b3cSmrg#! /bin/sh
2145b7b3cSmrg# Configuration validation subroutine script.
31d778f8eSmrg#   Copyright 1992-2024 Free Software Foundation, Inc.
4145b7b3cSmrg
5da2e2ef6Smrg# shellcheck disable=SC2006,SC2268 # see below for rationale
6da2e2ef6Smrg
71d778f8eSmrgtimestamp='2024-01-01'
8145b7b3cSmrg
9b7d26471Smrg# This file is free software; you can redistribute it and/or modify it
10b7d26471Smrg# under the terms of the GNU General Public License as published by
114901b09eSmrg# the Free Software Foundation, either version 3 of the License, or
12145b7b3cSmrg# (at your option) any later version.
13145b7b3cSmrg#
14b7d26471Smrg# This program is distributed in the hope that it will be useful, but
15b7d26471Smrg# WITHOUT ANY WARRANTY; without even the implied warranty of
16b7d26471Smrg# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
17b7d26471Smrg# General Public License for more details.
18145b7b3cSmrg#
19145b7b3cSmrg# You should have received a copy of the GNU General Public License
20b7d26471Smrg# along with this program; if not, see <https://www.gnu.org/licenses/>.
21145b7b3cSmrg#
22145b7b3cSmrg# As a special exception to the GNU General Public License, if you
23145b7b3cSmrg# distribute this file as part of a program that contains a
24145b7b3cSmrg# configuration script generated by Autoconf, you may include it under
25b7d26471Smrg# the same distribution terms that you use for the rest of that
26b7d26471Smrg# program.  This Exception is an additional permission under section 7
27b7d26471Smrg# of the GNU General Public License, version 3 ("GPLv3").
28145b7b3cSmrg
29145b7b3cSmrg
30b7d26471Smrg# Please send patches to <config-patches@gnu.org>.
31145b7b3cSmrg#
32145b7b3cSmrg# Configuration subroutine to validate and canonicalize a configuration type.
33145b7b3cSmrg# Supply the specified configuration type as an argument.
34145b7b3cSmrg# If it is invalid, we print an error message on stderr and exit with code 1.
35145b7b3cSmrg# Otherwise, we print the canonical config type on stdout and succeed.
36145b7b3cSmrg
375ffd6003Smrg# You can get the latest version of this script from:
38da2e2ef6Smrg# https://git.savannah.gnu.org/cgit/config.git/plain/config.sub
395ffd6003Smrg
40145b7b3cSmrg# This file is supposed to be the same for all GNU packages
41145b7b3cSmrg# and recognize all the CPU types, system types and aliases
42145b7b3cSmrg# that are meaningful with *any* GNU software.
43145b7b3cSmrg# Each package is responsible for reporting which valid configurations
44145b7b3cSmrg# it does not support.  The user should be able to distinguish
45145b7b3cSmrg# a failure to support a valid configuration from a meaningless
46145b7b3cSmrg# configuration.
47145b7b3cSmrg
48145b7b3cSmrg# The goal of this file is to map all the various variations of a given
49145b7b3cSmrg# machine specification into a single specification in the form:
50145b7b3cSmrg#	CPU_TYPE-MANUFACTURER-OPERATING_SYSTEM
51145b7b3cSmrg# or in some cases, the newer four-part form:
52145b7b3cSmrg#	CPU_TYPE-MANUFACTURER-KERNEL-OPERATING_SYSTEM
53145b7b3cSmrg# It is wrong to echo any other type of specification.
54145b7b3cSmrg
55da2e2ef6Smrg# The "shellcheck disable" line above the timestamp inhibits complaints
56da2e2ef6Smrg# about features and limitations of the classic Bourne shell that were
57da2e2ef6Smrg# superseded or lifted in POSIX.  However, this script identifies a wide
58da2e2ef6Smrg# variety of pre-POSIX systems that do not have POSIX shells at all, and
59da2e2ef6Smrg# even some reasonably current systems (Solaris 10 as case-in-point) still
60da2e2ef6Smrg# have a pre-POSIX /bin/sh.
61da2e2ef6Smrg
62145b7b3cSmrgme=`echo "$0" | sed -e 's,.*/,,'`
63145b7b3cSmrg
64145b7b3cSmrgusage="\
65b7d26471SmrgUsage: $0 [OPTION] CPU-MFR-OPSYS or ALIAS
66145b7b3cSmrg
67145b7b3cSmrgCanonicalize a configuration name.
68145b7b3cSmrg
69b7d26471SmrgOptions:
70145b7b3cSmrg  -h, --help         print this help, then exit
71145b7b3cSmrg  -t, --time-stamp   print date of last modification, then exit
72145b7b3cSmrg  -v, --version      print version number, then exit
73145b7b3cSmrg
74145b7b3cSmrgReport bugs and patches to <config-patches@gnu.org>."
75145b7b3cSmrg
76145b7b3cSmrgversion="\
77145b7b3cSmrgGNU config.sub ($timestamp)
78145b7b3cSmrg
791d778f8eSmrgCopyright 1992-2024 Free Software Foundation, Inc.
80145b7b3cSmrg
81145b7b3cSmrgThis is free software; see the source for copying conditions.  There is NO
82145b7b3cSmrgwarranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE."
83145b7b3cSmrg
84145b7b3cSmrghelp="
851d778f8eSmrgTry '$me --help' for more information."
86145b7b3cSmrg
87145b7b3cSmrg# Parse command line
88145b7b3cSmrgwhile test $# -gt 0 ; do
89145b7b3cSmrg  case $1 in
90145b7b3cSmrg    --time-stamp | --time* | -t )
91145b7b3cSmrg       echo "$timestamp" ; exit ;;
92145b7b3cSmrg    --version | -v )
93145b7b3cSmrg       echo "$version" ; exit ;;
94145b7b3cSmrg    --help | --h* | -h )
95145b7b3cSmrg       echo "$usage"; exit ;;
96145b7b3cSmrg    -- )     # Stop option processing
97145b7b3cSmrg       shift; break ;;
98145b7b3cSmrg    - )	# Use stdin as input.
99145b7b3cSmrg       break ;;
100145b7b3cSmrg    -* )
101da2e2ef6Smrg       echo "$me: invalid option $1$help" >&2
102145b7b3cSmrg       exit 1 ;;
103145b7b3cSmrg
104145b7b3cSmrg    *local*)
105145b7b3cSmrg       # First pass through any local machine types.
106b7d26471Smrg       echo "$1"
107145b7b3cSmrg       exit ;;
108145b7b3cSmrg
109145b7b3cSmrg    * )
110145b7b3cSmrg       break ;;
111145b7b3cSmrg  esac
112145b7b3cSmrgdone
113145b7b3cSmrg
114145b7b3cSmrgcase $# in
115145b7b3cSmrg 0) echo "$me: missing argument$help" >&2
116145b7b3cSmrg    exit 1;;
117145b7b3cSmrg 1) ;;
118145b7b3cSmrg *) echo "$me: too many arguments$help" >&2
119145b7b3cSmrg    exit 1;;
120145b7b3cSmrgesac
121145b7b3cSmrg
122da2e2ef6Smrg# Split fields of configuration type
123da2e2ef6Smrg# shellcheck disable=SC2162
124da2e2ef6Smrgsaved_IFS=$IFS
125da2e2ef6SmrgIFS="-" read field1 field2 field3 field4 <<EOF
126da2e2ef6Smrg$1
127da2e2ef6SmrgEOF
128da2e2ef6SmrgIFS=$saved_IFS
129145b7b3cSmrg
130da2e2ef6Smrg# Separate into logical components for further validation
131da2e2ef6Smrgcase $1 in
132da2e2ef6Smrg	*-*-*-*-*)
1331d778f8eSmrg		echo "Invalid configuration '$1': more than four components" >&2
134da2e2ef6Smrg		exit 1
135145b7b3cSmrg		;;
136da2e2ef6Smrg	*-*-*-*)
137da2e2ef6Smrg		basic_machine=$field1-$field2
138da2e2ef6Smrg		basic_os=$field3-$field4
139145b7b3cSmrg		;;
140da2e2ef6Smrg	*-*-*)
141da2e2ef6Smrg		# Ambiguous whether COMPANY is present, or skipped and KERNEL-OS is two
142da2e2ef6Smrg		# parts
143da2e2ef6Smrg		maybe_os=$field2-$field3
144da2e2ef6Smrg		case $maybe_os in
145da2e2ef6Smrg			nto-qnx* | linux-* | uclinux-uclibc* \
146da2e2ef6Smrg			| uclinux-gnu* | kfreebsd*-gnu* | knetbsd*-gnu* | netbsd*-gnu* \
147da2e2ef6Smrg			| netbsd*-eabi* | kopensolaris*-gnu* | cloudabi*-eabi* \
1481d778f8eSmrg			| storm-chaos* | os2-emx* | rtmk-nova* | managarm-* \
1491d778f8eSmrg			| windows-* )
150da2e2ef6Smrg				basic_machine=$field1
151da2e2ef6Smrg				basic_os=$maybe_os
152da2e2ef6Smrg				;;
153da2e2ef6Smrg			android-linux)
154da2e2ef6Smrg				basic_machine=$field1-unknown
155da2e2ef6Smrg				basic_os=linux-android
156da2e2ef6Smrg				;;
157da2e2ef6Smrg			*)
158da2e2ef6Smrg				basic_machine=$field1-$field2
159da2e2ef6Smrg				basic_os=$field3
160da2e2ef6Smrg				;;
161da2e2ef6Smrg		esac
162145b7b3cSmrg		;;
163da2e2ef6Smrg	*-*)
164da2e2ef6Smrg		# A lone config we happen to match not fitting any pattern
165da2e2ef6Smrg		case $field1-$field2 in
166da2e2ef6Smrg			decstation-3100)
167da2e2ef6Smrg				basic_machine=mips-dec
168da2e2ef6Smrg				basic_os=
169da2e2ef6Smrg				;;
170da2e2ef6Smrg			*-*)
171da2e2ef6Smrg				# Second component is usually, but not always the OS
172da2e2ef6Smrg				case $field2 in
173da2e2ef6Smrg					# Prevent following clause from handling this valid os
174da2e2ef6Smrg					sun*os*)
175da2e2ef6Smrg						basic_machine=$field1
176da2e2ef6Smrg						basic_os=$field2
177da2e2ef6Smrg						;;
178da2e2ef6Smrg					zephyr*)
179da2e2ef6Smrg						basic_machine=$field1-unknown
180da2e2ef6Smrg						basic_os=$field2
181da2e2ef6Smrg						;;
182da2e2ef6Smrg					# Manufacturers
183da2e2ef6Smrg					dec* | mips* | sequent* | encore* | pc533* | sgi* | sony* \
184da2e2ef6Smrg					| att* | 7300* | 3300* | delta* | motorola* | sun[234]* \
185da2e2ef6Smrg					| unicom* | ibm* | next | hp | isi* | apollo | altos* \
186da2e2ef6Smrg					| convergent* | ncr* | news | 32* | 3600* | 3100* \
187da2e2ef6Smrg					| hitachi* | c[123]* | convex* | sun | crds | omron* | dg \
188da2e2ef6Smrg					| ultra | tti* | harris | dolphin | highlevel | gould \
189da2e2ef6Smrg					| cbm | ns | masscomp | apple | axis | knuth | cray \
190da2e2ef6Smrg					| microblaze* | sim | cisco \
191da2e2ef6Smrg					| oki | wec | wrs | winbond)
192da2e2ef6Smrg						basic_machine=$field1-$field2
193da2e2ef6Smrg						basic_os=
194da2e2ef6Smrg						;;
195da2e2ef6Smrg					*)
196da2e2ef6Smrg						basic_machine=$field1
197da2e2ef6Smrg						basic_os=$field2
198da2e2ef6Smrg						;;
199da2e2ef6Smrg				esac
200da2e2ef6Smrg			;;
201da2e2ef6Smrg		esac
202145b7b3cSmrg		;;
203da2e2ef6Smrg	*)
204da2e2ef6Smrg		# Convert single-component short-hands not valid as part of
205da2e2ef6Smrg		# multi-component configurations.
206da2e2ef6Smrg		case $field1 in
207da2e2ef6Smrg			386bsd)
208da2e2ef6Smrg				basic_machine=i386-pc
209da2e2ef6Smrg				basic_os=bsd
210da2e2ef6Smrg				;;
211da2e2ef6Smrg			a29khif)
212da2e2ef6Smrg				basic_machine=a29k-amd
213da2e2ef6Smrg				basic_os=udi
214da2e2ef6Smrg				;;
215da2e2ef6Smrg			adobe68k)
216da2e2ef6Smrg				basic_machine=m68010-adobe
217da2e2ef6Smrg				basic_os=scout
218da2e2ef6Smrg				;;
219da2e2ef6Smrg			alliant)
220da2e2ef6Smrg				basic_machine=fx80-alliant
221da2e2ef6Smrg				basic_os=
222da2e2ef6Smrg				;;
223da2e2ef6Smrg			altos | altos3068)
224da2e2ef6Smrg				basic_machine=m68k-altos
225da2e2ef6Smrg				basic_os=
226da2e2ef6Smrg				;;
227da2e2ef6Smrg			am29k)
228da2e2ef6Smrg				basic_machine=a29k-none
229da2e2ef6Smrg				basic_os=bsd
230da2e2ef6Smrg				;;
231da2e2ef6Smrg			amdahl)
232da2e2ef6Smrg				basic_machine=580-amdahl
233da2e2ef6Smrg				basic_os=sysv
234da2e2ef6Smrg				;;
235da2e2ef6Smrg			amiga)
236da2e2ef6Smrg				basic_machine=m68k-unknown
237da2e2ef6Smrg				basic_os=
238da2e2ef6Smrg				;;
239da2e2ef6Smrg			amigaos | amigados)
240da2e2ef6Smrg				basic_machine=m68k-unknown
241da2e2ef6Smrg				basic_os=amigaos
242da2e2ef6Smrg				;;
243da2e2ef6Smrg			amigaunix | amix)
244da2e2ef6Smrg				basic_machine=m68k-unknown
245da2e2ef6Smrg				basic_os=sysv4
246da2e2ef6Smrg				;;
247da2e2ef6Smrg			apollo68)
248da2e2ef6Smrg				basic_machine=m68k-apollo
249da2e2ef6Smrg				basic_os=sysv
250da2e2ef6Smrg				;;
251da2e2ef6Smrg			apollo68bsd)
252da2e2ef6Smrg				basic_machine=m68k-apollo
253da2e2ef6Smrg				basic_os=bsd
254da2e2ef6Smrg				;;
255da2e2ef6Smrg			aros)
256da2e2ef6Smrg				basic_machine=i386-pc
257da2e2ef6Smrg				basic_os=aros
258da2e2ef6Smrg				;;
259da2e2ef6Smrg			aux)
260da2e2ef6Smrg				basic_machine=m68k-apple
261da2e2ef6Smrg				basic_os=aux
262da2e2ef6Smrg				;;
263da2e2ef6Smrg			balance)
264da2e2ef6Smrg				basic_machine=ns32k-sequent
265da2e2ef6Smrg				basic_os=dynix
266da2e2ef6Smrg				;;
267da2e2ef6Smrg			blackfin)
268da2e2ef6Smrg				basic_machine=bfin-unknown
269da2e2ef6Smrg				basic_os=linux
270da2e2ef6Smrg				;;
271da2e2ef6Smrg			cegcc)
272da2e2ef6Smrg				basic_machine=arm-unknown
273da2e2ef6Smrg				basic_os=cegcc
274da2e2ef6Smrg				;;
275da2e2ef6Smrg			convex-c1)
276da2e2ef6Smrg				basic_machine=c1-convex
277da2e2ef6Smrg				basic_os=bsd
278da2e2ef6Smrg				;;
279da2e2ef6Smrg			convex-c2)
280da2e2ef6Smrg				basic_machine=c2-convex
281da2e2ef6Smrg				basic_os=bsd
282da2e2ef6Smrg				;;
283da2e2ef6Smrg			convex-c32)
284da2e2ef6Smrg				basic_machine=c32-convex
285da2e2ef6Smrg				basic_os=bsd
286da2e2ef6Smrg				;;
287da2e2ef6Smrg			convex-c34)
288da2e2ef6Smrg				basic_machine=c34-convex
289da2e2ef6Smrg				basic_os=bsd
290da2e2ef6Smrg				;;
291da2e2ef6Smrg			convex-c38)
292da2e2ef6Smrg				basic_machine=c38-convex
293da2e2ef6Smrg				basic_os=bsd
294da2e2ef6Smrg				;;
295da2e2ef6Smrg			cray)
296da2e2ef6Smrg				basic_machine=j90-cray
297da2e2ef6Smrg				basic_os=unicos
298da2e2ef6Smrg				;;
299da2e2ef6Smrg			crds | unos)
300da2e2ef6Smrg				basic_machine=m68k-crds
301da2e2ef6Smrg				basic_os=
302da2e2ef6Smrg				;;
303da2e2ef6Smrg			da30)
304da2e2ef6Smrg				basic_machine=m68k-da30
305da2e2ef6Smrg				basic_os=
306da2e2ef6Smrg				;;
307da2e2ef6Smrg			decstation | pmax | pmin | dec3100 | decstatn)
308da2e2ef6Smrg				basic_machine=mips-dec
309da2e2ef6Smrg				basic_os=
310da2e2ef6Smrg				;;
311da2e2ef6Smrg			delta88)
312da2e2ef6Smrg				basic_machine=m88k-motorola
313da2e2ef6Smrg				basic_os=sysv3
314da2e2ef6Smrg				;;
315da2e2ef6Smrg			dicos)
316da2e2ef6Smrg				basic_machine=i686-pc
317da2e2ef6Smrg				basic_os=dicos
318da2e2ef6Smrg				;;
319da2e2ef6Smrg			djgpp)
320da2e2ef6Smrg				basic_machine=i586-pc
321da2e2ef6Smrg				basic_os=msdosdjgpp
322da2e2ef6Smrg				;;
323da2e2ef6Smrg			ebmon29k)
324da2e2ef6Smrg				basic_machine=a29k-amd
325da2e2ef6Smrg				basic_os=ebmon
326da2e2ef6Smrg				;;
327da2e2ef6Smrg			es1800 | OSE68k | ose68k | ose | OSE)
328da2e2ef6Smrg				basic_machine=m68k-ericsson
329da2e2ef6Smrg				basic_os=ose
330da2e2ef6Smrg				;;
331da2e2ef6Smrg			gmicro)
332da2e2ef6Smrg				basic_machine=tron-gmicro
333da2e2ef6Smrg				basic_os=sysv
334da2e2ef6Smrg				;;
335da2e2ef6Smrg			go32)
336da2e2ef6Smrg				basic_machine=i386-pc
337da2e2ef6Smrg				basic_os=go32
338da2e2ef6Smrg				;;
339da2e2ef6Smrg			h8300hms)
340da2e2ef6Smrg				basic_machine=h8300-hitachi
341da2e2ef6Smrg				basic_os=hms
342da2e2ef6Smrg				;;
343da2e2ef6Smrg			h8300xray)
344da2e2ef6Smrg				basic_machine=h8300-hitachi
345da2e2ef6Smrg				basic_os=xray
346da2e2ef6Smrg				;;
347da2e2ef6Smrg			h8500hms)
348da2e2ef6Smrg				basic_machine=h8500-hitachi
349da2e2ef6Smrg				basic_os=hms
350da2e2ef6Smrg				;;
351da2e2ef6Smrg			harris)
352da2e2ef6Smrg				basic_machine=m88k-harris
353da2e2ef6Smrg				basic_os=sysv3
354da2e2ef6Smrg				;;
355da2e2ef6Smrg			hp300 | hp300hpux)
356da2e2ef6Smrg				basic_machine=m68k-hp
357da2e2ef6Smrg				basic_os=hpux
358da2e2ef6Smrg				;;
359da2e2ef6Smrg			hp300bsd)
360da2e2ef6Smrg				basic_machine=m68k-hp
361da2e2ef6Smrg				basic_os=bsd
362da2e2ef6Smrg				;;
363da2e2ef6Smrg			hppaosf)
364da2e2ef6Smrg				basic_machine=hppa1.1-hp
365da2e2ef6Smrg				basic_os=osf
366da2e2ef6Smrg				;;
367da2e2ef6Smrg			hppro)
368da2e2ef6Smrg				basic_machine=hppa1.1-hp
369da2e2ef6Smrg				basic_os=proelf
370da2e2ef6Smrg				;;
371da2e2ef6Smrg			i386mach)
372da2e2ef6Smrg				basic_machine=i386-mach
373da2e2ef6Smrg				basic_os=mach
374da2e2ef6Smrg				;;
375da2e2ef6Smrg			isi68 | isi)
376da2e2ef6Smrg				basic_machine=m68k-isi
377da2e2ef6Smrg				basic_os=sysv
378da2e2ef6Smrg				;;
379da2e2ef6Smrg			m68knommu)
380da2e2ef6Smrg				basic_machine=m68k-unknown
381da2e2ef6Smrg				basic_os=linux
382da2e2ef6Smrg				;;
383da2e2ef6Smrg			magnum | m3230)
384da2e2ef6Smrg				basic_machine=mips-mips
385da2e2ef6Smrg				basic_os=sysv
386da2e2ef6Smrg				;;
387da2e2ef6Smrg			merlin)
388da2e2ef6Smrg				basic_machine=ns32k-utek
389da2e2ef6Smrg				basic_os=sysv
390da2e2ef6Smrg				;;
391da2e2ef6Smrg			mingw64)
392da2e2ef6Smrg				basic_machine=x86_64-pc
393da2e2ef6Smrg				basic_os=mingw64
394da2e2ef6Smrg				;;
395da2e2ef6Smrg			mingw32)
396da2e2ef6Smrg				basic_machine=i686-pc
397da2e2ef6Smrg				basic_os=mingw32
398da2e2ef6Smrg				;;
399da2e2ef6Smrg			mingw32ce)
400da2e2ef6Smrg				basic_machine=arm-unknown
401da2e2ef6Smrg				basic_os=mingw32ce
402da2e2ef6Smrg				;;
403da2e2ef6Smrg			monitor)
404da2e2ef6Smrg				basic_machine=m68k-rom68k
405da2e2ef6Smrg				basic_os=coff
406da2e2ef6Smrg				;;
407da2e2ef6Smrg			morphos)
408da2e2ef6Smrg				basic_machine=powerpc-unknown
409da2e2ef6Smrg				basic_os=morphos
410da2e2ef6Smrg				;;
411da2e2ef6Smrg			moxiebox)
412da2e2ef6Smrg				basic_machine=moxie-unknown
413da2e2ef6Smrg				basic_os=moxiebox
414da2e2ef6Smrg				;;
415da2e2ef6Smrg			msdos)
416da2e2ef6Smrg				basic_machine=i386-pc
417da2e2ef6Smrg				basic_os=msdos
418da2e2ef6Smrg				;;
419da2e2ef6Smrg			msys)
420da2e2ef6Smrg				basic_machine=i686-pc
421da2e2ef6Smrg				basic_os=msys
422da2e2ef6Smrg				;;
423da2e2ef6Smrg			mvs)
424da2e2ef6Smrg				basic_machine=i370-ibm
425da2e2ef6Smrg				basic_os=mvs
426da2e2ef6Smrg				;;
427da2e2ef6Smrg			nacl)
428da2e2ef6Smrg				basic_machine=le32-unknown
429da2e2ef6Smrg				basic_os=nacl
430da2e2ef6Smrg				;;
431da2e2ef6Smrg			ncr3000)
432da2e2ef6Smrg				basic_machine=i486-ncr
433da2e2ef6Smrg				basic_os=sysv4
434da2e2ef6Smrg				;;
435da2e2ef6Smrg			netbsd386)
436da2e2ef6Smrg				basic_machine=i386-pc
437da2e2ef6Smrg				basic_os=netbsd
438da2e2ef6Smrg				;;
439da2e2ef6Smrg			netwinder)
440da2e2ef6Smrg				basic_machine=armv4l-rebel
441da2e2ef6Smrg				basic_os=linux
442da2e2ef6Smrg				;;
443da2e2ef6Smrg			news | news700 | news800 | news900)
444da2e2ef6Smrg				basic_machine=m68k-sony
445da2e2ef6Smrg				basic_os=newsos
446da2e2ef6Smrg				;;
447da2e2ef6Smrg			news1000)
448da2e2ef6Smrg				basic_machine=m68030-sony
449da2e2ef6Smrg				basic_os=newsos
450da2e2ef6Smrg				;;
451da2e2ef6Smrg			necv70)
452da2e2ef6Smrg				basic_machine=v70-nec
453da2e2ef6Smrg				basic_os=sysv
454da2e2ef6Smrg				;;
455da2e2ef6Smrg			nh3000)
456da2e2ef6Smrg				basic_machine=m68k-harris
457da2e2ef6Smrg				basic_os=cxux
458da2e2ef6Smrg				;;
459da2e2ef6Smrg			nh[45]000)
460da2e2ef6Smrg				basic_machine=m88k-harris
461da2e2ef6Smrg				basic_os=cxux
462da2e2ef6Smrg				;;
463da2e2ef6Smrg			nindy960)
464da2e2ef6Smrg				basic_machine=i960-intel
465da2e2ef6Smrg				basic_os=nindy
466da2e2ef6Smrg				;;
467da2e2ef6Smrg			mon960)
468da2e2ef6Smrg				basic_machine=i960-intel
469da2e2ef6Smrg				basic_os=mon960
470da2e2ef6Smrg				;;
471da2e2ef6Smrg			nonstopux)
472da2e2ef6Smrg				basic_machine=mips-compaq
473da2e2ef6Smrg				basic_os=nonstopux
474da2e2ef6Smrg				;;
475da2e2ef6Smrg			os400)
476da2e2ef6Smrg				basic_machine=powerpc-ibm
477da2e2ef6Smrg				basic_os=os400
478da2e2ef6Smrg				;;
479da2e2ef6Smrg			OSE68000 | ose68000)
480da2e2ef6Smrg				basic_machine=m68000-ericsson
481da2e2ef6Smrg				basic_os=ose
482da2e2ef6Smrg				;;
483da2e2ef6Smrg			os68k)
484da2e2ef6Smrg				basic_machine=m68k-none
485da2e2ef6Smrg				basic_os=os68k
486da2e2ef6Smrg				;;
487da2e2ef6Smrg			paragon)
488da2e2ef6Smrg				basic_machine=i860-intel
489da2e2ef6Smrg				basic_os=osf
490da2e2ef6Smrg				;;
491da2e2ef6Smrg			parisc)
492da2e2ef6Smrg				basic_machine=hppa-unknown
493da2e2ef6Smrg				basic_os=linux
494da2e2ef6Smrg				;;
495da2e2ef6Smrg			psp)
496da2e2ef6Smrg				basic_machine=mipsallegrexel-sony
497da2e2ef6Smrg				basic_os=psp
498da2e2ef6Smrg				;;
499da2e2ef6Smrg			pw32)
500da2e2ef6Smrg				basic_machine=i586-unknown
501da2e2ef6Smrg				basic_os=pw32
502da2e2ef6Smrg				;;
503da2e2ef6Smrg			rdos | rdos64)
504da2e2ef6Smrg				basic_machine=x86_64-pc
505da2e2ef6Smrg				basic_os=rdos
506da2e2ef6Smrg				;;
507da2e2ef6Smrg			rdos32)
508da2e2ef6Smrg				basic_machine=i386-pc
509da2e2ef6Smrg				basic_os=rdos
510da2e2ef6Smrg				;;
511da2e2ef6Smrg			rom68k)
512da2e2ef6Smrg				basic_machine=m68k-rom68k
513da2e2ef6Smrg				basic_os=coff
514da2e2ef6Smrg				;;
515da2e2ef6Smrg			sa29200)
516da2e2ef6Smrg				basic_machine=a29k-amd
517da2e2ef6Smrg				basic_os=udi
518da2e2ef6Smrg				;;
519da2e2ef6Smrg			sei)
520da2e2ef6Smrg				basic_machine=mips-sei
521da2e2ef6Smrg				basic_os=seiux
522da2e2ef6Smrg				;;
523da2e2ef6Smrg			sequent)
524da2e2ef6Smrg				basic_machine=i386-sequent
525da2e2ef6Smrg				basic_os=
526da2e2ef6Smrg				;;
527da2e2ef6Smrg			sps7)
528da2e2ef6Smrg				basic_machine=m68k-bull
529da2e2ef6Smrg				basic_os=sysv2
530da2e2ef6Smrg				;;
531da2e2ef6Smrg			st2000)
532da2e2ef6Smrg				basic_machine=m68k-tandem
533da2e2ef6Smrg				basic_os=
534da2e2ef6Smrg				;;
535da2e2ef6Smrg			stratus)
536da2e2ef6Smrg				basic_machine=i860-stratus
537da2e2ef6Smrg				basic_os=sysv4
538da2e2ef6Smrg				;;
539da2e2ef6Smrg			sun2)
540da2e2ef6Smrg				basic_machine=m68000-sun
541da2e2ef6Smrg				basic_os=
542da2e2ef6Smrg				;;
543da2e2ef6Smrg			sun2os3)
544da2e2ef6Smrg				basic_machine=m68000-sun
545da2e2ef6Smrg				basic_os=sunos3
546da2e2ef6Smrg				;;
547da2e2ef6Smrg			sun2os4)
548da2e2ef6Smrg				basic_machine=m68000-sun
549da2e2ef6Smrg				basic_os=sunos4
550da2e2ef6Smrg				;;
551da2e2ef6Smrg			sun3)
552da2e2ef6Smrg				basic_machine=m68k-sun
553da2e2ef6Smrg				basic_os=
554da2e2ef6Smrg				;;
555da2e2ef6Smrg			sun3os3)
556da2e2ef6Smrg				basic_machine=m68k-sun
557da2e2ef6Smrg				basic_os=sunos3
558da2e2ef6Smrg				;;
559da2e2ef6Smrg			sun3os4)
560da2e2ef6Smrg				basic_machine=m68k-sun
561da2e2ef6Smrg				basic_os=sunos4
562da2e2ef6Smrg				;;
563da2e2ef6Smrg			sun4)
564da2e2ef6Smrg				basic_machine=sparc-sun
565da2e2ef6Smrg				basic_os=
566da2e2ef6Smrg				;;
567da2e2ef6Smrg			sun4os3)
568da2e2ef6Smrg				basic_machine=sparc-sun
569da2e2ef6Smrg				basic_os=sunos3
570da2e2ef6Smrg				;;
571da2e2ef6Smrg			sun4os4)
572da2e2ef6Smrg				basic_machine=sparc-sun
573da2e2ef6Smrg				basic_os=sunos4
574da2e2ef6Smrg				;;
575da2e2ef6Smrg			sun4sol2)
576da2e2ef6Smrg				basic_machine=sparc-sun
577da2e2ef6Smrg				basic_os=solaris2
578da2e2ef6Smrg				;;
579da2e2ef6Smrg			sun386 | sun386i | roadrunner)
580da2e2ef6Smrg				basic_machine=i386-sun
581da2e2ef6Smrg				basic_os=
582da2e2ef6Smrg				;;
583da2e2ef6Smrg			sv1)
584da2e2ef6Smrg				basic_machine=sv1-cray
585da2e2ef6Smrg				basic_os=unicos
586da2e2ef6Smrg				;;
587da2e2ef6Smrg			symmetry)
588da2e2ef6Smrg				basic_machine=i386-sequent
589da2e2ef6Smrg				basic_os=dynix
590da2e2ef6Smrg				;;
591da2e2ef6Smrg			t3e)
592da2e2ef6Smrg				basic_machine=alphaev5-cray
593da2e2ef6Smrg				basic_os=unicos
594da2e2ef6Smrg				;;
595da2e2ef6Smrg			t90)
596da2e2ef6Smrg				basic_machine=t90-cray
597da2e2ef6Smrg				basic_os=unicos
598da2e2ef6Smrg				;;
599da2e2ef6Smrg			toad1)
600da2e2ef6Smrg				basic_machine=pdp10-xkl
601da2e2ef6Smrg				basic_os=tops20
602da2e2ef6Smrg				;;
603da2e2ef6Smrg			tpf)
604da2e2ef6Smrg				basic_machine=s390x-ibm
605da2e2ef6Smrg				basic_os=tpf
606da2e2ef6Smrg				;;
607da2e2ef6Smrg			udi29k)
608da2e2ef6Smrg				basic_machine=a29k-amd
609da2e2ef6Smrg				basic_os=udi
610da2e2ef6Smrg				;;
611da2e2ef6Smrg			ultra3)
612da2e2ef6Smrg				basic_machine=a29k-nyu
613da2e2ef6Smrg				basic_os=sym1
614da2e2ef6Smrg				;;
615da2e2ef6Smrg			v810 | necv810)
616da2e2ef6Smrg				basic_machine=v810-nec
617da2e2ef6Smrg				basic_os=none
618da2e2ef6Smrg				;;
619da2e2ef6Smrg			vaxv)
620da2e2ef6Smrg				basic_machine=vax-dec
621da2e2ef6Smrg				basic_os=sysv
622da2e2ef6Smrg				;;
623da2e2ef6Smrg			vms)
624da2e2ef6Smrg				basic_machine=vax-dec
625da2e2ef6Smrg				basic_os=vms
626da2e2ef6Smrg				;;
627da2e2ef6Smrg			vsta)
628da2e2ef6Smrg				basic_machine=i386-pc
629da2e2ef6Smrg				basic_os=vsta
630da2e2ef6Smrg				;;
631da2e2ef6Smrg			vxworks960)
632da2e2ef6Smrg				basic_machine=i960-wrs
633da2e2ef6Smrg				basic_os=vxworks
634da2e2ef6Smrg				;;
635da2e2ef6Smrg			vxworks68)
636da2e2ef6Smrg				basic_machine=m68k-wrs
637da2e2ef6Smrg				basic_os=vxworks
638da2e2ef6Smrg				;;
639da2e2ef6Smrg			vxworks29k)
640da2e2ef6Smrg				basic_machine=a29k-wrs
641da2e2ef6Smrg				basic_os=vxworks
642da2e2ef6Smrg				;;
643da2e2ef6Smrg			xbox)
644da2e2ef6Smrg				basic_machine=i686-pc
645da2e2ef6Smrg				basic_os=mingw32
646da2e2ef6Smrg				;;
647da2e2ef6Smrg			ymp)
648da2e2ef6Smrg				basic_machine=ymp-cray
649da2e2ef6Smrg				basic_os=unicos
650da2e2ef6Smrg				;;
651da2e2ef6Smrg			*)
652da2e2ef6Smrg				basic_machine=$1
653da2e2ef6Smrg				basic_os=
654da2e2ef6Smrg				;;
655da2e2ef6Smrg		esac
656145b7b3cSmrg		;;
657145b7b3cSmrgesac
658145b7b3cSmrg
659da2e2ef6Smrg# Decode 1-component or ad-hoc basic machines
660145b7b3cSmrgcase $basic_machine in
661da2e2ef6Smrg	# Here we handle the default manufacturer of certain CPU types.  It is in
662da2e2ef6Smrg	# some cases the only manufacturer, in others, it is the most popular.
663da2e2ef6Smrg	w89k)
664da2e2ef6Smrg		cpu=hppa1.1
665da2e2ef6Smrg		vendor=winbond
666b7d26471Smrg		;;
667da2e2ef6Smrg	op50n)
668da2e2ef6Smrg		cpu=hppa1.1
669da2e2ef6Smrg		vendor=oki
670145b7b3cSmrg		;;
671da2e2ef6Smrg	op60c)
672da2e2ef6Smrg		cpu=hppa1.1
673da2e2ef6Smrg		vendor=oki
674145b7b3cSmrg		;;
675da2e2ef6Smrg	ibm*)
676da2e2ef6Smrg		cpu=i370
677da2e2ef6Smrg		vendor=ibm
678145b7b3cSmrg		;;
679da2e2ef6Smrg	orion105)
680da2e2ef6Smrg		cpu=clipper
681da2e2ef6Smrg		vendor=highlevel
682b7d26471Smrg		;;
683da2e2ef6Smrg	mac | mpw | mac-mpw)
684da2e2ef6Smrg		cpu=m68k
685da2e2ef6Smrg		vendor=apple
686b7d26471Smrg		;;
687da2e2ef6Smrg	pmac | pmac-mpw)
688da2e2ef6Smrg		cpu=powerpc
689da2e2ef6Smrg		vendor=apple
690b7d26471Smrg		;;
691b7d26471Smrg
692145b7b3cSmrg	# Recognize the various machine names and aliases which stand
693145b7b3cSmrg	# for a CPU type and a company and sometimes even an OS.
694145b7b3cSmrg	3b1 | 7300 | 7300-att | att-7300 | pc7300 | safari | unixpc)
695da2e2ef6Smrg		cpu=m68000
696da2e2ef6Smrg		vendor=att
697145b7b3cSmrg		;;
698145b7b3cSmrg	3b*)
699da2e2ef6Smrg		cpu=we32k
700da2e2ef6Smrg		vendor=att
701578741aaSmrg		;;
7025ffd6003Smrg	bluegene*)
703da2e2ef6Smrg		cpu=powerpc
704da2e2ef6Smrg		vendor=ibm
705da2e2ef6Smrg		basic_os=cnk
706145b7b3cSmrg		;;
707145b7b3cSmrg	decsystem10* | dec10*)
708da2e2ef6Smrg		cpu=pdp10
709da2e2ef6Smrg		vendor=dec
710da2e2ef6Smrg		basic_os=tops10
711145b7b3cSmrg		;;
712145b7b3cSmrg	decsystem20* | dec20*)
713da2e2ef6Smrg		cpu=pdp10
714da2e2ef6Smrg		vendor=dec
715da2e2ef6Smrg		basic_os=tops20
716145b7b3cSmrg		;;
717145b7b3cSmrg	delta | 3300 | motorola-3300 | motorola-delta \
718145b7b3cSmrg	      | 3300-motorola | delta-motorola)
719da2e2ef6Smrg		cpu=m68k
720da2e2ef6Smrg		vendor=motorola
721145b7b3cSmrg		;;
722b7d26471Smrg	dpx2*)
723da2e2ef6Smrg		cpu=m68k
724da2e2ef6Smrg		vendor=bull
725da2e2ef6Smrg		basic_os=sysv3
726145b7b3cSmrg		;;
727145b7b3cSmrg	encore | umax | mmax)
728da2e2ef6Smrg		cpu=ns32k
729da2e2ef6Smrg		vendor=encore
730145b7b3cSmrg		;;
731da2e2ef6Smrg	elxsi)
732da2e2ef6Smrg		cpu=elxsi
733da2e2ef6Smrg		vendor=elxsi
734da2e2ef6Smrg		basic_os=${basic_os:-bsd}
735145b7b3cSmrg		;;
736145b7b3cSmrg	fx2800)
737da2e2ef6Smrg		cpu=i860
738da2e2ef6Smrg		vendor=alliant
739145b7b3cSmrg		;;
740145b7b3cSmrg	genix)
741da2e2ef6Smrg		cpu=ns32k
742da2e2ef6Smrg		vendor=ns
743145b7b3cSmrg		;;
744145b7b3cSmrg	h3050r* | hiux*)
745da2e2ef6Smrg		cpu=hppa1.1
746da2e2ef6Smrg		vendor=hitachi
747da2e2ef6Smrg		basic_os=hiuxwe2
748145b7b3cSmrg		;;
749145b7b3cSmrg	hp3k9[0-9][0-9] | hp9[0-9][0-9])
750da2e2ef6Smrg		cpu=hppa1.0
751da2e2ef6Smrg		vendor=hp
752145b7b3cSmrg		;;
753145b7b3cSmrg	hp9k2[0-9][0-9] | hp9k31[0-9])
754da2e2ef6Smrg		cpu=m68000
755da2e2ef6Smrg		vendor=hp
756145b7b3cSmrg		;;
757145b7b3cSmrg	hp9k3[2-9][0-9])
758da2e2ef6Smrg		cpu=m68k
759da2e2ef6Smrg		vendor=hp
760145b7b3cSmrg		;;
761145b7b3cSmrg	hp9k6[0-9][0-9] | hp6[0-9][0-9])
762da2e2ef6Smrg		cpu=hppa1.0
763da2e2ef6Smrg		vendor=hp
764145b7b3cSmrg		;;
765145b7b3cSmrg	hp9k7[0-79][0-9] | hp7[0-79][0-9])
766da2e2ef6Smrg		cpu=hppa1.1
767da2e2ef6Smrg		vendor=hp
768145b7b3cSmrg		;;
769145b7b3cSmrg	hp9k78[0-9] | hp78[0-9])
770145b7b3cSmrg		# FIXME: really hppa2.0-hp
771da2e2ef6Smrg		cpu=hppa1.1
772da2e2ef6Smrg		vendor=hp
773145b7b3cSmrg		;;
774145b7b3cSmrg	hp9k8[67]1 | hp8[67]1 | hp9k80[24] | hp80[24] | hp9k8[78]9 | hp8[78]9 | hp9k893 | hp893)
775145b7b3cSmrg		# FIXME: really hppa2.0-hp
776da2e2ef6Smrg		cpu=hppa1.1
777da2e2ef6Smrg		vendor=hp
778145b7b3cSmrg		;;
779145b7b3cSmrg	hp9k8[0-9][13679] | hp8[0-9][13679])
780da2e2ef6Smrg		cpu=hppa1.1
781da2e2ef6Smrg		vendor=hp
782145b7b3cSmrg		;;
783145b7b3cSmrg	hp9k8[0-9][0-9] | hp8[0-9][0-9])
784da2e2ef6Smrg		cpu=hppa1.0
785da2e2ef6Smrg		vendor=hp
786145b7b3cSmrg		;;
787145b7b3cSmrg	i*86v32)
788da2e2ef6Smrg		cpu=`echo "$1" | sed -e 's/86.*/86/'`
789da2e2ef6Smrg		vendor=pc
790da2e2ef6Smrg		basic_os=sysv32
791145b7b3cSmrg		;;
792145b7b3cSmrg	i*86v4*)
793da2e2ef6Smrg		cpu=`echo "$1" | sed -e 's/86.*/86/'`
794da2e2ef6Smrg		vendor=pc
795da2e2ef6Smrg		basic_os=sysv4
796145b7b3cSmrg		;;
797145b7b3cSmrg	i*86v)
798da2e2ef6Smrg		cpu=`echo "$1" | sed -e 's/86.*/86/'`
799da2e2ef6Smrg		vendor=pc
800da2e2ef6Smrg		basic_os=sysv
801145b7b3cSmrg		;;
802145b7b3cSmrg	i*86sol2)
803da2e2ef6Smrg		cpu=`echo "$1" | sed -e 's/86.*/86/'`
804da2e2ef6Smrg		vendor=pc
805da2e2ef6Smrg		basic_os=solaris2
806145b7b3cSmrg		;;
807da2e2ef6Smrg	j90 | j90-cray)
808da2e2ef6Smrg		cpu=j90
809da2e2ef6Smrg		vendor=cray
810da2e2ef6Smrg		basic_os=${basic_os:-unicos}
811145b7b3cSmrg		;;
812145b7b3cSmrg	iris | iris4d)
813da2e2ef6Smrg		cpu=mips
814da2e2ef6Smrg		vendor=sgi
815da2e2ef6Smrg		case $basic_os in
816da2e2ef6Smrg		    irix*)
817145b7b3cSmrg			;;
818145b7b3cSmrg		    *)
819da2e2ef6Smrg			basic_os=irix4
820145b7b3cSmrg			;;
821145b7b3cSmrg		esac
822145b7b3cSmrg		;;
823145b7b3cSmrg	miniframe)
824da2e2ef6Smrg		cpu=m68000
825da2e2ef6Smrg		vendor=convergent
826145b7b3cSmrg		;;
827da2e2ef6Smrg	*mint | mint[0-9]* | *MiNT | *MiNT[0-9]*)
828da2e2ef6Smrg		cpu=m68k
829da2e2ef6Smrg		vendor=atari
830da2e2ef6Smrg		basic_os=mint
831145b7b3cSmrg		;;
832145b7b3cSmrg	news-3600 | risc-news)
833da2e2ef6Smrg		cpu=mips
834da2e2ef6Smrg		vendor=sony
835da2e2ef6Smrg		basic_os=newsos
836145b7b3cSmrg		;;
837b7d26471Smrg	next | m*-next)
838da2e2ef6Smrg		cpu=m68k
839da2e2ef6Smrg		vendor=next
840da2e2ef6Smrg		case $basic_os in
841da2e2ef6Smrg		    openstep*)
842da2e2ef6Smrg		        ;;
843da2e2ef6Smrg		    nextstep*)
844145b7b3cSmrg			;;
845da2e2ef6Smrg		    ns2*)
846da2e2ef6Smrg		      basic_os=nextstep2
847145b7b3cSmrg			;;
848145b7b3cSmrg		    *)
849da2e2ef6Smrg		      basic_os=nextstep3
850145b7b3cSmrg			;;
851145b7b3cSmrg		esac
852145b7b3cSmrg		;;
853145b7b3cSmrg	np1)
854da2e2ef6Smrg		cpu=np1
855da2e2ef6Smrg		vendor=gould
856b7d26471Smrg		;;
857145b7b3cSmrg	op50n-* | op60c-*)
858da2e2ef6Smrg		cpu=hppa1.1
859da2e2ef6Smrg		vendor=oki
860da2e2ef6Smrg		basic_os=proelf
861145b7b3cSmrg		;;
862145b7b3cSmrg	pa-hitachi)
863da2e2ef6Smrg		cpu=hppa1.1
864da2e2ef6Smrg		vendor=hitachi
865da2e2ef6Smrg		basic_os=hiuxwe2
866578741aaSmrg		;;
867145b7b3cSmrg	pbd)
868da2e2ef6Smrg		cpu=sparc
869da2e2ef6Smrg		vendor=tti
870145b7b3cSmrg		;;
871145b7b3cSmrg	pbb)
872da2e2ef6Smrg		cpu=m68k
873da2e2ef6Smrg		vendor=tti
874145b7b3cSmrg		;;
875da2e2ef6Smrg	pc532)
876da2e2ef6Smrg		cpu=ns32k
877da2e2ef6Smrg		vendor=pc532
878145b7b3cSmrg		;;
879145b7b3cSmrg	pn)
880da2e2ef6Smrg		cpu=pn
881da2e2ef6Smrg		vendor=gould
882145b7b3cSmrg		;;
883da2e2ef6Smrg	power)
884da2e2ef6Smrg		cpu=power
885da2e2ef6Smrg		vendor=ibm
886145b7b3cSmrg		;;
887da2e2ef6Smrg	ps2)
888da2e2ef6Smrg		cpu=i386
889da2e2ef6Smrg		vendor=ibm
890145b7b3cSmrg		;;
891da2e2ef6Smrg	rm[46]00)
892da2e2ef6Smrg		cpu=mips
893da2e2ef6Smrg		vendor=siemens
894145b7b3cSmrg		;;
895da2e2ef6Smrg	rtpc | rtpc-*)
896da2e2ef6Smrg		cpu=romp
897da2e2ef6Smrg		vendor=ibm
898145b7b3cSmrg		;;
899da2e2ef6Smrg	sde)
900da2e2ef6Smrg		cpu=mipsisa32
901da2e2ef6Smrg		vendor=sde
902da2e2ef6Smrg		basic_os=${basic_os:-elf}
903145b7b3cSmrg		;;
904da2e2ef6Smrg	simso-wrs)
905da2e2ef6Smrg		cpu=sparclite
906da2e2ef6Smrg		vendor=wrs
907da2e2ef6Smrg		basic_os=vxworks
908145b7b3cSmrg		;;
909da2e2ef6Smrg	tower | tower-32)
910da2e2ef6Smrg		cpu=m68k
911da2e2ef6Smrg		vendor=ncr
912145b7b3cSmrg		;;
913da2e2ef6Smrg	vpp*|vx|vx-*)
914da2e2ef6Smrg		cpu=f301
915da2e2ef6Smrg		vendor=fujitsu
916b7d26471Smrg		;;
917da2e2ef6Smrg	w65)
918da2e2ef6Smrg		cpu=w65
919da2e2ef6Smrg		vendor=wdc
920145b7b3cSmrg		;;
921da2e2ef6Smrg	w89k-*)
922da2e2ef6Smrg		cpu=hppa1.1
923da2e2ef6Smrg		vendor=winbond
924da2e2ef6Smrg		basic_os=proelf
925145b7b3cSmrg		;;
926da2e2ef6Smrg	none)
927da2e2ef6Smrg		cpu=none
928da2e2ef6Smrg		vendor=none
929145b7b3cSmrg		;;
930da2e2ef6Smrg	leon|leon[3-9])
931da2e2ef6Smrg		cpu=sparc
932da2e2ef6Smrg		vendor=$basic_machine
933145b7b3cSmrg		;;
934da2e2ef6Smrg	leon-*|leon[3-9]-*)
935da2e2ef6Smrg		cpu=sparc
936da2e2ef6Smrg		vendor=`echo "$basic_machine" | sed 's/-.*//'`
937145b7b3cSmrg		;;
938da2e2ef6Smrg
939da2e2ef6Smrg	*-*)
940da2e2ef6Smrg		# shellcheck disable=SC2162
941da2e2ef6Smrg		saved_IFS=$IFS
942da2e2ef6Smrg		IFS="-" read cpu vendor <<EOF
943da2e2ef6Smrg$basic_machine
944da2e2ef6SmrgEOF
945da2e2ef6Smrg		IFS=$saved_IFS
946145b7b3cSmrg		;;
9471d778f8eSmrg	# We use 'pc' rather than 'unknown'
948da2e2ef6Smrg	# because (1) that's what they normally are, and
949da2e2ef6Smrg	# (2) the word "unknown" tends to confuse beginning users.
950da2e2ef6Smrg	i*86 | x86_64)
951da2e2ef6Smrg		cpu=$basic_machine
952da2e2ef6Smrg		vendor=pc
953145b7b3cSmrg		;;
954da2e2ef6Smrg	# These rules are duplicated from below for sake of the special case above;
955da2e2ef6Smrg	# i.e. things that normalized to x86 arches should also default to "pc"
956da2e2ef6Smrg	pc98)
957da2e2ef6Smrg		cpu=i386
958da2e2ef6Smrg		vendor=pc
959145b7b3cSmrg		;;
960da2e2ef6Smrg	x64 | amd64)
961da2e2ef6Smrg		cpu=x86_64
962da2e2ef6Smrg		vendor=pc
963145b7b3cSmrg		;;
964da2e2ef6Smrg	# Recognize the basic CPU types without company name.
965da2e2ef6Smrg	*)
966da2e2ef6Smrg		cpu=$basic_machine
967da2e2ef6Smrg		vendor=unknown
968578741aaSmrg		;;
969da2e2ef6Smrgesac
970da2e2ef6Smrg
971da2e2ef6Smrgunset -v basic_machine
972da2e2ef6Smrg
973da2e2ef6Smrg# Decode basic machines in the full and proper CPU-Company form.
974da2e2ef6Smrgcase $cpu-$vendor in
975da2e2ef6Smrg	# Here we handle the default manufacturer of certain CPU types in canonical form. It is in
976da2e2ef6Smrg	# some cases the only manufacturer, in others, it is the most popular.
977da2e2ef6Smrg	craynv-unknown)
978da2e2ef6Smrg		vendor=cray
979da2e2ef6Smrg		basic_os=${basic_os:-unicosmp}
980145b7b3cSmrg		;;
981da2e2ef6Smrg	c90-unknown | c90-cray)
982da2e2ef6Smrg		vendor=cray
983da2e2ef6Smrg		basic_os=${Basic_os:-unicos}
984145b7b3cSmrg		;;
985da2e2ef6Smrg	fx80-unknown)
986da2e2ef6Smrg		vendor=alliant
987578741aaSmrg		;;
988da2e2ef6Smrg	romp-unknown)
989da2e2ef6Smrg		vendor=ibm
990145b7b3cSmrg		;;
991da2e2ef6Smrg	mmix-unknown)
992da2e2ef6Smrg		vendor=knuth
993145b7b3cSmrg		;;
994da2e2ef6Smrg	microblaze-unknown | microblazeel-unknown)
995da2e2ef6Smrg		vendor=xilinx
996145b7b3cSmrg		;;
997da2e2ef6Smrg	rs6000-unknown)
998da2e2ef6Smrg		vendor=ibm
999145b7b3cSmrg		;;
1000da2e2ef6Smrg	vax-unknown)
1001da2e2ef6Smrg		vendor=dec
1002145b7b3cSmrg		;;
1003da2e2ef6Smrg	pdp11-unknown)
1004da2e2ef6Smrg		vendor=dec
1005b7d26471Smrg		;;
1006da2e2ef6Smrg	we32k-unknown)
1007da2e2ef6Smrg		vendor=att
1008145b7b3cSmrg		;;
1009da2e2ef6Smrg	cydra-unknown)
1010da2e2ef6Smrg		vendor=cydrome
1011145b7b3cSmrg		;;
1012da2e2ef6Smrg	i370-ibm*)
1013da2e2ef6Smrg		vendor=ibm
1014145b7b3cSmrg		;;
1015da2e2ef6Smrg	orion-unknown)
1016da2e2ef6Smrg		vendor=highlevel
1017145b7b3cSmrg		;;
1018da2e2ef6Smrg	xps-unknown | xps100-unknown)
1019da2e2ef6Smrg		cpu=xps100
1020da2e2ef6Smrg		vendor=honeywell
1021145b7b3cSmrg		;;
1022da2e2ef6Smrg
1023da2e2ef6Smrg	# Here we normalize CPU types with a missing or matching vendor
10244901b09eSmrg	armh-unknown | armh-alt)
10254901b09eSmrg		cpu=armv7l
10264901b09eSmrg		vendor=alt
10274901b09eSmrg		basic_os=${basic_os:-linux-gnueabihf}
10284901b09eSmrg		;;
1029da2e2ef6Smrg	dpx20-unknown | dpx20-bull)
1030da2e2ef6Smrg		cpu=rs6000
1031da2e2ef6Smrg		vendor=bull
1032da2e2ef6Smrg		basic_os=${basic_os:-bosx}
1033145b7b3cSmrg		;;
1034da2e2ef6Smrg
1035da2e2ef6Smrg	# Here we normalize CPU types irrespective of the vendor
1036da2e2ef6Smrg	amd64-*)
1037da2e2ef6Smrg		cpu=x86_64
1038145b7b3cSmrg		;;
1039da2e2ef6Smrg	blackfin-*)
1040da2e2ef6Smrg		cpu=bfin
1041da2e2ef6Smrg		basic_os=linux
1042145b7b3cSmrg		;;
1043da2e2ef6Smrg	c54x-*)
1044da2e2ef6Smrg		cpu=tic54x
1045145b7b3cSmrg		;;
1046da2e2ef6Smrg	c55x-*)
1047da2e2ef6Smrg		cpu=tic55x
1048145b7b3cSmrg		;;
1049da2e2ef6Smrg	c6x-*)
1050da2e2ef6Smrg		cpu=tic6x
1051145b7b3cSmrg		;;
1052da2e2ef6Smrg	e500v[12]-*)
1053da2e2ef6Smrg		cpu=powerpc
1054da2e2ef6Smrg		basic_os=${basic_os}"spe"
1055145b7b3cSmrg		;;
1056da2e2ef6Smrg	mips3*-*)
1057da2e2ef6Smrg		cpu=mips64
1058145b7b3cSmrg		;;
1059da2e2ef6Smrg	ms1-*)
1060da2e2ef6Smrg		cpu=mt
1061145b7b3cSmrg		;;
1062da2e2ef6Smrg	m68knommu-*)
1063da2e2ef6Smrg		cpu=m68k
1064da2e2ef6Smrg		basic_os=linux
1065145b7b3cSmrg		;;
1066da2e2ef6Smrg	m9s12z-* | m68hcs12z-* | hcs12z-* | s12z-*)
1067da2e2ef6Smrg		cpu=s12z
1068578741aaSmrg		;;
1069da2e2ef6Smrg	openrisc-*)
1070da2e2ef6Smrg		cpu=or32
1071145b7b3cSmrg		;;
1072da2e2ef6Smrg	parisc-*)
1073da2e2ef6Smrg		cpu=hppa
1074da2e2ef6Smrg		basic_os=linux
1075145b7b3cSmrg		;;
1076da2e2ef6Smrg	pentium-* | p5-* | k5-* | k6-* | nexgen-* | viac3-*)
1077da2e2ef6Smrg		cpu=i586
1078145b7b3cSmrg		;;
10794901b09eSmrg	pentiumpro-* | p6-* | 6x86-* | athlon-* | athlon_*-*)
1080da2e2ef6Smrg		cpu=i686
1081145b7b3cSmrg		;;
1082da2e2ef6Smrg	pentiumii-* | pentium2-* | pentiumiii-* | pentium3-*)
1083da2e2ef6Smrg		cpu=i686
1084145b7b3cSmrg		;;
1085da2e2ef6Smrg	pentium4-*)
1086da2e2ef6Smrg		cpu=i786
1087145b7b3cSmrg		;;
1088da2e2ef6Smrg	pc98-*)
1089da2e2ef6Smrg		cpu=i386
1090145b7b3cSmrg		;;
1091da2e2ef6Smrg	ppc-* | ppcbe-*)
1092da2e2ef6Smrg		cpu=powerpc
1093145b7b3cSmrg		;;
1094da2e2ef6Smrg	ppcle-* | powerpclittle-*)
1095da2e2ef6Smrg		cpu=powerpcle
1096145b7b3cSmrg		;;
1097da2e2ef6Smrg	ppc64-*)
1098da2e2ef6Smrg		cpu=powerpc64
1099145b7b3cSmrg		;;
1100da2e2ef6Smrg	ppc64le-* | powerpc64little-*)
1101da2e2ef6Smrg		cpu=powerpc64le
1102145b7b3cSmrg		;;
1103da2e2ef6Smrg	sb1-*)
1104da2e2ef6Smrg		cpu=mipsisa64sb1
1105145b7b3cSmrg		;;
1106da2e2ef6Smrg	sb1el-*)
1107da2e2ef6Smrg		cpu=mipsisa64sb1el
1108145b7b3cSmrg		;;
1109da2e2ef6Smrg	sh5e[lb]-*)
1110da2e2ef6Smrg		cpu=`echo "$cpu" | sed 's/^\(sh.\)e\(.\)$/\1\2e/'`
1111145b7b3cSmrg		;;
1112da2e2ef6Smrg	spur-*)
1113da2e2ef6Smrg		cpu=spur
1114145b7b3cSmrg		;;
1115da2e2ef6Smrg	strongarm-* | thumb-*)
1116da2e2ef6Smrg		cpu=arm
1117145b7b3cSmrg		;;
1118da2e2ef6Smrg	tx39-*)
1119da2e2ef6Smrg		cpu=mipstx39
1120b7d26471Smrg		;;
1121da2e2ef6Smrg	tx39el-*)
1122da2e2ef6Smrg		cpu=mipstx39el
1123145b7b3cSmrg		;;
1124da2e2ef6Smrg	x64-*)
1125da2e2ef6Smrg		cpu=x86_64
1126145b7b3cSmrg		;;
1127b7d26471Smrg	xscale-* | xscalee[bl]-*)
1128da2e2ef6Smrg		cpu=`echo "$cpu" | sed 's/^xscale/arm/'`
1129145b7b3cSmrg		;;
11304901b09eSmrg	arm64-* | aarch64le-*)
1131da2e2ef6Smrg		cpu=aarch64
1132145b7b3cSmrg		;;
1133145b7b3cSmrg
1134da2e2ef6Smrg	# Recognize the canonical CPU Types that limit and/or modify the
1135da2e2ef6Smrg	# company names they are paired with.
1136da2e2ef6Smrg	cr16-*)
1137da2e2ef6Smrg		basic_os=${basic_os:-elf}
1138145b7b3cSmrg		;;
1139da2e2ef6Smrg	crisv32-* | etraxfs*-*)
1140da2e2ef6Smrg		cpu=crisv32
1141da2e2ef6Smrg		vendor=axis
1142145b7b3cSmrg		;;
1143da2e2ef6Smrg	cris-* | etrax*-*)
1144da2e2ef6Smrg		cpu=cris
1145da2e2ef6Smrg		vendor=axis
1146145b7b3cSmrg		;;
1147da2e2ef6Smrg	crx-*)
1148da2e2ef6Smrg		basic_os=${basic_os:-elf}
1149145b7b3cSmrg		;;
1150da2e2ef6Smrg	neo-tandem)
1151da2e2ef6Smrg		cpu=neo
1152da2e2ef6Smrg		vendor=tandem
1153145b7b3cSmrg		;;
1154da2e2ef6Smrg	nse-tandem)
1155da2e2ef6Smrg		cpu=nse
1156da2e2ef6Smrg		vendor=tandem
1157145b7b3cSmrg		;;
1158da2e2ef6Smrg	nsr-tandem)
1159da2e2ef6Smrg		cpu=nsr
1160da2e2ef6Smrg		vendor=tandem
1161145b7b3cSmrg		;;
1162da2e2ef6Smrg	nsv-tandem)
1163da2e2ef6Smrg		cpu=nsv
1164da2e2ef6Smrg		vendor=tandem
1165145b7b3cSmrg		;;
1166da2e2ef6Smrg	nsx-tandem)
1167da2e2ef6Smrg		cpu=nsx
1168da2e2ef6Smrg		vendor=tandem
1169145b7b3cSmrg		;;
1170da2e2ef6Smrg	mipsallegrexel-sony)
1171da2e2ef6Smrg		cpu=mipsallegrexel
1172da2e2ef6Smrg		vendor=sony
1173145b7b3cSmrg		;;
1174da2e2ef6Smrg	tile*-*)
1175da2e2ef6Smrg		basic_os=${basic_os:-linux-gnu}
1176145b7b3cSmrg		;;
1177da2e2ef6Smrg
1178145b7b3cSmrg	*)
1179da2e2ef6Smrg		# Recognize the canonical CPU types that are allowed with any
1180da2e2ef6Smrg		# company name.
1181da2e2ef6Smrg		case $cpu in
1182da2e2ef6Smrg			1750a | 580 \
1183da2e2ef6Smrg			| a29k \
11841d778f8eSmrg			| aarch64 | aarch64_be | aarch64c | arm64ec \
1185da2e2ef6Smrg			| abacus \
1186da2e2ef6Smrg			| alpha | alphaev[4-8] | alphaev56 | alphaev6[78] \
1187da2e2ef6Smrg			| alpha64 | alpha64ev[4-8] | alpha64ev56 | alpha64ev6[78] \
1188da2e2ef6Smrg			| alphapca5[67] | alpha64pca5[67] \
1189da2e2ef6Smrg			| am33_2.0 \
1190da2e2ef6Smrg			| amdgcn \
1191da2e2ef6Smrg			| arc | arceb | arc32 | arc64 \
1192da2e2ef6Smrg			| arm | arm[lb]e | arme[lb] | armv* \
1193da2e2ef6Smrg			| avr | avr32 \
1194da2e2ef6Smrg			| asmjs \
1195da2e2ef6Smrg			| ba \
1196da2e2ef6Smrg			| be32 | be64 \
1197da2e2ef6Smrg			| bfin | bpf | bs2000 \
1198da2e2ef6Smrg			| c[123]* | c30 | [cjt]90 | c4x \
1199da2e2ef6Smrg			| c8051 | clipper | craynv | csky | cydra \
1200da2e2ef6Smrg			| d10v | d30v | dlx | dsp16xx \
1201da2e2ef6Smrg			| e2k | elxsi | epiphany \
1202da2e2ef6Smrg			| f30[01] | f700 | fido | fr30 | frv | ft32 | fx80 \
12031d778f8eSmrg			| javascript \
1204da2e2ef6Smrg			| h8300 | h8500 \
1205da2e2ef6Smrg			| hppa | hppa1.[01] | hppa2.0 | hppa2.0[nw] | hppa64 \
1206da2e2ef6Smrg			| hexagon \
1207da2e2ef6Smrg			| i370 | i*86 | i860 | i960 | ia16 | ia64 \
1208da2e2ef6Smrg			| ip2k | iq2000 \
1209da2e2ef6Smrg			| k1om \
12101d778f8eSmrg			| kvx \
1211da2e2ef6Smrg			| le32 | le64 \
1212da2e2ef6Smrg			| lm32 \
12134901b09eSmrg			| loongarch32 | loongarch64 \
1214da2e2ef6Smrg			| m32c | m32r | m32rle \
1215da2e2ef6Smrg			| m5200 | m68000 | m680[012346]0 | m68360 | m683?2 | m68k \
1216da2e2ef6Smrg			| m6811 | m68hc11 | m6812 | m68hc12 | m68hcs12x \
1217da2e2ef6Smrg			| m88110 | m88k | maxq | mb | mcore | mep | metag \
1218da2e2ef6Smrg			| microblaze | microblazeel \
12191d778f8eSmrg			| mips* \
1220da2e2ef6Smrg			| mmix \
1221da2e2ef6Smrg			| mn10200 | mn10300 \
1222da2e2ef6Smrg			| moxie \
1223da2e2ef6Smrg			| mt \
1224da2e2ef6Smrg			| msp430 \
12251d778f8eSmrg			| nanomips* \
1226da2e2ef6Smrg			| nds32 | nds32le | nds32be \
1227da2e2ef6Smrg			| nfp \
1228da2e2ef6Smrg			| nios | nios2 | nios2eb | nios2el \
1229da2e2ef6Smrg			| none | np1 | ns16k | ns32k | nvptx \
1230da2e2ef6Smrg			| open8 \
1231da2e2ef6Smrg			| or1k* \
1232da2e2ef6Smrg			| or32 \
1233da2e2ef6Smrg			| orion \
1234da2e2ef6Smrg			| picochip \
1235da2e2ef6Smrg			| pdp10 | pdp11 | pj | pjl | pn | power \
1236da2e2ef6Smrg			| powerpc | powerpc64 | powerpc64le | powerpcle | powerpcspe \
1237da2e2ef6Smrg			| pru \
1238da2e2ef6Smrg			| pyramid \
1239da2e2ef6Smrg			| riscv | riscv32 | riscv32be | riscv64 | riscv64be \
1240da2e2ef6Smrg			| rl78 | romp | rs6000 | rx \
1241da2e2ef6Smrg			| s390 | s390x \
1242da2e2ef6Smrg			| score \
1243da2e2ef6Smrg			| sh | shl \
1244da2e2ef6Smrg			| sh[1234] | sh[24]a | sh[24]ae[lb] | sh[23]e | she[lb] | sh[lb]e \
1245da2e2ef6Smrg			| sh[1234]e[lb] |  sh[12345][lb]e | sh[23]ele | sh64 | sh64le \
1246da2e2ef6Smrg			| sparc | sparc64 | sparc64b | sparc64v | sparc86x | sparclet \
1247da2e2ef6Smrg			| sparclite \
1248da2e2ef6Smrg			| sparcv8 | sparcv9 | sparcv9b | sparcv9v | sv1 | sx* \
1249da2e2ef6Smrg			| spu \
1250da2e2ef6Smrg			| tahoe \
1251da2e2ef6Smrg			| thumbv7* \
1252da2e2ef6Smrg			| tic30 | tic4x | tic54x | tic55x | tic6x | tic80 \
1253da2e2ef6Smrg			| tron \
1254da2e2ef6Smrg			| ubicom32 \
1255da2e2ef6Smrg			| v70 | v850 | v850e | v850e1 | v850es | v850e2 | v850e2v3 \
1256da2e2ef6Smrg			| vax \
12571d778f8eSmrg			| vc4 \
1258da2e2ef6Smrg			| visium \
1259da2e2ef6Smrg			| w65 \
1260da2e2ef6Smrg			| wasm32 | wasm64 \
1261da2e2ef6Smrg			| we32k \
1262da2e2ef6Smrg			| x86 | x86_64 | xc16x | xgate | xps100 \
1263da2e2ef6Smrg			| xstormy16 | xtensa* \
1264da2e2ef6Smrg			| ymp \
1265da2e2ef6Smrg			| z8k | z80)
1266da2e2ef6Smrg				;;
1267da2e2ef6Smrg
1268da2e2ef6Smrg			*)
12691d778f8eSmrg				echo "Invalid configuration '$1': machine '$cpu-$vendor' not recognized" 1>&2
1270da2e2ef6Smrg				exit 1
1271da2e2ef6Smrg				;;
1272da2e2ef6Smrg		esac
1273145b7b3cSmrg		;;
1274145b7b3cSmrgesac
1275145b7b3cSmrg
1276145b7b3cSmrg# Here we canonicalize certain aliases for manufacturers.
1277da2e2ef6Smrgcase $vendor in
1278da2e2ef6Smrg	digital*)
1279da2e2ef6Smrg		vendor=dec
1280145b7b3cSmrg		;;
1281da2e2ef6Smrg	commodore*)
1282da2e2ef6Smrg		vendor=cbm
1283145b7b3cSmrg		;;
1284145b7b3cSmrg	*)
1285145b7b3cSmrg		;;
1286145b7b3cSmrgesac
1287145b7b3cSmrg
1288145b7b3cSmrg# Decode manufacturer-specific aliases for certain operating systems.
1289145b7b3cSmrg
12901d778f8eSmrgif test x"$basic_os" != x
1291145b7b3cSmrgthen
1292da2e2ef6Smrg
12934901b09eSmrg# First recognize some ad-hoc cases, or perhaps split kernel-os, or else just
1294da2e2ef6Smrg# set os.
12951d778f8eSmrgobj=
1296da2e2ef6Smrgcase $basic_os in
1297da2e2ef6Smrg	gnu/linux*)
1298da2e2ef6Smrg		kernel=linux
1299da2e2ef6Smrg		os=`echo "$basic_os" | sed -e 's|gnu/linux|gnu|'`
1300da2e2ef6Smrg		;;
1301da2e2ef6Smrg	os2-emx)
1302da2e2ef6Smrg		kernel=os2
1303da2e2ef6Smrg		os=`echo "$basic_os" | sed -e 's|os2-emx|emx|'`
1304da2e2ef6Smrg		;;
1305da2e2ef6Smrg	nto-qnx*)
1306da2e2ef6Smrg		kernel=nto
1307da2e2ef6Smrg		os=`echo "$basic_os" | sed -e 's|nto-qnx|qnx|'`
1308da2e2ef6Smrg		;;
1309da2e2ef6Smrg	*-*)
1310da2e2ef6Smrg		# shellcheck disable=SC2162
1311da2e2ef6Smrg		saved_IFS=$IFS
1312da2e2ef6Smrg		IFS="-" read kernel os <<EOF
1313da2e2ef6Smrg$basic_os
1314da2e2ef6SmrgEOF
1315da2e2ef6Smrg		IFS=$saved_IFS
1316da2e2ef6Smrg		;;
1317da2e2ef6Smrg	# Default OS when just kernel was specified
1318da2e2ef6Smrg	nto*)
1319da2e2ef6Smrg		kernel=nto
1320da2e2ef6Smrg		os=`echo "$basic_os" | sed -e 's|nto|qnx|'`
1321da2e2ef6Smrg		;;
1322da2e2ef6Smrg	linux*)
1323da2e2ef6Smrg		kernel=linux
1324da2e2ef6Smrg		os=`echo "$basic_os" | sed -e 's|linux|gnu|'`
1325da2e2ef6Smrg		;;
13264901b09eSmrg	managarm*)
13274901b09eSmrg		kernel=managarm
13284901b09eSmrg		os=`echo "$basic_os" | sed -e 's|managarm|mlibc|'`
13294901b09eSmrg		;;
1330da2e2ef6Smrg	*)
1331da2e2ef6Smrg		kernel=
1332da2e2ef6Smrg		os=$basic_os
1333da2e2ef6Smrg		;;
1334da2e2ef6Smrgesac
1335da2e2ef6Smrg
1336da2e2ef6Smrg# Now, normalize the OS (knowing we just have one component, it's not a kernel,
1337da2e2ef6Smrg# etc.)
1338145b7b3cSmrgcase $os in
1339b7d26471Smrg	# First match some system type aliases that might get confused
1340b7d26471Smrg	# with valid system types.
1341da2e2ef6Smrg	# solaris* is a basic system type, with this one exception.
1342da2e2ef6Smrg	auroraux)
1343da2e2ef6Smrg		os=auroraux
13445ffd6003Smrg		;;
1345da2e2ef6Smrg	bluegene*)
1346da2e2ef6Smrg		os=cnk
1347145b7b3cSmrg		;;
1348da2e2ef6Smrg	solaris1 | solaris1.*)
1349da2e2ef6Smrg		os=`echo "$os" | sed -e 's|solaris1|sunos4|'`
1350145b7b3cSmrg		;;
1351da2e2ef6Smrg	solaris)
1352da2e2ef6Smrg		os=solaris2
1353145b7b3cSmrg		;;
1354da2e2ef6Smrg	unixware*)
1355da2e2ef6Smrg		os=sysv4.2uw
1356145b7b3cSmrg		;;
1357b7d26471Smrg	# es1800 is here to avoid being matched by es* (a different OS)
1358da2e2ef6Smrg	es1800*)
1359da2e2ef6Smrg		os=ose
1360b7d26471Smrg		;;
1361da2e2ef6Smrg	# Some version numbers need modification
1362da2e2ef6Smrg	chorusos*)
1363da2e2ef6Smrg		os=chorusos
1364145b7b3cSmrg		;;
1365da2e2ef6Smrg	isc)
1366da2e2ef6Smrg		os=isc2.2
1367145b7b3cSmrg		;;
1368da2e2ef6Smrg	sco6)
1369da2e2ef6Smrg		os=sco5v6
1370145b7b3cSmrg		;;
1371da2e2ef6Smrg	sco5)
1372da2e2ef6Smrg		os=sco3.2v5
1373145b7b3cSmrg		;;
1374da2e2ef6Smrg	sco4)
1375da2e2ef6Smrg		os=sco3.2v4
1376145b7b3cSmrg		;;
1377da2e2ef6Smrg	sco3.2.[4-9]*)
1378da2e2ef6Smrg		os=`echo "$os" | sed -e 's/sco3.2./sco3.2v/'`
1379145b7b3cSmrg		;;
1380da2e2ef6Smrg	sco*v* | scout)
1381da2e2ef6Smrg		# Don't match below
1382145b7b3cSmrg		;;
1383da2e2ef6Smrg	sco*)
1384da2e2ef6Smrg		os=sco3.2v2
1385145b7b3cSmrg		;;
1386da2e2ef6Smrg	psos*)
1387da2e2ef6Smrg		os=psos
1388145b7b3cSmrg		;;
1389da2e2ef6Smrg	qnx*)
1390da2e2ef6Smrg		os=qnx
1391145b7b3cSmrg		;;
1392da2e2ef6Smrg	hiux*)
1393da2e2ef6Smrg		os=hiuxwe2
1394145b7b3cSmrg		;;
1395da2e2ef6Smrg	lynx*178)
1396da2e2ef6Smrg		os=lynxos178
1397145b7b3cSmrg		;;
1398da2e2ef6Smrg	lynx*5)
1399da2e2ef6Smrg		os=lynxos5
1400145b7b3cSmrg		;;
1401da2e2ef6Smrg	lynxos*)
1402da2e2ef6Smrg		# don't get caught up in next wildcard
1403145b7b3cSmrg		;;
1404da2e2ef6Smrg	lynx*)
1405da2e2ef6Smrg		os=lynxos
1406145b7b3cSmrg		;;
1407da2e2ef6Smrg	mac[0-9]*)
1408da2e2ef6Smrg		os=`echo "$os" | sed -e 's|mac|macos|'`
1409145b7b3cSmrg		;;
1410da2e2ef6Smrg	opened*)
1411da2e2ef6Smrg		os=openedition
1412145b7b3cSmrg		;;
1413da2e2ef6Smrg	os400*)
1414da2e2ef6Smrg		os=os400
1415145b7b3cSmrg		;;
1416da2e2ef6Smrg	sunos5*)
1417da2e2ef6Smrg		os=`echo "$os" | sed -e 's|sunos5|solaris2|'`
1418145b7b3cSmrg		;;
1419da2e2ef6Smrg	sunos6*)
1420da2e2ef6Smrg		os=`echo "$os" | sed -e 's|sunos6|solaris3|'`
1421145b7b3cSmrg		;;
1422da2e2ef6Smrg	wince*)
1423da2e2ef6Smrg		os=wince
1424145b7b3cSmrg		;;
1425da2e2ef6Smrg	utek*)
1426da2e2ef6Smrg		os=bsd
1427145b7b3cSmrg		;;
1428da2e2ef6Smrg	dynix*)
1429da2e2ef6Smrg		os=bsd
1430145b7b3cSmrg		;;
1431da2e2ef6Smrg	acis*)
1432da2e2ef6Smrg		os=aos
1433145b7b3cSmrg		;;
1434da2e2ef6Smrg	atheos*)
1435da2e2ef6Smrg		os=atheos
1436145b7b3cSmrg		;;
1437da2e2ef6Smrg	syllable*)
1438da2e2ef6Smrg		os=syllable
1439da2e2ef6Smrg		;;
1440da2e2ef6Smrg	386bsd)
1441da2e2ef6Smrg		os=bsd
1442da2e2ef6Smrg		;;
1443da2e2ef6Smrg	ctix* | uts*)
1444da2e2ef6Smrg		os=sysv
1445da2e2ef6Smrg		;;
1446da2e2ef6Smrg	nova*)
1447da2e2ef6Smrg		os=rtmk-nova
1448da2e2ef6Smrg		;;
1449da2e2ef6Smrg	ns2)
1450da2e2ef6Smrg		os=nextstep2
1451da2e2ef6Smrg		;;
1452da2e2ef6Smrg	# Preserve the version number of sinix5.
1453da2e2ef6Smrg	sinix5.*)
1454da2e2ef6Smrg		os=`echo "$os" | sed -e 's|sinix|sysv|'`
1455145b7b3cSmrg		;;
1456da2e2ef6Smrg	sinix*)
1457da2e2ef6Smrg		os=sysv4
1458145b7b3cSmrg		;;
1459da2e2ef6Smrg	tpf*)
1460da2e2ef6Smrg		os=tpf
1461145b7b3cSmrg		;;
1462da2e2ef6Smrg	triton*)
1463da2e2ef6Smrg		os=sysv3
1464145b7b3cSmrg		;;
1465da2e2ef6Smrg	oss*)
1466da2e2ef6Smrg		os=sysv3
1467145b7b3cSmrg		;;
1468da2e2ef6Smrg	svr4*)
1469da2e2ef6Smrg		os=sysv4
1470145b7b3cSmrg		;;
1471da2e2ef6Smrg	svr3)
1472da2e2ef6Smrg		os=sysv3
1473145b7b3cSmrg		;;
1474da2e2ef6Smrg	sysvr4)
1475da2e2ef6Smrg		os=sysv4
1476145b7b3cSmrg		;;
1477da2e2ef6Smrg	ose*)
1478da2e2ef6Smrg		os=ose
1479145b7b3cSmrg		;;
1480da2e2ef6Smrg	*mint | mint[0-9]* | *MiNT | MiNT[0-9]*)
1481da2e2ef6Smrg		os=mint
14825ffd6003Smrg		;;
1483da2e2ef6Smrg	dicos*)
1484da2e2ef6Smrg		os=dicos
1485da2e2ef6Smrg		;;
1486da2e2ef6Smrg	pikeos*)
1487b7d26471Smrg		# Until real need of OS specific support for
1488b7d26471Smrg		# particular features comes up, bare metal
1489b7d26471Smrg		# configurations are quite functional.
1490da2e2ef6Smrg		case $cpu in
1491b7d26471Smrg		    arm*)
1492da2e2ef6Smrg			os=eabi
1493b7d26471Smrg			;;
1494b7d26471Smrg		    *)
14951d778f8eSmrg			os=
14961d778f8eSmrg			obj=elf
1497b7d26471Smrg			;;
1498b7d26471Smrg		esac
1499b7d26471Smrg		;;
15001d778f8eSmrg	aout* | coff* | elf* | pe*)
15011d778f8eSmrg		# These are machine code file formats, not OSes
15021d778f8eSmrg		obj=$os
15031d778f8eSmrg		os=
15041d778f8eSmrg		;;
1505145b7b3cSmrg	*)
1506da2e2ef6Smrg		# No normalization, but not necessarily accepted, that comes below.
1507145b7b3cSmrg		;;
1508145b7b3cSmrgesac
1509da2e2ef6Smrg
1510145b7b3cSmrgelse
1511145b7b3cSmrg
1512145b7b3cSmrg# Here we handle the default operating systems that come with various machines.
1513145b7b3cSmrg# The value should be what the vendor currently ships out the door with their
1514145b7b3cSmrg# machine or put another way, the most popular os provided with the machine.
1515145b7b3cSmrg
1516145b7b3cSmrg# Note that if you're going to try to match "-MANUFACTURER" here (say,
1517145b7b3cSmrg# "-sun"), then you have to tell the case statement up towards the top
1518145b7b3cSmrg# that MANUFACTURER isn't an operating system.  Otherwise, code above
1519145b7b3cSmrg# will signal an error saying that MANUFACTURER isn't an operating
1520145b7b3cSmrg# system, and we'll never get to this point.
1521145b7b3cSmrg
1522da2e2ef6Smrgkernel=
15231d778f8eSmrgobj=
1524da2e2ef6Smrgcase $cpu-$vendor in
1525b7d26471Smrg	score-*)
15261d778f8eSmrg		os=
15271d778f8eSmrg		obj=elf
1528578741aaSmrg		;;
1529b7d26471Smrg	spu-*)
15301d778f8eSmrg		os=
15311d778f8eSmrg		obj=elf
1532578741aaSmrg		;;
1533145b7b3cSmrg	*-acorn)
1534da2e2ef6Smrg		os=riscix1.2
1535145b7b3cSmrg		;;
1536145b7b3cSmrg	arm*-rebel)
1537da2e2ef6Smrg		kernel=linux
1538da2e2ef6Smrg		os=gnu
1539145b7b3cSmrg		;;
1540145b7b3cSmrg	arm*-semi)
15411d778f8eSmrg		os=
15421d778f8eSmrg		obj=aout
1543145b7b3cSmrg		;;
1544b7d26471Smrg	c4x-* | tic4x-*)
15451d778f8eSmrg		os=
15461d778f8eSmrg		obj=coff
1547b7d26471Smrg		;;
1548b7d26471Smrg	c8051-*)
15491d778f8eSmrg		os=
15501d778f8eSmrg		obj=elf
1551da2e2ef6Smrg		;;
1552da2e2ef6Smrg	clipper-intergraph)
1553da2e2ef6Smrg		os=clix
1554b7d26471Smrg		;;
1555b7d26471Smrg	hexagon-*)
15561d778f8eSmrg		os=
15571d778f8eSmrg		obj=elf
1558b7d26471Smrg		;;
1559b7d26471Smrg	tic54x-*)
15601d778f8eSmrg		os=
15611d778f8eSmrg		obj=coff
1562b7d26471Smrg		;;
1563b7d26471Smrg	tic55x-*)
15641d778f8eSmrg		os=
15651d778f8eSmrg		obj=coff
1566b7d26471Smrg		;;
1567b7d26471Smrg	tic6x-*)
15681d778f8eSmrg		os=
15691d778f8eSmrg		obj=coff
1570578741aaSmrg		;;
1571145b7b3cSmrg	# This must come before the *-dec entry.
1572145b7b3cSmrg	pdp10-*)
1573da2e2ef6Smrg		os=tops20
1574145b7b3cSmrg		;;
1575145b7b3cSmrg	pdp11-*)
1576da2e2ef6Smrg		os=none
1577145b7b3cSmrg		;;
1578145b7b3cSmrg	*-dec | vax-*)
1579da2e2ef6Smrg		os=ultrix4.2
1580145b7b3cSmrg		;;
1581145b7b3cSmrg	m68*-apollo)
1582da2e2ef6Smrg		os=domain
1583145b7b3cSmrg		;;
1584145b7b3cSmrg	i386-sun)
1585da2e2ef6Smrg		os=sunos4.0.2
1586145b7b3cSmrg		;;
1587145b7b3cSmrg	m68000-sun)
1588da2e2ef6Smrg		os=sunos3
1589145b7b3cSmrg		;;
1590145b7b3cSmrg	m68*-cisco)
15911d778f8eSmrg		os=
15921d778f8eSmrg		obj=aout
1593145b7b3cSmrg		;;
1594b7d26471Smrg	mep-*)
15951d778f8eSmrg		os=
15961d778f8eSmrg		obj=elf
1597578741aaSmrg		;;
1598145b7b3cSmrg	mips*-cisco)
15991d778f8eSmrg		os=
16001d778f8eSmrg		obj=elf
1601145b7b3cSmrg		;;
16021d778f8eSmrg	mips*-*|nanomips*-*)
16031d778f8eSmrg		os=
16041d778f8eSmrg		obj=elf
1605145b7b3cSmrg		;;
1606145b7b3cSmrg	or32-*)
16071d778f8eSmrg		os=
16081d778f8eSmrg		obj=coff
1609145b7b3cSmrg		;;
1610145b7b3cSmrg	*-tti)	# must be before sparc entry or we get the wrong os.
1611da2e2ef6Smrg		os=sysv3
1612145b7b3cSmrg		;;
1613145b7b3cSmrg	sparc-* | *-sun)
1614da2e2ef6Smrg		os=sunos4.1.1
1615145b7b3cSmrg		;;
1616b7d26471Smrg	pru-*)
16171d778f8eSmrg		os=
16181d778f8eSmrg		obj=elf
1619b7d26471Smrg		;;
1620145b7b3cSmrg	*-be)
1621da2e2ef6Smrg		os=beos
1622145b7b3cSmrg		;;
1623145b7b3cSmrg	*-ibm)
1624da2e2ef6Smrg		os=aix
1625145b7b3cSmrg		;;
1626b7d26471Smrg	*-knuth)
1627da2e2ef6Smrg		os=mmixware
1628145b7b3cSmrg		;;
1629145b7b3cSmrg	*-wec)
1630da2e2ef6Smrg		os=proelf
1631145b7b3cSmrg		;;
1632145b7b3cSmrg	*-winbond)
1633da2e2ef6Smrg		os=proelf
1634145b7b3cSmrg		;;
1635145b7b3cSmrg	*-oki)
1636da2e2ef6Smrg		os=proelf
1637145b7b3cSmrg		;;
1638145b7b3cSmrg	*-hp)
1639da2e2ef6Smrg		os=hpux
1640145b7b3cSmrg		;;
1641145b7b3cSmrg	*-hitachi)
1642da2e2ef6Smrg		os=hiux
1643145b7b3cSmrg		;;
1644145b7b3cSmrg	i860-* | *-att | *-ncr | *-altos | *-motorola | *-convergent)
1645da2e2ef6Smrg		os=sysv
1646145b7b3cSmrg		;;
1647145b7b3cSmrg	*-cbm)
1648da2e2ef6Smrg		os=amigaos
1649145b7b3cSmrg		;;
1650145b7b3cSmrg	*-dg)
1651da2e2ef6Smrg		os=dgux
1652145b7b3cSmrg		;;
1653145b7b3cSmrg	*-dolphin)
1654da2e2ef6Smrg		os=sysv3
1655145b7b3cSmrg		;;
1656145b7b3cSmrg	m68k-ccur)
1657da2e2ef6Smrg		os=rtu
1658145b7b3cSmrg		;;
1659145b7b3cSmrg	m88k-omron*)
1660da2e2ef6Smrg		os=luna
1661145b7b3cSmrg		;;
1662b7d26471Smrg	*-next)
1663da2e2ef6Smrg		os=nextstep
1664145b7b3cSmrg		;;
1665145b7b3cSmrg	*-sequent)
1666da2e2ef6Smrg		os=ptx
1667145b7b3cSmrg		;;
1668145b7b3cSmrg	*-crds)
1669da2e2ef6Smrg		os=unos
1670145b7b3cSmrg		;;
1671145b7b3cSmrg	*-ns)
1672da2e2ef6Smrg		os=genix
1673145b7b3cSmrg		;;
1674145b7b3cSmrg	i370-*)
1675da2e2ef6Smrg		os=mvs
1676145b7b3cSmrg		;;
1677145b7b3cSmrg	*-gould)
1678da2e2ef6Smrg		os=sysv
1679145b7b3cSmrg		;;
1680145b7b3cSmrg	*-highlevel)
1681da2e2ef6Smrg		os=bsd
1682145b7b3cSmrg		;;
1683145b7b3cSmrg	*-encore)
1684da2e2ef6Smrg		os=bsd
1685145b7b3cSmrg		;;
1686145b7b3cSmrg	*-sgi)
1687da2e2ef6Smrg		os=irix
1688145b7b3cSmrg		;;
1689145b7b3cSmrg	*-siemens)
1690da2e2ef6Smrg		os=sysv4
1691145b7b3cSmrg		;;
1692145b7b3cSmrg	*-masscomp)
1693da2e2ef6Smrg		os=rtu
1694145b7b3cSmrg		;;
1695145b7b3cSmrg	f30[01]-fujitsu | f700-fujitsu)
1696da2e2ef6Smrg		os=uxpv
1697145b7b3cSmrg		;;
1698145b7b3cSmrg	*-rom68k)
16991d778f8eSmrg		os=
17001d778f8eSmrg		obj=coff
1701145b7b3cSmrg		;;
1702145b7b3cSmrg	*-*bug)
17031d778f8eSmrg		os=
17041d778f8eSmrg		obj=coff
1705145b7b3cSmrg		;;
1706145b7b3cSmrg	*-apple)
1707da2e2ef6Smrg		os=macos
1708145b7b3cSmrg		;;
1709145b7b3cSmrg	*-atari*)
1710da2e2ef6Smrg		os=mint
1711da2e2ef6Smrg		;;
1712da2e2ef6Smrg	*-wrs)
1713da2e2ef6Smrg		os=vxworks
1714145b7b3cSmrg		;;
1715145b7b3cSmrg	*)
1716da2e2ef6Smrg		os=none
1717145b7b3cSmrg		;;
1718145b7b3cSmrgesac
1719da2e2ef6Smrg
1720145b7b3cSmrgfi
1721145b7b3cSmrg
17221d778f8eSmrg# Now, validate our (potentially fixed-up) individual pieces (OS, OBJ).
17231d778f8eSmrg
1724da2e2ef6Smrgcase $os in
1725da2e2ef6Smrg	# Sometimes we do "kernel-libc", so those need to count as OSes.
17261d778f8eSmrg	llvm* | musl* | newlib* | relibc* | uclibc*)
1727da2e2ef6Smrg		;;
1728da2e2ef6Smrg	# Likewise for "kernel-abi"
1729da2e2ef6Smrg	eabi* | gnueabi*)
1730da2e2ef6Smrg		;;
1731da2e2ef6Smrg	# VxWorks passes extra cpu info in the 4th filed.
1732da2e2ef6Smrg	simlinux | simwindows | spe)
1733da2e2ef6Smrg		;;
17341d778f8eSmrg	# See `case $cpu-$os` validation below
17351d778f8eSmrg	ghcjs)
17361d778f8eSmrg		;;
1737da2e2ef6Smrg	# Now accept the basic system types.
1738da2e2ef6Smrg	# The portable systems comes first.
1739da2e2ef6Smrg	# Each alternative MUST end in a * to match a version number.
1740da2e2ef6Smrg	gnu* | android* | bsd* | mach* | minix* | genix* | ultrix* | irix* \
1741da2e2ef6Smrg	     | *vms* | esix* | aix* | cnk* | sunos | sunos[34]* \
1742da2e2ef6Smrg	     | hpux* | unos* | osf* | luna* | dgux* | auroraux* | solaris* \
1743da2e2ef6Smrg	     | sym* |  plan9* | psp* | sim* | xray* | os68k* | v88r* \
1744da2e2ef6Smrg	     | hiux* | abug | nacl* | netware* | windows* \
17451d778f8eSmrg	     | os9* | macos* | osx* | ios* | tvos* | watchos* \
1746da2e2ef6Smrg	     | mpw* | magic* | mmixware* | mon960* | lnews* \
1747da2e2ef6Smrg	     | amigaos* | amigados* | msdos* | newsos* | unicos* | aof* \
1748da2e2ef6Smrg	     | aos* | aros* | cloudabi* | sortix* | twizzler* \
1749da2e2ef6Smrg	     | nindy* | vxsim* | vxworks* | ebmon* | hms* | mvs* \
1750da2e2ef6Smrg	     | clix* | riscos* | uniplus* | iris* | isc* | rtu* | xenix* \
1751da2e2ef6Smrg	     | mirbsd* | netbsd* | dicos* | openedition* | ose* \
1752da2e2ef6Smrg	     | bitrig* | openbsd* | secbsd* | solidbsd* | libertybsd* | os108* \
1753da2e2ef6Smrg	     | ekkobsd* | freebsd* | riscix* | lynxos* | os400* \
17541d778f8eSmrg	     | bosx* | nextstep* | cxux* | oabi* \
17551d778f8eSmrg	     | ptx* | ecoff* | winnt* | domain* | vsta* \
1756da2e2ef6Smrg	     | udi* | lites* | ieee* | go32* | aux* | hcos* \
1757da2e2ef6Smrg	     | chorusrdb* | cegcc* | glidix* | serenity* \
17581d778f8eSmrg	     | cygwin* | msys* | moss* | proelf* | rtems* \
1759da2e2ef6Smrg	     | midipix* | mingw32* | mingw64* | mint* \
1760da2e2ef6Smrg	     | uxpv* | beos* | mpeix* | udk* | moxiebox* \
1761da2e2ef6Smrg	     | interix* | uwin* | mks* | rhapsody* | darwin* \
1762da2e2ef6Smrg	     | openstep* | oskit* | conix* | pw32* | nonstopux* \
1763da2e2ef6Smrg	     | storm-chaos* | tops10* | tenex* | tops20* | its* \
1764da2e2ef6Smrg	     | os2* | vos* | palmos* | uclinux* | nucleus* | morphos* \
1765da2e2ef6Smrg	     | scout* | superux* | sysv* | rtmk* | tpf* | windiss* \
1766da2e2ef6Smrg	     | powermax* | dnix* | nx6 | nx7 | sei* | dragonfly* \
1767da2e2ef6Smrg	     | skyos* | haiku* | rdos* | toppers* | drops* | es* \
1768da2e2ef6Smrg	     | onefs* | tirtos* | phoenix* | fuchsia* | redox* | bme* \
1769da2e2ef6Smrg	     | midnightbsd* | amdhsa* | unleashed* | emscripten* | wasi* \
17704901b09eSmrg	     | nsk* | powerunix* | genode* | zvmoe* | qnx* | emx* | zephyr* \
17711d778f8eSmrg	     | fiwix* | mlibc* | cos* | mbr* | ironclad* )
1772da2e2ef6Smrg		;;
1773da2e2ef6Smrg	# This one is extra strict with allowed versions
1774da2e2ef6Smrg	sco3.2v2 | sco3.2v[4-9]* | sco5v6*)
1775da2e2ef6Smrg		# Don't forget version if it is 3.2v4 or newer.
1776da2e2ef6Smrg		;;
17771d778f8eSmrg	# This refers to builds using the UEFI calling convention
17781d778f8eSmrg	# (which depends on the architecture) and PE file format.
17791d778f8eSmrg	# Note that this is both a different calling convention and
17801d778f8eSmrg	# different file format than that of GNU-EFI
17811d778f8eSmrg	# (x86_64-w64-mingw32).
17821d778f8eSmrg	uefi)
17831d778f8eSmrg		;;
1784da2e2ef6Smrg	none)
1785da2e2ef6Smrg		;;
17861d778f8eSmrg	kernel* | msvc* )
17874901b09eSmrg		# Restricted further below
17884901b09eSmrg		;;
17891d778f8eSmrg	'')
17901d778f8eSmrg		if test x"$obj" = x
17911d778f8eSmrg		then
17921d778f8eSmrg			echo "Invalid configuration '$1': Blank OS only allowed with explicit machine code file format" 1>&2
17931d778f8eSmrg		fi
17941d778f8eSmrg		;;
1795da2e2ef6Smrg	*)
17961d778f8eSmrg		echo "Invalid configuration '$1': OS '$os' not recognized" 1>&2
17971d778f8eSmrg		exit 1
17981d778f8eSmrg		;;
17991d778f8eSmrgesac
18001d778f8eSmrg
18011d778f8eSmrgcase $obj in
18021d778f8eSmrg	aout* | coff* | elf* | pe*)
18031d778f8eSmrg		;;
18041d778f8eSmrg	'')
18051d778f8eSmrg		# empty is fine
18061d778f8eSmrg		;;
18071d778f8eSmrg	*)
18081d778f8eSmrg		echo "Invalid configuration '$1': Machine code format '$obj' not recognized" 1>&2
18091d778f8eSmrg		exit 1
18101d778f8eSmrg		;;
18111d778f8eSmrgesac
18121d778f8eSmrg
18131d778f8eSmrg# Here we handle the constraint that a (synthetic) cpu and os are
18141d778f8eSmrg# valid only in combination with each other and nowhere else.
18151d778f8eSmrgcase $cpu-$os in
18161d778f8eSmrg	# The "javascript-unknown-ghcjs" triple is used by GHC; we
18171d778f8eSmrg	# accept it here in order to tolerate that, but reject any
18181d778f8eSmrg	# variations.
18191d778f8eSmrg	javascript-ghcjs)
18201d778f8eSmrg		;;
18211d778f8eSmrg	javascript-* | *-ghcjs)
18221d778f8eSmrg		echo "Invalid configuration '$1': cpu '$cpu' is not valid with os '$os$obj'" 1>&2
1823da2e2ef6Smrg		exit 1
1824da2e2ef6Smrg		;;
1825da2e2ef6Smrgesac
1826da2e2ef6Smrg
1827da2e2ef6Smrg# As a final step for OS-related things, validate the OS-kernel combination
1828da2e2ef6Smrg# (given a valid OS), if there is a kernel.
18291d778f8eSmrgcase $kernel-$os-$obj in
18301d778f8eSmrg	linux-gnu*- | linux-android*- | linux-dietlibc*- | linux-llvm*- \
18311d778f8eSmrg		    | linux-mlibc*- | linux-musl*- | linux-newlib*- \
18321d778f8eSmrg		    | linux-relibc*- | linux-uclibc*- )
1833da2e2ef6Smrg		;;
18341d778f8eSmrg	uclinux-uclibc*- )
1835da2e2ef6Smrg		;;
18361d778f8eSmrg	managarm-mlibc*- | managarm-kernel*- )
18374901b09eSmrg		;;
18381d778f8eSmrg	windows*-msvc*-)
18391d778f8eSmrg		;;
18401d778f8eSmrg	-dietlibc*- | -llvm*- | -mlibc*- | -musl*- | -newlib*- | -relibc*- \
18411d778f8eSmrg		    | -uclibc*- )
1842da2e2ef6Smrg		# These are just libc implementations, not actual OSes, and thus
1843da2e2ef6Smrg		# require a kernel.
18441d778f8eSmrg		echo "Invalid configuration '$1': libc '$os' needs explicit kernel." 1>&2
1845da2e2ef6Smrg		exit 1
1846da2e2ef6Smrg		;;
18471d778f8eSmrg	-kernel*- )
18481d778f8eSmrg		echo "Invalid configuration '$1': '$os' needs explicit kernel." 1>&2
18494901b09eSmrg		exit 1
18504901b09eSmrg		;;
18511d778f8eSmrg	*-kernel*- )
18521d778f8eSmrg		echo "Invalid configuration '$1': '$kernel' does not support '$os'." 1>&2
18534901b09eSmrg		exit 1
18544901b09eSmrg		;;
18551d778f8eSmrg	*-msvc*- )
18561d778f8eSmrg		echo "Invalid configuration '$1': '$os' needs 'windows'." 1>&2
18571d778f8eSmrg		exit 1
1858da2e2ef6Smrg		;;
18591d778f8eSmrg	kfreebsd*-gnu*- | kopensolaris*-gnu*-)
1860da2e2ef6Smrg		;;
18611d778f8eSmrg	vxworks-simlinux- | vxworks-simwindows- | vxworks-spe-)
1862da2e2ef6Smrg		;;
18631d778f8eSmrg	nto-qnx*-)
18641d778f8eSmrg		;;
18651d778f8eSmrg	os2-emx-)
18661d778f8eSmrg		;;
18671d778f8eSmrg	*-eabi*- | *-gnueabi*-)
1868da2e2ef6Smrg		;;
18691d778f8eSmrg	none--*)
18701d778f8eSmrg		# None (no kernel, i.e. freestanding / bare metal),
18711d778f8eSmrg		# can be paired with an machine code file format
1872da2e2ef6Smrg		;;
18731d778f8eSmrg	-*-)
1874da2e2ef6Smrg		# Blank kernel with real OS is always fine.
1875da2e2ef6Smrg		;;
18761d778f8eSmrg	--*)
18771d778f8eSmrg		# Blank kernel and OS with real machine code file format is always fine.
18781d778f8eSmrg		;;
18791d778f8eSmrg	*-*-*)
18801d778f8eSmrg		echo "Invalid configuration '$1': Kernel '$kernel' not known to work with OS '$os'." 1>&2
1881da2e2ef6Smrg		exit 1
1882da2e2ef6Smrg		;;
1883da2e2ef6Smrgesac
1884da2e2ef6Smrg
1885145b7b3cSmrg# Here we handle the case where we know the os, and the CPU type, but not the
1886145b7b3cSmrg# manufacturer.  We pick the logical manufacturer.
1887da2e2ef6Smrgcase $vendor in
1888da2e2ef6Smrg	unknown)
1889da2e2ef6Smrg		case $cpu-$os in
1890da2e2ef6Smrg			*-riscix*)
1891145b7b3cSmrg				vendor=acorn
1892145b7b3cSmrg				;;
1893da2e2ef6Smrg			*-sunos*)
1894145b7b3cSmrg				vendor=sun
1895145b7b3cSmrg				;;
1896da2e2ef6Smrg			*-cnk* | *-aix*)
1897145b7b3cSmrg				vendor=ibm
1898145b7b3cSmrg				;;
1899da2e2ef6Smrg			*-beos*)
1900145b7b3cSmrg				vendor=be
1901145b7b3cSmrg				;;
1902da2e2ef6Smrg			*-hpux*)
1903145b7b3cSmrg				vendor=hp
1904145b7b3cSmrg				;;
1905da2e2ef6Smrg			*-mpeix*)
1906145b7b3cSmrg				vendor=hp
1907145b7b3cSmrg				;;
1908da2e2ef6Smrg			*-hiux*)
1909145b7b3cSmrg				vendor=hitachi
1910145b7b3cSmrg				;;
1911da2e2ef6Smrg			*-unos*)
1912145b7b3cSmrg				vendor=crds
1913145b7b3cSmrg				;;
1914da2e2ef6Smrg			*-dgux*)
1915145b7b3cSmrg				vendor=dg
1916145b7b3cSmrg				;;
1917da2e2ef6Smrg			*-luna*)
1918145b7b3cSmrg				vendor=omron
1919145b7b3cSmrg				;;
1920da2e2ef6Smrg			*-genix*)
1921145b7b3cSmrg				vendor=ns
1922145b7b3cSmrg				;;
1923da2e2ef6Smrg			*-clix*)
1924da2e2ef6Smrg				vendor=intergraph
1925da2e2ef6Smrg				;;
1926da2e2ef6Smrg			*-mvs* | *-opened*)
1927da2e2ef6Smrg				vendor=ibm
1928da2e2ef6Smrg				;;
1929da2e2ef6Smrg			*-os400*)
1930145b7b3cSmrg				vendor=ibm
1931145b7b3cSmrg				;;
1932da2e2ef6Smrg			s390-* | s390x-*)
1933145b7b3cSmrg				vendor=ibm
1934145b7b3cSmrg				;;
1935da2e2ef6Smrg			*-ptx*)
1936145b7b3cSmrg				vendor=sequent
1937145b7b3cSmrg				;;
1938da2e2ef6Smrg			*-tpf*)
1939145b7b3cSmrg				vendor=ibm
1940145b7b3cSmrg				;;
1941da2e2ef6Smrg			*-vxsim* | *-vxworks* | *-windiss*)
1942145b7b3cSmrg				vendor=wrs
1943145b7b3cSmrg				;;
1944da2e2ef6Smrg			*-aux*)
1945145b7b3cSmrg				vendor=apple
1946145b7b3cSmrg				;;
1947da2e2ef6Smrg			*-hms*)
1948145b7b3cSmrg				vendor=hitachi
1949145b7b3cSmrg				;;
1950da2e2ef6Smrg			*-mpw* | *-macos*)
1951145b7b3cSmrg				vendor=apple
1952145b7b3cSmrg				;;
1953da2e2ef6Smrg			*-*mint | *-mint[0-9]* | *-*MiNT | *-MiNT[0-9]*)
1954145b7b3cSmrg				vendor=atari
1955145b7b3cSmrg				;;
1956da2e2ef6Smrg			*-vos*)
1957145b7b3cSmrg				vendor=stratus
1958145b7b3cSmrg				;;
1959145b7b3cSmrg		esac
1960145b7b3cSmrg		;;
1961145b7b3cSmrgesac
1962145b7b3cSmrg
19631d778f8eSmrgecho "$cpu-$vendor${kernel:+-$kernel}${os:+-$os}${obj:+-$obj}"
1964145b7b3cSmrgexit
1965145b7b3cSmrg
1966145b7b3cSmrg# Local variables:
1967da2e2ef6Smrg# eval: (add-hook 'before-save-hook 'time-stamp)
1968145b7b3cSmrg# time-stamp-start: "timestamp='"
1969145b7b3cSmrg# time-stamp-format: "%:y-%02m-%02d"
1970145b7b3cSmrg# time-stamp-end: "'"
1971145b7b3cSmrg# End:
1972