Use CAPI for lseek
[packages/base.git] / aclocal.m4
index 5e82969..6e9801f 100644 (file)
@@ -7,8 +7,10 @@
 # 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
 
 
@@ -19,7 +21,7 @@ AC_DEFUN([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
@@ -49,24 +51,10 @@ done
 ])# FP_CHECK_CONSTS
 
 
-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, [, VALUE-FOR-CROSS-COMPILATION])
-AC_DEFUN([FPTOOLS_CHECK_HTYPE],
-[changequote(<<, >>)dnl
-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_CV_NAME_supported=yes
-fp_check_htype_save_cppflags="$CPPFLAGS"
-CPPFLAGS="$CPPFLAGS $X_CFLAGS"
-AC_RUN_IFELSE([AC_LANG_SOURCE([[#include <stdio.h>
+dnl FPTOOLS_HTYPE_INCLUDES
+AC_DEFUN([FPTOOLS_HTYPE_INCLUDES],
+[
+#include <stdio.h>
 #include <stddef.h>
 
 #if HAVE_SYS_TYPES_H
@@ -118,36 +106,92 @@ AC_RUN_IFELSE([AC_LANG_SOURCE([[#include <stdio.h>
 #endif
 
 #include <stdlib.h>
+])
+
+
+dnl ** Map an arithmetic C type to a Haskell type.
+dnl    Based on autconf's AC_CHECK_SIZEOF.
+
+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]))
+    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" = 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])
+    fi
+    undefine([AC_TYPE_NAME])dnl
+    undefine([AC_CV_NAME])dnl
+    undefine([AC_CV_NAME_supported])dnl
+])
 
-typedef $1 testing;
-
-int main(void) {
-  FILE *f=fopen("conftestval", "w");
-  if (!f) exit(1);
-  if (((testing)((int)((testing)1.4))) == ((testing)1.4)) {
-    fprintf(f, "%s%d\n",
-           ((testing)(-1) < (testing)0) ? "Int" : "Word",
-           (int)(sizeof(testing)*8));
-  } else {
-    fprintf(f,"%s\n",
-           (sizeof(testing) >  sizeof(double)) ? "LDouble" :
-           (sizeof(testing) == sizeof(double)) ? "Double"  : "Float");
-  }
-  fclose(f);
-  exit(0);
-}]])],[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])])
-CPPFLAGS="$fp_check_htype_save_cppflags"]) dnl
-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([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])
+    ])
 ])