From 26e7e7cddda6947525e5fc0d2bf514e09c68cd3c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Fredrik=20H=C3=BCbinette=20=28Hubbe=29?= <hubbe@hubbe.net> Date: Tue, 23 Apr 1996 22:31:49 +0200 Subject: [PATCH] now really tests for %pure_parser Rev: src/configure.in:1.10 --- src/configure.in | 98 +++++++++++++++++++++++++++++++++++++----------- 1 file changed, 77 insertions(+), 21 deletions(-) diff --git a/src/configure.in b/src/configure.in index 8070285c90..b632c48c3a 100644 --- a/src/configure.in +++ b/src/configure.in @@ -1,5 +1,6 @@ AC_INIT(interpret.c) AC_PROG_CC +AC_C_CROSS # We need some special hacks when running slowaris AC_PATH_PROG(uname_prog,uname,no) @@ -100,33 +101,87 @@ fi AC_CONFIG_HEADER(machine.h) AC_PROG_INSTALL -AC_PROG_YACC AC_PROG_CPP AC_PROG_RANLIB AC_SET_MAKE -AC_CHECK_PROG(has_strings, strings, yes, no) -if test "$has_strings" = "yes"; then - yacc_prog=`echo $YACC | sed 's/^\([^ ]*\) .*$/\1/'` - AC_PATH_PROG(yacc_prog,$yacc_prog,/bin/true) - - AC_MSG_CHECKING(if $YACC handles pure_parser) - AC_CACHE_VAL(lpc_cv_yacc_pure_parser, - [ - lpc_cv_yacc_pure_parser=no - strings $yacc_prog >conftest.bar - if egrep pure_parser conftest.bar >/dev/null; then - lpc_cv_yacc_pure_parser=yes +AC_MSG_CHECKING(for yacc clone that handles %pure_parser) +AC_CACHE_VAL(lpc_cv_prog_working_yacc, +[ +for YACC in byacc "bison -y" yacc "echo Get bison if you want to make export" ; do + set dummy $YACC; ac_word=$2 + has_it=no + IFS="${IFS= }"; ac_save_ifs="$IFS"; IFS="${IFS}:" + for ac_dir in $PATH; do + test -z "$ac_dir" && ac_dir=. + if test -f $ac_dir/$ac_word; then + has_it="yes" + break fi - ]) + done + IFS="$ac_save_ifs" + + if test "$has_it" = "yes"; then +cat >conftest.y<<\EOF +%pure_parser +%{ +void parse(); +void yyerror(char *); +%} +%% +all: foo bar +foo: 'f' 'o' 'o' { parse(); } ; +bar: 'b' 'a' 'r' ; +%% +int context; - if test "$lpc_cv_yacc_pure_parser" = "yes"; then - AC_MSG_RESULT(yes) - else - AC_MSG_RESULT([[no, get bison and retry... (giving up)]]) - exit 1 +int yylex(YYSTYPE *yylval) +{ + switch(context++) + { + case 0: return 'f'; + case 1: return 'o'; + case 2: return 'o'; + case 3: return 'b'; + case 4: return 'a'; + case 5: return 'r'; + default: return 0; + } +} + +int depth=0; +void parse() +{ + int tmp; + if(depth++>5) return; + tmp=context; + context=0; + yyparse(); + context=tmp; +} +int errors=0; +void yyerror(char *fel) { errors++; } +int main() +{ + parse(); + exit(errors); +} +EOF + if $YACC -d conftest.y 1>&5 2>&5; then + AC_TRY_RUN([ +#include "y.tab.c" +],pure_parser_works=yes,pure_parser_works=no) + if test "$pure_parser_works" = "yes"; then + break + fi + fi fi -fi +done +lpc_cv_prog_working_yacc="$YACC" +]) + +YACC="$lpc_cv_prog_working_yacc" +AC_MSG_RESULT($YACC) AC_MSG_CHECKING(first yacc define) AC_CACHE_VAL(lpc_cv_yacc_first, @@ -138,7 +193,7 @@ all: GURKA %% EOF lpc_cv_yacc_first=257; -if $YACC -d conftest.y ; then +if $YACC -d conftest.y 1>&5 2>&5; then if test -f y.tab.h; then lpc_cv_yacc_first=`egrep GURKA y.tab.h | sed 's/^#[^0-9]*\([0-9]*\)[^0-9]*$/\1/'` echo $lpc_cv_yacc_first >conftest.out @@ -762,6 +817,7 @@ BUILDDIR=`pwd` AC_CONFIG_SUBDIRS($dirs) +AC_SUBST(YACC) AC_SUBST(MODULE_OBJS) AC_SUBST(INSTALL) AC_SUBST(WARN) -- GitLab