dnl Process this file with autoconf to produce a configure script.
dnl

AC_PREREQ(2.59)
AC_INIT
AC_CONFIG_SRCDIR([z8k-dis.c])

AC_CANONICAL_TARGET
AC_ISC_POSIX

# We currently only use the version number for the name of any shared
# library.  For user convenience, we always use the same version
# number that BFD is using.
changequote(,)dnl
BFD_VERSION=`sed -n -e 's/^.._INIT_AUTOMAKE.*,[ 	]*\([^ 	]*\)[ 	]*).*/\1/p' < ${srcdir}/../bfd/configure.in`
changequote([,])dnl

AM_INIT_AUTOMAKE(opcodes, ${BFD_VERSION})

dnl These must be called before AM_PROG_LIBTOOL, because it may want
dnl to call AC_CHECK_PROG.
AC_CHECK_TOOL(AR, ar)
AC_CHECK_TOOL(RANLIB, ranlib, :)

dnl Default to a non shared library.  This may be overridden by the
dnl configure option --enable-shared.
AM_DISABLE_SHARED

AM_PROG_LIBTOOL

AC_ARG_ENABLE(targets,
[  --enable-targets        alternative target configurations],
[case "${enableval}" in
  yes | "") AC_MSG_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 opcodes commonbfdlib option]) ;;
esac])dnl

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)

AM_CONFIG_HEADER(config.h:config.in)

if test -z "$target" ; then
    AC_MSG_ERROR(Unrecognized target system type; please check config.sub.)
fi

AM_MAINTAINER_MODE
AM_INSTALL_LIBBFD
AC_EXEEXT

# host-specific stuff:

AC_PROG_CC

ALL_LINGUAS="fr sv tr es da de id pt_BR ro nl"
CY_GNU_GETTEXT

. ${srcdir}/../bfd/configure.host

BFD_CC_FOR_BUILD

AC_SUBST(HDEFINES)
AC_PROG_INSTALL

AC_CHECK_HEADERS(string.h strings.h stdlib.h)

cgen_maint=no
cgendir='$(srcdir)/../cgen'

AC_ARG_ENABLE(cgen-maint,
[  --enable-cgen-maint[=dir]    build cgen generated files],
[case "${enableval}" in
  yes)	cgen_maint=yes ;;
  no)	cgen_maint=no ;;
  *)
	# argument is cgen install directory (not implemented yet).
	# Having a `share' directory might be more appropriate for the .scm,
	# .cpu, etc. files.
	cgen_maint=yes
	cgendir=${cgen_maint}/lib/cgen
	;;
esac])dnl
AM_CONDITIONAL(CGEN_MAINT, test x${cgen_maint} = xyes)
AC_SUBST(cgendir)

using_cgen=no

# Horrible hacks to build DLLs on Windows.
WIN32LDFLAGS=
WIN32LIBADD=
case "${host}" in
*-*-cygwin*)
  if test "$enable_shared" = "yes"; then
    WIN32LDFLAGS="-no-undefined"
    WIN32LIBADD="-L`pwd`/../bfd -lbfd -L`pwd`/../libiberty -liberty -L`pwd`/../intl -lintl -lcygwin"
  fi
  ;;
esac
AC_SUBST(WIN32LDFLAGS)
AC_SUBST(WIN32LIBADD)

# target-specific stuff:

# Canonicalize the secondary target names.
if test -n "$enable_targets" ; then
    for targ in `echo $enable_targets | sed 's/,/ /g'`
    do
	result=`$ac_config_sub $targ 2>/dev/null`
	if test -n "$result" ; then
	    canon_targets="$canon_targets $result"
	else
	    # Allow targets that config.sub doesn't recognize, like "all".
	    canon_targets="$canon_targets $targ"
	fi
    done
fi

all_targets=false
selarchs=
for targ in $target $canon_targets
do
    if test "x$targ" = "xall" ; then
        all_targets=true
    else
	. $srcdir/../bfd/config.bfd
	selarchs="$selarchs $targ_archs"
    fi
done	

# Utility var, documents generic cgen support files.

cgen_files="cgen-opc.lo cgen-asm.lo cgen-dis.lo"

# We don't do any links based on the target system, just makefile config.

if test x${all_targets} = xfalse ; then

    # Target architecture .o files.
    ta=

    for arch in $selarchs
    do
	ad=`echo $arch | sed -e s/bfd_//g -e s/_arch//g`
	archdefs="$archdefs -DARCH_$ad"
	case "$arch" in
	bfd_a29k_arch)		ta="$ta a29k-dis.lo" ;;
	bfd_alliant_arch)	;;
	bfd_alpha_arch)		ta="$ta alpha-dis.lo alpha-opc.lo" ;;
	bfd_arc_arch)		ta="$ta arc-dis.lo arc-opc.lo arc-ext.lo" ;;
	bfd_arm_arch)		ta="$ta arm-dis.lo" ;;
	bfd_avr_arch)		ta="$ta avr-dis.lo" ;;
	bfd_convex_arch)	;;
	bfd_cris_arch)		ta="$ta cris-dis.lo cris-opc.lo" ;;
	bfd_crx_arch)    	ta="$ta crx-dis.lo crx-opc.lo" ;;
	bfd_d10v_arch)		ta="$ta d10v-dis.lo d10v-opc.lo" ;;
	bfd_d30v_arch)		ta="$ta d30v-dis.lo d30v-opc.lo" ;;
	bfd_dlx_arch)		ta="$ta dlx-dis.lo" ;;
	bfd_fr30_arch)          ta="$ta fr30-asm.lo fr30-desc.lo fr30-dis.lo fr30-ibld.lo fr30-opc.lo" using_cgen=yes ;;
	bfd_h8300_arch)		ta="$ta h8300-dis.lo" ;;
	bfd_h8500_arch)		ta="$ta h8500-dis.lo" ;;
	bfd_hppa_arch)		ta="$ta hppa-dis.lo" ;;
	bfd_i370_arch)		ta="$ta i370-dis.lo i370-opc.lo" ;;
	bfd_i386_arch)		ta="$ta i386-dis.lo" ;;
	bfd_i860_arch)		ta="$ta i860-dis.lo" ;;
	bfd_i960_arch)		ta="$ta i960-dis.lo" ;;
	bfd_ia64_arch)		ta="$ta ia64-dis.lo ia64-opc.lo" ;;
	bfd_ip2k_arch)		ta="$ta ip2k-asm.lo ip2k-desc.lo ip2k-dis.lo ip2k-ibld.lo ip2k-opc.lo" using_cgen=yes ;;
        bfd_iq2000_arch)        ta="$ta iq2000-asm.lo iq2000-desc.lo iq2000-dis.lo iq2000-ibld.lo iq2000-opc.lo" using_cgen=yes ;;
	bfd_m32r_arch)		ta="$ta m32r-asm.lo m32r-desc.lo m32r-dis.lo m32r-ibld.lo m32r-opc.lo m32r-opinst.lo" using_cgen=yes ;;
	bfd_m68hc11_arch)	ta="$ta m68hc11-dis.lo m68hc11-opc.lo" ;;
	bfd_m68hc12_arch)	ta="$ta m68hc11-dis.lo m68hc11-opc.lo" ;;
	bfd_m68k_arch)		ta="$ta m68k-dis.lo m68k-opc.lo" ;;
	bfd_m88k_arch)		ta="$ta m88k-dis.lo" ;;
	bfd_mcore_arch)		ta="$ta mcore-dis.lo" ;;
	bfd_mips_arch)		ta="$ta mips-dis.lo mips-opc.lo mips16-opc.lo" ;;
	bfd_mmix_arch)		ta="$ta mmix-dis.lo mmix-opc.lo" ;;
	bfd_mn10200_arch)	ta="$ta m10200-dis.lo m10200-opc.lo" ;;
	bfd_mn10300_arch)	ta="$ta m10300-dis.lo m10300-opc.lo" ;;
	bfd_msp430_arch)	ta="$ta msp430-dis.lo" ;;
	bfd_ns32k_arch)		ta="$ta ns32k-dis.lo" ;;
	bfd_openrisc_arch)	ta="$ta openrisc-asm.lo openrisc-desc.lo openrisc-dis.lo openrisc-ibld.lo openrisc-opc.lo" using_cgen=yes ;;
	bfd_or32_arch)		ta="$ta or32-dis.lo or32-opc.lo" using_cgen=yes ;;
	bfd_pdp11_arch)		ta="$ta pdp11-dis.lo pdp11-opc.lo" ;;
	bfd_pj_arch)	        ta="$ta pj-dis.lo pj-opc.lo" ;;
	bfd_powerpc_arch)	ta="$ta ppc-dis.lo ppc-opc.lo" ;;
	bfd_powerpc_64_arch)	ta="$ta ppc-dis.lo ppc-opc.lo" ;;
	bfd_pyramid_arch)	;;
	bfd_romp_arch)		;;
	bfd_rs6000_arch)	ta="$ta ppc-dis.lo ppc-opc.lo" ;;
	bfd_s390_arch)		ta="$ta s390-dis.lo s390-opc.lo" ;;
	bfd_sh_arch)
	  # We can't decide what we want just from the CPU family.
	  # We want SH5 support unless a specific version of sh is
	  # specified, as in sh3-elf, sh3b-linux-gnu, etc.
	  # Include it just for ELF targets, since the SH5 bfd:s are ELF only.
	  for t in $target $canon_targets; do
	    case $t in
	      all |  sh5*-* | sh64*-* | sh-*-*elf* | shl*-*-*elf* | \
	      sh-*-linux* | shl-*-linux*)
				ta="$ta sh64-dis.lo sh64-opc.lo"
				archdefs="$archdefs -DINCLUDE_SHMEDIA"
				break;;
	    esac;
	  done
				ta="$ta sh-dis.lo" ;;
	bfd_sparc_arch)		ta="$ta sparc-dis.lo sparc-opc.lo" ;;
	bfd_tahoe_arch)		;;
	bfd_tic30_arch)		ta="$ta tic30-dis.lo" ;;
        bfd_tic4x_arch)         ta="$ta tic4x-dis.lo" ;;
	bfd_tic54x_arch)	ta="$ta tic54x-dis.lo tic54x-opc.lo" ;;
	bfd_tic80_arch)		ta="$ta tic80-dis.lo tic80-opc.lo" ;;
	bfd_v850_arch)		ta="$ta v850-opc.lo v850-dis.lo" ;;
	bfd_v850e_arch)		ta="$ta v850-opc.lo v850-dis.lo" ;;
	bfd_v850ea_arch)	ta="$ta v850-opc.lo v850-dis.lo" ;;
	bfd_vax_arch)		ta="$ta vax-dis.lo" ;;
	bfd_w65_arch)		ta="$ta w65-dis.lo" ;;
	bfd_we32k_arch)		;;
	bfd_xstormy16_arch)	ta="$ta xstormy16-asm.lo xstormy16-desc.lo xstormy16-dis.lo xstormy16-ibld.lo xstormy16-opc.lo" using_cgen=yes ;;
	bfd_xtensa_arch)	ta="$ta xtensa-dis.lo" ;;
	bfd_z8k_arch)		ta="$ta z8k-dis.lo" ;;
	bfd_frv_arch)           ta="$ta frv-asm.lo frv-desc.lo frv-dis.lo frv-ibld.lo frv-opc.lo" using_cgen=yes ;;

	"")			;;
	*)		AC_MSG_ERROR(*** unknown target architecture $arch) ;;
	esac
    done

    if test $using_cgen = yes ; then
	ta="$ta $cgen_files"
    fi

    # Weed out duplicate .o files.
    f=""
    for i in $ta ; do
	case " $f " in
	*" $i "*) ;;
	*) f="$f $i" ;;
	esac
    done
    ta="$f"

    # And duplicate -D flags.
    f=""
    for i in $archdefs ; do
	case " $f " in
	*" $i "*) ;;
	*) f="$f $i" ;;
	esac
    done
    archdefs="$f"

    BFD_MACHINES="$ta"

else	# all_targets is true
    archdefs=-DARCH_all
    BFD_MACHINES='$(ALL_MACHINES)'
fi

AC_SUBST(archdefs)
AC_SUBST(BFD_MACHINES)

AC_CONFIG_FILES([Makefile po/Makefile.in:po/Make-in])
AC_CONFIG_COMMANDS([default],[[sed -e '/POTFILES =/r po/POTFILES' po/Makefile.in > po/Makefile]],[[]])
AC_OUTPUT
