+undefine([AC_CV_NAME_supported])dnl
+])
+
+
+# FP_CHECK_FUNC(FUNCTION, PROLOGUE, BODY, [ACTION-IF-FOUND], [ACTION-IF-NOT-FOUND])
+# ---------------------------------------------------------------------------------
+# A variant of AC_CHECK_FUNCS, limited to a single FUNCTION, but with the
+# additional flexibility of specifying the PROLOGUE and BODY.
+AC_DEFUN([FP_CHECK_FUNC],
+[AS_VAR_PUSHDEF([fp_func], [fp_cv_func_$1])dnl
+AC_CACHE_CHECK([for $1], fp_func,
+[AC_LINK_IFELSE([AC_LANG_PROGRAM([$2], [$3])],
+ [AS_VAR_SET(fp_func, yes)],
+ [AS_VAR_SET(fp_func, no)])])
+AS_IF([test AS_VAR_GET(fp_func) = yes],
+ [AC_DEFINE(AS_TR_CPP(HAVE_$1), [1],
+ [Define to 1 if you have the `]$1[' function.]) $4],
+ [$5])dnl
+AS_VAR_POPDEF([fp_func])dnl
+])# FP_CHECK_FUNC
+
+
+# FP_GEN_DOCBOOK_XML
+# ------------------
+# Generates a DocBook XML V4.2 document in conftest.xml.
+AC_DEFUN([FP_GEN_DOCBOOK_XML],
+[rm -f conftest.xml
+cat > conftest.xml << EOF
+<?xml version="1.0" encoding="iso-8859-1"?>
+<!DOCTYPE book PUBLIC "-//OASIS//DTD DocBook XML V4.2//EN"
+ "http://www.oasis-open.org/docbook/xml/4.2/docbookx.dtd">
+<book id="test">
+ <title>A DocBook Test Document</title>
+ <chapter id="id-one">
+ <title>A Chapter Title</title>
+ <para>This is a paragraph, referencing <xref linkend="id-two"/>.</para>
+ </chapter>
+ <chapter id="id-two">
+ <title>Another Chapter Title</title>
+ <para>This is another paragraph, referencing <xref linkend="id-one"/>.</para>
+ </chapter>
+</book>
+EOF
+]) # FP_GEN_DOCBOOK_XML
+
+
+# FP_PROG_XSLTPROC
+# ----------------
+# Sets the output variable XsltprocCmd to the full path of the XSLT processor
+# xsltproc. XsltprocCmd is empty if xsltproc could not be found.
+AC_DEFUN([FP_PROG_XSLTPROC],
+[AC_PATH_PROG([XsltprocCmd], [xsltproc])
+if test -z "$XsltprocCmd"; then
+ AC_MSG_WARN([cannot find xsltproc in your PATH, you will not be able to build the documentation])
+fi
+])# FP_PROG_XSLTPROC
+
+
+# FP_DIR_DOCBOOK_XSL(XSL-DIRS)
+# ----------------------------
+# Check which of the directories XSL-DIRS contains DocBook XSL stylesheets. The
+# output variable DIR_DOCBOOK_XSL will contain the first usable directory or
+# will be empty if none could be found.
+AC_DEFUN([FP_DIR_DOCBOOK_XSL],
+[AC_REQUIRE([FP_PROG_XSLTPROC])dnl
+if test -n "$XsltprocCmd"; then
+ AC_CACHE_CHECK([for DocBook XSL stylesheet directory], fp_cv_dir_docbook_xsl,
+ [FP_GEN_DOCBOOK_XML
+ fp_cv_dir_docbook_xsl=no
+ for fp_var in $1; do
+ if $XsltprocCmd ${fp_var}/html/docbook.xsl conftest.xml > /dev/null 2>&1; then
+ fp_cv_dir_docbook_xsl=$fp_var
+ break
+ fi
+ done
+ rm -rf conftest*])
+fi
+if test x"$fp_cv_dir_docbook_xsl" = xno; then
+ AC_MSG_WARN([cannot find DocBook XSL stylesheets, you will not be able to build the documentation])
+ DIR_DOCBOOK_XSL=
+else
+ DIR_DOCBOOK_XSL=$fp_cv_dir_docbook_xsl
+fi
+AC_SUBST([DIR_DOCBOOK_XSL])
+])# FP_DIR_DOCBOOK_XSL
+
+
+# FP_PROG_XMLLINT
+# ----------------
+# Sets the output variable XmllintCmd to the full path of the XSLT processor
+# xmllint. XmllintCmd is empty if xmllint could not be found.
+AC_DEFUN([FP_PROG_XMLLINT],
+[AC_PATH_PROG([XmllintCmd], [xmllint])
+if test -z "$XmllintCmd"; then
+ AC_MSG_WARN([cannot find xmllint in your PATH, you will not be able to validate your documentation])
+fi
+])# FP_PROG_XMLLINT
+
+
+# FP_CHECK_DOCBOOK_DTD
+# --------------------
+AC_DEFUN([FP_CHECK_DOCBOOK_DTD],
+[AC_REQUIRE([FP_PROG_XMLLINT])dnl
+if test -n "$XmllintCmd"; then
+ AC_MSG_CHECKING([for DocBook DTD])
+ FP_GEN_DOCBOOK_XML
+ if $XmllintCmd --valid --noout conftest.xml > /dev/null 2>&1; then
+ AC_MSG_RESULT([ok])
+ else
+ AC_MSG_RESULT([failed])
+ AC_MSG_WARN([cannot find a DTD for DocBook XML V4.2, you will not be able to validate your documentation])
+ AC_MSG_WARN([check your XML_CATALOG_FILES environment variable and/or /etc/xml/catalog])
+ fi
+ rm -rf conftest*
+fi
+])# FP_CHECK_DOCBOOK_DTD
+
+
+# FP_PROG_FO_PROCESSOR
+# --------------------
+# Try to find an FO processor. PassiveTeX output is sometimes a bit strange, so
+# try FOP first. Furthermore, /usr/bin/fop is broken in SuSE 9.1, so try the
+# "real" fop.sh first. Sets the output variables FopCmd, XmltexCmd, DvipsCmd,
+# and PdfxmltexCmd.
+AC_DEFUN([FP_PROG_FO_PROCESSOR],
+[AC_PATH_PROGS([FopCmd], [fop.sh fop], [], [$PATH:/usr/share/fop])
+AC_PATH_PROG([XmltexCmd], [xmltex])
+AC_PATH_PROG([DvipsCmd], [dvips])
+if test -z "$FopCmd"; then
+ if test -z "$XmltexCmd"; then
+ AC_MSG_WARN([cannot find an FO => DVI converter, you will not be able to build DVI or PostScript documentation])
+ else
+ if test -z "$DvipsCmd"; then
+ AC_MSG_WARN([cannot find a DVI => PS converter, you will not be able to build PostScript documentation])
+ fi
+ fi
+ AC_PATH_PROG([PdfxmltexCmd], [pdfxmltex])
+ if test -z "$PdfxmltexCmd"; then
+ AC_MSG_WARN([cannot find an FO => PDF converter, you will not be able to build PDF documentation])
+ fi
+elif test -z "$XmltexCmd"; then
+ AC_MSG_WARN([cannot find an FO => DVI converter, you will not be able to build DVI documentation])
+fi
+])# FP_PROG_FO_PROCESSOR
+
+
+# FP_CHECK_WIN32
+# --------------
+# If Windows is the target platform (e.g. MinGW/MSYS or Cygwin with
+# -mno-cygwin), the variable "is_win32" is set to "yes", otherwise (e.g. *nix
+# systems or plain Cygwin) it is set to "no".
+AC_DEFUN([FP_CHECK_WIN32],
+[AC_CACHE_CHECK([for Windows environment], [fp_cv_is_win32],
+ [AC_COMPILE_IFELSE([AC_LANG_PROGRAM([], [
+#if !_WIN32
+ syntax error;
+#endif
+])], [fp_cv_is_win32=yes], [fp_cv_is_win32=no])])
+is_win32="$fp_cv_is_win32"[]dnl
+])# FP_CHECK_WIN32
+
+
+# FP_PATH_X
+# ---------
+# Same as AC_PATH_X, but works even for broken Cygwins which try to include the
+# non-existant <gl/mesa_wgl.h> header when -mno-cygwin is used.
+AC_DEFUN([FP_PATH_X],
+[AC_REQUIRE([FP_CHECK_WIN32])
+if test x"$is_win32" = xyes; then
+ no_x=yes
+else
+ AC_PATH_X
+fi
+])# FP_PATH_X
+
+
+# FP_PATH_XTRA
+# ------------
+# Same as AC_PATH_XTRA, but works even for broken Cygwins which try to include
+# the non-existant <gl/mesa_wgl.h> header when -mno-cygwin is used.
+AC_DEFUN([FP_PATH_XTRA],
+[AC_REQUIRE([FP_CHECK_WIN32])
+if test x"$is_win32" = xyes; then
+ no_x=yes
+else
+ AC_PATH_XTRA
+fi
+])# FP_PATH_XTRA
+
+
+# FP_CHECK_GL_HELPER(LIBNAME, LIBS, INCLUDES, FUNCTION-BODY)
+# ----------------------------------------------------------
+# Try each library in LIBS to successfully link INCLUDES plus FUNCTION-BODY,
+# setting LIBNAME_CFLAGS and LIBNAME_LIBS to the corresponding values. Sets
+# no_LIBNAME to "yes" if no suitable library was found. (LIBNAME_CFLAGS0
+# contains the value of LIBNAME_CFLAGS without CPPFLAGS, and LIBNAME_LIBS0
+# contains the value of LIBNAME_LIBS without LDFLAGS, but these are only
+# used internally.)
+AC_DEFUN([FP_CHECK_GL_HELPER],
+[AC_CACHE_CHECK([for $1 library], [fp_cv_check_$1_lib],
+ [fp_cv_check_$1_lib="no"
+ fp_save_CPPFLAGS="$CPPFLAGS"
+ CPPFLAGS="$CPPFLAGS ${$1_CFLAGS}"
+ fp_save_LIBS="$LIBS"
+ for fp_try_lib in $2; do
+ # transform "-lfoo" to "foo.lib" when using cl
+ if test x"$CC" = xcl; then
+ fp_try_lib=`echo $fp_try_lib | sed -e 's/^-l//' -e 's/$/.lib/'`
+ fi
+ LIBS="$fp_try_lib ${$1_LIBS} $fp_save_LIBS"
+ AC_TRY_LINK([$3], [$4], [fp_cv_check_$1_lib="$fp_try_lib ${$1_LIBS}"; break])
+ done
+ LIBS="$fp_save_LIBS"
+ CPPFLAGS="$fp_save_CPPFLAGS"])
+
+ if test x"$fp_cv_check_$1_lib" = xno; then
+ no_$1=yes
+ $1_CFLAGS=
+ $1_LIBS=
+ else
+ $1_CFLAGS0="${$1_CFLAGS}"
+ $1_CFLAGS="$CPPFLAGS ${$1_CFLAGS0}"
+ $1_LIBS0="$fp_cv_check_$1_lib"
+ $1_LIBS="$LDFLAGS ${$1_LIBS0}"
+ fi
+])# FP_CHECK_GL_HELPER
+
+
+# FP_CHECK_GL
+# -----------
+AC_DEFUN([FP_CHECK_GL],
+[AC_REQUIRE([FP_PATH_X])
+AC_REQUIRE([AC_CANONICAL_SYSTEM])
+
+AC_ARG_ENABLE([hopengl],
+ [AC_HELP_STRING([--enable-hopengl],
+ [build a Haskell binding for OpenGL (GL/GLU). On Mac OS X, use
+ --enable-hopengl=x11 to use X11 instead of the "native" libraries.
+ (default=no)])],
+ [enable_opengl=$enableval], [enable_opengl=no])
+
+if test x"$enable_opengl" = xno; then
+ no_GL=yes
+else
+ use_quartz_opengl=no
+ case $target_os in
+ darwin*)
+ if test x"$enable_opengl" != xx11; then
+ AC_DEFINE([USE_QUARTZ_OPENGL], [1],
+ [Define to 1 if native OpenGL should be used on Mac OS X])
+ use_quartz_opengl=yes
+ fi
+ ;;
+ esac
+
+ if test x"$use_quartz_opengl" != xyes; then
+ AC_CHECK_LIB([m], [atan], [GL_LIBS="-lm $GL_LIBS"])
+
+ if test x"$no_x" != xyes; then
+ test -n "$x_includes" && GL_CFLAGS="-I$x_includes $GL_CFLAGS"
+ test -n "$x_libraries" && GL_LIBS="-L$x_libraries -lX11 $GL_LIBS"
+ fi
+
+ FP_CHECK_GL_HELPER([GL], [-lGL -lopengl32], [@%:@include <GL/gl.h>], [glEnd()])
+
+ if test x"$no_GL" != xyes; then
+ # Ugly: To get wglGetProcAddress on Windows, we have to link with
+ # opengl32.dll, too, even when we are using Cygwin with X11.
+ case "$GL_LIBS" in
+ *-lopengl32*|*opengl32.lib*) ;;
+ *) fp_save_LIBS="$LIBS"
+ LIBS="$LIBS -lopengl32"
+ AC_TRY_LINK([@%:@include <GL/gl.h>], [glEnd()],
+ [GL_LIBS="$GL_LIBS -lopengl32"; GL_LIBS0="$GL_LIBS0 -lopengl32"])
+ LIBS="$fp_save_LIBS"
+ ;;
+ esac
+ fi
+ fi
+fi
+
+AC_SUBST([GL_CFLAGS])
+AC_SUBST([GL_LIBS])
+])# FP_CHECK_GL
+
+
+# FP_CHECK_GLU
+# ------------
+AC_DEFUN([FP_CHECK_GLU],
+[AC_REQUIRE([FP_CHECK_GL])dnl
+GLU_CFLAGS="$GL_CFLAGS0"
+GLU_LIBS="$GL_LIBS0"
+
+if test x"$enable_opengl" = xno; then
+ no_GLU=yes
+elif test x"$use_quartz_opengl" != xyes; then
+ FP_CHECK_GL_HELPER([GLU], [-lglu32 -lGLU], [@%:@include <GL/glu.h>], [gluNewQuadric()])
+fi
+
+AC_SUBST([GLU_CFLAGS])
+AC_SUBST([GLU_LIBS])
+])# FP_CHECK_GLU
+
+
+# FP_CHECK_GLUT
+# -------------
+AC_DEFUN([FP_CHECK_GLUT],
+[AC_REQUIRE([FP_CHECK_GLU])
+FP_PATH_XTRA
+
+if test x"$enable_opengl" = xno; then
+ no_GLUT=yes
+elif test x"$use_quartz_opengl" != xyes; then
+ GLUT_CFLAGS="$GLU_CFLAGS0"
+ GLUT_LIBS="$GLU_LIBS0"
+
+ if test x"$no_x" != xyes; then
+ GLUT_LIBS="$X_PRE_LIBS -lXmu -lXi $X_EXTRA_LIBS $GLUT_LIBS"
+ fi
+
+ AC_CHECK_HEADERS([windows.h GL/glut.h])
+ # Note 1: On Cygwin with X11, GL/GLU functions use the "normal" calling
+ # convention, but GLUT functions use stdcall. To get this right, it is
+ # necessary to include <windows.h> first.
+ # Note 2: MinGW/MSYS comes without a GLUT header, so we use Cygwin's one in
+ # that case.
+ FP_CHECK_GL_HELPER([GLUT], [-lglut32 -lglut], [
+#if HAVE_WINDOWS_H
+#include <windows.h>
+#endif
+#if HAVE_GL_GLUT_H
+#include <GL/glut.h>
+#else
+#include "glut_local.h"
+#endif
+ ], [glutMainLoop()])
+fi
+
+AC_SUBST([GLUT_CFLAGS])
+AC_SUBST([GLUT_LIBS])
+])# FP_CHECK_GLUT
+
+
+dnl @synopsis FP_EMPTY_STRUCTS
+dnl
+dnl Check whether empty structs is accepted by CC.
+dnl
+AC_DEFUN(FP_EMPTY_STRUCTS,
+[AC_CACHE_CHECK(empty struct support, fptools_cv_empty_structs,
+[AC_TRY_COMPILE([
+typedef struct { /*empty*/ } StgFoo;
+],
+[int i;],
+fptools_cv_empty_structs=yes,
+fptools_cv_empty_structs=no)])
+if test "$fptools_cv_empty_structs" = yes; then
+AC_DEFINE([SUPPORTS_EMPTY_STRUCTS], [1], [Define to 1 if C compiler supports declaration of empty structure types.])
+fi