config.sub raw

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