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

AC_INIT(include/allegro.h)
AC_CONFIG_AUX_DIR(misc)
AC_CONFIG_HEADER(include/allegro/platform/alunixac.h:include/allegro/platform/alunixac.hin)
AC_PREREQ(2.53)
AC_ARG_PROGRAM

dnl Build CFLAGS from scratch
CFLAGS=

dnl Enable asm code in the library (default)
AC_ARG_ENABLE(asm,
[  --enable-asm[=x]        enable the use of asm code [default=yes]],
test "X$enableval" != "Xno" && allegro_enable_asm=yes,
allegro_enable_asm=yes)

dnl Enable 8-bpp color depth (default).
AH_TEMPLATE([ALLEGRO_COLOR8], [Define if you want support for 8 bpp modes.])
AC_ARG_ENABLE(color8,
[  --enable-color8[=x]     enable support for 8-bpp modes [default=yes]],
test "X$enableval" != "Xno" && AC_DEFINE(ALLEGRO_COLOR8),
AC_DEFINE(ALLEGRO_COLOR8))

dnl Enable 16-bpp color depth (default).
AH_TEMPLATE([ALLEGRO_COLOR16], [Define if you want support for 16 bpp modes.])
AC_ARG_ENABLE(color16,
[  --enable-color16[=x]    enable support for 16-bpp modes [default=yes]],
test "X$enableval" != "Xno" && AC_DEFINE(ALLEGRO_COLOR16),
AC_DEFINE(ALLEGRO_COLOR16))

dnl Enable 24-bpp color depth (default).
AH_TEMPLATE([ALLEGRO_COLOR24], [Define if you want support for 24 bpp modes.])
AC_ARG_ENABLE(color24,
[  --enable-color24[=x]    enable support for 24-bpp modes [default=yes]],
test "X$enableval" != "Xno" && AC_DEFINE(ALLEGRO_COLOR24),
AC_DEFINE(ALLEGRO_COLOR24))

dnl Enable 32-bpp color depth (default).
AH_TEMPLATE([ALLEGRO_COLOR32], [Define if you want support for 32 bpp modes.])
AC_ARG_ENABLE(color32,
[  --enable-color32[=x]    enable support for 32-bpp modes [default=yes]],
test "X$enableval" != "Xno" && AC_DEFINE(ALLEGRO_COLOR32),
AC_DEFINE(ALLEGRO_COLOR32))

dnl Enable static library.
AC_ARG_ENABLE(static,
[  --enable-static[=x]     build static libraries [default=no]],
test "X$enableval" != "Xno" && allegro_static_libraries=yes)

dnl Enable shared library.
AC_ARG_ENABLE(shared,
[  --enable-shared[=x]     build shared libraries [default=yes]],
test "X$enableval" != "Xno" && allegro_shared_libraries=yes,
allegro_shared_libraries=yes)

dnl Enable building normal library (default).
AC_ARG_ENABLE(stdlib,
[  --enable-stdlib[=x]     enable building normal library [default=yes]],
test "X$enableval" != "Xno" && allegro_build_normal_library=yes,
allegro_build_normal_library=yes)

dnl Enable building debugging library.
AC_ARG_ENABLE(dbglib,
[  --enable-dbglib[=x]     enable building debugging library [default=no]],
test "X$enableval" != "Xno" && allegro_build_debugging_library=yes)

dnl Enable building profiling library.
AC_ARG_ENABLE(proflib,
[  --enable-proflib[=x]    enable building profiling library [default=no]],
test "X$enableval" != "Xno" && allegro_build_profiling_library=yes)

dnl Enable building debugging programs.
AC_ARG_ENABLE(dbgprog,
[  --enable-dbgprog[=x]    enable building debugging programs [default=no]],
test "X$enableval" != "Xno" && allegro_build_debugging_programs=yes)

dnl Enable building profiling programs.
AC_ARG_ENABLE(profprog,
[  --enable-profprog[=x]   enable building profiling programs [default=no]],
test "X$enableval" != "Xno" && allegro_build_profiling_programs=yes)

dnl Link programs with static library rather than shared (if available)
AC_ARG_ENABLE(staticprog,
[  --enable-staticprog[=x] link programs with static library [default=no]],
test "X$enableval" != "Xno" && allegro_build_static_programs=yes)

dnl Enable x86 processor-specific optimizations.
AC_ARG_ENABLE(opts,
[  --enable-opts=CPU       enable x86 processor optimizations [pentium]],
test "X$enableval" != "Xyes" && allegro_optimizations=$enableval,
allegro_optimizations=pentium)

dnl Enable x86 processor-specific exclusive optimizations.
AC_ARG_ENABLE(exclopts,
[  --enable-exclopts=CPU   enable x86 processor exclusive optimizations [none]],
test "X$enableval" != "Xyes" && allegro_exclusive_optimizations=$enableval,
allegro_exclusive_optimizations=none)

dnl Sanity check on shared/static options
if test "X$allegro_static_libraries" != "Xyes"; then
  if test "X$allegro_shared_libraries" != "Xyes"; then
    AC_MSG_WARN([static and shared libraries all disabled, assuming shared])
    allegro_shared_libraries=yes
  fi
elif test "X$allegro_shared_libraries" != "Xyes"; then
  allegro_build_static_programs=yes
fi

dnl How strict should we be about compiler warnings
AC_ARG_ENABLE(strictwarn,
[  --enable-strictwarn[=x] produce strict compiler warnings [default=no]],
test "X$enableval" != "Xno" && allegro_strict_warnings=yes)

if test "X$allegro_strict_warnings" = "Xyes"; then
   _warnmode="Building Allegro with strict warnings."
else
   _warnmode="Ignoring compiler warnings."
fi

dnl Enable magic main (default: no).
AC_ARG_ENABLE(magicmain,
[  --enable-magicmain[=x]  enable magic main [default=no]],
test "X$enableval" == "Xyes" && AC_DEFINE(ALLEGRO_WITH_MAGIC_MAIN,1,[Define if you need to use a magic main.]))

dnl Check that $prefix is set (needed for ALLEGRO_ACTEST_GCC_INCLUDE_PREFIX)
test "$prefix" = NONE && prefix=/usr/local

dnl Check for tools.
AC_PROG_CC
ALLEGRO_ACTEST_GCC_VERSION
ALLEGRO_ACTEST_GCC_INCLUDE_PREFIX
AC_PROG_CPP
ALLEGRO_ACTEST_GCC_CXX
ALLEGRO_ACTEST_PROG_LD_S
AC_PROG_INSTALL
AC_PROG_MAKE_SET
AC_PROG_LN_S

dnl LDCONFIG is used for installing shared libraries, in Linux/ELF at least
AC_PATH_PROG(LDCONFIG, ldconfig, [echo ought to run ldconfig], $PATH:/sbin:/usr/sbin)

dnl MAKEINFO is needed for producing the info pages
AC_PATH_PROG(MAKEINFO, makeinfo, [echo ought to run makeinfo], $PATH:/sbin:/usr/sbin)

dnl INSTALL_INFO is needed for installing the info pages
AC_PATH_PROG(INSTALL_INFO, install-info, [echo ought to run install-info], $PATH:/sbin:/usr/sbin)

dnl Test for processor type.
ALLEGRO_ACTEST_PROCESSOR_TYPE

dnl Test for -mtune i386 option
if test "X$allegro_cv_processor_type" = "Xi386"; then
  ALLEGRO_ACTEST_GCC_I386_MTUNE
fi

dnl Test for -mtune AMD64 option
if test "X$allegro_cv_processor_type" = "Xamd64"; then
  ALLEGRO_ACTEST_GCC_AMD64_MTUNE
fi

dnl Test for asm support.
if test "X$allegro_enable_asm" = "Xyes"; then
  if test "X$allegro_cv_processor_type" = "Xi386"; then
    ALLEGRO_MAYBE_ASM_FILES=ALLEGRO_SRC_I386_FILES
    _code_features="i386 asm"

    dnl Test for MMX support.
    ALLEGRO_ACTEST_SUPPORT_MMX
    if test "X$allegro_cv_support_mmx" = "Xyes"; then
      AC_DEFINE(ALLEGRO_MMX,1,[Define if assembler supports MMX.])
      _code_features="$_code_features, MMX"
    fi
  
    dnl Test for SSE support.
    ALLEGRO_ACTEST_SUPPORT_SSE
    if test "X$allegro_cv_support_sse" = "Xyes"; then
      AC_DEFINE(ALLEGRO_SSE,1,[Define if assembler supports SSE.])
      _code_features="$_code_features, SSE"
    fi
  elif test "X$allegro_cv_processor_type" = "Xamd64"; then
    ALLEGRO_MAYBE_ASM_FILES=ALLEGRO_SRC_AMD64_FILES
    _code_features="amd64 asm"

    dnl MMX support available if AMD64 is available, but we can't use it yet.
    dnl AC_DEFINE(ALLEGRO_MMX,1,[Define if assembler supports MMX.])
    dnl _code_features="$_code_features, MMX"
  
    dnl SSE support available if AMD64 is available, but we can't use it yet.
    dnl AC_DEFINE(ALLEGRO_SSE,1,[Define if assembler supports SSE.])
    dnl _code_features="$_code_features, SSE"
  fi
fi

if test -z "$ALLEGRO_MAYBE_ASM_FILES"; then
  ALLEGRO_MAYBE_ASM_FILES=ALLEGRO_SRC_C_FILES
  CFLAGS="$CFLAGS -DALLEGRO_NO_ASM"
  AC_DEFINE(ALLEGRO_NO_ASM,1,
	    [Define for Unix platforms, to use C convention for bank switching.])
  _code_features="C only"
fi

AC_SUBST(ALLEGRO_MAYBE_ASM_FILES)

dnl Test for underscore prepended by compiler.
ALLEGRO_ACTEST_ASM_PREFIX
if test "$allegro_cv_asm_prefix" != ""; then
  AC_DEFINE_UNQUOTED(ALLEGRO_ASM_PREFIX, "$allegro_cv_asm_prefix",
		     [Define if compiler prepends underscore to symbols.])
fi

dnl Test target machine endianess.
AC_C_BIGENDIAN
if test "$ac_cv_c_bigendian" = yes; then
  AC_DEFINE(ALLEGRO_BIG_ENDIAN,1,[Define if target machine is big endian.])
  _code_features="big endian, $_code_features"
else
  AC_DEFINE(ALLEGRO_LITTLE_ENDIAN,1,[Define if target machine is little endian.])
  _code_features="little endian, $_code_features"
fi

dnl Test for MAP_FAILED presence.
ALLEGRO_ACTEST_MAP_FAILED
if test "$Xallegro_cv_have_map_failed" = "Xno"; then
  AC_DEFINE(MAP_FAILED, [(void *)-1],
	    [Define to (void *)-1, if MAP_FAILED is not defined.])
fi

dnl Test for sched_yield (SunOS).
ALLEGRO_ACTEST_SCHED_YIELD
if test "X$allegro_cv_support_sched_yield" = "Xyes"; then
   AC_DEFINE(ALLEGRO_USE_SCHED_YIELD,1,[Define if sched_yield is provided by some library.])
fi

dnl Test for constructor attribute support.
ALLEGRO_ACTEST_CONSTRUCTOR
if test "X$allegro_support_constructor" = "Xyes"; then
  AC_DEFINE(ALLEGRO_USE_CONSTRUCTOR,1,
	    [Define if constructor attribute is supported.])
fi

dnl Test for modules support.
ALLEGRO_ACTEST_MODULES
if test -n "$allegro_support_modules"; then
  AC_DEFINE(ALLEGRO_WITH_MODULES,1,
	    [Define if dynamically loaded modules are supported.])
  _modules="Some drivers will be built as dynamic modules."
else
  _modules="All drivers will be statically linked."
fi

dnl Do we need to pass the include prefix to the compiler?
if test "$allegro_cv_support_include_prefix" = "yes"; then
  INCLUDE_PREFIX="$prefix"
else
  INCLUDE_PREFIX=
fi
AC_SUBST(INCLUDE_PREFIX)

dnl Which version of library to link with (static, shared, normal, debugging, profiling)?
if test "X$allegro_build_debugging_programs" = "Xyes"; then
  COMPILE_PROGRAM=COMPILE_DEBUG
  COMPILE_CXX_PROGRAM=COMPILE_CXX_DEBUG
  COMPILE_S_PROGRAM=COMPILE_S_DEBUG
  PROG_LDFLAGS="-g \$(LDFLAGS)"
  LIB_TO_LINK=alld
  PLUGIN_LIB=lib/unix/libaddat.a
  allegro_build_debugging_library=yes
  _programs="debug"
elif test "X$allegro_build_profiling_programs" = "Xyes"; then
  COMPILE_PROGRAM=COMPILE_PROFILE
  COMPILE_CXX_PROGRAM=COMPILE_CXX_PROFILE
  COMPILE_S_PROGRAM=COMPILE_S_PROFILE
  PROG_LDFLAGS="-pg \$(LDFLAGS)"
  LIB_TO_LINK=allp
  PLUGIN_LIB=lib/unix/libapdat.a
  allegro_build_profiling_library=yes
  _programs="profile"
else
  COMPILE_PROGRAM=COMPILE_NORMAL
  COMPILE_CXX_PROGRAM=COMPILE_CXX_NORMAL
  COMPILE_S_PROGRAM=COMPILE_S_NORMAL
  if test "X$allegro_cv_prog_ld_s" = "Xyes"; then
    PROG_LDFLAGS="-s \$(LDFLAGS)"
  else
    PROG_LDFLAGS="\$(LDFLAGS)"
  fi
  LIB_TO_LINK=alleg
  PLUGIN_LIB=lib/unix/libaldat.a
  allegro_build_normal_library=yes
  _programs="release"
fi
if test "X$allegro_build_static_programs" = "Xyes"; then
  LIBALLEG=lib/unix/lib$LIB_TO_LINK.a
  LINK_LIBALLEG="$LIBALLEG \$(LIBS)"
  LINK_WITH_STATIC_LIBS=yes
  allegro_static_libraries=yes
  _programs="statically linked $_programs"
else
  LIBALLEG="lib/unix/lib${LIB_TO_LINK}-\$(shared_version).so lib/unix/lib${LIB_TO_LINK}_unsharable.a"
  LINK_LIBALLEG="-Llib/unix -l${LIB_TO_LINK}-\$(shared_version) -l${LIB_TO_LINK}_unsharable -lm"
  LINK_WITH_STATIC_LIBS=no
  allegro_shared_libraries=yes
  _programs="dynamically linked $_programs"
fi
AC_SUBST(LIBALLEG)
AC_SUBST(LINK_LIBALLEG)
AC_SUBST(PLUGIN_LIB)
AC_SUBST(COMPILE_PROGRAM)
AC_SUBST(COMPILE_CXX_PROGRAM)
AC_SUBST(COMPILE_S_PROGRAM)
AC_SUBST(PROG_LDFLAGS)
AC_SUBST(LIB_TO_LINK)
AC_SUBST(LINK_WITH_STATIC_LIBS)

dnl Which libraries to build (static, shared, normal, debugging, profiling)?
ALLEGRO_LIB_TARGETS=
if test "X$allegro_static_libraries" = "Xyes"; then
  _libraries=" static"
  if test "X$allegro_build_normal_library" = "Xyes"; then
    ALLEGRO_LIB_TARGETS="$ALLEGRO_LIB_TARGETS lib/unix/liballeg.a"
    _libraries="$_libraries release"
  fi
  if test "X$allegro_build_debugging_library" = "Xyes"; then
    ALLEGRO_LIB_TARGETS="$ALLEGRO_LIB_TARGETS lib/unix/liballd.a"
    _libraries="$_libraries debug"
  fi
  if test "X$allegro_build_profiling_library" = "Xyes"; then
    ALLEGRO_LIB_TARGETS="$ALLEGRO_LIB_TARGETS lib/unix/liballp.a"
    _libraries="$_libraries profile"
  fi
fi
if test "X$allegro_shared_libraries" = "Xyes"; then
  if test -n "$_libraries"; then
    _libraries="$_libraries,"
  fi

  _libraries="$_libraries shared"
  if test "X$allegro_build_normal_library" = "Xyes"; then
    ALLEGRO_LIB_TARGETS="$ALLEGRO_LIB_TARGETS lib/unix/liballeg-\$(shared_version).so lib/unix/liballeg_unsharable.a"
    _libraries="$_libraries release"
  fi
  if test "X$allegro_build_debugging_library" = "Xyes"; then
    ALLEGRO_LIB_TARGETS="$ALLEGRO_LIB_TARGETS lib/unix/liballd-\$(shared_version).so lib/unix/liballd_unsharable.a"
    _libraries="$_libraries debug"
  fi
  if test "X$allegro_build_profiling_library" = "Xyes"; then
    ALLEGRO_LIB_TARGETS="$ALLEGRO_LIB_TARGETS lib/unix/liballp-\$(shared_version).so lib/unix/liballp_unsharable.a"
    _libraries="$_libraries profile"
  fi
fi
AC_SUBST(ALLEGRO_LIB_TARGETS)

dnl Test for debugging with Fortify.
ALLEGRO_ACTEST_DEBUG_WITH_FORTIFY
if test -n "$allegro_debug_with_fortify"; then
  LIBS="$LIBS -lfortify"
fi

dnl Test for debugging with DMalloc.
ALLEGRO_ACTEST_DEBUG_WITH_DMALLOC
if test -n "$allegro_debug_with_dmalloc"; then
  LIBS="$LIBS -ldmalloc"
fi

dnl Test for OSS drivers.
ALLEGRO_ACTEST_OSSDIGI
if test -n "$allegro_support_ossdigi"; then
  AC_DEFINE(ALLEGRO_WITH_OSSDIGI,1,[Define if OSS DIGI driver is supported.])
  _enabled_modules="ossdigi $_enabled_modules"
else
  _disabled_modules="ossdigi $_disabled_modules"
fi

dnl Test for ALSA drivers.
ALLEGRO_ACTEST_ALSADIGI
if test "$allegro_cv_support_alsadigi" = yes; then
  AC_DEFINE(ALLEGRO_WITH_ALSADIGI,1,[Define if ALSA DIGI driver is supported.])
  if test "$allegro_cv_alsa_version" = 9; then
    AC_DEFINE(ALLEGRO_ALSA_VERSION,9,[Define to the installed ALSA version.])
  else
    AC_DEFINE(ALLEGRO_ALSA_VERSION,5,[Define to the installed ALSA version.])
  fi
  _enabled_modules="alsadigi $_enabled_modules"
else
  _disabled_modules="alsadigi $_disabled_modules"
fi

ALLEGRO_ACTEST_ALSAMIDI
if test "$allegro_cv_support_alsamidi" = yes; then
  AC_DEFINE(ALLEGRO_WITH_ALSAMIDI,1,[Define if ALSA MIDI driver is supported.])
  if test "$allegro_cv_alsa_version" = 9; then
    AC_DEFINE(ALLEGRO_ALSA_VERSION,9,[Define to the installed ALSA version.])
  else
    AC_DEFINE(ALLEGRO_ALSA_VERSION,5,[Define to the installed ALSA version.])
  fi
  _enabled_modules="alsamidi $_enabled_modules"
else
  _disabled_modules="alsamidi $_disabled_modules"
fi

dnl Test for ESD drivers.
ALLEGRO_ACTEST_ESDDIGI
if test -n "$allegro_support_esddigi"; then
  AC_DEFINE(ALLEGRO_WITH_ESDDIGI,1,[Define if ESD DIGI driver is supported.])
  _enabled_modules="esddigi $_enabled_modules"
else
  _disabled_modules="esddigi $_disabled_modules"
fi

dnl Test for aRts drivers.
ALLEGRO_ACTEST_ARTSDIGI
if test -n "$allegro_support_artsdigi"; then
  AC_DEFINE(ALLEGRO_WITH_ARTSDIGI,1,[Define if aRts DIGI driver is supported.])
  _enabled_modules="artsdigi $_enabled_modules"
else
  _disabled_modules="artsdigi $_disabled_modules"
fi

dnl Test for SGI AL drivers.
ALLEGRO_ACTEST_SGIALDIGI
if test "$allegro_cv_support_sgialdigi" = yes; then
   AC_DEFINE(ALLEGRO_WITH_SGIALDIGI,1,[Define if SGI AL DIGI driver is supported.])
  _enabled_modules="sgialdigi $_enabled_modules"
else
  _disabled_modules="sgialdigi $_disabled_modules"
fi

dnl Test for OSS MIDI drivers.
ALLEGRO_ACTEST_OSSMIDI
if test -n "$allegro_support_ossmidi"; then
  AC_DEFINE(ALLEGRO_WITH_OSSMIDI,1,[Define if OSS MIDI driver is supported.])
  _enabled_modules="ossmidi $_enabled_modules"
else
  _disabled_modules="ossmidi $_disabled_modules"
fi

dnl Test for System V procfs
ALLEGRO_SV_PROCFS
if test "$allegro_sv_procfs" = yes; then
   AC_DEFINE(ALLEGRO_HAVE_SV_PROCFS,1,
      [Define to 1 if you have a System V sys/procfs.h])
      
   ALLEGRO_PROCFS_ARGCV
   if test "$allegro_procfs_argcv" = yes; then
      AC_DEFINE(ALLEGRO_HAVE_PROCFS_ARGCV,1,
         [Define to 1 if procfs reveals argc and argv])
   fi
fi

dnl Test for Solaris like getexecname().
ALLEGRO_SYS_GETEXECNAME
if test "$allegro_sys_getexecname" = yes; then
   AC_DEFINE(ALLEGRO_HAVE_GETEXECNAME,1,
      [Define to 1 if you have getexecname])
fi


dnl Test for X-Windows support.
ALLEGRO_ACTEST_SUPPORT_XWINDOWS
if test "$allegro_support_xwindows" = yes; then
  ALLEGRO_MAYBE_XWINDOWS_FILES=ALLEGRO_SRC_X_FILES
  ALLEGRO_MAYBE_LIB_X_EXE_SOURCES=ALLEGRO_LIB_X_EXE_SOURCES
  ALLEGRO_MAYBE_LIB_X_EXES=ALLEGRO_LIB_X_EXES
else
  ALLEGRO_MAYBE_XWINDOWS_FILES=ALLEGRO_EMPTY_LIST
  ALLEGRO_MAYBE_LIB_X_EXE_SOURCES=ALLEGRO_EMPTY_LIST
  ALLEGRO_MAYBE_LIB_X_EXES=ALLEGRO_EMPTY_LIST
fi
AC_SUBST(ALLEGRO_MAYBE_XWINDOWS_FILES)
AC_SUBST(ALLEGRO_MAYBE_LIB_X_EXE_SOURCES)
AC_SUBST(ALLEGRO_MAYBE_LIB_X_EXES)
AC_SUBST(ALLEGRO_XWINDOWS_LIBDIR)

dnl Enable Linux console support
AC_ARG_ENABLE(linux,
[  --enable-linux[=x]      enable Linux console support [default=yes]],
test "X$enableval" != "Xno" && allegro_enable_linux=yes,
allegro_enable_linux=yes)

_linux_console="Linux console support:"
if test "X$allegro_enable_linux" != "Xyes"; then
  _linux_console="$_linux_console disabled"
else
  _linux_console="$_linux_console enabled"
fi

dnl Enable Linux console VGA driver
AC_ARG_ENABLE(vga,
[  --enable-vga[=x]        enable VGA graphics driver [default=yes]],
test "X$enableval" != "Xno" && allegro_enable_vga=yes,
allegro_enable_vga=yes)

dnl Enable Linux console fbcon driver
AC_ARG_ENABLE(fbcon,
[  --enable-fbcon[=x]      enable fbcon graphics driver [default=yes]],
test "X$enableval" != "Xno" && allegro_enable_fbcon=yes,
allegro_enable_fbcon=yes)

dnl Enable Linux console VBE/AF driver
AC_ARG_ENABLE(vbeaf,
[  --enable-vbeaf[=x]      enable VBE/AF graphics driver [default=no]],
test "X$enableval" != "Xno" && allegro_enable_vbeaf=yes,
allegro_enable_vbeaf=no)

dnl Enable Linux console SVGAlib driver
AC_ARG_ENABLE(svgalib,
[  --enable-svgalib[=x]    enable SVGAlib graphics driver [default=yes]],
test "X$enableval" != "Xno" && allegro_enable_svgalib=yes,
allegro_enable_svgalib=yes)

dnl Some miscellaneous defines.
ALLEGRO_MAYBE_LINUX_FILES=ALLEGRO_EMPTY_LIST

allegro_system=`uname -s | tr A-Z a-z`
case "$allegro_system" in

*linux*)
  if test "X$allegro_enable_linux" = "Xyes"; then
    AC_DEFINE(ALLEGRO_LINUX,1,[Define if target platform is linux.])
    ALLEGRO_MAYBE_LINUX_FILES=ALLEGRO_SRC_LINUX_FILES

    AC_CHECK_HEADERS(sys/io.h linux/joystick.h linux/input.h)

    if test "X$allegro_cv_processor_type" = "Xi386" -a "X$allegro_enable_vga" = "Xyes"; then
      allegro_support_vga=yes
      AC_DEFINE(ALLEGRO_LINUX_VGA,1,
		[Define to enable Linux console VGA driver.])
      _enabled_modules="vga $_enabled_modules"
    else
      _disabled_modules="vga $_disabled_modules"
    fi

    if test "X$allegro_cv_processor_type" = "Xi386" -a "X$allegro_enable_vbeaf" = "Xyes"; then
      AC_DEFINE(ALLEGRO_LINUX_VBEAF,1,
		[Define to enable Linux console VBE/AF driver.])
      _enabled_modules="vbeaf $_enabled_modules"
    else
      _disabled_modules="vbeaf $_disabled_modules"
    fi

    _do_fbcon="no"
    if test "X$allegro_enable_fbcon" = "Xyes"; then
      ALLEGRO_ACTEST_FBCON
      if test "X$allegro_cv_support_fbcon" = "Xyes"; then
	AC_DEFINE(ALLEGRO_LINUX_FBCON,1,
		    [Define to enable Linux console fbcon driver.])
	_do_fbcon="yes"
      fi
    fi

    if test "$_do_fbcon" = yes; then
      _enabled_modules="fbcon $_enabled_modules"
    else
      _disabled_modules="fbcon $_disabled_modules"
    fi

    _do_svgalib="no"
    if test "X$allegro_enable_svgalib" = "Xyes"; then
      ALLEGRO_ACTEST_SVGALIB
      if test "X$allegro_cv_support_svgalib" = "Xyes"; then
        AC_DEFINE(ALLEGRO_LINUX_SVGALIB,1,
		    [Define to enable Linux console SVGAlib driver.])
	_do_svgalib="yes"
	if test -z "$allegro_support_modules"; then
	  LIBS="-lvga $LIBS"
	fi
	if test "X$allegro_cv_have_vga_version" = "Xyes"; then
	  AC_DEFINE(ALLEGRO_LINUX_SVGALIB_HAVE_VGA_VERSION,1,
		      [Define if SVGAlib driver can check vga_version.])
        fi
      fi
    fi

    if test "$_do_svgalib" = yes; then
      _enabled_modules="svgalib $_enabled_modules"
    else
      _disabled_modules="svgalib $_disabled_modules"
    fi
  fi
  ;;

esac

AC_SUBST(ALLEGRO_MAYBE_LINUX_FILES)

dnl Test for pthreads.
ALLEGRO_ACTEST_PTHREADS
if test "X$allegro_cv_support_pthreads" = "Xyes"; then
  AC_DEFINE(HAVE_LIBPTHREAD,1, [Define if you have the pthread library.])
else
  dnl XXX: sorry, I don't know how to make this fail properly --pw
  echo "ERROR: You don't have pthreads, which is required by Allegro."
  exit 1
fi

dnl Test for JACK driver
ALLEGRO_ACTEST_JACK
if test "X$allegro_cv_support_jackdigi" = "Xyes"; then
  AC_DEFINE(ALLEGRO_WITH_JACKDIGI,1,[Define if JACK DIGI driver is supported.])
  _enabled_modules="jackdigi $_enabled_modules"
else
  _disabled_modules="jackdigi $_disabled_modules"
fi

if test "X$allegro_support_xf86dga2" = "Xyes"; then
  _enabled_modules="dga2 $_enabled_modules"
else
  _disabled_modules="dga2 $_disabled_modules"
fi

dnl Modules.
if test -n "$allegro_support_modules"; then

  dnl VGA/ModeX.
  if test "X$allegro_support_vga" = "Xyes"; then
    ALLEGRO_MODULE_TARGETS="$ALLEGRO_MODULE_TARGETS lib/unix/alleg-vga.so"
  fi

  dnl SVGAlib.
  if test "X$allegro_cv_support_svgalib" = "Xyes"; then
    ALLEGRO_MODULE_TARGETS="$ALLEGRO_MODULE_TARGETS lib/unix/alleg-svgalib.so"
  fi

  dnl fbcon.
  if test "X$allegro_cv_support_fbcon" = "Xyes"; then
    ALLEGRO_MODULE_TARGETS="$ALLEGRO_MODULE_TARGETS lib/unix/alleg-fbcon.so"
  fi

  dnl DGA2.
  if test "X$allegro_support_xf86dga2" = "Xyes"; then
    ALLEGRO_MODULE_TARGETS="$ALLEGRO_MODULE_TARGETS lib/unix/alleg-dga2.so"
  fi

  dnl ALSA DIGI.
  if test "X$allegro_cv_support_alsadigi" = "Xyes"; then
    ALLEGRO_MODULE_TARGETS="$ALLEGRO_MODULE_TARGETS lib/unix/alleg-alsadigi.so"
  fi

  dnl ALSA MIDI.
  if test "X$allegro_cv_support_alsamidi" = "Xyes"; then
    ALLEGRO_MODULE_TARGETS="$ALLEGRO_MODULE_TARGETS lib/unix/alleg-alsamidi.so"
  fi

  dnl ESD DIGI.
  if test "X$allegro_support_esddigi" = "Xyes"; then
    ALLEGRO_MODULE_TARGETS="$ALLEGRO_MODULE_TARGETS lib/unix/alleg-esddigi.so"
  fi

  dnl aRts DIGI.
  if test "X$allegro_support_artsdigi" = "Xyes"; then
    ALLEGRO_MODULE_TARGETS="$ALLEGRO_MODULE_TARGETS lib/unix/alleg-artsdigi.so"
  fi

  dnl SGI AL DIGI.
  if test "X$allegro_cv_support_sgialdigi" = "Xyes"; then
    ALLEGRO_MODULE_TARGETS="$ALLEGRO_MODULE_TARGETS lib/unix/alleg-sgialdigi.so"
  fi

  dnl JACK DIGI.
  if test "X$allegro_cv_support_jackdigi" = "Xyes"; then
    ALLEGRO_MODULE_TARGETS="$ALLEGRO_MODULE_TARGETS lib/unix/alleg-jackdigi.so"
  fi
fi
AC_SUBST(ALLEGRO_MODULE_TARGETS)

dnl Additional libraries.
LIBS="-lm $LIBS"

case "$allegro_system" in

*darwin*)
  AC_DEFINE(ALLEGRO_DARWIN,1,[Define if target platform is Darwin.])
  LIBS="-lcc_dynamic $LIBS"
  AR="\$(LD) -r -keep_private_externs -o"
  ;;

*)
  AR="ar rvs"
  ;;

esac

AC_SUBST(LIBS)
AC_SUBST(AR)

dnl Headers, features, functions and macros.
AC_HEADER_STDC
AC_HEADER_DIRENT
AC_HEADER_TIME
AC_HEADER_STDBOOL
AC_CHECK_HEADERS(fcntl.h limits.h sys/time.h unistd.h sys/utsname.h)

AC_C_CONST
AC_C_INLINE
AC_TYPE_SIZE_T
AC_STRUCT_TM
AC_TYPE_SIGNAL

AC_CHECK_FUNCS(mmap mprotect memcmp mkstemp stricmp strlwr strupr vprintf stat64)

dnl Tweak header files for library build
CFLAGS="$CFLAGS -DALLEGRO_LIB_BUILD"

dnl How to compile C and asm files.
if test -n "$GCC"; then
  if test "X$allegro_strict_warnings" = "Xyes"; then
    WFLAGS="-Wall -W -Wstrict-prototypes -Wno-unused-parameter -Werror"
  else
    WFLAGS="-Wall -Wno-unused"
  fi
  if test "X$allegro_cv_processor_type" = "Xi386"; then
    if test "$allegro_exclusive_optimizations" != none; then
      TARGET_ARCH="-march=$allegro_exclusive_optimizations"
    elif test "X$allegro_cv_support_i386_mtune" = "Xyes"; then
      TARGET_ARCH="-mtune=$allegro_optimizations"
    else
      TARGET_ARCH="-mcpu=$allegro_optimizations"
    fi
  elif test "X$allegro_cv_processor_type" = "Xamd64"; then
    dnl Change default pentium->athlon64
    if test "X$allegro_optimizations" = "Xpentium"; then
      allegro_optimizations="k8"
    fi
    if test "$allegro_exclusive_optimizations" != none; then
      TARGET_ARCH="-march=$allegro_exclusive_optimizations"
    elif test "X$allegro_cv_support_amd64_mtune" = "Xyes"; then
      TARGET_ARCH="-mtune=$allegro_optimizations"
    else
      TARGET_ARCH="-mcpu=$allegro_optimizations"
    fi
  else
    TARGET_ARCH=
  fi
  dnl Allow to specify additional flags.
  CFLAGS="$CFLAGS $XCFLAGS"
  WFLAGS="$WFLAGS $WCFLAGS"
  dnl In this order...
  ALLEGRO_DEBUG_CFLAGS="$CFLAGS -g $WFLAGS -DDEBUGMODE"
  if test "X$allegro_debug_with_fortify" = "Xyes"; then
     ALLEGRO_DEBUG_CFLAGS="$ALLEGRO_DEBUG_CFLAGS -DFORTIFY"
  fi
  if test "X$allegro_debug_with_dmalloc" = "Xyes"; then
     ALLEGRO_DEBUG_CFLAGS="$ALLEGRO_DEBUG_CFLAGS -DDMALLOC"
  fi
  ALLEGRO_PROFILE_CFLAGS="$CFLAGS -pg $TARGET_ARCH -O2 -funroll-loops -ffast-math $WFLAGS"
  if test "X$allegro_cv_support_fomit_frame_pointer" = "Xyes"; then
    CFLAGS="$CFLAGS $TARGET_ARCH -O2 -funroll-loops -ffast-math -fomit-frame-pointer $WFLAGS"
  else
    CFLAGS="$CFLAGS $TARGET_ARCH -O2 -funroll-loops -ffast-math $WFLAGS"
  fi
  ALLEGRO_SFLAGS="-x assembler-with-cpp"
  ALLEGRO_SHAREDLIB_CFLAGS="-fPIC -DALLEGRO_SHARED"
else
  ALLEGRO_DEBUG_CFLAGS="$CFLAGS"
  ALLEGRO_PROFILE_CFLAGS="$CFLAGS"
  ALLEGRO_SFLAGS=
  ALLEGRO_SHAREDLIB_CFLAGS=
fi

AC_SUBST(CFLAGS)
AC_SUBST(ALLEGRO_DEBUG_CFLAGS)
AC_SUBST(ALLEGRO_PROFILE_CFLAGS)
AC_SUBST(ALLEGRO_SFLAGS)
AC_SUBST(ALLEGRO_SHAREDLIB_CFLAGS)

dnl How to compile C++ files.
if test "X$allegro_cv_support_cplusplus" = "Xyes"; then
  CXX="$CC"
  CXXFLAGS="-fno-exceptions $CFLAGS"
  ALLEGRO_DEBUG_CXXFLAGS="-fno-exceptions $ALLEGRO_DEBUG_CFLAGS"
  ALLEGRO_PROFILE_CXXFLAGS="-fno-exceptions $ALLEGRO_PROFILE_CFLAGS"
else
  CXX=
  CXXFLAGS=
  ALLEGRO_DEBUG_CXXFLAGS=
  ALLEGRO_PROFILE_CXXFLAGS=
fi

AC_SUBST(CXX)
AC_SUBST(CXXFLAGS)
AC_SUBST(ALLEGRO_DEBUG_CXXFLAGS)
AC_SUBST(ALLEGRO_PROFILE_CXXFLAGS)

cat > makefile.info << EOF
 $_modules
 Enabled modules: $_enabled_modules
 Disabled modules: $_disabled_modules
 Generated code: $_code_features
 Generated libraries:$_libraries
 Compiled programs: $_programs
 $_warnmode
 $_x11
 $_linux_console

EOF

dnl Warn if neither X11 nor Linux console support is going to be built,
dnl or just if X11 support is not going to be built.
if test "X$allegro_support_xwindows" != "Xyes"; then
  if test "X$allegro_enable_linux" != "Xyes"; then
    cat >> makefile.info << EOF
 Warning: the library will not be built with either X11 or Linux console
          support.  This configuration is useless for most purposes.

EOF
  else
    cat >> makefile.info << EOF
 Warning: the library will not be built with X11 support.
          If you were expecting X11 support then you may need to install
          the appropriate development packages from your distribution.
          Otherwise, ignore this warning (it's just that a lot of new
          users trip up on this).

EOF
  fi
fi

dnl Warn if passed --enable-dbg-with-fortify
if test -n "$allegro_debug_with_fortify"; then
  if test -z "$allegro_build_debugging_library"; then
    cat >> makefile.info << EOF
 Warning: the library will not be built with Fortify support.
          The support is only enabled with the debug version.

EOF
  fi 
  if test -z "$allegro_build_debugging_programs"; then
    cat >> makefile.info << EOF
 Warning: the programs will not be built with Fortify support.
          The support is only enabled with the debug version.

EOF
  fi 
fi

dnl Warn if passed --enable-dbg-with-dmalloc
if test -n "$allegro_debug_with_dmalloc"; then
  if test -z "$allegro_build_debugging_library"; then
    cat >> makefile.info << EOF
 Warning: the library will not be built with DMalloc support.
          The support is only enabled with the debug version.

EOF
  fi 
  if test -z "$allegro_build_debugging_programs"; then
    cat >> makefile.info << EOF
 Warning: the programs will not be built with DMalloc support.
          The support is only enabled with the debug version.

EOF
  fi 
fi

dnl Prepare initial dependencies file (if missing).
if test -f "$srcdir/makefile.dep"; then
  if test `cd "$srcdir" ; pwd` != `cd . ; pwd`; then
    cp "$srcdir/makefile.dep" makefile.dep
    dnl Wait for a moment, to ensure the makefile gets a nice late
    dnl timestamp, otherwise `makefile.dep' looks too new.
    echo 'Having a snooze...'
    sleep 1
  fi
elif test ! -f makefile.dep; then
  allegro_make_depend="yes"
fi

dnl Cosmetics for allegro-config
FRAMEWORKS=
AC_SUBST(FRAMEWORKS)

dnl Prepare makefile and allegro-config.
AC_OUTPUT(makefile:makefile.in allegro-config:misc/allegro-config.in,
  [test -z "$CONFIG_HEADERS" || echo timestamp > stamp-h])

dnl The makefile doesn't work with non-GNU make so test for its presence.
if ${MAKE-make} -v -f /dev/null 2>/dev/null | grep -i "gnu" >/dev/null; then
  gnu_make="yes"
fi

dnl Run "make depend" if necessary.
if test "X$allegro_make_depend" = "Xyes"; then
  if test "X$gnu_make" = "Xyes"; then
    ${MAKE-make} depend
  else
    AC_MSG_WARN([Non-GNU make detected, trying gmake to build dependencies.])
    gmake depend
  fi
fi

dnl Display configuration informations
if test "X$gnu_make" = "Xyes"; then
  ${MAKE-make} info
else
  gmake info
fi

if test "X$gnu_make" != "Xyes"; then
  AC_MSG_WARN([You need to use GNU make to build Allegro.])
  AC_MSG_WARN([This might be called gmake on your system.])
fi
