-dnl $Id: aclocal.m4,v 1.37 1999/01/26 09:59:18 sof Exp $
+dnl $Id: aclocal.m4,v 1.54 2000/07/11 21:25:37 michaelw Exp $
dnl
dnl Extra autoconf macros for the Glasgow fptools
dnl
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
# endif
#endif
-extern time_t timezone;
+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 *** 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); ],
+fptools_cv_have_regex=yes, fptools_cv_have_regex=no)])
+if test "$fptools_cv_have_regex" = yes; then
+ HaveRegex=YES
+else
+ HaveRegex=NO
+fi
+AC_SUBST(HaveRegex)
+])
+
+
dnl ** check for leading underscores in symbol names
dnl
dnl Test for determining whether symbol names have a leading
])
dnl
-dnl Check for Happy and version.
+dnl Check for Happy and version. If we're building GHC, then we need
+dnl at least Happy version 1.6. If there's no installed Happy, we look
+dnl for a happy source tree and point the build system at that instead.
+dnl
+dnl ToDo: when we reset HappyCmd to the source tree, autoconf doesn't
+dnl seems to insert it in the cache file. sigh.
dnl
AC_DEFUN(FPTOOLS_HAPPY,
[AC_PATH_PROG(HappyCmd,happy)
fptools_cv_happy_version="`$HappyCmd -v |
changequote(, )dnl
grep 'Happy Version' | sed -e 's/Happy Version \([^ ]*\).*/\1/g'`" ;
-changequote([, ])dnl
+elif test -d $srcdir/happy; then
+ HappyCmd=$hardtop/happy/src/happy-inplace;
+ fptools_cv_happy_version=`grep '^ProjectVersion[ ]*=' $srcdir/happy/mk/version.mk | sed 's/.*\([0-9][0-9]*\.[0-9][0-9]*\).*/\1/g'`;
+ echo -n "using happy from the source tree... ";
else
fptools_cv_happy_version="";
fi;
-if expr "$fptools_cv_happy_version" "<" 1.4 > /dev/null 2>&1; then
- echo
- echo "Happy version 1.4 or later is required to compile GHC."
- exit 1;
+changequote([, ])dnl
+if expr "$fptools_cv_happy_version" "<" 1.6 > /dev/null 2>&1; then
+ if test -d $srcdir/ghc; then
+ echo
+ echo "Happy version 1.6 or later is required to compile GHC."
+ exit 1;
+ fi
fi;
])
-HappyVersion=$ac_cv_happy_version;
+HappyVersion=$fptools_cv_happy_version;
AC_SUBST(HappyVersion)
])
AC_SUBST(HaveGcc)
])
-dnl
-dnl FPTOOLS_PROG_GNUCPP gathers the path to the cpp that the
-dnl gcc driver calls upon.
-dnl
-dnl Substitutes: GNUCPP and RAWCPP (latter is 'GNUCPP -traditional')
-dnl
-AC_DEFUN(FPTOOLS_PROG_GNUCPP,
-[AC_CACHE_CHECK([how to invoke GNU cpp directly], fptools_cv_gnu_cpp,
-[if test "$HaveGcc" = "YES"; then
- echo > conftest.c
- gcc -v -E conftest.c >/dev/null 2>conftest.out
- # \x5c = backslash
- echo 'tr/\x5c/\//; /(\S+\/)cpp/ && print "[$]{1}cpp -iprefix [$]1";' > conftest.pl
- fptools_cv_gnu_cpp="`eval $PerlCmd -n conftest.pl conftest.out`"
- rm -fr conftest*
- else
- # We need to be able to invoke CPP directly, preferably
- # with input from stdin (mkdependHS and hscpp depend on
- # this at the moment).
- # Take a guess at what to use, this probably won't work.
- echo Warning: GNU cpp not found, using $CPP
- fptools_cv_gnu_cpp = $CPP
- fi
-])
-GNUCPP=$fptools_cv_gnu_cpp
-RAWCPP="$GNUCPP -traditional"
-AC_SUBST(GNUCPP)
-AC_SUBST(RAWCPP)
-])
-
dnl Small feature test for perl version. Assumes PerlCmd
dnl contains path to perl binary
dnl
AC_DEFUN(FPTOOLS_CHECK_PERL_VERSION,
[$PerlCmd -v >conftest.out 2>&1
-if grep "version 4" conftest.out >/dev/null 2>&1; then
- if grep "Patch level: 35" conftest.out >/dev/null 2>&1; then
- echo "
-************************************************************************
-Uh-oh...looks like you have Perl 4.035.
-
-Perl version 4.035 has a bug to do with recursion that will bite if
-you run the lit2texi script, when making Info files from
-literate files of various sorts. Either use perl5, the last version of perl4
-(4.036), or an older version (e.g., perl 4.019). Failing that, don't create
-any Info files :-)
-************************************************************************
-"
- fi
+if grep "version 5" conftest.out >/dev/null 2>&1; then
+ :
else
- if grep "version 5" conftest.out >/dev/null 2>&1; then
+ if grep "version 6" conftest.out >/dev/null 2>&1; then
:
else
- echo "I'm not sure if your version of perl will work,"
- echo "but it's worth a shot, eh?"
+ echo "Your version of perl probably won't work."
fi
fi
rm -fr conftest*
])
+dnl
+dnl FPTOOLS_GHC_VERSION
+dnl FPTOOLS_GHC_VERSION(version)
+dnl FPTOOLS_GHC_VERSION(major, minor [, patchlevel])
+dnl FPTOOLS_GHC_VERSION(version, major, minor, patchlevel)
+dnl
+dnl Test for version of installed ghc. Uses $GHC.
+dnl [original version pinched from c2hs]
+dnl
+AC_DEFUN(FPTOOLS_GHC_VERSION,
+[define([FPTOOLS_CV_GHC_VERSION], [fptools_cv_ghc_version])dnl
+AC_CACHE_CHECK([version of ghc], FPTOOLS_CV_GHC_VERSION, [dnl
+${GHC-ghc} --version > conftestghc 2>&1
+ cat conftestghc >&AC_FD_CC
+dnl `Useless Use Of cat' award...
+changequote(<<, >>)dnl
+ FPTOOLS_CV_GHC_VERSION=`cat conftestghc | sed -n -e 's/.* version \([0-9.]\+\(, patchlevel [0-9]\+\)\?\)/\1/;t PL;b;:PL s/, patchlevel */./;p'`
+changequote([, ])dnl
+ rm -fr conftest*
+ if test "[$]FPTOOLS_CV_GHC_VERSION" = ""
+ then
+ FPTOOLS_CV_GHC_VERSION='unknown'
+ fi])
+changequote(<<, >>)dnl
+FPTOOLS_CV_GHC_VERSION<<_major>>=`echo <<$>>FPTOOLS_CV_GHC_VERSION | sed -e 's/^\([0-9]\).*/\1/'`
+FPTOOLS_CV_GHC_VERSION<<_minor>>=`echo <<$>>FPTOOLS_CV_GHC_VERSION | sed -e 's/^[0-9]\.\([0-9]*\).*/\1/'`
+FPTOOLS_CV_GHC_VERSION<<_pl>>=`echo <<$>>FPTOOLS_CV_GHC_VERSION | sed -n -e 's/^[0-9]\.[0-9]*\.\([0-9]*\)/\1/p'`
+changequote([, ])dnl
+if test "[$]FPTOOLS_CV_GHC_VERSION[_pl]" = ""
+then
+ FPTOOLS_CV_GHC_VERSION[_all]="[$]FPTOOLS_CV_GHC_VERSION[_major].[$]FPTOOLS_CV_GHC_VERSION[_minor]"
+ FPTOOLS_CV_GHC_VERSION[_pl]="0"
+else
+ FPTOOLS_CV_GHC_VERSION[_all]="[$]FPTOOLS_CV_GHC_VERSION[_major].[$]FPTOOLS_CV_GHC_VERSION[_minor].[$]FPTOOLS_CV_GHC_VERSION[_pl]"
+fi
+ifelse($#, [1], [dnl
+[$1]="[$]FPTOOLS_CV_GHC_VERSION[_all]"
+], $#, [2], [dnl
+[$1]="[$]FPTOOLS_CV_GHC_VERSION[_major]"
+[$2]="[$]FPTOOLS_CV_GHC_VERSION[_minor]"
+], $#, [3], [dnl
+[$1]="[$]FPTOOLS_CV_GHC_VERSION[_major]"
+[$2]="[$]FPTOOLS_CV_GHC_VERSION[_minor]"
+[$3]="[$]FPTOOLS_CV_GHC_VERSION[_pl]"
+], $#, [4], [dnl
+[$1]="[$]FPTOOLS_CV_GHC_VERSION[_all]"
+[$2]="[$]FPTOOLS_CV_GHC_VERSION[_major]"
+[$3]="[$]FPTOOLS_CV_GHC_VERSION[_minor]"
+[$4]="[$]FPTOOLS_CV_GHC_VERSION[_pl]"
+], [AC_MSG_ERROR([wrong number of arguments to $0])])dnl
+undefine(FPTOOLS_CV_GHC_VERSION)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)
undefine([AC_CV_SIZEOF_NAME])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, [, 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
+changequote([, ])dnl
+AC_MSG_CHECKING(Haskell type for $1)
+AC_CACHE_VAL(AC_CV_NAME,
+[AC_TRY_RUN([#include <stdio.h>
+#include <stddef.h>
+#ifdef HAVE_SIGNAL_H
+#include <signal.h>
+#endif
+#ifdef HAVE_TIME_H
+#include <time.h>
+#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=$2),
+ifelse([$3], , AC_CV_NAME=NotReallyATypeCross, AC_CV_NAME=$3))]) dnl
+AC_MSG_RESULT($AC_CV_NAME)
+AC_DEFINE_UNQUOTED(AC_TYPE_NAME, $AC_CV_NAME)
+undefine([AC_TYPE_NAME])dnl
+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++)
AC_DEFUN(FPTOOLS_END_TEXT_SECTION,
[AC_MSG_CHECKING([for end of text section marker])
not_done=1
-for i in etext _etext __etext; do
+for i in data_start _data_start etext _etext __etext; do
FPTOOLS_IN_SCOPE($i,$i,fptools_end_of_text)
if test "$fptools_end_of_text" = yes; then
AC_CACHE_VAL([fptools_cv_end_of_text_decl], AC_DEFINE_UNQUOTED(TEXT_SECTION_END_MARKER_DECL, $i))
fi
])
+dnl ** Check which CATALOG file we have to use with DocBook SGML.
+dnl
+dnl FPTOOLS_DOCBOOK_CATALOG(VARIABLE, JADE, STYLESHEET, CATALOGS-TO-CHECK-FOR)
+dnl
+dnl If any of the catalogs given in CATALOGS-TO-CHECK-FOR works on this
+dnl platform, let VARIABLE refer to this catalog; otherwise, VARIABLE
+dnl is set to "no". JADE is the jade executable and STYLESHEET
+dnl a DocBook style sheet.
+dnl
+AC_DEFUN(FPTOOLS_DOCBOOK_CATALOG,
+[AC_CACHE_CHECK([for DocBook CATALOG], fptools_cv_sgml_catalog,
+[
+cat > conftest.sgml << EOF
+<!DOCTYPE Article PUBLIC "-//OASIS//DTD DocBook V3.1//EN">
+<Article>
+<ArtHeader>
+<Title>Test</Title>
+<Author><OtherName>Test</OtherName></Author>
+<Address>Test</Address>
+<PubDate>Test</PubDate>
+</ArtHeader>
+<Sect1><Title>Test</Title>
+<Para>
+Test.
+</Para>
+</Sect1>
+</Article>
+EOF
+fptools_cv_sgml_catalog=no
+for fptools_catalog in $4; do
+ ac_try="$2 -t rtf -d $3#print -c $fptools_catalog conftest.sgml"
+ if AC_TRY_EVAL(ac_try); then
+ fptools_cv_sgml_catalog=[$]fptools_catalog
+ break
+ fi
+done
+])
+rm -rf conftest*
+if test $fptools_cv_sgml_catalog != "no"; then
+ $1=$fptools_cv_sgml_catalog
+fi
+])
+
# LocalWords: fi