#!/bin/sh
# Configuration script for GNU CC
#   Copyright (C) 1988, 1990, 1991, 1992 Free Software Foundation, Inc.

#This file is part of GNU CC.

#GNU CC is free software; you can redistribute it and/or modify
#it under the terms of the GNU General Public License as published by
#the Free Software Foundation; either version 2, or (at your option)
#any later version.

#GNU CC is distributed in the hope that it will be useful,
#but WITHOUT ANY WARRANTY; without even the implied warranty of
#MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
#GNU General Public License for more details.

#You should have received a copy of the GNU General Public License
#along with GNU CC; see the file COPYING.  If not, write to
#the Free Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA.

#
# Shell script to create proper links to machine-dependent files in
# preparation for compiling gcc.
#
# Usage: configure [--srcdir=DIR] [--host=HOST] [--gas] [--nfp] TARGET
#
# If configure succeeds, it leaves its status in config.status.
# If configure fails after disturbing the status quo, 
# 	config.status is removed.
#

progname=$0

# Default --srcdir to the directory where the script is found, 
# if a directory was specified.
srcdir=`echo $0 | sed 's|/[^/]*$||'`
if [ x$srcdir = x$0 ]
then
srcdir=
fi

remove=rm
hard_link=ln
symbolic_link='ln -s'
copy=cp

# Record all the arguments, to write them in config.status.
arguments=$*

#for Test
#remove="echo rm"
#hard_link="echo ln"
#symbolic_link="echo ln -s"

for arg in $*;
do
# Handle -srcdir, etc, with space between it and argument.
  if [ x$next_srcdir = xyes ]
  then srcdir=$arg; next_srcdir=;
# Handle -host, etc, with space between it and argument.
  else if [ x$next_host = xyes ]
  then host=$arg; next_host=;
  else if [ x$next_target = xyes ]
  then target=$arg; next_target=;
  else 
    case $arg in
     -srcdir=* | --srcdir=* | --srcdi=* | --srcd=* | --src=* | --sr=* | --s=*)
	srcdir=`echo $arg | sed 's/-*s[a-z]*=//'`
	;;
     -srcdir | --srcdir | --srcdi | --srcd | --src | --sr | --s)
	next_srcdir=yes
	;;
     -host | --host | --hos | --ho | --h)
	next_host=yes
	;;
     -host=* | --host=* | --hos=* | --ho=* | --h=*)
	host=`echo $arg | sed 's/-*h[a-z]*=//'`
	;; 
     -target | --target | --targe | --targ | --tar | --ta | --t)
	next_target=yes
	;;
     -target=* | --target=* | --targe=* | --targ=* | --tar=* | --ta=* | --t=*)
	target=`echo $arg | sed 's/-*t[a-z]*=//'`
	;; 
     -gas | --gas | --ga | --g)
        gas=yes
	;;
     -nfp | --nfp | --nf | --n)
	nfp=yes
	;;
     -x | --x) ;; # ignored
     *)
# Allow configure HOST TARGET
	if [ x$host = x ]
	then
		host=$target
	fi
	target=$arg
	;;
    esac
  fi; fi; fi
done

# Find the source files, if location was not specified.
if [ x$srcdir = x ]
then
	srcdirdefaulted=1
	srcdir=.
	if [ ! -r tree.c ]
	then
		srcdir=..
	fi
fi

if [ ! -r ${srcdir}/tree.c ]
then
	if [ x$srcdirdefaulted = x ]
	then
	  echo "$progname: Can't find compiler sources in \`${srcdir}'" 1>&2
	else
	  echo "$progname: Can't find compiler sources in \`.' or \`..'" 1>&2
	fi
	exit 1
fi

if [ -r ${srcdir}/config.status ] && [ x$srcdir != x. ]
then
	echo "$progname: \`configure' has been run in \`${srcdir}'" 1>&2
	exit 1
fi

# Complain if an arg is missing
if [ x$target = x ]
then
	echo "No target specified." 1>&2
	echo "Usage: $progname [--srcdir=DIR] [--host=HOST] [--gas] [--nfp] TARGET" 1>&2
	echo -n "Where HOST and TARGET are something like " 1>&2
	echo "\`vax', \`sun3', \`encore', etc." 1>&2
	if [ -r config.status ]
	then
		cat config.status 1>&2
	fi
	exit 1
fi

# Default other arg
if [ x$host = x ]
then
	host=$target
fi

# Decode the host machine, then the target machine.
# For the host machine, we save the xm_file variable as host_xm_file;
# then we decode the target machine and forget everything else
# that came from the host machine.
for machine in $host $target; do

	# Validate the spec, and canonicalize it.
	machine=`$srcdir/config.sub $machine` || exit 1

	cpu_type=
	xm_file=
	tm_file=
	xmake_file=
	tmake_file=

	case $machine in
	# Support site-specific machine types.
	*local*)
		cpu_type=$machine
		xm_file=xm-$machine.h
		tm_file=$machine.h
		if [ -f $srcdir/config/x-$machine ] ; \
		then xmake_file=x-$machine; \
		else true; \
		fi
		if [ -f $srcdir/config/t-$machine ] ; \
		then tmake_file=t-$machine; \
		else true; \
		fi
		;;
	vax-*-bsd*)			# vaxen running BSD
		tm_file=vax.h
		;;
	vax-*-ultrix*)			# vaxen running ultrix
		tm_file=ultrix.h
		;;
	vax-*-vms*)			# vaxen running VMS
		xm_file=xm-vms.h
		tm_file=vms.h
		;;
	vax-*-sysv*)			# vaxen running system V
		xm_file=xm-vaxv.h
		tm_file=vaxv.h
		;;
# This hasn't been upgraded to GCC 2.
#	tahoe-harris-*)			# Harris tahoe, using COFF.
#		tm_file=harris.h
#		;;
#	tahoe-*-bsd*)			# tahoe running BSD
#		xm_file=xm-tahoe.h
#		tm_file=tahoe.h
#		;;
	i386-osfrose*)			# 386 using OSF/rose
		tm_file=i386rose.h
		xmake_file=x-i386rose
		tmake_file=t-i386rose
		;;
	i386-sequent-bsd*) 		# 80386 from Sequent
		xm_file=xm-i386.h
		if [ x$gas = xyes ]
		then
			tm_file=seq386gas.h
		else
			tm_file=seq386.h
		fi
		;;
	i386-*-bsd)
		xm_file=xm-i386.h
		tm_file=i386bsd.h
		tmake_file=t-libc-ok
		;;
	i386-*-mach*)
		xm_file=xm-i386.h
		tm_file=i386mach.h
		tmake_file=t-libc-ok
		;;
	i386-*-sco*)		 	# 80386 running SCO system
		xm_file=xm-i386sco.h
		tm_file=i386sco.h
		xmake_file=x-i386sco
		tmake_file=t-i386sco
		;;
	i386-*-isc*)			# 80386 running ISC system
		xm_file=xm-i386isc.h
		tm_file=i386isc.h
		xmake_file=x-i386isc
		tmake_file=t-i386isc
		;;
	i386-ibm-aix*)			# IBM PS/2 running AIX
		tm_file=aix386.h
		xm_file=xm-aix386.h
		xmake_file=x-aix386
		;;
	i386-sun-sunos*)		# Sun i386 roadrunner
		xm_file=xm-i386sun.h
		tm_file=i386sun.h
		;;
	i386-*-sysv4*)			# Intel 80386's running system V.4
		xm_file=xm-i38v4.h
		xmake_file=x-i386v4
		tm_file=i386v4.h
		tmake_file=t-svr4
		;;
	i386-*-sysv*)			# Intel 80386's running system V
		xm_file=xm-i386v.h
		xmake_file=x-i386v
		tmake_file=t-svr3
		if [ x$gas = xyes ]
		then
			tm_file=i386gas.h
		else
			tm_file=i386v.h
		fi
		;;
	i486-*-sysv4*)			# Intel 80486's running system V.4
		cpu_type=i386
		xm_file=xm-i38v4.h
		xmake_file=x-i386v4
		tm_file=i486v4.h
		tmake_file=t-svr4
		;;
	i860-*-sysv3*)
		xm_file=xm-i86v3.h
		xmake_file=x-i860v3
		tm_file=i860v3.h
		tmake_file=t-svr3
		;;
	i860-*-sysv4*)
		xm_file=xm-i86v4.h
		xmake_file=x-i860v4
		tm_file=i860v4.h
		tmake_file=t-svr4
		;;
	i860-alliant-*)		# Alliant FX/2800
		xm_file=xm-i86v4.h
		xmake_file=x-i860v4
		tm_file=fx2800.h
		tmake_file=t-svr4
		;;
	i860-*-bsd*)
		if [ x$gas = xyes ]
		then
			tm_file=i860bg.h
		else
			tm_file=i860b.h
		fi
		;;
	sparc-tti-*)
		tm_file=pbd.h
		xm_file=xm-pbd.h
		;;
	sparc-*-sunos4*)
		tm_file=sparc.h
		;;
	sparc-*-sunos3*)
		tm_file=sun4o3.h
		;;
	sparc-*-sysv4*)
		xm_file=xm-sparcv4.h
		tm_file=sparcv4.h
		tmake_file=t-svr4
		xmake_file=x-sparcv4
		;;
	m68k-*-amix*)		# Commodore variant of V.4.
		tm_file=amix.h
		xm_file=xm-amix.h
		xmake_file=x-amix
		tmake_file=t-svr4
		;;
	m68k-*-sysv4*)			# Motorola m68k's running system V.4
		tm_file=m68kv4.h
		xm_file=xm-m68kv4.h
		xmake_file=x-m68kv4
		tmake_file=t-svr4
		;;
	m68k-next-*)
		tm_file=next.h
		out_file=next.c
		xm_file=xm-next.h
		tmake_file=t-next
		;;
	m68k-sun-sunos3*)
		if [ x$nfp = xyes ]
		then
			tm_file=sun3n3.h
		else
			tm_file=sun3o3.h
		fi
		;;
	m68k-sun-sunos*)		# For Sunos 4 (the default).
		if [ x$nfp = xyes ]
		then
			tm_file=sun3n.h
		else
			tm_file=sun3.h
		fi
		;;
	m68k-sun-mach*)
		tm_file=sun3mach.h
		;;
	m68k-tti-*)
		tm_file=pbb.h
		xm_file=xm-m68kv.h
		;;
	m68k-hp-hpux*)	# HP 9000 series 300
		xm_file=xm-hp320.h
		if [ x$gas = xyes ]
		then
			xmake_file=x-hp320g
			tm_file=hp320g.h
		else
			xmake_file=x-hp320
			tm_file=hp320.h
		fi
		;;
	m68k-hp-bsd*)			# HP 9000/3xx running Berkeley Unix
		tm_file=hp3bsd.h
		;;
	m68k-isi-bsd*)
		if [ x$nfp = xyes ]
		then
			tm_file=isi-nfp.h
		else
			tm_file=isi.h
		fi
		;;
	m68k-sony-bsd*)
	        xm_file=xm-m68k.h
		if [ x$gas = xyes ]
		then
			tm_file=newsgas.h
		else
			tm_file=news.h
		fi
		;;
	m68k-altos-sysv*)		   # Altos 3068
		if [ x$gas = xyes ]
		then
		        xm_file=xm-altos3068.h
		        tm_file=altos3068.h
		else
			echo "The Altos is supported only with the GNU assembler" 1>&2
			exit 1
		fi
	        ;;
	m68k-motorola-sysv*)
		tm_file=mot3300.h
		xm_file=xm-mot3300.h
		;;
	m68k-crds-unos)
		xm_file=xm-crds.h
		xmake_file=x-crds
		tm_file=crds.h
		install_with_cp=yes
		;;
	m68k-apollo-*)
		xmake_file=x-apollo68
		tm_file=apollo68.h
		;;
	m68k-ncr-sysv*)			# NCR Tower 32 SVR3
		tm_file=tower-as.h
		xm_file=xm-tower.h
		;;
	m68000-sun-sunos3*)
		cpu_type=m68k
		tm_file=sun2.h
		;;
	m68000-sun-sunos4*)
		cpu_type=m68k
		tm_file=sun2o4.h
		;;
	m68000-hp-hpux*)		# HP 9000 series 300
		cpu_type=m68k
		xm_file=xm-hp320.h
		if [ x$gas = xyes ]
		then
			xmake_file=x-hp320g
			tm_file=hp310g.h
		else
			xmake_file=x-hp320
			tm_file=hp310.h
		fi
		;;
	m68000-hp-bsd*)			# HP 9000/200 running BSD
		cpu_type=m68k
		tm_file=hp2bsd.h
		xmake_file=x-hp2bsd
		;;
	m68000-att-sysv*)
		cpu_type=m68k
		xm_file=xm-3b1.h
		if [ x$gas = xyes ]
		then
			tm_file=3b1g.h
		else
			tm_file=3b1.h
		fi
		;;
	m68000-convergent-sysv*)
		cpu_type=m68k
		xm_file=xm-3b1.h
		tm_file=ctix.h
		;;
	ns32k-encore-osf*)		# Encore with OSF/rose
		tm_file=encrose.h
		xmake_file=x-encrose
		tmake_file=t-encrose
		;;
	ns32k-sequent-bsd*)
		tm_file=sequent.h
		;;
	ns32k-encore-bsd*)
		tm_file=encore.h
		;;
	ns32k-ns-genix*)
		xm_file=xm-genix.h
		xmake_file=x-genix
		tm_file=genix.h
		;;
	ns32k-merlin-*)
		tm_file=merlin.h
		;;
	ns32k-pc532-mach*)
		tm_file=pc532-mach.h
		;;
	ns32k-pc532-minix*)
		tm_file=pc532-min.h
		xm_file=xm-pc532-min.h
		;;
	m88k-*-luna*)
		tm_file=m88kluna.h
		xmake_file=x-m88kluna
		tmake_file=t-m88kluna
		;;
	m88k-dg-dgux*)
		xmake_file=x-m88kdgux
		tmake_file=t-m88k
		tm_file=m88kdgux.h
		;;
	m88k-*-sysv4*)
		xmake_file=x-m88kv4
		tmake_file=t-m88kv4
		tm_file=m88kv4.h
		;;
	m88k-dolphin-sysv3*)
		tm_file=m88kdolph.h
		xm_file=xm-m88kv3.h
		xmake_file=x-m88kdolph
		;;
	m88k-*-sysv3*)
		tm_file=m88kv3.h
		xm_file=xm-m88kv3.h
		;;
# This hasn't been upgraded to GCC 2.
#	fx80-alliant-*)			# Alliant FX/80
#		tm_file=fx80.h
#		;;
	arm-*-*)			# Acorn RISC machine
		tm_file=arm.h
		;;
	c1-convex-*)			# Convex C1
		tm_file=convex1.h
		cpu_type=convex
		;;
	c2-convex-*)			# Convex C2
		tm_file=convex2.h
		cpu_type=convex
		;;
	c32-convex-*)
		tm_file=convex32.h	# Convex C32xx
		cpu_type=convex
		;;
	c34-convex-*)
		tm_file=convex34.h	# Convex C34xx
		cpu_type=convex
		;;
	c38-convex-*)
		tm_file=convex38.h	# Convex C38xx
		cpu_type=convex
		;;
	mips-sgi-irix4*)		# Mostly like a MIPS.
		tm_file=iris.h
		xm_file=xm-irix4.h
		install_with_cp=yes
		xmake_file=x-iris
		;;
	mips-sgi*)			# Mostly like a MIPS.
		tm_file=iris.h
		xm_file=xm-iris.h
		install_with_cp=yes
		xmake_file=x-iris
		;;
	mips-*-sysv4*)			# MIPS System V.4.
		tm_file=mips-svr4.h
		xm_file=xm-umips.h
		xmake_file=x-mipsv
		;;
	mips-*-sysv*)			# MIPS System V.
		tm_file=mips-sysv.h
		xm_file=xm-umips.h
		xmake_file=x-mipsv
		;;
	mips-mips-*)			# Default MIPS environment.
		tm_file=mips.h
		;;
	mips-dec-ultrix*)		# Decstation.
		tm_file=decstatn.h
		tmake_file=t-decstatn
		xmake_file=x-decstatn
	        ;;
	mips-dec-osf*)			# Decstation running OSF/1 reference port with OSF/rose.
		tm_file=decrose.h
		xmake_file=x-decrose
		tmake_file=t-decrose
		;;
	mips-sony-bsd*)			# Sony NEWS 3600 or risc/news.
		tm_file=mips-news.h
		;;
	mips-sony-sysv*)		# Sony NEWS 3800 with NEWSOS5.0.
					# That is based on svr4.
		# t-svr4 is not right because this system doesn't use ELF.
		tm_file=mips-news5.h
		xm_file=xm-mipsnews.h
		;;
	mips-*-bsd*)			# BSD 4.3 variant of MIPS system.
		tm_file=mips-bsd.h
	        ;;
# This port has been upgraded and is almost working.
# Turn it back on if you would like to help debug it.
#	pyramid | pyramid-* | pyramid-*)
#		cpu_type=pyr
#		tm_file=pyr.h
#		;;
# This hasn't been upgraded to GCC 2.
#	tron | tron-*)
#		cpu_type=gmicro
#		tm_file=gmicro.h
#		;;
	a29k-*-bsd*)
		tm_file=a29kunix.h
		xm_file=xm-a29kunix.h
		xmake_file=x-a29kunix
		;;
	romp-*-aos*)
		xm_file=xm-romp.h
		tm_file=romp.h
		;;
	romp-*-mach*)
		xm_file=xm-romp.h
		tm_file=romp.h
		xmake_file=x-romp-mach
		;;
	rs6000-*-mach* | rs6000-mach*)
		xm_file=xm-rs6k-m.h
		tm_file=rs6000-mach.h
		tmake_file=t-rs6000
		;;
	rs6000-*)
		xm_file=xm-rs6000.h
		tm_file=rs6000.h
		tmake_file=t-rs6000
		;;
	hp800-*-bsd* | hp700-*-bsd*)
		cpu_type=hp800
		xm_file=xm-hp800.h
		tm_file=hp800.h
		;;
	hp800-*-hpux* | hp700-*-hpux*)
		cpu_type=hp800
		xm_file=xm-hp800.h
		tm_file=hp800hpux.h
		xmake_file=x-hp800hpux
		;;
	*)
		echo "Configuration $machine not recognized" 1>&2
		exit 1
		;;
	esac

	case $machine in
	*-*-sysv4*)
		
		xmake_try_sysv=x-sysv
		;;
	*-*-sysv*)
		install_with_cp=yes
		;;
	esac

# Default certain vars that apply to both host and target in turn.
	if [ x$cpu_type = x ]
	then cpu_type=`echo $machine | sed 's/-.*$//'`
	fi

# Save data on host machine in vars host_xm_file and host_xmake_file.
	if [ x$pass1done = x ]
	then
		if [ x$xm_file = x ]; then host_xm_file=xm-$cpu_type.h
		else host_xm_file=$xm_file
		fi
		if [ x$xmake_file = x ]
		then xmake_file=x-$cpu_type
		fi
		host_xmake_file=$xmake_file
		host_install_with_cp=$install_with_cp
		pass1done=yes
	fi
done

# Default the target-machine variables that were not explicitly set.
if [ x$tm_file = x ]
then tm_file=$target.h; fi

if [ x$xm_file = x ]
then xm_file=xm-$cpu_type.h; fi

md_file=${cpu_type}.md

if [ x$out_file = x ]
then out_file=$cpu_type.c; fi

if [ x$tmake_file = x ]
then tmake_file=t-$cpu_type
fi


# Set up the list of links to be made.
# $links is the list of link names, and $files is the list of names to link to.
files="$host_xm_file $tm_file $md_file $out_file $xm_file"
links="config.h tm.h md aux-output.c tconfig.h"

# Make the links.
while [ -n "$files" ]
do
	# set file to car of files, files to cdr of files
	set $files; file=$1; shift; files=$*
	set $links; link=$1; shift; links=$*

	if [ ! -r ${srcdir}/config/$file ]
	then
		echo "$progname: cannot create a link \`$link'," 1>&2
		echo "since the file \`config/$file' does not exist" 1>&2
		exit 1
	fi

	$remove -f $link
	rm -f config.status
	# Make a symlink if possible, otherwise try a hard link
	$symbolic_link ${srcdir}/config/$file $link 2>/dev/null || $hard_link ${srcdir}/config/$file $link || $copy ${srcdir}/config/$file $link

	if [ ! -r $link ]
	then
		echo "$progname: unable to link \`$link' to \`${srcdir}/config/$file'" 1>&2
		exit 1
	fi
	echo "Linked \`$link' to \`${srcdir}/config/$file'"
done

# Create Makefile.tem from Makefile.in.
# Make it set VPATH if necessary so that the sources are found.
# Also change its value of srcdir.
# Also create a .gdbinit file which runs the one in srcdir
# and tells GDB to look there for source files.
case $srcdir in
.)
	rm -f Makefile.tem
	cp Makefile.in Makefile.tem
	chmod +w Makefile.tem
	;;
*)
	rm -f Makefile.tem
	echo "VPATH = ${srcdir}" \
	  | cat - ${srcdir}/Makefile.in \
	  | sed "s@^srcdir = \.@srcdir = ${srcdir}@" > Makefile.tem
	rm -f .gdbinit
	echo "dir ." > .gdbinit
	echo "dir ${srcdir}" >> .gdbinit
	echo "source ${srcdir}/.gdbinit" >> .gdbinit
	;;
esac

# Conditionalize the makefile for this host machine.
if [ -f ${srcdir}/config/${host_xmake_file} ]
then
	rm -f Makefile.xx
	sed -e "/####/  r ${srcdir}/config/${host_xmake_file}" Makefile.tem > Makefile.xx
	echo "Merged ${host_xmake_file}."
	rm -f Makefile.tem
	mv Makefile.xx Makefile.tem
else
# Say in the makefile that there is no host_xmake_file,
# by using a name which (when interpreted relative to $srcdir/config)
# will duplicate another dependency: $srcdir/Makefile.in.
	host_xmake_file=../Makefile.in
fi

# Add a definition for INSTALL if system wants one.
# This substitutes for lots of x-* files.
if [ x$install_with_cp = x ]
then true
else
	rm -f Makefile.xx
	echo "INSTALL=cp" | cat - Makefile.tem > Makefile.xx
	rm -f Makefile.tem
	mv Makefile.xx Makefile.tem
fi

# Conditionalize the makefile for this target machine.
if [ -f ${srcdir}/config/${tmake_file} ]
then
	rm -f Makefile.xx
	sed -e "/####/  r ${srcdir}/config/${tmake_file}" Makefile.tem > Makefile.xx
	echo "Merged ${tmake_file}."
	rm -f Makefile.tem
	mv Makefile.xx Makefile.tem
else
# Say in the makefile that there is no tmake_file,
# by using a name which (when interpreted relative to $srcdir/config)
# will duplicate another dependency: $srcdir/Makefile.in.
	tmake_file=../Makefile.in
fi

# Remove all formfeeds, since some Makes get confused by them.
# Also arrange to give the variables `target' and `host_xmake_file'
# and `tmake_file' the same values in the Makefile
# that they have in this script.
rm -f Makefile.xx
sed -e "s///" -e "s/^target=.*$/target=${target}/" \
    -e "s|^xmake_file=.*$|xmake_file=${host_xmake_file}|" \
    -e "s|^tmake_file=.*$|tmake_file=${tmake_file}|" \
    Makefile.tem > Makefile.xx
rm -f Makefile.tem
mv Makefile.xx Makefile.tem

# Install Makefile for real, after making final changes.
# Define macro CROSS_COMPILE in compilation if this is a cross-compiler.
# Also use all.cross instead of all.internal, and add cross-make to Makefile.
if [ x$host = x$target ]
then
	rm -f Makefile
	mv Makefile.tem Makefile
else
	rm -f Makefile
	echo "CROSS=-DCROSS_COMPILE" > Makefile
	sed -e "/####/  r ${srcdir}/cross-make" Makefile.tem >> Makefile
	rm -f Makefile.tem Makefile.xx
fi

echo "Created \`Makefile'."

if [ xx${vint} != xx ]
then
	vintmsg =" (vint)"
fi

# Describe the chosen configuration in config.status.
# Make that file a shellscript which will reestablish the same configuration.
echo "#!/bin/sh
# GCC was configured as follows:
${srcdir}/configure" $arguments > config.status
chmod a+x config.status

if [ x$host = x$target ]
then
	echo "Links are now set up for target $target."
else
	echo "Links are now set up for host $host and target $target."
fi

exit 0
