#! /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
# 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
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:
%{
#include <stdio.h>
#include <stdlib.h>
-int yylex () { return (getchar ()); }
+int yylex () { return getchar (); }
void yyerror (char *s) {}
%}
%%
./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
: 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
: