maint: de-recurse the handling of examples

The directory was still using a local Makefile.am because it provides
"scoped" Make variables: these examples are not meant to use the same
CPPFLAGS etc.  If we were to use the same -I set, we'd pick up
gnulib's stdio.h for instance, which we do not want for these simple
examples.

Yet, as a result, the dependencies are less accurate, there is code
duplication, etc.  This is especially perceptible when trying to
extract more examples from the documentation, as will be done in
forthcoming changes.

In order to make the tuning of CPPFLAGS easier, discard the predefined
-I from Automake.

	* examples/calc++/Makefile.am: Rename as...
	* examples/calc++/local.mk: this.
	Adjust the paths which are now rooted in top_srcdir/top_builddir.
	Handle BISON_CXX_WORKS here, instead of the too crude previous
	approach that completely discarded the whole directory.
	($(BISON)): Remove now useless bouncing recipe.
	(calc___CPPFLAGS): New.
	Stay away from -Ilib.
	* Makefile.am, configure.ac, examples/local.mk,
	* examples/calc++/test: Adjust.

	* configure.ac: Pass nostdinc to Automake.
	* src/local.mk, lib/local.mk (AM_CPPFLAGS): Move to...
	* Makefile.am: here.

	* src/local.mk, examples/calc++/Makefile.am (BISON, BISON_IN): Factor
	to...
	* Makefile.am: here.
	* tests/local.mk: Use it.
This commit is contained in:
Akim Demaille
2012-02-13 18:23:45 +01:00
parent 72c12bfa1b
commit 360ae94ebc
8 changed files with 51 additions and 54 deletions

View File

@@ -18,9 +18,6 @@
ACLOCAL_AMFLAGS = -I m4 ACLOCAL_AMFLAGS = -I m4
SUBDIRS = po runtime-po . SUBDIRS = po runtime-po .
if BISON_CXX_WORKS
SUBDIRS += examples/calc++
endif
# Files installed for use by Automake. # Files installed for use by Automake.
aclocaldir = @aclocaldir@ aclocaldir = @aclocaldir@
@@ -29,9 +26,15 @@ aclocal_DATA = m4/bison-i18n.m4
EXTRA_DIST = .prev-version .version \ EXTRA_DIST = .prev-version .version \
cfg.mk ChangeLog-1998 ChangeLog-2012 PACKAGING cfg.mk ChangeLog-1998 ChangeLog-2012 PACKAGING
## Running the bison from this tarball. To generate our own parser,
## but also to run the tests.
BISON = $(top_builddir)/tests/bison
BISON_IN = $(top_srcdir)/tests/bison.in
# Initialization before completion by local.mk's. # Initialization before completion by local.mk's.
AM_CFLAGS = $(WARN_CFLAGS) AM_CFLAGS = $(WARN_CFLAGS)
AM_CPPFLAGS = # Find builddir/src/scan-code.c etc.
AM_CPPFLAGS = -I. -Ilib -I$(top_srcdir) -I$(top_srcdir)/lib
BUILT_SOURCES = BUILT_SOURCES =
DISTCLEANFILES = DISTCLEANFILES =
MOSTLYCLEANFILES = MOSTLYCLEANFILES =

View File

@@ -45,7 +45,7 @@ AC_CONFIG_MACRO_DIR([m4])
# releases, we want to be able run make dist without being required to # releases, we want to be able run make dist without being required to
# add a bogus NEWS entry. In that case, the version string # add a bogus NEWS entry. In that case, the version string
# automatically contains a dash, which we also let disable gnits. # automatically contains a dash, which we also let disable gnits.
AM_INIT_AUTOMAKE([1.11.1 dist-xz silent-rules] AM_INIT_AUTOMAKE([1.11.1 dist-xz nostdinc silent-rules]
m4_bmatch(m4_defn([AC_PACKAGE_VERSION]), [[-_]], m4_bmatch(m4_defn([AC_PACKAGE_VERSION]), [[-_]],
[gnu], [gnits])) [gnu], [gnits]))
AM_SILENT_RULES([yes]) AM_SILENT_RULES([yes])
@@ -181,6 +181,5 @@ do
done done
AC_CONFIG_FILES([Makefile AC_CONFIG_FILES([Makefile
po/Makefile.in po/Makefile.in
examples/calc++/Makefile
doc/yacc.1]) doc/yacc.1])
AC_OUTPUT AC_OUTPUT

View File

@@ -7,7 +7,5 @@
/*.tmp /*.tmp
/*.yy /*.yy
/.deps /.deps
/Makefile
/Makefile.in
/calc++ /calc++
/calc++.exe /calc++.exe

View File

@@ -15,16 +15,6 @@
# You should have received a copy of the GNU General Public License # You should have received a copy of the GNU General Public License
# along with this program. If not, see <http://www.gnu.org/licenses/>. # along with this program. If not, see <http://www.gnu.org/licenses/>.
## ------------------------------------- ##
## Running the bison from this tarball. ##
## ------------------------------------- ##
BISON = $(top_builddir)/tests/bison
BISON_IN = $(top_srcdir)/tests/bison.in
$(BISON): $(BISON_IN)
$(AM_V_GEN)cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) tests/bison
## ------------ ## ## ------------ ##
## Extracting. ## ## Extracting. ##
## ------------ ## ## ------------ ##
@@ -32,46 +22,45 @@ $(BISON): $(BISON_IN)
doc = $(top_srcdir)/doc/bison.texinfo doc = $(top_srcdir)/doc/bison.texinfo
extexi = $(top_srcdir)/examples/extexi extexi = $(top_srcdir)/examples/extexi
# Extract in src. # Extract in src.
$(srcdir)/calc.stamp: $(doc) $(extexi) $(top_srcdir)/examples/calc++/calc.stamp: $(doc) $(extexi)
$(AM_V_GEN)rm -f $@ $@.tmp $(AM_V_GEN)rm -f $@ $@.tmp
$(AM_V_at)touch $@.tmp $(AM_V_at)touch $@.tmp
$(AM_V_at)cd $(srcdir) && \ $(AM_V_at)cd $(top_srcdir)/examples/calc++ && \
$(AWK) -f ../extexi -v VERSION="$(VERSION)" \ $(AWK) -f ../extexi -v VERSION="$(VERSION)" \
../../doc/bison.texinfo -- calc++-parser.yy \ ../../doc/bison.texinfo -- calc++-parser.yy \
calc++-scanner.ll calc++.cc calc++-driver.hh calc++-driver.cc calc++-scanner.ll calc++.cc calc++-driver.hh calc++-driver.cc
$(AM_V_at)mv $@.tmp $@ $(AM_V_at)mv $@.tmp $@
$(calc_extracted): $(srcdir)/calc.stamp $(calc_extracted): $(top_srcdir)/examples/calc++/calc.stamp
## ------------------- ## ## ------------------- ##
## Parser generation. ## ## Parser generation. ##
## ------------------- ## ## ------------------- ##
DEFAULT_INCLUDES = -I. -I$(srcdir) BUILT_SOURCES += $(calc_extracted) $(calc_sources_generated)
BUILT_SOURCES = $(calc_extracted) $(calc_sources_generated) CLEANFILES += $(top_srcdir)/examples/calc++/*.output *.tmp
CLEANFILES = $(srcdir)/*.output *.tmp MAINTAINERCLEANFILES += $(top_srcdir)/examples/calc++/*.stamp $(calc___SOURCES)
MAINTAINERCLEANFILES = $(srcdir)/*.stamp $(BUILT_SOURCES)
# Compile the parser and save cycles. # Compile the parser and save cycles.
# This code comes from "Handling Tools that Produce Many Outputs", # This code comes from "Handling Tools that Produce Many Outputs",
# from the Automake documentation. # from the Automake documentation.
EXTRA_DIST = \ EXTRA_DIST += \
$(srcdir)/calc++-parser.stamp \ examples/calc++/calc++-parser.stamp \
$(srcdir)/calc++-parser.yy \ examples/calc++/calc++-parser.yy \
$(srcdir)/calc.stamp examples/calc++/calc.stamp
# Don't depend on $(BISON) otherwise we would rebuild these files # Don't depend on $(BISON) otherwise we would rebuild these files
# in srcdir, including during distcheck, which is forbidden. # in srcdir, including during distcheck, which is forbidden.
$(srcdir)/calc++-parser.stamp: $(srcdir)/calc++-parser.yy $(BISON_IN) $(top_srcdir)/examples/calc++/calc++-parser.stamp: $(top_srcdir)/examples/calc++/calc++-parser.yy $(BISON_IN)
$(AM_V_GEN)rm -f calc++-parser.tmp $(AM_V_GEN)rm -f calc++-parser.tmp
$(AM_V_at)touch calc++-parser.tmp $(AM_V_at)touch calc++-parser.tmp
$(AM_V_at)$(BISON) -d -ra -o $(srcdir)/calc++-parser.cc \ $(AM_V_at)$(BISON) -d -ra -o $(top_srcdir)/examples/calc++/calc++-parser.cc \
$(srcdir)/calc++-parser.yy $(top_srcdir)/examples/calc++/calc++-parser.yy
$(AM_V_at)mv -f calc++-parser.tmp $@ $(AM_V_at)mv -f calc++-parser.tmp $@
$(calc_sources_generated): $(srcdir)/calc++-parser.stamp $(calc_sources_generated): $(top_srcdir)/examples/calc++/calc++-parser.stamp
$(AM_V_GEN)if test -f $@; then :; else \ $(AM_V_GEN)if test -f $@; then :; else \
rm -f $(srcdir)/calc++-parser.stamp && \ rm -f $(top_srcdir)/examples/calc++/calc++-parser.stamp && \
$(MAKE) $(AM_MAKEFLAGS) $(srcdir)/calc++-parser.stamp; \ $(MAKE) $(AM_MAKEFLAGS) $(top_srcdir)/examples/calc++/calc++-parser.stamp; \
fi fi
@@ -79,16 +68,27 @@ $(calc_sources_generated): $(srcdir)/calc++-parser.stamp
## Building & testing calc++. ## ## Building & testing calc++. ##
## --------------------------- ## ## --------------------------- ##
check_PROGRAMS = calc++ calc_sources_extracted = \
examples/calc++/calc++-scanner.ll \
examples/calc++/calc++.cc \
examples/calc++/calc++-driver.hh \
examples/calc++/calc++-driver.cc
calc_extracted = \
$(calc_sources_extracted) \
examples/calc++/calc++-parser.yy
calc_sources_generated = \
examples/calc++/stack.hh \
examples/calc++/position.hh \
examples/calc++/location.hh \
examples/calc++/calc++-parser.hh \
examples/calc++/calc++-parser.cc
calc_sources_extracted = $(srcdir)/calc++-scanner.ll $(srcdir)/calc++.cc \ if BISON_CXX_WORKS
$(srcdir)/calc++-driver.hh $(srcdir)/calc++-driver.cc check_PROGRAMS = examples/calc++/calc++
calc_extracted = $(calc_sources_extracted) $(srcdir)/calc++-parser.yy examples_calc___calc___SOURCES = \
calc_sources_generated = \ $(calc_sources_extracted) \
$(srcdir)/stack.hh $(srcdir)/position.hh $(srcdir)/location.hh \ $(calc_sources_generated)
$(srcdir)/calc++-parser.hh $(srcdir)/calc++-parser.cc examples_calc___calc___CPPFLAGS = -I$(top_srcdir)/examples/calc++
TESTS = examples/calc++/test
calc___SOURCES = $(calc_sources_extracted) $(calc_sources_generated) endif
EXTRA_DIST += examples/calc++/test
TESTS = test
EXTRA_DIST += $(TESTS)

View File

@@ -37,7 +37,7 @@ run ()
shift shift
local out_exp=$1 local out_exp=$1
shift shift
./calc++ "$@" input >out_eff ./examples/calc++/calc++ "$@" input >out_eff
local sta_eff=$? local sta_eff=$?
local out_eff=`cat out_eff` local out_eff=`cat out_eff`
if test $sta_eff -eq $sta_exp; then if test $sta_eff -eq $sta_exp; then

View File

@@ -14,3 +14,5 @@
## along with this program. If not, see <http://www.gnu.org/licenses/>. ## along with this program. If not, see <http://www.gnu.org/licenses/>.
dist_noinst_SCRIPTS = examples/extexi dist_noinst_SCRIPTS = examples/extexi
include examples/calc++/local.mk

View File

@@ -15,15 +15,10 @@
AUTOMAKE_OPTIONS = subdir-objects AUTOMAKE_OPTIONS = subdir-objects
AM_CPPFLAGS += -I$(top_srcdir)/lib
# Find builddir/src/scan-code.c etc.
AM_CPPFLAGS += -I$(top_builddir)
LDADD = lib/libbison.a $(LIBINTL) LDADD = lib/libbison.a $(LIBINTL)
# Use our own Bison to build the parser. Of course, you ought to # Use our own Bison to build the parser. Of course, you ought to
# keep a sane version of Bison nearby... # keep a sane version of Bison nearby...
BISON = tests/bison
YACC = $(BISON) -y YACC = $(BISON) -y
AM_YFLAGS = -dv --warnings=all,error --report=all AM_YFLAGS = -dv --warnings=all,error --report=all

View File

@@ -83,7 +83,7 @@ check-local: tests/atconfig tests/atlocal $(TESTSUITE)
# Move into tests/ so that testsuite.dir etc. be created there. # Move into tests/ so that testsuite.dir etc. be created there.
$(RUN_TESTSUITE) $(RUN_TESTSUITE)
check_SCRIPTS = tests/bison check_SCRIPTS = $(BISON)
# Run the test suite on the *installed* tree. # Run the test suite on the *installed* tree.
installcheck-local: installcheck-local: