# Implementation note: We are lazy and use an internal autoconf macro, but it
# is supported in autoconf versions 2.50 up to the actual 2.57, so there is
# little risk.
+# The public AC_COMPUTE_INT macro isn't supported by some versions of
+# autoconf.
AC_DEFUN([FP_COMPUTE_INT],
-[_AC_COMPUTE_INT([$1], [$2], [$3], [$4])[]dnl
+[_AC_COMPUTE_INT([$2], [$1], [$3], [$4])[]dnl
])# FP_COMPUTE_INT
AC_DEFUN([FP_CHECK_CONST],
[AS_VAR_PUSHDEF([fp_Cache], [fp_cv_const_$1])[]dnl
AC_CACHE_CHECK([value of $1], fp_Cache,
-[FP_COMPUTE_INT([$1], fp_check_const_result, [AC_INCLUDES_DEFAULT([$2])],
+[FP_COMPUTE_INT(fp_check_const_result, [$1], [AC_INCLUDES_DEFAULT([$2])],
[fp_check_const_result=m4_default([$3], ['-1'])])
AS_VAR_SET(fp_Cache, [$fp_check_const_result])])[]dnl
AC_DEFINE_UNQUOTED(AS_TR_CPP([CONST_$1]), AS_VAR_GET(fp_Cache), [The value of $1.])[]dnl
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],[
+dnl FPTOOLS_CHECK_HTYPE_ELSE(TYPE, WHAT_TO_DO_IF_TYPE_DOES_NOT_EXIST)
+AC_DEFUN([FPTOOLS_CHECK_HTYPE_ELSE],[
changequote(<<, >>)
dnl The name to #define.
define(<<AC_TYPE_NAME>>, translit(htype_$1, [a-z *], [A-Z_P]))
AC_MSG_CHECKING(Haskell type for $1)
AC_CACHE_VAL(AC_CV_NAME,[
AC_CV_NAME_supported=yes
- AC_COMPUTE_INT([HTYPE_IS_INTEGRAL],
+ 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
- AC_COMPUTE_INT([HTYPE_IS_FLOAT],[sizeof($1) == sizeof(float)],
+ FP_COMPUTE_INT([HTYPE_IS_FLOAT],[sizeof($1) == sizeof(float)],
[FPTOOLS_HTYPE_INCLUDES],
[AC_CV_NAME_supported=no])
- AC_COMPUTE_INT([HTYPE_IS_DOUBLE],[sizeof($1) == sizeof(double)],
+ FP_COMPUTE_INT([HTYPE_IS_DOUBLE],[sizeof($1) == sizeof(double)],
[FPTOOLS_HTYPE_INCLUDES],
[AC_CV_NAME_supported=no])
- AC_COMPUTE_INT([HTYPE_IS_LDOUBLE],[sizeof($1) == sizeof(long double)],
+ 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
AC_CV_NAME_supported=no
fi
else
- AC_COMPUTE_INT([HTYPE_IS_SIGNED],[(($1)(-1)) < (($1)0)],
+ FP_COMPUTE_INT([HTYPE_IS_SIGNED],[(($1)(-1)) < (($1)0)],
[FPTOOLS_HTYPE_INCLUDES],
[AC_CV_NAME_supported=no])
- AC_COMPUTE_INT([HTYPE_SIZE],[sizeof($1) * 8],
+ FP_COMPUTE_INT([HTYPE_SIZE],[sizeof($1) * 8],
[FPTOOLS_HTYPE_INCLUDES],
[AC_CV_NAME_supported=no])
if test "$HTYPE_IS_SIGNED" -eq 0
fi
fi
])
+ if test "$AC_CV_NAME_supported" = no
+ then
+ $2
+ fi
+
+ dnl Note: evaluating dollar-2 can change the value of
+ dnl $AC_CV_NAME_supported, so we might now get a different answer
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
])
+dnl FPTOOLS_CHECK_HTYPE(TYPE)
+AC_DEFUN([FPTOOLS_CHECK_HTYPE],[
+ FPTOOLS_CHECK_HTYPE_ELSE([$1],[
+ AC_CV_NAME=NotReallyAType
+ AC_MSG_RESULT([not supported])
+ ])
+])
+
# FP_SEARCH_LIBS_PROTO(WHAT, PROTOTYPE, FUNCTION, SEARCH-LIBS,
# [ACTION-IF-FOUND], [ACTION-IF-NOT-FOUND],