mirror of
https://git.savannah.gnu.org/git/bison.git
synced 2026-03-09 12:23:04 +00:00
maint: fix example extraction issues.
calc++: don't rely on Automake to compile a C++ parser.
Basically, revert commit 609b3d8096,
Automake 1.11.3 is not safe enough for C++ parser.
* examples/calc++/calc++-parser.hh: Remove.
* examples/calc++/local.mk (examples/calc++/calc++-parser.stamp):
New.
examples: factor the extractions into a single step
extexi had to be run in the extraction directory. Now, it can be
given the files with expected output directory. This allows to
use $(*_extracted) variables (before we had to list again their
members, but limited to their base names). In turn, this also
allows fusing the extraction recipes into a single one.
Also, it is currently too hard (or requires too much duplication,
since Make wants all the occurrences of the files to be prefixed with
$(srcdir)/, which is something Automake cannot support for *_SOURCES)
to work in the source tree. So extract, and compile scanners and parsers
in the build tree.
* examples/extexi (basename): New.
(BEGIN): Now "file_wanted" maps base name to extracted file name.
* examples/calc++/local.mk, examples/mfcalc/local.mk,
* examples/rpcalc/local.mk: Fuse extraction rules into...
* examples/local.mk: Here.
(extract, extracted): New.
This commit is contained in:
7
examples/calc++/.gitignore
vendored
7
examples/calc++/.gitignore
vendored
@@ -4,10 +4,11 @@
|
||||
/calc++
|
||||
/calc++-driver.cc
|
||||
/calc++-driver.hh
|
||||
/calc++-parser.output
|
||||
/calc++-parser.yy
|
||||
/calc++-parser.cc
|
||||
/calc++-parser.h
|
||||
/calc++-parser.hh
|
||||
/calc++-parser.output
|
||||
/calc++-parser.stamp
|
||||
/calc++-parser.yy
|
||||
/calc++-scanner.cc
|
||||
/calc++-scanner.ll
|
||||
/calc++.cc
|
||||
|
||||
@@ -1,4 +0,0 @@
|
||||
// Work around an Automake 1.11.2 bug: it asks for the creation of
|
||||
// y.tab.h and then renames it as calc++-parser.h instead of
|
||||
// calc++-parser.hh. We don't want this to show in the documentation.
|
||||
#include "calc++-parser.h"
|
||||
@@ -15,55 +15,71 @@
|
||||
# You should have received a copy of the GNU General Public License
|
||||
# along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
|
||||
## ------------ ##
|
||||
## Extracting. ##
|
||||
## ------------ ##
|
||||
## ------------------- ##
|
||||
## Parser generation. ##
|
||||
## ------------------- ##
|
||||
|
||||
# Extract in src.
|
||||
$(top_srcdir)/examples/calc++/calc.stamp: $(doc) $(extexi)
|
||||
$(AM_V_GEN)rm -f $@ $@.tmp
|
||||
CLEANFILES += $(top_srcdir)/examples/calc++/*.output *.tmp
|
||||
MAINTAINERCLEANFILES += 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.
|
||||
examples/calc++/calc++-parser.stamp: examples/calc++/calc++-parser.yy $(BISON_IN)
|
||||
$(AM_V_YACC)rm -f $@
|
||||
$(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 $@
|
||||
$(AM_V_at)$(YACCCOMPILE) -o examples/calc++/calc++-parser.cc \
|
||||
examples/calc++/calc++-parser.yy
|
||||
$(AM_V_at)mv -f $@.tmp $@
|
||||
|
||||
$(calc_sources_generated): examples/calc++/calc++-parser.stamp
|
||||
@test -f $@ || rm -f examples/calc++/calc++-parser.stamp
|
||||
@test -f $@ || $(MAKE) $(AM_MAKEFLAGS) examples/calc++/calc++-parser.stamp
|
||||
|
||||
$(calc_extracted): $(top_srcdir)/examples/calc++/calc.stamp
|
||||
$(AM_V_GEN)if test -f $@; then :; else \
|
||||
rm -f $< && \
|
||||
$(MAKE) $(AM_MAKEFLAGS) $<; \
|
||||
fi
|
||||
|
||||
## -------------------- ##
|
||||
## Building & testing. ##
|
||||
## -------------------- ##
|
||||
|
||||
BUILT_SOURCES += $(calc_sources) examples/calc++/calc++-parser.h
|
||||
# Avoid using BUILT_SOURCES which is too global.
|
||||
$(examples_calc___calc___OBJECTS): $(calc_sources_generated)
|
||||
CLEANFILES += *.tmp
|
||||
MAINTAINERCLEANFILES += $(top_srcdir)/examples/calc++/calc.stamp $(calc_sources)
|
||||
EXTRA_DIST += examples/calc++/calc.stamp
|
||||
MAINTAINERCLEANFILES += $(calc_sources)
|
||||
|
||||
calc_extracted = \
|
||||
examples/calc++/calc++-scanner.ll \
|
||||
examples/calc++/calc++.cc \
|
||||
examples/calc++/calc++-driver.hh \
|
||||
calc_sources_extracted = \
|
||||
examples/calc++/calc++-driver.cc \
|
||||
examples/calc++/calc++-driver.hh \
|
||||
examples/calc++/calc++-scanner.ll \
|
||||
examples/calc++/calc++.cc
|
||||
calc_extracted = \
|
||||
$(calc_sources_extracted) \
|
||||
examples/calc++/calc++-parser.yy
|
||||
calc_generated = \
|
||||
examples/calc++/stack.hh \
|
||||
extracted += $(calc_extracted)
|
||||
calc_sources_generated = \
|
||||
examples/calc++/calc++-parser.cc \
|
||||
examples/calc++/calc++-parser.hh \
|
||||
examples/calc++/location.hh \
|
||||
examples/calc++/position.hh \
|
||||
examples/calc++/location.hh
|
||||
examples/calc++/stack.hh
|
||||
calc_sources = \
|
||||
$(calc_extracted) $(calc_generated)
|
||||
$(calc_sources_extracted) \
|
||||
$(calc_sources_generated)
|
||||
if BISON_CXX_WORKS
|
||||
check_PROGRAMS += examples/calc++/calc++
|
||||
examples_calc___calc___SOURCES = \
|
||||
$(calc_sources) \
|
||||
examples/calc++/y.tab.h \
|
||||
examples/calc++/calc++-parser.hh
|
||||
$(calc_sources)
|
||||
|
||||
examples_calc___calc___CPPFLAGS = -I$(top_srcdir)/examples/calc++
|
||||
examples_calc___calc___CPPFLAGS = \
|
||||
-I$(top_builddir)/examples/calc++ \
|
||||
-I$(top_srcdir)/examples/calc++
|
||||
TESTS += examples/calc++/calc++.test
|
||||
endif
|
||||
EXTRA_DIST += examples/calc++/calc++.test
|
||||
EXTRA_DIST += \
|
||||
examples/calc++/calc++-parser.yy \
|
||||
examples/calc++/calc++.test
|
||||
|
||||
@@ -29,7 +29,7 @@ BEGIN {
|
||||
if (ARGV[argc] == "--")
|
||||
break;
|
||||
for (i = argc + 1; i < ARGC; ++i)
|
||||
file_wanted[ARGV[i]] = 1;
|
||||
file_wanted[basename(ARGV[i])] = ARGV[i];
|
||||
ARGC = argc;
|
||||
}
|
||||
|
||||
@@ -43,13 +43,10 @@ BEGIN {
|
||||
}
|
||||
|
||||
/^@comment file: / {
|
||||
if (!file_wanted[$3])
|
||||
message("ignoring " $3);
|
||||
if (file = file_wanted[$3])
|
||||
message(" GEN " file);
|
||||
else
|
||||
{
|
||||
message("extracting " $3);
|
||||
file = $3;
|
||||
}
|
||||
message("SKIP " $3);
|
||||
}
|
||||
|
||||
/^@(small)?example$/, /^@end (small)?example$/ {
|
||||
@@ -125,6 +122,11 @@ function normalize(contents, i, lines, n, line, res) {
|
||||
}
|
||||
|
||||
|
||||
function basename(name, a, n) {
|
||||
n = split (name, a, "/");
|
||||
return a[n];
|
||||
}
|
||||
|
||||
function message(msg) {
|
||||
if (! message_printed[msg])
|
||||
{
|
||||
|
||||
@@ -13,11 +13,28 @@
|
||||
## You should have received a copy of the GNU General Public License
|
||||
## along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
|
||||
doc = $(top_srcdir)/doc/bison.texinfo
|
||||
extexi = $(top_srcdir)/examples/extexi
|
||||
dist_noinst_SCRIPTS = examples/extexi examples/test
|
||||
TEST_LOG_COMPILER = $(top_srcdir)/examples/test
|
||||
|
||||
## ------------ ##
|
||||
## Extracting. ##
|
||||
## ------------ ##
|
||||
|
||||
doc = $(top_srcdir)/doc/bison.texinfo
|
||||
extexi = $(top_srcdir)/examples/extexi
|
||||
extract = $(AWK) -f $(extexi) -v VERSION="$(VERSION)" $(doc) --
|
||||
extracted =
|
||||
MAINTAINERCLEANFILES += $(extracted)
|
||||
examples/extracted.stamp: $(doc) $(extexi)
|
||||
$(AM_V_GEN)rm -f $@ $@.tmp
|
||||
$(AM_V_at)touch $@.tmp
|
||||
$(AM_V_at)$(extract) $(extracted)
|
||||
$(AM_V_at)mv $@.tmp $@
|
||||
|
||||
$(extracted): examples/extracted.stamp
|
||||
@test -f $@ || rm -f examples/extracted.stamp
|
||||
@test -f $@ || $(MAKE) $(AM_MAKEFLAGS) examples/extracted.stamp
|
||||
|
||||
include examples/calc++/local.mk
|
||||
include examples/mfcalc/local.mk
|
||||
include examples/rpcalc/local.mk
|
||||
|
||||
@@ -15,38 +15,19 @@
|
||||
# You should have received a copy of the GNU General Public License
|
||||
# along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
|
||||
## ------------ ##
|
||||
## Extracting. ##
|
||||
## ------------ ##
|
||||
|
||||
# Extract in src.
|
||||
$(top_srcdir)/examples/mfcalc/mfcalc.stamp: $(doc) $(extexi)
|
||||
$(AM_V_GEN)rm -f $@ $@.tmp
|
||||
$(AM_V_at)touch $@.tmp
|
||||
$(AM_V_at)cd $(top_srcdir)/examples/mfcalc && \
|
||||
$(AWK) -f ../extexi -v VERSION="$(VERSION)" \
|
||||
../../doc/bison.texinfo -- calc.h mfcalc.y
|
||||
$(AM_V_at)mv $@.tmp $@
|
||||
|
||||
$(mfcalc_extracted): $(top_srcdir)/examples/mfcalc/mfcalc.stamp
|
||||
$(AM_V_GEN)if test -f $@; then :; else \
|
||||
rm -f $< && \
|
||||
$(MAKE) $(AM_MAKEFLAGS) $<; \
|
||||
fi
|
||||
|
||||
## -------------------- ##
|
||||
## Building & testing. ##
|
||||
## -------------------- ##
|
||||
|
||||
BUILT_SOURCES += $(mfcalc_sources)
|
||||
MAINTAINERCLEANFILES += $(top_srcdir)/examples/mfcalc/mfcalc.stamp $(mfcalc_sources)
|
||||
EXTRA_DIST += examples/mfcalc/mfcalc.stamp
|
||||
MAINTAINERCLEANFILES += $(mfcalc_sources)
|
||||
|
||||
mfcalc_extracted = \
|
||||
examples/mfcalc/calc.h \
|
||||
examples/mfcalc/mfcalc.y
|
||||
mfcalc_sources = \
|
||||
$(mfcalc_extracted)
|
||||
extracted += $(mfcalc_extracted)
|
||||
|
||||
check_PROGRAMS += examples/mfcalc/mfcalc
|
||||
examples_mfcalc_mfcalc_LDADD = -lm
|
||||
|
||||
@@ -15,37 +15,18 @@
|
||||
# You should have received a copy of the GNU General Public License
|
||||
# along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
|
||||
## ------------ ##
|
||||
## Extracting. ##
|
||||
## ------------ ##
|
||||
|
||||
# Extract in src.
|
||||
$(top_srcdir)/examples/rpcalc/rpcalc.stamp: $(doc) $(extexi)
|
||||
$(AM_V_GEN)rm -f $@ $@.tmp
|
||||
$(AM_V_at)touch $@.tmp
|
||||
$(AM_V_at)cd $(top_srcdir)/examples/rpcalc && \
|
||||
$(AWK) -f ../extexi -v VERSION="$(VERSION)" \
|
||||
../../doc/bison.texinfo -- calc.h rpcalc.y
|
||||
$(AM_V_at)mv $@.tmp $@
|
||||
|
||||
$(rpcalc_extracted): $(top_srcdir)/examples/rpcalc/rpcalc.stamp
|
||||
$(AM_V_GEN)if test -f $@; then :; else \
|
||||
rm -f $< && \
|
||||
$(MAKE) $(AM_MAKEFLAGS) $<; \
|
||||
fi
|
||||
|
||||
## -------------------- ##
|
||||
## Building & testing. ##
|
||||
## -------------------- ##
|
||||
|
||||
BUILT_SOURCES += $(rpcalc_sources)
|
||||
MAINTAINERCLEANFILES += $(top_srcdir)/examples/rpcalc/rpcalc.stamp $(rpcalc_sources)
|
||||
EXTRA_DIST += examples/rpcalc/rpcalc.stamp
|
||||
MAINTAINERCLEANFILES += $(rpcalc_sources)
|
||||
|
||||
rpcalc_extracted = \
|
||||
examples/rpcalc/rpcalc.y
|
||||
rpcalc_sources = \
|
||||
$(rpcalc_extracted)
|
||||
extracted += $(rpcalc_extracted)
|
||||
|
||||
check_PROGRAMS += examples/rpcalc/rpcalc
|
||||
examples_rpcalc_rpcalc_LDADD = -lm
|
||||
|
||||
Reference in New Issue
Block a user