From: Stefano Lattarini Date: Fri, 13 May 2011 12:48:42 +0000 (+0200) Subject: yacc tests: "make clean" removes C++ files from non-distributed .y X-Git-Tag: ylwrap-refactor-abandoned-branch~17^2~4 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=1e6914a488ba23c9a098510d100de7cbe6edb79d;p=thirdparty%2Fautomake.git yacc tests: "make clean" removes C++ files from non-distributed .y * tests/yacc-clean-cxx.test: New test, sister of `yacc-clean.test'. * tests/yacc-clean.test: Update heading comment to reference the new sister test. * tests/Makefile.am (TESTS): Update. --- diff --git a/ChangeLog b/ChangeLog index f095b17ad..7716923ce 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,11 @@ +2011-05-13 Stefano Lattarini + + yacc tests: "make clean" removes C++ files from non-distributed .y + * tests/yacc-clean-cxx.test: New test, sister of `yacc-clean.test'. + * tests/yacc-clean.test: Update heading comment to reference the + new sister test. + * tests/Makefile.am (TESTS): Update. + 2011-05-06 Stefano Lattarini tests: add a workaround for automake bug#8485 diff --git a/tests/Makefile.am b/tests/Makefile.am index 1f3e83f41..5fef8f1fe 100644 --- a/tests/Makefile.am +++ b/tests/Makefile.am @@ -838,6 +838,7 @@ yacc-d-basic.test \ yacc-cxx.test \ yacc-d-cxx.test \ yacc-clean.test \ +yacc-clean-cxx.test \ yacc.test \ yacc2.test \ yacc4.test \ diff --git a/tests/Makefile.in b/tests/Makefile.in index c06637e1f..ab57160b3 100644 --- a/tests/Makefile.in +++ b/tests/Makefile.in @@ -1109,6 +1109,7 @@ yacc-d-basic.test \ yacc-cxx.test \ yacc-d-cxx.test \ yacc-clean.test \ +yacc-clean-cxx.test \ yacc.test \ yacc2.test \ yacc4.test \ diff --git a/tests/yacc-clean-cxx.test b/tests/yacc-clean-cxx.test new file mode 100755 index 000000000..96ceaf896 --- /dev/null +++ b/tests/yacc-clean-cxx.test @@ -0,0 +1,169 @@ +#! /bin/sh +# Copyright (C) 2011 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 . + +# Check that C++ source and header files derived from non-distributed +# Yacc sources are cleaned by "make clean", while C++ source and +# header files derived from distributed Yacc sources are cleaned by +# "make maintainer-clean". +# See also sister test `yacc-clean.test'. + +required=yacc +. ./defs || Exit 1 + +set -e + +cat >> configure.in << 'END' +AC_PROG_CXX +AC_PROG_YACC +AC_CONFIG_FILES([sub1/Makefile sub2/Makefile]) +AC_OUTPUT +END + +cat > Makefile.am << 'END' +# Use two subdirectories, one to test with `-d' in YFLAGS, the +# other one to test with empty YFLAGS. +SUBDIRS = sub1 sub2 +END + +mkdir sub1 sub2 + +cat > sub1/Makefile.am << 'END' +bin_PROGRAMS = foo bar baz qux + +foo_SOURCES = mainfoo.cc parsefoo.yxx + +bar_SOURCES = mainbar.cpp parsebar.yy +bar_YFLAGS = $(AM_YFLAGS) + +baz_SOURCES = mainbaz.c++ +nodist_baz_SOURCES = parsebaz.y++ + +qux_SOURCES = mainqux.cxx +nodist_qux_SOURCES = parsequx.ypp +qux_YFLAGS = $(AM_YFLAGS) + +parsebaz.y++ parsequx.ypp: + cp $(srcdir)/parsefoo.yxx $@ + +CLEANFILES = parsebaz.y++ parsequx.ypp +END + +cat > sub2/Makefile.am << 'END' +include $(top_srcdir)/sub1/Makefile.am +AM_YFLAGS = -d +END + +cat > sub1/parsefoo.yxx << 'END' +%{ +// This file should contain valid C++ but invalid C. +#include +int yylex (void) { return (getchar ()); } +void yyerror (const char *s) { return; } +%} +%% +x : 'x' { }; +END +cp sub1/parsefoo.yxx sub1/parsebar.yy +cp sub1/parsefoo.yxx sub2/parsefoo.yxx +cp sub1/parsefoo.yxx sub2/parsebar.yy + +cat > sub1/mainfoo.cc << 'END' +// This file should contain valid C++ but invalid C. +using namespace std; +int main (int argc, char **argv) +{ + extern int yyparse (void); + return yyparse (); +} +END +cp sub1/mainfoo.cc sub1/mainbar.cpp +cp sub1/mainfoo.cc sub1/mainbaz.c++ +cp sub1/mainfoo.cc sub1/mainqux.cxx +cp sub1/main???.c* sub2 + +$ACLOCAL +$AUTOCONF +$AUTOMAKE -a + +./configure + +cp config.status config.sav + +$MAKE +ls -l . sub1 sub2 +# Sanity checks. +test -f sub1/parsefoo.cxx +test -f sub1/bar-parsebar.cc +test -f sub1/parsebaz.y++ +test -f sub1/parsebaz.c++ +test -f sub1/parsequx.ypp +test -f sub1/qux-parsequx.cpp +test -f sub2/parsefoo.cxx +test -f sub2/parsefoo.hxx +test -f sub2/bar-parsebar.cc +test -f sub2/bar-parsebar.hh +test -f sub2/parsebaz.y++ +test -f sub2/parsebaz.c++ +test -f sub2/parsebaz.h++ +test -f sub2/parsequx.ypp +test -f sub2/qux-parsequx.cpp +test -f sub2/qux-parsequx.hpp + +for target in clean distclean; do + $MAKE $target + ls -l . sub1 sub2 + test -f sub1/parsefoo.cxx + test -f sub1/bar-parsebar.cc + test ! -r sub1/parsebaz.y++ + test ! -r sub1/parsebaz.c++ + test ! -r sub1/parsequx.ypp + test ! -r sub1/qux-parsequx.cpp + test -f sub2/parsefoo.cxx + test -f sub2/parsefoo.hxx + test -f sub2/bar-parsebar.cc + test -f sub2/bar-parsebar.hh + test ! -r sub2/parsebaz.y++ + test ! -r sub2/parsebaz.c++ + test ! -r sub2/parsebaz.h++ + test ! -r sub2/parsequx.ypp + test ! -r sub2/qux-parsequx.cpp + test ! -r sub2/qux-parsequx.hpp +done + +cp config.sav config.status +./config.status # re-create Makefile + +$MAKE maintainer-clean +ls -l . sub1 sub2 +test -f sub1/parsefoo.yxx +test -f sub1/parsebar.yy +test ! -r sub1/parsefoo.cxx +test ! -r sub1/bar-parsebar.cc +test -f sub2/parsefoo.yxx +test -f sub2/parsebar.yy +test ! -r sub2/parsefoo.cxx +test ! -r sub2/parsefoo.hxx +test ! -r sub2/bar-parsebar.cc +test ! -r sub2/bar-parsebar.hh + +cp config.sav config.status +./config.status # re-create Makefile + +# The distribution must work correctly, assuming the user has +# the proper tools to process yacc files. +$MAKE distcheck + +: diff --git a/tests/yacc-clean.test b/tests/yacc-clean.test index c8e8863b9..bdc8dd05c 100755 --- a/tests/yacc-clean.test +++ b/tests/yacc-clean.test @@ -17,6 +17,7 @@ # Check that .c and .h files derived from non-distributed .y sources # are cleaned by "make clean", while .c and .h files derived from # distributed .y sources are cleaned by "make maintainer-clean". +# See also sister test `yacc-cxx-clean.test'. required=yacc . ./defs || Exit 1