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.57)
AC_INIT(as.h)

dnl Autoconf 2.57 will find the aux dir without this.  However, unless
dnl we specify this explicitly, automake-1.7 will assume that ylwrap is in
dnl gas/ instead of gas/../.
AC_CONFIG_AUX_DIR(..)
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.
case "${host}" in
  *-*-msdos* | *-*-go32* | *-*-mingw32* | *-*-windows*)
    GDBINIT="gdb.ini"
    AC_CONFIG_FILES(gdb.ini:gdbinit.in)
    ;;
  *)
    GDBINIT=".gdbinit"
    AC_CONFIG_FILES(.gdbinit:gdbinit.in)
    ;;
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
      am33_2.0)		cpu_type=mn10300 endian=little ;;
      alpha*)		cpu_type=alpha ;;
      arm*b|xscale*b|strongarm*b) cpu_type=arm endian=big ;;
      arm*|xscale*|strongarm*)    cpu_type=arm endian=little ;;
      c4x*)		cpu_type=tic4x ;;
      hppa*)		cpu_type=hppa ;;
changequote(,)dnl
      i[3-7]86)		cpu_type=i386 arch=i386;;
      x86_64)		cpu_type=i386 arch=x86_64;;
      ia64)		cpu_type=ia64 ;;
      ip2k)             cpu_type=ip2k endian=big ;; 
      iq2000)           cpu_type=iq2000 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 ;;
      xtensa*)		cpu_type=xtensa arch=xtensa ;;
      m32r)             cpu_type=m32r target_cpu=m32r endian=big ;;
      m32rle)           cpu_type=m32r target_cpu=m32r endian=little ;;
      *)		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 ;;

      # cpu_type for am33_2.0 is set to mn10300
      mn10300-*-linux*)			fmt=elf bfd_gas=yes em=linux ;;

      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-*-kaos*)			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-pe | arm-*-wince)       fmt=coff em=wince-pe ;;
      arm-*-pe | thumb-*-pe)		fmt=coff em=pe ;;
      arm-*-riscix*)			fmt=aout em=riscix ;;

      avr-*-*)				fmt=elf ;;

      cris-*-linux-gnu*)		fmt=multi bfd_gas=yes em=linux ;;
      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-*-kaos*)			fmt=elf ;;
      i386-*-bsd*)			fmt=aout em=386bsd ;;
      i386-*-netbsd0.8)			fmt=aout em=386bsd ;;
      i386-*-netbsdpe*)			fmt=coff em=pe ;;
      i386-*-netbsd*-gnu* | \
      i386-*-knetbsd*-gnu | \
      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-*-freebsd* | i386-*-kfreebsd*-gnu)
					fmt=elf em=freebsd ;;
      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-*-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 ;;

      iq2000-*-elf)         		fmt=elf bfd_gas=yes ;;

      m32r-*-elf*)			fmt=elf ;;
      m32r-*-linux*)			fmt=elf em=linux;;

      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-*-uclinux*)			fmt=elf ;;
      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 em=irix ;;
      mips-*-irix5*)			fmt=elf em=irix ;;
      mips-*-irix*)			fmt=ecoff em=irix ;;
      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-*-netbsd*)			fmt=elf ;;
      mips-*-openbsd*)			fmt=elf ;;

      mmix-*-*)				fmt=elf ;;
      mn10200-*-*)			fmt=elf ;;
      mn10300-*-*)			fmt=elf ;;
      msp430-*-*)			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 ;;
changequote(,)dnl
      ppc-*-aix5.[01])			fmt=coff em=aix5 ;;
changequote([,])dnl
      ppc-*-aix5.*)			fmt=coff em=aix5
      	AC_DEFINE(AIX_WEAK_SUPPORT, 1,
		  [Define if using AIX 5.2 value for C_WEAKEXT.])
      ;;
      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 em=linux
	    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-*-kaos*)			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 ;;
      sh-*-kaos*)			fmt=elf ;;
      shle*-*-kaos*)			fmt=elf ;;
      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 ;;
      strongarm-*-kaos*)		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-*-linux-gnu*)			fmt=elf em=linux bfd_gas=yes ;;
      vax-*-vms)			fmt=vms ;;

      w65-*-*)				fmt=coff ;;

      xstormy16-*-*)			fmt=elf ;;

      xtensa-*-*)			fmt=elf ;;

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

      *-*-aout | *-*-scout)		fmt=aout ;;
      *-*-freebsd* | *-*-kfreebsd*-gnu)	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 ;;
      *-*-aros*)			fmt=elf em=linux bfd_gas=yes ;;
      *-*-vxworks | *-*-windiss)	fmt=elf ;;
      *-*-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
	    ;;
	  mipsisa32r2 | mipsisa32r2el)
	    mips_cpu=mips32r2
	    ;;
	  mipsisa64 | mipsisa64el)
	    mips_cpu=mips64
	    ;;
	  mipsisa64r2 | mipsisa64r2el)
	    mips_cpu=mips64r2
	    ;;
	  mipstx39 | mipstx39el)
	    mips_cpu=r3900
	    ;;
	  mips64vr | mips64vrel)
	    mips_cpu=vr4100
	    ;;
	  mipsisa32r2* | mipsisa64r2*)
changequote(,)dnl
	    mips_cpu=`echo $target_cpu | sed -e 's/[a-z]*..r2//' -e 's/el$//'`
changequote([,])dnl
	    ;;
	  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
	# Decide which ABI to target by default.
	case ${target} in
	  mips64*-linux* | mips-sgi-irix6*)
	    mips_default_abi=N32_ABI
	    ;;
	  mips*-linux*)
	    mips_default_abi=O32_ABI
	    ;;
	  *)
	    mips_default_abi=NO_ABI
	    ;;
	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. ])
	AC_DEFINE_UNQUOTED(MIPS_DEFAULT_ABI, $mips_default_abi,
			   [Choose a default ABI for 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 | iq2000 | 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
	;;

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

      *)
	;;
    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_CONFIG_FILES(Makefile doc/Makefile po/Makefile.in:po/Make-in)
AC_CONFIG_COMMANDS([default],
[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}])

AC_OUTPUT
