dnl Process this file file with autoconf to produce a configure script.
dnl This file is a shell script fragment that supplies the information
dnl necessary to tailor a template configure script into the configure
dnl script appropriate for this directory.  For more information, check
dnl any existing configure script.

AC_PREREQ(2.12.1)
AC_INIT(gdb.base)

CC=${CC-cc}
AC_SUBST(CC)
AC_CONFIG_AUX_DIR(`cd $srcdir;pwd`/../..)
AC_CANONICAL_SYSTEM

# Directories to use in all configurations.
configdirs="gdb.asm \
            gdb.base \
            gdb.c++ \
            gdb.disasm \
            gdb.chill \
            gdb.threads \
            gdb.trace"


# Directories to use for a configuration which uses stabs.
stabsdirs="gdb.stabs"

	# this section is for targets that use stabs
# add stabs tests for appropriate targets
case "${target}" in
	powerpc-*-aix*)	configdirs="${configdirs} ${stabsdirs}" ;;
	rs6000-*-aix*)	configdirs="${configdirs} ${stabsdirs}" ;;
	*-*-bsd*)	configdirs="${configdirs} ${stabsdirs}" ;;
	*-*-go32*)	configdirs="${configdirs} ${stabsdirs}" ;;
	*-*-linux*)	configdirs="${configdirs} ${stabsdirs}" ;;
	*-*-lynxos*)	configdirs="${configdirs} ${stabsdirs}" ;;
	*-sun-*)	configdirs="${configdirs} ${stabsdirs}" ;;
	hppa*-*-*)	configdirs="${configdirs} ${stabsdirs}" ;;
	*-*-elf*)	configdirs="${configdirs} ${stabsdirs}" ;;
	*)		if test "x${with_stabs}" = x"yes" ; then
			  configdirs="${configdirs} ${stabsdirs}"
			fi ;;
esac

# Directory with HP specific tests. They will run only with HP's compilers. 
# These tests will not work on other platforms and compilers.

hpdir="gdb.hp"

case "${target}" in
 hppa*-*-hpux*) configdirs="${configdirs} ${hpdir}" ;;
esac


# Begin stuff to support --enable-shared
AC_ARG_ENABLE(shared,
[  --enable-shared         use shared libraries],
[case "${enableval}" in
  yes) shared=true ;;
  no)  shared=false ;;
  *) shared=true ;;
esac])dnl
RPATH_ENVVAR=LD_LIBRARY_PATH
# If we have shared libraries, try to set RPATH_ENVVAR reasonably.
if test "${shared}" = "true"; then
  case "${host}" in
  *-*-hpux*)
    RPATH_ENVVAR=SHLIB_PATH
    ;;
  esac
fi
AC_SUBST(RPATH_ENVVAR)
# End stuff to support --enable-shared
# Start stuff to support --enable-gdbtk
AC_ARG_ENABLE(gdbtk,
[  --enable-gdbtk ],
[case "${enableval}" in
    yes)
        case "$host" in
        *go32*)
            enable_gdbtk=no ;;
        *windows*)
            enable_gdbtk=no ;;
        *)
            enable_gdbtk=yes ;;
        esac ;;
    no)
        enable_gdbtk=no  ;;
    *)
        AC_MSG_ERROR(bad value ${enableval} given for gdbtk option) ;;
esac],
[
# Default is on for everything but go32 and windows
case "$host" in
    *go32* | *windows*)
        ;;
    *)
        enable_gdbtk=yes ;;
    esac
])

if test "${enable_gdbtk}" = "yes"; then
    configdirs="${configdirs} gdb.gdbtk"
fi
# End stuff to support --enable-shared

# configure the subdirectories too
AC_CONFIG_SUBDIRS($configdirs)

dnl AC_SUBST(gdb_target_cpu)
AC_OUTPUT(Makefile)
