#!/bin/sh

# Configuration subroutine to validate and canonicalize a configuration type.
# Supply the specified configuration type as an argument.
# If it is invalid, we print an error message on stderr and exit with code 1.
# Otherwise, we print the canonical config type on stdout and succeed.

# This file is supposed to be the same for all GNU packages
# and recognize all the CPU types, system types and aliases
# that are meaningful with *any* GNU software.
# Each package is responsible for reporting which valid configurations
# it does not support.  The user should be able to distinguish
# a failure to support a valid configuration from a meaningless
# configuration.

# Separate what the user gave into CPU-company and OS (if any).
basic_machine=`echo $1 | sed 's/-[^-]*$//'`
if [ $basic_machine != $1 ]
then os=`echo $1 | sed 's/^.*-/-/'`
else os=; fi

# Decode aliases for certain machine-company combinations.
case $basic_machine in
	# Recognize the basic CPU types without company name.
	vax | tahoe | i386 | i860 | m68k | m68000 | m88k | sparc | ns32k \
	    | alliant | arm | c1 | c2 | mips | pyramid | tron | a29k \
	    | rtpc | rs6000 | i960 | none)
		;;
	# Recognize the basic CPU types with company name.
	vax-* | tahoe-* | i386-* | i860-* | m68k-* | m68000-* | m88k-* \
		| sparc-* | ns32k-* | alliant-* | arm-* | c1-* | c2-* \
		| mips-* | pyramid-* | tron-* | a29k-* | rtpc-* \
		| rs6000-* | i960-*)
		;;
	# Recognize the machine names
	# which stand for a CPU time and a company.
	nindy960)
		basic_machine=i960-intel
		os=-nindy
		;;
	vxworks68)
		basic_machine=m68k-wrs
		os=-vxworks
		;;
	vxworks960)
		basic_machine=i960-wrs
		os=-vxworks
		;;
	am29k)
		basic_machine=a29k-unknown
		os=-bsd
		;;
	umax)
		basic_machine=ns32k-umax
		os=-sysv # maybe?
		;;
	pn)
		basic_machine=pn-gould
		os=-sysv # maybe?
		;;
	np1)
		basic_machine=np1-gould
		os=-sysv # maybe?
		;;
	merlin)
		basic_machine=merlin-utek
		os=-sysv # maybe?
		;;
	iris | iris4d)
		basic_machine=mips-sgi
		os=-sysv # maybe?
		;;
	news1000)
		basic_machine=m68030-sony
		os=-sysv # maybe?
		;;
	news | news700 | news800 | news900)
		basic_machine=m68k-sony
		os=-sysv # maybe?
		;;
	unixpc | safari | pc7300 | 3b1 | 7300 | 7300-att | att-7300)
		basic_machine=m68k-att
		os=-sysv # maybe?
		;;
	delta | 3300 | motorola-3300 | motorola-delta \
	      | 3300-motorola | delta-motorola)
		basic_machine=m68k-motorola
		os=-sysv # maybe?
		;;
	vax-dec)
		basic_machine=vax
		os=-ultrix # maybe?
		;;
	balance)
		basic_machine=ns32k-sequent
		os=-dynix
		;;
        mmax)
		basic_machine=ns32k-encore
		os=-sysv # maybe?
		;;
	symmetry)
		basic_machine=i386-sequent
		os=-dynix
		;;
	sun2)
		basic_machine=m68000-sun
		os=-sunos4
		;;
	sun2os3)
		basic_machine=m68000-sun
		os=-sunos3
		;;
	sun2os4)
		basic_machine=m68000-sun
		os=-sunos4
		;;
	sun3)
		basic_machine=m68k-sun
		os=-sunos4
		;;
	sun3os3)
		basic_machine=m68k-sun
		os=-sunos3
		;;
	sun3os4)
		basic_machine=m68k-sun
		os=-sunos4
		;;
	sun4)
		basic_machine=sparc-sun
		os=-sunos4
		;;
	sun4os3)
		basic_machine=sparc-sun
		os=-sunos3
		;;
	sun4os4)
		basic_machine=sparc-sun
		os=-sunos4
		;;
	pbd)
		basic_machine=sparc-unicom
		os=-sysv
		;;
	roadrunner | sun386 | sun386i)
		basic_machine=i386-sun
		os=-sunos
		;;
	ps2)
		basic_machine=i386-ibm
		os=-sysv # maybe?
		;;
	i386sco)
		basic_machine=i386-sco
		os=-sysv # maybe?
		;;
	i386v)
		basic_machine=i386-unknown
		os=-sysv
		;;
	i386v32)
		basic_machine=i386-unknown
		os=-sysv32
		;;
	next)
		basic_machine=m68k-next
		os=-sysv # maybe?
		;;
	hp300bsd)
		basic_machine=m68k-hp
		os=-bsd
		;;
	hp300hpux | hpux | hp9k3[2-9][0-9])
		basic_machine=m68k-hp
		os=-hpux
		;;
	hp9k31[0-9] | hp9k2[0-9][0-9])
		basic_machine=m68000-hp
		os=-hpux
		;;
	isi | isi68)
		basic_machine=m68k-isi
		os=-sysv # maybe?
		;;
	apollo68)
		basic_machine=m68k-apollo
		os=-sysv # maybe?
		;;
	altos | altos3068)
		basic_machine=m68k-altos
		os=-sysv # maybe?
		;;
	altosgas)
		basic_machine=m68k-altos
		os=-gas
		;;
	miniframe)
		basic_machine=m68000-convergent
		os=-sysv # maybe?
		;;
	tower | tower-32)
		basic_machine=m68k-ncr
		os=-sysv # maybe?
		;;
	bigmips | news-3600 | risc-news)
		basic_machine=mips-sony
		os=-newsos # maybe?
		;;
	littlemips)
		basic_machine=mips-little
		os=-bsd
		;;
	dec3100 | decstatn | decstation | decstation-3100 | pmax)
		basic_machine=mips-dec
		os=-ultrix
		;;
	magnum | m3230)
		basic_machine=mips-mips
		os=-sysv # maybe?
		;;
	gmicro)
		basic_machine=tron
		os=-sysv # maybe?
		;;
	convex-c1)
		basic_machine=c1-convex
		os=-sysv # maybe?
		;;
	convex-c2)
		basic_machine=c2-convex
		os=-sysv # maybe?
		;;
	*)
		echo Invalid configuration \`$1\': machine \`$basic_machine\' not recognized 1>&2
		exit 1
		;;
esac

# Decode manufacturer-specific aliases for certain operating systems.

case $os in
	# First accept the basic system types.
	# The portable systems comes first.
	-bsd* | -sysv* | -mach* \
		| -vms* | -sco* | -esix* | -isc* | -aix* | -sunos* | -hpux* \
		| -unos* | -osf* | -v88r* | -aout | -coff | -bout \
		| -nindy | -vxworks)
		;;
	-newsos*)
		os=-bsd
		;;
	-ultrix*)
		os=-bsd
		;;
	-osfrose*)
		os=-osf
		;;
	-osf*)
		os=-bsd
		;;
	-dynix*)
		os=-bsd
		;;
	-ctix*)
		os=-sysv
		;;
	*)
		# Get rid of the `-' at the beginning of $os.
		os=`echo $1 | sed 's/[^-]*-//'`
		echo Invalid configuration \`$1\': system \`$os\' not recognized 1>&2
		exit 1
		;;
esac

echo ${basic_machine}${os}