Merge branch 'yacc-work' into yl-work-for-master
[platform/upstream/automake.git] / tests / yacc-basic.test
index ee153f4..48f76c9 100755 (executable)
@@ -1,5 +1,5 @@
 #! /bin/sh
-# Copyright (C) 2010, 2011 Free Software Foundation, Inc.
+# Copyright (C) 2010, 2011, 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
@@ -14,7 +14,8 @@
 # You should have received a copy of the GNU General Public License
 # along with this program.  If not, see <http://www.gnu.org/licenses/>.
 
-# Basic semantic checks on Yacc support.
+# Basic semantic checks on Yacc support (without yacc-generated headers).
+# Keep in sync with sister test `yacc-cxx.test'.
 
 required='cc yacc'
 . ./defs || Exit 1
@@ -26,8 +27,10 @@ AC_OUTPUT
 END
 
 cat > Makefile.am << 'END'
-bin_PROGRAMS = foo
+bin_PROGRAMS = foo bar
 foo_SOURCES = parse.y foo.c
+bar_SOURCES = $(foo_SOURCES)
+bar_YFLAGS = -v
 
 .PHONY: echo-distcom
 echo-distcom:
@@ -38,7 +41,7 @@ cat > parse.y << 'END'
 %{
 #include <stdio.h>
 #include <stdlib.h>
-int yylex () { return (getchar ()); }
+int yylex () { return getchar (); }
 void yyerror (char *s) {}
 %}
 %%
@@ -55,9 +58,14 @@ $AUTOMAKE -a
 
 ./configure
 $MAKE
-# The `parse.c' file must be created and not removed (i.e., not treated
-# like an "intermediate file" in the GNU make sense).
+ls -l
+# The Yacc-derived C sources must be created, and not removed once
+# compiled (i.e., not treated like "intermediate files" in the GNU
+# make sense).
 test -f parse.c
+test -f bar-parse.c
+# Check that per-object flags are honored.
+test -f bar-parse.output
 
 if cross_compiling; then :; else
   echo a | ./foo
@@ -65,23 +73,37 @@ if cross_compiling; then :; else
   : For shells with busted 'set -e'.
 fi
 
-# The generated file `parse.c' must be shipped.
+echo a | ./bar
+echo b | ./bar && Exit 1
+
+# The Yacc-derived C sources must be shipped.
 $MAKE echo-distcom
-$MAKE -s echo-distcom | grep '[ /]parse.c '
+$MAKE -s echo-distcom | grep '[ /]parse\.c '
+$MAKE -s echo-distcom | grep '[ /]bar-parse\.c '
 $MAKE distdir
 ls -l $distdir
 test -f $distdir/parse.c
+test -f $distdir/bar-parse.c
 
 # Sanity check on distribution.
-$MAKE distcheck
+# Note that, for this to succeed, bar-parse.output must either not
+# be distributed, or properly cleaned by automake-generated rules.
+# We don't want to set the exact semantics yet, but want to ensure
+# they are are consistent.
+yl_distcheck
 
-# While we are at it, make sure that parse.c is erased by
+# Make sure that the Yacc-derived C sources are erased by
 # maintainer-clean, and not by distclean.
 test -f parse.c
+test -f bar-parse.c
 $MAKE distclean
+ls -l
 test -f parse.c
-./configure # Re-create `Makefile'.
+test -f bar-parse.c
+./configure # We must re-create 'Makefile'.
 $MAKE maintainer-clean
+ls -l
 test ! -f parse.c
+test ! -f bar-parse.c
 
 :