14c61c93dSmrg#! /bin/sh
24c61c93dSmrg# Configuration validation subroutine script.
3944bff83Smrg#   Copyright 1992-2023 Free Software Foundation, Inc.
44c61c93dSmrg
5b8df70beSmrg# shellcheck disable=SC2006,SC2268 # see below for rationale
6b8df70beSmrg
7944bff83Smrgtimestamp='2023-01-21'
84c61c93dSmrg
91c80d5b0Smrg# This file is free software; you can redistribute it and/or modify it
101c80d5b0Smrg# under the terms of the GNU General Public License as published by
11944bff83Smrg# the Free Software Foundation, either version 3 of the License, or
124c61c93dSmrg# (at your option) any later version.
134c61c93dSmrg#
141c80d5b0Smrg# This program is distributed in the hope that it will be useful, but
151c80d5b0Smrg# WITHOUT ANY WARRANTY; without even the implied warranty of
161c80d5b0Smrg# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
171c80d5b0Smrg# General Public License for more details.
184c61c93dSmrg#
194c61c93dSmrg# You should have received a copy of the GNU General Public License
20b8df70beSmrg# along with this program; if not, see <https://www.gnu.org/licenses/>.
214c61c93dSmrg#
224c61c93dSmrg# As a special exception to the GNU General Public License, if you
234c61c93dSmrg# distribute this file as part of a program that contains a
244c61c93dSmrg# configuration script generated by Autoconf, you may include it under
251c80d5b0Smrg# the same distribution terms that you use for the rest of that
261c80d5b0Smrg# program.  This Exception is an additional permission under section 7
271c80d5b0Smrg# of the GNU General Public License, version 3 ("GPLv3").
284c61c93dSmrg
294c61c93dSmrg
3041fe0c2aSmrg# Please send patches to <config-patches@gnu.org>.
314c61c93dSmrg#
324c61c93dSmrg# Configuration subroutine to validate and canonicalize a configuration type.
334c61c93dSmrg# Supply the specified configuration type as an argument.
344c61c93dSmrg# If it is invalid, we print an error message on stderr and exit with code 1.
354c61c93dSmrg# Otherwise, we print the canonical config type on stdout and succeed.
364c61c93dSmrg
37d7ffce2aSmrg# You can get the latest version of this script from:
38b8df70beSmrg# https://git.savannah.gnu.org/cgit/config.git/plain/config.sub
39d7ffce2aSmrg
404c61c93dSmrg# This file is supposed to be the same for all GNU packages
414c61c93dSmrg# and recognize all the CPU types, system types and aliases
424c61c93dSmrg# that are meaningful with *any* GNU software.
434c61c93dSmrg# Each package is responsible for reporting which valid configurations
444c61c93dSmrg# it does not support.  The user should be able to distinguish
454c61c93dSmrg# a failure to support a valid configuration from a meaningless
464c61c93dSmrg# configuration.
474c61c93dSmrg
484c61c93dSmrg# The goal of this file is to map all the various variations of a given
494c61c93dSmrg# machine specification into a single specification in the form:
504c61c93dSmrg#	CPU_TYPE-MANUFACTURER-OPERATING_SYSTEM
514c61c93dSmrg# or in some cases, the newer four-part form:
524c61c93dSmrg#	CPU_TYPE-MANUFACTURER-KERNEL-OPERATING_SYSTEM
534c61c93dSmrg# It is wrong to echo any other type of specification.
544c61c93dSmrg
55b8df70beSmrg# The "shellcheck disable" line above the timestamp inhibits complaints
56b8df70beSmrg# about features and limitations of the classic Bourne shell that were
57b8df70beSmrg# superseded or lifted in POSIX.  However, this script identifies a wide
58b8df70beSmrg# variety of pre-POSIX systems that do not have POSIX shells at all, and
59b8df70beSmrg# even some reasonably current systems (Solaris 10 as case-in-point) still
60b8df70beSmrg# have a pre-POSIX /bin/sh.
61b8df70beSmrg
624c61c93dSmrgme=`echo "$0" | sed -e 's,.*/,,'`
634c61c93dSmrg
644c61c93dSmrgusage="\
65b8df70beSmrgUsage: $0 [OPTION] CPU-MFR-OPSYS or ALIAS
664c61c93dSmrg
674c61c93dSmrgCanonicalize a configuration name.
684c61c93dSmrg
69b8df70beSmrgOptions:
704c61c93dSmrg  -h, --help         print this help, then exit
714c61c93dSmrg  -t, --time-stamp   print date of last modification, then exit
724c61c93dSmrg  -v, --version      print version number, then exit
734c61c93dSmrg
744c61c93dSmrgReport bugs and patches to <config-patches@gnu.org>."
754c61c93dSmrg
764c61c93dSmrgversion="\
774c61c93dSmrgGNU config.sub ($timestamp)
784c61c93dSmrg
79944bff83SmrgCopyright 1992-2023 Free Software Foundation, Inc.
804c61c93dSmrg
814c61c93dSmrgThis is free software; see the source for copying conditions.  There is NO
824c61c93dSmrgwarranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE."
834c61c93dSmrg
844c61c93dSmrghelp="
854c61c93dSmrgTry \`$me --help' for more information."
864c61c93dSmrg
874c61c93dSmrg# Parse command line
884c61c93dSmrgwhile test $# -gt 0 ; do
894c61c93dSmrg  case $1 in
904c61c93dSmrg    --time-stamp | --time* | -t )
914c61c93dSmrg       echo "$timestamp" ; exit ;;
924c61c93dSmrg    --version | -v )
934c61c93dSmrg       echo "$version" ; exit ;;
944c61c93dSmrg    --help | --h* | -h )
954c61c93dSmrg       echo "$usage"; exit ;;
964c61c93dSmrg    -- )     # Stop option processing
974c61c93dSmrg       shift; break ;;
984c61c93dSmrg    - )	# Use stdin as input.
994c61c93dSmrg       break ;;
1004c61c93dSmrg    -* )
101b8df70beSmrg       echo "$me: invalid option $1$help" >&2
1024c61c93dSmrg       exit 1 ;;
1034c61c93dSmrg
1044c61c93dSmrg    *local*)
1054c61c93dSmrg       # First pass through any local machine types.
106b8df70beSmrg       echo "$1"
1074c61c93dSmrg       exit ;;
1084c61c93dSmrg
1094c61c93dSmrg    * )
1104c61c93dSmrg       break ;;
1114c61c93dSmrg  esac
1124c61c93dSmrgdone
1134c61c93dSmrg
1144c61c93dSmrgcase $# in
1154c61c93dSmrg 0) echo "$me: missing argument$help" >&2
1164c61c93dSmrg    exit 1;;
1174c61c93dSmrg 1) ;;
1184c61c93dSmrg *) echo "$me: too many arguments$help" >&2
1194c61c93dSmrg    exit 1;;
1204c61c93dSmrgesac
1214c61c93dSmrg
122b8df70beSmrg# Split fields of configuration type
123b8df70beSmrg# shellcheck disable=SC2162
124944bff83Smrgsaved_IFS=$IFS
125b8df70beSmrgIFS="-" read field1 field2 field3 field4 <<EOF
126b8df70beSmrg$1
127b8df70beSmrgEOF
128944bff83SmrgIFS=$saved_IFS
1294c61c93dSmrg
130b8df70beSmrg# Separate into logical components for further validation
131b8df70beSmrgcase $1 in
132b8df70beSmrg	*-*-*-*-*)
133b8df70beSmrg		echo Invalid configuration \`"$1"\': more than four components >&2
134b8df70beSmrg		exit 1
1354c61c93dSmrg		;;
136b8df70beSmrg	*-*-*-*)
137b8df70beSmrg		basic_machine=$field1-$field2
138b8df70beSmrg		basic_os=$field3-$field4
1394c61c93dSmrg		;;
140b8df70beSmrg	*-*-*)
141b8df70beSmrg		# Ambiguous whether COMPANY is present, or skipped and KERNEL-OS is two
142b8df70beSmrg		# parts
143b8df70beSmrg		maybe_os=$field2-$field3
144b8df70beSmrg		case $maybe_os in
145b8df70beSmrg			nto-qnx* | linux-* | uclinux-uclibc* \
146b8df70beSmrg			| uclinux-gnu* | kfreebsd*-gnu* | knetbsd*-gnu* | netbsd*-gnu* \
147b8df70beSmrg			| netbsd*-eabi* | kopensolaris*-gnu* | cloudabi*-eabi* \
148944bff83Smrg			| storm-chaos* | os2-emx* | rtmk-nova* | managarm-*)
149b8df70beSmrg				basic_machine=$field1
150b8df70beSmrg				basic_os=$maybe_os
151b8df70beSmrg				;;
152b8df70beSmrg			android-linux)
153b8df70beSmrg				basic_machine=$field1-unknown
154b8df70beSmrg				basic_os=linux-android
155b8df70beSmrg				;;
156b8df70beSmrg			*)
157b8df70beSmrg				basic_machine=$field1-$field2
158b8df70beSmrg				basic_os=$field3
159b8df70beSmrg				;;
160b8df70beSmrg		esac
1614c61c93dSmrg		;;
162b8df70beSmrg	*-*)
163b8df70beSmrg		# A lone config we happen to match not fitting any pattern
164b8df70beSmrg		case $field1-$field2 in
165b8df70beSmrg			decstation-3100)
166b8df70beSmrg				basic_machine=mips-dec
167b8df70beSmrg				basic_os=
168b8df70beSmrg				;;
169b8df70beSmrg			*-*)
170b8df70beSmrg				# Second component is usually, but not always the OS
171b8df70beSmrg				case $field2 in
172b8df70beSmrg					# Prevent following clause from handling this valid os
173b8df70beSmrg					sun*os*)
174b8df70beSmrg						basic_machine=$field1
175b8df70beSmrg						basic_os=$field2
176b8df70beSmrg						;;
177944bff83Smrg					zephyr*)
178944bff83Smrg						basic_machine=$field1-unknown
179944bff83Smrg						basic_os=$field2
180944bff83Smrg						;;
181b8df70beSmrg					# Manufacturers
182b8df70beSmrg					dec* | mips* | sequent* | encore* | pc533* | sgi* | sony* \
183b8df70beSmrg					| att* | 7300* | 3300* | delta* | motorola* | sun[234]* \
184b8df70beSmrg					| unicom* | ibm* | next | hp | isi* | apollo | altos* \
185b8df70beSmrg					| convergent* | ncr* | news | 32* | 3600* | 3100* \
186b8df70beSmrg					| hitachi* | c[123]* | convex* | sun | crds | omron* | dg \
187b8df70beSmrg					| ultra | tti* | harris | dolphin | highlevel | gould \
188b8df70beSmrg					| cbm | ns | masscomp | apple | axis | knuth | cray \
189b8df70beSmrg					| microblaze* | sim | cisco \
190b8df70beSmrg					| oki | wec | wrs | winbond)
191b8df70beSmrg						basic_machine=$field1-$field2
192b8df70beSmrg						basic_os=
193b8df70beSmrg						;;
194b8df70beSmrg					*)
195b8df70beSmrg						basic_machine=$field1
196b8df70beSmrg						basic_os=$field2
197b8df70beSmrg						;;
198b8df70beSmrg				esac
199b8df70beSmrg			;;
200b8df70beSmrg		esac
2014c61c93dSmrg		;;
202b8df70beSmrg	*)
203b8df70beSmrg		# Convert single-component short-hands not valid as part of
204b8df70beSmrg		# multi-component configurations.
205b8df70beSmrg		case $field1 in
206b8df70beSmrg			386bsd)
207b8df70beSmrg				basic_machine=i386-pc
208b8df70beSmrg				basic_os=bsd
209b8df70beSmrg				;;
210b8df70beSmrg			a29khif)
211b8df70beSmrg				basic_machine=a29k-amd
212b8df70beSmrg				basic_os=udi
213b8df70beSmrg				;;
214b8df70beSmrg			adobe68k)
215b8df70beSmrg				basic_machine=m68010-adobe
216b8df70beSmrg				basic_os=scout
217b8df70beSmrg				;;
218b8df70beSmrg			alliant)
219b8df70beSmrg				basic_machine=fx80-alliant
220b8df70beSmrg				basic_os=
221b8df70beSmrg				;;
222b8df70beSmrg			altos | altos3068)
223b8df70beSmrg				basic_machine=m68k-altos
224b8df70beSmrg				basic_os=
225b8df70beSmrg				;;
226b8df70beSmrg			am29k)
227b8df70beSmrg				basic_machine=a29k-none
228b8df70beSmrg				basic_os=bsd
229b8df70beSmrg				;;
230b8df70beSmrg			amdahl)
231b8df70beSmrg				basic_machine=580-amdahl
232b8df70beSmrg				basic_os=sysv
233b8df70beSmrg				;;
234b8df70beSmrg			amiga)
235b8df70beSmrg				basic_machine=m68k-unknown
236b8df70beSmrg				basic_os=
237b8df70beSmrg				;;
238b8df70beSmrg			amigaos | amigados)
239b8df70beSmrg				basic_machine=m68k-unknown
240b8df70beSmrg				basic_os=amigaos
241b8df70beSmrg				;;
242b8df70beSmrg			amigaunix | amix)
243b8df70beSmrg				basic_machine=m68k-unknown
244b8df70beSmrg				basic_os=sysv4
245b8df70beSmrg				;;
246b8df70beSmrg			apollo68)
247b8df70beSmrg				basic_machine=m68k-apollo
248b8df70beSmrg				basic_os=sysv
249b8df70beSmrg				;;
250b8df70beSmrg			apollo68bsd)
251b8df70beSmrg				basic_machine=m68k-apollo
252b8df70beSmrg				basic_os=bsd
253b8df70beSmrg				;;
254b8df70beSmrg			aros)
255b8df70beSmrg				basic_machine=i386-pc
256b8df70beSmrg				basic_os=aros
257b8df70beSmrg				;;
258b8df70beSmrg			aux)
259b8df70beSmrg				basic_machine=m68k-apple
260b8df70beSmrg				basic_os=aux
261b8df70beSmrg				;;
262b8df70beSmrg			balance)
263b8df70beSmrg				basic_machine=ns32k-sequent
264b8df70beSmrg				basic_os=dynix
265b8df70beSmrg				;;
266b8df70beSmrg			blackfin)
267b8df70beSmrg				basic_machine=bfin-unknown
268b8df70beSmrg				basic_os=linux
269b8df70beSmrg				;;
270b8df70beSmrg			cegcc)
271b8df70beSmrg				basic_machine=arm-unknown
272b8df70beSmrg				basic_os=cegcc
273b8df70beSmrg				;;
274b8df70beSmrg			convex-c1)
275b8df70beSmrg				basic_machine=c1-convex
276b8df70beSmrg				basic_os=bsd
277b8df70beSmrg				;;
278b8df70beSmrg			convex-c2)
279b8df70beSmrg				basic_machine=c2-convex
280b8df70beSmrg				basic_os=bsd
281b8df70beSmrg				;;
282b8df70beSmrg			convex-c32)
283b8df70beSmrg				basic_machine=c32-convex
284b8df70beSmrg				basic_os=bsd
285b8df70beSmrg				;;
286b8df70beSmrg			convex-c34)
287b8df70beSmrg				basic_machine=c34-convex
288b8df70beSmrg				basic_os=bsd
289b8df70beSmrg				;;
290b8df70beSmrg			convex-c38)
291b8df70beSmrg				basic_machine=c38-convex
292b8df70beSmrg				basic_os=bsd
293b8df70beSmrg				;;
294b8df70beSmrg			cray)
295b8df70beSmrg				basic_machine=j90-cray
296b8df70beSmrg				basic_os=unicos
297b8df70beSmrg				;;
298b8df70beSmrg			crds | unos)
299b8df70beSmrg				basic_machine=m68k-crds
300b8df70beSmrg				basic_os=
301b8df70beSmrg				;;
302b8df70beSmrg			da30)
303b8df70beSmrg				basic_machine=m68k-da30
304b8df70beSmrg				basic_os=
305b8df70beSmrg				;;
306b8df70beSmrg			decstation | pmax | pmin | dec3100 | decstatn)
307b8df70beSmrg				basic_machine=mips-dec
308b8df70beSmrg				basic_os=
309b8df70beSmrg				;;
310b8df70beSmrg			delta88)
311b8df70beSmrg				basic_machine=m88k-motorola
312b8df70beSmrg				basic_os=sysv3
313b8df70beSmrg				;;
314b8df70beSmrg			dicos)
315b8df70beSmrg				basic_machine=i686-pc
316b8df70beSmrg				basic_os=dicos
317b8df70beSmrg				;;
318b8df70beSmrg			djgpp)
319b8df70beSmrg				basic_machine=i586-pc
320b8df70beSmrg				basic_os=msdosdjgpp
321b8df70beSmrg				;;
322b8df70beSmrg			ebmon29k)
323b8df70beSmrg				basic_machine=a29k-amd
324b8df70beSmrg				basic_os=ebmon
325b8df70beSmrg				;;
326b8df70beSmrg			es1800 | OSE68k | ose68k | ose | OSE)
327b8df70beSmrg				basic_machine=m68k-ericsson
328b8df70beSmrg				basic_os=ose
329b8df70beSmrg				;;
330b8df70beSmrg			gmicro)
331b8df70beSmrg				basic_machine=tron-gmicro
332b8df70beSmrg				basic_os=sysv
333b8df70beSmrg				;;
334b8df70beSmrg			go32)
335b8df70beSmrg				basic_machine=i386-pc
336b8df70beSmrg				basic_os=go32
337b8df70beSmrg				;;
338b8df70beSmrg			h8300hms)
339b8df70beSmrg				basic_machine=h8300-hitachi
340b8df70beSmrg				basic_os=hms
341b8df70beSmrg				;;
342b8df70beSmrg			h8300xray)
343b8df70beSmrg				basic_machine=h8300-hitachi
344b8df70beSmrg				basic_os=xray
345b8df70beSmrg				;;
346b8df70beSmrg			h8500hms)
347b8df70beSmrg				basic_machine=h8500-hitachi
348b8df70beSmrg				basic_os=hms
349b8df70beSmrg				;;
350b8df70beSmrg			harris)
351b8df70beSmrg				basic_machine=m88k-harris
352b8df70beSmrg				basic_os=sysv3
353b8df70beSmrg				;;
354b8df70beSmrg			hp300 | hp300hpux)
355b8df70beSmrg				basic_machine=m68k-hp
356b8df70beSmrg				basic_os=hpux
357b8df70beSmrg				;;
358b8df70beSmrg			hp300bsd)
359b8df70beSmrg				basic_machine=m68k-hp
360b8df70beSmrg				basic_os=bsd
361b8df70beSmrg				;;
362b8df70beSmrg			hppaosf)
363b8df70beSmrg				basic_machine=hppa1.1-hp
364b8df70beSmrg				basic_os=osf
365b8df70beSmrg				;;
366b8df70beSmrg			hppro)
367b8df70beSmrg				basic_machine=hppa1.1-hp
368b8df70beSmrg				basic_os=proelf
369b8df70beSmrg				;;
370b8df70beSmrg			i386mach)
371b8df70beSmrg				basic_machine=i386-mach
372b8df70beSmrg				basic_os=mach
373b8df70beSmrg				;;
374b8df70beSmrg			isi68 | isi)
375b8df70beSmrg				basic_machine=m68k-isi
376b8df70beSmrg				basic_os=sysv
377b8df70beSmrg				;;
378b8df70beSmrg			m68knommu)
379b8df70beSmrg				basic_machine=m68k-unknown
380b8df70beSmrg				basic_os=linux
381b8df70beSmrg				;;
382b8df70beSmrg			magnum | m3230)
383b8df70beSmrg				basic_machine=mips-mips
384b8df70beSmrg				basic_os=sysv
385b8df70beSmrg				;;
386b8df70beSmrg			merlin)
387b8df70beSmrg				basic_machine=ns32k-utek
388b8df70beSmrg				basic_os=sysv
389b8df70beSmrg				;;
390b8df70beSmrg			mingw64)
391b8df70beSmrg				basic_machine=x86_64-pc
392b8df70beSmrg				basic_os=mingw64
393b8df70beSmrg				;;
394b8df70beSmrg			mingw32)
395b8df70beSmrg				basic_machine=i686-pc
396b8df70beSmrg				basic_os=mingw32
397b8df70beSmrg				;;
398b8df70beSmrg			mingw32ce)
399b8df70beSmrg				basic_machine=arm-unknown
400b8df70beSmrg				basic_os=mingw32ce
401b8df70beSmrg				;;
402b8df70beSmrg			monitor)
403b8df70beSmrg				basic_machine=m68k-rom68k
404b8df70beSmrg				basic_os=coff
405b8df70beSmrg				;;
406b8df70beSmrg			morphos)
407b8df70beSmrg				basic_machine=powerpc-unknown
408b8df70beSmrg				basic_os=morphos
409b8df70beSmrg				;;
410b8df70beSmrg			moxiebox)
411b8df70beSmrg				basic_machine=moxie-unknown
412b8df70beSmrg				basic_os=moxiebox
413b8df70beSmrg				;;
414b8df70beSmrg			msdos)
415b8df70beSmrg				basic_machine=i386-pc
416b8df70beSmrg				basic_os=msdos
417b8df70beSmrg				;;
418b8df70beSmrg			msys)
419b8df70beSmrg				basic_machine=i686-pc
420b8df70beSmrg				basic_os=msys
421b8df70beSmrg				;;
422b8df70beSmrg			mvs)
423b8df70beSmrg				basic_machine=i370-ibm
424b8df70beSmrg				basic_os=mvs
425b8df70beSmrg				;;
426b8df70beSmrg			nacl)
427b8df70beSmrg				basic_machine=le32-unknown
428b8df70beSmrg				basic_os=nacl
429b8df70beSmrg				;;
430b8df70beSmrg			ncr3000)
431b8df70beSmrg				basic_machine=i486-ncr
432b8df70beSmrg				basic_os=sysv4
433b8df70beSmrg				;;
434b8df70beSmrg			netbsd386)
435b8df70beSmrg				basic_machine=i386-pc
436b8df70beSmrg				basic_os=netbsd
437b8df70beSmrg				;;
438b8df70beSmrg			netwinder)
439b8df70beSmrg				basic_machine=armv4l-rebel
440b8df70beSmrg				basic_os=linux
441b8df70beSmrg				;;
442b8df70beSmrg			news | news700 | news800 | news900)
443b8df70beSmrg				basic_machine=m68k-sony
444b8df70beSmrg				basic_os=newsos
445b8df70beSmrg				;;
446b8df70beSmrg			news1000)
447b8df70beSmrg				basic_machine=m68030-sony
448b8df70beSmrg				basic_os=newsos
449b8df70beSmrg				;;
450b8df70beSmrg			necv70)
451b8df70beSmrg				basic_machine=v70-nec
452b8df70beSmrg				basic_os=sysv
453b8df70beSmrg				;;
454b8df70beSmrg			nh3000)
455b8df70beSmrg				basic_machine=m68k-harris
456b8df70beSmrg				basic_os=cxux
457b8df70beSmrg				;;
458b8df70beSmrg			nh[45]000)
459b8df70beSmrg				basic_machine=m88k-harris
460b8df70beSmrg				basic_os=cxux
461b8df70beSmrg				;;
462b8df70beSmrg			nindy960)
463b8df70beSmrg				basic_machine=i960-intel
464b8df70beSmrg				basic_os=nindy
465b8df70beSmrg				;;
466b8df70beSmrg			mon960)
467b8df70beSmrg				basic_machine=i960-intel
468b8df70beSmrg				basic_os=mon960
469b8df70beSmrg				;;
470b8df70beSmrg			nonstopux)
471b8df70beSmrg				basic_machine=mips-compaq
472b8df70beSmrg				basic_os=nonstopux
473b8df70beSmrg				;;
474b8df70beSmrg			os400)
475b8df70beSmrg				basic_machine=powerpc-ibm
476b8df70beSmrg				basic_os=os400
477b8df70beSmrg				;;
478b8df70beSmrg			OSE68000 | ose68000)
479b8df70beSmrg				basic_machine=m68000-ericsson
480b8df70beSmrg				basic_os=ose
481b8df70beSmrg				;;
482b8df70beSmrg			os68k)
483b8df70beSmrg				basic_machine=m68k-none
484b8df70beSmrg				basic_os=os68k
485b8df70beSmrg				;;
486b8df70beSmrg			paragon)
487b8df70beSmrg				basic_machine=i860-intel
488b8df70beSmrg				basic_os=osf
489b8df70beSmrg				;;
490b8df70beSmrg			parisc)
491b8df70beSmrg				basic_machine=hppa-unknown
492b8df70beSmrg				basic_os=linux
493b8df70beSmrg				;;
494b8df70beSmrg			psp)
495b8df70beSmrg				basic_machine=mipsallegrexel-sony
496b8df70beSmrg				basic_os=psp
497b8df70beSmrg				;;
498b8df70beSmrg			pw32)
499b8df70beSmrg				basic_machine=i586-unknown
500b8df70beSmrg				basic_os=pw32
501b8df70beSmrg				;;
502b8df70beSmrg			rdos | rdos64)
503b8df70beSmrg				basic_machine=x86_64-pc
504b8df70beSmrg				basic_os=rdos
505b8df70beSmrg				;;
506b8df70beSmrg			rdos32)
507b8df70beSmrg				basic_machine=i386-pc
508b8df70beSmrg				basic_os=rdos
509b8df70beSmrg				;;
510b8df70beSmrg			rom68k)
511b8df70beSmrg				basic_machine=m68k-rom68k
512b8df70beSmrg				basic_os=coff
513b8df70beSmrg				;;
514b8df70beSmrg			sa29200)
515b8df70beSmrg				basic_machine=a29k-amd
516b8df70beSmrg				basic_os=udi
517b8df70beSmrg				;;
518b8df70beSmrg			sei)
519b8df70beSmrg				basic_machine=mips-sei
520b8df70beSmrg				basic_os=seiux
521b8df70beSmrg				;;
522b8df70beSmrg			sequent)
523b8df70beSmrg				basic_machine=i386-sequent
524b8df70beSmrg				basic_os=
525b8df70beSmrg				;;
526b8df70beSmrg			sps7)
527b8df70beSmrg				basic_machine=m68k-bull
528b8df70beSmrg				basic_os=sysv2
529b8df70beSmrg				;;
530b8df70beSmrg			st2000)
531b8df70beSmrg				basic_machine=m68k-tandem
532b8df70beSmrg				basic_os=
533b8df70beSmrg				;;
534b8df70beSmrg			stratus)
535b8df70beSmrg				basic_machine=i860-stratus
536b8df70beSmrg				basic_os=sysv4
537b8df70beSmrg				;;
538b8df70beSmrg			sun2)
539b8df70beSmrg				basic_machine=m68000-sun
540b8df70beSmrg				basic_os=
541b8df70beSmrg				;;
542b8df70beSmrg			sun2os3)
543b8df70beSmrg				basic_machine=m68000-sun
544b8df70beSmrg				basic_os=sunos3
545b8df70beSmrg				;;
546b8df70beSmrg			sun2os4)
547b8df70beSmrg				basic_machine=m68000-sun
548b8df70beSmrg				basic_os=sunos4
549b8df70beSmrg				;;
550b8df70beSmrg			sun3)
551b8df70beSmrg				basic_machine=m68k-sun
552b8df70beSmrg				basic_os=
553b8df70beSmrg				;;
554b8df70beSmrg			sun3os3)
555b8df70beSmrg				basic_machine=m68k-sun
556b8df70beSmrg				basic_os=sunos3
557b8df70beSmrg				;;
558b8df70beSmrg			sun3os4)
559b8df70beSmrg				basic_machine=m68k-sun
560b8df70beSmrg				basic_os=sunos4
561b8df70beSmrg				;;
562b8df70beSmrg			sun4)
563b8df70beSmrg				basic_machine=sparc-sun
564b8df70beSmrg				basic_os=
565b8df70beSmrg				;;
566b8df70beSmrg			sun4os3)
567b8df70beSmrg				basic_machine=sparc-sun
568b8df70beSmrg				basic_os=sunos3
569b8df70beSmrg				;;
570b8df70beSmrg			sun4os4)
571b8df70beSmrg				basic_machine=sparc-sun
572b8df70beSmrg				basic_os=sunos4
573b8df70beSmrg				;;
574b8df70beSmrg			sun4sol2)
575b8df70beSmrg				basic_machine=sparc-sun
576b8df70beSmrg				basic_os=solaris2
577b8df70beSmrg				;;
578b8df70beSmrg			sun386 | sun386i | roadrunner)
579b8df70beSmrg				basic_machine=i386-sun
580b8df70beSmrg				basic_os=
581b8df70beSmrg				;;
582b8df70beSmrg			sv1)
583b8df70beSmrg				basic_machine=sv1-cray
584b8df70beSmrg				basic_os=unicos
585b8df70beSmrg				;;
586b8df70beSmrg			symmetry)
587b8df70beSmrg				basic_machine=i386-sequent
588b8df70beSmrg				basic_os=dynix
589b8df70beSmrg				;;
590b8df70beSmrg			t3e)
591b8df70beSmrg				basic_machine=alphaev5-cray
592b8df70beSmrg				basic_os=unicos
593b8df70beSmrg				;;
594b8df70beSmrg			t90)
595b8df70beSmrg				basic_machine=t90-cray
596b8df70beSmrg				basic_os=unicos
597b8df70beSmrg				;;
598b8df70beSmrg			toad1)
599b8df70beSmrg				basic_machine=pdp10-xkl
600b8df70beSmrg				basic_os=tops20
601b8df70beSmrg				;;
602b8df70beSmrg			tpf)
603b8df70beSmrg				basic_machine=s390x-ibm
604b8df70beSmrg				basic_os=tpf
605b8df70beSmrg				;;
606b8df70beSmrg			udi29k)
607b8df70beSmrg				basic_machine=a29k-amd
608b8df70beSmrg				basic_os=udi
609b8df70beSmrg				;;
610b8df70beSmrg			ultra3)
611b8df70beSmrg				basic_machine=a29k-nyu
612b8df70beSmrg				basic_os=sym1
613b8df70beSmrg				;;
614b8df70beSmrg			v810 | necv810)
615b8df70beSmrg				basic_machine=v810-nec
616b8df70beSmrg				basic_os=none
617b8df70beSmrg				;;
618b8df70beSmrg			vaxv)
619b8df70beSmrg				basic_machine=vax-dec
620b8df70beSmrg				basic_os=sysv
621b8df70beSmrg				;;
622b8df70beSmrg			vms)
623b8df70beSmrg				basic_machine=vax-dec
624b8df70beSmrg				basic_os=vms
625b8df70beSmrg				;;
626b8df70beSmrg			vsta)
627b8df70beSmrg				basic_machine=i386-pc
628b8df70beSmrg				basic_os=vsta
629b8df70beSmrg				;;
630b8df70beSmrg			vxworks960)
631b8df70beSmrg				basic_machine=i960-wrs
632b8df70beSmrg				basic_os=vxworks
633b8df70beSmrg				;;
634b8df70beSmrg			vxworks68)
635b8df70beSmrg				basic_machine=m68k-wrs
636b8df70beSmrg				basic_os=vxworks
637b8df70beSmrg				;;
638b8df70beSmrg			vxworks29k)
639b8df70beSmrg				basic_machine=a29k-wrs
640b8df70beSmrg				basic_os=vxworks
641b8df70beSmrg				;;
642b8df70beSmrg			xbox)
643b8df70beSmrg				basic_machine=i686-pc
644b8df70beSmrg				basic_os=mingw32
645b8df70beSmrg				;;
646b8df70beSmrg			ymp)
647b8df70beSmrg				basic_machine=ymp-cray
648b8df70beSmrg				basic_os=unicos
649b8df70beSmrg				;;
650b8df70beSmrg			*)
651b8df70beSmrg				basic_machine=$1
652b8df70beSmrg				basic_os=
653b8df70beSmrg				;;
654b8df70beSmrg		esac
6554c61c93dSmrg		;;
6564c61c93dSmrgesac
6574c61c93dSmrg
658b8df70beSmrg# Decode 1-component or ad-hoc basic machines
6594c61c93dSmrgcase $basic_machine in
660b8df70beSmrg	# Here we handle the default manufacturer of certain CPU types.  It is in
661b8df70beSmrg	# some cases the only manufacturer, in others, it is the most popular.
662b8df70beSmrg	w89k)
663b8df70beSmrg		cpu=hppa1.1
664b8df70beSmrg		vendor=winbond
66541fe0c2aSmrg		;;
666b8df70beSmrg	op50n)
667b8df70beSmrg		cpu=hppa1.1
668b8df70beSmrg		vendor=oki
6694c61c93dSmrg		;;
670b8df70beSmrg	op60c)
671b8df70beSmrg		cpu=hppa1.1
672b8df70beSmrg		vendor=oki
6734c61c93dSmrg		;;
674b8df70beSmrg	ibm*)
675b8df70beSmrg		cpu=i370
676b8df70beSmrg		vendor=ibm
6774c61c93dSmrg		;;
678b8df70beSmrg	orion105)
679b8df70beSmrg		cpu=clipper
680b8df70beSmrg		vendor=highlevel
6811c80d5b0Smrg		;;
682b8df70beSmrg	mac | mpw | mac-mpw)
683b8df70beSmrg		cpu=m68k
684b8df70beSmrg		vendor=apple
6851c80d5b0Smrg		;;
686b8df70beSmrg	pmac | pmac-mpw)
687b8df70beSmrg		cpu=powerpc
688b8df70beSmrg		vendor=apple
6891c80d5b0Smrg		;;
6901c80d5b0Smrg
6914c61c93dSmrg	# Recognize the various machine names and aliases which stand
6924c61c93dSmrg	# for a CPU type and a company and sometimes even an OS.
6934c61c93dSmrg	3b1 | 7300 | 7300-att | att-7300 | pc7300 | safari | unixpc)
694b8df70beSmrg		cpu=m68000
695b8df70beSmrg		vendor=att
6964c61c93dSmrg		;;
6974c61c93dSmrg	3b*)
698b8df70beSmrg		cpu=we32k
699b8df70beSmrg		vendor=att
7004c61c93dSmrg		;;
701d7ffce2aSmrg	bluegene*)
702b8df70beSmrg		cpu=powerpc
703b8df70beSmrg		vendor=ibm
704b8df70beSmrg		basic_os=cnk
7054c61c93dSmrg		;;
7064c61c93dSmrg	decsystem10* | dec10*)
707b8df70beSmrg		cpu=pdp10
708b8df70beSmrg		vendor=dec
709b8df70beSmrg		basic_os=tops10
7104c61c93dSmrg		;;
7114c61c93dSmrg	decsystem20* | dec20*)
712b8df70beSmrg		cpu=pdp10
713b8df70beSmrg		vendor=dec
714b8df70beSmrg		basic_os=tops20
7154c61c93dSmrg		;;
7164c61c93dSmrg	delta | 3300 | motorola-3300 | motorola-delta \
7174c61c93dSmrg	      | 3300-motorola | delta-motorola)
718b8df70beSmrg		cpu=m68k
719b8df70beSmrg		vendor=motorola
7204c61c93dSmrg		;;
721b8df70beSmrg	dpx2*)
722b8df70beSmrg		cpu=m68k
723b8df70beSmrg		vendor=bull
724b8df70beSmrg		basic_os=sysv3
7254c61c93dSmrg		;;
7264c61c93dSmrg	encore | umax | mmax)
727b8df70beSmrg		cpu=ns32k
728b8df70beSmrg		vendor=encore
7294c61c93dSmrg		;;
730b8df70beSmrg	elxsi)
731b8df70beSmrg		cpu=elxsi
732b8df70beSmrg		vendor=elxsi
733b8df70beSmrg		basic_os=${basic_os:-bsd}
7344c61c93dSmrg		;;
7354c61c93dSmrg	fx2800)
736b8df70beSmrg		cpu=i860
737b8df70beSmrg		vendor=alliant
7384c61c93dSmrg		;;
7394c61c93dSmrg	genix)
740b8df70beSmrg		cpu=ns32k
741b8df70beSmrg		vendor=ns
7424c61c93dSmrg		;;
7434c61c93dSmrg	h3050r* | hiux*)
744b8df70beSmrg		cpu=hppa1.1
745b8df70beSmrg		vendor=hitachi
746b8df70beSmrg		basic_os=hiuxwe2
7474c61c93dSmrg		;;
7484c61c93dSmrg	hp3k9[0-9][0-9] | hp9[0-9][0-9])
749b8df70beSmrg		cpu=hppa1.0
750b8df70beSmrg		vendor=hp
7514c61c93dSmrg		;;
7524c61c93dSmrg	hp9k2[0-9][0-9] | hp9k31[0-9])
753b8df70beSmrg		cpu=m68000
754b8df70beSmrg		vendor=hp
7554c61c93dSmrg		;;
7564c61c93dSmrg	hp9k3[2-9][0-9])
757b8df70beSmrg		cpu=m68k
758b8df70beSmrg		vendor=hp
7594c61c93dSmrg		;;
7604c61c93dSmrg	hp9k6[0-9][0-9] | hp6[0-9][0-9])
761b8df70beSmrg		cpu=hppa1.0
762b8df70beSmrg		vendor=hp
7634c61c93dSmrg		;;
7644c61c93dSmrg	hp9k7[0-79][0-9] | hp7[0-79][0-9])
765b8df70beSmrg		cpu=hppa1.1
766b8df70beSmrg		vendor=hp
7674c61c93dSmrg		;;
7684c61c93dSmrg	hp9k78[0-9] | hp78[0-9])
7694c61c93dSmrg		# FIXME: really hppa2.0-hp
770b8df70beSmrg		cpu=hppa1.1
771b8df70beSmrg		vendor=hp
7724c61c93dSmrg		;;
7734c61c93dSmrg	hp9k8[67]1 | hp8[67]1 | hp9k80[24] | hp80[24] | hp9k8[78]9 | hp8[78]9 | hp9k893 | hp893)
7744c61c93dSmrg		# FIXME: really hppa2.0-hp
775b8df70beSmrg		cpu=hppa1.1
776b8df70beSmrg		vendor=hp
7774c61c93dSmrg		;;
7784c61c93dSmrg	hp9k8[0-9][13679] | hp8[0-9][13679])
779b8df70beSmrg		cpu=hppa1.1
780b8df70beSmrg		vendor=hp
7814c61c93dSmrg		;;
7824c61c93dSmrg	hp9k8[0-9][0-9] | hp8[0-9][0-9])
783b8df70beSmrg		cpu=hppa1.0
784b8df70beSmrg		vendor=hp
7854c61c93dSmrg		;;
7864c61c93dSmrg	i*86v32)
787b8df70beSmrg		cpu=`echo "$1" | sed -e 's/86.*/86/'`
788b8df70beSmrg		vendor=pc
789b8df70beSmrg		basic_os=sysv32
7904c61c93dSmrg		;;
7914c61c93dSmrg	i*86v4*)
792b8df70beSmrg		cpu=`echo "$1" | sed -e 's/86.*/86/'`
793b8df70beSmrg		vendor=pc
794b8df70beSmrg		basic_os=sysv4
7954c61c93dSmrg		;;
7964c61c93dSmrg	i*86v)
797b8df70beSmrg		cpu=`echo "$1" | sed -e 's/86.*/86/'`
798b8df70beSmrg		vendor=pc
799b8df70beSmrg		basic_os=sysv
8004c61c93dSmrg		;;
8014c61c93dSmrg	i*86sol2)
802b8df70beSmrg		cpu=`echo "$1" | sed -e 's/86.*/86/'`
803b8df70beSmrg		vendor=pc
804b8df70beSmrg		basic_os=solaris2
8054c61c93dSmrg		;;
806b8df70beSmrg	j90 | j90-cray)
807b8df70beSmrg		cpu=j90
808b8df70beSmrg		vendor=cray
809b8df70beSmrg		basic_os=${basic_os:-unicos}
8104c61c93dSmrg		;;
8114c61c93dSmrg	iris | iris4d)
812b8df70beSmrg		cpu=mips
813b8df70beSmrg		vendor=sgi
814b8df70beSmrg		case $basic_os in
815b8df70beSmrg		    irix*)
8164c61c93dSmrg			;;
8174c61c93dSmrg		    *)
818b8df70beSmrg			basic_os=irix4
8194c61c93dSmrg			;;
8204c61c93dSmrg		esac
8214c61c93dSmrg		;;
8224c61c93dSmrg	miniframe)
823b8df70beSmrg		cpu=m68000
824b8df70beSmrg		vendor=convergent
8254c61c93dSmrg		;;
826b8df70beSmrg	*mint | mint[0-9]* | *MiNT | *MiNT[0-9]*)
827b8df70beSmrg		cpu=m68k
828b8df70beSmrg		vendor=atari
829b8df70beSmrg		basic_os=mint
8304c61c93dSmrg		;;
8314c61c93dSmrg	news-3600 | risc-news)
832b8df70beSmrg		cpu=mips
833b8df70beSmrg		vendor=sony
834b8df70beSmrg		basic_os=newsos
835b8df70beSmrg		;;
836b8df70beSmrg	next | m*-next)
837b8df70beSmrg		cpu=m68k
838b8df70beSmrg		vendor=next
839b8df70beSmrg		case $basic_os in
840b8df70beSmrg		    openstep*)
841b8df70beSmrg		        ;;
842b8df70beSmrg		    nextstep*)
8434c61c93dSmrg			;;
844b8df70beSmrg		    ns2*)
845b8df70beSmrg		      basic_os=nextstep2
8464c61c93dSmrg			;;
8474c61c93dSmrg		    *)
848b8df70beSmrg		      basic_os=nextstep3
8494c61c93dSmrg			;;
8504c61c93dSmrg		esac
8514c61c93dSmrg		;;
8524c61c93dSmrg	np1)
853b8df70beSmrg		cpu=np1
854b8df70beSmrg		vendor=gould
8554c61c93dSmrg		;;
8564c61c93dSmrg	op50n-* | op60c-*)
857b8df70beSmrg		cpu=hppa1.1
858b8df70beSmrg		vendor=oki
859b8df70beSmrg		basic_os=proelf
8604c61c93dSmrg		;;
8614c61c93dSmrg	pa-hitachi)
862b8df70beSmrg		cpu=hppa1.1
863b8df70beSmrg		vendor=hitachi
864b8df70beSmrg		basic_os=hiuxwe2
8654c61c93dSmrg		;;
8664c61c93dSmrg	pbd)
867b8df70beSmrg		cpu=sparc
868b8df70beSmrg		vendor=tti
8694c61c93dSmrg		;;
8704c61c93dSmrg	pbb)
871b8df70beSmrg		cpu=m68k
872b8df70beSmrg		vendor=tti
8734c61c93dSmrg		;;
874b8df70beSmrg	pc532)
875b8df70beSmrg		cpu=ns32k
876b8df70beSmrg		vendor=pc532
8774c61c93dSmrg		;;
8784c61c93dSmrg	pn)
879b8df70beSmrg		cpu=pn
880b8df70beSmrg		vendor=gould
8814c61c93dSmrg		;;
882b8df70beSmrg	power)
883b8df70beSmrg		cpu=power
884b8df70beSmrg		vendor=ibm
8854c61c93dSmrg		;;
8864c61c93dSmrg	ps2)
887b8df70beSmrg		cpu=i386
888b8df70beSmrg		vendor=ibm
8894c61c93dSmrg		;;
8904c61c93dSmrg	rm[46]00)
891b8df70beSmrg		cpu=mips
892b8df70beSmrg		vendor=siemens
8934c61c93dSmrg		;;
8944c61c93dSmrg	rtpc | rtpc-*)
895b8df70beSmrg		cpu=romp
896b8df70beSmrg		vendor=ibm
8974c61c93dSmrg		;;
898b8df70beSmrg	sde)
899b8df70beSmrg		cpu=mipsisa32
900b8df70beSmrg		vendor=sde
901b8df70beSmrg		basic_os=${basic_os:-elf}
9024c61c93dSmrg		;;
903b8df70beSmrg	simso-wrs)
904b8df70beSmrg		cpu=sparclite
905b8df70beSmrg		vendor=wrs
906b8df70beSmrg		basic_os=vxworks
9074c61c93dSmrg		;;
908b8df70beSmrg	tower | tower-32)
909b8df70beSmrg		cpu=m68k
910b8df70beSmrg		vendor=ncr
9114c61c93dSmrg		;;
912b8df70beSmrg	vpp*|vx|vx-*)
913b8df70beSmrg		cpu=f301
914b8df70beSmrg		vendor=fujitsu
9154c61c93dSmrg		;;
916b8df70beSmrg	w65)
917b8df70beSmrg		cpu=w65
918b8df70beSmrg		vendor=wdc
9194c61c93dSmrg		;;
920b8df70beSmrg	w89k-*)
921b8df70beSmrg		cpu=hppa1.1
922b8df70beSmrg		vendor=winbond
923b8df70beSmrg		basic_os=proelf
9244c61c93dSmrg		;;
925b8df70beSmrg	none)
926b8df70beSmrg		cpu=none
927b8df70beSmrg		vendor=none
9284c61c93dSmrg		;;
929b8df70beSmrg	leon|leon[3-9])
930b8df70beSmrg		cpu=sparc
931b8df70beSmrg		vendor=$basic_machine
9324c61c93dSmrg		;;
933b8df70beSmrg	leon-*|leon[3-9]-*)
934b8df70beSmrg		cpu=sparc
935b8df70beSmrg		vendor=`echo "$basic_machine" | sed 's/-.*//'`
9364c61c93dSmrg		;;
937b8df70beSmrg
938b8df70beSmrg	*-*)
939b8df70beSmrg		# shellcheck disable=SC2162
940944bff83Smrg		saved_IFS=$IFS
941b8df70beSmrg		IFS="-" read cpu vendor <<EOF
942b8df70beSmrg$basic_machine
943b8df70beSmrgEOF
944944bff83Smrg		IFS=$saved_IFS
9454c61c93dSmrg		;;
946b8df70beSmrg	# We use `pc' rather than `unknown'
947b8df70beSmrg	# because (1) that's what they normally are, and
948b8df70beSmrg	# (2) the word "unknown" tends to confuse beginning users.
949b8df70beSmrg	i*86 | x86_64)
950b8df70beSmrg		cpu=$basic_machine
951b8df70beSmrg		vendor=pc
9524c61c93dSmrg		;;
953b8df70beSmrg	# These rules are duplicated from below for sake of the special case above;
954b8df70beSmrg	# i.e. things that normalized to x86 arches should also default to "pc"
955b8df70beSmrg	pc98)
956b8df70beSmrg		cpu=i386
957b8df70beSmrg		vendor=pc
9584c61c93dSmrg		;;
959b8df70beSmrg	x64 | amd64)
960b8df70beSmrg		cpu=x86_64
961b8df70beSmrg		vendor=pc
9624c61c93dSmrg		;;
963b8df70beSmrg	# Recognize the basic CPU types without company name.
964b8df70beSmrg	*)
965b8df70beSmrg		cpu=$basic_machine
966b8df70beSmrg		vendor=unknown
9671c80d5b0Smrg		;;
968b8df70beSmrgesac
969b8df70beSmrg
970b8df70beSmrgunset -v basic_machine
971b8df70beSmrg
972b8df70beSmrg# Decode basic machines in the full and proper CPU-Company form.
973b8df70beSmrgcase $cpu-$vendor in
974b8df70beSmrg	# Here we handle the default manufacturer of certain CPU types in canonical form. It is in
975b8df70beSmrg	# some cases the only manufacturer, in others, it is the most popular.
976b8df70beSmrg	craynv-unknown)
977b8df70beSmrg		vendor=cray
978b8df70beSmrg		basic_os=${basic_os:-unicosmp}
9794c61c93dSmrg		;;
980b8df70beSmrg	c90-unknown | c90-cray)
981b8df70beSmrg		vendor=cray
982b8df70beSmrg		basic_os=${Basic_os:-unicos}
9834c61c93dSmrg		;;
984b8df70beSmrg	fx80-unknown)
985b8df70beSmrg		vendor=alliant
9864c61c93dSmrg		;;
987b8df70beSmrg	romp-unknown)
988b8df70beSmrg		vendor=ibm
9894c61c93dSmrg		;;
990b8df70beSmrg	mmix-unknown)
991b8df70beSmrg		vendor=knuth
9924c61c93dSmrg		;;
993b8df70beSmrg	microblaze-unknown | microblazeel-unknown)
994b8df70beSmrg		vendor=xilinx
9954c61c93dSmrg		;;
996b8df70beSmrg	rs6000-unknown)
997b8df70beSmrg		vendor=ibm
9984c61c93dSmrg		;;
999b8df70beSmrg	vax-unknown)
1000b8df70beSmrg		vendor=dec
10014c61c93dSmrg		;;
1002b8df70beSmrg	pdp11-unknown)
1003b8df70beSmrg		vendor=dec
10044c61c93dSmrg		;;
1005b8df70beSmrg	we32k-unknown)
1006b8df70beSmrg		vendor=att
10074c61c93dSmrg		;;
1008b8df70beSmrg	cydra-unknown)
1009b8df70beSmrg		vendor=cydrome
10104c61c93dSmrg		;;
1011b8df70beSmrg	i370-ibm*)
1012b8df70beSmrg		vendor=ibm
10134c61c93dSmrg		;;
1014b8df70beSmrg	orion-unknown)
1015b8df70beSmrg		vendor=highlevel
10164c61c93dSmrg		;;
1017b8df70beSmrg	xps-unknown | xps100-unknown)
1018b8df70beSmrg		cpu=xps100
1019b8df70beSmrg		vendor=honeywell
10204c61c93dSmrg		;;
1021b8df70beSmrg
1022b8df70beSmrg	# Here we normalize CPU types with a missing or matching vendor
1023944bff83Smrg	armh-unknown | armh-alt)
1024944bff83Smrg		cpu=armv7l
1025944bff83Smrg		vendor=alt
1026944bff83Smrg		basic_os=${basic_os:-linux-gnueabihf}
1027944bff83Smrg		;;
1028b8df70beSmrg	dpx20-unknown | dpx20-bull)
1029b8df70beSmrg		cpu=rs6000
1030b8df70beSmrg		vendor=bull
1031b8df70beSmrg		basic_os=${basic_os:-bosx}
10324c61c93dSmrg		;;
1033b8df70beSmrg
1034b8df70beSmrg	# Here we normalize CPU types irrespective of the vendor
1035b8df70beSmrg	amd64-*)
1036b8df70beSmrg		cpu=x86_64
10374c61c93dSmrg		;;
1038b8df70beSmrg	blackfin-*)
1039b8df70beSmrg		cpu=bfin
1040b8df70beSmrg		basic_os=linux
10414c61c93dSmrg		;;
1042b8df70beSmrg	c54x-*)
1043b8df70beSmrg		cpu=tic54x
10444c61c93dSmrg		;;
1045b8df70beSmrg	c55x-*)
1046b8df70beSmrg		cpu=tic55x
10474c61c93dSmrg		;;
1048b8df70beSmrg	c6x-*)
1049b8df70beSmrg		cpu=tic6x
10504c61c93dSmrg		;;
1051b8df70beSmrg	e500v[12]-*)
1052b8df70beSmrg		cpu=powerpc
1053b8df70beSmrg		basic_os=${basic_os}"spe"
10544c61c93dSmrg		;;
1055b8df70beSmrg	mips3*-*)
1056b8df70beSmrg		cpu=mips64
10574c61c93dSmrg		;;
1058b8df70beSmrg	ms1-*)
1059b8df70beSmrg		cpu=mt
10604c61c93dSmrg		;;
1061b8df70beSmrg	m68knommu-*)
1062b8df70beSmrg		cpu=m68k
1063b8df70beSmrg		basic_os=linux
10644c61c93dSmrg		;;
1065b8df70beSmrg	m9s12z-* | m68hcs12z-* | hcs12z-* | s12z-*)
1066b8df70beSmrg		cpu=s12z
10674c61c93dSmrg		;;
1068b8df70beSmrg	openrisc-*)
1069b8df70beSmrg		cpu=or32
10704c61c93dSmrg		;;
1071b8df70beSmrg	parisc-*)
1072b8df70beSmrg		cpu=hppa
1073b8df70beSmrg		basic_os=linux
10744c61c93dSmrg		;;
1075b8df70beSmrg	pentium-* | p5-* | k5-* | k6-* | nexgen-* | viac3-*)
1076b8df70beSmrg		cpu=i586
10774c61c93dSmrg		;;
1078944bff83Smrg	pentiumpro-* | p6-* | 6x86-* | athlon-* | athlon_*-*)
1079b8df70beSmrg		cpu=i686
10804c61c93dSmrg		;;
1081b8df70beSmrg	pentiumii-* | pentium2-* | pentiumiii-* | pentium3-*)
1082b8df70beSmrg		cpu=i686
10834c61c93dSmrg		;;
1084b8df70beSmrg	pentium4-*)
1085b8df70beSmrg		cpu=i786
10864c61c93dSmrg		;;
1087b8df70beSmrg	pc98-*)
1088b8df70beSmrg		cpu=i386
10894c61c93dSmrg		;;
1090b8df70beSmrg	ppc-* | ppcbe-*)
1091b8df70beSmrg		cpu=powerpc
10924c61c93dSmrg		;;
1093b8df70beSmrg	ppcle-* | powerpclittle-*)
1094b8df70beSmrg		cpu=powerpcle
10954c61c93dSmrg		;;
1096b8df70beSmrg	ppc64-*)
1097b8df70beSmrg		cpu=powerpc64
10981c80d5b0Smrg		;;
1099b8df70beSmrg	ppc64le-* | powerpc64little-*)
1100b8df70beSmrg		cpu=powerpc64le
11014c61c93dSmrg		;;
1102b8df70beSmrg	sb1-*)
1103b8df70beSmrg		cpu=mipsisa64sb1
11044c61c93dSmrg		;;
1105b8df70beSmrg	sb1el-*)
1106b8df70beSmrg		cpu=mipsisa64sb1el
11074c61c93dSmrg		;;
1108b8df70beSmrg	sh5e[lb]-*)
1109b8df70beSmrg		cpu=`echo "$cpu" | sed 's/^\(sh.\)e\(.\)$/\1\2e/'`
11104c61c93dSmrg		;;
1111b8df70beSmrg	spur-*)
1112b8df70beSmrg		cpu=spur
11134c61c93dSmrg		;;
1114b8df70beSmrg	strongarm-* | thumb-*)
1115b8df70beSmrg		cpu=arm
11164c61c93dSmrg		;;
1117b8df70beSmrg	tx39-*)
1118b8df70beSmrg		cpu=mipstx39
11194c61c93dSmrg		;;
1120b8df70beSmrg	tx39el-*)
1121b8df70beSmrg		cpu=mipstx39el
11224c61c93dSmrg		;;
1123b8df70beSmrg	x64-*)
1124b8df70beSmrg		cpu=x86_64
11254c61c93dSmrg		;;
1126b8df70beSmrg	xscale-* | xscalee[bl]-*)
1127b8df70beSmrg		cpu=`echo "$cpu" | sed 's/^xscale/arm/'`
11284c61c93dSmrg		;;
1129944bff83Smrg	arm64-* | aarch64le-*)
1130b8df70beSmrg		cpu=aarch64
11314c61c93dSmrg		;;
1132b8df70beSmrg
1133b8df70beSmrg	# Recognize the canonical CPU Types that limit and/or modify the
1134b8df70beSmrg	# company names they are paired with.
1135b8df70beSmrg	cr16-*)
1136b8df70beSmrg		basic_os=${basic_os:-elf}
11374c61c93dSmrg		;;
1138b8df70beSmrg	crisv32-* | etraxfs*-*)
1139b8df70beSmrg		cpu=crisv32
1140b8df70beSmrg		vendor=axis
11414c61c93dSmrg		;;
1142b8df70beSmrg	cris-* | etrax*-*)
1143b8df70beSmrg		cpu=cris
1144b8df70beSmrg		vendor=axis
11454c61c93dSmrg		;;
1146b8df70beSmrg	crx-*)
1147b8df70beSmrg		basic_os=${basic_os:-elf}
11484c61c93dSmrg		;;
1149b8df70beSmrg	neo-tandem)
1150b8df70beSmrg		cpu=neo
1151b8df70beSmrg		vendor=tandem
11524c61c93dSmrg		;;
1153b8df70beSmrg	nse-tandem)
1154b8df70beSmrg		cpu=nse
1155b8df70beSmrg		vendor=tandem
11564c61c93dSmrg		;;
1157b8df70beSmrg	nsr-tandem)
1158b8df70beSmrg		cpu=nsr
1159b8df70beSmrg		vendor=tandem
11604c61c93dSmrg		;;
1161b8df70beSmrg	nsv-tandem)
1162b8df70beSmrg		cpu=nsv
1163b8df70beSmrg		vendor=tandem
11644c61c93dSmrg		;;
1165b8df70beSmrg	nsx-tandem)
1166b8df70beSmrg		cpu=nsx
1167b8df70beSmrg		vendor=tandem
11684c61c93dSmrg		;;
1169b8df70beSmrg	mipsallegrexel-sony)
1170b8df70beSmrg		cpu=mipsallegrexel
1171b8df70beSmrg		vendor=sony
11724c61c93dSmrg		;;
1173b8df70beSmrg	tile*-*)
1174b8df70beSmrg		basic_os=${basic_os:-linux-gnu}
11754c61c93dSmrg		;;
1176b8df70beSmrg
11774c61c93dSmrg	*)
1178b8df70beSmrg		# Recognize the canonical CPU types that are allowed with any
1179b8df70beSmrg		# company name.
1180b8df70beSmrg		case $cpu in
1181b8df70beSmrg			1750a | 580 \
1182b8df70beSmrg			| a29k \
1183b8df70beSmrg			| aarch64 | aarch64_be \
1184b8df70beSmrg			| abacus \
1185b8df70beSmrg			| alpha | alphaev[4-8] | alphaev56 | alphaev6[78] \
1186b8df70beSmrg			| alpha64 | alpha64ev[4-8] | alpha64ev56 | alpha64ev6[78] \
1187b8df70beSmrg			| alphapca5[67] | alpha64pca5[67] \
1188b8df70beSmrg			| am33_2.0 \
1189b8df70beSmrg			| amdgcn \
1190b8df70beSmrg			| arc | arceb | arc32 | arc64 \
1191b8df70beSmrg			| arm | arm[lb]e | arme[lb] | armv* \
1192b8df70beSmrg			| avr | avr32 \
1193b8df70beSmrg			| asmjs \
1194b8df70beSmrg			| ba \
1195b8df70beSmrg			| be32 | be64 \
1196b8df70beSmrg			| bfin | bpf | bs2000 \
1197b8df70beSmrg			| c[123]* | c30 | [cjt]90 | c4x \
1198b8df70beSmrg			| c8051 | clipper | craynv | csky | cydra \
1199b8df70beSmrg			| d10v | d30v | dlx | dsp16xx \
1200b8df70beSmrg			| e2k | elxsi | epiphany \
1201b8df70beSmrg			| f30[01] | f700 | fido | fr30 | frv | ft32 | fx80 \
1202b8df70beSmrg			| h8300 | h8500 \
1203b8df70beSmrg			| hppa | hppa1.[01] | hppa2.0 | hppa2.0[nw] | hppa64 \
1204b8df70beSmrg			| hexagon \
1205b8df70beSmrg			| i370 | i*86 | i860 | i960 | ia16 | ia64 \
1206b8df70beSmrg			| ip2k | iq2000 \
1207b8df70beSmrg			| k1om \
1208b8df70beSmrg			| le32 | le64 \
1209b8df70beSmrg			| lm32 \
1210944bff83Smrg			| loongarch32 | loongarch64 \
1211b8df70beSmrg			| m32c | m32r | m32rle \
1212b8df70beSmrg			| m5200 | m68000 | m680[012346]0 | m68360 | m683?2 | m68k \
1213b8df70beSmrg			| m6811 | m68hc11 | m6812 | m68hc12 | m68hcs12x \
1214b8df70beSmrg			| m88110 | m88k | maxq | mb | mcore | mep | metag \
1215b8df70beSmrg			| microblaze | microblazeel \
1216b8df70beSmrg			| mips | mipsbe | mipseb | mipsel | mipsle \
1217b8df70beSmrg			| mips16 \
1218b8df70beSmrg			| mips64 | mips64eb | mips64el \
1219b8df70beSmrg			| mips64octeon | mips64octeonel \
1220b8df70beSmrg			| mips64orion | mips64orionel \
1221b8df70beSmrg			| mips64r5900 | mips64r5900el \
1222b8df70beSmrg			| mips64vr | mips64vrel \
1223b8df70beSmrg			| mips64vr4100 | mips64vr4100el \
1224b8df70beSmrg			| mips64vr4300 | mips64vr4300el \
1225b8df70beSmrg			| mips64vr5000 | mips64vr5000el \
1226b8df70beSmrg			| mips64vr5900 | mips64vr5900el \
1227b8df70beSmrg			| mipsisa32 | mipsisa32el \
1228b8df70beSmrg			| mipsisa32r2 | mipsisa32r2el \
1229b8df70beSmrg			| mipsisa32r3 | mipsisa32r3el \
1230b8df70beSmrg			| mipsisa32r5 | mipsisa32r5el \
1231b8df70beSmrg			| mipsisa32r6 | mipsisa32r6el \
1232b8df70beSmrg			| mipsisa64 | mipsisa64el \
1233b8df70beSmrg			| mipsisa64r2 | mipsisa64r2el \
1234b8df70beSmrg			| mipsisa64r3 | mipsisa64r3el \
1235b8df70beSmrg			| mipsisa64r5 | mipsisa64r5el \
1236b8df70beSmrg			| mipsisa64r6 | mipsisa64r6el \
1237b8df70beSmrg			| mipsisa64sb1 | mipsisa64sb1el \
1238b8df70beSmrg			| mipsisa64sr71k | mipsisa64sr71kel \
1239b8df70beSmrg			| mipsr5900 | mipsr5900el \
1240b8df70beSmrg			| mipstx39 | mipstx39el \
1241b8df70beSmrg			| mmix \
1242b8df70beSmrg			| mn10200 | mn10300 \
1243b8df70beSmrg			| moxie \
1244b8df70beSmrg			| mt \
1245b8df70beSmrg			| msp430 \
1246b8df70beSmrg			| nds32 | nds32le | nds32be \
1247b8df70beSmrg			| nfp \
1248b8df70beSmrg			| nios | nios2 | nios2eb | nios2el \
1249b8df70beSmrg			| none | np1 | ns16k | ns32k | nvptx \
1250b8df70beSmrg			| open8 \
1251b8df70beSmrg			| or1k* \
1252b8df70beSmrg			| or32 \
1253b8df70beSmrg			| orion \
1254b8df70beSmrg			| picochip \
1255b8df70beSmrg			| pdp10 | pdp11 | pj | pjl | pn | power \
1256b8df70beSmrg			| powerpc | powerpc64 | powerpc64le | powerpcle | powerpcspe \
1257b8df70beSmrg			| pru \
1258b8df70beSmrg			| pyramid \
1259b8df70beSmrg			| riscv | riscv32 | riscv32be | riscv64 | riscv64be \
1260b8df70beSmrg			| rl78 | romp | rs6000 | rx \
1261b8df70beSmrg			| s390 | s390x \
1262b8df70beSmrg			| score \
1263b8df70beSmrg			| sh | shl \
1264b8df70beSmrg			| sh[1234] | sh[24]a | sh[24]ae[lb] | sh[23]e | she[lb] | sh[lb]e \
1265b8df70beSmrg			| sh[1234]e[lb] |  sh[12345][lb]e | sh[23]ele | sh64 | sh64le \
1266b8df70beSmrg			| sparc | sparc64 | sparc64b | sparc64v | sparc86x | sparclet \
1267b8df70beSmrg			| sparclite \
1268b8df70beSmrg			| sparcv8 | sparcv9 | sparcv9b | sparcv9v | sv1 | sx* \
1269b8df70beSmrg			| spu \
1270b8df70beSmrg			| tahoe \
1271b8df70beSmrg			| thumbv7* \
1272b8df70beSmrg			| tic30 | tic4x | tic54x | tic55x | tic6x | tic80 \
1273b8df70beSmrg			| tron \
1274b8df70beSmrg			| ubicom32 \
1275b8df70beSmrg			| v70 | v850 | v850e | v850e1 | v850es | v850e2 | v850e2v3 \
1276b8df70beSmrg			| vax \
1277b8df70beSmrg			| visium \
1278b8df70beSmrg			| w65 \
1279b8df70beSmrg			| wasm32 | wasm64 \
1280b8df70beSmrg			| we32k \
1281b8df70beSmrg			| x86 | x86_64 | xc16x | xgate | xps100 \
1282b8df70beSmrg			| xstormy16 | xtensa* \
1283b8df70beSmrg			| ymp \
1284b8df70beSmrg			| z8k | z80)
1285b8df70beSmrg				;;
1286b8df70beSmrg
1287b8df70beSmrg			*)
1288b8df70beSmrg				echo Invalid configuration \`"$1"\': machine \`"$cpu-$vendor"\' not recognized 1>&2
1289b8df70beSmrg				exit 1
1290b8df70beSmrg				;;
1291b8df70beSmrg		esac
12924c61c93dSmrg		;;
12934c61c93dSmrgesac
12944c61c93dSmrg
12954c61c93dSmrg# Here we canonicalize certain aliases for manufacturers.
1296b8df70beSmrgcase $vendor in
1297b8df70beSmrg	digital*)
1298b8df70beSmrg		vendor=dec
12994c61c93dSmrg		;;
1300b8df70beSmrg	commodore*)
1301b8df70beSmrg		vendor=cbm
13024c61c93dSmrg		;;
13034c61c93dSmrg	*)
13044c61c93dSmrg		;;
13054c61c93dSmrgesac
13064c61c93dSmrg
13074c61c93dSmrg# Decode manufacturer-specific aliases for certain operating systems.
13084c61c93dSmrg
1309b8df70beSmrgif test x$basic_os != x
13104c61c93dSmrgthen
1311b8df70beSmrg
1312944bff83Smrg# First recognize some ad-hoc cases, or perhaps split kernel-os, or else just
1313b8df70beSmrg# set os.
1314b8df70beSmrgcase $basic_os in
1315b8df70beSmrg	gnu/linux*)
1316b8df70beSmrg		kernel=linux
1317b8df70beSmrg		os=`echo "$basic_os" | sed -e 's|gnu/linux|gnu|'`
1318b8df70beSmrg		;;
1319b8df70beSmrg	os2-emx)
1320b8df70beSmrg		kernel=os2
1321b8df70beSmrg		os=`echo "$basic_os" | sed -e 's|os2-emx|emx|'`
1322b8df70beSmrg		;;
1323b8df70beSmrg	nto-qnx*)
1324b8df70beSmrg		kernel=nto
1325b8df70beSmrg		os=`echo "$basic_os" | sed -e 's|nto-qnx|qnx|'`
1326b8df70beSmrg		;;
1327b8df70beSmrg	*-*)
1328b8df70beSmrg		# shellcheck disable=SC2162
1329944bff83Smrg		saved_IFS=$IFS
1330b8df70beSmrg		IFS="-" read kernel os <<EOF
1331b8df70beSmrg$basic_os
1332b8df70beSmrgEOF
1333944bff83Smrg		IFS=$saved_IFS
1334b8df70beSmrg		;;
1335b8df70beSmrg	# Default OS when just kernel was specified
1336b8df70beSmrg	nto*)
1337b8df70beSmrg		kernel=nto
1338b8df70beSmrg		os=`echo "$basic_os" | sed -e 's|nto|qnx|'`
1339b8df70beSmrg		;;
1340b8df70beSmrg	linux*)
1341b8df70beSmrg		kernel=linux
1342b8df70beSmrg		os=`echo "$basic_os" | sed -e 's|linux|gnu|'`
1343b8df70beSmrg		;;
1344944bff83Smrg	managarm*)
1345944bff83Smrg		kernel=managarm
1346944bff83Smrg		os=`echo "$basic_os" | sed -e 's|managarm|mlibc|'`
1347944bff83Smrg		;;
1348b8df70beSmrg	*)
1349b8df70beSmrg		kernel=
1350b8df70beSmrg		os=$basic_os
1351b8df70beSmrg		;;
1352b8df70beSmrgesac
1353b8df70beSmrg
1354b8df70beSmrg# Now, normalize the OS (knowing we just have one component, it's not a kernel,
1355b8df70beSmrg# etc.)
13564c61c93dSmrgcase $os in
1357b8df70beSmrg	# First match some system type aliases that might get confused
1358b8df70beSmrg	# with valid system types.
1359b8df70beSmrg	# solaris* is a basic system type, with this one exception.
1360b8df70beSmrg	auroraux)
1361b8df70beSmrg		os=auroraux
1362d7ffce2aSmrg		;;
1363b8df70beSmrg	bluegene*)
1364b8df70beSmrg		os=cnk
13654c61c93dSmrg		;;
1366b8df70beSmrg	solaris1 | solaris1.*)
1367b8df70beSmrg		os=`echo "$os" | sed -e 's|solaris1|sunos4|'`
13684c61c93dSmrg		;;
1369b8df70beSmrg	solaris)
1370b8df70beSmrg		os=solaris2
13714c61c93dSmrg		;;
1372b8df70beSmrg	unixware*)
1373b8df70beSmrg		os=sysv4.2uw
13744c61c93dSmrg		;;
1375b8df70beSmrg	# es1800 is here to avoid being matched by es* (a different OS)
1376b8df70beSmrg	es1800*)
1377b8df70beSmrg		os=ose
13784c61c93dSmrg		;;
1379b8df70beSmrg	# Some version numbers need modification
1380b8df70beSmrg	chorusos*)
1381b8df70beSmrg		os=chorusos
13824c61c93dSmrg		;;
1383b8df70beSmrg	isc)
1384b8df70beSmrg		os=isc2.2
13854c61c93dSmrg		;;
1386b8df70beSmrg	sco6)
1387b8df70beSmrg		os=sco5v6
13884c61c93dSmrg		;;
1389b8df70beSmrg	sco5)
1390b8df70beSmrg		os=sco3.2v5
13914c61c93dSmrg		;;
1392b8df70beSmrg	sco4)
1393b8df70beSmrg		os=sco3.2v4
13944c61c93dSmrg		;;
1395b8df70beSmrg	sco3.2.[4-9]*)
1396b8df70beSmrg		os=`echo "$os" | sed -e 's/sco3.2./sco3.2v/'`
13974c61c93dSmrg		;;
1398b8df70beSmrg	sco*v* | scout)
1399b8df70beSmrg		# Don't match below
14004c61c93dSmrg		;;
1401b8df70beSmrg	sco*)
1402b8df70beSmrg		os=sco3.2v2
14034c61c93dSmrg		;;
1404b8df70beSmrg	psos*)
1405b8df70beSmrg		os=psos
14064c61c93dSmrg		;;
1407b8df70beSmrg	qnx*)
1408b8df70beSmrg		os=qnx
14094c61c93dSmrg		;;
1410b8df70beSmrg	hiux*)
1411b8df70beSmrg		os=hiuxwe2
14124c61c93dSmrg		;;
1413b8df70beSmrg	lynx*178)
1414b8df70beSmrg		os=lynxos178
14154c61c93dSmrg		;;
1416b8df70beSmrg	lynx*5)
1417b8df70beSmrg		os=lynxos5
14184c61c93dSmrg		;;
1419b8df70beSmrg	lynxos*)
1420b8df70beSmrg		# don't get caught up in next wildcard
14214c61c93dSmrg		;;
1422b8df70beSmrg	lynx*)
1423b8df70beSmrg		os=lynxos
14244c61c93dSmrg		;;
1425b8df70beSmrg	mac[0-9]*)
1426b8df70beSmrg		os=`echo "$os" | sed -e 's|mac|macos|'`
14274c61c93dSmrg		;;
1428b8df70beSmrg	opened*)
1429b8df70beSmrg		os=openedition
14304c61c93dSmrg		;;
1431b8df70beSmrg	os400*)
1432b8df70beSmrg		os=os400
14334c61c93dSmrg		;;
1434b8df70beSmrg	sunos5*)
1435b8df70beSmrg		os=`echo "$os" | sed -e 's|sunos5|solaris2|'`
14364c61c93dSmrg		;;
1437b8df70beSmrg	sunos6*)
1438b8df70beSmrg		os=`echo "$os" | sed -e 's|sunos6|solaris3|'`
14394c61c93dSmrg		;;
1440b8df70beSmrg	wince*)
1441b8df70beSmrg		os=wince
14424c61c93dSmrg		;;
1443b8df70beSmrg	utek*)
1444b8df70beSmrg		os=bsd
14454c61c93dSmrg		;;
1446b8df70beSmrg	dynix*)
1447b8df70beSmrg		os=bsd
14484c61c93dSmrg		;;
1449b8df70beSmrg	acis*)
1450b8df70beSmrg		os=aos
14514c61c93dSmrg		;;
1452b8df70beSmrg	atheos*)
1453b8df70beSmrg		os=atheos
14544c61c93dSmrg		;;
1455b8df70beSmrg	syllable*)
1456b8df70beSmrg		os=syllable
14574c61c93dSmrg		;;
1458b8df70beSmrg	386bsd)
1459b8df70beSmrg		os=bsd
14604c61c93dSmrg		;;
1461b8df70beSmrg	ctix* | uts*)
1462b8df70beSmrg		os=sysv
14634c61c93dSmrg		;;
1464b8df70beSmrg	nova*)
1465b8df70beSmrg		os=rtmk-nova
14664c61c93dSmrg		;;
1467b8df70beSmrg	ns2)
1468b8df70beSmrg		os=nextstep2
14694c61c93dSmrg		;;
1470b8df70beSmrg	# Preserve the version number of sinix5.
1471b8df70beSmrg	sinix5.*)
1472b8df70beSmrg		os=`echo "$os" | sed -e 's|sinix|sysv|'`
14734c61c93dSmrg		;;
1474b8df70beSmrg	sinix*)
1475b8df70beSmrg		os=sysv4
14764c61c93dSmrg		;;
1477b8df70beSmrg	tpf*)
1478b8df70beSmrg		os=tpf
14794c61c93dSmrg		;;
1480b8df70beSmrg	triton*)
1481b8df70beSmrg		os=sysv3
14824c61c93dSmrg		;;
1483b8df70beSmrg	oss*)
1484b8df70beSmrg		os=sysv3
14854c61c93dSmrg		;;
1486b8df70beSmrg	svr4*)
1487b8df70beSmrg		os=sysv4
14884c61c93dSmrg		;;
1489b8df70beSmrg	svr3)
1490b8df70beSmrg		os=sysv3
14914c61c93dSmrg		;;
1492b8df70beSmrg	sysvr4)
1493b8df70beSmrg		os=sysv4
14944c61c93dSmrg		;;
1495b8df70beSmrg	ose*)
1496b8df70beSmrg		os=ose
14974c61c93dSmrg		;;
1498b8df70beSmrg	*mint | mint[0-9]* | *MiNT | MiNT[0-9]*)
1499b8df70beSmrg		os=mint
15004c61c93dSmrg		;;
1501b8df70beSmrg	dicos*)
1502b8df70beSmrg		os=dicos
15031c80d5b0Smrg		;;
1504b8df70beSmrg	pikeos*)
1505b8df70beSmrg		# Until real need of OS specific support for
1506b8df70beSmrg		# particular features comes up, bare metal
1507b8df70beSmrg		# configurations are quite functional.
1508b8df70beSmrg		case $cpu in
1509b8df70beSmrg		    arm*)
1510b8df70beSmrg			os=eabi
1511b8df70beSmrg			;;
1512b8df70beSmrg		    *)
1513b8df70beSmrg			os=elf
1514b8df70beSmrg			;;
1515b8df70beSmrg		esac
15164c61c93dSmrg		;;
15174c61c93dSmrg	*)
1518b8df70beSmrg		# No normalization, but not necessarily accepted, that comes below.
15194c61c93dSmrg		;;
15204c61c93dSmrgesac
1521b8df70beSmrg
15224c61c93dSmrgelse
15234c61c93dSmrg
15244c61c93dSmrg# Here we handle the default operating systems that come with various machines.
15254c61c93dSmrg# The value should be what the vendor currently ships out the door with their
15264c61c93dSmrg# machine or put another way, the most popular os provided with the machine.
15274c61c93dSmrg
15284c61c93dSmrg# Note that if you're going to try to match "-MANUFACTURER" here (say,
15294c61c93dSmrg# "-sun"), then you have to tell the case statement up towards the top
15304c61c93dSmrg# that MANUFACTURER isn't an operating system.  Otherwise, code above
15314c61c93dSmrg# will signal an error saying that MANUFACTURER isn't an operating
15324c61c93dSmrg# system, and we'll never get to this point.
15334c61c93dSmrg
1534b8df70beSmrgkernel=
1535b8df70beSmrgcase $cpu-$vendor in
15361c80d5b0Smrg	score-*)
1537b8df70beSmrg		os=elf
15384c61c93dSmrg		;;
15391c80d5b0Smrg	spu-*)
1540b8df70beSmrg		os=elf
15414c61c93dSmrg		;;
15424c61c93dSmrg	*-acorn)
1543b8df70beSmrg		os=riscix1.2
15444c61c93dSmrg		;;
15454c61c93dSmrg	arm*-rebel)
1546b8df70beSmrg		kernel=linux
1547b8df70beSmrg		os=gnu
15484c61c93dSmrg		;;
15494c61c93dSmrg	arm*-semi)
1550b8df70beSmrg		os=aout
15514c61c93dSmrg		;;
15521c80d5b0Smrg	c4x-* | tic4x-*)
1553b8df70beSmrg		os=coff
15541c80d5b0Smrg		;;
155541fe0c2aSmrg	c8051-*)
1556b8df70beSmrg		os=elf
1557b8df70beSmrg		;;
1558b8df70beSmrg	clipper-intergraph)
1559b8df70beSmrg		os=clix
156041fe0c2aSmrg		;;
15611c80d5b0Smrg	hexagon-*)
1562b8df70beSmrg		os=elf
15634c61c93dSmrg		;;
1564d7ffce2aSmrg	tic54x-*)
1565b8df70beSmrg		os=coff
1566d7ffce2aSmrg		;;
1567d7ffce2aSmrg	tic55x-*)
1568b8df70beSmrg		os=coff
1569d7ffce2aSmrg		;;
1570d7ffce2aSmrg	tic6x-*)
1571b8df70beSmrg		os=coff
1572d7ffce2aSmrg		;;
15734c61c93dSmrg	# This must come before the *-dec entry.
15744c61c93dSmrg	pdp10-*)
1575b8df70beSmrg		os=tops20
15764c61c93dSmrg		;;
15774c61c93dSmrg	pdp11-*)
1578b8df70beSmrg		os=none
15794c61c93dSmrg		;;
15804c61c93dSmrg	*-dec | vax-*)
1581b8df70beSmrg		os=ultrix4.2
15824c61c93dSmrg		;;
15834c61c93dSmrg	m68*-apollo)
1584b8df70beSmrg		os=domain
15854c61c93dSmrg		;;
15864c61c93dSmrg	i386-sun)
1587b8df70beSmrg		os=sunos4.0.2
15884c61c93dSmrg		;;
15894c61c93dSmrg	m68000-sun)
1590b8df70beSmrg		os=sunos3
15914c61c93dSmrg		;;
15924c61c93dSmrg	m68*-cisco)
1593b8df70beSmrg		os=aout
15944c61c93dSmrg		;;
15951c80d5b0Smrg	mep-*)
1596b8df70beSmrg		os=elf
15974c61c93dSmrg		;;
15984c61c93dSmrg	mips*-cisco)
1599b8df70beSmrg		os=elf
16004c61c93dSmrg		;;
16014c61c93dSmrg	mips*-*)
1602b8df70beSmrg		os=elf
16034c61c93dSmrg		;;
16044c61c93dSmrg	or32-*)
1605b8df70beSmrg		os=coff
16064c61c93dSmrg		;;
16074c61c93dSmrg	*-tti)	# must be before sparc entry or we get the wrong os.
1608b8df70beSmrg		os=sysv3
16094c61c93dSmrg		;;
16104c61c93dSmrg	sparc-* | *-sun)
1611b8df70beSmrg		os=sunos4.1.1
16124c61c93dSmrg		;;
1613b8df70beSmrg	pru-*)
1614b8df70beSmrg		os=elf
16154c61c93dSmrg		;;
1616b8df70beSmrg	*-be)
1617b8df70beSmrg		os=beos
16184c61c93dSmrg		;;
16194c61c93dSmrg	*-ibm)
1620b8df70beSmrg		os=aix
16214c61c93dSmrg		;;
16221c80d5b0Smrg	*-knuth)
1623b8df70beSmrg		os=mmixware
16244c61c93dSmrg		;;
16254c61c93dSmrg	*-wec)
1626b8df70beSmrg		os=proelf
16274c61c93dSmrg		;;
16284c61c93dSmrg	*-winbond)
1629b8df70beSmrg		os=proelf
16304c61c93dSmrg		;;
16314c61c93dSmrg	*-oki)
1632b8df70beSmrg		os=proelf
16334c61c93dSmrg		;;
16344c61c93dSmrg	*-hp)
1635b8df70beSmrg		os=hpux
16364c61c93dSmrg		;;
16374c61c93dSmrg	*-hitachi)
1638b8df70beSmrg		os=hiux
16394c61c93dSmrg		;;
16404c61c93dSmrg	i860-* | *-att | *-ncr | *-altos | *-motorola | *-convergent)
1641b8df70beSmrg		os=sysv
16424c61c93dSmrg		;;
16434c61c93dSmrg	*-cbm)
1644b8df70beSmrg		os=amigaos
16454c61c93dSmrg		;;
16464c61c93dSmrg	*-dg)
1647b8df70beSmrg		os=dgux
16484c61c93dSmrg		;;
16494c61c93dSmrg	*-dolphin)
1650b8df70beSmrg		os=sysv3
16514c61c93dSmrg		;;
16524c61c93dSmrg	m68k-ccur)
1653b8df70beSmrg		os=rtu
16544c61c93dSmrg		;;
16554c61c93dSmrg	m88k-omron*)
1656b8df70beSmrg		os=luna
16574c61c93dSmrg		;;
1658b8df70beSmrg	*-next)
1659b8df70beSmrg		os=nextstep
16604c61c93dSmrg		;;
16614c61c93dSmrg	*-sequent)
1662b8df70beSmrg		os=ptx
16634c61c93dSmrg		;;
16644c61c93dSmrg	*-crds)
1665b8df70beSmrg		os=unos
16664c61c93dSmrg		;;
16674c61c93dSmrg	*-ns)
1668b8df70beSmrg		os=genix
16694c61c93dSmrg		;;
16704c61c93dSmrg	i370-*)
1671b8df70beSmrg		os=mvs
16724c61c93dSmrg		;;
16734c61c93dSmrg	*-gould)
1674b8df70beSmrg		os=sysv
16754c61c93dSmrg		;;
16764c61c93dSmrg	*-highlevel)
1677b8df70beSmrg		os=bsd
16784c61c93dSmrg		;;
16794c61c93dSmrg	*-encore)
1680b8df70beSmrg		os=bsd
16814c61c93dSmrg		;;
16824c61c93dSmrg	*-sgi)
1683b8df70beSmrg		os=irix
16844c61c93dSmrg		;;
16854c61c93dSmrg	*-siemens)
1686b8df70beSmrg		os=sysv4
16874c61c93dSmrg		;;
16884c61c93dSmrg	*-masscomp)
1689b8df70beSmrg		os=rtu
16904c61c93dSmrg		;;
16914c61c93dSmrg	f30[01]-fujitsu | f700-fujitsu)
1692b8df70beSmrg		os=uxpv
16934c61c93dSmrg		;;
16944c61c93dSmrg	*-rom68k)
1695b8df70beSmrg		os=coff
16964c61c93dSmrg		;;
16974c61c93dSmrg	*-*bug)
1698b8df70beSmrg		os=coff
16994c61c93dSmrg		;;
17004c61c93dSmrg	*-apple)
1701b8df70beSmrg		os=macos
17024c61c93dSmrg		;;
17034c61c93dSmrg	*-atari*)
1704b8df70beSmrg		os=mint
1705b8df70beSmrg		;;
1706b8df70beSmrg	*-wrs)
1707b8df70beSmrg		os=vxworks
17084c61c93dSmrg		;;
17094c61c93dSmrg	*)
1710b8df70beSmrg		os=none
17114c61c93dSmrg		;;
17124c61c93dSmrgesac
1713b8df70beSmrg
17144c61c93dSmrgfi
17154c61c93dSmrg
1716b8df70beSmrg# Now, validate our (potentially fixed-up) OS.
1717b8df70beSmrgcase $os in
1718b8df70beSmrg	# Sometimes we do "kernel-libc", so those need to count as OSes.
1719944bff83Smrg	musl* | newlib* | relibc* | uclibc*)
1720b8df70beSmrg		;;
1721b8df70beSmrg	# Likewise for "kernel-abi"
1722b8df70beSmrg	eabi* | gnueabi*)
1723b8df70beSmrg		;;
1724b8df70beSmrg	# VxWorks passes extra cpu info in the 4th filed.
1725b8df70beSmrg	simlinux | simwindows | spe)
1726b8df70beSmrg		;;
1727b8df70beSmrg	# Now accept the basic system types.
1728b8df70beSmrg	# The portable systems comes first.
1729b8df70beSmrg	# Each alternative MUST end in a * to match a version number.
1730b8df70beSmrg	gnu* | android* | bsd* | mach* | minix* | genix* | ultrix* | irix* \
1731b8df70beSmrg	     | *vms* | esix* | aix* | cnk* | sunos | sunos[34]* \
1732b8df70beSmrg	     | hpux* | unos* | osf* | luna* | dgux* | auroraux* | solaris* \
1733b8df70beSmrg	     | sym* |  plan9* | psp* | sim* | xray* | os68k* | v88r* \
1734b8df70beSmrg	     | hiux* | abug | nacl* | netware* | windows* \
1735b8df70beSmrg	     | os9* | macos* | osx* | ios* \
1736b8df70beSmrg	     | mpw* | magic* | mmixware* | mon960* | lnews* \
1737b8df70beSmrg	     | amigaos* | amigados* | msdos* | newsos* | unicos* | aof* \
1738b8df70beSmrg	     | aos* | aros* | cloudabi* | sortix* | twizzler* \
1739b8df70beSmrg	     | nindy* | vxsim* | vxworks* | ebmon* | hms* | mvs* \
1740b8df70beSmrg	     | clix* | riscos* | uniplus* | iris* | isc* | rtu* | xenix* \
1741b8df70beSmrg	     | mirbsd* | netbsd* | dicos* | openedition* | ose* \
1742b8df70beSmrg	     | bitrig* | openbsd* | secbsd* | solidbsd* | libertybsd* | os108* \
1743b8df70beSmrg	     | ekkobsd* | freebsd* | riscix* | lynxos* | os400* \
1744b8df70beSmrg	     | bosx* | nextstep* | cxux* | aout* | elf* | oabi* \
1745b8df70beSmrg	     | ptx* | coff* | ecoff* | winnt* | domain* | vsta* \
1746b8df70beSmrg	     | udi* | lites* | ieee* | go32* | aux* | hcos* \
1747b8df70beSmrg	     | chorusrdb* | cegcc* | glidix* | serenity* \
1748b8df70beSmrg	     | cygwin* | msys* | pe* | moss* | proelf* | rtems* \
1749b8df70beSmrg	     | midipix* | mingw32* | mingw64* | mint* \
1750b8df70beSmrg	     | uxpv* | beos* | mpeix* | udk* | moxiebox* \
1751b8df70beSmrg	     | interix* | uwin* | mks* | rhapsody* | darwin* \
1752b8df70beSmrg	     | openstep* | oskit* | conix* | pw32* | nonstopux* \
1753b8df70beSmrg	     | storm-chaos* | tops10* | tenex* | tops20* | its* \
1754b8df70beSmrg	     | os2* | vos* | palmos* | uclinux* | nucleus* | morphos* \
1755b8df70beSmrg	     | scout* | superux* | sysv* | rtmk* | tpf* | windiss* \
1756b8df70beSmrg	     | powermax* | dnix* | nx6 | nx7 | sei* | dragonfly* \
1757b8df70beSmrg	     | skyos* | haiku* | rdos* | toppers* | drops* | es* \
1758b8df70beSmrg	     | onefs* | tirtos* | phoenix* | fuchsia* | redox* | bme* \
1759b8df70beSmrg	     | midnightbsd* | amdhsa* | unleashed* | emscripten* | wasi* \
1760944bff83Smrg	     | nsk* | powerunix* | genode* | zvmoe* | qnx* | emx* | zephyr* \
1761944bff83Smrg	     | fiwix* | mlibc* )
1762b8df70beSmrg		;;
1763b8df70beSmrg	# This one is extra strict with allowed versions
1764b8df70beSmrg	sco3.2v2 | sco3.2v[4-9]* | sco5v6*)
1765b8df70beSmrg		# Don't forget version if it is 3.2v4 or newer.
1766b8df70beSmrg		;;
1767b8df70beSmrg	none)
1768b8df70beSmrg		;;
1769944bff83Smrg	kernel* )
1770944bff83Smrg		# Restricted further below
1771944bff83Smrg		;;
1772b8df70beSmrg	*)
1773b8df70beSmrg		echo Invalid configuration \`"$1"\': OS \`"$os"\' not recognized 1>&2
1774b8df70beSmrg		exit 1
1775b8df70beSmrg		;;
1776b8df70beSmrgesac
1777b8df70beSmrg
1778b8df70beSmrg# As a final step for OS-related things, validate the OS-kernel combination
1779b8df70beSmrg# (given a valid OS), if there is a kernel.
1780b8df70beSmrgcase $kernel-$os in
1781944bff83Smrg	linux-gnu* | linux-dietlibc* | linux-android* | linux-newlib* \
1782944bff83Smrg		   | linux-musl* | linux-relibc* | linux-uclibc* | linux-mlibc* )
1783b8df70beSmrg		;;
1784b8df70beSmrg	uclinux-uclibc* )
1785b8df70beSmrg		;;
1786944bff83Smrg	managarm-mlibc* | managarm-kernel* )
1787944bff83Smrg		;;
1788944bff83Smrg	-dietlibc* | -newlib* | -musl* | -relibc* | -uclibc* | -mlibc* )
1789b8df70beSmrg		# These are just libc implementations, not actual OSes, and thus
1790b8df70beSmrg		# require a kernel.
1791b8df70beSmrg		echo "Invalid configuration \`$1': libc \`$os' needs explicit kernel." 1>&2
1792b8df70beSmrg		exit 1
1793b8df70beSmrg		;;
1794944bff83Smrg	-kernel* )
1795944bff83Smrg		echo "Invalid configuration \`$1': \`$os' needs explicit kernel." 1>&2
1796944bff83Smrg		exit 1
1797944bff83Smrg		;;
1798944bff83Smrg	*-kernel* )
1799944bff83Smrg		echo "Invalid configuration \`$1': \`$kernel' does not support \`$os'." 1>&2
1800944bff83Smrg		exit 1
1801944bff83Smrg		;;
1802b8df70beSmrg	kfreebsd*-gnu* | kopensolaris*-gnu*)
1803b8df70beSmrg		;;
1804b8df70beSmrg	vxworks-simlinux | vxworks-simwindows | vxworks-spe)
1805b8df70beSmrg		;;
1806b8df70beSmrg	nto-qnx*)
1807b8df70beSmrg		;;
1808b8df70beSmrg	os2-emx)
1809b8df70beSmrg		;;
1810b8df70beSmrg	*-eabi* | *-gnueabi*)
1811b8df70beSmrg		;;
1812b8df70beSmrg	-*)
1813b8df70beSmrg		# Blank kernel with real OS is always fine.
1814b8df70beSmrg		;;
1815b8df70beSmrg	*-*)
1816b8df70beSmrg		echo "Invalid configuration \`$1': Kernel \`$kernel' not known to work with OS \`$os'." 1>&2
1817b8df70beSmrg		exit 1
1818b8df70beSmrg		;;
1819b8df70beSmrgesac
1820b8df70beSmrg
18214c61c93dSmrg# Here we handle the case where we know the os, and the CPU type, but not the
18224c61c93dSmrg# manufacturer.  We pick the logical manufacturer.
1823b8df70beSmrgcase $vendor in
1824b8df70beSmrg	unknown)
1825b8df70beSmrg		case $cpu-$os in
1826b8df70beSmrg			*-riscix*)
18274c61c93dSmrg				vendor=acorn
18284c61c93dSmrg				;;
1829b8df70beSmrg			*-sunos*)
18304c61c93dSmrg				vendor=sun
18314c61c93dSmrg				;;
1832b8df70beSmrg			*-cnk* | *-aix*)
18334c61c93dSmrg				vendor=ibm
18344c61c93dSmrg				;;
1835b8df70beSmrg			*-beos*)
18364c61c93dSmrg				vendor=be
18374c61c93dSmrg				;;
1838b8df70beSmrg			*-hpux*)
18394c61c93dSmrg				vendor=hp
18404c61c93dSmrg				;;
1841b8df70beSmrg			*-mpeix*)
18424c61c93dSmrg				vendor=hp
18434c61c93dSmrg				;;
1844b8df70beSmrg			*-hiux*)
18454c61c93dSmrg				vendor=hitachi
18464c61c93dSmrg				;;
1847b8df70beSmrg			*-unos*)
18484c61c93dSmrg				vendor=crds
18494c61c93dSmrg				;;
1850b8df70beSmrg			*-dgux*)
18514c61c93dSmrg				vendor=dg
18524c61c93dSmrg				;;
1853b8df70beSmrg			*-luna*)
18544c61c93dSmrg				vendor=omron
18554c61c93dSmrg				;;
1856b8df70beSmrg			*-genix*)
18574c61c93dSmrg				vendor=ns
18584c61c93dSmrg				;;
1859b8df70beSmrg			*-clix*)
1860b8df70beSmrg				vendor=intergraph
1861b8df70beSmrg				;;
1862b8df70beSmrg			*-mvs* | *-opened*)
1863b8df70beSmrg				vendor=ibm
1864b8df70beSmrg				;;
1865b8df70beSmrg			*-os400*)
18664c61c93dSmrg				vendor=ibm
18674c61c93dSmrg				;;
1868b8df70beSmrg			s390-* | s390x-*)
18694c61c93dSmrg				vendor=ibm
18704c61c93dSmrg				;;
1871b8df70beSmrg			*-ptx*)
18724c61c93dSmrg				vendor=sequent
18734c61c93dSmrg				;;
1874b8df70beSmrg			*-tpf*)
18754c61c93dSmrg				vendor=ibm
18764c61c93dSmrg				;;
1877b8df70beSmrg			*-vxsim* | *-vxworks* | *-windiss*)
18784c61c93dSmrg				vendor=wrs
18794c61c93dSmrg				;;
1880b8df70beSmrg			*-aux*)
18814c61c93dSmrg				vendor=apple
18824c61c93dSmrg				;;
1883b8df70beSmrg			*-hms*)
18844c61c93dSmrg				vendor=hitachi
18854c61c93dSmrg				;;
1886b8df70beSmrg			*-mpw* | *-macos*)
18874c61c93dSmrg				vendor=apple
18884c61c93dSmrg				;;
1889b8df70beSmrg			*-*mint | *-mint[0-9]* | *-*MiNT | *-MiNT[0-9]*)
18904c61c93dSmrg				vendor=atari
18914c61c93dSmrg				;;
1892b8df70beSmrg			*-vos*)
18934c61c93dSmrg				vendor=stratus
18944c61c93dSmrg				;;
18954c61c93dSmrg		esac
18964c61c93dSmrg		;;
18974c61c93dSmrgesac
18984c61c93dSmrg
1899b8df70beSmrgecho "$cpu-$vendor-${kernel:+$kernel-}$os"
19004c61c93dSmrgexit
19014c61c93dSmrg
19024c61c93dSmrg# Local variables:
1903b8df70beSmrg# eval: (add-hook 'before-save-hook 'time-stamp)
19044c61c93dSmrg# time-stamp-start: "timestamp='"
19054c61c93dSmrg# time-stamp-format: "%:y-%02m-%02d"
19064c61c93dSmrg# time-stamp-end: "'"
19074c61c93dSmrg# End:
1908