X-Git-Url: http://git.megacz.com/?p=ghc-base.git;a=blobdiff_plain;f=aclocal.m4;h=a8f54124ea9598c149cdb780ce0815f5cd5c4902;hp=f19b0526773a59285e2b7374abe39c2ed87b4035;hb=7a97ec4b12e1fbec5505f82032cf4dc435b5a60c;hpb=d212222228fafaa775c7d1b98caf9bb6d3fbf9bd diff --git a/aclocal.m4 b/aclocal.m4 index f19b052..a8f5412 100644 --- a/aclocal.m4 +++ b/aclocal.m4 @@ -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 @@ -40,7 +42,7 @@ m4_define([FP_CHECK_CONSTS_TEMPLATE], # FP_CHECK_CONSTS(EXPRESSION..., [INCLUDES = DEFAULT-INCLUDES], [VALUE-IF-FAIL = -1]) # ----------------------------------------------------------------------------------- # List version of FP_CHECK_CONST -AC_DEFUN(FP_CHECK_CONSTS, +AC_DEFUN([FP_CHECK_CONSTS], [FP_CHECK_CONSTS_TEMPLATE([$1])dnl for fp_const_name in $1 do @@ -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(<>, translit(htype_$1, [a-z *], [A-Z_P]))dnl -dnl The cache variable name. -define(<>, translit(fptools_cv_htype_$1, [ *], [_p]))dnl -define(<>, 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 +dnl FPTOOLS_HTYPE_INCLUDES +AC_DEFUN([FPTOOLS_HTYPE_INCLUDES], +[ +#include #include #if HAVE_SYS_TYPES_H @@ -105,108 +93,134 @@ AC_RUN_IFELSE([AC_LANG_SOURCE([[#include # include #endif -#if defined(HAVE_GL_GL_H) -# include -#elif defined(HAVE_OPENGL_GL_H) -# include -#endif - -#if defined(HAVE_AL_ALC_H) -# include -#elif defined(HAVE_OPENAL_ALC_H) -# include +#if HAVE_INTTYPES_H +# include +#else +# if HAVE_STDINT_H +# include +# endif #endif #if HAVE_SYS_RESOURCE_H # include #endif -typedef $1 testing; - -main() { - 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", - 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])])]) 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([not supported]) -fi -undefine([AC_TYPE_NAME])dnl -undefine([AC_CV_NAME])dnl -undefine([AC_CV_NAME_supported])dnl +#include ]) -# FP_READDIR_EOF_ERRNO -# -------------------- -# Defines READDIR_ERRNO_EOF to what readdir() sets 'errno' to upon reaching end -# of directory (not set => 0); not setting it is the correct thing to do, but -# MinGW based versions have set it to ENOENT until recently (summer 2004). -AC_DEFUN([FP_READDIR_EOF_ERRNO], -[AC_CACHE_CHECK([what readdir sets errno to upon EOF], [fptools_cv_readdir_eof_errno], -[AC_RUN_IFELSE([AC_LANG_SOURCE([[#include -#include -#include -int -main(argc, argv) -int argc; -char **argv; -{ - FILE *f=fopen("conftestval", "w"); -#if defined(__MINGW32__) - int fd = mkdir("testdir"); -#else - int fd = mkdir("testdir", 0666); -#endif - DIR* dp; - struct dirent* de; - int err = 0; - - if (!f) return 1; - if (fd == -1) { - fprintf(stderr,"unable to create directory; quitting.\n"); - return 1; - } - close(fd); - dp = opendir("testdir"); - if (!dp) { - fprintf(stderr,"unable to browse directory; quitting.\n"); - rmdir("testdir"); - return 1; - } - - /* the assumption here is that readdir() will only return NULL - * due to reaching the end of the directory. - */ - while (de = readdir(dp)) { - ; - } - err = errno; - fprintf(f,"%d", err); - fclose(f); - closedir(dp); - rmdir("testdir"); - return 0; -}]])], -[fptools_cv_readdir_eof_errno=`cat conftestval`], -[AC_MSG_WARN([failed to determine the errno value]) - fptools_cv_readdir_eof_errno=0], -[fptools_cv_readdir_eof_errno=0])]) -AC_DEFINE_UNQUOTED([READDIR_ERRNO_EOF], [$fptools_cv_readdir_eof_errno], [readdir() sets errno to this upon EOF]) -])# FP_READDIR_EOF_ERRNO +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(<>, translit(htype_$1, [a-z *], [A-Z_P])) + dnl The cache variable names. + define(<>, translit(fptools_cv_htype_$1, [ *], [_p])) + define(<>, 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 + $2 + 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], +# [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 +])