[project @ 1999-06-24 13:10:31 by simonmar]
[ghc-hetmet.git] / aclocal.m4
index ab29cf2..c79cef4 100644 (file)
@@ -1,22 +1,30 @@
-dnl $Id: aclocal.m4,v 1.21 1998/04/07 21:24:55 sof Exp $
+dnl $Id: aclocal.m4,v 1.42 1999/06/07 10:12:52 simonmar Exp $
 dnl 
 dnl Extra autoconf macros for the Glasgow fptools
 dnl
 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 
 dnl 
-dnl Are we running under the GNU libc?  Need -D_GNU_SOURCE to get 
-dnl caddr_t and such.
-dnl 
-AC_DEFUN(AC_GNU_LIBC,
-[AC_CACHE_CHECK([GNU libc], ac_cv_gnu_libc,
-[AC_EGREP_CPP(yes,
-[#include <features.h>
-#ifdef __GLIBC__
-yes
+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
 #endif
-], ac_cv_gnu_libc=yes, ac_cv_gnu_libc=no)])
-if test "$ac_cv_gnu_libc" = yes; then
-  AC_DEFINE(_GNU_SOURCE)
+], [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
 ])
 
 fi
 ])
 
@@ -24,8 +32,8 @@ dnl
 dnl Has timezone the type time_t or long (HP-UX 10.20 apparently
 dnl has `long'..)
 dnl 
 dnl Has timezone the type time_t or long (HP-UX 10.20 apparently
 dnl has `long'..)
 dnl 
-AC_DEFUN(AC_TYPE_TIMEZONE,
-[AC_CACHE_CHECK([type of timezone], ac_cv_type_timezone,
+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>
 [AC_TRY_COMPILE([#if TIME_WITH_SYS_TIME
 # include <sys/time.h>
 # include <time.h>
@@ -37,16 +45,16 @@ AC_DEFUN(AC_TYPE_TIMEZONE,
 # endif
 #endif
 
 # endif
 #endif
 
-extern time_t timezone;
+extern time_t timezone;        
 ],
 ],
-[int i;], ac_cv_type_timezone=time_t, ac_cv_type_timezone=long)])
-AC_DEFINE_UNQUOTED(TYPE_TIMEZONE, $ac_cv_type_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 
 ])
 
 dnl *** Is altzone available? ***
 dnl 
-AC_DEFUN(AC_ALTZONE,
-[AC_CACHE_CHECK([altzone], ac_cv_altzone,
+AC_DEFUN(FPTOOLS_ALTZONE,
+[AC_CACHE_CHECK([altzone], fptools_cv_altzone,
 [AC_TRY_LINK([#if TIME_WITH_SYS_TIME
 # include <sys/time.h>
 # include <time.h>
 [AC_TRY_LINK([#if TIME_WITH_SYS_TIME
 # include <sys/time.h>
 # include <time.h>
@@ -58,12 +66,13 @@ AC_DEFUN(AC_ALTZONE,
 # endif
 #endif
 ], [return altzone;], 
 # endif
 #endif
 ], [return altzone;], 
-ac_cv_altzone=yes, ac_cv_altzone=no)])
-if test "$ac_cv_altzone" = yes; then
+fptools_cv_altzone=yes, fptools_cv_altzone=no)])
+if test "$fptools_cv_altzone" = yes; then
   AC_DEFINE(HAVE_ALTZONE)
 fi
 ])
 
   AC_DEFINE(HAVE_ALTZONE)
 fi
 ])
 
+
 dnl ** check for leading underscores in symbol names
 dnl 
 dnl Test for determining whether symbol names have a leading
 dnl ** check for leading underscores in symbol names
 dnl 
 dnl Test for determining whether symbol names have a leading
@@ -71,25 +80,35 @@ dnl underscore.
 dnl 
 dnl We assume that they _haven't_ if anything goes wrong.
 dnl
 dnl 
 dnl We assume that they _haven't_ if anything goes wrong.
 dnl
-AC_DEFUN(AC_UNDERSCORE,
+dnl Some nlist implementations seem to try to be compatible by ignoring
+dnl a leading underscore sometimes (eg. FreeBSD).  We therefore have
+dnl to work around this by checking for *no* leading underscore first.
+dnl Sigh.  --SDM
+dnl
+AC_DEFUN(FPTOOLS_UNDERSCORE,
 [AC_CHECK_LIB(elf, nlist, LIBS="-lelf $LIBS")dnl
 [AC_CHECK_LIB(elf, nlist, LIBS="-lelf $LIBS")dnl
-AC_CACHE_CHECK([leading underscore in symbol names], ac_cv_lead_uscore,
+AC_CACHE_CHECK([leading underscore in symbol names], fptools_cv_lead_uscore,
 
 dnl
 dnl Hack!: nlist() under Digital UNIX insist on there being an _,
 
 dnl
 dnl Hack!: nlist() under Digital UNIX insist on there being an _,
-dnl but symbol table listings show none. What is going on here?!?
+dnl but symbol table listings shows none. What is going on here?!?
 dnl
 dnl
+dnl Another hack: cygwin doesn't come with nlist.h , so we hardwire
+dnl the underscoredness of that "platform"
 changequote(<<, >>)dnl
 <<
 case $HostPlatform in
 changequote(<<, >>)dnl
 <<
 case $HostPlatform in
-alpha-dec-osf*) ac_cv_lead_uscore='no';;
+alpha-dec-osf*) fptools_cv_lead_uscore='no';;
+*cygwin32) fptools_cv_lead_uscore='yes';;
+*mingw32) fptools_cv_lead_uscore='yes';;
 *) >>
 changequote([, ])dnl
 AC_TRY_RUN([#ifdef HAVE_NLIST_H
 #include <nlist.h>
 changequote(<<, >>)dnl
 <<
 *) >>
 changequote([, ])dnl
 AC_TRY_RUN([#ifdef HAVE_NLIST_H
 #include <nlist.h>
 changequote(<<, >>)dnl
 <<
-struct nlist xYzzY[] = {{"_xYzzY", 0},{0}};
+struct nlist xYzzY1[] = {{"xYzzY1", 0},{0}};
+struct nlist xYzzY2[] = {{"_xYzzY2", 0},{0}};
 #endif
 
 main(argc, argv)
 #endif
 
 main(argc, argv)
@@ -97,33 +116,38 @@ int argc;
 char **argv;
 {
 #ifdef HAVE_NLIST_H
 char **argv;
 {
 #ifdef HAVE_NLIST_H
-    if(nlist(argv[0], xYzzY) == 0 && xYzzY[0].n_value != 0)
+    if(nlist(argv[0], xYzzY1) == 0 && xYzzY1[0].n_value != 0)
+        exit(1);
+    if(nlist(argv[0], xYzzY2) == 0 && xYzzY2[0].n_value != 0)
         exit(0);>>
 changequote([, ])dnl
 #endif
     exit(1);
         exit(0);>>
 changequote([, ])dnl
 #endif
     exit(1);
-}], ac_cv_lead_uscore=yes, ac_cv_lead_uscore=no, ac_cv_lead_uscore=NO)
+}], fptools_cv_lead_uscore=yes, fptools_cv_lead_uscore=no, fptools_cv_lead_uscore=NO)
 ;;
 esac);
 ;;
 esac);
-LeadingUnderscore=`echo $ac_cv_lead_uscore | sed 'y/yesno/YESNO/'`
+LeadingUnderscore=`echo $fptools_cv_lead_uscore | sed 'y/yesno/YESNO/'`
 AC_SUBST(LeadingUnderscore)
 AC_SUBST(LeadingUnderscore)
+case $LeadingUnderscore in
+YES) AC_DEFINE(LEADING_UNDERSCORE);;
+esac
 ])
 
 dnl
 dnl Check for Happy and version.
 dnl
 ])
 
 dnl
 dnl Check for Happy and version.
 dnl
-AC_DEFUN(AC_HAPPY,
-[AC_PATH_PROG(HappyCmd,happy)
-AC_CACHE_CHECK([for version of happy], ac_cv_happy_version,
+AC_DEFUN(FPTOOLS_HAPPY,
+[AC_PATH_PROG(HappyCmd,happy,,$PATH ${hardtop}/happy/src)
+AC_CACHE_CHECK([for version of happy], fptools_cv_happy_version,
 [if test x"$HappyCmd" != x; then
 [if test x"$HappyCmd" != x; then
-   ac_cv_happy_version="`$HappyCmd -v |
+   fptools_cv_happy_version="`$HappyCmd -v |
 changequote(, )dnl
                          grep 'Happy Version' | sed -e 's/Happy Version \([^ ]*\).*/\1/g'`" ;
 changequote([, ])dnl
 else
 changequote(, )dnl
                          grep 'Happy Version' | sed -e 's/Happy Version \([^ ]*\).*/\1/g'`" ;
 changequote([, ])dnl
 else
-   ac_cv_happy_version="";
+   fptools_cv_happy_version="";
 fi;
 fi;
-if expr "$ac_cv_happy_version" "<" 1.4 > /dev/null 2>&1; then
+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;
    echo
    echo "Happy version 1.4 or later is required to compile GHC."
    exit 1;
@@ -138,15 +162,15 @@ dnl What's the best way of doing context diffs?
 dnl
 dnl (NB: NeXTStep thinks diff'ing a file against itself is "trouble")
 dnl
 dnl
 dnl (NB: NeXTStep thinks diff'ing a file against itself is "trouble")
 dnl
-AC_DEFUN(AC_PROG_DIFF,
-[AC_CACHE_CHECK([for ok way to do context diffs], ac_cv_context_diffs,
+AC_DEFUN(FPTOOLS_PROG_DIFF,
+[AC_CACHE_CHECK([for ok way to do context diffs], fptools_cv_context_diffs,
 [echo foo > conftest1
 echo foo > conftest2
 if diff -C 1 conftest1 conftest2 > /dev/null 2>&1 ; then
 [echo foo > conftest1
 echo foo > conftest2
 if diff -C 1 conftest1 conftest2 > /dev/null 2>&1 ; then
-    ac_cv_context_diffs='diff -C 1'
+    fptools_cv_context_diffs='diff -C 1'
 else
     if diff -c1 conftest1 conftest2 > /dev/null 2>&1 ; then
 else
     if diff -c1 conftest1 conftest2 > /dev/null 2>&1 ; then
-        ac_cv_context_diffs='diff -c1'
+        fptools_cv_context_diffs='diff -c1'
     else
         echo "Can't figure out how to do context diffs."
         echo "Neither \`diff -C 1' nor \`diff -c1' works."
     else
         echo "Can't figure out how to do context diffs."
         echo "Neither \`diff -C 1' nor \`diff -c1' works."
@@ -155,14 +179,14 @@ else
 fi
 rm -f conftest1 conftest2
 ])
 fi
 rm -f conftest1 conftest2
 ])
-ContextDiffCmd=$ac_cv_context_diffs
+ContextDiffCmd=$fptools_cv_context_diffs
 AC_SUBST(ContextDiffCmd)
 ])
 
 dnl
 dnl Finding the Right Yacc
 dnl
 AC_SUBST(ContextDiffCmd)
 ])
 
 dnl
 dnl Finding the Right Yacc
 dnl
-AC_DEFUN(AC_PROG_YACCY,
+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_PROG_YACC
 if test "$YACC" = "yacc"; then
    AC_CACHE_CHECK([if it is an OK yacc], ac_cv_prog_yacc,
@@ -197,7 +221,7 @@ dnl *** Checking for ar and its arguments + whether we need ranlib.
 dnl
 dnl ArCmd and RANLIB are AC_SUBST'ed
 dnl 
 dnl
 dnl ArCmd and RANLIB are AC_SUBST'ed
 dnl 
-AC_DEFUN(AC_PROG_AR_AND_RANLIB,
+AC_DEFUN(FPTOOLS_PROG_AR_AND_RANLIB,
 [AC_PATH_PROG(ArCmd,ar)
 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"
 [AC_PATH_PROG(ArCmd,ar)
 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"
@@ -237,17 +261,17 @@ fi
 dnl
 dnl AC_SHEBANG_PERL - can we she-bang perl?
 dnl
 dnl
 dnl AC_SHEBANG_PERL - can we she-bang perl?
 dnl
-AC_DEFUN(AC_SHEBANG_PERL,
-[AC_CACHE_CHECK([if your perl works in shell scripts], ac_cv_shebang_perl,
+AC_DEFUN(FPTOOLS_SHEBANG_PERL,
+[AC_CACHE_CHECK([if your perl works in shell scripts], fptools_cv_shebang_perl,
 [echo "#!$PerlCmd"'
 exit $1;
 ' > conftest
 chmod u+x conftest
 (SHELL=/bin/sh; export SHELL; ./conftest 69 > /dev/null)
 if test $? -ne 69; then
 [echo "#!$PerlCmd"'
 exit $1;
 ' > conftest
 chmod u+x conftest
 (SHELL=/bin/sh; export SHELL; ./conftest 69 > /dev/null)
 if test $? -ne 69; then
-   ac_cv_shebang_perl=yes
+   fptools_cv_shebang_perl=yes
 else
 else
-   ac_cv_shebang_perl=no
+   fptools_cv_shebang_perl=no
 fi
 rm -f conftest
 ])])
 fi
 rm -f conftest
 ])])
@@ -256,13 +280,13 @@ dnl
 dnl Extra testing of the result AC_PROG_CC, testing the gcc version no.
 dnl *Must* be called after AC_PROG_CC
 dnl
 dnl Extra testing of the result AC_PROG_CC, testing the gcc version no.
 dnl *Must* be called after AC_PROG_CC
 dnl
-AC_DEFUN(AC_HAVE_GCC,
-[AC_CACHE_CHECK([whether you have an ok gcc], ac_cv_have_gcc,
+AC_DEFUN(FPTOOLS_HAVE_GCC,
+[AC_CACHE_CHECK([whether you have an ok gcc], fptools_cv_have_gcc,
 [if test -z "$GCC"; then
     echo ''
     echo "You would be better off with gcc"
     echo "Perhaps it is already installed, but not in your PATH?"
 [if test -z "$GCC"; then
     echo ''
     echo "You would be better off with gcc"
     echo "Perhaps it is already installed, but not in your PATH?"
-    ac_cv_have_gcc='no'
+    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' `"
 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' `"
@@ -272,27 +296,27 @@ changequote([, ])dnl
         echo "I'm not sure if your version of gcc will work,"
         echo "but it's worth a shot, eh?"
     fi
         echo "I'm not sure if your version of gcc will work,"
         echo "but it's worth a shot, eh?"
     fi
-    ac_cv_have_gcc='yes'
+    fptools_cv_have_gcc='yes'
 fi
 ])
 fi
 ])
-HaveGcc=`echo $ac_cv_have_gcc | sed 'y/yesno/YESNO/'`
+HaveGcc=`echo $fptools_cv_have_gcc | sed 'y/yesno/YESNO/'`
 AC_SUBST(HaveGcc)
 ])
 
 dnl
 AC_SUBST(HaveGcc)
 ])
 
 dnl
-dnl AC_PROG_GNUCPP gathers the path to the cpp that the
+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
 dnl gcc driver calls upon.
 dnl
 dnl Substitutes: GNUCPP and RAWCPP (latter is 'GNUCPP -traditional')
 dnl
-AC_DEFUN(AC_PROG_GNUCPP,
-[AC_CACHE_CHECK([how to invoke GNU cpp directly], ac_cv_gnu_cpp,
+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
 [if test "$HaveGcc" = "YES"; then
        echo > conftest.c
-       gcc -v -E conftest.c >/dev/null 2>conftest.out
+       $CC -v -E conftest.c >/dev/null 2>conftest.out
        # \x5c = backslash
        # \x5c = backslash
-       echo 'tr/\x5c/\//; /(\S+\/cpp)/ && print "[$]1";' > conftest.pl
-       ac_cv_gnu_cpp="`eval $PerlCmd -n conftest.pl conftest.out`"
+       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
        rm -fr conftest*
  else
        # We need to be able to invoke CPP directly, preferably
@@ -300,10 +324,10 @@ AC_DEFUN(AC_PROG_GNUCPP,
        # this at the moment).
        # Take a guess at what to use, this probably won't work.
        echo Warning: GNU cpp not found, using $CPP
        # this at the moment).
        # Take a guess at what to use, this probably won't work.
        echo Warning: GNU cpp not found, using $CPP
-       ac_cv_gnu_cpp = $CPP
+       fptools_cv_gnu_cpp = $CPP
  fi
 ])
  fi
 ])
-GNUCPP=$ac_cv_gnu_cpp
+GNUCPP=$fptools_cv_gnu_cpp
 RAWCPP="$GNUCPP -traditional"
 AC_SUBST(GNUCPP)
 AC_SUBST(RAWCPP)
 RAWCPP="$GNUCPP -traditional"
 AC_SUBST(GNUCPP)
 AC_SUBST(RAWCPP)
@@ -312,7 +336,7 @@ AC_SUBST(RAWCPP)
 dnl Small feature test for perl version. Assumes PerlCmd
 dnl contains path to perl binary
 dnl
 dnl Small feature test for perl version. Assumes PerlCmd
 dnl contains path to perl binary
 dnl
-AC_DEFUN(AC_CHECK_PERL_VERSION,
+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
 [$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
@@ -343,8 +367,8 @@ 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    (required SIZEOF test but AC_CHECK_SIZEOF doesn't call PROVIDE
 dnl     so we can't call REQUIRE)
 
-dnl GHC_CHECK_ALIGNMENT(TYPE)
-AC_DEFUN(GHC_CHECK_ALIGNMENT,
+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
 [changequote(<<, >>)dnl
 dnl The name to #define.
 define(<<AC_TYPE_NAME>>, translit(alignment_$1, [a-z *], [A-Z_P]))dnl
@@ -382,3 +406,223 @@ undefine([AC_CV_NAME])dnl
 undefine([AC_CV_SIZEOF_NAME])dnl
 ])
 
 undefine([AC_CV_SIZEOF_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 *** Can we open files in binary mode? ***
+dnl 
+AC_DEFUN(FPTOOLS_O_BINARY,
+[
+AC_REQUIRE([AC_PROG_CC])
+AC_MSG_CHECKING(whether we can open files in binary mode)
+AC_CACHE_VAL(fptools_cv_have_o_binary,
+[
+AC_LANG_SAVE
+AC_LANG_C
+AC_TRY_COMPILE(,
+[#ifdef HAVE_FCNTL_H
+#include <fcntl.h>
+#endif
+int x = O_BINARY;],
+fptools_cv_have_o_binary=yes,
+fptools_cv_have_o_binary=no)
+AC_LANG_RESTORE
+])
+AC_MSG_RESULT($fptools_cv_have_o_binary)
+if test "$fptools_cv_have_o_binary" = yes; then
+AC_DEFINE(HAVE_O_BINARY)
+fi
+])
+
+dnl *** Which one comes first, .text or .data? ***
+dnl 
+AC_DEFUN(FPTOOLS_CODE_BEFORE_DATA,
+[AC_CACHE_CHECK([if code section appears before data], fptools_cv_code_bef_data,
+[AC_TRY_RUN([
+int f() { return 1; }
+int i;
+int main() { return ((char*)&f > (char*)&i); }
+
+],
+fptools_cv_code_bef_data=yes, fptools_cv_code_bef_data=no,false)])
+if test "$fptools_cv_code_bef_data" = yes; then
+  AC_DEFINE(CODE_BEFORE_DATA)
+fi
+])
+
+dnl *** Helper function **
+dnl 
+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
+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)
+])
+
+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)
+])
+
+
+
+dnl Based on AC_TRY_LINK - run iftrue if links cleanly with no warning
+
+dnl FPTOOLS_TRY_LINK_NOWARN(flags,main?,iftrue,iffalse)
+
+AC_DEFUN(FPTOOLS_TRY_LINK_NOWARN,
+[
+ac_save_LIBS="$LIBS"
+LIBS=[$1];
+cat > conftest.$ac_ext <<EOF
+dnl This sometimes fails to find confdefs.h, for some reason.
+dnl [#]line __oline__ "[$]0"
+[#]line __oline__ "configure"
+#include "confdefs.h"
+[$2]
+int t() { return 0; }
+EOF
+if AC_TRY_EVAL(ac_link); then
+  ifelse([$3], , :, [
+    LIBS="$ac_save_LIBS"
+    rm -rf conftest*
+    $3])
+  ifelse([$4], , , [else
+    LIBS="$ac_save_LIBS"
+    rm -rf conftest*
+    $4
+])dnl
+fi
+rm -f conftest*
+]
+)
+
+dnl Loosely based on AC_CHECK_LIB in acgeneral.m4 in autoconf distribution
+
+dnl FPTOOLS_CHECK_FLAG_NOWARN(NAME, FLAG, CODE, iftrue, iffalse)
+
+AC_DEFUN(FPTOOLS_CHECK_FLAG_NOWARN,
+[AC_MSG_CHECKING([for $1])
+ AC_CACHE_VAL(ac_cv_flag_$1,
+   [FPTOOLS_TRY_LINK_NOWARN("$2", [main() { $3; exit(0); } ],
+     eval "ac_cv_flag_$1=yes",
+     eval "ac_cv_flag_$1=no"
+   )]
+ )
+if eval "test \"`echo '$ac_cv_flag_'$1`\" = yes"; then
+  AC_MSG_RESULT(yes)
+  LIBS="$2 $LIBS"
+  $4
+else
+  AC_MSG_RESULT(no)
+  $5
+fi
+])
+
+dnl FPTOOLS_CHECK_LIB_NOWARN(LIBRARY, FUNCTION)
+
+AC_DEFUN(FPTOOLS_CHECK_LIB_NOWARN,
+[FPTOOLS_CHECK_FLAG_NOWARN([function_$2],[],[extern char $2(); $2();],
+[changequote(, )dnl
+  ac_tr_lib=HAVE_LIB`echo $1 | tr 'abcdefghijklmnopqrstuvwxyz' 'ABCDEFGHIJKLMNOPQRSTUVWXYZ'`
+ changequote([, ])dnl
+ AC_DEFINE_UNQUOTED($ac_tr_lib)
+],
+[FPTOOLS_CHECK_FLAG_NOWARN([library_$1],[-l$1],[extern char $2(); $2();],
+[changequote(, )dnl
+  ac_tr_lib=HAVE_LIB`echo $1 | tr 'abcdefghijklmnopqrstuvwxyz' 'ABCDEFGHIJKLMNOPQRSTUVWXYZ'`
+ changequote([, ])dnl
+ AC_DEFINE_UNQUOTED($ac_tr_lib)
+],
+[]
+)])]
+)
+
+dnl check for prototypes
+dnl
+AC_DEFUN(AC_C_PROTOTYPES,
+[AC_CACHE_CHECK([prototypes], ac_cv_prototypes,
+[AC_TRY_COMPILE([
+void foo(int);
+void foo(i)
+int i; { 
+return;
+}
+],
+[int i;], 
+ac_cv_prototypes=yes,
+ac_cv_prototypes=no)])
+if test "$ac_cv_prototypes" = yes; then
+AC_DEFINE(HAVE_PROTOTYPES)
+fi
+])
+
+
+# LocalWords:  fi