1###############################################################################
2# $Id:$
3###############################################################################
4
5##xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
6@stdvars@
7##xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
8
9## do not change this value
10subdir=examples/cpp/calc
11
12
13srcdir = @abs_top_srcdir@/examples/cpp/calc
14objdir = @abs_this_builddir@/examples/cpp/calc
15
16this : test
17test : test1 test2 test3
18
19all: calc1 calc2 calc3 test
20
21g_FILES = \
22	$(srcdir)/calc.g \
23	$(eol)
24
25g_cxx_FILES = \
26  $(objdir)/CalcLexer.cpp \
27	$(objdir)/CalcParser.cpp \
28	$(objdir)/CalcTreeWalker.cpp \
29  $(eol)
30
31g_hpp_FILES = \
32	$(objdir)/CalcLexer.hpp \
33  $(objdir)/CalcParser.hpp \
34  $(objdir)/CalcParserTokenTypes.hpp \
35  $(objdir)/CalcTreeWalker.hpp \
36  $(eol)
37
38g_txt_FILES = \
39	$(objdir)/CalcParserTokenTypes.txt \
40	$(eol)
41
42g_gen_FILES = \
43	$(g_cxx_FILES) \
44	$(g_hpp_FILES) \
45	$(g_txt_FILES) \
46	$(eol)
47
48g_obj_FILES = \
49	$(objdir)/CalcLexer@OBJEXT@ \
50	$(objdir)/CalcParser@OBJEXT@ \
51	$(objdir)/CalcTreeWalker@OBJEXT@ \
52  $(eol)
53
54## Source files
55calc1_cxx_FILES = \
56	$(g_cxx_FILES) \
57	$(srcdir)/Main.cpp  \
58	$(eol)
59
60calc2_cxx_FILES = \
61	$(g_cxx_FILES) \
62	$(srcdir)/Main2.cpp \
63	$(eol)
64
65calc3_cxx_FILES = \
66	$(g_cxx_FILES) \
67	$(srcdir)/Main3.cpp \
68	$(eol)
69
70## Object files
71calc1_obj_FILES = \
72	$(g_obj_FILES) \
73	$(objdir)/Main@OBJEXT@  \
74	$(eol)
75
76calc2_obj_FILES = \
77	$(g_obj_FILES) \
78	$(objdir)/Main2@OBJEXT@ \
79	$(eol)
80
81calc3_obj_FILES = \
82	$(g_obj_FILES) \
83	$(objdir)/Main3@OBJEXT@ \
84	$(eol)
85
86## Test commands ..
87test1_cmd = $(objdir)/calc1 < $(srcdir)/test.in
88test2_cmd = $(objdir)/calc2 '1+1;'
89test3_cmd = $(objdir)/calc3 '1+2;'
90
91
92## Tests to be executed
93test1 : calc1
94	@ v="$(verbose)"; \
95    if test $$v -gt 0 ; then \
96      @ECHO@ "$(test1_cmd)" ; \
97    else \
98      @ECHO@ "exec test1 .."; \
99    fi
100	@ $(test1_cmd)
101
102test2 : calc2
103	@ v="$(verbose)"; \
104    if test $$v -gt 0 ; then \
105      @ECHO@ "$(test2_cmd)" ; \
106    else \
107      @ECHO@ "exec test2 .."; \
108    fi
109	@ $(test2_cmd)
110
111test3 : calc3
112	@ v="$(verbose)"; \
113    if test $$v -gt 0 ; then \
114      @ECHO@ "$(test3_cmd)" ; \
115    else \
116      @ECHO@ "exec test3 .."; \
117    fi
118	@ $(test3_cmd)
119
120
121## How to make binaries
122calc1 : $(calc1_obj_FILES) @ANTLR_LIB@
123	@ @CXX_LINK_CMD@ $@ $(calc1_obj_FILES)
124
125calc2 : $(calc2_obj_FILES) @ANTLR_LIB@
126	@ @CXX_LINK_CMD@ $@ $(calc2_obj_FILES)
127
128calc3 : $(calc3_obj_FILES) @ANTLR_LIB@
129	@ @CXX_LINK_CMD@ $@ $(calc3_obj_FILES)
130
131## How to compile ANTLR grammar files
132$(g_gen_FILES) : $(g_FILES) @ANTLR_JAR@
133	@ANTLR_COMPILE_CMD@  $(g_FILES)
134
135## GNU make - how to make object file
136$(objdir)/%@OBJEXT@ : $(srcdir)/%.cpp
137	@ @CXX_COMPILE_CMD@ $<
138
139## GNU make - how to make object file
140$(objdir)/%@OBJEXT@ : $(objdir)/%.cpp
141	@ @CXX_COMPILE_CMD@ $<
142
143## GNU make - how to make object file
144%@OBJEXT@ : $(srcdir)/%.cpp
145	@ @CXX_COMPILE_CMD@ $<
146
147## GNU make - how to make object file
148%@OBJEXT@ : $(objdir)/%.cpp
149	@ @CXX_COMPILE_CMD@ $<
150
151## Housecleaning
152clean:
153	@RMF@ *.o *.obj *.exe calc1 calc2 calc3  $(g_gen_FILES) test1 test2 test3
154
155distclean: clean
156	@RMF@ Makefile
157
158# Dependencies
159$(objdir)/CalcLexer@OBJEXT@ :       \
160 $(objdir)/CalcLexer.hpp            \
161 $(objdir)/CalcParserTokenTypes.hpp
162
163$(objdir)/CalcParser@OBJEXT@     :  \
164 $(objdir)/CalcParser.hpp           \
165 $(objdir)/CalcParserTokenTypes.hpp
166
167$(objdir)/CalcTreeWalker@OBJEXT@ :  \
168 $(objdir)/CalcTreeWalker.hpp       \
169 $(objdir)/CalcParserTokenTypes.hpp
170
171$(objdir)/Main@OBJEXT@           :  \
172 $(objdir)/CalcLexer.hpp            \
173 $(objdir)/CalcParserTokenTypes.hpp \
174 $(objdir)/CalcParser.hpp \
175 $(objdir)/CalcTreeWalker.hpp
176
177$(objdir)/Main2@OBJEXT@          :  \
178 $(objdir)/CalcLexer.hpp            \
179 $(objdir)/CalcParserTokenTypes.hpp \
180 $(objdir)/CalcParser.hpp           \
181 $(objdir)/CalcTreeWalker.hpp
182
183$(objdir)/Main3@OBJEXT@          :  \
184 $(objdir)/CalcLexer.hpp            \
185 $(objdir)/CalcParserTokenTypes.hpp \
186 $(objdir)/CalcParser.hpp           \
187 $(objdir)/CalcTreeWalker.hpp
188
189## If cxx.sh script changed ..
190$(calc1_obj_FILES) : @abs_this_builddir@/scripts/cxx.sh
191$(calc2_obj_FILES) : @abs_this_builddir@/scripts/cxx.sh
192$(calc3_obj_FILES) : @abs_this_builddir@/scripts/cxx.sh
193
194## If link.sh script changed ..
195$(calc1_obj_FILES) : @abs_this_builddir@/scripts/link.sh
196$(calc2_obj_FILES) : @abs_this_builddir@/scripts/link.sh
197$(calc3_obj_FILES) : @abs_this_builddir@/scripts/link.sh
198
199### get configured dependencies - for example, just list
200### autoconf variable ANTLR_JAR as reference and it will
201### be  done  automatically  as stddeps contains appropr.
202### rule. For details, checkout scripts/config.vars[.in]
203@stddeps@
204
205
206