dnl Process this file with autoconf to produce a configure script.
AC_PREREQ(2.3)dnl
AC_INIT(main.c)

CC=${CC-cc}
AC_PROG_CC
AC_AIX
AC_MINIX
AC_ISC_POSIX

AC_PROG_INSTALL
AC_PROG_RANLIB

AC_CONFIG_AUX_DIR(`cd $srcdir;pwd`/..)
AC_CANONICAL_SYSTEM
AC_ARG_PROGRAM

AC_HEADER_STDC
AC_CHECK_HEADERS(memory.h string.h strings.h unistd.h)
AC_HEADER_STAT

AC_FUNC_MMAP

dnl Handle optional features that can be enabled.
ENABLE_CFLAGS=
ENABLE_CLIBS=
ENABLE_OBS=

AC_ARG_ENABLE(netrom,
[  --enable-netrom ],
[case "${enableval}" in
yes)	enable_netrom=yes ;;
no)	enable_netrom=no ;;
*)	AC_MSG_ERROR(bad value ${enableval} given for netrom option) ;;
esac])

if test "${enable_netrom}" = "yes"; then
	ENABLE_OBS="${ENABLE_OBS} remote-nrom.o" 
fi

# start-sanitize-gdbtk
ENABLE_GDBTK=

AC_ARG_ENABLE(gdbtk,
[  --enable-gdbtk ],
[case "${enableval}" in
yes)	enable_gdbtk=yes ;;
no)	enable_gdbtk=no  ;;
*)	AC_MSG_ERROR(bad value ${enableval} given for gdbtk option) ;;
esac])

if test "${enable_gdbtk}" = "yes"; then
	AC_PATH_X
	AC_PATH_XTRA

	CYGNUS_PATH_TK
	CYGNUS_PATH_TCL

	ENABLE_GDBTK=1
	TCL_LIBS='$(TCL) $(TK) $(X11)'
	ENABLE_CLIBS="${ENABLE_CLIBS} ${TCL_LIBS} -lm"
	ENABLE_OBS="${ENABLE_OBS} gdbtk.o"
fi
AC_SUBST(ENABLE_GDBTK)
# end-sanitize-gdbtk

AC_SUBST(ENABLE_CFLAGS)
AC_SUBST(ENABLE_CLIBS)
AC_SUBST(ENABLE_OBS)


configdirs="doc testsuite"

dnl
changequote(,)dnl

# Map host cpu into the config cpu subdirectory name.
# The default is $host_cpu.

case "${host_cpu}" in

c[12])			gdb_host_cpu=convex ;;
hppa*)			gdb_host_cpu=pa ;;
i[345]86)		gdb_host_cpu=i386 ;;
m68*)			gdb_host_cpu=m68k ;;
m88*)			gdb_host_cpu=m88k ;;
np1)			gdb_host_cpu=gould ;;
pyramid)		gdb_host_cpu=pyr ;;
powerpc*)		gdb_host_cpu=powerpc ;;
*)			gdb_host_cpu=$host_cpu ;;

esac

# map host info into gdb names.

case "${host}" in

a29k-*-*)		gdb_host=ultra3 ;;

alpha-*-osf1*)		gdb_host=alpha-osf1 ;;
alpha-*-osf2*)		gdb_host=alpha-osf2 ;;
alpha-*-osf[3456789]*)	gdb_host=alpha-osf3 ;;

arm-*-*)		gdb_host=arm ;;

c[12]-*-*)		gdb_host=convex ;;

hppa*-*-bsd*)		gdb_host=hppabsd ;;
hppa*-*-hiux*)		gdb_host=hppahpux ;;
hppa*-*-hpux*)		gdb_host=hppahpux ;;
hppa*-*-osf*)		gdb_host=hppaosf ;;

i[345]86-ncr-*)		gdb_host=ncr3000 ;;
i[345]86-sequent-bsd*)	gdb_host=symmetry ;;  # dynix
i[345]86-sequent-sysv4*) gdb_host=ptx4 ;;
i[345]86-sequent-sysv*)	gdb_host=ptx ;;
i[345]86-*-aix*)	gdb_host=i386aix ;;
i[345]86-*-bsd*)	gdb_host=i386bsd ;;
i[345]86-*-freebsd*)	gdb_host=fbsd ;;
i[345]86-*-netbsd*)	gdb_host=nbsd ;;
i[345]86-*-go32*)	gdb_host=go32 ;;
i[345]86-*-linux*)	gdb_host=linux ;;
i[345]86-*-lynxos*)	gdb_host=i386lynx ;;
i[345]86-*-mach3*)	gdb_host=i386m3 ;;
i[345]86-*-mach*)	gdb_host=i386mach ;;
i[345]86-*-osf1mk*)	gdb_host=osf1mk ;;
i[345]86-*-sco3.2v4*)	gdb_host=i386sco4 ;;
i[345]86-*-sco*)	gdb_host=i386sco ;;
i[345]86-*-solaris*)	gdb_host=i386sol2 ;;
i[345]86-*-sunos*)	gdb_host=sun386 ;;
i[345]86-*-sysv3.2*)	gdb_host=i386v32 ;;
i[345]86-*-sysv32*)	gdb_host=i386v32 ;;
i[345]86-*-sysv4*)	gdb_host=i386v4 ;;
i[345]86-*-unixware)	gdb_host=i386v4 ;;
i[345]86-*-sysv*)	gdb_host=i386v ;;
i[345]86-*-isc*)	gdb_host=i386v32 ;;
i[345]86-*-os9k)	gdb_host=i386os9k ;;

m680[01]0-sun-sunos3*)	gdb_host=sun2os3 ;;
m680[01]0-sun-sunos4*)	gdb_host=sun2os4 ;;
m68030-sony-*)		gdb_host=news1000 ;;

m68*-altos-*)		gdb_host=altos ;;
m68*-apollo*-sysv*)	gdb_host=apollo68v ;;
m68*-apollo*-bsd*)	gdb_host=apollo68b ;;
m68*-att-*)		gdb_host=3b1 ;;
m68*-bull*-sysv*)	gdb_host=dpx2 ;;
m68*-hp-bsd*)		gdb_host=hp300bsd ;;
m68*-hp-hpux*)		gdb_host=hp300hpux ;;
m68*-isi-*)		gdb_host=isi ;;
m68*-*-lynxos*)		gdb_host=m68klynx ;;
m68*-*-sysv4*)		gdb_host=m68kv4 ;;
m68*-motorola-*)	gdb_host=delta68 ;;
m68*-sony-*)		gdb_host=news ;;
m68*-sun-sunos3*)	gdb_host=sun3os3 ;;
m68*-sun-sunos4*)	gdb_host=sun3os4 ;;
m68*-sun-*)		gdb_host=sun3os4 ;;

m88*-harris-cxux*)	gdb_host=cxux ;;
m88*-motorola-sysv4*)	gdb_host=delta88v4 ;;
m88*-motorola-sysv*)	gdb_host=delta88 ;;
m88*-*-mach3*)		gdb_host=mach3 ;;
m88*-*-*)		gdb_host=m88k ;;

mips-dec-mach3*)	gdb_host=mach3 ;;
mips-dec-*)		gdb_host=decstation ;;
mips-little-*)		gdb_host=littlemips ;;
mips-sgi-irix3*)	gdb_host=irix3 ;;
mips-sgi-irix4*)	gdb_host=irix4 ;;
mips-sgi-irix5*)	gdb_host=irix5 ;;
mips-sony-*)		gdb_host=news-mips ;;
mips-*-mach3*)		gdb_host=mach3 ;;
mips-*-sysv4*)		gdb_host=mipsv4 ;;
mips-*-sysv*)		gdb_host=riscos ;;
mips-*-riscos*)		gdb_host=riscos ;;

none-*-*)		gdb_host=none ;;

np1-*-*)		gdb_host=np1 ;;

ns32k-*-mach3*)		gdb_host=mach3 ;;
ns32k-*-netbsd*)	gdb_host=nbsd ;;
ns32k-umax-*)		gdb_host=umax ;;
ns32k-utek-sysv*)	gdb_host=merlin ;;

powerpc-*-aix*)		gdb_host=aix ;;

pn-*-*)			gdb_host=pn ;;

pyramid-*-*)		gdb_host=pyramid ;;

romp-*-*)		gdb_host=rtbsd ;;

rs6000-*-lynxos*)	gdb_host=rs6000lynx ;;
rs6000-*-*)		gdb_host=rs6000 ;;

sparc-*-lynxos*)	gdb_host=sparclynx ;;
sparc-*-netbsd*)	gdb_host=nbsd ;;
sparc-*-solaris2*)	gdb_host=sun4sol2 ;;
sparc-*-sunos4*)	gdb_host=sun4os4 ;;
sparc-*-sunos5*)	gdb_host=sun4sol2 ;;
sparc-*-*)		gdb_host=sun4os4 ;;

tahoe-*-*)		gdb_host=tahoe ;;

vax-*-bsd*)		gdb_host=vaxbsd ;;
vax-*-ultrix2*)		gdb_host=vaxult2 ;;
vax-*-ultrix*)		gdb_host=vaxult ;;

w65-*-*)		gdb_host=w65 ;;

esac


# Map target cpu into the config cpu subdirectory name.
# The default is $target_cpu.

case "${target_cpu}" in

alpha)			gdb_target_cpu=alpha ;;
c[12])			gdb_target_cpu=convex ;;
hppa*)			gdb_target_cpu=pa ;;
i[345]86)		gdb_target_cpu=i386 ;;
m68*)			gdb_target_cpu=m68k ;;
m88*)			gdb_target_cpu=m88k ;;
mips*)			gdb_target_cpu=mips ;;
np1)			gdb_target_cpu=gould ;;
powerpc*)		gdb_target_cpu=powerpc ;;
pn)			gdb_target_cpu=gould ;;
pyramid)		gdb_target_cpu=pyr ;;
sparc*)			gdb_target_cpu=sparc ;;
*)			gdb_target_cpu=$target_cpu ;;

esac

# map target info into gdb names.

case "${target}" in

a29k-*-aout*)		gdb_target=a29k ;;
a29k-*-coff*)		gdb_target=a29k ;;
a29k-*-elf*)		gdb_target=a29k ;;
a29k-*-ebmon*)		gdb_target=a29k ;;
a29k-*-kern*)		gdb_target=a29k-kern ;;
a29k-*-none*)		gdb_target=a29k ;;
a29k-*-sym1*)		gdb_target=ultra3 ;;
a29k-*-udi*)		gdb_target=a29k-udi ;;
a29k-*-vxworks*)        gdb_target=vx29k ;;

alpha-*-osf*)		gdb_target=alpha-osf1 ;;

# start-sanitize-arc
arc-*-*)		gdb_target=arc ;;
# end-sanitize-arc

arm-*-*)		gdb_target=arm ;;

c1-*-*)			gdb_target=convex ;;
c2-*-*)			gdb_target=convex ;;

h8300-*-*)		gdb_target=h8300 ;;
h8500-*-*)		gdb_target=h8500 ;;

sh-*-*)			gdb_target=sh ;;

# start-sanitize-r16
r16-*-*)		gdb_target=r16 ;;
# end-sanitize-r16

hppa*-*-bsd*)		gdb_target=hppabsd ;;
hppa*-*-pro*)		gdb_target=hppapro ;;
hppa*-*-hpux*)		gdb_target=hppahpux ;;
hppa*-*-hiux*)		gdb_target=hppahpux ;;
hppa*-*-osf*)		gdb_target=hppaosf ;;

i[345]86-sequent-bsd*)	gdb_target=symmetry ;;
i[345]86-sequent-sysv4*) gdb_target=ptx4 ;;
i[345]86-sequent-sysv*)	gdb_target=ptx ;;
i[345]86-ncr-*)		gdb_target=ncr3000 ;;
i[345]86-*-aout*)	gdb_target=i386aout ;;
i[345]86-*-coff*)	gdb_target=i386v ;;
i[345]86-*-elf*)	gdb_target=i386v ;;
i[345]86-*-aix*)	gdb_target=i386aix ;;
i[345]86-*-bsd*)	gdb_target=i386bsd ;;
i[345]86-*-freebsd*)	gdb_target=fbsd ;;
i[345]86-*-netbsd*)	gdb_target=nbsd ;;
i[345]86-*-os9k)	gdb_target=i386os9k ;;
i[345]86-*-go32*)	gdb_target=i386aout ;;
i[345]86-*-lynxos*)	gdb_target=i386lynx
		configdirs="${configdirs} gdbserver" ;;
i[345]86-*-solaris*)	gdb_target=i386sol2 ;;
i[345]86-*-sunos*)	gdb_target=sun386 ;;
i[345]86-*-sysv4*)	gdb_target=i386v4 ;;
i[345]86-*-sco*)	gdb_target=i386v ;;
i[345]86-*-sysv*)	gdb_target=i386v ;;
i[345]86-*-linux*)	gdb_target=linux ;;
i[345]86-*-isc*)	gdb_target=i386v ;;
i[345]86-*-mach3*)	gdb_target=i386m3 ;;
i[345]86-*-mach*)	gdb_target=i386mach ;;
i[345]86-*-netware*)	gdb_target=i386nw
		configdirs="${configdirs} nlm" ;;
i[345]86-*-osf1mk*)	gdb_target=i386mk ;;

i960-*-bout*)		gdb_target=vxworks960 ;;
i960-*-coff*)		gdb_target=nindy960 ;;
i960-*-elf*)		gdb_target=nindy960 ;;

i960-*-nindy*)		gdb_target=nindy960 ;;
i960-*-vxworks*)	gdb_target=vxworks960 ;;

m68000-*-sunos3*)	gdb_target=sun2os3 ;;
m68000-*-sunos4*)	gdb_target=sun2os4 ;;

m68*-apollo*-bsd*)	gdb_target=apollo68b ;;
m68*-bull-sysv*)	gdb_target=dpx2 ;;
m68*-hp-bsd*)		gdb_target=hp300bsd ;;
m68*-hp-hpux*)		gdb_target=hp300hpux ;;
m68*-altos-*)		gdb_target=altos ;;
m68*-att-*)		gdb_target=3b1 ;;
m68*-cisco*-*)		gdb_target=cisco ;;
m68*-ericsson-*)	gdb_target=es1800 ;;
m68*-isi-*)		gdb_target=isi ;;
m68*-motorola-*)	gdb_target=delta68 ;;
m68*-netx-*)		gdb_target=vxworks68 ;;
m68*-sony-*)		gdb_target=news ;;
m68*-tandem-*)		gdb_target=st2000 ;;
m68*-rom68k-*)          gdb_target=monitor ;;
m68*-*bug-*)            gdb_target=monitor ;;
m68*-monitor-*)         gdb_target=monitor ;;
m68*-est-*)		gdb_target=monitor ;;
m68*-*-aout*)		gdb_target=monitor ;;
m68*-*-coff*)		gdb_target=monitor ;;
m68*-*-elf*)		gdb_target=monitor ;;
m68*-*-lynxos*)		gdb_target=m68klynx
		configdirs="${configdirs} gdbserver" ;;
m68*-*-os68k*)		gdb_target=os68k ;;
m68*-*-sunos3*)		gdb_target=sun3os3 ;;
m68*-*-sunos4*)		gdb_target=sun3os4 ;;
m68*-*-sysv4*)		gdb_target=m68kv4 ;;
m68*-*-vxworks*)	gdb_target=vxworks68 ;;

m88*-harris-cxux*)	gdb_target=cxux ;;
m88*-motorola-sysv4*)	gdb_target=delta88v4 ;;
m88*-*-mach3*)		gdb_target=mach3 ;;
m88*-motorola-*)	gdb_target=delta88 ;;
m88*-*-*)		gdb_target=m88k ;;

mips64*-big-*)		gdb_target=bigmips64 ;;
mips*-big-*)		gdb_target=bigmips ;;
mips*-dec-mach3*)	gdb_target=mach3 ;;
mips*-dec-*)		gdb_target=decstation ;;
mips64*el-*-ecoff*)	gdb_target=idtl64 ;;
mips64*-idt-ecoff*)	gdb_target=idt64 ;;
mips64*el-*-elf*)	gdb_target=idtl64 ;;
mips64*-*-elf*)		gdb_target=idt64 ;;
mips*el-*-ecoff*)	gdb_target=idtl ;;
mips*-*-ecoff*)		gdb_target=idt ;;
mips*el-*-elf*)		gdb_target=idtl ;;
mips*-*-elf*)		gdb_target=idt ;;
mips*-little-*)		gdb_target=littlemips ;;
mips*-sgi-irix5*)	gdb_target=irix5 ;;
mips*-sgi-*)		gdb_target=irix3 ;;
mips*-sony-*)		gdb_target=bigmips ;;
mips*-*-mach3*)		gdb_target=mach3 ;;
mips*-*-sysv4*)		gdb_target=mipsv4 ;;
mips*-*-sysv*)		gdb_target=bigmips ;;
mips*-*-riscos*)	gdb_target=bigmips ;;

none-*-*)		gdb_target=none ;;

np1-*-*)		gdb_target=np1 ;;

ns32k-*-mach3*)		gdb_target=mach3 ;;
ns32k-*-netbsd*)	gdb_target=nbsd ;;
ns32k-utek-sysv*)	gdb_target=merlin ;;
ns32k-utek-*)		gdb_target=umax ;;

pn-*-*)			gdb_target=pn ;;
powerpc-*-netware*)	gdb_target=ppc-nw
			configdirs="${configdirs} nlm" ;;

powerpc-*-aix4*)	gdb_target=aix4 ;;
powerpc-*-aix*)		gdb_target=aix ;;
powerpc-*-eabi*)	gdb_target=ppc-eabi ;;
powerpcle-*-eabi*)	gdb_target=ppcle-eabi ;;

pyramid-*-*)		gdb_target=pyramid ;;

rs6000-*-lynxos*)	gdb_target=rs6000lynx ;;
rs6000-*-aix4*)		gdb_target=aix4 ;;
rs6000-*-*)		gdb_target=rs6000 ;;

sparc-*-aout*)		gdb_target=sparc-em ;;
sparc-*-coff*)		gdb_target=sparc-em ;;
sparc-*-elf*)		gdb_target=sparc-em ;;
sparc-*-lynxos*)	gdb_target=sparclynx
		configdirs="${configdirs} gdbserver" ;;
sparc-*-netbsd*)	gdb_target=nbsd ;;
sparc-*-solaris2*)	gdb_target=sun4sol2 ;;
sparc-*-sunos4*)	gdb_target=sun4os4 ;;
sparc-*-sunos5*)	gdb_target=sun4sol2 ;;
sparc-*-vxworks*)	gdb_target=vxsparc ;;
sparc-*-*)		gdb_target=sun4os4 ;;
sparclite*-*-*)		gdb_target=sparclite ;;
sparc64-*-*)		gdb_target=sp64 ;;

tahoe-*-*)		gdb_target=tahoe ;;

vax-*-*)		gdb_target=vax ;;

w65-*-*)		gdb_target=w65 ;;

z8k-*-coff*)		gdb_target=z8k ;;

esac

dnl
changequote([,])dnl

frags=
host_makefile_frag=${srcdir}/config/${gdb_host_cpu}/${gdb_host}.mh
if test ! -f ${host_makefile_frag}; then
AC_MSG_ERROR("*** Gdb does not support host ${host}")
fi
frags="$frags $host_makefile_frag"

target_makefile_frag=${srcdir}/config/${gdb_target_cpu}/${gdb_target}.mt
if test ! -f ${target_makefile_frag}; then
AC_MSG_ERROR("*** Gdb does not support target ${target}")
fi
frags="$frags $target_makefile_frag"

AC_SUBST_FILE(host_makefile_frag)
AC_SUBST_FILE(target_makefile_frag)
AC_SUBST(frags)

changequote(,)dnl
hostfile=`sed -n '
s/XM_FILE[ 	]*=[ 	]*\([^ 	]*\)/\1/p
' ${host_makefile_frag}`

targetfile=`sed -n '
s/TM_FILE[ 	]*=[ 	]*\([^ 	]*\)/\1/p
' ${target_makefile_frag}`

# these really aren't orthogonal true/false values of the same condition,
# but shells are slow enough that I like to reuse the test conditions
# whenever possible
if test "${target}" = "${host}"; then
nativefile=`sed -n '
s/NAT_FILE[ 	]*=[ 	]*\([^ 	]*\)/\1/p
' ${host_makefile_frag}`
else
# GDBserver is only useful in a "native" enviroment
configdirs=`echo $configdirs | sed 's/gdbserver//'`
fi
changequote([,])

# If hostfile (XM_FILE) and/or targetfile (TM_FILE) and/or nativefile
# (NAT_FILE) is not set in config/*/*.m[ht] files, we don't make the
# corresponding links.  But we have to remove the xm.h files and tm.h
# files anyway, e.g. when switching from "configure host" to
# "configure none".

files=
links=
rm -f xm.h
if test "${hostfile}" != ""; then
files="${files} config/${gdb_host_cpu}/${hostfile}"
links="${links} xm.h"
fi
rm -f tm.h
if test "${targetfile}" != ""; then
files="${files} config/${gdb_target_cpu}/${targetfile}"
links="${links} tm.h"
fi
rm -f nm.h
if test "${nativefile}" != ""; then
files="${files} config/${gdb_host_cpu}/${nativefile}"
links="${links} nm.h"
else
# A cross-only configuration.
files="${files} config/nm-empty.h"
links="${links} nm.h"
fi
# start-sanitize-gdbtk

# Make it possible to use the GUI without doing a full install
if test "${enable_gdbtk}" = "yes" -a ! -f gdbtk.tcl ; then
files="${files} gdbtk.tcl"
links="${links} gdbtk.tcl"
fi
# end-sanitize-gdbtk

AC_LINK_FILES($files, $links)

AC_CONFIG_SUBDIRS($configdirs)
AC_OUTPUT(Makefile, 
[
dnl Autoconf doesn't provide a mechanism for modifying definitions 
dnl provided by makefile fragments.
dnl
if test "${nativefile}" = ""; then
sed -e '/^NATDEPFILES= /s//# NATDEPFILES= /' \
	< Makefile > Makefile.tem
mv -f Makefile.tem Makefile
fi

changequote(,)dnl
sed -e '/^TM_FILE[ 	]*=/s,^TM_FILE[ 	]*=[ 	]*,&config/'"${gdb_target_cpu}"'/,
/^XM_FILE[ 	]*=/s,^XM_FILE[ 	]*=[ 	]*,&config/'"${gdb_host_cpu}"'/,
/^NAT_FILE[ 	]*=/s,^NAT_FILE[ 	]*=[ 	]*,&config/'"${gdb_host_cpu}"'/,' <Makefile >Makefile.tmp
mv -f Makefile.tmp Makefile
changequote([,])dnl

case ${srcdir} in
.)
;;
*)
grep "source ${srcdir}/.gdbinit" .gdbinit >/dev/null 2>/dev/null || \
echo "source ${srcdir}/.gdbinit" >> .gdbinit
esac
],
[
gdb_host_cpu=$gdb_host_cpu
gdb_target_cpu=$gdb_target_cpu
nativefile=$nativefile
])