[add ac-macros/ghc_macros.m4 from darcs
John Meacham <john@repetae.net>**20090219103154
 Ignore-this: d243ca27e307ef3acd784a4277f7366a
] addfile ./ac-macros/ghc_macros.m4
hunk ./ac-macros/ghc_macros.m4 1
+# Copyright 2005,2008 David Roundy
+
+
+# Redistribution and use in source and binary forms of this file, with or
+# without modification, are permitted provided that redistributions of
+# source code must retain the above copyright notice.
+
+# TRY_COMPILE_GHC(PROGRAM, [ACTION-IF-TRUE], [ACTION-IF-FALSE])
+# -----------
+# Compile and link using ghc.
+AC_DEFUN([TRY_COMPILE_GHC],[
+cat << \EOF > conftest.hs
+[$1]
+-- this file generated by TRY-COMPILE-GHC
+EOF
+rm -f Main.hi Main.o
+# Convert LDFLAGS and LIBS to the format GHC wants them in
+GHCLDFLAGS=""
+for f in $LDFLAGS ; do
+  GHCLDFLAGS="$GHCLDFLAGS -optl$f"
+done
+GHCLIBS=""
+for l in $LIBS ; do
+  GHCLIBS="$GHCLIBS -optl$l"
+done
+if AC_TRY_COMMAND($GHC $GHCFLAGS $GHCLDFLAGS -o conftest conftest.hs $GHCLIBS) && test -s conftest
+then
+dnl Don't remove the temporary files here, so they can be examined.
+  ifelse([$2], , :, [$2])
+else
+  echo "configure: failed program was:" >&AS_MESSAGE_LOG_FD
+  cat conftest.hs >&AS_MESSAGE_LOG_FD
+  echo "end of failed program." >&AS_MESSAGE_LOG_FD
+ifelse([$3], , , [ rm -f Main.hi Main.o
+  $3
+])dnl
+fi])
+
+# TRY_RUN_GHC(PROGRAM, [ACTION-IF-TRUE], [ACTION-IF-FALSE])
+# -----------
+# Compile, link and run using ghc.
+AC_DEFUN([TRY_RUN_GHC],[
+  TRY_COMPILE_GHC([$1],
+    AS_IF([AC_TRY_COMMAND(./conftest)],[$2],[$3]),
+    [$3])
+])
+
+# GHC_CHECK_ONE_MODULE(MODULE, [ACTION-IF-FOUND], [ACTION-IF-NOT-FOUND])
+# -----------
+# Compile and link using ghc.
+AC_DEFUN([GHC_CHECK_ONE_MODULE],[
+TRY_COMPILE_GHC([import $1
+main = seq ($2) (putStr "Hello world.\n")
+                ],[$3],[$4])
+
+])
+
+# GHC_CHECK_MODULE(MODULE, PACKAGE, CODE, [ACTION-IF-FOUND], [ACTION-IF-NOT-FOUND])
+# -----------
+# Compile and link using ghc.
+AC_DEFUN([GHC_CHECK_MODULE],[
+AC_MSG_CHECKING([for module $1])
+GHC_CHECK_ONE_MODULE([$1], [$3], [AC_MSG_RESULT([yes])
+$4], [
+  check_module_save_GHCFLAGS=$GHCFLAGS
+  GHCFLAGS="$GHCFLAGS -package $2"
+  GHC_CHECK_ONE_MODULE([$1], [$3], [AC_MSG_RESULT([in package $2])
+$4],[
+    GHCFLAGS=$check_module_save_GHCFLAGS
+    AC_MSG_RESULT(no; and neither in package $2)
+    $5])
+  ])
+])
+
+# GHC_COMPILE_FFI(IMPORT, TYPE, [ACTION-IF-FOUND], [ACTION-IF-NOT-FOUND])
+# -----------
+# Compile and link ffi code using ghc.
+AC_DEFUN([GHC_COMPILE_FFI],[
+TRY_COMPILE_GHC([{-# OPTIONS -fffi #-}
+module Main where
+
+foreign import ccall unsafe "$1" fun :: $2
+
+main = fun `seq` putStrLn "hello world"
+],[$3],[$4])])
+
+# GHC_CHECK_LIBRARY(LIBRARY, IMPORT, TYPE, [ACTION-IF-FOUND], [ACTION-IF-NOT-FOUND])
+# -----------
+# Compile and link with C library using ghc.
+AC_DEFUN([GHC_CHECK_LIBRARY],[
+AC_MSG_CHECKING([for library $1])
+GHC_COMPILE_FFI([$2], [$3], [AC_MSG_RESULT([yes])
+$4], [
+  check_library_save_LIBS=$LIBS
+  LIBS="$LIBS -l$1"
+  GHC_COMPILE_FFI([$2], [$3], [AC_MSG_RESULT([in -l$1])
+  $4],[
+    LIBS=$check_library_save_LIBS
+    AC_MSG_RESULT(no; and not with -l$1 either)
+    $5])
+  ])
+])