dnl Process this file with autoconf to produce a configure script.
dnl
dnl And be careful when changing it!  If you must add tests with square
dnl brackets, be sure changequote invocations surround it.
dnl
dnl
dnl v2.5 needed for --bindir et al
AC_PREREQ(2.13)
AC_INIT(as.h)

AC_CANONICAL_SYSTEM
AC_ISC_POSIX

changequote(,)dnl
BFD_VERSION=`sed -n -e 's/^.._INIT_AUTOMAKE.*,[ 	]*\([^ 	]*\)[ 	]*).*/\1/p' < ${srcdir}/../bfd/configure.in`
changequote([,])dnl
AM_INIT_AUTOMAKE(gas, ${BFD_VERSION})

AM_PROG_LIBTOOL

user_bfd_gas=
AC_ARG_ENABLE(bfd-assembler,
[  --enable-bfd-assembler  use BFD back end for writing object files],
[case "${enableval}" in
  yes) need_bfd=yes user_bfd_gas=yes ;;
  no)  user_bfd_gas=no ;;
  *)   AC_MSG_ERROR(bad value ${enableval} given for bfd-assembler option) ;;
esac])dnl
AC_ARG_ENABLE(targets,
[    targets            alternative target configurations besides the primary],
[case "${enableval}" in
  yes | "") AC_ERROR(enable-targets option must specify target names or 'all')
	    ;;
  no)	    enable_targets= ;;
  *)	    enable_targets=$enableval ;;
esac])dnl
AC_ARG_ENABLE(commonbfdlib,
[  --enable-commonbfdlib   build shared BFD/opcodes/libiberty library],
[case "${enableval}" in
  yes) commonbfdlib=true ;;
  no)  commonbfdlib=false ;;
  *)   AC_MSG_ERROR([bad value ${enableval} for BFD commonbfdlib option]) ;;
esac])dnl

using_cgen=no

build_warnings="-W -Wall -Wstrict-prototypes -Wmissing-prototypes"
AC_ARG_ENABLE(build-warnings,
[  --enable-build-warnings Enable build-time compiler warnings if gcc is used],
[case "${enableval}" in
  yes)	;;
  no)	build_warnings="-w";;
  ,*)   t=`echo "${enableval}" | sed -e "s/,/ /g"`
        build_warnings="${build_warnings} ${t}";;
  *,)   t=`echo "${enableval}" | sed -e "s/,/ /g"`
        build_warnings="${t} ${build_warnings}";;
  *)    build_warnings=`echo "${enableval}" | sed -e "s/,/ /g"`;;
esac
if test x"$silent" != x"yes" && test x"$build_warnings" != x""; then
  echo "Setting warning flags = $build_warnings" 6>&1
fi])dnl
WARN_CFLAGS=""
if test "x${build_warnings}" != x -a "x$GCC" = xyes ; then
    WARN_CFLAGS="${build_warnings}"
fi
AC_SUBST(WARN_CFLAGS)

# Generate a header file
AM_CONFIG_HEADER(config.h:config.in)

# If we are on a DOS filesystem, we must use gdb.ini rather than
# .gdbinit.
GDBINIT=".gdbinit"
case "${host}" in
  *-*-msdos* | *-*-go32* | *-*-mingw32* | *-*-cygwin* | *-*-windows*)
    GDBINIT="gdb.ini"
    ;;
esac
AC_SUBST(GDBINIT)

te_file=generic

# Makefile target for installing gas in $(tooldir)/bin.
install_tooldir=install-exec-tooldir

canon_targets=""
all_targets=no
if test -n "$enable_targets" ; then
  for t in `echo $enable_targets | sed 's/,/ /g'`; do
    if test $t = "all"; then
      all_targets=yes
      continue
    fi
    result=`$ac_config_sub $t 2>/dev/null`
    if test -n "$result" ; then
      canon_targets="$canon_targets $result"
#    else
#      # Permit "all", etc.  We don't support it yet though.
#      canon_targets="$canon_targets $t"
    fi
  done
  GAS_UNIQ(canon_targets)
fi

emulations=""

for this_target in $target $canon_targets ; do

changequote(,)dnl
    eval `echo $this_target | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/cpu=\1 vendor=\2 os=\3/'`
changequote([,])dnl

    # check for architecture variants
    arch=
    endian=
    case ${cpu} in
      alpha*)		cpu_type=alpha ;;
      armeb)		cpu_type=arm endian=big ;;
      arm*)		cpu_type=arm endian=little ;;
      armb*)		cpu_type=arm endian=little ;;
      armv*l)		cpu_type=arm endian=little ;;
      armv*b)		cpu_type=arm endian=big ;;
      xscale*)		cpu_type=arm endian=little ;;
      strongarm*)	cpu_type=arm endian=little ;;
      thumb*)		cpu_type=arm endian=little ;;
      hppa*)		cpu_type=hppa ;;
changequote(,)dnl
      i[3456]86)	cpu_type=i386 arch=i386;;
      x86_64)		cpu_type=i386 arch=x86_64;;
      ia64)		cpu_type=ia64 ;;
      ip2k)             cpu_type=ip2k endian=big ;; 
      m6811|m6812|m68hc12) cpu_type=m68hc11 ;;
      m680[012346]0)	cpu_type=m68k ;;
changequote([,])dnl
      m68008)		cpu_type=m68k ;;
      m683??)		cpu_type=m68k ;;
      m5200)		cpu_type=m68k ;;
      m8*)		cpu_type=m88k ;;
      mips*el)		cpu_type=mips endian=little ;;
      mips*)		cpu_type=mips endian=big ;;
      or32*)		cpu_type=or32 endian=big ;;
      pjl*)		cpu_type=pj endian=little ;;
      pj*)		cpu_type=pj endian=big ;;
      powerpc*le*)	cpu_type=ppc endian=little ;;
      powerpc*)		cpu_type=ppc endian=big ;;
      rs6000*)		cpu_type=ppc ;;
      s390x*)		cpu_type=s390 arch=s390x ;;
      s390*)		cpu_type=s390 arch=s390 ;;
      sh5*)		cpu_type=sh64 endian=big ;;
      sh5le*)		cpu_type=sh64 endian=little ;;
      sh64*)            cpu_type=sh64 endian=big ;;
      sh64le*)		cpu_type=sh64 endian=little ;;
      sh*le)		cpu_type=sh endian=little ;;
      sh*)		cpu_type=sh endian=big ;;
      sparclite*)	cpu_type=sparc arch=sparclite ;;
      sparclet*)	cpu_type=sparc arch=sparclet ;;
      sparc64*)		cpu_type=sparc arch=v9-64 ;;
      sparc86x*)	cpu_type=sparc arch=sparc86x  ;;
      sparc*)		cpu_type=sparc arch=sparclite ;; # ??? See tc-sparc.c.
      v850*)		cpu_type=v850 ;;
      *)		cpu_type=${cpu} ;;
    esac

    if test ${this_target} = $target ; then
      target_cpu_type=${cpu_type}
    elif test ${target_cpu_type} != ${cpu_type} ; then
      continue
    fi

    generic_target=${cpu_type}-$vendor-$os
    dev=no
    bfd_gas=no
    em=generic

    # assign object format
    case ${generic_target} in
      a29k-*-coff)			fmt=coff ;;
      a29k-amd-udi)			fmt=coff ;;
      a29k-amd-ebmon)			fmt=coff ;;
      a29k-nyu-sym1)			fmt=coff ;;
      a29k-*-rtems*)			fmt=coff ;;
      a29k-*-vxworks*)			fmt=coff ;;

      alpha*-*-*vms*)			fmt=evax ;;
      alpha*-*-netware*)		fmt=ecoff ;;
      alpha*-*-osf*)			fmt=ecoff ;;
      alpha*-*-linuxecoff*)		fmt=ecoff ;;
      alpha*-*-linux-gnu*)		fmt=elf em=linux ;;
      alpha*-*-netbsd*)			fmt=elf em=nbsd ;;
      alpha*-*-openbsd*)		fmt=elf em=obsd ;;

      arc-*-elf*)			fmt=elf ;;

      arm-*-aout)			fmt=aout ;;
      arm-*-coff | thumb-*-coff)	fmt=coff ;;
      arm-*-rtems | thumb-*-rtems)	fmt=elf ;;
      arm-*-elf | thumb-*-elf)		fmt=elf ;;
      arm*-*-conix*)			fmt=elf ;;
      arm-*-linux*aout*)		fmt=aout em=linux ;;
      arm*-*-linux-gnu*)		fmt=elf  em=linux ;;
      arm*-*-uclinux*)			fmt=elf  em=linux ;;
      arm-*-netbsdelf*)                 fmt=elf  em=nbsd ;;
      arm-*-*n*bsd*)			fmt=aout em=nbsd ;;
      arm-**-nto*)			fmt=elf ;;
      arm-*-oabi | thumb-*-oabi)	fmt=elf ;;
      arm-epoc-pe | thumb-epoc-pe)	fmt=coff em=epoc-pe ;;
      arm-*-wince)			fmt=coff em=wince-pe ;;
      arm-*-pe | thumb-*-pe)		fmt=coff em=pe ;;
      arm-*-riscix*)			fmt=aout em=riscix ;;
      arm-*-vxworks)			fmt=coff ;;

      avr-*-*)				fmt=elf ;;

      cris-*-*)				fmt=multi bfd_gas=yes ;;

      d10v-*-*)				fmt=elf ;;
      d30v-*-*)				fmt=elf ;;
      dlx-*-*)				fmt=elf ;;

      fr30-*-*)				fmt=elf ;;
      frv-*-*)				fmt=elf ;;

      hppa-*-linux*)	case ${cpu} in
			    hppa*64*)	fmt=elf em=hppalinux64;;
			    hppa*)	fmt=elf em=linux;;
			esac ;;
      hppa-*-*elf*)			fmt=elf em=hppa ;;
      hppa-*-lites*)			fmt=elf em=hppa ;;
      hppa-*-netbsd*)			fmt=elf em=nbsd ;;
      hppa-*-openbsd*)			fmt=elf em=hppa ;;
      hppa-*-osf*)			fmt=som em=hppa ;;
      hppa-*-rtems*)			fmt=elf em=hppa ;;
      hppa-*-hpux11*)	case ${cpu} in
			    hppa*64*)	fmt=elf em=hppa64 ;;
			    hppa*)	fmt=som em=hppa ;;
			esac ;;
      hppa-*-hpux*)			fmt=som em=hppa ;;
      hppa-*-mpeix*)			fmt=som em=hppa ;;
      hppa-*-bsd*)			fmt=som em=hppa ;;
      hppa-*-hiux*)			fmt=som em=hppa ;;

      h8300-*-rtems*)			fmt=coff ;;
      h8300-*-coff)			fmt=coff ;;
      h8300-*-elf)			fmt=elf ;;
      h8500-*-rtems*)			fmt=coff ;;
      h8500-*-coff)			fmt=coff ;;

      i370-*-elf* | i370-*-linux*)	fmt=elf ;;
      i386-ibm-aix*)			fmt=coff em=i386aix ;;
      i386-sequent-bsd*)		fmt=aout em=dynix ;;
      i386-*-beospe*)			fmt=coff em=pe ;;
      i386-*-beos*)			fmt=elf ;;
      i386-*-coff)			fmt=coff ;;
      i386-*-elf)			fmt=elf ;;
      i386-*-bsd*)			fmt=aout em=386bsd ;;
      i386-*-netbsd0.8)			fmt=aout em=386bsd ;;
      i386-*-netbsdpe*)			fmt=coff em=pe ;;
      i386-*-netbsdelf*)		fmt=elf em=nbsd ;;
      i386-*-*n*bsd*)	case ${cpu} in
			    x86_64)	fmt=elf em=nbsd ;;
			    *)		fmt=aout em=nbsd ;;
			esac ;;
      i386-*-linux*aout*)		fmt=aout em=linux ;;
      i386-*-linux*oldld)		fmt=aout em=linux ;;
      i386-*-linux*coff*)		fmt=coff em=linux ;;
      i386-*-linux-gnu*)		fmt=elf em=linux ;;
      x86_64-*-linux-gnu*)		fmt=elf em=linux ;;
      i386-*-lynxos*)			fmt=coff em=lynx ;;
changequote(,)dnl
      i386-*-sysv[45]*)			fmt=elf ;;
      i386-*-solaris*)			fmt=elf ;;
      i386-*-freebsdaout*)		fmt=aout em=386bsd ;;
      i386-*-freebsd[12].*)		fmt=aout em=386bsd ;;
      i386-*-freebsd[12])		fmt=aout em=386bsd ;;
changequote([,])dnl
      i386-*-sysv*)			fmt=coff ;;
      i386-*-sco3.2v5*coff)		fmt=coff ;;
      i386-*-isc*)			fmt=coff ;;
      i386-*-sco3.2v5*)			fmt=elf
	  if test ${this_target} = $target; then
	    AC_DEFINE(SCO_ELF, 1, [Define if defaulting to ELF on SCO 5.])
	  fi ;;
      i386-*-sco3.2*)			fmt=coff ;;
      i386-*-vsta)			fmt=aout ;;
      i386-*-msdosdjgpp* \
      | i386-*-go32* \
      | i386-go32-rtems*)		fmt=coff em=go32
	    AC_DEFINE(STRICTCOFF, 1, [Using strict COFF?]) ;;
      i386-*-rtemself*)			fmt=elf ;;
      i386-*-rtemscoff*)		fmt=coff ;;
      i386-*-rtems*)			fmt=elf ;;
      i386-*-gnu*)			fmt=elf ;;
      i386-*-mach*)			fmt=aout em=mach ;;
      i386-*-msdos*)			fmt=aout ;;
      i386-*-moss*)			fmt=elf ;;
      i386-*-pe)			fmt=coff em=pe ;;
      i386-*-cygwin*)			fmt=coff em=pe ;;
      i386-*-interix*)			fmt=coff em=interix ;;
      i386-*-mingw32*)			fmt=coff em=pe ;;
      i386-*-nto-qnx*)			fmt=elf ;;
      i386-*-*nt*)			fmt=coff em=pe ;;
      i386-*-vxworks*)			fmt=aout ;;
      i386-*-chaos)			fmt=elf ;;

      i860-*-*)				fmt=elf endian=little
		AC_MSG_WARN(GAS support for ${generic_target} is preliminary and a work in progress) ;;
      i960-*-bout)			fmt=bout ;;
      i960-*-coff)			fmt=coff em=ic960 ;;
      i960-*-rtems*)			fmt=coff em=ic960 ;;
      i960-*-nindy*)			fmt=bout ;;
      i960-*-vxworks5.0)		fmt=bout ;;
      i960-*-vxworks5.*)		fmt=coff em=ic960 ;;
      i960-*-vxworks*)			fmt=bout ;;
      i960-*-elf*)			fmt=elf ;;

      ia64-*-elf*)			fmt=elf ;;
      ia64-*-aix*)			fmt=elf em=ia64aix ;;
      ia64-*-linux-gnu*)		fmt=elf em=linux ;;
      ia64-*-hpux*)			fmt=elf em=hpux ;;
      ia64-*-netbsd*)			fmt=elf em=nbsd ;;

      ip2k-*-*)				fmt=elf ;;

      m32r-*-*)				fmt=elf ;;

      m68hc11-*-* | m6811-*-*)		fmt=elf ;;
      m68hc12-*-* | m6812-*-*)		fmt=elf ;;

      m68k-*-vxworks*)			fmt=aout em=sun3 ;;
      m68k-ericsson-ose)		fmt=aout em=sun3 ;;
      m68k-*-sunos*)			fmt=aout em=sun3 ;;
      m68k-motorola-sysv*)		fmt=coff em=delta ;;
      m68k-bull-sysv3*)			fmt=coff em=dpx2 ;;
      m68k-apollo-*)			fmt=coff em=apollo ;;
      m68k-*-elf*)			fmt=elf ;;
      m68k-*-sysv4*)			fmt=elf em=svr4 ;;
      m68k-*-sysv*)			fmt=coff ;;
      m68k-*-coff | m68k-*-rtemscoff*)	fmt=coff ;;
      m68k-*-rtems*)			fmt=elf ;;
      m68k-*-hpux*)			fmt=hp300 em=hp300 ;;
      m68k-*-linux*aout*)		fmt=aout em=linux ;;
      m68k-*-linux-gnu*)		fmt=elf em=linux ;;
      m68k-*-gnu*)			fmt=elf ;;
      m68k-*-lynxos*)			fmt=coff em=lynx ;;
      m68k-*-netbsdelf*)		fmt=elf em=nbsd ;;
      m68k-*-netbsd*)			fmt=aout em=nbsd bfd_gas=yes ;;
      m68k-*-openbsd*)			fmt=aout em=nbsd bfd_gas=yes ;;
      m68k-apple-aux*)			fmt=coff em=aux ;;
      m68k-*-psos*)			fmt=elf em=psos;;

      m88k-motorola-sysv3*)		fmt=coff em=delt88 ;;
      m88k-*-coff*)			fmt=coff ;;

      mcore-*-elf)			fmt=elf ;;
      mcore-*-pe)			fmt=coff em=pe bfd_gas=yes ;;

      # don't change em like *-*-bsd does
      mips-dec-openbsd*)		fmt=elf endian=little ;;
      mips-dec-bsd*)			fmt=aout endian=little ;;
      mips-sony-bsd*)			fmt=ecoff ;;
      mips-*-bsd*)
	    AC_MSG_ERROR(Unknown vendor for mips-bsd configuration.) ;;
      mips-*-ultrix*)			fmt=ecoff endian=little ;;
      mips-*-osf*)			fmt=ecoff endian=little ;;
      mips-*-ecoff*)			fmt=ecoff ;;
      mips-*-pe*)			fmt=coff endian=little em=pe ;;
      mips-*-irix6*)			fmt=elf ;;
      mips-*-irix5*)			fmt=elf ;;
      mips-*-irix*)			fmt=ecoff ;;
      mips-*-lnews*)			fmt=ecoff em=lnews ;;
      mips-*-riscos*)			fmt=ecoff ;;
      mips*-*-linux*)			fmt=elf em=tmips ;;
      mips-*-sysv4*MP* | mips-*-gnu*)	fmt=elf em=tmips ;;
      mips-*-sysv*)			fmt=ecoff ;;
      mips-*-elf* | mips-*-rtems*)	fmt=elf ;;
      mips-*-*n*bsd*)			fmt=elf ;;
      mips-*-vxworks*)			fmt=elf ;;

      mmix-*-*)				fmt=elf ;;
      mn10200-*-*)			fmt=elf ;;
      mn10300-*-*)			fmt=elf ;;
      openrisc-*-*)			fmt=elf ;;
      or32-*-rtems*)			fmt=coff ;;
      or32-*-coff)			fmt=coff ;;
      or32-*-elf)			fmt=elf ;;
      pj*)				fmt=elf ;;

      ppc-*-pe | ppc-*-cygwin*)		fmt=coff em=pe ;;
      ppc-*-winnt*)			fmt=coff em=pe ;;
      ppc-*-aix5*)			fmt=coff em=aix5 ;;
      ppc-*-aix*)			fmt=coff ;;
      ppc-*-beos*)			fmt=coff ;;
      ppc-*-*n*bsd* | ppc-*-elf*)	fmt=elf ;;
      ppc-*-eabi* | ppc-*-sysv4*)	fmt=elf ;;
      ppc-*-linux-gnu*)			fmt=elf
	    case "$endian" in
		big)  ;;
		*)    AC_MSG_ERROR(GNU/Linux must be configured big endian) ;;
	    esac ;;
      ppc-*-solaris*)			fmt=elf
	    if test ${this_target} = $target; then
		AC_DEFINE(TARGET_SOLARIS_COMMENT, 1,
			  [Define if default target is PowerPC Solaris.])
	    fi
	    if test x${endian} = xbig; then
		AC_MSG_ERROR(Solaris must be configured little endian)
	    fi ;;
      ppc-*-rtems*)			fmt=elf ;;
      ppc-*-macos* | ppc-*-mpw*)	fmt=coff em=macos ;;
      ppc-*-netware*)			fmt=elf em=ppcnw ;;
      ppc-**-nto*)			fmt=elf ;;
      ppc-*-vxworks*)			fmt=elf ;;
      ppc-*-windiss*)			fmt=elf ;;

      s390x-*-linux-gnu*)		fmt=elf em=linux ;;
      s390-*-linux-gnu*)		fmt=elf em=linux ;;

      sh*-*-linux*)			fmt=elf em=linux
	    case ${cpu} in
		sh*eb)	endian=big ;;
		*)	endian=little ;;
	    esac ;;
      sh5*-*-netbsd*)			fmt=elf em=nbsd ;;
      sh64*-*-netbsd*)			fmt=elf em=nbsd ;;
      sh*-*-netbsdelf*)			fmt=elf em=nbsd ;;
      sh-*-elf*)			fmt=elf ;;
      sh-*-coff*)			fmt=coff ;;
      sh-*-nto*)			fmt=elf ;;
      sh-*-pe*)				fmt=coff em=pe bfd_gas=yes endian=little ;;
      sh-*-rtemself*)			fmt=elf ;;
      sh-*-rtems*)			fmt=coff ;;
      sh64-*-elf*)			fmt=elf ;;

      ns32k-pc532-mach*)		fmt=aout em=pc532mach ;;
      ns32k-pc532-ux*)			fmt=aout em=pc532mach ;;
      ns32k-pc532-lites*)		fmt=aout em=nbsd532 ;;
      ns32k-*-*n*bsd*)			fmt=aout em=nbsd532 ;;

      sparc-*-rtemsaout*)		fmt=aout ;;
      sparc-*-rtemself*)		fmt=elf ;;
      sparc-*-rtems*)			fmt=elf ;;
      sparc-*-sunos4*)			fmt=aout em=sun3 ;;
      sparc-*-aout | sparc*-*-vxworks*)	fmt=aout em=sparcaout ;;
      sparc-*-coff)			fmt=coff ;;
      sparc-*-linux*aout*)		fmt=aout em=linux ;;
      sparc-*-linux-gnu*)		fmt=elf em=linux ;;
      sparc-*-lynxos*)			fmt=coff em=lynx ;;
      sparc-fujitsu-none)		fmt=aout ;;
      sparc-*-elf)			fmt=elf ;;
      sparc-*-sysv4*)			fmt=elf ;;
      sparc-*-solaris*)			fmt=elf ;;
      sparc-*-netbsdelf*)		fmt=elf em=nbsd ;;
      sparc-*-*n*bsd*)	case ${cpu} in
			    sparc64)	fmt=elf em=nbsd ;;
			    *)		fmt=aout em=nbsd ;;
			esac ;;
      strongarm-*-coff)			fmt=coff ;;
      strongarm-*-elf)			fmt=elf ;;
      xscale-*-coff)			fmt=coff ;;
      xscale-*-elf)			fmt=elf ;;

      tic30-*-*aout*)			fmt=aout bfd_gas=yes ;;
      tic30-*-*coff*)			fmt=coff bfd_gas=yes ;;
      tic4x-*-* | c4x-*-*)              fmt=coff bfd_gas=yes ;;
      tic54x-*-* | c54x*-*-*)		fmt=coff bfd_gas=yes need_libm=yes;;
      tic80-*-*)			fmt=coff ;;

      v850-*-*)				fmt=elf ;;
      v850e-*-*)			fmt=elf ;;
      v850ea-*-*)			fmt=elf ;;

      vax-*-netbsdelf*)			fmt=elf em=nbsd ;;
      vax-*-netbsd*)			fmt=aout em=nbsd ;;
      vax-*-bsd* | vax-*-ultrix*)	fmt=aout ;;
      vax-*-vms)			fmt=vms ;;

      w65-*-*)				fmt=coff ;;

      xstormy16-*-*)			fmt=elf ;;

      z8k-*-coff | z8k-*-sim)		fmt=coff ;;

      *-*-aout | *-*-scout)		fmt=aout ;;
      *-*-freebsd*)			fmt=elf em=freebsd ;;
      *-*-nindy*)			fmt=bout ;;
      *-*-bsd*)				fmt=aout em=sun3 ;;
      *-*-generic)			fmt=generic ;;
      *-*-xray | *-*-hms)		fmt=coff ;;
      *-*-sim)				fmt=coff ;;
      *-*-elf | *-*-sysv4* | *-*-solaris*) fmt=elf dev=yes ;;
      *-*-vxworks)			fmt=aout ;;
      *-*-netware)			fmt=elf ;;
    esac

    if test ${this_target} = $target ; then
      endian_def=
      if test x${endian} = xbig; then
	endian_def=1
      elif test x${endian} = xlittle; then
	endian_def=0
      fi
      if test x${endian_def} != x; then
	AC_DEFINE_UNQUOTED(TARGET_BYTES_BIG_ENDIAN, $endian_def,
			   [Define as 1 if big endian.])
      fi
    fi

    case ${cpu_type}-${fmt} in
	alpha*-* | arm-* | i386-* | ia64*-* | mips-* | ns32k-* \
		| pdp11-* | ppc-* | sparc-* | strongarm-* | xscale-* \
		| *-elf | *-ecoff | *-som)
	    bfd_gas=yes ;;
    esac

# Other random stuff.

    case ${cpu_type} in
      mips)
	# Set mips_cpu to the name of the default CPU.
	case ${target_cpu} in
	  mips | mipsbe | mipseb | mipsle | mipsel | mips64 | mips64el)
	    mips_cpu=from-abi
	    ;;
	  mipsisa32 | mipsisa32el)
	    mips_cpu=mips32
	    ;;
	  mipsisa64 | mipsisa64el)
	    mips_cpu=mips64
	    ;;
	  mipstx39 | mipstx39el)
	    mips_cpu=r3900
	    ;;
	  mips64vr | mips64vrel)
	    mips_cpu=vr4100
	    ;;
	  mips64* | mipsisa64* | mipsisa32*)
changequote(,)dnl
	    mips_cpu=`echo $target_cpu | sed -e 's/[a-z]*..//' -e 's/el$//'`
changequote([,])dnl
	    ;;
	  *)
	    AC_ERROR($target_cpu isn't a supported MIPS CPU name)
	    ;;
	esac
	# See whether it's appropriate to set E_MIPS_ABI_O32 for o32
	# binaries.  It's a GNU extension that some OSes don't understand.
	# The value only matters on ELF targets.
	case ${target} in
	  *-*-irix*)
	    use_e_mips_abi_o32=0
	    ;;
	  *)
	    use_e_mips_abi_o32=1
	    ;;
	esac
	# Decide whether to generate 32-bit or 64-bit code by default.
	# Used to resolve -march=from-abi when an embedded ABI is selected.
	case ${target} in
	  mips64*-*-* | mipsisa64*-*-*)
	    mips_default_64bit=1
	    ;;
	  *)
	    mips_default_64bit=0
	    ;;
	esac
	AC_DEFINE_UNQUOTED(MIPS_CPU_STRING_DEFAULT, "$mips_cpu",
			   [Default CPU for MIPS targets. ])
	AC_DEFINE_UNQUOTED(USE_E_MIPS_ABI_O32, $use_e_mips_abi_o32,
			   [Allow use of E_MIPS_ABI_O32 on MIPS targets. ])
	AC_DEFINE_UNQUOTED(MIPS_DEFAULT_64BIT, $mips_default_64bit,
			   [Generate 64-bit code by default on MIPS targets. ])
	;;
    esac

    # Do we need the opcodes library?
    case ${cpu_type} in
      vax | i386 | tic30)
	;;

      *)
	need_opcodes=yes

	case "${enable_shared}" in
	yes) shared_opcodes=true ;;
	*opcodes*) shared_opcodes=true ;;
	*) shared_opcodes=false ;;
	esac
	if test "${shared_opcodes}" = "true"; then
	  # A shared libopcodes must be linked against libbfd.
	  need_bfd=yes
	fi
	;;
    esac

    # Any other special object files needed ?
    case ${cpu_type} in
      fr30 | ip2k | m32r | openrisc)
	using_cgen=yes
	;;

      frv)
	using_cgen=yes
	;;
      m68k)
	case ${extra_objects} in
	*m68k-parse.o*) ;;
	*) extra_objects="$extra_objects m68k-parse.o" ;;
	esac
	;;

      mips)
	echo ${extra_objects} | grep -s "itbl-parse.o" 
	if test $? -ne 0 ; then
	  extra_objects="$extra_objects itbl-parse.o"
	fi

	echo ${extra_objects} | grep -s "itbl-lex.o" 
	if test $? -ne 0 ; then
	  extra_objects="$extra_objects itbl-lex.o"
	fi

	echo ${extra_objects} | grep -s "itbl-ops.o" 
	if test $? -ne 0 ; then
	  extra_objects="$extra_objects itbl-ops.o"
	fi
	;;

      i386 | s390 | sparc)
	if test $this_target = $target ; then
	  AC_DEFINE_UNQUOTED(DEFAULT_ARCH, "${arch}", [Default architecture.])
	fi
	;;

      xstormy16)
	using_cgen=yes
	;;

      *)
	;;
    esac

    if test $using_cgen = yes ; then
	case "x${extra_objects}" in
	*cgen.o*) ;;
	*) extra_objects="$extra_objects cgen.o" ;;
	esac
    fi

# See if we really can support this configuration with the emulation code.

    if test $this_target = $target ; then
      primary_bfd_gas=$bfd_gas
      obj_format=$fmt
      te_file=$em

      if test $bfd_gas = no ; then
	# Can't support other configurations this way.
	break
      fi
    elif test $bfd_gas = no ; then
      # Can't support this configuration.
      break
    fi

# From target name and format, produce a list of supported emulations.

    case ${generic_target}-${fmt} in
      mips-*-irix5*-*)	emulation="mipsbelf mipslelf mipself mipsbecoff mipslecoff mipsecoff" ;;
      mips*-*-linux*-*) case "$endian" in
			big)	emulation="mipsbelf mipslelf mipself" ;;
			*)	emulation="mipslelf mipsbelf mipself" ;;
			esac ;;
      mips-*-lnews*-ecoff) ;;
      mips-*-*-ecoff)	case "$endian" in
			big)	emulation="mipsbecoff mipslecoff mipsecoff" ;;
			*)	emulation="mipslecoff mipsbecoff mipsecoff" ;;
			esac ;;
      mips-*-*-elf)	case "$endian" in
			big)	emulation="mipsbelf mipslelf mipself" ;;
			*)	emulation="mipslelf mipsbelf mipself" ;;
			esac ;;
      mips-*-sysv4*MP*-*) emulation="mipsbelf mipslelf mipself mipsbecoff mipslecoff mipsecoff" ;;
      # i386-pc-pe-coff != i386-pc-coff.
      i386-*-pe-coff)	;;
      # Uncommenting the next line will turn on support for i386 AOUT
      # for the default linux configuration
      # i386-*-linux*-elf) emulation="i386elf i386aout" ;;
      #
      i386-*-aout)	emulation="i386aout" ;;
      i386-*-coff)	emulation="i386coff" ;;
      i386-*-elf)	emulation="i386elf" ;;

      # Always all formats.  The first stated emulation becomes the default.
      cris-*-*aout*)	emulation="crisaout criself" ;;
      cris-*-*)		emulation="criself crisaout" ;;
    esac

    emulations="$emulations $emulation"

done

# Turn on all targets if possible
if test ${all_targets} = "yes"; then
  case ${target_cpu_type} in
  i386)
    case ${obj_format} in
    aout)
      emulations="$emulations i386coff i386elf"
      ;;
    coff)
      emulations="$emulations i386aout i386elf"
    ;;
    elf)
      emulations="$emulations i386aout i386coff"
      ;;
    esac
  ;;
  esac
fi

# Assign floating point type.  Most processors with FP support
# IEEE FP.  On those that don't support FP at all, usually IEEE
# is emulated.
case ${target_cpu} in
  vax | tahoe )	atof=${target_cpu} ;;
  pdp11)	atof=vax ;;
  *)		atof=ieee ;;
esac

case "${obj_format}" in
  "") AC_MSG_ERROR(GAS does not know what format to use for target ${target}) ;;
esac

# Unfortunately the cpu in cpu-opc.h file isn't always $(TARGET_CPU).
cgen_cpu_prefix=""
if test $using_cgen = yes ; then
  case ${target_cpu} in
    *) cgen_cpu_prefix=${target_cpu} ;;
  esac
  AC_SUBST(cgen_cpu_prefix)
  AC_DEFINE(USING_CGEN, 1, [Using cgen code?])
fi

dnl
dnl Make sure the desired support files exist.
dnl

if test ! -r ${srcdir}/config/tc-${target_cpu_type}.c; then
  AC_MSG_ERROR(GAS does not support target CPU ${target_cpu_type})
fi

if test ! -r ${srcdir}/config/obj-${obj_format}.c; then
  AC_MSG_ERROR(GAS does not have support for object file format ${obj_format})
fi

case ${user_bfd_gas}-${primary_bfd_gas} in
  yes-yes | no-no)
    # We didn't override user's choice.
    ;;
  no-yes)
    AC_MSG_WARN(Use of BFD is required for ${target}; overriding config options.)
    ;;
  no-preferred)
    primary_bfd_gas=no
    ;;
  *-preferred)
    primary_bfd_gas=yes
    ;;
  yes-*)
    primary_bfd_gas=yes
    ;;
  -*)
    # User specified nothing.
    ;;
esac

# Some COFF configurations want these random other flags set.
case ${obj_format} in
  coff)
    case ${target_cpu_type} in
      i386) AC_DEFINE(I386COFF, 1, [Using i386 COFF?]) ;;
      m68k) AC_DEFINE(M68KCOFF, 1, [Using m68k COFF?]) ;;
      m88k) AC_DEFINE(M88KCOFF, 1, [Using m88k COFF?]) ;;
    esac
    ;;
esac

# Getting this done right is going to be a bitch.  Each configuration specified
# with --enable-targets=... should be checked for environment, format, cpu, and
# bfd_gas setting.
#
# For each configuration, the necessary object file support code must be linked
# in.  This might be only one, it might be up to four.  The necessary emulation
# code needs to be provided, too.
#
# And then there's "--enable-targets=all"....
#
# For now, just always do it for MIPS ELF or ECOFF configurations.  Sigh.

formats="${obj_format}"
emfiles=""
EMULATIONS=""
GAS_UNIQ(emulations)
for em in . $emulations ; do
  case $em in
    .)	continue ;;
    mipsbelf | mipslelf | mipself)
	fmt=elf   file=mipself ;;
    mipsbecoff | mipslecoff | mipsecoff)
	fmt=ecoff file=mipsecoff ;;
    *coff)
	fmt=coff  file=$em ;;
    *aout)
	fmt=aout file=$em ;;
    *elf)
	fmt=elf file=$em ;;
  esac
  formats="$formats $fmt"
  emfiles="$emfiles e-$file.o"
  EMULATIONS="$EMULATIONS &$em,"
done
GAS_UNIQ(formats)
GAS_UNIQ(emfiles)
if test `set . $formats ; shift ; echo $#` -gt 1 ; then
  for fmt in $formats ; do
    case $fmt in
      aout)	AC_DEFINE(OBJ_MAYBE_AOUT, 1,    [a.out support?])   ;;
      bout)	AC_DEFINE(OBJ_MAYBE_BOUT, 1,    [b.out support?])   ;;
      coff)	AC_DEFINE(OBJ_MAYBE_COFF, 1,    [COFF support?])    ;;
      ecoff)	AC_DEFINE(OBJ_MAYBE_ECOFF, 1,   [ECOFF support?])   ;;
      elf)	AC_DEFINE(OBJ_MAYBE_ELF, 1,     [ELF support?])     ;;
      generic)	AC_DEFINE(OBJ_MAYBE_GENERIC, 1, [generic support?]) ;;
      hp300)	AC_DEFINE(OBJ_MAYBE_HP300, 1,   [HP300 support?])   ;;
      ieee)	AC_DEFINE(OBJ_MAYBE_IEEE, 1,    [IEEE support?])    ;;
      som)	AC_DEFINE(OBJ_MAYBE_SOM, 1,     [SOM support?])     ;;
      vms)	AC_DEFINE(OBJ_MAYBE_VMS, 1,     [VMS support?])     ;;
    esac
    extra_objects="$extra_objects obj-$fmt.o"
  done
  obj_format=multi
fi
if test `set . $emfiles ; shift ; echo $#` -gt 0 ; then
  DEFAULT_EMULATION=`set . $emulations ; echo $2`
  # e-mips* has more than one emulation per file, e-i386* has just one at the
  # moment.  If only one emulation is specified, then don't define
  # USE_EMULATIONS or include any of the e-files as they will only be bloat.
  case "${obj_format}${emfiles}" in
    multi* | *mips*)
      extra_objects="$extra_objects $emfiles"
      AC_DEFINE(USE_EMULATIONS, 1, [Use emulation support?]) ;;
  esac
fi
AC_SUBST(extra_objects)
AC_DEFINE_UNQUOTED(EMULATIONS, $EMULATIONS, [Supported emulations.])
AC_DEFINE_UNQUOTED(DEFAULT_EMULATION, "$DEFAULT_EMULATION",
		   [Default emulation.])

case ${primary_bfd_gas}-${target_cpu_type}-${obj_format} in
  yes-*-coff)	need_bfd=yes ;;
  no-*-coff)	need_bfd=yes
		AC_DEFINE(MANY_SEGMENTS, 1, [old COFF support?]) ;;
esac

reject_dev_configs=yes

case ${reject_dev_configs}-${dev} in
  yes-yes) # Oops.
    AC_MSG_ERROR(GAS does not support the ${generic_target} configuration.)
    ;;
esac

AC_SUBST(target_cpu_type)
AC_SUBST(obj_format)
AC_SUBST(te_file)
AC_SUBST(install_tooldir)
AC_SUBST(atof)
dnl AC_SUBST(emulation)

case "${primary_bfd_gas}" in
  yes)	AC_DEFINE(BFD_ASSEMBLER, 1, [Use BFD interface?])
	need_bfd=yes ;;
esac

# do we need the opcodes library?
case "${need_opcodes}" in
yes)
  OPCODES_LIB=../opcodes/libopcodes.la
  ;;
esac

case "${need_bfd}" in
yes)
  BFDLIB=../bfd/libbfd.la
  BFDVER_H=../bfd/bfdver.h
  ALL_OBJ_DEPS="$ALL_OBJ_DEPS"' ../bfd/bfd.h $(INCDIR)/symcat.h'
  ;;
esac

AC_SUBST(BFDLIB)
AC_SUBST(OPCODES_LIB)

AC_SUBST(BFDVER_H)
AC_SUBST(ALL_OBJ_DEPS)

AC_DEFINE_UNQUOTED(TARGET_ALIAS,	"${target_alias}", [Target alias.])
AC_DEFINE_UNQUOTED(TARGET_CANONICAL,	"${target}",       [Canonical target.])
AC_DEFINE_UNQUOTED(TARGET_CPU,		"${target_cpu}",   [Target CPU.])
AC_DEFINE_UNQUOTED(TARGET_VENDOR,	"${target_vendor}", [Target vendor.])
AC_DEFINE_UNQUOTED(TARGET_OS,		"${target_os}",    [Target OS.])

AC_PROG_CC

AC_PROG_YACC
AM_PROG_LEX

ALL_LINGUAS="fr tr es"
CY_GNU_GETTEXT

AM_MAINTAINER_MODE
AC_EXEEXT

AC_CHECK_HEADERS(string.h stdlib.h memory.h strings.h unistd.h stdarg.h varargs.h errno.h sys/types.h)

# Put this here so that autoconf's "cross-compiling" message doesn't confuse
# people who are not cross-compiling but are compiling cross-assemblers.
AC_MSG_CHECKING(whether compiling a cross-assembler)
if test "${host}" = "${target}"; then
  cross_gas=no
else
  cross_gas=yes
  AC_DEFINE(CROSS_COMPILE, 1, [Compiling cross-assembler?])
fi
AC_MSG_RESULT($cross_gas)

dnl ansidecl.h will deal with const
dnl AC_CONST
AC_FUNC_ALLOCA
AC_C_INLINE

# VMS doesn't have unlink.
AC_CHECK_FUNCS(unlink remove, break)

# Some systems don't have sbrk().
AC_CHECK_FUNCS(sbrk)

# do we need the math library?
case "${need_libm}" in
yes) 
  AC_CHECK_LIBM
  AC_SUBST(LIBM)
  ;;
esac

# Some non-ANSI preprocessors botch requoting inside strings.  That's bad
# enough, but on some of those systems, the assert macro relies on requoting
# working properly!
GAS_WORKING_ASSERT

# On some systems, the system header files may not declare malloc, realloc,
# and free.  There are places where gas needs these functions to have been
# declared -- such as when taking their addresses.
gas_test_headers="
#ifdef HAVE_MEMORY_H
#include <memory.h>
#endif
#ifdef HAVE_STRING_H
#include <string.h>
#else
#ifdef HAVE_STRINGS_H
#include <strings.h>
#endif
#endif
#ifdef HAVE_STDLIB_H
#include <stdlib.h>
#endif
#ifdef HAVE_UNISTD_H
#include <unistd.h>
#endif
"
GAS_CHECK_DECL_NEEDED(strstr, f, char *(*f)(), $gas_test_headers)
GAS_CHECK_DECL_NEEDED(malloc, f, char *(*f)(), $gas_test_headers)
GAS_CHECK_DECL_NEEDED(free, f, void (*f)(), $gas_test_headers)
GAS_CHECK_DECL_NEEDED(sbrk, f, char *(*f)(), $gas_test_headers)
GAS_CHECK_DECL_NEEDED(environ, f, char **f, $gas_test_headers)

# Does errno.h declare errno, or do we have to add a separate declaration
# for it?
GAS_CHECK_DECL_NEEDED(errno, f, int f, [
#ifdef HAVE_ERRNO_H
#include <errno.h>
#endif
])

dnl This must come last.

dnl We used to make symlinks to files in the source directory, but now
dnl we just use the right name for .c files, and create .h files in
dnl the build directory which include the right .h file.  Make sure
dnl the old symlinks don't exist, so that a reconfigure in an existing
dnl directory behaves reasonably.

AC_OUTPUT(Makefile doc/Makefile ${GDBINIT}:gdbinit.in po/Makefile.in:po/Make-in,
[rm -f targ-cpu.c targ-cpu.h obj-format.h obj-format.c targ-env.h atof-targ.c itbl-cpu.h
 echo '#include "tc-'"${target_cpu_type}"'.h"' > targ-cpu.h
 echo '#include "obj-'"${obj_format}"'.h"' > obj-format.h
 echo '#include "te-'"${te_file}"'.h"' > targ-env.h
 echo '#include "itbl-'"${target_cpu_type}"'.h"' > itbl-cpu.h
 if test "x$cgen_cpu_prefix" != x ; then
   echo '#include "opcodes/'"${cgen_cpu_prefix}"'-desc.h"' > cgen-desc.h
 fi

 sed -e '/POTFILES =/r po/POTFILES' po/Makefile.in > po/Makefile],
[target_cpu_type=${target_cpu_type}
 cgen_cpu_prefix=${cgen_cpu_prefix}
 obj_format=${obj_format}
 te_file=${te_file}])
