AC_INIT([isl], [0.15], [isl-development@googlegroups.com])
AC_CONFIG_AUX_DIR([.])
AC_CONFIG_MACRO_DIR([m4])
AM_INIT_AUTOMAKE([foreign])
m4_ifdef([AM_SILENT_RULES],[AM_SILENT_RULES([yes])])
AC_SUBST(versioninfo)
versioninfo=15:0:0

if test "x$prefix" != "xNONE"; then
	prefix_wd=`cd $prefix && pwd`
	srcdir_wd=`cd $srcdir && pwd`
	wd=`pwd`
	if test "x$prefix_wd" = "x$srcdir_wd"; then
		AC_MSG_ERROR(Installation in source directory not supported)
	fi
	if test "x$prefix_wd" = "x$wd"; then
		AC_MSG_ERROR(Installation in build directory not supported)
	fi
fi

AC_PROG_CC
AC_PROG_CXX

AX_CC_MAXOPT
AX_GCC_WARN_UNUSED_RESULT
AX_C___ATTRIBUTE__

AC_PROG_LIBTOOL

AC_CHECK_PROG(PERL, perl, perl, [])
AC_CHECK_PROG(PDFLATEX, pdflatex, pdflatex, [])
AC_CHECK_PROG(POD2HTML, pod2html, pod2html, [])

AM_CONDITIONAL(GENERATE_DOC, test -n "$PERL" -a -n "$PDFLATEX" -a -n "$POD2HTML")

AX_CREATE_STDINT_H(include/isl/stdint.h)

AC_ARG_WITH([int],
	    [AS_HELP_STRING([--with-int=gmp|imath|imath-32],
			    [Which package to use to represent
				multi-precision integers [default=gmp]])],
	    [], [with_int=gmp])
case "$with_int" in
gmp|imath|imath-32)
	;;
*)
	AC_MSG_ERROR(
	    [bad value ${withval} for --with-int (use gmp, imath or imath-32)])
esac

AC_SUBST(MP_CPPFLAGS)
AC_SUBST(MP_LDFLAGS)
AC_SUBST(MP_LIBS)
case "$with_int" in
gmp)
	AX_DETECT_GMP
	;;
imath|imath-32)
	AX_DETECT_IMATH
	;;
esac
if test "x$with_int" = "ximath-32" -a "x$GCC" = "xyes"; then
	MP_CPPFLAGS="-std=gnu99 $MP_CPPFLAGS"
fi

AM_CONDITIONAL(IMATH_FOR_MP, test x$with_int = ximath -o x$with_int = ximath-32)
AM_CONDITIONAL(GMP_FOR_MP, test x$with_int = xgmp)

AM_CONDITIONAL(SMALL_INT_OPT, test "x$with_int" == "ximath-32")
AS_IF([test "x$with_int" == "ximath-32"], [
	AC_DEFINE([USE_SMALL_INT_OPT], [], [Use small integer optimization])
])

AC_CHECK_DECLS(ffs,[],[],[#include <strings.h>])
AC_CHECK_DECLS(__builtin_ffs,[],[],[])
AC_CHECK_DECLS([_BitScanForward],[],[],[#include <intrin.h>])
if test "x$ac_cv_have_decl_ffs" = xno -a \
		"x$ac_cv_have_decl___builtin_ffs" = xno -a \
		"x$ac_cv_have_decl__BitScanForward" = xno; then
	AC_MSG_ERROR([No ffs implementation found])
fi
AC_CHECK_DECLS([strcasecmp,strncasecmp],[],[],[#include <strings.h>])
AC_CHECK_DECLS([_stricmp,_strnicmp],[],[],[#include <string.h>])
if test "x$ac_cv_have_decl_strcasecmp" = xno -a \
		"x$ac_cv_have_decl__stricmp" = xno; then
	AC_MSG_ERROR([No strcasecmp implementation found])
fi
if test "x$ac_cv_have_decl_strncasecmp" = xno -a \
		"x$ac_cv_have_decl__strnicmp" = xno; then
	AC_MSG_ERROR([No strncasecmp implementation found])
fi
AC_CHECK_DECLS([snprintf,_snprintf],[],[],[#include <stdio.h>])
if test "x$ac_cv_have_decl_snprintf" = xno -a \
		"x$ac_cv_have_decl__snprintf" = xno; then
	AC_MSG_ERROR([No snprintf implementation found])
fi

AC_SUBST(CLANG_CXXFLAGS)
AC_SUBST(CLANG_LDFLAGS)
AC_SUBST(CLANG_LIBS)
AX_SUBMODULE(clang,system|no,no)
case "$with_clang" in
system)
	AC_PROG_GREP
	llvm_config="llvm-config"
	AC_CHECK_PROG([llvm_config_found], ["$llvm_config"], [yes])
	if test "x$with_clang_prefix" != "x"; then
		llvm_config="$with_clang_prefix/bin/llvm-config"
		if test -x "$llvm_config"; then
			llvm_config_found=yes
		fi
	fi
	if test "$llvm_config_found" != yes; then
		AC_MSG_ERROR([llvm-config not found])
	fi
	CLANG_CXXFLAGS=`$llvm_config --cxxflags`
	CLANG_LDFLAGS=`$llvm_config --ldflags`
	targets=`$llvm_config --targets-built`
	components="$targets asmparser bitreader support mc"
	$llvm_config --components | $GREP option > /dev/null 2> /dev/null
	if test $? -eq 0; then
		components="$components option"
	fi
	CLANG_LIBS=`$llvm_config --libs $components`
	systemlibs=`$llvm_config --system-libs 2> /dev/null | tail -1`
	if test $? -eq 0; then
		CLANG_LIBS="$CLANG_LIBS $systemlibs"
	fi
	CLANG_PREFIX=`$llvm_config --prefix`
	AC_DEFINE_UNQUOTED(CLANG_PREFIX, ["$CLANG_PREFIX"],
				[Clang installation prefix])

	SAVE_CPPFLAGS="$CPPFLAGS"
	CPPFLAGS="$CLANG_CXXFLAGS $CPPFLAGS"
	AC_LANG_PUSH(C++)
	AC_CHECK_HEADER([clang/Basic/SourceLocation.h], [],
		[AC_ERROR([clang header file not found])])
	AC_EGREP_HEADER([getDefaultTargetTriple], [llvm/Support/Host.h], [],
		[AC_DEFINE([getDefaultTargetTriple], [getHostTriple],
		[Define to getHostTriple for older versions of clang])])
	AC_EGREP_HEADER([getExpansionLineNumber],
		[clang/Basic/SourceLocation.h], [],
		[AC_DEFINE([getExpansionLineNumber],
			[getInstantiationLineNumber],
	    [Define to getInstantiationLineNumber for older versions of clang])])
	AC_EGREP_HEADER([DiagnosticsEngine],
		[clang/Basic/Diagnostic.h], [],
		[AC_DEFINE([DiagnosticsEngine],
			[Diagnostic],
	    [Define to Diagnostic for older versions of clang])])
	AC_EGREP_HEADER([ArrayRef], [clang/Driver/Driver.h],
		[AC_DEFINE([USE_ARRAYREF], [],
			[Define if Driver::BuildCompilation takes ArrayRef])])
	AC_EGREP_HEADER([CXXIsProduction], [clang/Driver/Driver.h],
		[AC_DEFINE([HAVE_CXXISPRODUCTION], [],
		[Define if Driver constructor takes CXXIsProduction argument])])
	AC_EGREP_HEADER([ IsProduction], [clang/Driver/Driver.h],
		[AC_DEFINE([HAVE_ISPRODUCTION], [],
		[Define if Driver constructor takes IsProduction argument])])
	AC_TRY_COMPILE([#include <clang/Driver/Driver.h>], [
		using namespace clang;
		DiagnosticsEngine *Diags;
		new driver::Driver("", "", "", *Diags);
	], [AC_DEFINE([DRIVER_CTOR_TAKES_DEFAULTIMAGENAME], [],
		      [Define if Driver constructor takes default image name])])
	AC_EGREP_HEADER([void HandleTopLevelDecl\(], [clang/AST/ASTConsumer.h],
		[AC_DEFINE([HandleTopLevelDeclReturn], [void],
			   [Return type of HandleTopLevelDeclReturn])
		 AC_DEFINE([HandleTopLevelDeclContinue], [],
			   [Return type of HandleTopLevelDeclReturn])],
		[AC_DEFINE([HandleTopLevelDeclReturn], [bool],
			   [Return type of HandleTopLevelDeclReturn])
		 AC_DEFINE([HandleTopLevelDeclContinue], [true],
			   [Return type of HandleTopLevelDeclReturn])])
	AC_CHECK_HEADER([clang/Basic/DiagnosticOptions.h],
		[AC_DEFINE([HAVE_BASIC_DIAGNOSTICOPTIONS_H], [],
			   [Define if clang/Basic/DiagnosticOptions.h exists])])
	AC_TRY_COMPILE([#include <clang/Basic/TargetInfo.h>], [
		using namespace clang;
		std::shared_ptr<TargetOptions> TO;
		DiagnosticsEngine *Diags;
		TargetInfo::CreateTargetInfo(*Diags, TO);
	], [AC_DEFINE([CREATETARGETINFO_TAKES_SHARED_PTR], [],
		    [Define if TargetInfo::CreateTargetInfo takes shared_ptr])])
	AC_TRY_COMPILE([#include <clang/Basic/TargetInfo.h>], [
		using namespace clang;
		TargetOptions *TO;
		DiagnosticsEngine *Diags;
		TargetInfo::CreateTargetInfo(*Diags, TO);
	], [AC_DEFINE([CREATETARGETINFO_TAKES_POINTER], [],
		      [Define if TargetInfo::CreateTargetInfo takes pointer])])
	AC_TRY_COMPILE([#include <clang/Frontend/CompilerInstance.h>], [
		using namespace clang;
		DiagnosticConsumer *client;
		CompilerInstance *Clang;
		Clang->createDiagnostics(client);
	], [], [AC_DEFINE([CREATEDIAGNOSTICS_TAKES_ARG], [],
	[Define if CompilerInstance::createDiagnostics takes argc and argv])])
	AC_TRY_COMPILE([#include <clang/Lex/HeaderSearchOptions.h>], [
		using namespace clang;
		HeaderSearchOptions HSO;
		HSO.AddPath("", frontend::Angled, false, false);
	], [AC_DEFINE([ADDPATH_TAKES_4_ARGUMENTS], [],
		[Define if HeaderSearchOptions::AddPath takes 4 arguments])])
	AC_EGREP_HEADER([getNumParams],
		[clang/AST/CanonicalType.h],
		[AC_DEFINE([getNumArgs], [getNumParams],
		    [Define to getNumParams for newer versions of clang])
		 AC_DEFINE([getArgType], [getParamType],
		    [Define to getParamType for newer versions of clang])])
	AC_EGREP_HEADER([getReturnType],
		[clang/AST/CanonicalType.h], [],
		[AC_DEFINE([getReturnType], [getResultType],
		    [Define to getResultType for older versions of clang])])
	AC_TRY_COMPILE([#include <clang/Frontend/CompilerInstance.h>], [
		using namespace clang;
		CompilerInstance *Clang;
		Clang->createPreprocessor(TU_Complete);
	], [AC_DEFINE([CREATEPREPROCESSOR_TAKES_TUKIND], [],
	[Define if CompilerInstance::createPreprocessor takes
	 TranslationUnitKind])])
	AC_EGREP_HEADER([setMainFileID], [clang/Basic/SourceManager.h],
		[AC_DEFINE([HAVE_SETMAINFILEID], [],
		[Define if SourceManager has a setMainFileID method])])
	AC_CHECK_HEADER([llvm/ADT/OwningPtr.h],
		[AC_DEFINE([HAVE_ADT_OWNINGPTR_H], [],
			   [Define if llvm/ADT/OwningPtr.h exists])])
	AC_LANG_POP
	CPPFLAGS="$SAVE_CPPFLAGS"

	SAVE_LDFLAGS="$LDFLAGS"
	LDFLAGS="$CLANG_LDFLAGS $LDFLAGS"
	AC_SUBST(LIB_CLANG_EDIT)
	AC_CHECK_LIB([clangEdit], [main], [LIB_CLANG_EDIT=-lclangEdit], [])
	LDFLAGS="$SAVE_LDFLAGS"
	;;
esac
AM_CONDITIONAL(HAVE_CLANG, test $with_clang = system)

AX_SET_WARNING_FLAGS

AC_SUBST(WARNING_FLAGS)

PACKAGE_CFLAGS="$MP_CPPFLAGS"
PACKAGE_LDFLAGS="$MP_LDFLAGS"
PACKAGE_LIBS="-lisl $MP_LIBS"
AX_CREATE_PKGCONFIG_INFO

AX_DETECT_GIT_HEAD
echo '#define GIT_HEAD_ID "'$GIT_HEAD_ID'"' > gitversion.h

AH_BOTTOM([#include <isl_config_post.h>])
AC_CONFIG_HEADERS(isl_config.h)
AC_CONFIG_FILES(Makefile)
AC_CONFIG_FILES(doc/Makefile)
if test $with_clang = system; then
	AC_CONFIG_FILES(interface/Makefile)
fi
AC_CONFIG_FILES([bound_test.sh], [chmod +x bound_test.sh])
AC_CONFIG_FILES([codegen_test.sh], [chmod +x codegen_test.sh])
AC_CONFIG_FILES([pip_test.sh], [chmod +x pip_test.sh])
AC_CONFIG_COMMANDS_POST([
	dnl pass on arguments to subdir configures, but don't
	dnl add them to config.status
	ac_configure_args="$ac_configure_args $isl_configure_args"
])
AC_OUTPUT
