#
# autoconf input for Objective Caml programs
# Copyright (C) 2001 Jean-Christophe Filliātre
#   from a first script by Georges Mariano 
#
#   modified 10/26/03 by Paul Pelzl, for inclusion with Orpie
#     (added ocaml-gsl detection, removed unnecessary checks)
#   modified 03/28/05 by Paul Pelzl, for inclusion with Wyrd
#     (removed unnecessary gsl detection)
# 
# This library is free software; you can redistribute it and/or
# modify it under the terms of the GNU Library General Public
# License version 2, as published by the Free Software Foundation.
# 
# This library is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
# 
# See the GNU Library General Public License version 2 for more details
# (enclosed in the file LGPL).

# the script generated by autoconf from this input will set the following
# variables:
#   OCAMLC        "ocamlc" if present in the path, or a failure
#                 or "ocamlc.opt" if present with same version number as ocamlc
#   OCAMLOPT      "ocamlopt" (or "ocamlopt.opt" if present), or "no"
#   OCAMLBEST     either "byte" if no native compiler was found, 
#                 or "opt" otherwise
#   OCAMLDEP      "ocamldep"
#   OCAMLLIB      the path to the ocaml standard library
#   OCAMLVERSION  the ocaml version number
#   OCAMLWIN32    "yes"/"no" depending on Sys.os_type = "Win32"
#   EXE           ".exe" if OCAMLWIN32=yes, "" otherwise

# check for one particular file of the sources 
# ADAPT THE FOLLOWING LINE TO YOUR SOURCES!
AC_INIT(install.ml.in)

# optional arguments

AC_ARG_ENABLE(utf8,
[  --enable-utf8           enable UTF-8 output (requires ncurses wide char support)],
[try_utf8=$enable_utf8], [try_utf8=no])


# Check for Ocaml compilers

# we first look for ocamlc in the path; if not present, we fail
AC_CHECK_PROG(OCAMLC,ocamlc,ocamlc,no)
if test "$OCAMLC" = no ; then
	AC_MSG_ERROR(Cannot find ocamlc.)
fi

# we extract Ocaml version number and library path
OCAMLVERSION=`$OCAMLC -v | sed -n -e 's|.*version *\(.*\)$|\1|p' `
echo "ocaml version is $OCAMLVERSION"
OCAMLLIB=`$OCAMLC -v | tail -n 1 | cut -f 4 -d " "`
echo "ocaml library path is $OCAMLLIB"


# check for sufficient OCAMLVERSION
OCAMLMAJORVERSION=`echo $OCAMLVERSION | cut -d '.' -f 1`
OCAMLMINORVERSION=`echo $OCAMLVERSION | cut -d '.' -f 2`
if test $OCAMLMAJORVERSION -lt 3 ; then
   AC_MSG_ERROR(Wyrd requires OCaml version 3.08 or greater.)
elif test $OCAMLMAJORVERSION -eq 3; then
   if test $OCAMLMINORVERSION -lt 8 ; then
      AC_MSG_ERROR(Wyrd requires OCaml version 3.08 or greater.)
   fi
fi


# then we look for ocamlopt; if not present, we issue a warning
# if the version is not the same, we also discard it
# we set OCAMLBEST to "opt" or "byte", whether ocamlopt is available or not
AC_CHECK_PROG(OCAMLOPT,ocamlopt,ocamlopt,no)
OCAMLBEST=byte
if test "$OCAMLOPT" = no ; then
	AC_MSG_WARN(Cannot find ocamlopt; bytecode compilation only.)
else
	AC_MSG_CHECKING(ocamlopt version)
	TMPVERSION=`$OCAMLOPT -v | sed -n -e 's|.*version *\(.*\)$|\1|p' `
	if test "$TMPVERSION" != "$OCAMLVERSION" ; then
	    AC_MSG_RESULT(differs from ocamlc; ocamlopt discarded.)
	    OCAMLOPT=no
	else
	    AC_MSG_RESULT(ok)
	    OCAMLBEST=opt
	fi
fi

# checking for ocamlc.opt
AC_CHECK_PROG(OCAMLCDOTOPT,ocamlc.opt,ocamlc.opt,no)
if test "$OCAMLCDOTOPT" != no ; then
	AC_MSG_CHECKING(ocamlc.opt version)
	TMPVERSION=`$OCAMLCDOTOPT -v | sed -n -e 's|.*version *\(.*\)$|\1|p' `
	if test "$TMPVERSION" != "$OCAMLVERSION" ; then
	    AC_MSG_RESULT(differs from ocamlc; ocamlc.opt discarded.)
	else
	    AC_MSG_RESULT(ok)
	    OCAMLC=$OCAMLCDOTOPT
	fi
fi

# checking for ocamlopt.opt
if test "$OCAMLOPT" != no ; then
    AC_CHECK_PROG(OCAMLOPTDOTOPT,ocamlopt.opt,ocamlopt.opt,no)
    if test "$OCAMLOPTDOTOPT" != no ; then
	AC_MSG_CHECKING(ocamlc.opt version)
	TMPVER=`$OCAMLOPTDOTOPT -v | sed -n -e 's|.*version *\(.*\)$|\1|p' `
	if test "$TMPVER" != "$OCAMLVERSION" ; then
	    AC_MSG_RESULT(differs from ocamlc; ocamlopt.opt discarded.)
	else
	    AC_MSG_RESULT(ok)
	    OCAMLOPT=$OCAMLOPTDOTOPT
	fi
    fi
fi

# ocamldep should also be present in the path
AC_CHECK_PROG(OCAMLDEP,ocamldep,ocamldep,no)
if test "$OCAMLDEP" = no ; then
	AC_MSG_ERROR(Cannot find ocamldep.)
fi

AC_CHECK_PROG(OCAMLLEX,ocamllex,ocamllex,no)
if test "$OCAMLLEX" = no ; then
    AC_MSG_ERROR(Cannot find ocamllex.)
else
    AC_CHECK_PROG(OCAMLLEXDOTOPT,ocamllex.opt,ocamllex.opt,no)
    if test "$OCAMLLEXDOTOPT" != no ; then
   OCAMLLEX=$OCAMLLEXDOTOPT
    fi
fi

AC_CHECK_PROG(OCAMLYACC,ocamlyacc,ocamlyacc,no)
if test "$OCAMLYACC" = no ; then
   AC_MSG_ERROR(Cannot find ocamlyacc.)
fi


# platform
AC_MSG_CHECKING(platform)
if echo "let _ = Sys.os_type" | ocaml | grep -q Win32; then
    AC_MSG_RESULT(Win32)
    OCAMLWIN32=yes
    EXE=.exe
else
    AC_MSG_RESULT(not Win32)
    OCAMLWIN32=no
    EXE=
fi


# find a C compiler
AC_PROG_CC()

# check Remind version
AC_PATH_PROG(REMINDPATH, remind, not found)
if test x"$REMINDPATH" != x"not found"; then
   AC_MSG_CHECKING(remind version)
   REMINDVERSION=`strings $REMINDPATH | grep 03\.0`
   AC_MSG_RESULT($REMINDVERSION)
   REMMAJORVERSION=`echo $REMINDVERSION | cut -d '.' -f 1`
   REMMINORVERSION=`echo $REMINDVERSION | cut -d '.' -f 2`
   REMFIXVERSION=`echo $REMINDVERSION | cut -d '.' -f 3`
   if test $REMMAJORVERSION -lt 3 ; then
      AC_MSG_WARN(Wyrd requires Remind version 03.01.00 or greater.)
   else
      if test $REMMINORVERSION -lt 1 ; then
         AC_MSG_WARN(Wyrd requires Remind version 03.01.00 or greater.)
      fi
   fi
else
   AC_MSG_WARN(Wyrd requires Remind version 03.00.24 or greater.)
fi

# recursively configure curses
if test x"$try_utf8" = x"yes"; then
   ac_configure_args="$ac_configure_args --enable-widec"
fi
AC_CONFIG_SUBDIRS([curses])

AC_PROG_INSTALL()

# substitutions to perform
AC_SUBST(OCAMLC)
AC_SUBST(OCAMLOPT)
AC_SUBST(OCAMLDEP)
AC_SUBST(OCAMLLEX)
AC_SUBST(OCAMLYACC)
AC_SUBST(OCAMLBEST)
AC_SUBST(OCAMLVERSION)
AC_SUBST(OCAMLLIB)
AC_SUBST(OCAMLWIN32)
AC_SUBST(EXE)
AC_SUBST(DEFS)
AC_SUBST(CC)
AC_SUBST(CFLAGS)
AC_SUBST(CPPFLAGS)
AC_SUBST(LDFLAGS)
AC_SUBST(INSTALL)

# Finally create the Makefile from Makefile.in
AC_OUTPUT(Makefile install.ml)
chmod a-w Makefile


