From 360ae94ebc3f25f93c44ed6e6f65730afa56ff63 Mon Sep 17 00:00:00 2001 From: Akim Demaille Date: Mon, 13 Feb 2012 18:23:45 +0100 Subject: 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. --- Makefile.am | 11 ++++-- configure.ac | 3 +- examples/calc++/.gitignore | 2 - examples/calc++/Makefile.am | 94 --------------------------------------------- examples/calc++/local.mk | 94 +++++++++++++++++++++++++++++++++++++++++++++ examples/calc++/test | 2 +- examples/local.mk | 2 + src/local.mk | 5 --- tests/local.mk | 2 +- 9 files changed, 106 insertions(+), 109 deletions(-) delete mode 100644 examples/calc++/Makefile.am create mode 100644 examples/calc++/local.mk diff --git a/Makefile.am b/Makefile.am index 097a6349..6220276f 100644 --- a/Makefile.am +++ b/Makefile.am @@ -18,9 +18,6 @@ ACLOCAL_AMFLAGS = -I m4 SUBDIRS = po runtime-po . -if BISON_CXX_WORKS -SUBDIRS += examples/calc++ -endif # Files installed for use by Automake. aclocaldir = @aclocaldir@ @@ -29,9 +26,15 @@ aclocal_DATA = m4/bison-i18n.m4 EXTRA_DIST = .prev-version .version \ 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. 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 = DISTCLEANFILES = MOSTLYCLEANFILES = diff --git a/configure.ac b/configure.ac index 80c2e99c..c51d2dd5 100644 --- a/configure.ac +++ b/configure.ac @@ -45,7 +45,7 @@ AC_CONFIG_MACRO_DIR([m4]) # releases, we want to be able run make dist without being required to # add a bogus NEWS entry. In that case, the version string # 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]), [[-_]], [gnu], [gnits])) AM_SILENT_RULES([yes]) @@ -181,6 +181,5 @@ do done AC_CONFIG_FILES([Makefile po/Makefile.in - examples/calc++/Makefile doc/yacc.1]) AC_OUTPUT diff --git a/examples/calc++/.gitignore b/examples/calc++/.gitignore index 2050491f..6dc7e2f3 100644 --- a/examples/calc++/.gitignore +++ b/examples/calc++/.gitignore @@ -7,7 +7,5 @@ /*.tmp /*.yy /.deps -/Makefile -/Makefile.in /calc++ /calc++.exe diff --git a/examples/calc++/Makefile.am b/examples/calc++/Makefile.am deleted file mode 100644 index 9120d754..00000000 --- a/examples/calc++/Makefile.am +++ /dev/null @@ -1,94 +0,0 @@ -## Process this file with automake to produce Makefile.in -*-Makefile-*- - -## Copyright (C) 2005-2006, 2008-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 -# the Free Software Foundation, either version 3 of the License, 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 . - -## ------------------------------------- ## -## 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. ## -## ------------ ## - -doc = $(top_srcdir)/doc/bison.texinfo -extexi = $(top_srcdir)/examples/extexi -# Extract in src. -$(srcdir)/calc.stamp: $(doc) $(extexi) - $(AM_V_GEN)rm -f $@ $@.tmp - $(AM_V_at)touch $@.tmp - $(AM_V_at)cd $(srcdir) && \ - $(AWK) -f ../extexi -v VERSION="$(VERSION)" \ - ../../doc/bison.texinfo -- calc++-parser.yy \ - calc++-scanner.ll calc++.cc calc++-driver.hh calc++-driver.cc - $(AM_V_at)mv $@.tmp $@ - -$(calc_extracted): $(srcdir)/calc.stamp - -## ------------------- ## -## Parser generation. ## -## ------------------- ## - -DEFAULT_INCLUDES = -I. -I$(srcdir) -BUILT_SOURCES = $(calc_extracted) $(calc_sources_generated) -CLEANFILES = $(srcdir)/*.output *.tmp -MAINTAINERCLEANFILES = $(srcdir)/*.stamp $(BUILT_SOURCES) - -# Compile the parser and save cycles. -# This code comes from "Handling Tools that Produce Many Outputs", -# from the Automake documentation. -EXTRA_DIST = \ - $(srcdir)/calc++-parser.stamp \ - $(srcdir)/calc++-parser.yy \ - $(srcdir)/calc.stamp -# Don't depend on $(BISON) otherwise we would rebuild these files -# in srcdir, including during distcheck, which is forbidden. -$(srcdir)/calc++-parser.stamp: $(srcdir)/calc++-parser.yy $(BISON_IN) - $(AM_V_GEN)rm -f calc++-parser.tmp - $(AM_V_at)touch calc++-parser.tmp - $(AM_V_at)$(BISON) -d -ra -o $(srcdir)/calc++-parser.cc \ - $(srcdir)/calc++-parser.yy - $(AM_V_at)mv -f calc++-parser.tmp $@ - -$(calc_sources_generated): $(srcdir)/calc++-parser.stamp - $(AM_V_GEN)if test -f $@; then :; else \ - rm -f $(srcdir)/calc++-parser.stamp && \ - $(MAKE) $(AM_MAKEFLAGS) $(srcdir)/calc++-parser.stamp; \ - fi - - -## --------------------------- ## -## Building & testing calc++. ## -## --------------------------- ## - -check_PROGRAMS = calc++ - -calc_sources_extracted = $(srcdir)/calc++-scanner.ll $(srcdir)/calc++.cc \ - $(srcdir)/calc++-driver.hh $(srcdir)/calc++-driver.cc -calc_extracted = $(calc_sources_extracted) $(srcdir)/calc++-parser.yy -calc_sources_generated = \ - $(srcdir)/stack.hh $(srcdir)/position.hh $(srcdir)/location.hh \ - $(srcdir)/calc++-parser.hh $(srcdir)/calc++-parser.cc - -calc___SOURCES = $(calc_sources_extracted) $(calc_sources_generated) - -TESTS = test -EXTRA_DIST += $(TESTS) diff --git a/examples/calc++/local.mk b/examples/calc++/local.mk new file mode 100644 index 00000000..affb9c30 --- /dev/null +++ b/examples/calc++/local.mk @@ -0,0 +1,94 @@ +## Process this file with automake to produce Makefile.in -*-Makefile-*- + +## Copyright (C) 2005-2006, 2008-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 +# the Free Software Foundation, either version 3 of the License, 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 . + +## ------------ ## +## Extracting. ## +## ------------ ## + +doc = $(top_srcdir)/doc/bison.texinfo +extexi = $(top_srcdir)/examples/extexi +# Extract in src. +$(top_srcdir)/examples/calc++/calc.stamp: $(doc) $(extexi) + $(AM_V_GEN)rm -f $@ $@.tmp + $(AM_V_at)touch $@.tmp + $(AM_V_at)cd $(top_srcdir)/examples/calc++ && \ + $(AWK) -f ../extexi -v VERSION="$(VERSION)" \ + ../../doc/bison.texinfo -- calc++-parser.yy \ + calc++-scanner.ll calc++.cc calc++-driver.hh calc++-driver.cc + $(AM_V_at)mv $@.tmp $@ + +$(calc_extracted): $(top_srcdir)/examples/calc++/calc.stamp + +## ------------------- ## +## Parser generation. ## +## ------------------- ## + +BUILT_SOURCES += $(calc_extracted) $(calc_sources_generated) +CLEANFILES += $(top_srcdir)/examples/calc++/*.output *.tmp +MAINTAINERCLEANFILES += $(top_srcdir)/examples/calc++/*.stamp $(calc___SOURCES) + +# Compile the parser and save cycles. +# This code comes from "Handling Tools that Produce Many Outputs", +# from the Automake documentation. +EXTRA_DIST += \ + examples/calc++/calc++-parser.stamp \ + examples/calc++/calc++-parser.yy \ + examples/calc++/calc.stamp +# Don't depend on $(BISON) otherwise we would rebuild these files +# in srcdir, including during distcheck, which is forbidden. +$(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_at)touch calc++-parser.tmp + $(AM_V_at)$(BISON) -d -ra -o $(top_srcdir)/examples/calc++/calc++-parser.cc \ + $(top_srcdir)/examples/calc++/calc++-parser.yy + $(AM_V_at)mv -f calc++-parser.tmp $@ + +$(calc_sources_generated): $(top_srcdir)/examples/calc++/calc++-parser.stamp + $(AM_V_GEN)if test -f $@; then :; else \ + rm -f $(top_srcdir)/examples/calc++/calc++-parser.stamp && \ + $(MAKE) $(AM_MAKEFLAGS) $(top_srcdir)/examples/calc++/calc++-parser.stamp; \ + fi + + +## --------------------------- ## +## Building & testing 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 + +if BISON_CXX_WORKS +check_PROGRAMS = examples/calc++/calc++ +examples_calc___calc___SOURCES = \ + $(calc_sources_extracted) \ + $(calc_sources_generated) +examples_calc___calc___CPPFLAGS = -I$(top_srcdir)/examples/calc++ +TESTS = examples/calc++/test +endif +EXTRA_DIST += examples/calc++/test diff --git a/examples/calc++/test b/examples/calc++/test index 27012239..150f161c 100755 --- a/examples/calc++/test +++ b/examples/calc++/test @@ -37,7 +37,7 @@ run () shift local out_exp=$1 shift - ./calc++ "$@" input >out_eff + ./examples/calc++/calc++ "$@" input >out_eff local sta_eff=$? local out_eff=`cat out_eff` if test $sta_eff -eq $sta_exp; then diff --git a/examples/local.mk b/examples/local.mk index 64afdbb8..6da395df 100644 --- a/examples/local.mk +++ b/examples/local.mk @@ -14,3 +14,5 @@ ## along with this program. If not, see . dist_noinst_SCRIPTS = examples/extexi + +include examples/calc++/local.mk diff --git a/src/local.mk b/src/local.mk index 36c0ac7d..69592780 100644 --- a/src/local.mk +++ b/src/local.mk @@ -15,15 +15,10 @@ 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) # Use our own Bison to build the parser. Of course, you ought to # keep a sane version of Bison nearby... -BISON = tests/bison YACC = $(BISON) -y AM_YFLAGS = -dv --warnings=all,error --report=all diff --git a/tests/local.mk b/tests/local.mk index 18734f37..5bb587d6 100644 --- a/tests/local.mk +++ b/tests/local.mk @@ -83,7 +83,7 @@ check-local: tests/atconfig tests/atlocal $(TESTSUITE) # Move into tests/ so that testsuite.dir etc. be created there. $(RUN_TESTSUITE) -check_SCRIPTS = tests/bison +check_SCRIPTS = $(BISON) # Run the test suite on the *installed* tree. installcheck-local: -- cgit v1.2.1