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