[project @ 2001-11-06 05:08:52 by chak]
[ghc-hetmet.git] / aclocal.m4
index 78acbcb..eb7b0ca 100644 (file)
@@ -1,4 +1,4 @@
-dnl $Id: aclocal.m4,v 1.65 2001/01/18 12:27:42 sewardj Exp $
+dnl $Id: aclocal.m4,v 1.86 2001/10/24 09:43:47 simonmar Exp $
 dnl 
 dnl Extra autoconf macros for the Glasgow fptools
 dnl
 dnl 
 dnl Extra autoconf macros for the Glasgow fptools
 dnl
@@ -81,7 +81,9 @@ AC_DEFUN(FPTOOLS_REGEX_IN_LIBC,
 #include <unistd.h>
 #endif
 #include <regex.h>
 #include <unistd.h>
 #endif
 #include <regex.h>
-],[ struct re_pattern_buffer patbuf; re_compile_pattern("",0,&patbuf); ],
+],[ 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
        HaveRegex=YES
 fptools_cv_have_regex=yes, fptools_cv_have_regex=no)])
 if test "$fptools_cv_have_regex" = yes; then
        HaveRegex=YES
@@ -153,36 +155,65 @@ esac
 ])
 
 dnl
 ])
 
 dnl
+dnl FPTOOLS_PROG_CHECK_VERSION(VERSIONSTR1, TEST, VERSIONSTR2,
+dnl                            ACTION-IF-TRUE [, ACTION-IF-FALSE])
+dnl
+dnl compare versions field-wise (separator is '.')
+dnl TEST is one of {-lt,-le,-eq,-ge,-gt}
+dnl
+dnl quite shell-independant and SUSv2 compliant code
+dnl
+dnl NOTE: the loop could be unrolled within autoconf, but the
+dnl       macro code would be a) longer and b) harder to debug... ;)
+dnl
+AC_DEFUN(FPTOOLS_PROG_CHECK_VERSION,
+[if ( IFS=".";
+      a="[$1]";  b="[$3]";
+      while test -n "$a$b"
+      do
+              set -- [$]a;  h1="[$]1";  shift 2>/dev/null;  a="[$]*"
+              set -- [$]b;  h2="[$]1";  shift 2>/dev/null;  b="[$]*"
+              test -n "[$]h1" || h1=0;  test -n "[$]h2" || h2=0
+              test [$]{h1} -eq [$]{h2} || break
+      done
+      test [$]{h1} [$2] [$]{h2}
+    )
+then ifelse([$4],,[:],[
+  $4])
+ifelse([$5],,,
+[else
+  $5])
+fi
+])])dnl
+
+
+dnl
 dnl Check for Happy and version.  If we're building GHC, then we need
 dnl at least Happy version 1.9.  If there's no installed Happy, we look
 dnl for a happy source tree and point the build system at that instead.
 dnl
 dnl Check for Happy and version.  If we're building GHC, then we need
 dnl at least Happy version 1.9.  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_DEFUN(FPTOOLS_HAPPY,
-[AC_PATH_PROG(HappyCmd,happy)
+[
+if test -d $srcdir/happy; then
+   SrcTreeHappyCmd=$hardtop/happy/src/happy-inplace
+fi
+AC_PATH_PROG(HappyCmd,happy,$SrcTreeHappyCmd)
 AC_CACHE_CHECK([for version of happy], fptools_cv_happy_version,
 AC_CACHE_CHECK([for version of happy], fptools_cv_happy_version,
-[if test x"$HappyCmd" != x; then
-   fptools_cv_happy_version="`$HappyCmd -v |
 changequote(, )dnl
 changequote(, )dnl
-                         grep 'Happy Version' | sed -e 's/Happy Version \([^ ]*\).*/\1/g'`" ;
-elif test -d $srcdir/happy; then
-   HappyCmd=$hardtop/happy/src/happy-inplace;
+[if test x"$HappyCmd" = x"$SrcTreeHappyCmd"; then
    fptools_cv_happy_version=`grep '^ProjectVersion[    ]*=' $srcdir/happy/mk/version.mk | sed 's/.*\([0-9][0-9]*\.[0-9][0-9]*\).*/\1/g'`;
    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... ";
+elif test x"$HappyCmd" != x; then
+   fptools_cv_happy_version="`$HappyCmd -v |
+                         grep 'Happy Version' | sed -e 's/Happy Version \([^ ]*\).*/\1/g'`" ;
 else
    fptools_cv_happy_version="";
 fi;
 changequote([, ])dnl
 else
    fptools_cv_happy_version="";
 fi;
 changequote([, ])dnl
-if expr "$fptools_cv_happy_version" "<" 1.9 > /dev/null 2>&1; then
-   if test -d $srcdir/ghc; then
-     echo
-     echo "Happy version 1.9 or later is required to compile GHC."
-     exit 1;
-   fi
-fi;
 ])
 ])
+if test -d $srcdir/ghc; then
+  FPTOOLS_PROG_CHECK_VERSION([$fptools_cv_happy_version],-lt,[1.9],
+  [AC_MSG_ERROR([Happy version 1.9 or later is required to compile GHC.])])dnl
+fi
 HappyVersion=$fptools_cv_happy_version;
 AC_SUBST(HappyVersion)
 ])
 HappyVersion=$fptools_cv_happy_version;
 AC_SUBST(HappyVersion)
 ])
@@ -214,6 +245,29 @@ AC_SUBST(ContextDiffCmd)
 ])
 
 dnl
 ])
 
 dnl
+dnl Check whether ld supports -x
+dnl
+AC_DEFUN(FPTOOLS_LD_X,
+[AC_CACHE_CHECK([whether ld understands -x], fptools_cv_ld_x,
+[
+echo 'foo() {}' > conftest.c
+${CC-cc} -c conftest.c
+if ${LdCmd} -r -x -o foo.o conftest.o; then
+   fptools_cv_ld_x=yes
+else
+   fptools_cv_ld_x=no
+fi
+rm -rf conftest.c conftest.o foo.o
+])
+if test "$fptools_cv_ld_x" = yes; then
+       LdXFlag=-x
+else
+       LdXFlag=
+fi
+AC_SUBST(LdXFlag)
+])
+
+dnl
 dnl Finding the Right Yacc
 dnl
 AC_DEFUN(FPTOOLS_PROG_YACCY,
 dnl Finding the Right Yacc
 dnl
 AC_DEFUN(FPTOOLS_PROG_YACCY,
@@ -249,7 +303,9 @@ AC_SUBST(YaccCmd)
 
 dnl *** Checking for ar and its arguments + whether we need ranlib.
 dnl
 
 dnl *** Checking for ar and its arguments + whether we need ranlib.
 dnl
-dnl ArCmd and RANLIB are AC_SUBST'ed
+dnl ArCmd, ArSupportsInput and RANLIB are AC_SUBST'ed
+dnl On Digital UNIX, we test for the -Z (compress) and
+dnl -input (take list of files from external file) flags.
 dnl 
 AC_DEFUN(FPTOOLS_PROG_AR_AND_RANLIB,
 [AC_PATH_PROG(ArCmd,ar)
 dnl 
 AC_DEFUN(FPTOOLS_PROG_AR_AND_RANLIB,
 [AC_PATH_PROG(ArCmd,ar)
@@ -257,7 +313,10 @@ if test -z "$ArCmd"; then
     echo "You don't seem to have ar in your PATH...I have no idea how to make a library"
     exit 1;
 fi
     echo "You don't seem to have ar in your PATH...I have no idea how to make a library"
     exit 1;
 fi
-if $ArCmd clqs conftest.a >/dev/null 2>/dev/null; then
+if $ArCmd clqsZ conftest.a >/dev/null 2>/dev/null; then
+    ArCmd="$ArCmd clqsZ"
+    NeedRanLib=''
+elif $ArCmd clqs conftest.a >/dev/null 2>/dev/null; then
     ArCmd="$ArCmd clqs"
     NeedRanLib=''
 elif $ArCmd cqs conftest.a >/dev/null 2>/dev/null; then
     ArCmd="$ArCmd clqs"
     NeedRanLib=''
 elif $ArCmd cqs conftest.a >/dev/null 2>/dev/null; then
@@ -279,6 +338,14 @@ fi
 rm -rf conftest*
 test -n "$ArCmd" && test -n "$verbose" && echo "        setting ArCmd to $ArCmd"
 AC_SUBST(ArCmd)
 rm -rf conftest*
 test -n "$ArCmd" && test -n "$verbose" && echo "        setting ArCmd to $ArCmd"
 AC_SUBST(ArCmd)
+if $ArCmd conftest.a -input /dev/null >/dev/null 2>/dev/null; then
+    ArSupportsInput='-input'
+else
+    ArSupportsInput=''
+fi
+rm -rf conftest*
+test -n "$ArSupportsInput" && test -n "$verbose" && echo "        setting ArSupportsInput to $ArSupportsInput"
+AC_SUBST(ArSupportsInput)
 if test -z "$NeedRanLib"; then
     RANLIB=':'
     test -n "$verbose" && echo "        setting RANLIB to $RANLIB"
 if test -z "$NeedRanLib"; then
     RANLIB=':'
     test -n "$verbose" && echo "        setting RANLIB to $RANLIB"
@@ -319,14 +386,28 @@ AC_DEFUN(FPTOOLS_HAVE_GCC,
     fptools_cv_have_gcc='no'
 else
 changequote(, )dnl
     fptools_cv_have_gcc='no'
 else
 changequote(, )dnl
-    cmd_string="`$CC -v 2>&1 | grep 'version ' | sed -e 's/.*version [^0-9]*\([0-9][0-9]*\)\.\([0-9][0-9]*\).*/expr 20 \\\< \1 \\\* 10 + \2/g' `"
+    is_gcc_v1="`$CC -v 2>&1 | grep 'version ' | sed -e 's/.*version [^0-9]*\([0-9][0-9]*\)\.\([0-9][0-9]*\).*/expr 2000 \\\>= \1 \\\* 1000 + \2/g' `"
+    is_gcc_v3="`$CC -v 2>&1 | grep 'version ' | sed -e 's/.*version [^0-9]*\([0-9][0-9]*\)\.\([0-9][0-9]*\).*/expr 3000 \\\<= \1 \\\* 1000 + \2/g' `"
 changequote([, ])dnl
 changequote([, ])dnl
-    if test `eval $cmd_string 2>/dev/null` != "1"; then
-       echo ''
-        echo "I'm not sure if your version of gcc will work,"
-        echo "but it's worth a shot, eh?"
-    fi
     fptools_cv_have_gcc='yes'
     fptools_cv_have_gcc='yes'
+    if test `eval $is_gcc_v1 2>/dev/null` = "1"; then
+        fptools_cv_have_gcc='no'
+        echo ""
+       echo "your gcc version appears to be ..."
+        $CC --version
+        echo "gcc prior to 2.0 and have never worked with ghc."
+        echo "we recommend 2.95.3, although versions back to 2.7.2 should be ok."
+        AC_MSG_ERROR([gcc 1.X has never been supported])
+    fi
+    if test `eval $is_gcc_v3 2>/dev/null` = "1"; then
+        fptools_cv_have_gcc='no'
+        echo ""
+       echo "your gcc version appears to be ..."
+        $CC --version
+        echo "gcc versions 3.0 and above are not yet supported."
+        echo "we recommend 2.95.3, although versions back to 2.7.2 should be ok."
+        AC_MSG_ERROR([gcc 3.0 and above is not currently supported])
+    fi
 fi
 ])
 HaveGcc=`echo $fptools_cv_have_gcc | sed 'y/yesno/YESNO/'`
 fi
 ])
 HaveGcc=`echo $fptools_cv_have_gcc | sed 'y/yesno/YESNO/'`
@@ -355,6 +436,42 @@ rm -fr conftest*
 ])
 
 dnl
 ])
 
 dnl
+dnl Getting at the right version of 'find'
+dnl (i.e., not the MS util on a Win32 box).
+dnl
+AC_DEFUN(FPTOOLS_FIND_FIND,
+[
+AC_PATH_PROG(Find2Cmd, find)
+$Find2Cmd --version > conftest.out 2>&1 
+if grep "FIND: Parameter format" conftest.out >/dev/null 2>&1 ; then
+   # Encountered MS' find utility, which is not what we're after.
+   #
+   # HACK - AC_CHECK_PROG is useful here in that does let you reject
+   # an (absolute) entry in the path (Find2Cmd). It is not so useful
+   # in that it doesn't let you (AFAIU) set VARIABLE equal to the 
+   # absolute path eventually found. So, hack around this by inspecting
+   # what variables hold the abs. path & use them directly.
+   AC_CHECK_PROG(FindCmd,find,`echo $ac_dir/$ac_word`,find,,$Find2Cmd)
+else
+FindCmd=$Find2Cmd
+AC_SUBST(FindCmd)
+fi
+])
+
+dnl
+dnl FPTOOLS_NOCACHE_CHECK prints a message, then sets the
+dnl values of the second argument to the result of running
+dnl the commands given by the third. It does not cache its
+dnl result, so it is suitable for checks which should be
+dnl run every time.
+dnl
+AC_DEFUN(FPTOOLS_NOCACHE_CHECK,
+[AC_MSG_CHECKING([$1])
+ $3
+ AC_MSG_RESULT([$][$2])
+])
+
+dnl
 dnl FPTOOLS_GHC_VERSION(version)
 dnl FPTOOLS_GHC_VERSION(major, minor [, patchlevel])
 dnl FPTOOLS_GHC_VERSION(version, major, minor, patchlevel)
 dnl FPTOOLS_GHC_VERSION(version)
 dnl FPTOOLS_GHC_VERSION(major, minor [, patchlevel])
 dnl FPTOOLS_GHC_VERSION(version, major, minor, patchlevel)
@@ -363,47 +480,44 @@ dnl Test for version of installed ghc.  Uses $GHC.
 dnl [original version pinched from c2hs]
 dnl
 AC_DEFUN(FPTOOLS_GHC_VERSION,
 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
-${WithGhc-ghc} --version > conftestghc 2>&1
+[FPTOOLS_NOCACHE_CHECK([version of ghc], [fptools_version_of_ghc],
+[${WithGhc-ghc} --version > conftestghc 2>&1
   cat conftestghc >&AC_FD_CC
   cat conftestghc >&AC_FD_CC
-dnl `Useless Use Of cat' award...
-changequote(<<, >>)dnl
-  FPTOOLS_CV_GHC_VERSION=`cat conftestghc | sed -n -e 's/, patchlevel *\([0-9]\)/.\1/;s/.* version \([0-9][0-9.]*\).*/\1/p'`
-changequote([, ])dnl
+#Useless Use Of cat award...
+  fptools_version_of_ghc=`cat conftestghc | sed -n -e 's/, patchlevel *\([[0-9]]\)/.\1/;s/.* version \([[0-9]][[0-9.]]*\).*/\1/p'`
   rm -fr conftest*
   rm -fr conftest*
-  if test "[$]FPTOOLS_CV_GHC_VERSION" = ""
+  if test "[$]fptools_version_of_ghc" = ""
   then
   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]" = ""
+    fptools_version_of_ghc='unknown'
+  fi
+fptools_version_of_ghc[_major]=`echo [$]fptools_version_of_ghc | sed -e 's/^\([[0-9]]\).*/\1/'`
+fptools_version_of_ghc[_minor]=`echo [$]fptools_version_of_ghc | sed -e 's/^[[0-9]]\.\([[0-9]]*\).*/\1/'`
+fptools_version_of_ghc[_pl]=`echo [$]fptools_version_of_ghc | sed -n -e 's/^[[0-9]]\.[[0-9]]*\.\([[0-9]]*\)/\1/p'`
+#
+if test "[$]fptools_version_of_ghc[_pl]" = ""
 then
 then
-  FPTOOLS_CV_GHC_VERSION[_all]="[$]FPTOOLS_CV_GHC_VERSION[_major].[$]FPTOOLS_CV_GHC_VERSION[_minor]"
-  FPTOOLS_CV_GHC_VERSION[_pl]="0"
+  fptools_version_of_ghc[_all]="[$]fptools_version_of_ghc[_major].[$]fptools_version_of_ghc[_minor]"
+  fptools_version_of_ghc[_pl]="0"
 else
 else
-  FPTOOLS_CV_GHC_VERSION[_all]="[$]FPTOOLS_CV_GHC_VERSION[_major].[$]FPTOOLS_CV_GHC_VERSION[_minor].[$]FPTOOLS_CV_GHC_VERSION[_pl]"
+  fptools_version_of_ghc[_all]="[$]fptools_version_of_ghc[_major].[$]fptools_version_of_ghc[_minor].[$]fptools_version_of_ghc[_pl]"
 fi
 fi
+#
 ifelse($#, [1], [dnl
 ifelse($#, [1], [dnl
-[$1]="[$]FPTOOLS_CV_GHC_VERSION[_all]"
+[$1]="[$]fptools_version_of_ghc[_all]"
 ], $#, [2], [dnl
 ], $#, [2], [dnl
-[$1]="[$]FPTOOLS_CV_GHC_VERSION[_major]"
-[$2]="[$]FPTOOLS_CV_GHC_VERSION[_minor]"
+[$1]="[$]fptools_version_of_ghc[_major]"
+[$2]="[$]fptools_version_of_ghc[_minor]"
 ], $#, [3], [dnl
 ], $#, [3], [dnl
-[$1]="[$]FPTOOLS_CV_GHC_VERSION[_major]"
-[$2]="[$]FPTOOLS_CV_GHC_VERSION[_minor]"
-[$3]="[$]FPTOOLS_CV_GHC_VERSION[_pl]"
+[$1]="[$]fptools_version_of_ghc[_major]"
+[$2]="[$]fptools_version_of_ghc[_minor]"
+[$3]="[$]fptools_version_of_ghc[_pl]"
 ], $#, [4], [dnl
 ], $#, [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
+[$1]="[$]fptools_version_of_ghc[_all]"
+[$2]="[$]fptools_version_of_ghc[_major]"
+[$3]="[$]fptools_version_of_ghc[_minor]"
+[$4]="[$]fptools_version_of_ghc[_pl]"
+])
+])
 ])dnl
 
 
 ])dnl
 
 
@@ -548,7 +662,7 @@ main()
 }], 
 eval "$cv_name=`cat conftestval`",
 eval "$cv_name=-1",
 }], 
 eval "$cv_name=`cat conftestval`",
 eval "$cv_name=-1",
-ifelse([$2], , , eval "$cv_name=$2"))])dnl
+eval "$cv_name=-1")])dnl
 eval "fptools_check_cconst_result=`echo '$'{$cv_name}`"
 AC_MSG_RESULT($fptools_check_cconst_result)
 AC_DEFINE_UNQUOTED($def_name, $fptools_check_cconst_result)
 eval "fptools_check_cconst_result=`echo '$'{$cv_name}`"
 AC_MSG_RESULT($fptools_check_cconst_result)
 AC_DEFINE_UNQUOTED($def_name, $fptools_check_cconst_result)
@@ -609,63 +723,112 @@ fi
 
 dnl *** Helper function **
 dnl 
 
 dnl *** Helper function **
 dnl 
-AC_DEFUN(FPTOOLS_IN_SCOPE,AC_TRY_LINK([extern char* $1;],[return (int)&$2], $3=yes, $3=no))
+AC_DEFUN(FPTOOLS_IN_SCOPE,
+[AC_TRY_LINK([extern char* $1;],[return (int)&$2], $3=yes, $3=no)
+])
 
 dnl *** What's the end-of-text-section marker called? ***
 dnl
 
 dnl *** What's the end-of-text-section marker called? ***
 dnl
-AC_DEFUN(FPTOOLS_END_TEXT_SECTION,
-[AC_MSG_CHECKING([for end of text section marker])
-not_done=1
-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))
-   AC_CACHE_VAL([fptools_cv_end_of_text], AC_DEFINE_UNQUOTED(TEXT_SECTION_END_MARKER, $i))
-   not_done=0
-   break
-  fi
-done
-if test "$not_done" = 1; then
-FPTOOLS_IN_SCOPE(etext asm("etext"),etext,fptools_end_of_text);
-if test "$fptools_end_of_text" = yes; then
-  AC_CACHE_VAL([fptools_cv_end_of_text], AC_DEFINE_UNQUOTED(TEXT_SECTION_END_MARKER, etext))
-  AC_CACHE_VAL([fptools_cv_end_of_text_decl], AC_DEFINE_UNQUOTED(TEXT_SECTION_END_MARKER_DECL, etext asm("etext")))
-else
-  AC_DEFINE_UNQUOTED(TEXT_SECTION_END_MARKER_DECL, dunno_what_it_is)
-  AC_DEFINE_UNQUOTED(TEXT_SECTION_END_MARKER, dunno_what_it_is)
-fi
-fi
-AC_MSG_RESULT([$]fptools_cv_end_of_text)
-])
-
+AC_DEFUN([FPTOOLS_END_TEXT_SECTION],
+[AC_CACHE_CHECK([for end of text section marker],
+                [fptools_cv_end_of_text],
+               [fptools_cv_end_of_text=""
+                not_done=1
+                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
+                    fptools_cv_end_of_text=$i
+                    not_done=0
+                    break
+                  fi
+                done
+                if test "$not_done" = 1; then
+                  FPTOOLS_IN_SCOPE(etext asm("etext"),etext,fptools_end_of_text)
+                  if test "$fptools_end_of_text" = yes; then
+                    fptools_cv_end_of_text="etext"
+                  fi
+                fi])
+                if test -n "$fptools_cv_end_of_text"; then
+                  AC_DEFINE_UNQUOTED([TEXT_SECTION_END_MARKER], $fptools_cv_end_of_text)
+                else
+                  AC_DEFINE_UNQUOTED([TEXT_SECTION_END_MARKER], dunno_end_of_text)
+                fi
+ AC_CACHE_CHECK([for end of text section marker declaration],
+               [fptools_cv_end_of_text_decl],
+               [fptools_cv_end_of_text_decl=""
+                not_done=1
+                for i in data_start _data_start etext _etext __etext; do
+                  FPTOOLS_IN_SCOPE($i,$i,fptools_end_of_text_decl)
+                  if test "$fptools_end_of_text_decl" = yes; then
+                    fptools_cv_end_of_text_decl=$i
+                    not_done=0
+                    break
+                  fi
+                done
+                if test "$not_done" = 1; then
+                  FPTOOLS_IN_SCOPE(etext asm("etext"),etext,fptools_end_of_text_decl)
+                  if test "$fptools_end_of_text_decl" = yes; then
+                    fptools_cv_end_of_text_decl="etext asm(\"etext\")"
+                  fi
+                fi])
+                if test -n "$fptools_cv_end_of_text_decl"; then
+                  AC_DEFINE_UNQUOTED([TEXT_SECTION_END_MARKER_DECL], $fptools_cv_end_of_text_decl)
+                else
+                  AC_DEFINE_UNQUOTED([TEXT_SECTION_END_MARKER_DECL], dunno_end_of_text_decl)
+                fi
+])                
 dnl *** What's the end-of-data-section marker called? ***
 dnl
 dnl *** What's the end-of-data-section marker called? ***
 dnl
-AC_DEFUN(FPTOOLS_END_DATA_SECTION,
-[AC_MSG_CHECKING([for end of data section marker])
-not_done=1
-for i in end _end __end; do
-  FPTOOLS_IN_SCOPE($i,$i,fptools_end_of_data)
-  if test "$fptools_end_of_data" = yes; then
-   AC_CACHE_VAL([fptools_cv_end_of_data_decl], [AC_DEFINE_UNQUOTED(DATA_SECTION_END_MARKER_DECL, $i)])
-   AC_CACHE_VAL([fptools_cv_end_of_data], [AC_DEFINE_UNQUOTED(DATA_SECTION_END_MARKER, $i)])
-   not_done=0
-   break
-  fi
-done
-if test "$not_done" = 1; then
-FPTOOLS_IN_SCOPE(end asm("end"),end,fptools_end_of_data);
-if test "$fptools_end_of_data" = yes; then
-  AC_CACHE_VAL([fptools_cv_end_of_data_decl], [AC_DEFINE_UNQUOTED(DATA_SECTION_END_MARKER_DECL, end asm("end"))])
-  AC_CACHE_VAL([fptools_cv_end_of_data], [AC_DEFINE_UNQUOTED(DATA_SECTION_END_MARKER, end)])
-else
-  AC_CACHE_VAL([fptools_cv_end_of_data_decl], [AC_DEFINE_UNQUOTED(DATA_SECTION_END_MARKER_DECL, dunno_what_it_is)])
-  AC_CACHE_VAL([fptools_cv_end_of_data], [AC_DEFINE_UNQUOTED(DATA_SECTION_END_MARKER, dunno_what_it_is)])
-fi
-fi
-AC_MSG_RESULT([$]fptools_cv_end_of_data)
-])
-
-
+AC_DEFUN([FPTOOLS_END_DATA_SECTION],
+[AC_CACHE_CHECK([for end of data section marker],
+                [fptools_cv_end_of_data],
+               [fptools_cv_end_of_data=""
+                not_done=1
+                for i in end _end __end; do
+                  FPTOOLS_IN_SCOPE($i,$i,fptools_end_of_data)
+                  if test "$fptools_end_of_data" = yes; then
+                    fptools_cv_end_of_data=$i
+                    not_done=0
+                    break
+                  fi
+                done
+                if test "$not_done" = 1; then
+                  FPTOOLS_IN_SCOPE(end asm("end"),end,fptools_end_of_data)
+                  if test "$fptools_end_of_data" = yes; then
+                    fptools_cv_end_of_data="end"
+                  fi
+                fi])
+                if test -n "$fptools_cv_end_of_data"; then
+                  AC_DEFINE_UNQUOTED([DATA_SECTION_END_MARKER], $fptools_cv_end_of_data)
+                else
+                  AC_DEFINE_UNQUOTED([DATA_SECTION_END_MARKER], dunno_end_of_data)
+                fi
+ AC_CACHE_CHECK([for end of data section marker declaration],
+               [fptools_cv_end_of_data_decl],
+               [fptools_cv_end_of_data_decl=""
+                not_done=1
+                for i in end _end __end; do
+                  FPTOOLS_IN_SCOPE($i,$i,fptools_end_of_data_decl)
+                  if test "$fptools_end_of_data_decl" = yes; then
+                    fptools_cv_end_of_data_decl=$i
+                    not_done=0
+                    break
+                  fi
+                done
+                if test "$not_done" = 1; then
+                  FPTOOLS_IN_SCOPE(end asm("end"),end,fptools_end_of_data_decl)
+                  if test "$fptools_end_of_data_decl" = yes; then
+                    fptools_cv_end_of_data_decl="end asm(\"end\")"
+                  fi
+                fi])
+                if test -n "$fptools_cv_end_of_data_decl"; then
+                  AC_DEFINE_UNQUOTED([DATA_SECTION_END_MARKER_DECL], $fptools_cv_end_of_data_decl)
+                else
+                  AC_DEFINE_UNQUOTED([DATA_SECTION_END_MARKER_DECL], dunno_end_of_data_decl)
+                fi
+])                
 
 dnl Based on AC_TRY_LINK - run iftrue if links cleanly with no warning
 
 
 dnl Based on AC_TRY_LINK - run iftrue if links cleanly with no warning
 
@@ -741,7 +904,7 @@ AC_DEFUN(FPTOOLS_CHECK_LIB_NOWARN,
 
 dnl check for prototypes
 dnl
 
 dnl check for prototypes
 dnl
-AC_DEFUN(AC_C_PROTOTYPES,
+AC_DEFUN([AC_C_PROTOTYPES],
 [AC_CACHE_CHECK([prototypes], ac_cv_prototypes,
 [AC_TRY_COMPILE([
 void foo(int);
 [AC_CACHE_CHECK([prototypes], ac_cv_prototypes,
 [AC_TRY_COMPILE([
 void foo(int);
@@ -754,7 +917,7 @@ return;
 ac_cv_prototypes=yes,
 ac_cv_prototypes=no)])
 if test "$ac_cv_prototypes" = yes; then
 ac_cv_prototypes=yes,
 ac_cv_prototypes=no)])
 if test "$ac_cv_prototypes" = yes; then
-AC_DEFINE(HAVE_PROTOTYPES)
+AC_DEFINE([HAVE_PROTOTYPES])
 fi
 ])
 
 fi
 ])
 
@@ -860,7 +1023,6 @@ dnl The variable LIBM (which is not an output variable by default) is
 dnl set to a value which is suitable for use in a Makefile (for example,
 dnl in make's LOADLIBES macro) provided you AC_SUBST it first.
 dnl
 dnl set to a value which is suitable for use in a Makefile (for example,
 dnl in make's LOADLIBES macro) provided you AC_SUBST it first.
 dnl
-dnl @version 0.01 $Id: aclocal.m4,v 1.65 2001/01/18 12:27:42 sewardj Exp $
 dnl @author Matthew D. Langston <langston@SLAC.Stanford.EDU>
 
 # FPTOOLS_CHECK_LIBM - check for math library
 dnl @author Matthew D. Langston <langston@SLAC.Stanford.EDU>
 
 # FPTOOLS_CHECK_LIBM - check for math library
@@ -868,7 +1030,7 @@ AC_DEFUN(FPTOOLS_CHECK_LIBM,
 [AC_REQUIRE([AC_CANONICAL_HOST])dnl
 LIBM=
 case "$host" in
 [AC_REQUIRE([AC_CANONICAL_HOST])dnl
 LIBM=
 case "$host" in
-*-*-beos* | *-*-cygwin*)
+*-*-beos* | *-*-macosx*)
   # These system don't have libm
   ;;
 *-ncr-sysv4.3*)
   # These system don't have libm
   ;;
 *-ncr-sysv4.3*)
@@ -948,7 +1110,6 @@ dnl Please note that as the ac_opengl macro and the toy example evolves,
 dnl the version number increases, so you may have to adjust the above
 dnl URL accordingly.
 dnl
 dnl the version number increases, so you may have to adjust the above
 dnl URL accordingly.
 dnl
-dnl @version 0.01 $Id: aclocal.m4,v 1.65 2001/01/18 12:27:42 sewardj Exp $
 dnl @author Matthew D. Langston <langston@SLAC.Stanford.EDU>
 
 AC_DEFUN(FPTOOLS_HAVE_OPENGL,
 dnl @author Matthew D. Langston <langston@SLAC.Stanford.EDU>
 
 AC_DEFUN(FPTOOLS_HAVE_OPENGL,
@@ -1021,3 +1182,38 @@ dnl and we don't want to be global namespace polluters.
 ])
 
 # LocalWords:  fi
 ])
 
 # 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.
+dnl 
+AC_DEFUN(FPTOOLS_CC_FLAG,
+[
+AC_CACHE_CHECK([whether $CC accepts $1], [ac_cv_cc_$2],
+[save_CFLAGS="$CFLAGS"
+ CFLAGS="$CFLAGS $1"
+ AC_LANG_C
+ AC_TRY_COMPILE(,[int main(){return(0);}],
+                 [ac_cv_cc_$2=yes],
+                [ac_cv_cc_$2=no])
+ CFLAGS="$save_CFLAGS"
+])
+if test "$ac_cv_cc_$2"x = "yesx"; then
+  $2=$1;
+else
+  $2="";
+fi;
+])