xref: /freebsd/contrib/unbound/config.sub (revision 56b17de1e8360fe131d425de20b5e75ff3ea897c)
1#! /bin/sh
2# Configuration validation subroutine script.
3#   Copyright 1992-2024 Free Software Foundation, Inc.
4
5# shellcheck disable=SC2006,SC2268,SC2162 # see below for rationale
6
7timestamp='2024-05-27'
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-2024 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			| linux-* \
149			| managarm-* \
150			| netbsd*-eabi* \
151			| netbsd*-gnu* \
152			| nto-qnx* \
153			| os2-emx* \
154			| rtmk-nova* \
155			| storm-chaos* \
156			| uclinux-gnu* \
157			| uclinux-uclibc* \
158			| windows-* )
159				basic_machine=$field1
160				basic_os=$maybe_os
161				;;
162			android-linux)
163				basic_machine=$field1-unknown
164				basic_os=linux-android
165				;;
166			*)
167				basic_machine=$field1-$field2
168				basic_os=$field3
169				;;
170		esac
171		;;
172	*-*)
173		case $field1-$field2 in
174			# Shorthands that happen to contain a single dash
175			convex-c[12] | convex-c3[248])
176				basic_machine=$field2-convex
177				basic_os=
178				;;
179			decstation-3100)
180				basic_machine=mips-dec
181				basic_os=
182				;;
183			*-*)
184				# Second component is usually, but not always the OS
185				case $field2 in
186					# Do not treat sunos as a manufacturer
187					sun*os*)
188						basic_machine=$field1
189						basic_os=$field2
190						;;
191					# Manufacturers
192					  3100* \
193					| 32* \
194					| 3300* \
195					| 3600* \
196					| 7300* \
197					| acorn \
198					| altos* \
199					| apollo \
200					| apple \
201					| atari \
202					| att* \
203					| axis \
204					| be \
205					| bull \
206					| cbm \
207					| ccur \
208					| cisco \
209					| commodore \
210					| convergent* \
211					| convex* \
212					| cray \
213					| crds \
214					| dec* \
215					| delta* \
216					| dg \
217					| digital \
218					| dolphin \
219					| encore* \
220					| gould \
221					| harris \
222					| highlevel \
223					| hitachi* \
224					| hp \
225					| ibm* \
226					| intergraph \
227					| isi* \
228					| knuth \
229					| masscomp \
230					| microblaze* \
231					| mips* \
232					| motorola* \
233					| ncr* \
234					| news \
235					| next \
236					| ns \
237					| oki \
238					| omron* \
239					| pc533* \
240					| rebel \
241					| rom68k \
242					| rombug \
243					| semi \
244					| sequent* \
245					| siemens \
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					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-*)
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			| ip2k \
1325			| iq2000 \
1326			| javascript \
1327			| k1om \
1328			| kvx \
1329			| le32 \
1330			| le64 \
1331			| lm32 \
1332			| loongarch32 \
1333			| loongarch64 \
1334			| m32c \
1335			| m32r \
1336			| m32rle \
1337			| m5200 \
1338			| m68000 \
1339			| m680[012346]0 \
1340			| m6811 \
1341			| m6812 \
1342			| m68360 \
1343			| m683?2 \
1344			| m68hc11 \
1345			| m68hc12 \
1346			| m68hcs12x \
1347			| m68k \
1348			| m88110 \
1349			| m88k \
1350			| maxq \
1351			| mb \
1352			| mcore \
1353			| mep \
1354			| metag \
1355			| microblaze \
1356			| microblazeel \
1357			| mips* \
1358			| mmix \
1359			| mn10200 \
1360			| mn10300 \
1361			| moxie \
1362			| msp430 \
1363			| mt \
1364			| nanomips* \
1365			| nds32 \
1366			| nds32be \
1367			| nds32le \
1368			| nfp \
1369			| nios \
1370			| nios2 \
1371			| nios2eb \
1372			| nios2el \
1373			| none \
1374			| np1 \
1375			| ns16k \
1376			| ns32k \
1377			| nvptx \
1378			| open8 \
1379			| or1k* \
1380			| or32 \
1381			| orion \
1382			| pdp10 \
1383			| pdp11 \
1384			| picochip \
1385			| pj \
1386			| pjl \
1387			| pn \
1388			| power \
1389			| powerpc \
1390			| powerpc64 \
1391			| powerpc64le \
1392			| powerpcle \
1393			| powerpcspe \
1394			| pru \
1395			| pyramid \
1396			| riscv \
1397			| riscv32 \
1398			| riscv32be \
1399			| riscv64 \
1400			| riscv64be \
1401			| rl78 \
1402			| romp \
1403			| rs6000 \
1404			| rx \
1405			| s390 \
1406			| s390x \
1407			| score \
1408			| sh \
1409			| sh64 \
1410			| sh64le \
1411			| sh[12345][lb]e \
1412			| sh[1234] \
1413			| sh[1234]e[lb] \
1414			| sh[23]e \
1415			| sh[23]ele \
1416			| sh[24]a \
1417			| sh[24]ae[lb] \
1418			| sh[lb]e \
1419			| she[lb] \
1420			| shl \
1421			| sparc \
1422			| sparc64 \
1423			| sparc64b \
1424			| sparc64v \
1425			| sparc86x \
1426			| sparclet \
1427			| sparclite \
1428			| sparcv8 \
1429			| sparcv9 \
1430			| sparcv9b \
1431			| sparcv9v \
1432			| spu \
1433			| sv1 \
1434			| sx* \
1435			| tahoe \
1436			| thumbv7* \
1437			| tic30 \
1438			| tic4x \
1439			| tic54x \
1440			| tic55x \
1441			| tic6x \
1442			| tic80 \
1443			| tron \
1444			| ubicom32 \
1445			| v70 \
1446			| v810 \
1447			| v850 \
1448			| v850e \
1449			| v850e1 \
1450			| v850e2 \
1451			| v850e2v3 \
1452			| v850es \
1453			| vax \
1454			| vc4 \
1455			| visium \
1456			| w65 \
1457			| wasm32 \
1458			| wasm64 \
1459			| we32k \
1460			| x86 \
1461			| x86_64 \
1462			| xc16x \
1463			| xgate \
1464			| xps100 \
1465			| xstormy16 \
1466			| xtensa* \
1467			| ymp \
1468			| z80 \
1469			| z8k)
1470				;;
1471
1472			*)
1473				echo "Invalid configuration '$1': machine '$cpu-$vendor' not recognized" 1>&2
1474				exit 1
1475				;;
1476		esac
1477		;;
1478esac
1479
1480# Here we canonicalize certain aliases for manufacturers.
1481case $vendor in
1482	digital*)
1483		vendor=dec
1484		;;
1485	commodore*)
1486		vendor=cbm
1487		;;
1488	*)
1489		;;
1490esac
1491
1492# Decode manufacturer-specific aliases for certain operating systems.
1493
1494if test x"$basic_os" != x
1495then
1496
1497# First recognize some ad-hoc cases, or perhaps split kernel-os, or else just
1498# set os.
1499obj=
1500case $basic_os in
1501	gnu/linux*)
1502		kernel=linux
1503		os=`echo "$basic_os" | sed -e 's|gnu/linux|gnu|'`
1504		;;
1505	os2-emx)
1506		kernel=os2
1507		os=`echo "$basic_os" | sed -e 's|os2-emx|emx|'`
1508		;;
1509	nto-qnx*)
1510		kernel=nto
1511		os=`echo "$basic_os" | sed -e 's|nto-qnx|qnx|'`
1512		;;
1513	*-*)
1514		saved_IFS=$IFS
1515		IFS="-" read kernel os <<EOF
1516$basic_os
1517EOF
1518		IFS=$saved_IFS
1519		;;
1520	# Default OS when just kernel was specified
1521	nto*)
1522		kernel=nto
1523		os=`echo "$basic_os" | sed -e 's|nto|qnx|'`
1524		;;
1525	linux*)
1526		kernel=linux
1527		os=`echo "$basic_os" | sed -e 's|linux|gnu|'`
1528		;;
1529	managarm*)
1530		kernel=managarm
1531		os=`echo "$basic_os" | sed -e 's|managarm|mlibc|'`
1532		;;
1533	*)
1534		kernel=
1535		os=$basic_os
1536		;;
1537esac
1538
1539# Now, normalize the OS (knowing we just have one component, it's not a kernel,
1540# etc.)
1541case $os in
1542	# First match some system type aliases that might get confused
1543	# with valid system types.
1544	# solaris* is a basic system type, with this one exception.
1545	auroraux)
1546		os=auroraux
1547		;;
1548	bluegene*)
1549		os=cnk
1550		;;
1551	solaris1 | solaris1.*)
1552		os=`echo "$os" | sed -e 's|solaris1|sunos4|'`
1553		;;
1554	solaris)
1555		os=solaris2
1556		;;
1557	unixware*)
1558		os=sysv4.2uw
1559		;;
1560	# The marketing names for NeXT's operating systems were
1561	# NeXTSTEP, NeXTSTEP 2, OpenSTEP 3, OpenSTEP 4.  'openstep' is
1562	# mapped to 'openstep3', but 'openstep1' and 'openstep2' are
1563	# mapped to 'nextstep' and 'nextstep2', consistent with the
1564	# treatment of SunOS/Solaris.
1565	ns | ns1 | nextstep | nextstep1 | openstep1)
1566		os=nextstep
1567		;;
1568	ns2 | nextstep2 | openstep2)
1569		os=nextstep2
1570		;;
1571	ns3 | nextstep3 | openstep | openstep3)
1572		os=openstep3
1573		;;
1574	ns4 | nextstep4 | openstep4)
1575		os=openstep4
1576		;;
1577	# es1800 is here to avoid being matched by es* (a different OS)
1578	es1800*)
1579		os=ose
1580		;;
1581	# Some version numbers need modification
1582	chorusos*)
1583		os=chorusos
1584		;;
1585	isc)
1586		os=isc2.2
1587		;;
1588	sco6)
1589		os=sco5v6
1590		;;
1591	sco5)
1592		os=sco3.2v5
1593		;;
1594	sco4)
1595		os=sco3.2v4
1596		;;
1597	sco3.2.[4-9]*)
1598		os=`echo "$os" | sed -e 's/sco3.2./sco3.2v/'`
1599		;;
1600	sco*v* | scout)
1601		# Don't match below
1602		;;
1603	sco*)
1604		os=sco3.2v2
1605		;;
1606	psos*)
1607		os=psos
1608		;;
1609	qnx*)
1610		os=qnx
1611		;;
1612	hiux*)
1613		os=hiuxwe2
1614		;;
1615	lynx*178)
1616		os=lynxos178
1617		;;
1618	lynx*5)
1619		os=lynxos5
1620		;;
1621	lynxos*)
1622		# don't get caught up in next wildcard
1623		;;
1624	lynx*)
1625		os=lynxos
1626		;;
1627	mac[0-9]*)
1628		os=`echo "$os" | sed -e 's|mac|macos|'`
1629		;;
1630	opened*)
1631		os=openedition
1632		;;
1633	os400*)
1634		os=os400
1635		;;
1636	sunos5*)
1637		os=`echo "$os" | sed -e 's|sunos5|solaris2|'`
1638		;;
1639	sunos6*)
1640		os=`echo "$os" | sed -e 's|sunos6|solaris3|'`
1641		;;
1642	wince*)
1643		os=wince
1644		;;
1645	utek*)
1646		os=bsd
1647		vendor=`echo "$vendor" | sed -e 's|^unknown$|tektronix|'`
1648		;;
1649	dynix*)
1650		os=bsd
1651		;;
1652	acis*)
1653		os=aos
1654		;;
1655	atheos*)
1656		os=atheos
1657		;;
1658	syllable*)
1659		os=syllable
1660		;;
1661	386bsd)
1662		os=bsd
1663		;;
1664	ctix*)
1665		os=sysv
1666		vendor=`echo "$vendor" | sed -e 's|^unknown$|convergent|'`
1667		;;
1668	uts*)
1669		os=sysv
1670		;;
1671	nova*)
1672		kernel=rtmk
1673		os=nova
1674		;;
1675	# Preserve the version number of sinix5.
1676	sinix5.*)
1677		os=`echo "$os" | sed -e 's|sinix|sysv|'`
1678		vendor=`echo "$vendor" | sed -e 's|^unknown$|sni|'`
1679		;;
1680	sinix*)
1681		os=sysv4
1682		vendor=`echo "$vendor" | sed -e 's|^unknown$|sni|'`
1683		;;
1684	tpf*)
1685		os=tpf
1686		;;
1687	triton*)
1688		os=sysv3
1689		;;
1690	oss*)
1691		os=sysv3
1692		;;
1693	svr4*)
1694		os=sysv4
1695		;;
1696	svr3)
1697		os=sysv3
1698		;;
1699	sysvr4)
1700		os=sysv4
1701		;;
1702	ose*)
1703		os=ose
1704		;;
1705	*mint | mint[0-9]* | *MiNT | MiNT[0-9]*)
1706		os=mint
1707		;;
1708	dicos*)
1709		os=dicos
1710		;;
1711	pikeos*)
1712		# Until real need of OS specific support for
1713		# particular features comes up, bare metal
1714		# configurations are quite functional.
1715		case $cpu in
1716		    arm*)
1717			os=eabi
1718			;;
1719		    *)
1720			os=
1721			obj=elf
1722			;;
1723		esac
1724		;;
1725	aout* | coff* | elf* | pe*)
1726		# These are machine code file formats, not OSes
1727		obj=$os
1728		os=
1729		;;
1730	*)
1731		# No normalization, but not necessarily accepted, that comes below.
1732		;;
1733esac
1734
1735else
1736
1737# Here we handle the default operating systems that come with various machines.
1738# The value should be what the vendor currently ships out the door with their
1739# machine or put another way, the most popular os provided with the machine.
1740
1741# Note that if you're going to try to match "-MANUFACTURER" here (say,
1742# "-sun"), then you have to tell the case statement up towards the top
1743# that MANUFACTURER isn't an operating system.  Otherwise, code above
1744# will signal an error saying that MANUFACTURER isn't an operating
1745# system, and we'll never get to this point.
1746
1747kernel=
1748obj=
1749case $cpu-$vendor in
1750	score-*)
1751		os=
1752		obj=elf
1753		;;
1754	spu-*)
1755		os=
1756		obj=elf
1757		;;
1758	*-acorn)
1759		os=riscix1.2
1760		;;
1761	arm*-rebel)
1762		kernel=linux
1763		os=gnu
1764		;;
1765	arm*-semi)
1766		os=
1767		obj=aout
1768		;;
1769	c4x-* | tic4x-*)
1770		os=
1771		obj=coff
1772		;;
1773	c8051-*)
1774		os=
1775		obj=elf
1776		;;
1777	clipper-intergraph)
1778		os=clix
1779		;;
1780	hexagon-*)
1781		os=
1782		obj=elf
1783		;;
1784	tic54x-*)
1785		os=
1786		obj=coff
1787		;;
1788	tic55x-*)
1789		os=
1790		obj=coff
1791		;;
1792	tic6x-*)
1793		os=
1794		obj=coff
1795		;;
1796	# This must come before the *-dec entry.
1797	pdp10-*)
1798		os=tops20
1799		;;
1800	pdp11-*)
1801		os=none
1802		;;
1803	*-dec | vax-*)
1804		os=ultrix4.2
1805		;;
1806	m68*-apollo)
1807		os=domain
1808		;;
1809	i386-sun)
1810		os=sunos4.0.2
1811		;;
1812	m68000-sun)
1813		os=sunos3
1814		;;
1815	m68*-cisco)
1816		os=
1817		obj=aout
1818		;;
1819	mep-*)
1820		os=
1821		obj=elf
1822		;;
1823	# The -sgi and -siemens entries must be before the mips- entry
1824	# or we get the wrong os.
1825	*-sgi)
1826		os=irix
1827		;;
1828	*-siemens)
1829		os=sysv4
1830		;;
1831	mips*-cisco)
1832		os=
1833		obj=elf
1834		;;
1835	mips*-*|nanomips*-*)
1836		os=
1837		obj=elf
1838		;;
1839	or32-*)
1840		os=
1841		obj=coff
1842		;;
1843	# This must be before the sparc-* entry or we get the wrong os.
1844	*-tti)
1845		os=sysv3
1846		;;
1847	sparc-* | *-sun)
1848		os=sunos4.1.1
1849		;;
1850	pru-*)
1851		os=
1852		obj=elf
1853		;;
1854	*-be)
1855		os=beos
1856		;;
1857	*-ibm)
1858		os=aix
1859		;;
1860	*-knuth)
1861		os=mmixware
1862		;;
1863	*-wec)
1864		os=proelf
1865		;;
1866	*-winbond)
1867		os=proelf
1868		;;
1869	*-oki)
1870		os=proelf
1871		;;
1872	*-hp)
1873		os=hpux
1874		;;
1875	*-hitachi)
1876		os=hiuxwe2
1877		;;
1878	i860-* | *-att | *-ncr | *-altos | *-motorola | *-convergent)
1879		os=sysv
1880		;;
1881	*-cbm)
1882		os=amigaos
1883		;;
1884	*-dg)
1885		os=dgux
1886		;;
1887	*-dolphin)
1888		os=sysv3
1889		;;
1890	m68k-ccur)
1891		os=rtu
1892		;;
1893	m88k-omron*)
1894		os=luna
1895		;;
1896	*-next)
1897		os=nextstep
1898		;;
1899	*-sequent)
1900		os=ptx
1901		;;
1902	*-crds)
1903		os=unos
1904		;;
1905	*-ns)
1906		os=genix
1907		;;
1908	i370-*)
1909		os=mvs
1910		;;
1911	*-gould)
1912		os=sysv
1913		;;
1914	*-highlevel)
1915		os=bsd
1916		;;
1917	*-encore)
1918		os=bsd
1919		;;
1920	*-masscomp)
1921		os=rtu
1922		;;
1923	f30[01]-fujitsu | f700-fujitsu)
1924		os=uxpv
1925		;;
1926	*-rom68k)
1927		os=
1928		obj=coff
1929		;;
1930	*-*bug)
1931		os=
1932		obj=coff
1933		;;
1934	*-apple)
1935		os=macos
1936		;;
1937	*-atari*)
1938		os=mint
1939		;;
1940	*-wrs)
1941		os=vxworks
1942		;;
1943	*)
1944		os=none
1945		;;
1946esac
1947
1948fi
1949
1950# Now, validate our (potentially fixed-up) individual pieces (OS, OBJ).
1951
1952case $os in
1953	# Sometimes we do "kernel-libc", so those need to count as OSes.
1954	llvm* | musl* | newlib* | relibc* | uclibc*)
1955		;;
1956	# Likewise for "kernel-abi"
1957	eabi* | gnueabi*)
1958		;;
1959	# VxWorks passes extra cpu info in the 4th filed.
1960	simlinux | simwindows | spe)
1961		;;
1962	# See `case $cpu-$os` validation below
1963	ghcjs)
1964		;;
1965	# Now accept the basic system types.
1966	# Each alternative MUST end in a * to match a version number.
1967	  abug \
1968	| aix* \
1969	| amdhsa* \
1970	| amigados* \
1971	| amigaos* \
1972	| android* \
1973	| aof* \
1974	| aos* \
1975	| aros* \
1976	| atheos* \
1977	| auroraux* \
1978	| aux* \
1979	| beos* \
1980	| bitrig* \
1981	| bme* \
1982	| bosx* \
1983	| bsd* \
1984	| cegcc* \
1985	| chorusos* \
1986	| chorusrdb* \
1987	| clix* \
1988	| cloudabi* \
1989	| cnk* \
1990	| conix* \
1991	| cos* \
1992	| cxux* \
1993	| cygwin* \
1994	| darwin* \
1995	| dgux* \
1996	| dicos* \
1997	| dnix* \
1998	| domain* \
1999	| dragonfly* \
2000	| drops* \
2001	| ebmon* \
2002	| ecoff* \
2003	| ekkobsd* \
2004	| emscripten* \
2005	| emx* \
2006	| es* \
2007	| fiwix* \
2008	| freebsd* \
2009	| fuchsia* \
2010	| genix* \
2011	| genode* \
2012	| glidix* \
2013	| gnu* \
2014	| go32* \
2015	| haiku* \
2016	| hcos* \
2017	| hiux* \
2018	| hms* \
2019	| hpux* \
2020	| ieee* \
2021	| interix* \
2022	| ios* \
2023	| iris* \
2024	| irix* \
2025	| ironclad* \
2026	| isc* \
2027	| its* \
2028	| l4re* \
2029	| libertybsd* \
2030	| lites* \
2031	| lnews* \
2032	| luna* \
2033	| lynxos* \
2034	| mach* \
2035	| macos* \
2036	| magic* \
2037	| mbr* \
2038	| midipix* \
2039	| midnightbsd* \
2040	| mingw32* \
2041	| mingw64* \
2042	| minix* \
2043	| mint* \
2044	| mirbsd* \
2045	| mks* \
2046	| mlibc* \
2047	| mmixware* \
2048	| mon960* \
2049	| morphos* \
2050	| moss* \
2051	| moxiebox* \
2052	| mpeix* \
2053	| mpw* \
2054	| msdos* \
2055	| msys* \
2056	| mvs* \
2057	| nacl* \
2058	| netbsd* \
2059	| netware* \
2060	| newsos* \
2061	| nextstep* \
2062	| nindy* \
2063	| nonstopux* \
2064	| nova* \
2065	| nsk* \
2066	| nucleus* \
2067	| nx6 \
2068	| nx7 \
2069	| oabi* \
2070	| ohos* \
2071	| onefs* \
2072	| openbsd* \
2073	| openedition* \
2074	| openstep* \
2075	| os108* \
2076	| os2* \
2077	| os400* \
2078	| os68k* \
2079	| os9* \
2080	| ose* \
2081	| osf* \
2082	| oskit* \
2083	| osx* \
2084	| palmos* \
2085	| phoenix* \
2086	| plan9* \
2087	| powermax* \
2088	| powerunix* \
2089	| proelf* \
2090	| psos* \
2091	| psp* \
2092	| ptx* \
2093	| pw32* \
2094	| qnx* \
2095	| rdos* \
2096	| redox* \
2097	| rhapsody* \
2098	| riscix* \
2099	| riscos* \
2100	| rtems* \
2101	| rtmk* \
2102	| rtu* \
2103	| scout* \
2104	| secbsd* \
2105	| sei* \
2106	| serenity* \
2107	| sim* \
2108	| skyos* \
2109	| solaris* \
2110	| solidbsd* \
2111	| sortix* \
2112	| storm-chaos* \
2113	| sunos \
2114	| sunos[34]* \
2115	| superux* \
2116	| syllable* \
2117	| sym* \
2118	| sysv* \
2119	| tenex* \
2120	| tirtos* \
2121	| toppers* \
2122	| tops10* \
2123	| tops20* \
2124	| tpf* \
2125	| tvos* \
2126	| twizzler* \
2127	| uclinux* \
2128	| udi* \
2129	| udk* \
2130	| ultrix* \
2131	| unicos* \
2132	| uniplus* \
2133	| unleashed* \
2134	| unos* \
2135	| uwin* \
2136	| uxpv* \
2137	| v88r* \
2138	|*vms* \
2139	| vos* \
2140	| vsta* \
2141	| vxsim* \
2142	| vxworks* \
2143	| wasi* \
2144	| watchos* \
2145	| wince* \
2146	| windiss* \
2147	| windows* \
2148	| winnt* \
2149	| xenix* \
2150	| xray* \
2151	| zephyr* \
2152	| zvmoe* )
2153		;;
2154	# This one is extra strict with allowed versions
2155	sco3.2v2 | sco3.2v[4-9]* | sco5v6*)
2156		# Don't forget version if it is 3.2v4 or newer.
2157		;;
2158	# This refers to builds using the UEFI calling convention
2159	# (which depends on the architecture) and PE file format.
2160	# Note that this is both a different calling convention and
2161	# different file format than that of GNU-EFI
2162	# (x86_64-w64-mingw32).
2163	uefi)
2164		;;
2165	none)
2166		;;
2167	kernel* | msvc* )
2168		# Restricted further below
2169		;;
2170	'')
2171		if test x"$obj" = x
2172		then
2173			echo "Invalid configuration '$1': Blank OS only allowed with explicit machine code file format" 1>&2
2174		fi
2175		;;
2176	*)
2177		echo "Invalid configuration '$1': OS '$os' not recognized" 1>&2
2178		exit 1
2179		;;
2180esac
2181
2182case $obj in
2183	aout* | coff* | elf* | pe*)
2184		;;
2185	'')
2186		# empty is fine
2187		;;
2188	*)
2189		echo "Invalid configuration '$1': Machine code format '$obj' not recognized" 1>&2
2190		exit 1
2191		;;
2192esac
2193
2194# Here we handle the constraint that a (synthetic) cpu and os are
2195# valid only in combination with each other and nowhere else.
2196case $cpu-$os in
2197	# The "javascript-unknown-ghcjs" triple is used by GHC; we
2198	# accept it here in order to tolerate that, but reject any
2199	# variations.
2200	javascript-ghcjs)
2201		;;
2202	javascript-* | *-ghcjs)
2203		echo "Invalid configuration '$1': cpu '$cpu' is not valid with os '$os$obj'" 1>&2
2204		exit 1
2205		;;
2206esac
2207
2208# As a final step for OS-related things, validate the OS-kernel combination
2209# (given a valid OS), if there is a kernel.
2210case $kernel-$os-$obj in
2211	linux-gnu*- | linux-android*- | linux-dietlibc*- | linux-llvm*- \
2212		    | linux-mlibc*- | linux-musl*- | linux-newlib*- \
2213		    | linux-relibc*- | linux-uclibc*- | linux-ohos*- )
2214		;;
2215	uclinux-uclibc*- | uclinux-gnu*- )
2216		;;
2217	managarm-mlibc*- | managarm-kernel*- )
2218		;;
2219	windows*-msvc*-)
2220		;;
2221	-dietlibc*- | -llvm*- | -mlibc*- | -musl*- | -newlib*- | -relibc*- \
2222		    | -uclibc*- )
2223		# These are just libc implementations, not actual OSes, and thus
2224		# require a kernel.
2225		echo "Invalid configuration '$1': libc '$os' needs explicit kernel." 1>&2
2226		exit 1
2227		;;
2228	-kernel*- )
2229		echo "Invalid configuration '$1': '$os' needs explicit kernel." 1>&2
2230		exit 1
2231		;;
2232	*-kernel*- )
2233		echo "Invalid configuration '$1': '$kernel' does not support '$os'." 1>&2
2234		exit 1
2235		;;
2236	*-msvc*- )
2237		echo "Invalid configuration '$1': '$os' needs 'windows'." 1>&2
2238		exit 1
2239		;;
2240	kfreebsd*-gnu*- | knetbsd*-gnu*- | netbsd*-gnu*- | kopensolaris*-gnu*-)
2241		;;
2242	vxworks-simlinux- | vxworks-simwindows- | vxworks-spe-)
2243		;;
2244	nto-qnx*-)
2245		;;
2246	os2-emx-)
2247		;;
2248	rtmk-nova-)
2249		;;
2250	*-eabi*- | *-gnueabi*-)
2251		;;
2252	none--*)
2253		# None (no kernel, i.e. freestanding / bare metal),
2254		# can be paired with an machine code file format
2255		;;
2256	-*-)
2257		# Blank kernel with real OS is always fine.
2258		;;
2259	--*)
2260		# Blank kernel and OS with real machine code file format is always fine.
2261		;;
2262	*-*-*)
2263		echo "Invalid configuration '$1': Kernel '$kernel' not known to work with OS '$os'." 1>&2
2264		exit 1
2265		;;
2266esac
2267
2268# Here we handle the case where we know the os, and the CPU type, but not the
2269# manufacturer.  We pick the logical manufacturer.
2270case $vendor in
2271	unknown)
2272		case $cpu-$os in
2273			*-riscix*)
2274				vendor=acorn
2275				;;
2276			*-sunos* | *-solaris*)
2277				vendor=sun
2278				;;
2279			*-cnk* | *-aix*)
2280				vendor=ibm
2281				;;
2282			*-beos*)
2283				vendor=be
2284				;;
2285			*-hpux*)
2286				vendor=hp
2287				;;
2288			*-mpeix*)
2289				vendor=hp
2290				;;
2291			*-hiux*)
2292				vendor=hitachi
2293				;;
2294			*-unos*)
2295				vendor=crds
2296				;;
2297			*-dgux*)
2298				vendor=dg
2299				;;
2300			*-luna*)
2301				vendor=omron
2302				;;
2303			*-genix*)
2304				vendor=ns
2305				;;
2306			*-clix*)
2307				vendor=intergraph
2308				;;
2309			*-mvs* | *-opened*)
2310				vendor=ibm
2311				;;
2312			*-os400*)
2313				vendor=ibm
2314				;;
2315			s390-* | s390x-*)
2316				vendor=ibm
2317				;;
2318			*-ptx*)
2319				vendor=sequent
2320				;;
2321			*-tpf*)
2322				vendor=ibm
2323				;;
2324			*-vxsim* | *-vxworks* | *-windiss*)
2325				vendor=wrs
2326				;;
2327			*-aux*)
2328				vendor=apple
2329				;;
2330			*-hms*)
2331				vendor=hitachi
2332				;;
2333			*-mpw* | *-macos*)
2334				vendor=apple
2335				;;
2336			*-*mint | *-mint[0-9]* | *-*MiNT | *-MiNT[0-9]*)
2337				vendor=atari
2338				;;
2339			*-vos*)
2340				vendor=stratus
2341				;;
2342		esac
2343		;;
2344esac
2345
2346echo "$cpu-$vendor${kernel:+-$kernel}${os:+-$os}${obj:+-$obj}"
2347exit
2348
2349# Local variables:
2350# eval: (add-hook 'before-save-hook 'time-stamp)
2351# time-stamp-start: "timestamp='"
2352# time-stamp-format: "%:y-%02m-%02d"
2353# time-stamp-end: "'"
2354# End:
2355