-dnl @synopsis FP_DIRENT_FLAT_LAYOUT
-dnl
-dnl Check whether 'struct dirent' (in dirent.h) has d_name defined
-dnl as being the final field in a struct, or a pointer to somewhere
-dnl else. The former is the standardly thing to do, but mingw defns
-dnl have for the longest time gone for the latter. They no longer do,
-dnl hence the need to configure test for this.
-dnl
-dnl
-AC_DEFUN(FP_DIRENT_FLAT_LAYOUT,
-[AC_CACHE_CHECK([if struct dirent layout is flat], fptools_cv_dirent_flat_layout,
-[AC_RUN_IFELSE([AC_LANG_SOURCE([[#include <dirent.h>
-#include <stdio.h>
-#include <string.h>
-int
-main(argc, argv)
-int argc;
-char **argv;
-{
- struct dirent de;
- /*
- * Check whether d_name is defined as
- * struct dirent { .... ; char d_name[..]; }
- * or
- * struct dirent { .... ; char* d_name; }
- *
- * Returns 0 if the former.
- */
- memset(&de,0,sizeof(struct dirent));
- return ((int)de.d_name == 0);
-}]])],[fptools_cv_dirent_flat_layout=yes],[fptools_cv_dirent_flat_layout=no],[fptools_cv_dirent_flat_layout=yes])])
-dnl the cross value is somewhat bogus.
-if test "$fptools_cv_dirent_flat_layout" = yes; then
-AC_DEFINE([STRUCT_DIRENT_FLAT_LAYOUT], [1], [Define to 1 if struct dirent is a flat structure])
-fi
+
+dnl ** Map an arithmetic C type to a Haskell type.
+dnl Based on autconf's AC_CHECK_SIZEOF.
+
+dnl FPTOOLS_CHECK_HTYPE(TYPE [, DEFAULT_VALUE ])
+AC_DEFUN([FPTOOLS_CHECK_HTYPE],[
+ changequote(<<, >>)
+ dnl The name to #define.
+ define(<<AC_TYPE_NAME>>, translit(htype_$1, [a-z *], [A-Z_P]))
+ dnl The cache variable names.
+ define(<<AC_CV_NAME>>, translit(fptools_cv_htype_$1, [ *], [_p]))
+ define(<<AC_CV_NAME_supported>>, translit(fptools_cv_htype_sup_$1, [ *], [_p]))
+ changequote([, ])
+
+ AC_MSG_CHECKING(Haskell type for $1)
+ AC_CACHE_VAL(AC_CV_NAME,[
+ AC_CV_NAME_supported=yes
+ FP_COMPUTE_INT([HTYPE_IS_INTEGRAL],
+ [(($1)((int)(($1)1.4))) == (($1)1.4)],
+ [FPTOOLS_HTYPE_INCLUDES],[AC_CV_NAME_supported=no])
+ if test "$AC_CV_NAME_supported" = "yes"
+ then
+ if test "$HTYPE_IS_INTEGRAL" -eq 0
+ then
+ FP_COMPUTE_INT([HTYPE_IS_FLOAT],[sizeof($1) == sizeof(float)],
+ [FPTOOLS_HTYPE_INCLUDES],
+ [AC_CV_NAME_supported=no])
+ FP_COMPUTE_INT([HTYPE_IS_DOUBLE],[sizeof($1) == sizeof(double)],
+ [FPTOOLS_HTYPE_INCLUDES],
+ [AC_CV_NAME_supported=no])
+ FP_COMPUTE_INT([HTYPE_IS_LDOUBLE],[sizeof($1) == sizeof(long double)],
+ [FPTOOLS_HTYPE_INCLUDES],
+ [AC_CV_NAME_supported=no])
+ if test "$HTYPE_IS_FLOAT" -eq 1
+ then
+ AC_CV_NAME=Float
+ elif test "$HTYPE_IS_DOUBLE" -eq 1
+ then
+ AC_CV_NAME=Double
+ elif test "$HTYPE_IS_LDOUBLE" -eq 1
+ then
+ AC_CV_NAME=LDouble
+ else
+ AC_CV_NAME_supported=no
+ fi
+ else
+ FP_COMPUTE_INT([HTYPE_IS_SIGNED],[(($1)(-1)) < (($1)0)],
+ [FPTOOLS_HTYPE_INCLUDES],
+ [AC_CV_NAME_supported=no])
+ FP_COMPUTE_INT([HTYPE_SIZE],[sizeof($1) * 8],
+ [FPTOOLS_HTYPE_INCLUDES],
+ [AC_CV_NAME_supported=no])
+ if test "$HTYPE_IS_SIGNED" -eq 0
+ then
+ AC_CV_NAME="Word$HTYPE_SIZE"
+ else
+ AC_CV_NAME="Int$HTYPE_SIZE"
+ fi
+ fi
+ fi
+ ])
+ 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_CV_NAME=NotReallyAType
+ AC_MSG_RESULT([not supported])
+ fi
+ undefine([AC_TYPE_NAME])dnl
+ undefine([AC_CV_NAME])dnl
+ undefine([AC_CV_NAME_supported])dnl
+])
+
+
+# FP_SEARCH_LIBS_PROTO(WHAT, PROTOTYPE, FUNCTION, SEARCH-LIBS,
+# [ACTION-IF-FOUND], [ACTION-IF-NOT-FOUND],
+# [OTHER-LIBRARIES])
+# --------------------------------------------------------
+# Search for a library defining FUNC, if it's not already available.
+# This is a copy of the AC_SEARCH_LIBS definition, but extended to take
+# the name of the thing we are looking for as its first argument, and
+# prototype text as its second argument. It also calls AC_LANG_PROGRAM
+# instead of AC_LANG_CALL
+AC_DEFUN([FP_SEARCH_LIBS_PROTO],
+[AS_VAR_PUSHDEF([ac_Search], [ac_cv_search_$1])dnl
+AC_CACHE_CHECK([for library containing $1], [ac_Search],
+[ac_func_search_save_LIBS=$LIBS
+AC_LANG_CONFTEST([AC_LANG_PROGRAM([$2], [$3])])
+for ac_lib in '' $4; do
+ if test -z "$ac_lib"; then
+ ac_res="none required"
+ else
+ ac_res=-l$ac_lib
+ LIBS="-l$ac_lib $7 $ac_func_search_save_LIBS"
+ fi
+ AC_LINK_IFELSE([], [AS_VAR_SET([ac_Search], [$ac_res])])
+ AS_VAR_SET_IF([ac_Search], [break])
+done
+AS_VAR_SET_IF([ac_Search], , [AS_VAR_SET([ac_Search], [no])])
+rm conftest.$ac_ext
+LIBS=$ac_func_search_save_LIBS])
+ac_res=AS_VAR_GET([ac_Search])
+AS_IF([test "$ac_res" != no],
+ [test "$ac_res" = "none required" || LIBS="$ac_res $LIBS"
+ $5],
+ [$6])dnl
+AS_VAR_POPDEF([ac_Search])dnl