# Bison Parser Headers. -*- Autotest -*- # Copyright (C) 2001-2002, 2006-2007, 2009-2012 Free Software # Foundation, Inc. # This program is free software: you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation, either version 3 of the License, or # (at your option) any later version. # # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License # along with this program. If not, see . AT_BANNER([[Parser Headers.]]) ## --------------------- ## ## Invalid CPP headers. ## ## --------------------- ## # AT_TEST_CPP_GUARD_H(BASE-NAME, [DIRECTIVES]) # -------------------------------------------- # FIXME: Much of this can be covered by calc.at. m4_define([AT_TEST_CPP_GUARD_H], [AT_SETUP([Invalid CPP guards: $2 --defines=$1.h]) AT_BISON_OPTION_PUSHDEFS([$2]) # Possibly create inner directories. dirname=`AS_DIRNAME([$1])` AS_MKDIR_P([$dirname]) AT_DATA_GRAMMAR([$1.y], [$2 %{ #include <$1.h> ]AT_YYERROR_DECLARE_EXTERN[ ]AT_YYLEX_DECLARE_EXTERN[ %} %% dummy:; %% #include <$1.h> ]) AT_BISON_CHECK([--defines=$1.h --output=$1.c $1.y]) AT_COMPILE([$1.o], [-I. -c $1.c]) AT_BISON_OPTION_POPDEFS AT_CLEANUP ]) AT_TEST_CPP_GUARD_H([input/input]) AT_TEST_CPP_GUARD_H([9foo]) AT_TEST_CPP_GUARD_H([input/input], [%glr-parser]) AT_TEST_CPP_GUARD_H([9foo], [%glr-parser]) ## ---------------- ## ## export YYLTYPE. ## ## ---------------- ## AT_SETUP([export YYLTYPE]) AT_DATA_GRAMMAR([input.y], [%locations %name-prefix "my_" %{ #include #include static int my_lex (void) { return EOF; } static void my_error (const char *msg) { fprintf (stderr, "%s\n", msg); } %} %% exp:; ]) AT_BISON_CHECK([--defines -o input.c input.y]) # YYLTYPE should be defined, and MY_LLOC declared. AT_DATA([caller.c], [[#include "input.h" YYLTYPE *my_llocp = &my_lloc; int my_parse (void); int main (void) { return my_parse (); } ]]) # Link and execute, just to make sure everything is fine (and in # particular, that MY_LLOC is indeed defined somewhere). AT_COMPILE([caller.o]) AT_COMPILE([input.o]) AT_COMPILE([caller], [caller.o input.o]) AT_PARSER_CHECK([./caller]) AT_CLEANUP