[project @ 2004-02-12 02:04:59 by mthomas]
[ghc-hetmet.git] / aclocal.m4
index 4295616..113889a 100644 (file)
@@ -238,64 +238,61 @@ YES) AC_DEFINE([LEADING_UNDERSCORE], [1], [Define to 1 if C symbols have a leadi
 esac
 ])
 
-dnl
-dnl FPTOOLS_PROG_CHECK_VERSION(VERSIONSTR1, TEST, VERSIONSTR2,
-dnl                            ACTION-IF-TRUE [, ACTION-IF-FALSE])
-dnl
-dnl compare versions field-wise (separator is '.')
-dnl TEST is one of {-lt,-le,-eq,-ge,-gt}
-dnl
-dnl quite shell-independant and SUSv2 compliant code
-dnl
-dnl NOTE: the loop could be unrolled within autoconf, but the
-dnl       macro code would be a) longer and b) harder to debug... ;)
-dnl
-AC_DEFUN(FPTOOLS_PROG_CHECK_VERSION,
-[if ( IFS=".";
-      a="[$1]";  b="[$3]";
-      while test -n "$a$b"
-      do
-              set -- [$]a;  h1="[$]1";  shift 2>/dev/null;  a="[$]*"
-              set -- [$]b;  h2="[$]1";  shift 2>/dev/null;  b="[$]*"
-              test -n "[$]h1" || h1=0;  test -n "[$]h2" || h2=0
-              test [$]{h1} -eq [$]{h2} || break
-      done
-      test [$]{h1} [$2] [$]{h2}
-    )
-then ifelse([$4],,[:],[
-  $4])
-ifelse([$5],,,
-[else
-  $5])
-fi
-])])dnl
+
+# FP_COMPARE_VERSIONS(VERSION1, TEST, VERSION2, [ACTION-IF-TRUE], [ACTION-IF-FALSE])
+# ----------------------------------------------------------------------------------
+# Compare dotted version numbers VERSION1 and VERSION2 lexicographically according
+# to TEST (one of -eq, -ne, -lt, -le, -gt, or -ge).
+AC_DEFUN([FP_COMPARE_VERSIONS],
+[fp_version1=$1; fp_version2=$3
+fp_save_IFS=$IFS; IFS='.'
+while test x"$fp_version1" != x || test x"$fp_version2" != x
+do
+
+  set dummy $fp_version1; shift
+  fp_num1=""
+  test $[@%:@] = 0 || { fp_num1="[$]1"; shift; }
+  test x"$fp_num1" = x && fp_num1="0"
+  fp_version1="[$]*"
+
+  set dummy $fp_version2; shift
+  fp_num2=""
+  test $[@%:@] = 0 || { fp_num2="[$]1"; shift; }
+  test x"$fp_num2" = x && fp_num2="0"
+  fp_version2="[$]*"
+
+  test "$fp_num1" = "$fp_num2" || break;
+done
+IFS=$fp_save_IFS
+AS_IF([test "$fp_num1" $2 "$fp_num2"], [$4], [$5])[]dnl
+])# FP_COMPARE_VERSIONS
 
 
 dnl
-dnl Check for Greencard and version.
+dnl Check for GreenCard and version.
 dnl
 AC_DEFUN(FPTOOLS_GREENCARD,
 [
-AC_PATH_PROG(GreencardCmd,greencard)
+AC_PATH_PROG(GreenCardCmd,greencard)
 AC_CACHE_CHECK([for version of greencard], fptools_cv_greencard_version,
 changequote(, )dnl
-[if test x"$GreencardCmd" != x; then
-   fptools_cv_greencard_version="`$GreencardCmd --version |
+[if test x"$GreenCardCmd" != x; then
+   fptools_cv_greencard_version="`$GreenCardCmd --version |
                          grep 'version' | sed -e 's/greencard. version \([^ ]*\).*/\1/g'`"
 else
    fptools_cv_greencard_version=""
 fi
 changequote([, ])dnl
 ])
-FPTOOLS_PROG_CHECK_VERSION([$fptools_cv_greencard_version],-lt,$1,
-  [AC_MSG_ERROR([greencard version $1 or later is required (found '$fptools_cv_greencard_version')])])dnl
-GreencardVersion=$fptools_cv_greencard_version
-AC_SUBST(GreencardVersion)
+FP_COMPARE_VERSIONS([$fptools_cv_greencard_version],[-lt],[$1],
+  [AC_MSG_ERROR([greencard version $1 or later is required (found '$fptools_cv_greencard_version')])])[]dnl
+GreenCardVersion=$fptools_cv_greencard_version
+AC_SUBST(GreenCardVersion)
 ])
 
 dnl
 dnl Check for Happy and version.  If we're building GHC, then we need
-dnl at least Happy version 1.13.  If there's no installed Happy, we look
+dnl at least Happy version 1.14.  If there's no installed Happy, we look
 dnl for a happy source tree and point the build system at that instead.
 dnl
 AC_DEFUN(FPTOOLS_HAPPY,
@@ -321,8 +318,8 @@ fi;
 changequote([, ])dnl
 ])
 if test -d $srcdir/ghc -a ! -f $srcdir/ghc/compiler/parser/Parser.hs; then
-  FPTOOLS_PROG_CHECK_VERSION([$fptools_cv_happy_version],-lt,[1.13],
-  [AC_MSG_ERROR([Happy version 1.13 or later is required to compile GHC.])])dnl
+  FP_COMPARE_VERSIONS([$fptools_cv_happy_version],[-lt],[1.14],
+  [AC_MSG_ERROR([Happy version 1.14 or later is required to compile GHC.])])[]dnl
 fi
 HappyVersion=$fptools_cv_happy_version;
 AC_SUBST(HappyVersion)
@@ -375,10 +372,10 @@ else
 fi;
 changequote([, ])dnl
 ])
-dnl if test -d $srcdir/ghc -a ! -f $srcdir/ghc/compiler/parser/Lexer.hs; then
-dnl   FPTOOLS_PROG_CHECK_VERSION([$fptools_cv_alex_version],-lt,[2.0],
-dnl   [AC_MSG_ERROR([Alex version 2.0 or later is required to compile GHC.])])dnl
-dnl fi
+if test -d $srcdir/ghc -a ! -f $srcdir/ghc/compiler/parser/Lexer.hs; then
+  FP_COMPARE_VERSIONS([$fptools_cv_alex_version],[-lt],[2.0],
+  [AC_MSG_ERROR([Alex version 2.0 or later is required to compile GHC.])])[]dnl
+fi
 AlexVersion=$fptools_cv_alex_version;
 AC_SUBST(AlexVersion)
 ])
@@ -509,15 +506,14 @@ changequote(, )dnl
     gcc_version_str="`$CC -v 2>&1 | grep 'version ' | sed -e 's/.*version [^0-9]*\([0-9][0-9]*\)\.\([0-9][0-9]*\).*/\1\.\2/g' `"
 changequote([, ])dnl
     fptools_cv_have_gcc='yes'
-    FPTOOLS_PROG_CHECK_VERSION($gcc_version_str, -lt, "2.0",
-        fptools_cv_have_gcc='no'
+    FP_COMPARE_VERSIONS([$gcc_version_str], [-lt], [2.0],
+        [fptools_cv_have_gcc='no'
         echo ""
        echo "your gcc version appears to be ..."
         $CC --version
         echo "gcc prior to 2.0 and have never worked with ghc."
         echo "we recommend 2.95.3, although versions back to 2.7.2 should be ok."
-        AC_MSG_ERROR([gcc 1.X has never been supported])
-    )
+        AC_MSG_ERROR([gcc 1.X has never been supported])])
 fi
 ])
 HaveGcc=`echo $fptools_cv_have_gcc | sed 'y/yesno/YESNO/'`
@@ -530,17 +526,15 @@ dnl -momit-leaf-frame-pointer on by default.  If this is the case, we
 dnl need to turn it off for mangling to work.  The test is currently a bit
 dnl crude, using only the version number of gcc.
 dnl
-AC_DEFUN(FPTOOLS_GCC_NEEDS_NO_OMIT_LFPTR,
-[AC_CACHE_CHECK([whether gcc needs -mno-omit-leaf-frame-pointer], fptools_cv_gcc_needs_no_omit_lfptr,
-[
- fptools_cv_gcc_needs_no_omit_lfptr='no'
- FPTOOLS_PROG_CHECK_VERSION($gcc_version_str, -ge, "3.2",
-     fptools_cv_gcc_needs_no_omit_lfptr='yes')
-])
+AC_DEFUN([FPTOOLS_GCC_NEEDS_NO_OMIT_LFPTR],
+[AC_CACHE_CHECK([whether gcc needs -mno-omit-leaf-frame-pointer], [fptools_cv_gcc_needs_no_omit_lfptr],
+[FP_COMPARE_VERSIONS([$gcc_version_str], [-ge], [3.2],
+  [fptools_cv_gcc_needs_no_omit_lfptr=yes],
+  [fptools_cv_gcc_needs_no_omit_lfptr=no])])
 if test "$fptools_cv_gcc_needs_no_omit_lfptr" = "yes"; then
    AC_DEFINE([HAVE_GCC_MNO_OMIT_LFPTR], [1], [Define to 1 if gcc supports -mno-omit-leaf-frame-pointer.])
-fi
-])
+fi])# FPTOOLS_GCC_NEEDS_NO_OMIT_LFPTR
+
 
 dnl Small feature test for perl version. Assumes PerlCmd
 dnl contains path to perl binary
@@ -567,28 +561,36 @@ fi
 rm -fr conftest*
 ])
 
-dnl
-dnl Getting at the right version of 'find'
-dnl (i.e., not the MS util on a Win32 box).
-dnl
-AC_DEFUN(FPTOOLS_FIND_FIND,
-[
-AC_PATH_PROG(Find2Cmd, find)
-$Find2Cmd --version > conftest.out 2>&1 
-if grep "FIND: Parameter format" conftest.out >/dev/null 2>&1 ; then
-   # Encountered MS' find utility, which is not what we're after.
-   #
-   # HACK - AC_CHECK_PROG is useful here in that does let you reject
-   # an (absolute) entry in the path (Find2Cmd). It is not so useful
-   # in that it doesn't let you (AFAIU) set VARIABLE equal to the 
-   # absolute path eventually found. So, hack around this by inspecting
-   # what variables hold the abs. path & use them directly.
-   AC_CHECK_PROG(FindCmd,find,`echo $ac_dir/$ac_word`,find,,$Find2Cmd)
+
+# FP_CHECK_PROG(VARIABLE, PROG-TO-CHECK-FOR,
+#               [VALUE-IF-NOT-FOUND], [PATH], [REJECT])
+# -----------------------------------------------------
+# HACK: A small wrapper around AC_CHECK_PROG, setting VARIABLE to the full path
+# of PROG-TO-CHECK-FOR when found.
+AC_DEFUN([FP_CHECK_PROG],
+[AC_CHECK_PROG([$1], [$2], [$as_dir/$ac_word$ac_exec_ext], [$3], [$4], [$5])][]dnl
+)# FP_CHECK_PROC
+
+
+# FP_PROG_FIND
+# ------------
+# Find a non-WinDoze version of the "find" utility.
+AC_DEFUN([FP_PROG_FIND],
+[AC_PATH_PROG([fp_prog_find], [find])
+echo foo > conftest.txt
+$fp_prog_find conftest.txt -print > conftest.out 2>&1
+if grep '^conftest.txt$' conftest.out > /dev/null 2>&1 ; then
+  # OK, looks like a real "find".
+  FindCmd="$fp_prog_find"
 else
-FindCmd=$Find2Cmd
-AC_SUBST(FindCmd)
+  # Found a poor WinDoze version of "find", ignore it.
+  AC_MSG_WARN([$fp_prog_find looks like a non-*nix find, ignoring it])
+  FP_CHECK_PROG([FindCmd], [find], [], [], [$fp_prog_find])
 fi
-])
+rm -f conftest.txt conftest.out
+AC_SUBST([FindCmd])[]dnl
+])# FP_PROG_FIND
+
 
 dnl
 dnl FPTOOLS_NOCACHE_CHECK prints a message, then sets the
@@ -663,57 +665,65 @@ dnl The name to #define.
 define(<<AC_TYPE_NAME>>, translit(htype_$1, [a-z *], [A-Z_P]))dnl
 dnl The cache variable name.
 define(<<AC_CV_NAME>>, translit(fptools_cv_htype_$1, [ *], [_p]))dnl
+define(<<AC_CV_NAME_supported>>, translit(fptools_cv_htype_sup_$1, [ *], [_p]))dnl
 changequote([, ])dnl
 AC_MSG_CHECKING(Haskell type for $1)
 AC_CACHE_VAL(AC_CV_NAME,
-[AC_TRY_RUN([#include <stdio.h>
+[AC_CV_NAME_supported=yes
+fp_check_htype_save_cppflags="$CPPFLAGS"
+CPPFLAGS="$CPPFLAGS $X_CFLAGS"
+AC_TRY_RUN([#include <stdio.h>
 #include <stddef.h>
 
-#ifdef HAVE_SYS_TYPES_H
+#if HAVE_SYS_TYPES_H
 # include <sys/types.h>
 #endif
 
-#ifdef HAVE_UNISTD_H
+#if HAVE_UNISTD_H
 # include <unistd.h>
 #endif
 
-#ifdef HAVE_SYS_STAT_H
+#if HAVE_SYS_STAT_H
 # include <sys/stat.h>
 #endif
 
-#ifdef HAVE_FCNTL_H
+#if HAVE_FCNTL_H
 # include <fcntl.h>
 #endif
 
-#ifdef HAVE_SIGNAL_H
+#if HAVE_SIGNAL_H
 # include <signal.h>
 #endif
 
-#ifdef HAVE_TIME_H
+#if HAVE_TIME_H
 # include <time.h>
 #endif
 
-#ifdef HAVE_TERMIOS_H
+#if HAVE_TERMIOS_H
 # include <termios.h>
 #endif
 
-#ifdef HAVE_STRING_H
+#if HAVE_STRING_H
 # include <string.h>
 #endif
 
-#ifdef HAVE_CTYPE_H
+#if HAVE_CTYPE_H
 # include <ctype.h>
 #endif
 
-#ifdef HAVE_GL_GL_H
+#if defined(HAVE_GL_GL_H)
 # include <GL/gl.h>
+#elif defined(HAVE_OPENGL_GL_H)
+# include <OpenGL/gl.h>
 #endif
 
-#ifdef HAVE_OPENGL_GL_H
-# include <OpenGL/gl.h>
+#if defined(HAVE_AL_ALC_H)
+# include <AL/alc.h>
+#elif defined(HAVE_OPENAL_ALC_H)
+# include <OpenAL/alc.h>
 #endif
 
-#ifdef HAVE_SYS_RESOURCE_H
+#if HAVE_SYS_RESOURCE_H
 # include <sys/resource.h>
 #endif
 
@@ -733,87 +743,38 @@ main() {
   }
   fclose(f);
   exit(0);
-}], AC_CV_NAME=`cat conftestval`,
-ifelse([$2], , AC_CV_NAME=NotReallyAType,      AC_CV_NAME=$2),
-ifelse([$3], , AC_CV_NAME=NotReallyATypeCross, AC_CV_NAME=$3))]) dnl
-AC_MSG_RESULT($AC_CV_NAME)
-AC_DEFINE_UNQUOTED(AC_TYPE_NAME, $AC_CV_NAME, [Define to Haskell type for $1])
-undefine([AC_TYPE_NAME])dnl
-undefine([AC_CV_NAME])dnl
-])
-
-
-dnl Based on AC_TRY_LINK - run iftrue if links cleanly with no warning
-
-dnl FPTOOLS_TRY_LINK_NOWARN(flags,main?,iftrue,iffalse)
-
-AC_DEFUN(FPTOOLS_TRY_LINK_NOWARN,
-[
-ac_save_LIBS="$LIBS"
-LIBS=[$1];
-cat > conftest.$ac_ext <<EOF
-dnl This sometimes fails to find confdefs.h, for some reason.
-dnl [#]line __oline__ "[$]0"
-[#]line __oline__ "configure"
-#include "confdefs.h"
-[$2]
-int t() { return 0; }
-EOF
-if AC_TRY_EVAL(ac_link); then
-  ifelse([$3], , :, [
-    LIBS="$ac_save_LIBS"
-    rm -rf conftest*
-    $3])
-  ifelse([$4], , , [else
-    LIBS="$ac_save_LIBS"
-    rm -rf conftest*
-    $4
-])dnl
-fi
-rm -f conftest*
-]
-)
-
-dnl Loosely based on AC_CHECK_LIB in acgeneral.m4 in autoconf distribution
-
-dnl FPTOOLS_CHECK_FLAG_NOWARN(NAME, FLAG, CODE, iftrue, iffalse)
-
-AC_DEFUN(FPTOOLS_CHECK_FLAG_NOWARN,
-[AC_MSG_CHECKING([for $1])
- AC_CACHE_VAL(ac_cv_flag_$1,
-   [FPTOOLS_TRY_LINK_NOWARN("$2", [main() { $3; exit(0); } ],
-     eval "ac_cv_flag_$1=yes",
-     eval "ac_cv_flag_$1=no"
-   )]
- )
-if eval "test \"`echo '$ac_cv_flag_'$1`\" = yes"; then
-  AC_MSG_RESULT(yes)
-  LIBS="$2 $LIBS"
-  $4
+}],AC_CV_NAME=`cat conftestval`,
+ifelse([$2], , [AC_CV_NAME=NotReallyAType; AC_CV_NAME_supported=no], AC_CV_NAME=$2),
+ifelse([$3], , [AC_CV_NAME=NotReallyATypeCross; AC_CV_NAME_supported=no], AC_CV_NAME=$3))]) dnl
+CPPFLAGS="$fp_check_htype_save_cppflags"
+if test "$AC_CV_NAME_supported" = yes; then
+  AC_MSG_RESULT($AC_CV_NAME)
+  AC_DEFINE_UNQUOTED(AC_TYPE_NAME, $AC_CV_NAME, [Define to Haskell type for $1])
 else
-  AC_MSG_RESULT(no)
-  $5
+  AC_MSG_RESULT([not supported])
 fi
+undefine([AC_TYPE_NAME])dnl
+undefine([AC_CV_NAME])dnl
+undefine([AC_CV_NAME_supported])dnl
 ])
 
-dnl FPTOOLS_CHECK_LIB_NOWARN(LIBRARY, FUNCTION)
 
-AC_DEFUN(FPTOOLS_CHECK_LIB_NOWARN,
-[FPTOOLS_CHECK_FLAG_NOWARN([function_$2],[],[extern char $2(); $2();],
-[changequote(, )dnl
-  ac_tr_lib=HAVE_LIB`echo $1 | tr 'abcdefghijklmnopqrstuvwxyz' 'ABCDEFGHIJKLMNOPQRSTUVWXYZ'`
- changequote([, ])dnl
- AC_DEFINE_UNQUOTED($ac_tr_lib)
-],
-[FPTOOLS_CHECK_FLAG_NOWARN([library_$1],[-l$1],[extern char $2(); $2();],
-[changequote(, )dnl
-  ac_tr_lib=HAVE_LIB`echo $1 | tr 'abcdefghijklmnopqrstuvwxyz' 'ABCDEFGHIJKLMNOPQRSTUVWXYZ'`
- changequote([, ])dnl
- AC_DEFINE_UNQUOTED($ac_tr_lib)
-],
-[]
-)])]
-)
+# 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
 
 
 dnl ** Check which CATALOG file we have to use with DocBook SGML.
@@ -864,232 +825,219 @@ if test $fptools_cv_sgml_catalog != "no"; then
 fi
 ])
 
-dnl ######################################################################
-dnl FPTOOLS_SEARCH_LIBS(INCLUDES, FUNCTION, SEARCH-LIBS [, ACTION-IF-FOUND
-dnl                     [, ACTION-IF-NOT-FOUND [, OTHER-LIBRARIES]]])
-dnl Search for a library defining FUNC, if it's not already available.
-dnl This is almost the same as AC_SEARCH_LIBS, but the INCLUDES can be
-dnl specified.
-dnl ######################################################################
-
-AC_DEFUN(FPTOOLS_SEARCH_LIBS,
-[AC_PREREQ([2.13])
-AC_CACHE_CHECK([for library containing $2], [ac_cv_search_$2],
-[ac_func_search_save_LIBS="$LIBS"
-ac_cv_search_$2="no"
-AC_TRY_LINK([$1], [$2()], [ac_cv_search_$2="none required"])
-test "$ac_cv_search_$2" = "no" && for i in $3; do
-LIBS="-l$i $6 $ac_func_search_save_LIBS"
-AC_TRY_LINK([$1], [$2()],
-[ac_cv_search_$2="-l$i"
-break])
-done
-LIBS="$ac_func_search_save_LIBS"])
-if test "$ac_cv_search_$2" != "no"; then
-  test "$ac_cv_search_$2" = "none required" || LIBS="$ac_cv_search_$2 $LIBS"
-  $4
-else :
-  $5
-fi])
-
-dnl ####################### -*- Mode: M4 -*- ###########################
-dnl Copyright (C) 98, 1999 Matthew D. Langston <langston@SLAC.Stanford.EDU>
-dnl
-dnl This file is free software; you can redistribute it and/or modify it
-dnl under the terms of the GNU General Public License as published by
-dnl the Free Software Foundation; either version 2 of the License, or
-dnl (at your option) any later version.
-dnl
-dnl This file is distributed in the hope that it will be useful, but
-dnl WITHOUT ANY WARRANTY; without even the implied warranty of
-dnl MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
-dnl General Public License for more details.
-dnl
-dnl You should have received a copy of the GNU General Public License
-dnl along with this file; if not, write to:
-dnl
-dnl   Free Software Foundation, Inc.
-dnl   Suite 330
-dnl   59 Temple Place
-dnl   Boston, MA 02111-1307, USA.
-dnl ####################################################################
+
+# 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
 
 
-dnl @synopsis FPTOOLS_CHECK_LIBM
-dnl 
-dnl Search for math library (typically -lm).
-dnl
-dnl The variable LIBM (which is not an output variable by default) is
-dnl set to a value which is suitable for use in a Makefile (for example,
-dnl in make's LOADLIBES macro) provided you AC_SUBST it first.
-dnl
-dnl @author Matthew D. Langston <langston@SLAC.Stanford.EDU>
-
-# FPTOOLS_CHECK_LIBM - check for math library
-AC_DEFUN(FPTOOLS_CHECK_LIBM,
-[AC_REQUIRE([AC_CANONICAL_HOST])dnl
-LIBM=
-case "$host" in
-*-*-beos*)
-  # These system don't have libm
-  ;;
-*-ncr-sysv4.3*)
-  AC_CHECK_LIB(mw, _mwvalidcheckl, LIBM="-lmw")
-  AC_CHECK_LIB(m, main, LIBM="$LIBM -lm")
-  ;;
-*)
-  AC_CHECK_LIB(m, main, LIBM="-lm")
-  ;;
-esac
-])
+# 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
 
-dnl ######################################################################
-dnl Note: Caching has been completely rewritten, but is still no perfect yet.
-dnl ######################################################################
 
-dnl ########################### -*- Mode: M4 -*- #######################
-dnl Copyright (C) 98, 1999 Matthew D. Langston <langston@SLAC.Stanford.EDU>
-dnl
-dnl This file is free software; you can redistribute it and/or modify it
-dnl under the terms of the GNU General Public License as published by
-dnl the Free Software Foundation; either version 2 of the License, or
-dnl (at your option) any later version.
-dnl
-dnl This file is distributed in the hope that it will be useful, but
-dnl WITHOUT ANY WARRANTY; without even the implied warranty of
-dnl MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
-dnl General Public License for more details.
-dnl
-dnl You should have received a copy of the GNU General Public License
-dnl along with this file; if not, write to:
-dnl
-dnl   Free Software Foundation, Inc.
-dnl   Suite 330
-dnl   59 Temple Place
-dnl   Boston, MA 02111-1307, USA.
-dnl ####################################################################
+# FP_CHECK_GL
+# -----------
+AC_DEFUN([FP_CHECK_GL],
+[AC_REQUIRE([FP_PATH_X])
+AC_REQUIRE([AC_CANONICAL_SYSTEM])
 
-dnl @synopsis FPTOOLS_HAVE_OPENGL
-dnl 
-dnl Search for OpenGL.  We search first for Mesa (a GPL'ed version of
-dnl OpenGL) before a vendor's version of OpenGL if we were specifically
-dnl asked to with `--with-Mesa=yes' or `--with-Mesa'.
-dnl
-dnl The four "standard" OpenGL libraries are searched for: "-lGL",
-dnl "-lGLU", "-lGLX" (or "-lMesaGL", "-lMesaGLU" as the case may be) and
-dnl "-lglut".
-dnl
-dnl All of the libraries that are found (since "-lglut" or "-lGLX" might
-dnl be missing) are added to the shell output variable "GL_LIBS", along
-dnl with any other libraries that are necessary to successfully link an
-dnl OpenGL application (e.g. the X11 libraries).  Care has been taken to
-dnl make sure that all of the libraries in "GL_LIBS" are listed in the
-dnl proper order.
-dnl
-dnl Additionally, the shell output variable "GL_CFLAGS" is set to any
-dnl flags (e.g. "-I" flags) that are necessary to successfully compile
-dnl an OpenGL application.
-dnl
-dnl The following shell variable (which are not output variables) are
-dnl also set to either "yes" or "no" (depending on which libraries were
-dnl found) to help you determine exactly what was found.
-dnl
-dnl   have_GL
-dnl   have_GLU
-dnl   have_GLX
-dnl   have_glut
-dnl
-dnl A complete little toy "Automake `make distcheck'" package of how to
-dnl use this macro is available at:
-dnl
-dnl   ftp://ftp.slac.stanford.edu/users/langston/autoconf/ac_opengl-0.01.tar.gz
-dnl
-dnl Please note that as the ac_opengl macro and the toy example evolves,
-dnl the version number increases, so you may have to adjust the above
-dnl URL accordingly.
-dnl
-dnl @author Matthew D. Langston <langston@SLAC.Stanford.EDU>
+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])
 
-AC_DEFUN(FPTOOLS_HAVE_OPENGL,
-[
-  AC_REQUIRE([AC_PROG_CC])
-  AC_REQUIRE([AC_PATH_X])
-  AC_REQUIRE([AC_PATH_XTRA])
-  AC_REQUIRE([FPTOOLS_CHECK_LIBM])
-
-dnl Check for Mesa first if we were asked to.
-  AC_ARG_ENABLE(Mesa,
-[  --enable-mesa
-       Prefer Mesa over a vendor's native OpenGL library (default=no)
-],
-                use_Mesa=$enableval,
-                use_Mesa=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
 
-  if test x"$use_Mesa" = xyes; then
-     GL_search_list="MesaGL  GL  opengl32"
-    GLU_search_list="MesaGLU GLU glu32"
-    GLX_search_list="MesaGLX GLX"
-  else
-     GL_search_list="GL  opengl32 MesaGL"
-    GLU_search_list="GLU glu32    MesaGLU"
-    GLX_search_list="GLX          MesaGLX"
-  fi      
+AC_SUBST([GL_CFLAGS])
+AC_SUBST([GL_LIBS])
+])# FP_CHECK_GL
 
-  AC_LANG_SAVE
-  AC_LANG_C
 
-dnl If we are running under X11 then add in the appropriate libraries.
-  if test x"$no_x" != xyes; then
-dnl Add everything we need to compile and link X programs to GL_CFLAGS
-dnl and GL_X_LIBS/GLUT_X_LIBS.
-    GL_CFLAGS="$CPPFLAGS $X_CFLAGS"
-    GL_X_LIBS="$X_LIBS $X_PRE_LIBS -lXext -lX11 $X_EXTRA_LIBS $LIBM"
-    GLUT_X_LIBS="$X_LIBS $X_PRE_LIBS -lXmu -lXt -lXi -lXext -lX11 $X_EXTRA_LIBS $LIBM"
-  fi
-  GL_save_CPPFLAGS="$CPPFLAGS"
-  CPPFLAGS="$GL_CFLAGS"
+# FP_CHECK_GLU
+# ------------
+AC_DEFUN([FP_CHECK_GLU],
+[AC_REQUIRE([FP_CHECK_GL])dnl
+GLU_CFLAGS="$GL_CFLAGS0"
+GLU_LIBS="$GL_LIBS0"
 
-  GL_save_LIBS="$LIBS"
-  LIBS="$GL_X_LIBS"
+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
 
-  FPTOOLS_SEARCH_LIBS([#include <GL/gl.h>],   glEnd,         $GL_search_list,  have_GL=yes,   have_GL=no)
-  FPTOOLS_SEARCH_LIBS([#include <GL/glu.h>],  gluNewQuadric, $GLU_search_list, have_GLU=yes,  have_GLU=no)
-  FPTOOLS_SEARCH_LIBS([#include <GL/glx.h>],  glXWaitX,      $GLX_search_list, have_GLX=yes,  have_GLX=no)
+AC_SUBST([GLU_CFLAGS])
+AC_SUBST([GLU_LIBS])
+])# FP_CHECK_GLU
 
-  if test -n "$LIBS"; then
-    GL_LIBS="$LDFLAGS $LIBS"
-  else
-    GL_LIBS="$LDFLAGS"
-    GL_CFLAGS=
-  fi
 
-  LIBS="$GLUT_X_LIBS"
+# FP_CHECK_GLUT
+# -------------
+AC_DEFUN([FP_CHECK_GLUT],
+[AC_REQUIRE([FP_CHECK_GLU])
+FP_PATH_XTRA
 
-  FPTOOLS_SEARCH_LIBS([#include <GL/glut.h>], glutMainLoop,  glut32 glut,      have_glut=yes, have_glut=no)
+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 -n "$LIBS"; then
-    GLUT_LIBS="$LDFLAGS $LIBS"
+  if test x"$no_x" != xyes; then
+    GLUT_LIBS="$X_PRE_LIBS -lXmu -lXi $X_EXTRA_LIBS $GLUT_LIBS"
   fi
 
-  AC_CACHE_CHECK([OpenGL flags], mdl_cv_gl_cflags, [mdl_cv_gl_cflags="$GL_CFLAGS"])
-  GL_CFLAGS="$mdl_cv_gl_cflags"
-  AC_SUBST(GL_CFLAGS)
-  AC_CACHE_CHECK([OpenGL libs],  mdl_cv_gl_libs,   [mdl_cv_gl_libs="$GL_LIBS"])
-  GL_LIBS="$mdl_cv_gl_libs"
-  AC_SUBST(GL_LIBS)
-  AC_CACHE_CHECK([GLUT libs],  mdl_cv_glut_libs,   [mdl_cv_glut_libs="$GLUT_LIBS"])
-  GLUT_LIBS="$mdl_cv_glut_libs"
-  AC_SUBST(GLUT_LIBS)
-
-dnl Reset GL_X_LIBS/GLUT_X_LIBS regardless, since they were just temporary variables
-dnl and we don't want to be global namespace polluters.
-  GL_X_LIBS=
-  GLUT_X_LIBS=
-
-  LIBS="$GL_save_LIBS"
-  CPPFLAGS="$GL_save_CPPFLAGS"
-
-  AC_LANG_RESTORE
+  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
 ])
 
 # LocalWords:  fi