+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 ArCmd and RANLIB are AC_SUBST'ed
+dnl
+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"
+ exit 1;
+fi
+if $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 cqs"
+ NeedRanLib=''
+elif $ArCmd clq conftest.a >/dev/null 2>/dev/null; then
+ ArCmd="$ArCmd clq"
+ NeedRanLib='YES'
+elif $ArCmd cq conftest.a >/dev/null 2>/dev/null; then
+ ArCmd="$ArCmd cq"
+ NeedRanLib='YES'
+elif $ArCmd cq conftest.a 2>&1 | grep 'no archive members specified' >/dev/null 2>/dev/null; then
+ ArCmd="$ArCmd cq"
+ NeedRanLib='YES'
+else
+ echo "I can't figure out how to use your $ArCmd"
+ exit 1
+fi
+rm -rf conftest*
+test -n "$ArCmd" && test -n "$verbose" && echo " setting ArCmd to $ArCmd"
+AC_SUBST(ArCmd)
+if test -z "$NeedRanLib"; then
+ RANLIB=':'
+ test -n "$verbose" && echo " setting RANLIB to $RANLIB"
+ AC_SUBST(RANLIB)
+else
+ AC_PROG_RANLIB
+fi
+])
+
+dnl
+dnl AC_SHEBANG_PERL - can we she-bang perl?
+dnl
+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
+ fptools_cv_shebang_perl=yes
+else
+ fptools_cv_shebang_perl=no
+fi
+rm -f conftest
+])])
+
+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(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?"
+ 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' `"
+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'
+fi
+])
+HaveGcc=`echo $fptools_cv_have_gcc | sed 'y/yesno/YESNO/'`
+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";' > 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
+else
+ if grep "version 5" 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?"
+ fi
+fi
+rm -fr conftest*
+])
+
+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\n", 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 ** 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
+])