summaryrefslogtreecommitdiff
path: root/tiger-compiler/src/parse/local.am
blob: 1d80d2a91e3793fff5510be08090aa94dec3c031 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
## -------------------- ##
## Scanner generation.  ##
## -------------------- ##

# Definition of flags used by reflex
REFLEX_HEADER = %D%/scantiger.hh
REFLEX_FLAGS = -d --flex --header-file=$(REFLEX_HEADER)
SOURCES_REFLEX = $(REFLEX_HEADER) %D%/scantiger.cc

MAINTAINERCLEANFILES += %D%/scantiger.cc $(REFLEX_HEADER)
EXTRA_DIST += %D%/scantiger.ll

# Rule to generate all files with reflex
%D%/scantiger.cc $(REFLEX_HEADER) : %D%/scantiger.ll
	$(AM_V_GEN)mkdir -p $(@D)
	$(AM_V_at)rm -f $@
# Generate scantiger.cc and scantiger.hh
	$(AM_V_at) $(REFLEX) $< -o %D%/scantiger.cc $(REFLEX_FLAGS)

## ------------------- ##
## Parser generation.  ##
## ------------------- ##
BISONXX = $(top_builddir)/build-aux/bin/bison++
BISONXX_IN = $(top_srcdir)/build-aux/bin/bison++.in
BISONXXFLAGS =                                                                 \
  $(if $(V:0=),--verbose)
AM_BISONFLAGS =                                                                \
  --warnings=all,dangling-alias                                                \
  --report=all

## Use this additional bison flag to display counterexamples in the tty.
#AM_BISONFLAGS += --warnings=counterexamples

# We do not use Automake features here.
SOURCES_PARSETIGER_YY =                                                        \
  %D%/location.hh                                                              \
  %D%/parsetiger.cc                                                            \
  %D%/parsetiger.hh
BUILT_SOURCES += $(SOURCES_PARSETIGER_YY)

# Ship %D%/stack.hh only if GLR is disabled, as Bison does not
# generate this file for GLR parsers.
dist-hook: dist-hook-parse
dist-hook-parse:
	@grep '%glr-parser' $(srcdir)/%D%/parsetiger.yy >/dev/null                 \
	  || cp -p $(srcdir)/%D%/stack.hh $(distdir)/src/parse/

# Compile the parser and save cycles.
# This code comes from "Handling Tools that Produce Many Outputs",
# from the Automake documentation.
EXTRA_DIST +=                                                                  \
  %D%/parsetiger.stamp                                                         \
  %D%/parsetiger.yy
# The dependency is on bison++.in and not bison++, since bison++ is
# regenerated at distribution time, and voids the time stamps (which
# we don't want!).
%D%/parsetiger.stamp: %D%/parsetiger.yy $(BISONXX_IN)
	$(AM_V_GEN)mkdir -p $(@D)
	$(AM_V_at)rm -f $@ $@.tmp
	$(AM_V_at)echo '$@ rebuilt because of: $?' >$@.tmp
	$(AM_V_at)$(MAKE) $(BISONXX)
	$(AM_V_at)$(BISONXX) $(BISONXXFLAGS)                                       \
	  -r $(srcdir)/src                                                         \
	  --                                                                       \
	  $< $(srcdir)/%D%/parsetiger.cc                                           \
	  $(AM_BISONFLAGS) $(BISONFLAGS)
	$(AM_V_at)mv -f $@.tmp $@

## If Make does not know it will generate in the srcdir, then when
## trying to compile from *.cc to *.lo, it will not apply VPATH
## lookup, since it expects the file to be in builddir.  So *here*,
## make srcdir explicit.
$(addprefix $(srcdir)/, $(SOURCES_PARSETIGER_YY)): %D%/parsetiger.stamp
	$(AM_V_GEN)if test -f $@; then :; else                                     \
	  rm -f $<;                                                                \
	  $(MAKE) $(AM_MAKEFLAGS) $<;                                              \
	fi

# We tried several times to run make from ast/ to build location.hh.
# Unfortunately, because of different, but equivalent, paths, BSD Make
# was unable to build them.  The following hook is here to address this.
.PHONY: generate-parser
generate-parser: $(SOURCES_PARSETIGER_YY)

PARSE_PRELUDE_GENERATION = %D%/generate-prelude.sh
EXTRA_DIST += $(PARSE_PRELUDE_GENERATION)
CLEANFILES += %D%/prelude.cc
%D%/prelude.cc: $(top_srcdir)/data/prelude.tih
	$(AM_V_GEN)$(srcdir)/$(PARSE_PRELUDE_GENERATION) $< $@

## ---------- ##
## libparse.  ##
## ---------- ##

src_libtc_la_SOURCES +=                                                        \
  $(SOURCES_REFLEX)                                                            \
  $(SOURCES_PARSETIGER_YY)                                                     \
  %D%/fwd.hh                                                                   \
  %D%/libparse.hh %D%/libparse.cc                                              \
  %D%/metavar-map.hh %D%/metavar-map.hxx                                       \
  %D%/tiger-driver.hh %D%/tiger-driver.cc                                      \
  %D%/tweast.hh %D%/tweast.cc %D%/tweast.hxx
src_libtc_la_SOURCES +=                                                        \
  %D%/tiger-factory.hh %D%/tiger-factory.hxx

FORMAT_IGNORE += $REFLEX_HEADER

nodist_src_libtc_la_SOURCES +=                                                 \
  %D%/prelude.cc

## ------- ##
## Tests.  ##
## ------- ##

check_PROGRAMS +=                                                              \
  %D%/test-parse                                                               \
  %D%/test-tweast

# Find the prelude.
%C%_test_parse_CPPFLAGS = $(AM_CPPFLAGS) -DPKGDATADIR=\"$(pkgdatadir)\"
%C%_test_parse_LDADD = src/libtc.la
%C%_test_tweast_LDADD = src/libtc.la


TASKS += %D%/tasks.hh %D%/tasks.cc