123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163 |
- #! /bin/sh
- # Copyright (C) 2011-2017 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 2, 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 <http://www.gnu.org/licenses/>.
- # Tests that we can recover from deleted headers generated by 'yacc -d'.
- required='cc yacc'
- . test-init.sh
- cat >> configure.ac << 'END'
- AC_PROG_CC
- AC_PROG_YACC
- AC_OUTPUT
- END
- cat > Makefile.am <<'END'
- bin_PROGRAMS = p1 p2 p3 p4
- # The order in which files are listed in the p*_SOURCES variables
- # below is significant, since it causes make failures whenever
- # the proper definition of BUILT_SOURCES or the declaration of
- # extra dependencies for 'main3.o' are removed.
- p1_SOURCES = main1.c parse1.y
- p2_SOURCES = main2.c parse2.y
- p3_SOURCES = main3.c parse3.y parse3.h
- p4_SOURCES = parse4.y
- AM_YFLAGS = -d
- p2_YFLAGS = -d
- BUILT_SOURCES = parse1.h p2-parse2.h
- # When we know which files include a yacc-generated header, we
- # should be able to just declare dependencies directly instead
- # of relying on the BUILT_SOURCES hack, and things should still
- # work correctly.
- main3.@OBJEXT@ parse3.@OBJEXT@: parse3.h
- .PHONY: clean-p3 build-p3
- build-p3: p3$(EXEEXT)
- clean-p3:
- rm -f p3$(EXEEXT)
- END
- cat > parse1.y << 'END'
- %{
- #include "parse1.h"
- int yylex () { return 0; }
- void yyerror (char *s) { return; }
- %}
- %token ZARDOZ
- %%
- x : 'x' {};
- %%
- END
- cat > main1.c << 'END'
- #include "parse1.h"
- int main (void)
- {
- return ZARDOZ + yyparse ();
- }
- END
- sed 's/"parse1\.h"/"p2-parse2.h"/' parse1.y > parse2.y
- sed 's/"parse1\.h"/"p2-parse2.h"/' main1.c > main2.c
- sed 's/"parse1\.h"/"parse3.h"/' parse1.y > parse3.y
- sed 's/"parse1\.h"/"parse3.h"/' main1.c > main3.c
- cat > parse4.y << 'END'
- %{
- int yylex () { return 0; }
- void yyerror (char *s) { return; }
- %}
- %%
- x : 'x' {};
- %%
- int main (void)
- {
- return 0;
- }
- END
- $ACLOCAL
- $AUTOCONF
- $AUTOMAKE -a
- ./configure
- $MAKE
- headers='parse1.h p2-parse2.h parse3.h parse4.h'
- # Check that we remake only the necessary headers.
- rm -f $headers
- $MAKE parse1.h
- test -f parse1.h
- test ! -e p2-parse2.h
- test ! -e parse3.h
- test ! -e parse4.h
- rm -f $headers
- $MAKE p2-parse2.h
- test ! -e parse1.h
- test -f p2-parse2.h
- test ! -e parse3.h
- test ! -e parse4.h
- rm -f $headers
- $MAKE parse3.h
- test ! -e parse1.h
- test ! -e p2-parse2.h
- test -f parse3.h
- test ! -e parse4.h
- # Since we declared parse3.h into $(p3_SOURCES), make should be
- # able to rebuild it automatically before remaking 'p3'.
- rm -f $headers
- $MAKE clean-p3
- test ! -e parse3.h # Sanity check.
- $MAKE build-p3
- test -f parse3.h
- $MAKE
- rm -f $headers
- $MAKE parse4.h
- test ! -e parse1.h
- test ! -e p2-parse2.h
- test ! -e parse3.h
- test -f parse4.h
- # Now remake all the headers together.
- rm -f $headers
- $MAKE $headers
- test -f parse1.h
- test -f p2-parse2.h
- test -f parse3.h
- test -f parse4.h
- # Most headers should be remade by "make all".
- rm -f $headers
- $MAKE all
- test -f parse1.h
- test -f p2-parse2.h
- test -f parse3.h
- # parse4.h is not declared in any *_SOURCES variable, nor #included
- # by any C source file, so it shouldn't be rebuilt by "make all".
- test ! -e parse4.h
- :
|