1# Copyright 2010-2018, Google Inc.
2# All rights reserved.
3#
4# Redistribution and use in source and binary forms, with or without
5# modification, are permitted provided that the following conditions are
6# met:
7#
8#     * Redistributions of source code must retain the above copyright
9# notice, this list of conditions and the following disclaimer.
10#     * Redistributions in binary form must reproduce the above
11# copyright notice, this list of conditions and the following disclaimer
12# in the documentation and/or other materials provided with the
13# distribution.
14#     * Neither the name of Google Inc. nor the names of its
15# contributors may be used to endorse or promote products derived from
16# this software without specific prior written permission.
17#
18# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
19# "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
20# LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
21# A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
22# OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
23# SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
24# LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
25# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
26# THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
27# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
28# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
29
30# Template gypi to generate embedded data build rules.
31#
32# To use this gypi, define the following variables and include this file.
33# See mozc/data_manager/oss/oss_data_manager.gyp for example.
34#
35# - current_dir: Should be '.', which is the relative path where the file that
36#       includes this gypi exists.
37# - mozc_dir: Relatieve path to mozc top directory from the file that includes
38#       this gypi.
39# - common_data_dir: Should be '<(mozc_dir)/data', which contains common data
40#       files for all data set.
41# - platform_data_dir: Relative path to data directory containing dictionary and
42#       other required data. For example, '<(mozc_dir)/data/dictionary_oss'.
43# - boundary_def: Relative path to boundary rule definition file.
44# - dataset_tag: Unique data set tag name.
45# - use_1byte_cost_for_connection_data:
46#       Set to '1' or 'true' to compress connection data.
47#       Typically this variable is set by build_mozc.py as gyp's parameter.
48# - dictionary_files: A list of dictionary source files.
49# - magic_number: Magic number to be embedded in a data set file.
50# - out_mozc_data: Output file name for mozc data set.
51# - out_mozc_data_header: Output C++ header file of the embedded version of
52#       mozc data set file.
53# - mozc_data_vername: C++ variable name for the embedded mozc data set file.
54#       This variable is defined in out_mozc_data_header.
55{
56  'targets': [
57    {
58      'target_name': '<(dataset_tag)_data_manager',
59      'type': 'static_library',
60      'sources': [
61        '<(dataset_tag)_data_manager.cc',
62      ],
63      'dependencies': [
64        '<(mozc_dir)/base/base.gyp:base',
65        '<(mozc_dir)/data_manager/data_manager_base.gyp:data_manager',
66        'gen_embedded_mozc_dataset_for_<(dataset_tag)#host',
67      ],
68      'defines': [
69        'MOZC_DATASET_MAGIC_NUMBER="<(magic_number)"',
70      ],
71    },
72    {
73      'target_name': 'gen_embedded_mozc_dataset_for_<(dataset_tag)',
74      'type': 'none',
75      'toolsets': ['host'],
76      'dependencies': [
77        'gen_mozc_dataset_for_<(dataset_tag)',
78      ],
79      'actions': [
80        {
81          'action_name': 'gen_embedded_mozc_dataset_for_<(dataset_tag)',
82          'variables': {
83            'mozc_data': '<(gen_out_dir)/<(out_mozc_data)',
84          },
85          'inputs': [
86            '<(mozc_data)',
87          ],
88          'outputs': [
89            '<(gen_out_dir)/<(out_mozc_data_header)',
90          ],
91          'action': [
92            '/usr/local/bin/python3.8', '<(mozc_dir)/build_tools/embed_file.py',
93            '--input=<(gen_out_dir)/<(out_mozc_data)',
94            '--name=<(mozc_data_varname)',
95            '--output=<(gen_out_dir)/<(out_mozc_data_header)',
96          ],
97        },
98      ],
99    },
100    {
101      'target_name': 'gen_mozc_dataset_for_<(dataset_tag)',
102      'type': 'none',
103      'toolsets': ['host'],
104      'dependencies': [
105        '../data_manager_base.gyp:dataset_writer_main',
106        '../../rewriter/rewriter_base.gyp:gen_rewriter_files#host',
107        '<(dataset_tag)_data_manager_base.gyp:gen_separate_pos_matcher_data_for_<(dataset_tag)#host',
108        '<(dataset_tag)_data_manager_base.gyp:gen_separate_user_pos_data_for_<(dataset_tag)#host',
109        'gen_separate_connection_data_for_<(dataset_tag)#host',
110        'gen_separate_dictionary_data_for_<(dataset_tag)#host',
111        'gen_separate_collocation_data_for_<(dataset_tag)#host',
112        'gen_separate_collocation_suppression_data_for_<(dataset_tag)#host',
113        'gen_separate_suggestion_filter_data_for_<(dataset_tag)#host',
114        'gen_separate_pos_group_data_for_<(dataset_tag)#host',
115        'gen_separate_boundary_data_for_<(dataset_tag)#host',
116        'gen_separate_counter_suffix_data_for_<(dataset_tag)#host',
117        'gen_separate_suffix_data_for_<(dataset_tag)#host',
118        'gen_separate_reading_correction_data_for_<(dataset_tag)#host',
119        'gen_separate_symbol_rewriter_data_for_<(dataset_tag)#host',
120        'gen_separate_emoticon_rewriter_data_for_<(dataset_tag)#host',
121        'gen_separate_emoji_rewriter_data_for_<(dataset_tag)#host',
122        'gen_separate_single_kanji_rewriter_data_for_<(dataset_tag)#host',
123        'gen_separate_zero_query_data_for_<(dataset_tag)#host',
124        'gen_separate_version_data_for_<(dataset_tag)#host',
125        'gen_typing_model_for_<(dataset_tag)#host',
126      ],
127      'actions': [
128        {
129          'action_name': 'gen_mozc_dataset_for_<(dataset_tag)',
130          'variables': {
131            'generator': '<(PRODUCT_DIR)/dataset_writer_main<(EXECUTABLE_SUFFIX)',
132            'pos_matcher': '<(gen_out_dir)/pos_matcher.data',
133            'user_pos_token': '<(gen_out_dir)/user_pos_token_array.data',
134            'user_pos_string': '<(gen_out_dir)/user_pos_string_array.data',
135            'dictionary': '<(gen_out_dir)/system.dictionary',
136            'connection': '<(gen_out_dir)/connection.data',
137            'collocation': '<(gen_out_dir)/collocation_data.data',
138            'collocation_supp': '<(gen_out_dir)/collocation_suppression_data.data',
139            'suggestion_filter': '<(gen_out_dir)/suggestion_filter_data.data',
140            'pos_group': '<(gen_out_dir)/pos_group.data',
141            'boundary': '<(gen_out_dir)/boundary.data',
142            'segmenter_sizeinfo': '<(gen_out_dir)/segmenter_sizeinfo.data',
143            'segmenter_ltable': '<(gen_out_dir)/segmenter_ltable.data',
144            'segmenter_rtable': '<(gen_out_dir)/segmenter_rtable.data',
145            'segmenter_bitarray': '<(gen_out_dir)/segmenter_bitarray.data',
146            'counter_suffix': '<(gen_out_dir)/counter_suffix.data',
147            'suffix_key': '<(gen_out_dir)/suffix_key.data',
148            'suffix_value': '<(gen_out_dir)/suffix_value.data',
149            'suffix_token': '<(gen_out_dir)/suffix_token.data',
150            'reading_correction_value': '<(gen_out_dir)/reading_correction_value.data',
151            'reading_correction_error': '<(gen_out_dir)/reading_correction_error.data',
152            'reading_correction_correction': '<(gen_out_dir)/reading_correction_correction.data',
153            'symbol_token': '<(gen_out_dir)/symbol_token.data',
154            'symbol_string': '<(gen_out_dir)/symbol_string.data',
155            'emoticon_token': '<(gen_out_dir)/emoticon_token.data',
156            'emoticon_string': '<(gen_out_dir)/emoticon_string.data',
157            'emoji_token': '<(gen_out_dir)/emoji_token.data',
158            'emoji_string': '<(gen_out_dir)/emoji_string.data',
159            'single_kanji_token': '<(gen_out_dir)/single_kanji_token.data',
160            'single_kanji_string': '<(gen_out_dir)/single_kanji_string.data',
161            'single_kanji_variant_type': '<(gen_out_dir)/single_kanji_variant_type.data',
162            'single_kanji_variant_token': '<(gen_out_dir)/single_kanji_variant_token.data',
163            'single_kanji_variant_string': '<(gen_out_dir)/single_kanji_variant_string.data',
164            'single_kanji_noun_prefix_token': '<(gen_out_dir)/single_kanji_noun_prefix_token.data',
165            'single_kanji_noun_prefix_string': '<(gen_out_dir)/single_kanji_noun_prefix_string.data',
166            'zero_query_token_array': '<(gen_out_dir)/zero_query_token.data',
167            'zero_query_string_array': '<(gen_out_dir)/zero_query_string.data',
168            'zero_query_number_token_array': '<(gen_out_dir)/zero_query_number_token.data',
169            'zero_query_number_string_array': '<(gen_out_dir)/zero_query_number_string.data',
170            'version': '<(gen_out_dir)/version.data',
171          },
172          'inputs': [
173            '<(pos_matcher)',
174            '<(user_pos_token)',
175            '<(user_pos_string)',
176            '<(dictionary)',
177            '<(connection)',
178            '<(collocation)',
179            '<(collocation_supp)',
180            '<(suggestion_filter)',
181            '<(pos_group)',
182            '<(boundary)',
183            '<(segmenter_sizeinfo)',
184            '<(segmenter_ltable)',
185            '<(segmenter_rtable)',
186            '<(segmenter_bitarray)',
187            '<(counter_suffix)',
188            '<(suffix_key)',
189            '<(suffix_value)',
190            '<(suffix_token)',
191            '<(reading_correction_value)',
192            '<(reading_correction_error)',
193            '<(reading_correction_correction)',
194            '<(symbol_token)',
195            '<(symbol_string)',
196            '<(emoticon_token)',
197            '<(emoticon_string)',
198            '<(emoji_token)',
199            '<(emoji_string)',
200            '<(single_kanji_token)',
201            '<(single_kanji_string)',
202            '<(single_kanji_variant_type)',
203            '<(single_kanji_variant_token)',
204            '<(single_kanji_variant_string)',
205            '<(single_kanji_noun_prefix_token)',
206            '<(single_kanji_noun_prefix_string)',
207            '<(zero_query_token_array)',
208            '<(zero_query_string_array)',
209            '<(zero_query_number_token_array)',
210            '<(zero_query_number_string_array)',
211            '<(version)',
212          ],
213          'outputs': [
214            '<(gen_out_dir)/<(out_mozc_data)',
215          ],
216          'action': [
217            '<(generator)',
218            '--magic=<(magic_number)',
219            '--output=<(gen_out_dir)/<(out_mozc_data)',
220            'pos_matcher:32:<(pos_matcher)',
221            'user_pos_token:32:<(user_pos_token)',
222            'user_pos_string:32:<(user_pos_string)',
223            'coll:32:<(gen_out_dir)/collocation_data.data',
224            'cols:32:<(gen_out_dir)/collocation_suppression_data.data',
225            'conn:32:<(gen_out_dir)/connection.data',
226            'dict:32:<(gen_out_dir)/system.dictionary',
227            'sugg:32:<(gen_out_dir)/suggestion_filter_data.data',
228            'posg:32:<(gen_out_dir)/pos_group.data',
229            'bdry:32:<(gen_out_dir)/boundary.data',
230            'segmenter_sizeinfo:32:<(gen_out_dir)/segmenter_sizeinfo.data',
231            'segmenter_ltable:32:<(gen_out_dir)/segmenter_ltable.data',
232            'segmenter_rtable:32:<(gen_out_dir)/segmenter_rtable.data',
233            'segmenter_bitarray:32:<(gen_out_dir)/segmenter_bitarray.data',
234            'counter_suffix:32:<(gen_out_dir)/counter_suffix.data',
235            'suffix_key:32:<(gen_out_dir)/suffix_key.data',
236            'suffix_value:32:<(gen_out_dir)/suffix_value.data',
237            'suffix_token:32:<(gen_out_dir)/suffix_token.data',
238            'reading_correction_value:32:<(gen_out_dir)/reading_correction_value.data',
239            'reading_correction_error:32:<(gen_out_dir)/reading_correction_error.data',
240            'reading_correction_correction:32:<(gen_out_dir)/reading_correction_correction.data',
241            'symbol_token:32:<(gen_out_dir)/symbol_token.data',
242            'symbol_string:32:<(gen_out_dir)/symbol_string.data',
243            'emoticon_token:32:<(gen_out_dir)/emoticon_token.data',
244            'emoticon_string:32:<(gen_out_dir)/emoticon_string.data',
245            'emoji_token:32:<(gen_out_dir)/emoji_token.data',
246            'emoji_string:32:<(gen_out_dir)/emoji_string.data',
247            'single_kanji_token:32:<(gen_out_dir)/single_kanji_token.data',
248            'single_kanji_string:32:<(gen_out_dir)/single_kanji_string.data',
249            'single_kanji_variant_type:32:<(gen_out_dir)/single_kanji_variant_type.data',
250            'single_kanji_variant_token:32:<(gen_out_dir)/single_kanji_variant_token.data',
251            'single_kanji_variant_string:32:<(gen_out_dir)/single_kanji_variant_string.data',
252            'single_kanji_noun_prefix_token:32:<(gen_out_dir)/single_kanji_noun_prefix_token.data',
253            'single_kanji_noun_prefix_string:32:<(gen_out_dir)/single_kanji_noun_prefix_string.data',
254            'zero_query_token_array:32:<(gen_out_dir)/zero_query_token.data',
255            'zero_query_string_array:32:<(gen_out_dir)/zero_query_string.data',
256            'zero_query_number_token_array:32:<(gen_out_dir)/zero_query_number_token.data',
257            'zero_query_number_string_array:32:<(gen_out_dir)/zero_query_number_string.data',
258            'version:32:<(gen_out_dir)/version.data',
259          ],
260          'conditions': [
261            ['target_platform!="Android"', {
262              'variables': {
263                'usage_base_conj_suffix': '<(SHARED_INTERMEDIATE_DIR)/rewriter/usage_base_conj_suffix.data',
264                'usage_conj_index': '<(SHARED_INTERMEDIATE_DIR)/rewriter/usage_conj_index.data',
265                'usage_conj_suffix': '<(SHARED_INTERMEDIATE_DIR)/rewriter/usage_conj_suffix.data',
266                'usage_item_array': '<(SHARED_INTERMEDIATE_DIR)/rewriter/usage_item_array.data',
267                'usage_string_array': '<(SHARED_INTERMEDIATE_DIR)/rewriter/usage_string_array.data',
268              },
269              'inputs': [
270                '<(usage_base_conj_suffix)',
271                '<(usage_conj_index)',
272                '<(usage_conj_suffix)',
273                '<(usage_item_array)',
274                '<(usage_string_array)',
275              ],
276              'action': [
277                'usage_base_conjugation_suffix:32:<(usage_base_conj_suffix)',
278                'usage_conjugation_suffix:32:<(usage_conj_suffix)',
279                'usage_conjugation_index:32:<(usage_conj_index)',
280                'usage_item_array:32:<(usage_item_array)',
281                'usage_string_array:32:<(usage_string_array)',
282              ],
283            }],
284            ['target_platform=="Android" or "<(dataset_tag)"=="mock"', {
285              'variables': {
286                'typing_model_qwerty_mobile-hiragana': '<(gen_out_dir)/typing_model_qwerty_mobile-hiragana.data',
287                'typing_model_12keys-hiragana': '<(gen_out_dir)/typing_model_12keys-hiragana.data',
288                'typing_model_flick-hiragana': '<(gen_out_dir)/typing_model_flick-hiragana.data',
289                'typing_model_godan-hiragana': '<(gen_out_dir)/typing_model_godan-hiragana.data',
290                'typing_model_toggle_flick-hiragana': '<(gen_out_dir)/typing_model_toggle_flick-hiragana.data',
291              },
292              'inputs': [
293                '<(typing_model_qwerty_mobile-hiragana)',
294                '<(typing_model_12keys-hiragana)',
295                '<(typing_model_flick-hiragana)',
296                '<(typing_model_godan-hiragana)',
297                '<(typing_model_toggle_flick-hiragana)',
298              ],
299              'action': [
300                'typing_model_qwerty_mobile-hiragana.tsv:32:<(gen_out_dir)/typing_model_qwerty_mobile-hiragana.data',
301                'typing_model_12keys-hiragana.tsv:32:<(gen_out_dir)/typing_model_12keys-hiragana.data',
302                'typing_model_flick-hiragana.tsv:32:<(gen_out_dir)/typing_model_flick-hiragana.data',
303                'typing_model_godan-hiragana.tsv:32:<(gen_out_dir)/typing_model_godan-hiragana.data',
304                'typing_model_toggle_flick-hiragana.tsv:32:<(gen_out_dir)/typing_model_toggle_flick-hiragana.data',
305              ],
306            }],
307          ],
308        },
309      ],
310    },
311    {
312      'target_name': 'gen_separate_pos_group_data_for_<(dataset_tag)',
313      'type': 'none',
314      'toolsets': ['host'],
315      'actions': [
316        {
317          'action_name': 'gen_separate_pos_group_data_for_<(dataset_tag)',
318          'variables': {
319            'id_def': '<(platform_data_dir)/id.def',
320            'special_pos': '<(common_data_dir)/rules/special_pos.def',
321            'pos_group_def': '<(common_data_dir)/rules/user_segment_history_pos_group.def',
322          },
323          'inputs': [
324            '<(mozc_dir)/dictionary/gen_pos_rewrite_rule.py',
325            '<(id_def)',
326            '<(special_pos)',
327            '<(pos_group_def)',
328          ],
329          'outputs': [
330            '<(gen_out_dir)/pos_group.data',
331          ],
332          'action': [
333            '/usr/local/bin/python3.8',
334            '<(mozc_dir)/dictionary/gen_pos_rewrite_rule.py',
335            '--id_def=<(platform_data_dir)/id.def',
336            '--special_pos=<(common_data_dir)/rules/special_pos.def',
337            '--pos_group_def=<(common_data_dir)/rules/user_segment_history_pos_group.def',
338            '--output=<(gen_out_dir)/pos_group.data',
339          ],
340        },
341      ],
342    },
343    {
344      'target_name': 'gen_connection_single_column_txt_for_<(dataset_tag)',
345      'type': 'none',
346      'toolsets': ['host'],
347      'sources': [
348        '<(mozc_dir)/build_tools/zlib_util.py',
349      ],
350      'actions': [
351        {
352          'action_name': 'gen_connection_single_column_txt_for_<(dataset_tag)',
353          'variables': {
354            'connection_deflate': '<(platform_data_dir)/connection.deflate',
355          },
356          'inputs': [
357            '<(connection_deflate)',
358          ],
359          'outputs': [
360            '<(gen_out_dir)/connection_single_column.txt',
361          ],
362          'action': [
363            '/usr/local/bin/python3.8', '<(mozc_dir)/build_tools/zlib_util.py', 'decompress',
364            '<(connection_deflate)',
365            '<(gen_out_dir)/connection_single_column.txt',
366          ],
367          'message': ('[<(dataset_tag)] Decompressing ' +
368                      '<(connection_deflate)'),
369        },
370      ],
371    },
372    {
373      'target_name': 'gen_separate_connection_data_for_<(dataset_tag)',
374      'type': 'none',
375      'toolsets': ['host'],
376      'sources': [
377        '<(mozc_dir)/build_tools/code_generator_util.py',
378        '<(mozc_dir)/data_manager/gen_connection_data.py',
379      ],
380      'dependencies': [
381        'gen_connection_single_column_txt_for_<(dataset_tag)#host',
382      ],
383      'actions': [
384        {
385          'action_name': 'gen_separate_connection_data_for_<(dataset_tag)',
386          'variables': {
387            'text_connection_file': '<(gen_out_dir)/connection_single_column.txt',
388            'id_file': '<(platform_data_dir)/id.def',
389            'special_pos_file': '<(common_data_dir)/rules/special_pos.def',
390            'use_1byte_cost_flag': '<(use_1byte_cost_for_connection_data)',
391          },
392          'inputs': [
393            '<(text_connection_file)',
394            '<(id_file)',
395            '<(special_pos_file)',
396          ],
397          'outputs': [
398            '<(gen_out_dir)/connection.data',
399          ],
400          'action': [
401            '/usr/local/bin/python3.8', '<(mozc_dir)/data_manager/gen_connection_data.py',
402            '--text_connection_file',
403            '<(text_connection_file)',
404            '--id_file',
405            '<(id_file)',
406            '--special_pos_file',
407            '<(special_pos_file)',
408            '--binary_output_file',
409            '<@(_outputs)',
410            '--target_compiler',
411            '<(compiler_target)',
412            '--use_1byte_cost',
413            '<(use_1byte_cost_flag)',
414          ],
415          'message': ('[<(dataset_tag)] Generating ' +
416                      '<(gen_out_dir)/connection.data'),
417        },
418      ],
419    },
420    {
421      'target_name': 'gen_separate_dictionary_data_for_<(dataset_tag)',
422      'type': 'none',
423      'toolsets': ['host'],
424      'dependencies': [
425        '<(DEPTH)/dictionary/dictionary.gyp:gen_system_dictionary_data_main#host',
426        '<(dataset_tag)_data_manager_base.gyp:gen_user_pos_manager_data_for_<(dataset_tag)#host',
427      ],
428      'actions': [
429        {
430          'action_name': 'gen_separate_dictionary_data',
431          'variables': {
432            'generator': '<(PRODUCT_DIR)/gen_system_dictionary_data_main<(EXECUTABLE_SUFFIX)',
433            'input_files': '<(dictionary_files)',
434            'user_pos_manager_data': '<(gen_out_dir)/user_pos_manager.data',
435          },
436          'inputs': [
437            '<@(input_files)',
438          ],
439          'outputs': [
440            '<(gen_out_dir)/system.dictionary',
441          ],
442          'action': [
443            '<(generator)',
444            '--input=<(input_files)',
445            '--user_pos_manager_data=<(user_pos_manager_data)',
446            '--output=<(gen_out_dir)/system.dictionary',
447          ],
448          'message': 'Generating <(gen_out_dir)/system.dictionary.',
449        },
450      ],
451    },
452    {
453      'target_name': 'gen_<(dataset_tag)_segmenter_inl_header',
454      'type': 'none',
455      'toolsets': ['host'],
456      'actions': [
457        {
458          'action_name': 'gen_<(dataset_tag)_segmenter_inl_header',
459          'variables': {
460            'input_files': [
461              # Order is important; files are passed to argv in this order.
462              '<(platform_data_dir)/id.def',
463              '<(common_data_dir)/rules/special_pos.def',
464              '<(common_data_dir)/rules/segmenter.def',
465            ],
466          },
467          'inputs': [
468            '<(mozc_dir)/converter/gen_segmenter_code.py',
469            '<@(input_files)',
470          ],
471          'outputs': [
472            '<(gen_out_dir)/segmenter_inl.inc',
473          ],
474          'action': [
475            '/usr/local/bin/python3.8', '<(mozc_dir)/build_tools/redirect.py',
476            '<(gen_out_dir)/segmenter_inl.inc',
477            '<(mozc_dir)/converter/gen_segmenter_code.py',
478            '<@(input_files)',
479          ],
480          'message': ('[<(dataset_tag)] Generating ' +
481                      '<(gen_out_dir)/segmenter_inl.inc.'),
482        },
483      ],
484    },
485    {
486      # We abbreviate the target name because, in some build environment on
487      # Windows, the temporary file name generated by GYP exceeds the path
488      # length limit.
489      'target_name': 'gen_<(dataset_tag)_sbm',
490      'type': 'executable',
491      'toolsets': ['host'],
492      'sources': [
493        '<(current_dir)/gen_<(dataset_tag)_segmenter_bitarray_main.cc',
494      ],
495      'dependencies': [
496        '<(mozc_dir)/converter/converter_base.gyp:gen_segmenter_bitarray',
497        'gen_<(dataset_tag)_segmenter_inl_header',
498      ],
499    },
500    {
501      'target_name': 'gen_separate_segmenter_data_for_<(dataset_tag)',
502      'type': 'none',
503      'toolsets': ['host'],
504      'dependencies': [
505        'gen_<(dataset_tag)_sbm#host',
506      ],
507      'actions': [
508        {
509          'action_name': 'gen_separate_segmenter_data_for_<(dataset_tag)',
510          'variables': {
511            'generator': '<(PRODUCT_DIR)/gen_<(dataset_tag)_sbm<(EXECUTABLE_SUFFIX)'
512          },
513          'inputs': [
514            '<(generator)',
515          ],
516          'outputs': [
517            '<(gen_out_dir)/segmenter_sizeinfo.data',
518            '<(gen_out_dir)/segmenter_ltable.data',
519            '<(gen_out_dir)/segmenter_rtable.data',
520            '<(gen_out_dir)/segmenter_bitarray.data',
521          ],
522          'action': [
523            '<(generator)',
524            '--output_size_info=<(gen_out_dir)/segmenter_sizeinfo.data',
525            '--output_ltable=<(gen_out_dir)/segmenter_ltable.data',
526            '--output_rtable=<(gen_out_dir)/segmenter_rtable.data',
527            '--output_bitarray=<(gen_out_dir)/segmenter_bitarray.data',
528          ],
529          'message': ('[<(dataset_tag)] Generating segmenter data files'),
530        },
531      ],
532    },
533    {
534      'target_name': 'gen_separate_boundary_data_for_<(dataset_tag)',
535      'type': 'none',
536      'toolsets': ['host'],
537      'actions': [
538        {
539          'action_name': 'gen_separate_boundary_data_for_<(dataset_tag)',
540          'variables': {
541            'boundary_def_var': '<(boundary_def)',
542            'id_def': '<(platform_data_dir)/id.def',
543            'special_pos': '<(common_data_dir)/rules/special_pos.def',
544          },
545          'inputs': [
546            '<(mozc_dir)/converter/gen_boundary_data.py',
547            '<(boundary_def_var)',
548            '<(id_def)',
549            '<(special_pos)',
550          ],
551          'outputs': [
552            '<(gen_out_dir)/boundary.data',
553          ],
554          'action': [
555            '/usr/local/bin/python3.8',
556            '<(mozc_dir)/converter/gen_boundary_data.py',
557            '--boundary_def=<(boundary_def)',
558            '--id_def=<(platform_data_dir)/id.def',
559            '--special_pos=<(common_data_dir)/rules/special_pos.def',
560            '--output=<(gen_out_dir)/boundary.data',
561          ],
562          'message': ('[<(dataset_tag)] Generating ' +
563                      '<(gen_out_dir)/boundary.data'),
564        },
565      ],
566    },
567    {
568      'target_name': 'gen_separate_suffix_data_for_<(dataset_tag)',
569      'type': 'none',
570      'toolsets': ['host'],
571      'actions': [
572        {
573          'action_name': 'gen_separate_suffix_data_for_<(dataset_tag)',
574          'variables': {
575            'input_files': [
576              '<(platform_data_dir)/suffix.txt',
577            ],
578          },
579          'inputs': [
580            '<(mozc_dir)/dictionary/gen_suffix_data.py',
581            '<@(input_files)',
582          ],
583          'outputs': [
584            '<(gen_out_dir)/suffix_key.data',
585            '<(gen_out_dir)/suffix_value.data',
586            '<(gen_out_dir)/suffix_token.data',
587          ],
588          'action': [
589            '/usr/local/bin/python3.8',
590            '<(mozc_dir)/dictionary/gen_suffix_data.py',
591            '--input=<(platform_data_dir)/suffix.txt',
592            '--output_key_array=<(gen_out_dir)/suffix_key.data',
593            '--output_value_array=<(gen_out_dir)/suffix_value.data',
594            '--output_token_array=<(gen_out_dir)/suffix_token.data',
595            '<@(input_files)',
596          ],
597          'message': ('[<(dataset_tag)] Generating ' +
598                      '<(gen_out_dir)/suffix_{key,value,token}.data'),
599        },
600      ],
601    },
602    {
603      'target_name': 'gen_separate_reading_correction_data_for_<(dataset_tag)',
604      'type': 'none',
605      'toolsets': ['host'],
606      'actions': [
607        {
608          'action_name': 'gen_reading_correction_data',
609          'variables': {
610            'input_files%': [
611              '<(platform_data_dir)/reading_correction.tsv',
612            ],
613          },
614          'inputs': [
615            '<(platform_data_dir)/reading_correction.tsv',
616          ],
617          'outputs': [
618            '<(gen_out_dir)/reading_correction_value.data',
619            '<(gen_out_dir)/reading_correction_error.data',
620            '<(gen_out_dir)/reading_correction_correction.data',
621          ],
622          'action': [
623            '/usr/local/bin/python3.8', '<(mozc_dir)/rewriter/gen_reading_correction_data.py',
624            '--input=<@(input_files)',
625            '--output_value_array=<(gen_out_dir)/reading_correction_value.data',
626            '--output_error_array=<(gen_out_dir)/reading_correction_error.data',
627            '--output_correction_array=<(gen_out_dir)/reading_correction_correction.data',
628          ],
629          'message': ('[<(dataset_tag)] Generating ' +
630                      '<(gen_out_dir)/reading_correction*'),
631        },
632      ],
633    },
634    {
635      'target_name': 'gen_separate_collocation_data_for_<(dataset_tag)',
636      'type': 'none',
637      'toolsets': ['host'],
638      'dependencies': [
639        '../../rewriter/rewriter_base.gyp:gen_collocation_data_main#host',
640      ],
641      'actions': [
642        {
643          'action_name': 'gen_separate_collocation_data',
644          'variables': {
645            'generator' : '<(PRODUCT_DIR)/gen_collocation_data_main<(EXECUTABLE_SUFFIX)',
646            'input_files%': [
647              '<(platform_data_dir)/collocation.txt',
648            ],
649          },
650          'inputs': [
651            '<(generator)',
652            '<@(input_files)',
653          ],
654          'outputs': [
655            '<(gen_out_dir)/collocation_data.data',
656          ],
657          'action': [
658            '<(generator)',
659            '--collocation_data=<@(input_files)',
660            '--output=<(gen_out_dir)/collocation_data.data',
661            '--binary_mode',
662          ],
663          'message': ('[<(dataset_tag)] Generating ' +
664                      '<(gen_out_dir)/collocation_data.data'),
665        },
666      ],
667    },
668    {
669      'target_name': 'gen_separate_collocation_suppression_data_for_<(dataset_tag)',
670      'type': 'none',
671      'toolsets': ['host'],
672      'dependencies': [
673        '../../rewriter/rewriter_base.gyp:gen_collocation_suppression_data_main#host',
674      ],
675      'actions': [
676        {
677          'action_name': 'gen_separate_collocation_suppression_data',
678          'variables': {
679            'generator' : '<(PRODUCT_DIR)/gen_collocation_suppression_data_main<(EXECUTABLE_SUFFIX)',
680            'input_files%': [
681              '<(platform_data_dir)/collocation_suppression.txt',
682            ],
683          },
684          'inputs': [
685            '<(generator)',
686            '<@(input_files)',
687          ],
688          'outputs': [
689            '<(gen_out_dir)/collocation_suppression_data.data',
690          ],
691          'action': [
692            '<(generator)',
693            '--suppression_data=<@(input_files)',
694            '--binary_mode',
695            '--output=<(gen_out_dir)/collocation_suppression_data.data',
696          ],
697          'message': ('[<(dataset_tag)] Generating ' +
698                      '<(gen_out_dir)/collocation_suppression_data.data'),
699        },
700      ],
701    },
702    {
703      'target_name': 'gen_separate_suggestion_filter_data_for_<(dataset_tag)',
704      'type': 'none',
705      'toolsets': ['host'],
706      'dependencies': [
707        '../../prediction/prediction_base.gyp:gen_suggestion_filter_main#host',
708      ],
709      'actions': [
710        {
711          'action_name': 'gen_separate_suggestion_filter_data',
712          'variables': {
713            'generator' : '<(PRODUCT_DIR)/gen_suggestion_filter_main<(EXECUTABLE_SUFFIX)',
714            'input_files%': [
715              '<(platform_data_dir)/suggestion_filter.txt',
716            ],
717          },
718          'inputs': [
719            '<(generator)',
720            '<@(input_files)',
721          ],
722          'outputs': [
723            '<(gen_out_dir)/suggestion_filter_data.data',
724          ],
725          'action': [
726            '<(generator)',
727            '--input=<@(input_files)',
728            '--header=false',
729            '--output=<(gen_out_dir)/suggestion_filter_data.data',
730          ],
731          'message': ('[<(dataset_tag)] Generating ' +
732                      '<(gen_out_dir)/suggestion_filter_data.data'),
733        },
734      ],
735    },
736    {
737      'target_name': 'gen_separate_symbol_rewriter_data_for_<(dataset_tag)',
738      'type': 'none',
739      'toolsets': ['host'],
740      'dependencies': [
741        '../../rewriter/rewriter_base.gyp:gen_symbol_rewriter_dictionary_main#host',
742      ],
743      'actions': [
744        {
745          'action_name': 'gen_separate_symbol_rewriter_data_for_<(dataset_tag)',
746          'variables': {
747            'generator' : '<(PRODUCT_DIR)/gen_symbol_rewriter_dictionary_main<(EXECUTABLE_SUFFIX)',
748            'input_files': [
749              '<(mozc_dir)/data/symbol/symbol.tsv',
750              '<(mozc_dir)/data/rules/sorting_map.tsv',
751              '<(mozc_dir)/data/symbol/ordering_rule.txt',
752              '<(gen_out_dir)/user_pos_manager.data',
753            ],
754          },
755          'inputs': [
756            '<(generator)',
757            '<@(input_files)',
758          ],
759          'outputs': [
760            '<(gen_out_dir)/symbol_token.data',
761            '<(gen_out_dir)/symbol_string.data',
762          ],
763          'action': [
764            '<(generator)',
765            '--input=<(mozc_dir)/data/symbol/symbol.tsv',
766            '--user_pos_manager_data=<(gen_out_dir)/user_pos_manager.data',
767            '--sorting_table=<(mozc_dir)/data/rules/sorting_map.tsv',
768            '--ordering_rule=<(mozc_dir)/data/symbol/ordering_rule.txt',
769            '--output_token_array=<(gen_out_dir)/symbol_token.data',
770            '--output_string_array=<(gen_out_dir)/symbol_string.data',
771          ],
772          'message': ('[<(dataset_tag)] Generating ' +
773                      '<(gen_out_dir)/symbol*'),
774        },
775      ],
776    },
777    {
778      'target_name': 'gen_separate_emoticon_rewriter_data_for_<(dataset_tag)',
779      'type': 'none',
780      'toolsets': ['host'],
781      'dependencies': [
782        '../../rewriter/rewriter_base.gyp:gen_emoticon_rewriter_data_main',
783      ],
784      'actions': [
785        {
786          'action_name': 'gen_separate_emoticon_rewriter_data_for_<(dataset_tag)',
787          'variables': {
788            'generator': '<(PRODUCT_DIR)/gen_emoticon_rewriter_data_main<(EXECUTABLE_SUFFIX)',
789            'input_files': [
790              '<(mozc_dir)/data/emoticon/emoticon.tsv',
791            ],
792          },
793          'inputs': [
794            '<(generator)',
795            '<@(input_files)',
796          ],
797          'outputs': [
798            '<(gen_out_dir)/emoticon_token.data',
799            '<(gen_out_dir)/emoticon_string.data',
800          ],
801          'action': [
802            '<(generator)',
803            '--input=<(mozc_dir)/data/emoticon/emoticon.tsv',
804            '--output_token_array=<(gen_out_dir)/emoticon_token.data',
805            '--output_string_array=<(gen_out_dir)/emoticon_string.data',
806          ],
807          'message': '[<(dataset_tag)] Generating emoticon data',
808        },
809      ],
810    },
811    {
812      'target_name': 'gen_separate_emoji_rewriter_data_for_<(dataset_tag)',
813      'type': 'none',
814      'toolsets': ['host'],
815      'actions': [
816        {
817          'action_name': 'gen_separate_emoji_rewriter_data_for_<(dataset_tag)',
818          'variables': {
819            'generator': '<(mozc_dir)/rewriter/gen_emoji_rewriter_data.py',
820            'input_files': [
821              '<(mozc_dir)/data/emoji/emoji_data.tsv',
822            ],
823          },
824          'inputs': [
825            '<(generator)',
826            '<@(input_files)',
827          ],
828          'outputs': [
829            '<(gen_out_dir)/emoji_token.data',
830            '<(gen_out_dir)/emoji_string.data',
831          ],
832          'action': [
833            '/usr/local/bin/python3.8', '<(generator)',
834            '--input=<(mozc_dir)/data/emoji/emoji_data.tsv',
835            '--output_token_array=<(gen_out_dir)/emoji_token.data',
836            '--output_string_array=<(gen_out_dir)/emoji_string.data',
837          ],
838          'message': '[<(dataset_tag)] Generating emoji data',
839        },
840      ],
841    },
842    {
843      'target_name': 'gen_separate_single_kanji_rewriter_data_for_<(dataset_tag)',
844      'type': 'none',
845      'toolsets': ['host'],
846      'dependencies': [
847        '../../rewriter/rewriter_base.gyp:gen_single_kanji_noun_prefix_data_main',
848      ],
849      'actions': [
850        {
851          'action_name': 'gen_single_kanji_data_for_<(dataset_tag)',
852          'variables': {
853            'generator': '<(mozc_dir)/rewriter/gen_single_kanji_rewriter_data.py',
854            'single_kanji_file': '<(mozc_dir)/data/single_kanji/single_kanji.tsv',
855            'variant_file': '<(mozc_dir)/data/single_kanji/variant_rule.txt',
856          },
857          'inputs': [
858            '<(generator)',
859            '<(single_kanji_file)',
860            '<(variant_file)',
861          ],
862          'outputs': [
863            '<(gen_out_dir)/single_kanji_string.data',
864            '<(gen_out_dir)/single_kanji_token.data',
865            '<(gen_out_dir)/single_kanji_variant_type.data',
866            '<(gen_out_dir)/single_kanji_variant_token.data',
867            '<(gen_out_dir)/single_kanji_variant_string.data',
868          ],
869          'action': [
870            '/usr/local/bin/python3.8', '<(generator)',
871            '--single_kanji_file=<(single_kanji_file)',
872            '--variant_file=<(variant_file)',
873            '--output_single_kanji_token=<(gen_out_dir)/single_kanji_token.data',
874            '--output_single_kanji_string=<(gen_out_dir)/single_kanji_string.data',
875            '--output_variant_types=<(gen_out_dir)/single_kanji_variant_type.data',
876            '--output_variant_tokens=<(gen_out_dir)/single_kanji_variant_token.data',
877            '--output_variant_strings=<(gen_out_dir)/single_kanji_variant_string.data',
878          ],
879          'message': '[<(dataset_tag)] Generating single kanji data',
880        },
881        {
882          'action_name': 'gen_noun_prefix_data_for_<(dataset_tag)',
883          'variables': {
884            'generator': '<(PRODUCT_DIR)/gen_single_kanji_noun_prefix_data_main<(EXECUTABLE_SUFFIX)',
885          },
886          'inputs': [
887            '<(generator)',
888          ],
889          'outputs': [
890            '<(gen_out_dir)/single_kanji_noun_prefix_token.data',
891            '<(gen_out_dir)/single_kanji_noun_prefix_string.data',
892          ],
893          'action': [
894            '<(generator)',
895            '--output_token_array=<(gen_out_dir)/single_kanji_noun_prefix_token.data',
896            '--output_string_array=<(gen_out_dir)/single_kanji_noun_prefix_string.data',
897          ],
898          'message': '[<(dataset_tag)] Generating noun prefix data',
899        },
900      ],
901    },
902    {
903      'target_name': 'gen_separate_counter_suffix_data_for_<(dataset_tag)',
904      'type': 'none',
905      'toolsets': ['host'],
906      'actions': [
907        {
908          'action_name': 'gen_separate_counter_suffix_data_for_<(dataset_tag)',
909          'variables': {
910            'id_file': '<(platform_data_dir)/id.def',
911            'input_files%': '<(dictionary_files)',
912          },
913          'inputs': [
914            '<(id_file)',
915            '<@(input_files)',
916          ],
917          'outputs': [
918            '<(gen_out_dir)/counter_suffix.data',
919          ],
920          'action': [
921            '/usr/local/bin/python3.8', '<(mozc_dir)/rewriter/gen_counter_suffix_array.py',
922            '--id_file=<(id_file)',
923            '--output=<(gen_out_dir)/counter_suffix.data',
924            '<@(input_files)',
925          ],
926          'message': ('[<(dataset_tag)] Generating ' +
927                      '<(gen_out_dir)/counter_suffix.data'),
928        },
929      ],
930    },
931    {
932      'target_name': 'gen_separate_zero_query_data_for_<(dataset_tag)',
933      'type': 'none',
934      'toolsets': ['host'],
935      'actions': [
936        {
937          'action_name': 'gen_separate_zero_query_data_for_<(dataset_tag)',
938          'variables': {
939            'generator': '<(mozc_dir)/prediction/gen_zero_query_data.py',
940            'input_files': [
941              '<(mozc_dir)/data/emoji/emoji_data.tsv',
942              '<(mozc_dir)/data/emoticon/categorized.tsv',
943              '<(mozc_dir)/data/symbol/symbol.tsv',
944              '<(mozc_dir)/data/zero_query/zero_query.def',
945            ],
946          },
947          'inputs': [
948            '<(generator)',
949            '<@(input_files)',
950          ],
951          'outputs': [
952            '<(gen_out_dir)/zero_query_token.data',
953            '<(gen_out_dir)/zero_query_string.data',
954          ],
955          'action': [
956            '/usr/local/bin/python3.8', '<(generator)',
957            '--input_rule=<(mozc_dir)/data/zero_query/zero_query.def',
958            '--input_symbol=<(mozc_dir)/data/symbol/symbol.tsv',
959            '--input_emoji=<(mozc_dir)/data/emoji/emoji_data.tsv',
960            '--input_emoticon=<(mozc_dir)/data/emoticon/categorized.tsv',
961            '--output_token_array=<(gen_out_dir)/zero_query_token.data',
962            '--output_string_array=<(gen_out_dir)/zero_query_string.data',
963          ],
964        },
965        {
966          'action_name': 'gen_separate_zero_query_number_data_for_<(dataset_tag)',
967          'variables': {
968            'generator': '<(mozc_dir)/prediction/gen_zero_query_number_data.py',
969            'input_files': [
970              '<(mozc_dir)/data/zero_query/zero_query_number.def',
971            ],
972          },
973          'inputs': [
974            '<(generator)',
975            '<@(input_files)',
976          ],
977          'outputs': [
978            '<(gen_out_dir)/zero_query_number_token.data',
979            '<(gen_out_dir)/zero_query_number_string.data',
980          ],
981          'action': [
982            '/usr/local/bin/python3.8', '<(generator)',
983            '--input=<(mozc_dir)/data/zero_query/zero_query_number.def',
984            '--output_token_array=<(gen_out_dir)/zero_query_number_token.data',
985            '--output_string_array=<(gen_out_dir)/zero_query_number_string.data',
986          ],
987        },
988      ],
989    },
990    {
991      'target_name': 'gen_typing_model_for_<(dataset_tag)',
992      'type': 'none',
993      'toolsets': ['host'],
994      'actions': [
995        {
996          'action_name': 'gen_qwerty_mobile-hiragana_typing_model_<(dataset_tag)',
997          'variables': {
998            'input_files': [
999              '<(mozc_dir)/data/typing/typing_model_qwerty_mobile-hiragana.tsv',
1000            ],
1001          },
1002          'inputs': [
1003            '<(mozc_dir)/composer/internal/gen_typing_model.py',
1004            '<@(input_files)',
1005          ],
1006          'outputs': [
1007            '<(gen_out_dir)/typing_model_qwerty_mobile-hiragana.data',
1008          ],
1009          'action': [
1010            '/usr/local/bin/python3.8',
1011            '<(mozc_dir)/composer/internal/gen_typing_model.py',
1012            '--input_path',
1013            '<@(input_files)',
1014            '--output_path',
1015            '<@(_outputs)',
1016          ],
1017        },
1018        {
1019          'action_name': 'gen_12keys-hiragana_typing_model_<(dataset_tag)',
1020          'variables': {
1021            'input_files': [
1022              '<(mozc_dir)/data/typing/typing_model_12keys-hiragana.tsv',
1023            ],
1024          },
1025          'inputs': [
1026            '<(mozc_dir)/composer/internal/gen_typing_model.py',
1027            '<@(input_files)',
1028          ],
1029          'outputs': [
1030            '<(gen_out_dir)/typing_model_12keys-hiragana.data',
1031          ],
1032          'action': [
1033            '/usr/local/bin/python3.8',
1034            '<(mozc_dir)/composer/internal/gen_typing_model.py',
1035            '--input_path',
1036            '<@(input_files)',
1037            '--output_path',
1038            '<@(_outputs)',
1039          ],
1040        },
1041        {
1042          'action_name': 'gen_flick-hiragana_typing_model_<(dataset_tag)',
1043          'variables': {
1044            'input_files': [
1045              '<(mozc_dir)/data/typing/typing_model_flick-hiragana.tsv',
1046            ],
1047          },
1048          'inputs': [
1049            '<(mozc_dir)/composer/internal/gen_typing_model.py',
1050            '<@(input_files)',
1051          ],
1052          'outputs': [
1053            '<(gen_out_dir)/typing_model_flick-hiragana.data',
1054          ],
1055          'action': [
1056            '/usr/local/bin/python3.8',
1057            '<(mozc_dir)/composer/internal/gen_typing_model.py',
1058            '--input_path',
1059            '<@(input_files)',
1060            '--output_path',
1061            '<@(_outputs)',
1062          ],
1063        },
1064        {
1065          'action_name': 'gen_godan-hiragana_typing_model_<(dataset_tag)',
1066          'variables': {
1067            'input_files': [
1068              '<(mozc_dir)/data/typing/typing_model_godan-hiragana.tsv',
1069            ],
1070          },
1071          'inputs': [
1072            '<(mozc_dir)/composer/internal/gen_typing_model.py',
1073            '<@(input_files)',
1074          ],
1075          'outputs': [
1076            '<(gen_out_dir)/typing_model_godan-hiragana.data',
1077          ],
1078          'action': [
1079            '/usr/local/bin/python3.8',
1080            '<(mozc_dir)/composer/internal/gen_typing_model.py',
1081            '--input_path',
1082            '<@(input_files)',
1083            '--output_path',
1084            '<@(_outputs)',
1085          ],
1086        },
1087        {
1088          'action_name': 'gen_toggle_flick-hiragana_typing_model_<(dataset_tag)',
1089          'variables': {
1090            'input_files': [
1091              '<(mozc_dir)/data/typing/typing_model_toggle_flick-hiragana.tsv',
1092            ],
1093          },
1094          'inputs': [
1095            '<(mozc_dir)/composer/internal/gen_typing_model.py',
1096            '<@(input_files)',
1097          ],
1098          'outputs': [
1099            '<(gen_out_dir)/typing_model_toggle_flick-hiragana.data',
1100          ],
1101          'action': [
1102            '/usr/local/bin/python3.8',
1103            '<(mozc_dir)/composer/internal/gen_typing_model.py',
1104            '--input_path',
1105            '<@(input_files)',
1106            '--output_path',
1107            '<@(_outputs)',
1108          ],
1109        },
1110      ],
1111    },
1112    {
1113      'target_name': 'gen_separate_version_data_for_<(dataset_tag)',
1114      'type': 'none',
1115      'toolsets': ['host'],
1116      'actions': [
1117        {
1118          'action_name': 'gen_separate_version_data_for_<(dataset_tag)',
1119          'variables': {
1120            'generator': '<(mozc_dir)/data_manager/gen_data_version.py',
1121            'version_file': '<(mozc_dir)/data/version/mozc_version_template.bzl',
1122          },
1123          'inputs': [
1124            '<(generator)',
1125            '<(version_file)',
1126          ],
1127          'outputs': [
1128            '<(gen_out_dir)/version.data',
1129          ],
1130          'action': [
1131            '/usr/local/bin/python3.8', '<(generator)',
1132            '--tag=<(dataset_tag)',
1133            '--mozc_version_template=<(version_file)',
1134            '--output=<(gen_out_dir)/version.data',
1135          ],
1136          'message': '[<(dataset_tag)] Generating version.data',
1137        },
1138      ],
1139    },
1140  ],
1141}
1142