xref: /freebsd/contrib/unbound/config.sub (revision df21a004be237a1dccd03c7b47254625eea62fa9)
1#! /bin/sh
2# Configuration validation subroutine script.
3#   Copyright 1992-2025 Free Software Foundation, Inc.
4
5# shellcheck disable=SC2006,SC2268,SC2162 # see below for rationale
6
7timestamp='2025-07-10'
8
9# This file is free software; you can redistribute it and/or modify it
10# under the terms of the GNU General Public License as published by
11# the Free Software Foundation, either version 3 of the License, or
12# (at your option) any later version.
13#
14# This program is distributed in the hope that it will be useful, but
15# WITHOUT ANY WARRANTY; without even the implied warranty of
16# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
17# General Public License for more details.
18#
19# You should have received a copy of the GNU General Public License
20# along with this program; if not, see <https://www.gnu.org/licenses/>.
21#
22# As a special exception to the GNU General Public License, if you
23# distribute this file as part of a program that contains a
24# configuration script generated by Autoconf, you may include it under
25# the same distribution terms that you use for the rest of that
26# program.  This Exception is an additional permission under section 7
27# of the GNU General Public License, version 3 ("GPLv3").
28
29
30# Please send patches to <config-patches@gnu.org>.
31#
32# Configuration subroutine to validate and canonicalize a configuration type.
33# Supply the specified configuration type as an argument.
34# If it is invalid, we print an error message on stderr and exit with code 1.
35# Otherwise, we print the canonical config type on stdout and succeed.
36
37# You can get the latest version of this script from:
38# https://git.savannah.gnu.org/cgit/config.git/plain/config.sub
39
40# This file is supposed to be the same for all GNU packages
41# and recognize all the CPU types, system types and aliases
42# that are meaningful with *any* GNU software.
43# Each package is responsible for reporting which valid configurations
44# it does not support.  The user should be able to distinguish
45# a failure to support a valid configuration from a meaningless
46# configuration.
47
48# The goal of this file is to map all the various variations of a given
49# machine specification into a single specification in the form:
50#	CPU_TYPE-MANUFACTURER-OPERATING_SYSTEM
51# or in some cases, the newer four-part form:
52#	CPU_TYPE-MANUFACTURER-KERNEL-OPERATING_SYSTEM
53# It is wrong to echo any other type of specification.
54
55# The "shellcheck disable" line above the timestamp inhibits complaints
56# about features and limitations of the classic Bourne shell that were
57# superseded or lifted in POSIX.  However, this script identifies a wide
58# variety of pre-POSIX systems that do not have POSIX shells at all, and
59# even some reasonably current systems (Solaris 10 as case-in-point) still
60# have a pre-POSIX /bin/sh.
61
62me=`echo "$0" | sed -e 's,.*/,,'`
63
64usage="\
65Usage: $0 [OPTION] CPU-MFR-OPSYS or ALIAS
66
67Canonicalize a configuration name.
68
69Options:
70  -h, --help         print this help, then exit
71  -t, --time-stamp   print date of last modification, then exit
72  -v, --version      print version number, then exit
73
74Report bugs and patches to <config-patches@gnu.org>."
75
76version="\
77GNU config.sub ($timestamp)
78
79Copyright 1992-2025 Free Software Foundation, Inc.
80
81This is free software; see the source for copying conditions.  There is NO
82warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE."
83
84help="
85Try '$me --help' for more information."
86
87# Parse command line
88while test $# -gt 0 ; do
89  case $1 in
90    --time-stamp | --time* | -t )
91       echo "$timestamp" ; exit ;;
92    --version | -v )
93       echo "$version" ; exit ;;
94    --help | --h* | -h )
95       echo "$usage"; exit ;;
96    -- )     # Stop option processing
97       shift; break ;;
98    - )	# Use stdin as input.
99       break ;;
100    -* )
101       echo "$me: invalid option $1$help" >&2
102       exit 1 ;;
103
104    *local*)
105       # First pass through any local machine types.
106       echo "$1"
107       exit ;;
108
109    * )
110       break ;;
111  esac
112done
113
114case $# in
115 0) echo "$me: missing argument$help" >&2
116    exit 1;;
117 1) ;;
118 *) echo "$me: too many arguments$help" >&2
119    exit 1;;
120esac
121
122# Split fields of configuration type
123saved_IFS=$IFS
124IFS="-" read field1 field2 field3 field4 <<EOF
125$1
126EOF
127IFS=$saved_IFS
128
129# Separate into logical components for further validation
130case $1 in
131	*-*-*-*-*)
132		echo "Invalid configuration '$1': more than four components" >&2
133		exit 1
134		;;
135	*-*-*-*)
136		basic_machine=$field1-$field2
137		basic_os=$field3-$field4
138		;;
139	*-*-*)
140		# Ambiguous whether COMPANY is present, or skipped and KERNEL-OS is two
141		# parts
142		maybe_os=$field2-$field3
143		case $maybe_os in
144			  cloudabi*-eabi* \
145			| kfreebsd*-gnu* \
146			| knetbsd*-gnu* \
147			| kopensolaris*-gnu* \
148			| ironclad-* \
149			| linux-* \
150			| managarm-* \
151			| netbsd*-eabi* \
152			| netbsd*-gnu* \
153			| nto-qnx* \
154			| os2-emx* \
155			| rtmk-nova* \
156			| storm-chaos* \
157			| uclinux-gnu* \
158			| uclinux-uclibc* \
159			| windows-* )
160				basic_machine=$field1
161				basic_os=$maybe_os
162				;;
163			android-linux)
164				basic_machine=$field1-unknown
165				basic_os=linux-android
166				;;
167			*)
168				basic_machine=$field1-$field2
169				basic_os=$field3
170				;;
171		esac
172		;;
173	*-*)
174		case $field1-$field2 in
175			# Shorthands that happen to contain a single dash
176			convex-c[12] | convex-c3[248])
177				basic_machine=$field2-convex
178				basic_os=
179				;;
180			decstation-3100)
181				basic_machine=mips-dec
182				basic_os=
183				;;
184			*-*)
185				# Second component is usually, but not always the OS
186				case $field2 in
187					# Do not treat sunos as a manufacturer
188					sun*os*)
189						basic_machine=$field1
190						basic_os=$field2
191						;;
192					# Manufacturers
193					  3100* \
194					| 32* \
195					| 3300* \
196					| 3600* \
197					| 7300* \
198					| acorn \
199					| altos* \
200					| apollo \
201					| apple \
202					| atari \
203					| att* \
204					| axis \
205					| be \
206					| bull \
207					| cbm \
208					| ccur \
209					| cisco \
210					| commodore \
211					| convergent* \
212					| convex* \
213					| cray \
214					| crds \
215					| dec* \
216					| delta* \
217					| dg \
218					| digital \
219					| dolphin \
220					| encore* \
221					| gould \
222					| harris \
223					| highlevel \
224					| hitachi* \
225					| hp \
226					| ibm* \
227					| intergraph \
228					| isi* \
229					| knuth \
230					| masscomp \
231					| microblaze* \
232					| mips* \
233					| motorola* \
234					| ncr* \
235					| news \
236					| next \
237					| ns \
238					| oki \
239					| omron* \
240					| pc533* \
241					| rebel \
242					| rom68k \
243					| rombug \
244					| semi \
245					| sequent* \
246					| sgi* \
247					| siemens \
248					| sim \
249					| sni \
250					| sony* \
251					| stratus \
252					| sun \
253					| sun[234]* \
254					| tektronix \
255					| tti* \
256					| ultra \
257					| unicom* \
258					| wec \
259					| winbond \
260					| wrs)
261						basic_machine=$field1-$field2
262						basic_os=
263						;;
264					tock* | zephyr*)
265						basic_machine=$field1-unknown
266						basic_os=$field2
267						;;
268					*)
269						basic_machine=$field1
270						basic_os=$field2
271						;;
272				esac
273			;;
274		esac
275		;;
276	*)
277		# Convert single-component short-hands not valid as part of
278		# multi-component configurations.
279		case $field1 in
280			386bsd)
281				basic_machine=i386-pc
282				basic_os=bsd
283				;;
284			a29khif)
285				basic_machine=a29k-amd
286				basic_os=udi
287				;;
288			adobe68k)
289				basic_machine=m68010-adobe
290				basic_os=scout
291				;;
292			alliant)
293				basic_machine=fx80-alliant
294				basic_os=
295				;;
296			altos | altos3068)
297				basic_machine=m68k-altos
298				basic_os=
299				;;
300			am29k)
301				basic_machine=a29k-none
302				basic_os=bsd
303				;;
304			amdahl)
305				basic_machine=580-amdahl
306				basic_os=sysv
307				;;
308			amiga)
309				basic_machine=m68k-unknown
310				basic_os=
311				;;
312			amigaos | amigados)
313				basic_machine=m68k-unknown
314				basic_os=amigaos
315				;;
316			amigaunix | amix)
317				basic_machine=m68k-unknown
318				basic_os=sysv4
319				;;
320			apollo68)
321				basic_machine=m68k-apollo
322				basic_os=sysv
323				;;
324			apollo68bsd)
325				basic_machine=m68k-apollo
326				basic_os=bsd
327				;;
328			aros)
329				basic_machine=i386-pc
330				basic_os=aros
331				;;
332			aux)
333				basic_machine=m68k-apple
334				basic_os=aux
335				;;
336			balance)
337				basic_machine=ns32k-sequent
338				basic_os=dynix
339				;;
340			blackfin)
341				basic_machine=bfin-unknown
342				basic_os=linux
343				;;
344			cegcc)
345				basic_machine=arm-unknown
346				basic_os=cegcc
347				;;
348			cray)
349				basic_machine=j90-cray
350				basic_os=unicos
351				;;
352			crds | unos)
353				basic_machine=m68k-crds
354				basic_os=
355				;;
356			da30)
357				basic_machine=m68k-da30
358				basic_os=
359				;;
360			decstation | pmax | pmin | dec3100 | decstatn)
361				basic_machine=mips-dec
362				basic_os=
363				;;
364			delta88)
365				basic_machine=m88k-motorola
366				basic_os=sysv3
367				;;
368			dicos)
369				basic_machine=i686-pc
370				basic_os=dicos
371				;;
372			djgpp)
373				basic_machine=i586-pc
374				basic_os=msdosdjgpp
375				;;
376			ebmon29k)
377				basic_machine=a29k-amd
378				basic_os=ebmon
379				;;
380			es1800 | OSE68k | ose68k | ose | OSE)
381				basic_machine=m68k-ericsson
382				basic_os=ose
383				;;
384			gmicro)
385				basic_machine=tron-gmicro
386				basic_os=sysv
387				;;
388			go32)
389				basic_machine=i386-pc
390				basic_os=go32
391				;;
392			h8300hms)
393				basic_machine=h8300-hitachi
394				basic_os=hms
395				;;
396			h8300xray)
397				basic_machine=h8300-hitachi
398				basic_os=xray
399				;;
400			h8500hms)
401				basic_machine=h8500-hitachi
402				basic_os=hms
403				;;
404			harris)
405				basic_machine=m88k-harris
406				basic_os=sysv3
407				;;
408			hp300 | hp300hpux)
409				basic_machine=m68k-hp
410				basic_os=hpux
411				;;
412			hp300bsd)
413				basic_machine=m68k-hp
414				basic_os=bsd
415				;;
416			hppaosf)
417				basic_machine=hppa1.1-hp
418				basic_os=osf
419				;;
420			hppro)
421				basic_machine=hppa1.1-hp
422				basic_os=proelf
423				;;
424			i386mach)
425				basic_machine=i386-mach
426				basic_os=mach
427				;;
428			isi68 | isi)
429				basic_machine=m68k-isi
430				basic_os=sysv
431				;;
432			m68knommu)
433				basic_machine=m68k-unknown
434				basic_os=linux
435				;;
436			magnum | m3230)
437				basic_machine=mips-mips
438				basic_os=sysv
439				;;
440			merlin)
441				basic_machine=ns32k-utek
442				basic_os=sysv
443				;;
444			mingw64)
445				basic_machine=x86_64-pc
446				basic_os=mingw64
447				;;
448			mingw32)
449				basic_machine=i686-pc
450				basic_os=mingw32
451				;;
452			mingw32ce)
453				basic_machine=arm-unknown
454				basic_os=mingw32ce
455				;;
456			monitor)
457				basic_machine=m68k-rom68k
458				basic_os=coff
459				;;
460			morphos)
461				basic_machine=powerpc-unknown
462				basic_os=morphos
463				;;
464			moxiebox)
465				basic_machine=moxie-unknown
466				basic_os=moxiebox
467				;;
468			msdos)
469				basic_machine=i386-pc
470				basic_os=msdos
471				;;
472			msys)
473				basic_machine=i686-pc
474				basic_os=msys
475				;;
476			mvs)
477				basic_machine=i370-ibm
478				basic_os=mvs
479				;;
480			nacl)
481				basic_machine=le32-unknown
482				basic_os=nacl
483				;;
484			ncr3000)
485				basic_machine=i486-ncr
486				basic_os=sysv4
487				;;
488			netbsd386)
489				basic_machine=i386-pc
490				basic_os=netbsd
491				;;
492			netwinder)
493				basic_machine=armv4l-rebel
494				basic_os=linux
495				;;
496			news | news700 | news800 | news900)
497				basic_machine=m68k-sony
498				basic_os=newsos
499				;;
500			news1000)
501				basic_machine=m68030-sony
502				basic_os=newsos
503				;;
504			necv70)
505				basic_machine=v70-nec
506				basic_os=sysv
507				;;
508			nh3000)
509				basic_machine=m68k-harris
510				basic_os=cxux
511				;;
512			nh[45]000)
513				basic_machine=m88k-harris
514				basic_os=cxux
515				;;
516			nindy960)
517				basic_machine=i960-intel
518				basic_os=nindy
519				;;
520			mon960)
521				basic_machine=i960-intel
522				basic_os=mon960
523				;;
524			nonstopux)
525				basic_machine=mips-compaq
526				basic_os=nonstopux
527				;;
528			os400)
529				basic_machine=powerpc-ibm
530				basic_os=os400
531				;;
532			OSE68000 | ose68000)
533				basic_machine=m68000-ericsson
534				basic_os=ose
535				;;
536			os68k)
537				basic_machine=m68k-none
538				basic_os=os68k
539				;;
540			paragon)
541				basic_machine=i860-intel
542				basic_os=osf
543				;;
544			parisc)
545				basic_machine=hppa-unknown
546				basic_os=linux
547				;;
548			psp)
549				basic_machine=mipsallegrexel-sony
550				basic_os=psp
551				;;
552			pw32)
553				basic_machine=i586-unknown
554				basic_os=pw32
555				;;
556			rdos | rdos64)
557				basic_machine=x86_64-pc
558				basic_os=rdos
559				;;
560			rdos32)
561				basic_machine=i386-pc
562				basic_os=rdos
563				;;
564			rom68k)
565				basic_machine=m68k-rom68k
566				basic_os=coff
567				;;
568			sa29200)
569				basic_machine=a29k-amd
570				basic_os=udi
571				;;
572			sei)
573				basic_machine=mips-sei
574				basic_os=seiux
575				;;
576			sequent)
577				basic_machine=i386-sequent
578				basic_os=
579				;;
580			sps7)
581				basic_machine=m68k-bull
582				basic_os=sysv2
583				;;
584			st2000)
585				basic_machine=m68k-tandem
586				basic_os=
587				;;
588			stratus)
589				basic_machine=i860-stratus
590				basic_os=sysv4
591				;;
592			sun2)
593				basic_machine=m68000-sun
594				basic_os=
595				;;
596			sun2os3)
597				basic_machine=m68000-sun
598				basic_os=sunos3
599				;;
600			sun2os4)
601				basic_machine=m68000-sun
602				basic_os=sunos4
603				;;
604			sun3)
605				basic_machine=m68k-sun
606				basic_os=
607				;;
608			sun3os3)
609				basic_machine=m68k-sun
610				basic_os=sunos3
611				;;
612			sun3os4)
613				basic_machine=m68k-sun
614				basic_os=sunos4
615				;;
616			sun4)
617				basic_machine=sparc-sun
618				basic_os=
619				;;
620			sun4os3)
621				basic_machine=sparc-sun
622				basic_os=sunos3
623				;;
624			sun4os4)
625				basic_machine=sparc-sun
626				basic_os=sunos4
627				;;
628			sun4sol2)
629				basic_machine=sparc-sun
630				basic_os=solaris2
631				;;
632			sun386 | sun386i | roadrunner)
633				basic_machine=i386-sun
634				basic_os=
635				;;
636			sv1)
637				basic_machine=sv1-cray
638				basic_os=unicos
639				;;
640			symmetry)
641				basic_machine=i386-sequent
642				basic_os=dynix
643				;;
644			t3e)
645				basic_machine=alphaev5-cray
646				basic_os=unicos
647				;;
648			t90)
649				basic_machine=t90-cray
650				basic_os=unicos
651				;;
652			toad1)
653				basic_machine=pdp10-xkl
654				basic_os=tops20
655				;;
656			tpf)
657				basic_machine=s390x-ibm
658				basic_os=tpf
659				;;
660			udi29k)
661				basic_machine=a29k-amd
662				basic_os=udi
663				;;
664			ultra3)
665				basic_machine=a29k-nyu
666				basic_os=sym1
667				;;
668			v810 | necv810)
669				basic_machine=v810-nec
670				basic_os=none
671				;;
672			vaxv)
673				basic_machine=vax-dec
674				basic_os=sysv
675				;;
676			vms)
677				basic_machine=vax-dec
678				basic_os=vms
679				;;
680			vsta)
681				basic_machine=i386-pc
682				basic_os=vsta
683				;;
684			vxworks960)
685				basic_machine=i960-wrs
686				basic_os=vxworks
687				;;
688			vxworks68)
689				basic_machine=m68k-wrs
690				basic_os=vxworks
691				;;
692			vxworks29k)
693				basic_machine=a29k-wrs
694				basic_os=vxworks
695				;;
696			xbox)
697				basic_machine=i686-pc
698				basic_os=mingw32
699				;;
700			ymp)
701				basic_machine=ymp-cray
702				basic_os=unicos
703				;;
704			*)
705				basic_machine=$1
706				basic_os=
707				;;
708		esac
709		;;
710esac
711
712# Decode 1-component or ad-hoc basic machines
713case $basic_machine in
714	# Here we handle the default manufacturer of certain CPU types.  It is in
715	# some cases the only manufacturer, in others, it is the most popular.
716	w89k)
717		cpu=hppa1.1
718		vendor=winbond
719		;;
720	op50n)
721		cpu=hppa1.1
722		vendor=oki
723		;;
724	op60c)
725		cpu=hppa1.1
726		vendor=oki
727		;;
728	ibm*)
729		cpu=i370
730		vendor=ibm
731		;;
732	orion105)
733		cpu=clipper
734		vendor=highlevel
735		;;
736	mac | mpw | mac-mpw)
737		cpu=m68k
738		vendor=apple
739		;;
740	pmac | pmac-mpw)
741		cpu=powerpc
742		vendor=apple
743		;;
744
745	# Recognize the various machine names and aliases which stand
746	# for a CPU type and a company and sometimes even an OS.
747	3b1 | 7300 | 7300-att | att-7300 | pc7300 | safari | unixpc)
748		cpu=m68000
749		vendor=att
750		;;
751	3b*)
752		cpu=we32k
753		vendor=att
754		;;
755	bluegene*)
756		cpu=powerpc
757		vendor=ibm
758		basic_os=cnk
759		;;
760	decsystem10* | dec10*)
761		cpu=pdp10
762		vendor=dec
763		basic_os=tops10
764		;;
765	decsystem20* | dec20*)
766		cpu=pdp10
767		vendor=dec
768		basic_os=tops20
769		;;
770	delta | 3300 | delta-motorola | 3300-motorola | motorola-delta | motorola-3300)
771		cpu=m68k
772		vendor=motorola
773		;;
774	# This used to be dpx2*, but that gets the RS6000-based
775	# DPX/20 and the x86-based DPX/2-100 wrong.  See
776	# https://oldskool.silicium.org/stations/bull_dpx20.htm
777	# https://www.feb-patrimoine.com/english/bull_dpx2.htm
778	# https://www.feb-patrimoine.com/english/unix_and_bull.htm
779	dpx2 | dpx2[23]00 | dpx2[23]xx)
780		cpu=m68k
781		vendor=bull
782		;;
783	dpx2100 | dpx21xx)
784		cpu=i386
785		vendor=bull
786		;;
787	dpx20)
788		cpu=rs6000
789		vendor=bull
790		;;
791	encore | umax | mmax)
792		cpu=ns32k
793		vendor=encore
794		;;
795	elxsi)
796		cpu=elxsi
797		vendor=elxsi
798		basic_os=${basic_os:-bsd}
799		;;
800	fx2800)
801		cpu=i860
802		vendor=alliant
803		;;
804	genix)
805		cpu=ns32k
806		vendor=ns
807		;;
808	h3050r* | hiux*)
809		cpu=hppa1.1
810		vendor=hitachi
811		basic_os=hiuxwe2
812		;;
813	hp3k9[0-9][0-9] | hp9[0-9][0-9])
814		cpu=hppa1.0
815		vendor=hp
816		;;
817	hp9k2[0-9][0-9] | hp9k31[0-9])
818		cpu=m68000
819		vendor=hp
820		;;
821	hp9k3[2-9][0-9])
822		cpu=m68k
823		vendor=hp
824		;;
825	hp9k6[0-9][0-9] | hp6[0-9][0-9])
826		cpu=hppa1.0
827		vendor=hp
828		;;
829	hp9k7[0-79][0-9] | hp7[0-79][0-9])
830		cpu=hppa1.1
831		vendor=hp
832		;;
833	hp9k78[0-9] | hp78[0-9])
834		# FIXME: really hppa2.0-hp
835		cpu=hppa1.1
836		vendor=hp
837		;;
838	hp9k8[67]1 | hp8[67]1 | hp9k80[24] | hp80[24] | hp9k8[78]9 | hp8[78]9 | hp9k893 | hp893)
839		# FIXME: really hppa2.0-hp
840		cpu=hppa1.1
841		vendor=hp
842		;;
843	hp9k8[0-9][13679] | hp8[0-9][13679])
844		cpu=hppa1.1
845		vendor=hp
846		;;
847	hp9k8[0-9][0-9] | hp8[0-9][0-9])
848		cpu=hppa1.0
849		vendor=hp
850		;;
851	i*86v32)
852		cpu=`echo "$1" | sed -e 's/86.*/86/'`
853		vendor=pc
854		basic_os=sysv32
855		;;
856	i*86v4*)
857		cpu=`echo "$1" | sed -e 's/86.*/86/'`
858		vendor=pc
859		basic_os=sysv4
860		;;
861	i*86v)
862		cpu=`echo "$1" | sed -e 's/86.*/86/'`
863		vendor=pc
864		basic_os=sysv
865		;;
866	i*86sol2)
867		cpu=`echo "$1" | sed -e 's/86.*/86/'`
868		vendor=pc
869		basic_os=solaris2
870		;;
871	j90 | j90-cray)
872		cpu=j90
873		vendor=cray
874		basic_os=${basic_os:-unicos}
875		;;
876	iris | iris4d)
877		cpu=mips
878		vendor=sgi
879		case $basic_os in
880		    irix*)
881			;;
882		    *)
883			basic_os=irix4
884			;;
885		esac
886		;;
887	miniframe)
888		cpu=m68000
889		vendor=convergent
890		;;
891	*mint | mint[0-9]* | *MiNT | *MiNT[0-9]*)
892		cpu=m68k
893		vendor=atari
894		basic_os=mint
895		;;
896	news-3600 | risc-news)
897		cpu=mips
898		vendor=sony
899		basic_os=newsos
900		;;
901	next | m*-next)
902		cpu=m68k
903		vendor=next
904		;;
905	np1)
906		cpu=np1
907		vendor=gould
908		;;
909	op50n-* | op60c-*)
910		cpu=hppa1.1
911		vendor=oki
912		basic_os=proelf
913		;;
914	pa-hitachi)
915		cpu=hppa1.1
916		vendor=hitachi
917		basic_os=hiuxwe2
918		;;
919	pbd)
920		cpu=sparc
921		vendor=tti
922		;;
923	pbb)
924		cpu=m68k
925		vendor=tti
926		;;
927	pc532)
928		cpu=ns32k
929		vendor=pc532
930		;;
931	pn)
932		cpu=pn
933		vendor=gould
934		;;
935	power)
936		cpu=power
937		vendor=ibm
938		;;
939	ps2)
940		cpu=i386
941		vendor=ibm
942		;;
943	rm[46]00)
944		cpu=mips
945		vendor=siemens
946		;;
947	rtpc | rtpc-*)
948		cpu=romp
949		vendor=ibm
950		;;
951	sde)
952		cpu=mipsisa32
953		vendor=sde
954		basic_os=${basic_os:-elf}
955		;;
956	simso-wrs)
957		cpu=sparclite
958		vendor=wrs
959		basic_os=vxworks
960		;;
961	tower | tower-32)
962		cpu=m68k
963		vendor=ncr
964		;;
965	vpp*|vx|vx-*)
966		cpu=f301
967		vendor=fujitsu
968		;;
969	w65)
970		cpu=w65
971		vendor=wdc
972		;;
973	w89k-*)
974		cpu=hppa1.1
975		vendor=winbond
976		basic_os=proelf
977		;;
978	none)
979		cpu=none
980		vendor=none
981		;;
982	leon|leon[3-9])
983		cpu=sparc
984		vendor=$basic_machine
985		;;
986	leon-*|leon[3-9]-*)
987		cpu=sparc
988		vendor=`echo "$basic_machine" | sed 's/-.*//'`
989		;;
990
991	*-*)
992		saved_IFS=$IFS
993		IFS="-" read cpu vendor <<EOF
994$basic_machine
995EOF
996		IFS=$saved_IFS
997		;;
998	# We use 'pc' rather than 'unknown'
999	# because (1) that's what they normally are, and
1000	# (2) the word "unknown" tends to confuse beginning users.
1001	i*86 | x86_64)
1002		cpu=$basic_machine
1003		vendor=pc
1004		;;
1005	# These rules are duplicated from below for sake of the special case above;
1006	# i.e. things that normalized to x86 arches should also default to "pc"
1007	pc98)
1008		cpu=i386
1009		vendor=pc
1010		;;
1011	x64 | amd64)
1012		cpu=x86_64
1013		vendor=pc
1014		;;
1015	# Recognize the basic CPU types without company name.
1016	*)
1017		cpu=$basic_machine
1018		vendor=unknown
1019		;;
1020esac
1021
1022unset -v basic_machine
1023
1024# Decode basic machines in the full and proper CPU-Company form.
1025case $cpu-$vendor in
1026	# Here we handle the default manufacturer of certain CPU types in canonical form.
1027	# It is in some cases the only manufacturer, in others, it is the most popular.
1028	c[12]-convex | c[12]-unknown | c3[248]-convex | c3[248]-unknown)
1029		vendor=convex
1030		basic_os=${basic_os:-bsd}
1031		;;
1032	craynv-unknown)
1033		vendor=cray
1034		basic_os=${basic_os:-unicosmp}
1035		;;
1036	c90-unknown | c90-cray)
1037		vendor=cray
1038		basic_os=${basic_os:-unicos}
1039		;;
1040	fx80-unknown)
1041		vendor=alliant
1042		;;
1043	romp-unknown)
1044		vendor=ibm
1045		;;
1046	mmix-unknown)
1047		vendor=knuth
1048		;;
1049	microblaze-unknown | microblazeel-unknown)
1050		vendor=xilinx
1051		;;
1052	rs6000-unknown)
1053		vendor=ibm
1054		;;
1055	vax-unknown)
1056		vendor=dec
1057		;;
1058	pdp11-unknown)
1059		vendor=dec
1060		;;
1061	we32k-unknown)
1062		vendor=att
1063		;;
1064	cydra-unknown)
1065		vendor=cydrome
1066		;;
1067	i370-ibm*)
1068		vendor=ibm
1069		;;
1070	orion-unknown)
1071		vendor=highlevel
1072		;;
1073	xps-unknown | xps100-unknown)
1074		cpu=xps100
1075		vendor=honeywell
1076		;;
1077
1078	# Here we normalize CPU types with a missing or matching vendor
1079	armh-unknown | armh-alt)
1080		cpu=armv7l
1081		vendor=alt
1082		basic_os=${basic_os:-linux-gnueabihf}
1083		;;
1084
1085	# Normalized CPU+vendor pairs that imply an OS, if not otherwise specified
1086	m68k-isi)
1087		basic_os=${basic_os:-sysv}
1088		;;
1089	m68k-sony)
1090		basic_os=${basic_os:-newsos}
1091		;;
1092	m68k-tektronix)
1093		basic_os=${basic_os:-bsd}
1094		;;
1095	m88k-harris)
1096		basic_os=${basic_os:-sysv3}
1097		;;
1098	i386-bull | m68k-bull)
1099		basic_os=${basic_os:-sysv3}
1100		;;
1101	rs6000-bull)
1102		basic_os=${basic_os:-bosx}
1103		;;
1104	mips-sni)
1105		basic_os=${basic_os:-sysv4}
1106		;;
1107
1108	# Here we normalize CPU types irrespective of the vendor
1109	amd64-*)
1110		cpu=x86_64
1111		;;
1112	blackfin-*)
1113		cpu=bfin
1114		basic_os=${basic_os:-linux}
1115		;;
1116	c54x-*)
1117		cpu=tic54x
1118		;;
1119	c55x-*)
1120		cpu=tic55x
1121		;;
1122	c6x-*)
1123		cpu=tic6x
1124		;;
1125	e500v[12]-*)
1126		cpu=powerpc
1127		basic_os=${basic_os}"spe"
1128		;;
1129	mips3*-*)
1130		cpu=mips64
1131		;;
1132	ms1-*)
1133		cpu=mt
1134		;;
1135	m68knommu-*)
1136		cpu=m68k
1137		basic_os=${basic_os:-linux}
1138		;;
1139	m9s12z-* | m68hcs12z-* | hcs12z-* | s12z-*)
1140		cpu=s12z
1141		;;
1142	openrisc-*)
1143		cpu=or32
1144		;;
1145	parisc-*)
1146		cpu=hppa
1147		basic_os=${basic_os:-linux}
1148		;;
1149	pentium-* | p5-* | k5-* | k6-* | nexgen-* | viac3-*)
1150		cpu=i586
1151		;;
1152	pentiumpro-* | p6-* | 6x86-* | athlon-* | athlon_*-*)
1153		cpu=i686
1154		;;
1155	pentiumii-* | pentium2-* | pentiumiii-* | pentium3-*)
1156		cpu=i686
1157		;;
1158	pentium4-*)
1159		cpu=i786
1160		;;
1161	ppc-* | ppcbe-*)
1162		cpu=powerpc
1163		;;
1164	ppcle-* | powerpclittle-*)
1165		cpu=powerpcle
1166		;;
1167	ppc64-*)
1168		cpu=powerpc64
1169		;;
1170	ppc64le-* | powerpc64little-*)
1171		cpu=powerpc64le
1172		;;
1173	sb1-*)
1174		cpu=mipsisa64sb1
1175		;;
1176	sb1el-*)
1177		cpu=mipsisa64sb1el
1178		;;
1179	sh5e[lb]-*)
1180		cpu=`echo "$cpu" | sed 's/^\(sh.\)e\(.\)$/\1\2e/'`
1181		;;
1182	spur-*)
1183		cpu=spur
1184		;;
1185	strongarm-* | thumb-*)
1186		cpu=arm
1187		;;
1188	tx39-*)
1189		cpu=mipstx39
1190		;;
1191	tx39el-*)
1192		cpu=mipstx39el
1193		;;
1194	xscale-* | xscalee[bl]-*)
1195		cpu=`echo "$cpu" | sed 's/^xscale/arm/'`
1196		;;
1197	arm64-* | aarch64le-* | arm64_32-*)
1198		cpu=aarch64
1199		;;
1200
1201	# Recognize the canonical CPU Types that limit and/or modify the
1202	# company names they are paired with.
1203	cr16-*)
1204		basic_os=${basic_os:-elf}
1205		;;
1206	crisv32-* | etraxfs*-*)
1207		cpu=crisv32
1208		vendor=axis
1209		;;
1210	cris-* | etrax*-*)
1211		cpu=cris
1212		vendor=axis
1213		;;
1214	crx-*)
1215		basic_os=${basic_os:-elf}
1216		;;
1217	neo-tandem)
1218		cpu=neo
1219		vendor=tandem
1220		;;
1221	nse-tandem)
1222		cpu=nse
1223		vendor=tandem
1224		;;
1225	nsr-tandem)
1226		cpu=nsr
1227		vendor=tandem
1228		;;
1229	nsv-tandem)
1230		cpu=nsv
1231		vendor=tandem
1232		;;
1233	nsx-tandem)
1234		cpu=nsx
1235		vendor=tandem
1236		;;
1237	mipsallegrexel-sony)
1238		cpu=mipsallegrexel
1239		vendor=sony
1240		;;
1241	tile*-*)
1242		basic_os=${basic_os:-linux-gnu}
1243		;;
1244
1245	*)
1246		# Recognize the canonical CPU types that are allowed with any
1247		# company name.
1248		case $cpu in
1249			  1750a \
1250			| 580 \
1251			| [cjt]90 \
1252			| a29k \
1253			| aarch64 \
1254			| aarch64_be \
1255			| aarch64c \
1256			| abacus \
1257			| alpha \
1258			| alpha64 \
1259			| alpha64ev56 \
1260			| alpha64ev6[78] \
1261			| alpha64ev[4-8] \
1262			| alpha64pca5[67] \
1263			| alphaev56 \
1264			| alphaev6[78] \
1265			| alphaev[4-8] \
1266			| alphapca5[67] \
1267			| am33_2.0 \
1268			| amdgcn \
1269			| arc \
1270			| arc32 \
1271			| arc64 \
1272			| arceb \
1273			| arm \
1274			| arm64e \
1275			| arm64ec \
1276			| arm[lb]e \
1277			| arme[lb] \
1278			| armv* \
1279			| asmjs \
1280			| avr \
1281			| avr32 \
1282			| ba \
1283			| be32 \
1284			| be64 \
1285			| bfin \
1286			| bpf \
1287			| bs2000 \
1288			| c30 \
1289			| c4x \
1290			| c8051 \
1291			| c[123]* \
1292			| clipper \
1293			| craynv \
1294			| csky \
1295			| cydra \
1296			| d10v \
1297			| d30v \
1298			| dlx \
1299			| dsp16xx \
1300			| e2k \
1301			| elxsi \
1302			| epiphany \
1303			| f30[01] \
1304			| f700 \
1305			| fido \
1306			| fr30 \
1307			| frv \
1308			| ft32 \
1309			| fx80 \
1310			| h8300 \
1311			| h8500 \
1312			| hexagon \
1313			| hppa \
1314			| hppa1.[01] \
1315			| hppa2.0 \
1316			| hppa2.0[nw] \
1317			| hppa64 \
1318			| i*86 \
1319			| i370 \
1320			| i860 \
1321			| i960 \
1322			| ia16 \
1323			| ia64 \
1324			| intelgt \
1325			| ip2k \
1326			| iq2000 \
1327			| javascript \
1328			| k1om \
1329			| kvx \
1330			| le32 \
1331			| le64 \
1332			| lm32 \
1333			| loongarch32 \
1334			| loongarch64 \
1335			| m32c \
1336			| m32r \
1337			| m32rle \
1338			| m5200 \
1339			| m68000 \
1340			| m680[012346]0 \
1341			| m6811 \
1342			| m6812 \
1343			| m68360 \
1344			| m683?2 \
1345			| m68hc11 \
1346			| m68hc12 \
1347			| m68hcs12x \
1348			| m68k \
1349			| m88110 \
1350			| m88k \
1351			| maxq \
1352			| mb \
1353			| mcore \
1354			| mep \
1355			| metag \
1356			| microblaze \
1357			| microblazeel \
1358			| mips* \
1359			| mmix \
1360			| mn10200 \
1361			| mn10300 \
1362			| moxie \
1363			| msp430 \
1364			| mt \
1365			| nanomips* \
1366			| nds32 \
1367			| nds32be \
1368			| nds32le \
1369			| nfp \
1370			| nios \
1371			| nios2 \
1372			| nios2eb \
1373			| nios2el \
1374			| none \
1375			| np1 \
1376			| ns16k \
1377			| ns32k \
1378			| nvptx \
1379			| open8 \
1380			| or1k* \
1381			| or32 \
1382			| orion \
1383			| pdp10 \
1384			| pdp11 \
1385			| picochip \
1386			| pj \
1387			| pjl \
1388			| pn \
1389			| power \
1390			| powerpc \
1391			| powerpc64 \
1392			| powerpc64le \
1393			| powerpcle \
1394			| powerpcspe \
1395			| pru \
1396			| pyramid \
1397			| riscv \
1398			| riscv32 \
1399			| riscv32be \
1400			| riscv64 \
1401			| riscv64be \
1402			| rl78 \
1403			| romp \
1404			| rs6000 \
1405			| rx \
1406			| s390 \
1407			| s390x \
1408			| score \
1409			| sh \
1410			| sh64 \
1411			| sh64le \
1412			| sh[12345][lb]e \
1413			| sh[1234] \
1414			| sh[1234]e[lb] \
1415			| sh[23]e \
1416			| sh[23]ele \
1417			| sh[24]a \
1418			| sh[24]ae[lb] \
1419			| sh[lb]e \
1420			| she[lb] \
1421			| shl \
1422			| sparc \
1423			| sparc64 \
1424			| sparc64b \
1425			| sparc64v \
1426			| sparc86x \
1427			| sparclet \
1428			| sparclite \
1429			| sparcv8 \
1430			| sparcv9 \
1431			| sparcv9b \
1432			| sparcv9v \
1433			| spu \
1434			| sv1 \
1435			| sx* \
1436			| tahoe \
1437			| thumbv7* \
1438			| tic30 \
1439			| tic4x \
1440			| tic54x \
1441			| tic55x \
1442			| tic6x \
1443			| tic80 \
1444			| tron \
1445			| ubicom32 \
1446			| v70 \
1447			| v810 \
1448			| v850 \
1449			| v850e \
1450			| v850e1 \
1451			| v850e2 \
1452			| v850e2v3 \
1453			| v850es \
1454			| vax \
1455			| vc4 \
1456			| visium \
1457			| w65 \
1458			| wasm32 \
1459			| wasm64 \
1460			| we32k \
1461			| x86 \
1462			| x86_64 \
1463			| xc16x \
1464			| xgate \
1465			| xps100 \
1466			| xstormy16 \
1467			| xtensa* \
1468			| ymp \
1469			| z80 \
1470			| z8k)
1471				;;
1472
1473			*)
1474				echo "Invalid configuration '$1': machine '$cpu-$vendor' not recognized" 1>&2
1475				exit 1
1476				;;
1477		esac
1478		;;
1479esac
1480
1481# Here we canonicalize certain aliases for manufacturers.
1482case $vendor in
1483	digital*)
1484		vendor=dec
1485		;;
1486	commodore*)
1487		vendor=cbm
1488		;;
1489	*)
1490		;;
1491esac
1492
1493# Decode manufacturer-specific aliases for certain operating systems.
1494
1495if test x"$basic_os" != x
1496then
1497
1498# First recognize some ad-hoc cases, or perhaps split kernel-os, or else just
1499# set os.
1500obj=
1501case $basic_os in
1502	gnu/linux*)
1503		kernel=linux
1504		os=`echo "$basic_os" | sed -e 's|gnu/linux|gnu|'`
1505		;;
1506	os2-emx)
1507		kernel=os2
1508		os=`echo "$basic_os" | sed -e 's|os2-emx|emx|'`
1509		;;
1510	nto-qnx*)
1511		kernel=nto
1512		os=`echo "$basic_os" | sed -e 's|nto-qnx|qnx|'`
1513		;;
1514	*-*)
1515		saved_IFS=$IFS
1516		IFS="-" read kernel os <<EOF
1517$basic_os
1518EOF
1519		IFS=$saved_IFS
1520		;;
1521	# Default OS when just kernel was specified
1522	nto*)
1523		kernel=nto
1524		os=`echo "$basic_os" | sed -e 's|nto|qnx|'`
1525		;;
1526	ironclad*)
1527		kernel=ironclad
1528		os=`echo "$basic_os" | sed -e 's|ironclad|mlibc|'`
1529		;;
1530	linux*)
1531		kernel=linux
1532		os=`echo "$basic_os" | sed -e 's|linux|gnu|'`
1533		;;
1534	managarm*)
1535		kernel=managarm
1536		os=`echo "$basic_os" | sed -e 's|managarm|mlibc|'`
1537		;;
1538	*)
1539		kernel=
1540		os=$basic_os
1541		;;
1542esac
1543
1544# Now, normalize the OS (knowing we just have one component, it's not a kernel,
1545# etc.)
1546case $os in
1547	# First match some system type aliases that might get confused
1548	# with valid system types.
1549	# solaris* is a basic system type, with this one exception.
1550	auroraux)
1551		os=auroraux
1552		;;
1553	bluegene*)
1554		os=cnk
1555		;;
1556	solaris1 | solaris1.*)
1557		os=`echo "$os" | sed -e 's|solaris1|sunos4|'`
1558		;;
1559	solaris)
1560		os=solaris2
1561		;;
1562	unixware*)
1563		os=sysv4.2uw
1564		;;
1565	# The marketing names for NeXT's operating systems were
1566	# NeXTSTEP, NeXTSTEP 2, OpenSTEP 3, OpenSTEP 4.  'openstep' is
1567	# mapped to 'openstep3', but 'openstep1' and 'openstep2' are
1568	# mapped to 'nextstep' and 'nextstep2', consistent with the
1569	# treatment of SunOS/Solaris.
1570	ns | ns1 | nextstep | nextstep1 | openstep1)
1571		os=nextstep
1572		;;
1573	ns2 | nextstep2 | openstep2)
1574		os=nextstep2
1575		;;
1576	ns3 | nextstep3 | openstep | openstep3)
1577		os=openstep3
1578		;;
1579	ns4 | nextstep4 | openstep4)
1580		os=openstep4
1581		;;
1582	# es1800 is here to avoid being matched by es* (a different OS)
1583	es1800*)
1584		os=ose
1585		;;
1586	# Some version numbers need modification
1587	chorusos*)
1588		os=chorusos
1589		;;
1590	isc)
1591		os=isc2.2
1592		;;
1593	sco6)
1594		os=sco5v6
1595		;;
1596	sco5)
1597		os=sco3.2v5
1598		;;
1599	sco4)
1600		os=sco3.2v4
1601		;;
1602	sco3.2.[4-9]*)
1603		os=`echo "$os" | sed -e 's/sco3.2./sco3.2v/'`
1604		;;
1605	sco*v* | scout)
1606		# Don't match below
1607		;;
1608	sco*)
1609		os=sco3.2v2
1610		;;
1611	psos*)
1612		os=psos
1613		;;
1614	qnx*)
1615		os=qnx
1616		;;
1617	hiux*)
1618		os=hiuxwe2
1619		;;
1620	lynx*178)
1621		os=lynxos178
1622		;;
1623	lynx*5)
1624		os=lynxos5
1625		;;
1626	lynxos*)
1627		# don't get caught up in next wildcard
1628		;;
1629	lynx*)
1630		os=lynxos
1631		;;
1632	mac[0-9]*)
1633		os=`echo "$os" | sed -e 's|mac|macos|'`
1634		;;
1635	opened*)
1636		os=openedition
1637		;;
1638	os400*)
1639		os=os400
1640		;;
1641	sunos5*)
1642		os=`echo "$os" | sed -e 's|sunos5|solaris2|'`
1643		;;
1644	sunos6*)
1645		os=`echo "$os" | sed -e 's|sunos6|solaris3|'`
1646		;;
1647	wince*)
1648		os=wince
1649		;;
1650	utek*)
1651		os=bsd
1652		vendor=`echo "$vendor" | sed -e 's|^unknown$|tektronix|'`
1653		;;
1654	dynix*)
1655		os=bsd
1656		;;
1657	acis*)
1658		os=aos
1659		;;
1660	atheos*)
1661		os=atheos
1662		;;
1663	syllable*)
1664		os=syllable
1665		;;
1666	386bsd)
1667		os=bsd
1668		;;
1669	ctix*)
1670		os=sysv
1671		vendor=`echo "$vendor" | sed -e 's|^unknown$|convergent|'`
1672		;;
1673	uts*)
1674		os=sysv
1675		;;
1676	nova*)
1677		kernel=rtmk
1678		os=nova
1679		;;
1680	# Preserve the version number of sinix5.
1681	sinix5.*)
1682		os=`echo "$os" | sed -e 's|sinix|sysv|'`
1683		vendor=`echo "$vendor" | sed -e 's|^unknown$|sni|'`
1684		;;
1685	sinix*)
1686		os=sysv4
1687		vendor=`echo "$vendor" | sed -e 's|^unknown$|sni|'`
1688		;;
1689	tpf*)
1690		os=tpf
1691		;;
1692	triton*)
1693		os=sysv3
1694		;;
1695	oss*)
1696		os=sysv3
1697		;;
1698	svr4*)
1699		os=sysv4
1700		;;
1701	svr3)
1702		os=sysv3
1703		;;
1704	sysvr4)
1705		os=sysv4
1706		;;
1707	ose*)
1708		os=ose
1709		;;
1710	*mint | mint[0-9]* | *MiNT | MiNT[0-9]*)
1711		os=mint
1712		;;
1713	dicos*)
1714		os=dicos
1715		;;
1716	pikeos*)
1717		# Until real need of OS specific support for
1718		# particular features comes up, bare metal
1719		# configurations are quite functional.
1720		case $cpu in
1721		    arm*)
1722			os=eabi
1723			;;
1724		    *)
1725			os=
1726			obj=elf
1727			;;
1728		esac
1729		;;
1730	aout* | coff* | elf* | pe*)
1731		# These are machine code file formats, not OSes
1732		obj=$os
1733		os=
1734		;;
1735	*)
1736		# No normalization, but not necessarily accepted, that comes below.
1737		;;
1738esac
1739
1740else
1741
1742# Here we handle the default operating systems that come with various machines.
1743# The value should be what the vendor currently ships out the door with their
1744# machine or put another way, the most popular os provided with the machine.
1745
1746# Note that if you're going to try to match "-MANUFACTURER" here (say,
1747# "-sun"), then you have to tell the case statement up towards the top
1748# that MANUFACTURER isn't an operating system.  Otherwise, code above
1749# will signal an error saying that MANUFACTURER isn't an operating
1750# system, and we'll never get to this point.
1751
1752kernel=
1753obj=
1754case $cpu-$vendor in
1755	score-*)
1756		os=
1757		obj=elf
1758		;;
1759	spu-*)
1760		os=
1761		obj=elf
1762		;;
1763	*-acorn)
1764		os=riscix1.2
1765		;;
1766	arm*-rebel)
1767		kernel=linux
1768		os=gnu
1769		;;
1770	arm*-semi)
1771		os=
1772		obj=aout
1773		;;
1774	c4x-* | tic4x-*)
1775		os=
1776		obj=coff
1777		;;
1778	c8051-*)
1779		os=
1780		obj=elf
1781		;;
1782	clipper-intergraph)
1783		os=clix
1784		;;
1785	hexagon-*)
1786		os=
1787		obj=elf
1788		;;
1789	tic54x-*)
1790		os=
1791		obj=coff
1792		;;
1793	tic55x-*)
1794		os=
1795		obj=coff
1796		;;
1797	tic6x-*)
1798		os=
1799		obj=coff
1800		;;
1801	# This must come before the *-dec entry.
1802	pdp10-*)
1803		os=tops20
1804		;;
1805	pdp11-*)
1806		os=none
1807		;;
1808	*-dec | vax-*)
1809		os=ultrix4.2
1810		;;
1811	m68*-apollo)
1812		os=domain
1813		;;
1814	i386-sun)
1815		os=sunos4.0.2
1816		;;
1817	m68000-sun)
1818		os=sunos3
1819		;;
1820	m68*-cisco)
1821		os=
1822		obj=aout
1823		;;
1824	mep-*)
1825		os=
1826		obj=elf
1827		;;
1828	# The -sgi and -siemens entries must be before the mips- entry
1829	# or we get the wrong os.
1830	*-sgi)
1831		os=irix
1832		;;
1833	*-siemens)
1834		os=sysv4
1835		;;
1836	mips*-cisco)
1837		os=
1838		obj=elf
1839		;;
1840	mips*-*|nanomips*-*)
1841		os=
1842		obj=elf
1843		;;
1844	or32-*)
1845		os=
1846		obj=coff
1847		;;
1848	# This must be before the sparc-* entry or we get the wrong os.
1849	*-tti)
1850		os=sysv3
1851		;;
1852	sparc-* | *-sun)
1853		os=sunos4.1.1
1854		;;
1855	pru-*)
1856		os=
1857		obj=elf
1858		;;
1859	*-be)
1860		os=beos
1861		;;
1862	*-ibm)
1863		os=aix
1864		;;
1865	*-knuth)
1866		os=mmixware
1867		;;
1868	*-wec)
1869		os=proelf
1870		;;
1871	*-winbond)
1872		os=proelf
1873		;;
1874	*-oki)
1875		os=proelf
1876		;;
1877	*-hp)
1878		os=hpux
1879		;;
1880	*-hitachi)
1881		os=hiuxwe2
1882		;;
1883	i860-* | *-att | *-ncr | *-altos | *-motorola | *-convergent)
1884		os=sysv
1885		;;
1886	*-cbm)
1887		os=amigaos
1888		;;
1889	*-dg)
1890		os=dgux
1891		;;
1892	*-dolphin)
1893		os=sysv3
1894		;;
1895	m68k-ccur)
1896		os=rtu
1897		;;
1898	m88k-omron*)
1899		os=luna
1900		;;
1901	*-next)
1902		os=nextstep
1903		;;
1904	*-sequent)
1905		os=ptx
1906		;;
1907	*-crds)
1908		os=unos
1909		;;
1910	*-ns)
1911		os=genix
1912		;;
1913	i370-*)
1914		os=mvs
1915		;;
1916	*-gould)
1917		os=sysv
1918		;;
1919	*-highlevel)
1920		os=bsd
1921		;;
1922	*-encore)
1923		os=bsd
1924		;;
1925	*-masscomp)
1926		os=rtu
1927		;;
1928	f30[01]-fujitsu | f700-fujitsu)
1929		os=uxpv
1930		;;
1931	*-rom68k)
1932		os=
1933		obj=coff
1934		;;
1935	*-*bug)
1936		os=
1937		obj=coff
1938		;;
1939	*-apple)
1940		os=macos
1941		;;
1942	*-atari*)
1943		os=mint
1944		;;
1945	*-wrs)
1946		os=vxworks
1947		;;
1948	*)
1949		os=none
1950		;;
1951esac
1952
1953fi
1954
1955# Now, validate our (potentially fixed-up) individual pieces (OS, OBJ).
1956
1957case $os in
1958	# Sometimes we do "kernel-libc", so those need to count as OSes.
1959	llvm* | musl* | newlib* | relibc* | uclibc*)
1960		;;
1961	# Likewise for "kernel-abi"
1962	eabi* | gnueabi*)
1963		;;
1964	# VxWorks passes extra cpu info in the 4th filed.
1965	simlinux | simwindows | spe)
1966		;;
1967	# See `case $cpu-$os` validation below
1968	ghcjs)
1969		;;
1970	# Now accept the basic system types.
1971	# Each alternative MUST end in a * to match a version number.
1972	  abug \
1973	| aix* \
1974	| amdhsa* \
1975	| amigados* \
1976	| amigaos* \
1977	| android* \
1978	| aof* \
1979	| aos* \
1980	| aros* \
1981	| atheos* \
1982	| auroraux* \
1983	| aux* \
1984	| banan_os* \
1985	| beos* \
1986	| bitrig* \
1987	| bme* \
1988	| bosx* \
1989	| bsd* \
1990	| cegcc* \
1991	| chorusos* \
1992	| chorusrdb* \
1993	| clix* \
1994	| cloudabi* \
1995	| cnk* \
1996	| conix* \
1997	| cos* \
1998	| cxux* \
1999	| cygwin* \
2000	| darwin* \
2001	| dgux* \
2002	| dicos* \
2003	| dnix* \
2004	| domain* \
2005	| dragonfly* \
2006	| drops* \
2007	| ebmon* \
2008	| ecoff* \
2009	| ekkobsd* \
2010	| emscripten* \
2011	| emx* \
2012	| es* \
2013	| fiwix* \
2014	| freebsd* \
2015	| fuchsia* \
2016	| genix* \
2017	| genode* \
2018	| glidix* \
2019	| gnu* \
2020	| go32* \
2021	| haiku* \
2022	| hcos* \
2023	| hiux* \
2024	| hms* \
2025	| hpux* \
2026	| ieee* \
2027	| interix* \
2028	| ios* \
2029	| iris* \
2030	| irix* \
2031	| isc* \
2032	| its* \
2033	| l4re* \
2034	| libertybsd* \
2035	| lites* \
2036	| lnews* \
2037	| luna* \
2038	| lynxos* \
2039	| mach* \
2040	| macos* \
2041	| magic* \
2042	| mbr* \
2043	| midipix* \
2044	| midnightbsd* \
2045	| mingw32* \
2046	| mingw64* \
2047	| minix* \
2048	| mint* \
2049	| mirbsd* \
2050	| mks* \
2051	| mlibc* \
2052	| mmixware* \
2053	| mon960* \
2054	| morphos* \
2055	| moss* \
2056	| moxiebox* \
2057	| mpeix* \
2058	| mpw* \
2059	| msdos* \
2060	| msys* \
2061	| mvs* \
2062	| nacl* \
2063	| netbsd* \
2064	| netware* \
2065	| newsos* \
2066	| nextstep* \
2067	| nindy* \
2068	| nonstopux* \
2069	| nova* \
2070	| nsk* \
2071	| nucleus* \
2072	| nx6 \
2073	| nx7 \
2074	| oabi* \
2075	| ohos* \
2076	| onefs* \
2077	| openbsd* \
2078	| openedition* \
2079	| openstep* \
2080	| os108* \
2081	| os2* \
2082	| os400* \
2083	| os68k* \
2084	| os9* \
2085	| ose* \
2086	| osf* \
2087	| oskit* \
2088	| osx* \
2089	| palmos* \
2090	| phoenix* \
2091	| plan9* \
2092	| powermax* \
2093	| powerunix* \
2094	| proelf* \
2095	| psos* \
2096	| psp* \
2097	| ptx* \
2098	| pw32* \
2099	| qnx* \
2100	| rdos* \
2101	| redox* \
2102	| rhapsody* \
2103	| riscix* \
2104	| riscos* \
2105	| rtems* \
2106	| rtmk* \
2107	| rtu* \
2108	| scout* \
2109	| secbsd* \
2110	| sei* \
2111	| serenity* \
2112	| sim* \
2113	| skyos* \
2114	| solaris* \
2115	| solidbsd* \
2116	| sortix* \
2117	| storm-chaos* \
2118	| sunos \
2119	| sunos[34]* \
2120	| superux* \
2121	| syllable* \
2122	| sym* \
2123	| sysv* \
2124	| tenex* \
2125	| tirtos* \
2126	| tock* \
2127	| toppers* \
2128	| tops10* \
2129	| tops20* \
2130	| tpf* \
2131	| tvos* \
2132	| twizzler* \
2133	| uclinux* \
2134	| udi* \
2135	| udk* \
2136	| ultrix* \
2137	| unicos* \
2138	| uniplus* \
2139	| unleashed* \
2140	| unos* \
2141	| uwin* \
2142	| uxpv* \
2143	| v88r* \
2144	|*vms* \
2145	| vos* \
2146	| vsta* \
2147	| vxsim* \
2148	| vxworks* \
2149	| wasi* \
2150	| watchos* \
2151	| wince* \
2152	| windiss* \
2153	| windows* \
2154	| winnt* \
2155	| xenix* \
2156	| xray* \
2157	| zephyr* \
2158	| zvmoe* )
2159		;;
2160	# This one is extra strict with allowed versions
2161	sco3.2v2 | sco3.2v[4-9]* | sco5v6*)
2162		# Don't forget version if it is 3.2v4 or newer.
2163		;;
2164	# This refers to builds using the UEFI calling convention
2165	# (which depends on the architecture) and PE file format.
2166	# Note that this is both a different calling convention and
2167	# different file format than that of GNU-EFI
2168	# (x86_64-w64-mingw32).
2169	uefi)
2170		;;
2171	none)
2172		;;
2173	kernel* | msvc* )
2174		# Restricted further below
2175		;;
2176	'')
2177		if test x"$obj" = x
2178		then
2179			echo "Invalid configuration '$1': Blank OS only allowed with explicit machine code file format" 1>&2
2180		fi
2181		;;
2182	*)
2183		echo "Invalid configuration '$1': OS '$os' not recognized" 1>&2
2184		exit 1
2185		;;
2186esac
2187
2188case $obj in
2189	aout* | coff* | elf* | pe*)
2190		;;
2191	'')
2192		# empty is fine
2193		;;
2194	*)
2195		echo "Invalid configuration '$1': Machine code format '$obj' not recognized" 1>&2
2196		exit 1
2197		;;
2198esac
2199
2200# Here we handle the constraint that a (synthetic) cpu and os are
2201# valid only in combination with each other and nowhere else.
2202case $cpu-$os in
2203	# The "javascript-unknown-ghcjs" triple is used by GHC; we
2204	# accept it here in order to tolerate that, but reject any
2205	# variations.
2206	javascript-ghcjs)
2207		;;
2208	javascript-* | *-ghcjs)
2209		echo "Invalid configuration '$1': cpu '$cpu' is not valid with os '$os$obj'" 1>&2
2210		exit 1
2211		;;
2212esac
2213
2214# As a final step for OS-related things, validate the OS-kernel combination
2215# (given a valid OS), if there is a kernel.
2216case $kernel-$os-$obj in
2217	linux-gnu*- | linux-android*- | linux-dietlibc*- | linux-llvm*- \
2218		    | linux-mlibc*- | linux-musl*- | linux-newlib*- \
2219		    | linux-relibc*- | linux-uclibc*- | linux-ohos*- )
2220		;;
2221	uclinux-uclibc*- | uclinux-gnu*- )
2222		;;
2223	ironclad-mlibc*-)
2224		;;
2225	managarm-mlibc*- | managarm-kernel*- )
2226		;;
2227	windows*-msvc*-)
2228		;;
2229	-dietlibc*- | -llvm*- | -mlibc*- | -musl*- | -newlib*- | -relibc*- \
2230		    | -uclibc*- )
2231		# These are just libc implementations, not actual OSes, and thus
2232		# require a kernel.
2233		echo "Invalid configuration '$1': libc '$os' needs explicit kernel." 1>&2
2234		exit 1
2235		;;
2236	-kernel*- )
2237		echo "Invalid configuration '$1': '$os' needs explicit kernel." 1>&2
2238		exit 1
2239		;;
2240	*-kernel*- )
2241		echo "Invalid configuration '$1': '$kernel' does not support '$os'." 1>&2
2242		exit 1
2243		;;
2244	*-msvc*- )
2245		echo "Invalid configuration '$1': '$os' needs 'windows'." 1>&2
2246		exit 1
2247		;;
2248	kfreebsd*-gnu*- | knetbsd*-gnu*- | netbsd*-gnu*- | kopensolaris*-gnu*-)
2249		;;
2250	vxworks-simlinux- | vxworks-simwindows- | vxworks-spe-)
2251		;;
2252	nto-qnx*-)
2253		;;
2254	os2-emx-)
2255		;;
2256	rtmk-nova-)
2257		;;
2258	*-eabi*- | *-gnueabi*-)
2259		;;
2260	ios*-simulator- | tvos*-simulator- | watchos*-simulator- )
2261		;;
2262	none--*)
2263		# None (no kernel, i.e. freestanding / bare metal),
2264		# can be paired with an machine code file format
2265		;;
2266	-*-)
2267		# Blank kernel with real OS is always fine.
2268		;;
2269	--*)
2270		# Blank kernel and OS with real machine code file format is always fine.
2271		;;
2272	*-*-*)
2273		echo "Invalid configuration '$1': Kernel '$kernel' not known to work with OS '$os'." 1>&2
2274		exit 1
2275		;;
2276esac
2277
2278# Here we handle the case where we know the os, and the CPU type, but not the
2279# manufacturer.  We pick the logical manufacturer.
2280case $vendor in
2281	unknown)
2282		case $cpu-$os in
2283			*-riscix*)
2284				vendor=acorn
2285				;;
2286			*-sunos* | *-solaris*)
2287				vendor=sun
2288				;;
2289			*-cnk* | *-aix*)
2290				vendor=ibm
2291				;;
2292			*-beos*)
2293				vendor=be
2294				;;
2295			*-hpux*)
2296				vendor=hp
2297				;;
2298			*-mpeix*)
2299				vendor=hp
2300				;;
2301			*-hiux*)
2302				vendor=hitachi
2303				;;
2304			*-unos*)
2305				vendor=crds
2306				;;
2307			*-dgux*)
2308				vendor=dg
2309				;;
2310			*-luna*)
2311				vendor=omron
2312				;;
2313			*-genix*)
2314				vendor=ns
2315				;;
2316			*-clix*)
2317				vendor=intergraph
2318				;;
2319			*-mvs* | *-opened*)
2320				vendor=ibm
2321				;;
2322			*-os400*)
2323				vendor=ibm
2324				;;
2325			s390-* | s390x-*)
2326				vendor=ibm
2327				;;
2328			*-ptx*)
2329				vendor=sequent
2330				;;
2331			*-tpf*)
2332				vendor=ibm
2333				;;
2334			*-vxsim* | *-vxworks* | *-windiss*)
2335				vendor=wrs
2336				;;
2337			*-aux*)
2338				vendor=apple
2339				;;
2340			*-hms*)
2341				vendor=hitachi
2342				;;
2343			*-mpw* | *-macos*)
2344				vendor=apple
2345				;;
2346			*-*mint | *-mint[0-9]* | *-*MiNT | *-MiNT[0-9]*)
2347				vendor=atari
2348				;;
2349			*-vos*)
2350				vendor=stratus
2351				;;
2352		esac
2353		;;
2354esac
2355
2356echo "$cpu-$vendor${kernel:+-$kernel}${os:+-$os}${obj:+-$obj}"
2357exit
2358
2359# Local variables:
2360# eval: (add-hook 'before-save-hook 'time-stamp nil t)
2361# time-stamp-start: "timestamp='"
2362# time-stamp-format: "%Y-%02m-%02d"
2363# time-stamp-end: "'"
2364# End:
2365