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

dnl Copyright (C) 2005, 2007, 2008, 2009, 2010 Free Software Foundation, Inc.
dnl Contributed by Red Hat, Inc.
dnl 
dnl This file is part of the GNU simulators.
dnl 
dnl This program is free software; you can redistribute it and/or modify
dnl it under the terms of the GNU General Public License as published by
dnl the Free Software Foundation; either version 3 of the License, or
dnl (at your option) any later version.
dnl
dnl This program is distributed in the hope that it will be useful,
dnl but WITHOUT ANY WARRANTY; without even the implied warranty of
dnl MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
dnl GNU General Public License for more details.
dnl
dnl You should have received a copy of the GNU General Public License
dnl along with this program.  If not, see <http://www.gnu.org/licenses/>.
dnl
AC_PREREQ(2.5)dnl
AC_INIT(Makefile.in)
AC_CONFIG_HEADER(config.h:config.in)
AC_CHECK_HEADERS(getopt.h)

sinclude(../common/aclocal.m4)

AC_ARG_ENABLE(cycle-accurate,
[  --disable-cycle-accurate ],
[case "${enableval}" in
yes | no) ;;
*)	AC_MSG_ERROR(bad value ${enableval} given for --enable-cycle-accurate option) ;;
esac])

AC_ARG_ENABLE(cycle-stats,
[  --disable-cycle-stats ],
[case "${enableval}" in
yes | no) ;;
*)	AC_MSG_ERROR(bad value ${enableval} given for --enable-cycle-stats option) ;;
esac])

echo enable_cycle_accurate is $enable_cycle_accurate
echo enable_cycle_stats is $enable_cycle_stats

if test "x${enable_cycle_accurate}" != xno; then
AC_DEFINE([CYCLE_ACCURATE])

  if test "x${enable_cycle_stats}" != xno; then
  AC_DEFINE([CYCLE_STATS])
  fi
else
  if test "x${enable_cycle_stats}" != xno; then
  AC_ERROR([cycle-stats not available without cycle-accurate])
  fi
fi


# Bugs in autoconf 2.59 break the call to SIM_AC_COMMON, hack around
# it by inlining the macro's contents.
sinclude(../common/common.m4)

SIM_AC_OUTPUT
