-dnl $Id: aclocal.m4,v 1.121 2003/07/30 09:21:12 wolfgang Exp $
-dnl
-dnl Extra autoconf macros for the Glasgow fptools
-dnl
-dnl To be a good autoconf citizen, names of local macros have
-dnl prefixed with FPTOOLS_ to ensure we don't clash
-dnl with any pre-supplied autoconf ones.
-
-dnl
-dnl Is timezone around? (in a header file)
-dnl
-AC_DEFUN(FPTOOLS_HAVE_TIMEZONE,
-[AC_CACHE_CHECK([timezone], fptools_cv_have_timezone,
-[AC_TRY_COMPILE([#if TIME_WITH_SYS_TIME
-# include <sys/time.h>
-# include <time.h>
-#else
-# if HAVE_SYS_TIME_H
-# include <sys/time.h>
-# else
-# include <time.h>
-# endif
-#endif
-], [return timezone;],
-fptools_cv_have_timezone=yes, fptools_cv_have_timezone=no)])
-if test "$fptools_cv_have_timezone" = yes; then
- AC_DEFINE(HAVE_TIMEZONE)
-fi
-])
-
-dnl
-dnl Has timezone the type time_t or long (HP-UX 10.20 apparently
-dnl has `long'..)
-dnl
-AC_DEFUN(FPTOOLS_TYPE_TIMEZONE,
-[AC_CACHE_CHECK([type of timezone], fptools_cv_type_timezone,
-[AC_TRY_COMPILE([#if TIME_WITH_SYS_TIME
-# include <sys/time.h>
-# include <time.h>
-#else
-# if HAVE_SYS_TIME_H
-# include <sys/time.h>
-# else
-# include <time.h>
-# endif
-#endif
-
-extern time_t timezone;
-],
-[int i;], fptools_cv_type_timezone=time_t, fptools_cv_type_timezone=long)])
-AC_DEFINE_UNQUOTED(TYPE_TIMEZONE, $fptools_cv_type_timezone)
-])
-
-dnl *** Is altzone available? ***
-dnl
-AC_DEFUN(FPTOOLS_ALTZONE,
-[AC_CACHE_CHECK([altzone], fptools_cv_altzone,
-[AC_TRY_LINK([#if TIME_WITH_SYS_TIME
+# Extra autoconf macros for the Glasgow fptools
+#
+# To be a good autoconf citizen, names of local macros have prefixed with FP_ to
+# ensure we don't clash with any pre-supplied autoconf ones.
+
+
+# FP_ALTZONE
+# -------------------
+# Defines HAVE_DECL_ALTZONE to 1 if declared, 0 otherwise.
+# Used by base package.
+AC_DEFUN([FP_ALTZONE],
+[AC_REQUIRE([AC_HEADER_TIME])dnl
+AC_CHECK_HEADERS([sys/time.h])
+AC_CHECK_DECLS([altzone], [], [],[#if TIME_WITH_SYS_TIME
# include <sys/time.h>
# include <time.h>
#else
# else
# include <time.h>
# endif
-#endif
-], [return altzone;],
-fptools_cv_altzone=yes, fptools_cv_altzone=no)])
-if test "$fptools_cv_altzone" = yes; then
- AC_DEFINE(HAVE_ALTZONE)
-fi
-])
-
-
-dnl *** Does libc contain GNU regex? ***
-dnl
-AC_DEFUN(FPTOOLS_REGEX_IN_LIBC,
-[AC_CACHE_CHECK([for GNU regex in libc], fptools_cv_have_regex,
-[AC_TRY_LINK([#if HAVE_UNISTD_H
-#include <unistd.h>
-#endif
-#include <regex.h>
-],[ struct re_pattern_buffer patbuf;
- re_compile_pattern("",0,&patbuf);
- re_search_2 (&patbuf, "", 0, "",0, 0,0,0,0); ],
-fptools_cv_have_regex=yes, fptools_cv_have_regex=no)])
-if test "$fptools_cv_have_regex" = yes; then
- HaveGNURegex=YES
+#endif])
+])# FP_ALTZONE
+
+
+# FP_COMPUTE_INT(EXPRESSION, VARIABLE, INCLUDES, IF-FAILS)
+# ---------------------------------------------------------
+# Assign VARIABLE the value of the compile-time EXPRESSION using INCLUDES for
+# compilation. Execute IF-FAILS when unable to determine the value. Works for
+# cross-compilation, too.
+# 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.
+AC_DEFUN([FP_COMPUTE_INT],
+[_AC_COMPUTE_INT([$1], [$2], [$3], [$4])[]dnl
+])# FP_COMPUTE_INT
+
+
+# FP_CHECK_ALIGNMENT(TYPE, [IGNORED], [INCLUDES = DEFAULT-INCLUDES])
+# ------------------------------------------------------------------
+# A variation of AC_CHECK_SIZEOF for computing the alignment restrictions of a
+# given type. Defines ALIGNMENT_TYPE.
+AC_DEFUN([FP_CHECK_ALIGNMENT],
+[AS_LITERAL_IF([$1], [],
+ [AC_FATAL([$0: requires literal arguments])])dnl
+AC_CHECK_TYPE([$1], [], [], [$3])
+AC_CACHE_CHECK([alignment of $1], AS_TR_SH([fp_cv_alignment_$1]),
+[if test "$AS_TR_SH([ac_cv_type_$1])" = yes; then
+ FP_COMPUTE_INT([(long) (&((struct { char c; $1 ty; } *)0)->ty)],
+ [AS_TR_SH([fp_cv_alignment_$1])],
+ [AC_INCLUDES_DEFAULT([$3])],
+ [AC_MSG_FAILURE([cannot compute alignment ($1), 77])])
else
- HaveGNURegex=NO
-fi
-AC_SUBST(HaveGNURegex)
-])
+ AS_TR_SH([fp_cv_alignment_$1])=0
+fi])dnl
+AC_DEFINE_UNQUOTED(AS_TR_CPP(alignment_$1), $AS_TR_SH([fp_cv_alignment_$1]),
+ [The alignment of a `$1'.])
+])# FP_CHECK_ALIGNMENT
dnl ** check for leading underscores in symbol names
dnl to work around this by checking for *no* leading underscore first.
dnl Sigh. --SDM
dnl
+dnl Similarly on OpenBSD, but this test doesn't help. -- dons
+dnl
AC_DEFUN(FPTOOLS_UNDERSCORE,
[AC_CHECK_LIB(elf, nlist, LIBS="-lelf $LIBS")dnl
AC_CACHE_CHECK([leading underscore in symbol names], fptools_cv_lead_uscore,
changequote(<<, >>)dnl
<<
case $HostPlatform in
+*openbsd*) # x86 openbsd is ELF from 3.4 >, meaning no leading uscore
+ case $build in
+ i386-*2\.[[0-9]] | i386-*3\.[[0-3]] ) fptools_cv_lead_uscore='yes' ;;
+ *) fptools_cv_lead_uscore='no' ;;
+ esac ;;
alpha-dec-osf*) fptools_cv_lead_uscore='no';;
*cygwin32) fptools_cv_lead_uscore='yes';;
*mingw32) fptools_cv_lead_uscore='yes';;
])
dnl
+dnl Check for Alex and version. If we're building GHC, then we need
+dnl at least Alex version 2.0. If there's no installed Alex, we look
+dnl for a alex source tree and point the build system at that instead.
+dnl
+AC_DEFUN(FPTOOLS_ALEX,
+[
+if test -d $srcdir/alex; then
+ SrcTreeAlexCmd=$hardtop/alex/src/alex-inplace
+fi
+if test x"$UseSrcTreeAlex" = xYES; then
+ AlexCmd=$SrcTreeAlexCmd
+else
+ AC_PATH_PROG(AlexCmd,alex,$SrcTreeAlexCmd)
+fi
+AC_CACHE_CHECK([for version of alex], fptools_cv_alex_version,
+changequote(, )dnl
+[if test x"$AlexCmd" = x"$SrcTreeAlexCmd"; then
+ fptools_cv_alex_version=`grep '^ProjectVersion[ ]*=' $srcdir/alex/mk/version.mk | sed 's/.*\([0-9][0-9]*\.[0-9][0-9]*\).*/\1/g'`;
+elif test x"$AlexCmd" != x; then
+ fptools_cv_alex_version="`$AlexCmd -v |
+ grep 'Alex [Vv]ersion' | sed -e 's/Alex [Vv]ersion \([0-9\.]*\).*/\1/g'`" ;
+else
+ fptools_cv_alex_version="";
+fi;
+changequote([, ])dnl
+])
+dnl if test -d $srcdir/ghc -a ! -f $srcdir/ghc/compiler/parser/Lexer.hs; then
+dnl FPTOOLS_PROG_CHECK_VERSION([$fptools_cv_alex_version],-lt,[2.0],
+dnl [AC_MSG_ERROR([Alex version 2.0 or later is required to compile GHC.])])dnl
+dnl fi
+AlexVersion=$fptools_cv_alex_version;
+AC_SUBST(AlexVersion)
+])
+
+dnl
dnl What's the best way of doing context diffs?
dnl
dnl (NB: NeXTStep thinks diff'ing a file against itself is "trouble")
AC_SUBST(LdXFlag)
])
-dnl
-dnl Finding the Right Yacc
-dnl
-AC_DEFUN(FPTOOLS_PROG_YACCY,
-[AC_PROG_YACC
-if test "$YACC" = "yacc"; then
- AC_CACHE_CHECK([if it is an OK yacc], ac_cv_prog_yacc,
- [AC_CHECK_PROG(WhatCmd, what, what, :)
- $WhatCmd $YACC > conftest.out
- if egrep 'y1\.c 1\..*SMI' conftest.out >/dev/null 2>&1; then
- echo "I don't trust your $YaccCmd; it looks like an old Sun yacc"
- if test -f /usr/lang/yacc; then
- echo "I'm going to use /usr/lang/yacc instead"
- ac_cv_prog_yacc=/usr/lang/yacc
- else
- echo "I'm assuming the worst...no parser generator at all"
- ac_cv_prog_yacc=:
- fi
- elif egrep 'y1\.c.*Revision: 4\.2\.6\.3.*DEC' conftest.out >/dev/null 2>&1; then
- echo "I don't trust your $YaccCmd; it looks like a lame DEC yacc"
- echo "I'm assuming the worst...no parser generator at all"
- ac_cv_prog_yacc=:
- else
- ac_cv_prog_yacc=$YACC
- fi
- rm -fr conftest*
-])
-else
- ac_cv_prog_yacc=$YACC
-fi
-YaccCmd=$ac_cv_prog_yacc
-AC_SUBST(YaccCmd)
-])
dnl *** Checking for ar and its arguments + whether we need ranlib.
dnl
])dnl
-dnl ** figure out the alignment restriction of a type
-dnl (required SIZEOF test but AC_CHECK_SIZEOF doesn't call PROVIDE
-dnl so we can't call REQUIRE)
-
-dnl FPTOOLS_CHECK_ALIGNMENT(TYPE)
-AC_DEFUN(FPTOOLS_CHECK_ALIGNMENT,
-[changequote(<<, >>)dnl
-dnl The name to #define.
-define(<<AC_TYPE_NAME>>, translit(alignment_$1, [a-z *], [A-Z_P]))dnl
-dnl The cache variable name.
-define(<<AC_CV_NAME>>, translit(ac_cv_alignment_$1, [ *], [_p]))dnl
-dnl The name of the corresponding size.
-define(<<AC_CV_SIZEOF_NAME>>, translit(ac_cv_sizeof_$1, [ *], [_p]))dnl
-changequote([, ])dnl
-AC_MSG_CHECKING(alignment of $1)
-AC_CACHE_VAL(AC_CV_NAME,
-[AC_TRY_RUN([
-#include <stdio.h>
-#if HAVE_STDDEF_H
-#include <stddef.h>
-#endif
-#ifndef offsetof
-#define offsetof(ty,field) ((size_t)((char *)&((ty *)0)->field - (char *)(ty *)0))
-#endif
-int
-main()
-{
- FILE *f=fopen("conftestval", "w");
- if (!f) exit(1);
- fprintf(f, "%d", offsetof(struct { char c; $1 ty;},ty));
- exit(0);
-}],
-AC_CV_NAME=`cat conftestval`,
-AC_CV_NAME=$AC_CV_SIZEOF_NAME,
-AC_CV_NAME=$AC_CV_SIZEOF_NAME)])
-AC_MSG_RESULT($AC_CV_NAME)
-AC_DEFINE_UNQUOTED(AC_TYPE_NAME, $AC_CV_NAME)
-AC_PROVIDE($AC_TYPE_NAME)
-undefine([AC_TYPE_NAME])dnl
-undefine([AC_CV_NAME])dnl
-undefine([AC_CV_SIZEOF_NAME])dnl
-])
-
dnl ** Map an arithmetic C type to a Haskell type.
dnl Based on autconf's AC_CHECK_SIZEOF.
undefine([AC_CV_NAME])dnl
])
-dnl ** figure out whether C compiler supports 'long long's
-dnl (Closely based on Andreas Zeller's macro for testing
-dnl for this under C++)
-dnl
-dnl If the C compiler supports `long long' types,
-dnl define `HAVE_LONG_LONG'.
-dnl
-AC_DEFUN(FPTOOLS_C_LONG_LONG,
-[
-AC_REQUIRE([AC_PROG_CC])
-AC_MSG_CHECKING(whether ${CC} supports long long types)
-AC_CACHE_VAL(fptools_cv_have_long_long,
-[
-AC_LANG_SAVE
-AC_LANG_C
-AC_TRY_COMPILE(,[long long a;],
-fptools_cv_have_long_long=yes,
-fptools_cv_have_long_long=no)
-AC_LANG_RESTORE
-])
-AC_MSG_RESULT($fptools_cv_have_long_long)
-if test "$fptools_cv_have_long_long" = yes; then
-AC_DEFINE(HAVE_LONG_LONG)
-fi
-])
dnl ** Obtain the value of a C constant.
dnl The value will be `(-1)' if the constant is undefined.
# LocalWords: fi
-dnl
-dnl acspecific.m4's defn of AC_PROG_LEX is a bit too permissive, as it
-dnl defaults to 'lex' if 'flex' isn't found (without checking whether
-dnl 'lex' is actually present along the user's PATH).
-dnl
-AC_DEFUN(AC_PROG_LEX_STRICT,
-[AC_CHECK_PROG(LEX, flex, flex)
-if test -z "$LEX"
-then
- AC_CHECK_PROG(LEX,lex,lex)
- test -z "$LEX" && AC_MSG_ERROR(['lex' or 'flex' is required to compile GHC.])
-fi
-])
dnl
dnl Check to see whether CC (gcc) supports a particular option.