1#==============================================================================
2#   Copyright (c) 2001-2011 Joel de Guzman
3#   Copyright (c) 2001-2012 Hartmut Kaiser
4#   Copyright (c)      2011 Bryce Lelbach
5#
6#   Use, modification and distribution is subject to the Boost Software
7#   License, Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
8#   http://www.boost.org/LICENSE_1_0.txt)
9#==============================================================================
10
11# bring in rules for testing
12import testing ;
13import modules ;
14import feature ;
15
16###############################################################################
17project spirit_v2x/test
18    : requirements
19        <include>.
20        <toolset>gcc:<cxxflags>-ftemplate-depth-512
21        <toolset>darwin:<cxxflags>-ftemplate-depth-512
22        <toolset>clang:<cxxflags>-ftemplate-depth=512
23    :
24    :
25    ;
26
27v3_tests = ;
28
29rule run ( sources + : args * : input-files * : requirements * : target-name ? :  default-build * )
30{
31    target-name ?= $(sources[1]:D=:S=) ;
32    v3_tests += [ testing.run $(sources) : $(args) : $(input-files) : $(requirements) : $(target-name)-p3 : $(default-build) ] ;
33}
34
35rule compile ( sources + : requirements * : target-name ? )
36{
37    target-name ?= $(sources[1]:D=:S=) ;
38    v3_tests += [ testing.compile $(sources) : $(requirements) : $(target-name)-p3 ] ;
39}
40
41rule compile-fail ( sources + : requirements * : target-name ? )
42{
43    target-name ?= $(sources[1]:D=:S=) ;
44    v3_tests += [ testing.compile-fail $(sources) : $(requirements) : $(target-name)-p3 ] ;
45}
46
47###############################################################################
48path-constant LEX_DIR : $(BOOST_ROOT)/libs/spirit/test/lex ;
49
50{
51    ###########################################################################
52    test-suite spirit_v2/qi :
53
54     [ run qi/actions.cpp          : : : : qi_actions ]
55     [ run qi/actions2.cpp         : : : : qi_actions2 ]
56     [ run qi/alternative.cpp      : : : : qi_alternative ]
57     [ run qi/attr.cpp             : : : : qi_attr ]
58     [ run qi/attribute1.cpp       : : : : qi_attribute1 ]
59     [ run qi/attribute2.cpp       : : : : qi_attribute2 ]
60     [ run qi/and_predicate.cpp    : : : : qi_and_predicate ]
61     [ run qi/auto.cpp             : : : : qi_auto ]
62     [ run qi/binary.cpp           : : : : qi_binary ]
63     [ run qi/bool1.cpp            : : : : qi_bool1 ]
64     [ run qi/bool2.cpp            : : : : qi_bool2 ]
65     [ run qi/char1.cpp            : : : : qi_char1 ]
66     [ run qi/char2.cpp            : : : : qi_char2 ]
67     [ run qi/char_class.cpp       : : : : qi_char_class ]
68     [ run qi/debug.cpp            : : : : qi_debug ]
69     [ run qi/difference.cpp       : : : : qi_difference ]
70     [ run qi/encoding.cpp         : : : : qi_encoding ]
71     [ run qi/end.cpp              : : : : qi_end ]
72     [ run qi/eps.cpp              : : : : qi_eps ]
73     [ run qi/expect.cpp           : : : : qi_expect ]
74     [ run qi/grammar.cpp          : : : : qi_grammar ]
75     [ run qi/int1.cpp             : : : : qi_int1 ]
76     [ run qi/int2.cpp             : : : : qi_int2 ]
77     [ run qi/int3.cpp             : : : : qi_int3 ]
78     [ run qi/kleene.cpp           : : : : qi_kleene ]
79     [ run qi/lazy.cpp             : : : : qi_lazy ]
80     [ run qi/lexeme.cpp           : : : : qi_lexeme ]
81     [ run qi/lit1.cpp             : : : : qi_lit1 ]
82     [ run qi/lit2.cpp             : : : : qi_lit2 ]
83     [ run qi/list.cpp             : : : : qi_list ]
84     [ run qi/hold.cpp             : : : : qi_hold ]
85     [ run qi/match_manip1.cpp     : : : : qi_match_manip1 ]
86     [ run qi/match_manip2.cpp     : : : : qi_match_manip2 ]
87     [ run qi/match_manip3.cpp     : : : : qi_match_manip3 ]
88     [ run qi/match_manip_attr.cpp : : : : qi_match_manip_attr ]
89     [ run qi/matches.cpp          : : : : qi_matches ]
90     [ run qi/no_case.cpp          : : : : qi_no_case ]
91     [ run qi/no_skip.cpp          : : : : qi_no_skip ]
92     [ run qi/not_predicate.cpp    : : : : qi_not_predicate ]
93     [ run qi/optional.cpp         : : : : qi_optional ]
94     [ run qi/parse_attr.cpp       : : : : qi_parse_attr ]
95     [ run qi/pass_container1.cpp  : : : : qi_pass_container1 ]
96     [ run qi/pass_container2.cpp  : : : : qi_pass_container2 ]
97     [ run qi/permutation.cpp      : : : : qi_permutation ]
98     [ run qi/plus.cpp             : : : : qi_plus ]
99     [ run qi/range_run.cpp        : : : : qi_range_run ]
100     [ run qi/raw.cpp              : : : : qi_raw ]
101     [ run qi/real1.cpp            : : : : qi_real1 ]
102     [ run qi/real2.cpp            : : : : qi_real2 ]
103     [ run qi/real3.cpp            : : : : qi_real3 ]
104     [ run qi/real4.cpp            : : : : qi_real4 ]
105     [ run qi/real5.cpp            : : : : qi_real5 ]
106     [ run qi/repeat.cpp           : : : : qi_repeat ]
107     [ run qi/rule1.cpp            : : : : qi_rule1 ]
108     [ run qi/rule2.cpp            : : : : qi_rule2 ]
109     [ run qi/rule3.cpp            : : : : qi_rule3 ]
110     [ run qi/rule4.cpp            : : : : qi_rule4 ]
111     [ run qi/sequence.cpp         : : : : qi_sequence ]
112     [ run qi/sequential_or.cpp    : : : : qi_sequential_or ]
113     [ run qi/skip.cpp             : : : : qi_skip ]
114     [ run qi/stream.cpp           : : : : qi_stream ]
115     [ run qi/symbols1.cpp         : : : : qi_symbols1 ]
116     [ run qi/symbols2.cpp         : : : : qi_symbols2 ]
117     [ run qi/terminal_ex.cpp      : : : : qi_terminal_ex ]
118     [
119         run qi/tst.cpp
120         /boost//system
121         : : : : qi_tst
122     ]
123     [ run qi/uint1.cpp            : : : : qi_uint1 ]
124     [ run qi/uint2.cpp            : : : : qi_uint2 ]
125     [ run qi/uint3.cpp            : : : : qi_uint3 ]
126     [ run qi/uint_radix.cpp       : : : : qi_uint_radix ]
127     [ run qi/utree1.cpp           : : : : qi_utree1 ]
128     [ run qi/utree2.cpp           : : : : qi_utree2 ]
129     [ run qi/utree3.cpp           : : : : qi_utree3 ]
130     [ run qi/utree4.cpp           : : : : qi_utree4 ]
131
132    ;
133
134    ###########################################################################
135    test-suite spirit_v2/qi_regressions :
136
137     [ compile qi/pass_container3.cpp                             : : qi_pass_container3 ]
138     [ compile qi/regression_attr_with_action.cpp                 : : qi_regression_attr_with_action ]
139     [ compile qi/regression_container_attribute.cpp              : : qi_regression_container_attribute ]
140     [ compile qi/regression_debug_optional.cpp                   : : qi_regression_debug_optional ]
141     [ compile qi/regression_fusion_proto_spirit.cpp              : : qi_regression_fusion_proto_spirit ]
142     [ compile qi/regression_one_element_fusion_sequence.cpp      : : qi_regression_one_element_fusion_sequence ]
143     [ compile qi/regression_one_element_sequence_attribute.cpp   : : qi_regression_one_element_sequence_attribute ]
144
145     [ run qi/regression_adapt_adt.cpp                            : : : : qi_regression_adapt_adt ]
146     [ run qi/regression_clear.cpp                                : : : : qi_regression_clear ]
147     #[ run qi/regression_float_fraction.cpp                      : : : : qi_regression_float_fraction ]
148     [ run qi/regression_lazy_repeat.cpp                          : : : : qi_regression_lazy_repeat ]
149     [ run qi/regression_numeric_alternatives.cpp                 : : : : qi_regression_numeric_alternatives ]
150     [ run qi/regression_reorder.cpp                              : : : : qi_regression_reorder ]
151     [ run qi/regression_repeat.cpp                               : : : : qi_regression_repeat ]
152     [ run qi/regression_transform_assignment.cpp                 : : : : qi_regression_transform_assignment ]
153     [ run qi/regression_binary_action.cpp                        : : : : qi_regression_binary_action ]
154     [ run qi/regression_stream_eof.cpp                           : : : : qi_regression_stream_eof ]
155    ;
156
157    ###########################################################################
158    test-suite spirit_v2/karma :
159
160     [ compile-fail karma/grammar_fail.cpp         : : karma_grammar_fail ]
161     [ compile-fail karma/rule_fail.cpp            : : karma_rule_fail ]
162     [ run karma/actions.cpp                   : : : : karma_actions ]
163     [ run karma/alternative1.cpp              : : : : karma_alternative1 ]
164     [ run karma/alternative2.cpp              : : : : karma_alternative2 ]
165     [ run karma/and_predicate.cpp             : : : : karma_and_predicate ]
166     [ run karma/attribute.cpp                 : : : : karma_attribute ]
167     [ run karma/auto1.cpp                     : : : : karma_auto1 ]
168     [ run karma/auto2.cpp                     : : : : karma_auto2 ]
169     [ run karma/auto3.cpp                     : : : : karma_auto3 ]
170     [ run karma/binary1.cpp                   : : : : karma_binary1 ]
171     [ run karma/binary2.cpp                   : : : : karma_binary2 ]
172     [ run karma/binary3.cpp                   : : : : karma_binary3 ]
173     [ run karma/bool.cpp                      : : : : karma_bool ]
174     [ run karma/buffer.cpp                    : : : : karma_buffer ]
175     [ run karma/case_handling1.cpp            : : : : karma_case_handling1 ]
176     [ run karma/case_handling2.cpp            : : : : karma_case_handling2 ]
177     [ run karma/case_handling3.cpp            : : : : karma_case_handling3 ]
178     [ run karma/center_alignment.cpp          : : : : karma_center_alignment ]
179     [ run karma/char1.cpp                     : : : : karma_char1 ]
180     [ run karma/char2.cpp                     : : : : karma_char2 ]
181     [ run karma/char3.cpp                     : : : : karma_char3 ]
182     [ run karma/char_class.cpp                : : : : karma_char_class ]
183     [ run karma/columns.cpp                   : : : : karma_columns ]
184     [ run karma/debug.cpp                     : : : : karma_debug ]
185     [ run karma/delimiter.cpp                 : : : : karma_delimiter ]
186     [ run karma/duplicate.cpp                 : : : : karma_duplicate ]
187     [ run karma/encoding.cpp                  : : : : karma_encoding ]
188     [ run karma/eol.cpp                       : : : : karma_eol ]
189     [ run karma/eps.cpp                       : : : : karma_eps ]
190     [ run karma/format_manip.cpp              : : : : karma_format_manip ]
191     [ run karma/format_manip_attr.cpp         : : : : karma_format_manip_attr ]
192     [ run karma/format_pointer_container.cpp  : : : : karma_format_pointer_container ]
193     [ run karma/generate_attr.cpp             : : : : karma_generate_attr ]
194     [ run karma/grammar.cpp                   : : : : karma_grammar ]
195     [ run karma/int1.cpp                      : : : : karma_int1 ]
196     [ run karma/int2.cpp                      : : : : karma_int2 ]
197     [ run karma/int3.cpp                      : : : : karma_int3 ]
198     [ run karma/kleene.cpp                    : : : : karma_kleene ]
199     [ run karma/lazy.cpp                      : : : : karma_lazy ]
200     [ run karma/left_alignment.cpp            : : : : karma_left_alignment ]
201     [ run karma/list.cpp                      : : : : karma_list ]
202     [ run karma/lit.cpp                       : : : : karma_lit ]
203     [ run karma/maxwidth.cpp                  : : : : karma_maxwidth ]
204     [ run karma/not_predicate.cpp             : : : : karma_not_predicate ]
205     [ run karma/omit.cpp                      : : : : karma_omit ]
206     [ run karma/optional.cpp                  : : : : karma_optional ]
207     [ run karma/pattern1.cpp                  : : : : karma_pattern1 ]
208     [ run karma/pattern2.cpp                  : : : : karma_pattern2 ]
209     [ run karma/pattern3.cpp                  : : : : karma_pattern3 ]
210     [ run karma/pattern4.cpp                  : : : : karma_pattern4 ]
211     [ run karma/plus.cpp                      : : : : karma_plus ]
212     [ run karma/real1.cpp                     : : : : karma_real1 ]
213     [ run karma/real2.cpp                     : : : : karma_real2 ]
214     [ run karma/real3.cpp                     : : : : karma_real3 ]
215     [ run karma/repeat1.cpp                   : : : : karma_repeat1 ]
216     [ run karma/repeat2.cpp                   : : : : karma_repeat2 ]
217     [ run karma/right_alignment.cpp           : : : : karma_right_alignment ]
218     [ run karma/sequence1.cpp                 : : : : karma_sequence1 ]
219     [ run karma/sequence2.cpp                 : : : : karma_sequence2 ]
220     [ run karma/stream.cpp                    : : : : karma_stream ]
221     [ run karma/symbols1.cpp                  : : : : karma_symbols1 ]
222     [ run karma/symbols2.cpp                  : : : : karma_symbols2 ]
223     [ run karma/symbols3.cpp                  : : : : karma_symbols3 ]
224     [ run karma/tricky_alignment.cpp          : : : : karma_tricky_alignment ]
225     [ run karma/uint_radix.cpp                : : : : karma_uint_radix ]
226     [ run karma/utree1.cpp                    : : : : karma_utree1 ]
227     [ run karma/utree2.cpp                    : : : : karma_utree2 ]
228     [ run karma/utree3.cpp                    : : : : karma_utree3 ]
229     [ run karma/wstream.cpp                   : : : : karma_wstream ]
230
231    ;
232
233    ###########################################################################
234    test-suite spirit_v2/karma_regressions :
235
236     [ compile karma/regression_const_real_policies.cpp    : :  regression_const_real_policies ]
237
238     [ run karma/regression_adapt_adt.cpp                  : : : :  karma_regression_adapt_adt ]
239     [ run karma/regression_optional_double.cpp            : : : :  karma_regression_optional_double ]
240     [ run karma/regression_semantic_action_attribute.cpp  : : : :  karma_regression_semantic_action_attribute ]
241     [ run karma/regression_real_scientific.cpp            : : : :  karma_regression_real_scientific ]
242     [ run karma/regression_center_alignment.cpp           : : : :  karma_regression_center_alignment ]
243     [ run karma/regression_container_variant_sequence.cpp : : : :  karma_regression_container_variant_sequence ]
244     [ run karma/regression_real_0.cpp                     : : : :  karma_regression_real_0 ]
245     [ run karma/regression_unicode_char.cpp               : : : :  karma_regression_unicode_char ]
246     [ run karma/regression_iterator.cpp                   : : : :  karma_regression_iterator ]
247
248    ;
249
250    ###########################################################################
251    test-suite spirit_v2/lex :
252
253     [ run lex/auto_switch_lexerstate.cpp    : : : : lex_auto_switch_lexerstate ]
254     [ run lex/dedent_handling_phoenix.cpp   : : : : lex_dedent_handling_phoenix ]
255     [ run lex/id_type_enum.cpp              : : : : lex_id_type_enum ]
256     [ run lex/lexertl1.cpp                  : : : : lex_lexertl1 ]
257     [ run lex/lexertl2.cpp                  : : : : lex_lexertl2 ]
258     [ run lex/lexertl3.cpp                  : : : : lex_lexertl3 ]
259     [ run lex/lexertl4.cpp                  : : : : lex_lexertl4 ]
260     [ run lex/lexertl5.cpp                  : : : : lex_lexertl5 ]
261     [ run lex/lexer_state_switcher.cpp      : : : : lex_lexer_state_switcher ]
262     [ run lex/semantic_actions.cpp          : : : : lex_semantic_actions ]
263     [ run lex/set_token_value.cpp           : : : : lex_set_token_value ]
264     [ run lex/set_token_value_phoenix.cpp   : : : : lex_set_token_value_phoenix ]
265     [ run lex/state_switcher.cpp            : : : : lex_state_switcher ]
266     [ run lex/string_token_id.cpp           : : : : lex_string_token_id ]
267     [ run lex/token_iterpair.cpp            : : : : lex_token_iterpair ]
268     [ run lex/token_moretypes.cpp           : : : : lex_token_moretypes ]
269     [ run lex/token_omit.cpp                : : : : lex_token_omit ]
270     [ run lex/token_onetype.cpp             : : : : lex_token_onetype ]
271
272    ;
273
274    ###########################################################################
275    test-suite spirit_v2/lex_regressions :
276
277     [ run lex/regression_basic_lexer.cpp : : : : lex_regression_basic_lexer ]
278     [ run lex/regression_matlib_dynamic.cpp : : : : lex_regression_matlib_dynamic ]
279     [ run lex/regression_matlib_generate.cpp : $(LEX_DIR)/matlib_static.h : : : lex_regression_matlib_generate ]
280#     [ run lex/regression_matlib_static.cpp : : :
281#       <phoenix_v3>on:<dependency>.//lex_regression_matlib_generate-p3
282#       <phoenix_v3>off:<dependency>.//lex_regression_matlib_generate-p2
283#       : lex_regression_matlib_static ]
284     [ run lex/regression_matlib_generate_switch.cpp : $(LEX_DIR)/matlib_static_switch.h : : : lex_regression_matlib_generate_switch ]
285#     [ run lex/regression_matlib_switch.cpp : : :
286#       <phoenix_v3>on:<dependency>.//lex_regression_matlib_generate_switch-p3
287#       <phoenix_v3>off:<dependency>.//lex_regression_matlib_generate_switch-p2
288#         : lex_regression_matlib_switch ]
289     [ run lex/regression_word_count.cpp : : : : lex_regression_word_count ]
290     [ run lex/regression_syntax_error.cpp : : : : lex_regression_syntax_error ]
291     [ run lex/regression_wide.cpp : : : : lex_regression_wide ]
292     [ run lex/regression_file_iterator1.cpp : : : : lex_regression_file_iterator1 ]
293     [ run lex/regression_file_iterator2.cpp : : : : lex_regression_file_iterator2 ]
294     [ run lex/regression_file_iterator3.cpp : : : : lex_regression_file_iterator3 ]
295     [ run lex/regression_file_iterator4.cpp : : : : lex_regression_file_iterator4 ]
296     [ run lex/regression_static_wide_6253.cpp : : : : regression_static_wide_6253 ]
297     [ run lex/regression_less_8563.cpp : : : : regression_less_8563 ]
298
299    ;
300
301    ###########################################################################
302    test-suite spirit_v2/support :
303
304     [ run support/utree.cpp                  : : : : support_utree ]
305     [ run support/utree_debug.cpp            : : : : support_utree_debug ]
306
307    ;
308
309    ###########################################################################
310    test-suite spirit_v2/support_regressions :
311
312     [ compile support/regression_multi_pass_position_iterator.cpp : : support_regression_multi_pass_position_iterator ]
313     [ compile support/regression_multi_pass_functor.cpp           : : support_regression_multi_pass_functor ]
314     [ compile support/regression_multi_pass_parse.cpp             : : support_regression_multi_pass_parse ]
315     [ run support/regression_multi_pass_error_handler.cpp         : : : : regression_multi_pass_error_handler ]
316
317    ;
318}
319
320# use this alias to build Spirit against Phoenix V3
321alias test_using_phoenix_v3 : $(v3_tests) ;
322
323explicit test_using_phoenix_v3 ;
324