meson.build revision bb3a541c
1bb3a541cSmrg# And some files that are a straight install
2bb3a541cSmrginstall_data('README', 'xkb.dtd', 'xfree98',
3bb3a541cSmrg             install_dir: dir_xkb_rules)
4bb3a541cSmrg
5bb3a541cSmrg# the actual rules files are generated from a list of parts in a very
6bb3a541cSmrg# specific order
7bb3a541cSmrgparts = [
8bb3a541cSmrg    '0000-hdr.part',
9bb3a541cSmrg    '0001-lists.part',
10bb3a541cSmrg    '0002-@0@.lists.part',
11bb3a541cSmrg    '0004-@0@.m_k.part',
12bb3a541cSmrg    '0005-l1_k.part',
13bb3a541cSmrg    '0006-l_k.part',
14bb3a541cSmrg    '0007-o_k.part',
15bb3a541cSmrg    '0008-ml_g.part',
16bb3a541cSmrg    '0009-m_g.part',
17bb3a541cSmrg    '0011-mlv_s.part',
18bb3a541cSmrg    '0013-ml_s.part',
19bb3a541cSmrg    '0015-ml1_s.part',
20bb3a541cSmrg    '0018-ml2_s.part',
21bb3a541cSmrg    '0020-ml3_s.part',
22bb3a541cSmrg    '0022-ml4_s.part',
23bb3a541cSmrg    '0026-@0@.m_s.part',
24bb3a541cSmrg    '0027-@0@.ml_s1.part',
25bb3a541cSmrg    '0033-ml_c.part',
26bb3a541cSmrg    '0034-ml1_c.part',
27bb3a541cSmrg    '0035-m_t.part',
28bb3a541cSmrg    '0036-lo_s.part',
29bb3a541cSmrg    '0037-l1o_s.part',
30bb3a541cSmrg    '0038-l2o_s.part',
31bb3a541cSmrg    '0039-l3o_s.part',
32bb3a541cSmrg    '0040-l4o_s.part',
33bb3a541cSmrg    '0042-o_s.part',
34bb3a541cSmrg    '0043-o_c.part',
35bb3a541cSmrg    '0044-o_t.part',
36bb3a541cSmrg]
37bb3a541cSmrg
38bb3a541cSmrg# generated compat parts
39bb3a541cSmrgrules_compat_generated = []
40bb3a541cSmrg
41bb3a541cSmrgif get_option('compat-rules')
42bb3a541cSmrg  # non-generated compat parts
43bb3a541cSmrg  parts += [
44bb3a541cSmrg      'compat/0003-lists.part',
45bb3a541cSmrg      'compat/0028-lv_c.part',
46bb3a541cSmrg      'compat/0029-l1v1_c.part',
47bb3a541cSmrg      'compat/0030-l2v2_c.part',
48bb3a541cSmrg      'compat/0031-l3v3_c.part',
49bb3a541cSmrg      'compat/0032-l4v4_c.part',
50bb3a541cSmrg      'compat/0041-o_s.part',
51bb3a541cSmrg  ]
52bb3a541cSmrg
53bb3a541cSmrg  layout_mappings = files('compat/layoutsMapping.lst')
54bb3a541cSmrg  variant_mappings = files('compat/variantsMapping.lst')
55bb3a541cSmrg  map_variants_py = find_program('compat/map-variants.py')
56bb3a541cSmrg
57bb3a541cSmrg  # two sets of files are generated: ml_s.part and mlv_s.part
58bb3a541cSmrg  # each with the level name in the filename
59bb3a541cSmrg  lvl_ml_s = {
60bb3a541cSmrg    '0': '0012-ml_s.part',
61bb3a541cSmrg    '1': '0014-ml1_s.part',
62bb3a541cSmrg    '2': '0017-ml2_s.part',
63bb3a541cSmrg    '3': '0019-ml3_s.part',
64bb3a541cSmrg    '4': '0021-ml4_s.part',
65bb3a541cSmrg  }
66bb3a541cSmrg
67bb3a541cSmrg  lvl_mlv_s = {
68bb3a541cSmrg    '0': '0010-mlv_s.part',
69bb3a541cSmrg    '1': '0016-ml1v1_s.part',
70bb3a541cSmrg    '2': '0023-ml2v2_s.part',
71bb3a541cSmrg    '3': '0024-ml3v3_s.part',
72bb3a541cSmrg    '4': '0025-ml4v4_s.part',
73bb3a541cSmrg  }
74bb3a541cSmrg
75bb3a541cSmrg  foreach lvl: [0, 1, 2, 3, 4]
76bb3a541cSmrg      ml_s_file = lvl_ml_s['@0@'.format(lvl)]
77bb3a541cSmrg      ml_s = custom_target(ml_s_file,
78bb3a541cSmrg                           build_by_default: true,
79bb3a541cSmrg                           command: [
80bb3a541cSmrg                               map_variants_py,
81bb3a541cSmrg                               '--want=mls',
82bb3a541cSmrg                               '--number=@0@'.format(lvl),
83bb3a541cSmrg                               '@OUTPUT@',
84bb3a541cSmrg                               layout_mappings,
85bb3a541cSmrg                               variant_mappings,
86bb3a541cSmrg                           ],
87bb3a541cSmrg                           output: ml_s_file,
88bb3a541cSmrg                           install: false)
89bb3a541cSmrg      rules_compat_generated += [ml_s]
90bb3a541cSmrg
91bb3a541cSmrg      mlv_s_file = lvl_mlv_s['@0@'.format(lvl)]
92bb3a541cSmrg      mlv_s = custom_target(mlv_s_file,
93bb3a541cSmrg                           build_by_default: true,
94bb3a541cSmrg                           command: [
95bb3a541cSmrg                               map_variants_py,
96bb3a541cSmrg                               '--want=mlvs',
97bb3a541cSmrg                               '--number=@0@'.format(lvl),
98bb3a541cSmrg                               '@OUTPUT@',
99bb3a541cSmrg                               variant_mappings,
100bb3a541cSmrg                           ],
101bb3a541cSmrg                           output: mlv_s_file,
102bb3a541cSmrg                           install: false)
103bb3a541cSmrg      rules_compat_generated += [mlv_s]
104bb3a541cSmrg  endforeach
105bb3a541cSmrgendif # compat-rules
106bb3a541cSmrg
107bb3a541cSmrgmerge_py = find_program('merge.py')
108bb3a541cSmrgperl = find_program('perl')
109bb3a541cSmrgxml2lst = find_program('xml2lst.pl')
110bb3a541cSmrgforeach ruleset: ['base', 'evdev']
111bb3a541cSmrg    # generate the "evdev" and "base" rules files
112bb3a541cSmrg    #
113bb3a541cSmrg    # First: copy all the parts over to the build directory, replacing
114bb3a541cSmrg    # RULESET with the rulename (evdev or base) and prefix it with the
115bb3a541cSmrg    # ruleset name. So 0000-hdr.part becomes 0000-hdr.part.evdev and
116bb3a541cSmrg    # 0000-hdr.part.base
117bb3a541cSmrg    rules_parts = []
118bb3a541cSmrg    foreach part: parts
119bb3a541cSmrg      infile = part.format(ruleset)
120bb3a541cSmrg      p = configure_file(output: '@PLAINNAME@.@0@'.format(ruleset),
121bb3a541cSmrg                         input: infile,
122bb3a541cSmrg                         copy: true,
123bb3a541cSmrg                         install: false)
124bb3a541cSmrg      rules_parts += p
125bb3a541cSmrg    endforeach
126bb3a541cSmrg
127bb3a541cSmrg    # Second: merge those parts together into the actual rules file
128bb3a541cSmrg    custom_target('rules-@0@'.format(ruleset),
129bb3a541cSmrg                  build_by_default: true,
130bb3a541cSmrg                  command: [
131bb3a541cSmrg                      merge_py,
132bb3a541cSmrg                      rules_parts + rules_compat_generated,
133bb3a541cSmrg                  ],
134bb3a541cSmrg                  depends: rules_compat_generated,
135bb3a541cSmrg                  output: ruleset,
136bb3a541cSmrg                  capture: true,
137bb3a541cSmrg                  install: true,
138bb3a541cSmrg                  install_dir: dir_xkb_rules)
139bb3a541cSmrg
140bb3a541cSmrg    # Third: the xml files, simply copied from the base*.xml files
141bb3a541cSmrg    ruleset_xml = configure_file(output: '@0@.xml'.format(ruleset),
142bb3a541cSmrg                       input: 'base.xml',
143bb3a541cSmrg                       copy: true,
144bb3a541cSmrg                       install: true,
145bb3a541cSmrg                       install_dir: dir_xkb_rules)
146bb3a541cSmrg
147bb3a541cSmrg    # This is used by the man page's meson.build
148bb3a541cSmrg    if ruleset == 'evdev'
149bb3a541cSmrg      evdev_ruleset = ruleset_xml
150bb3a541cSmrg    endif
151bb3a541cSmrg
152bb3a541cSmrg    configure_file(output: '@0@.extras.xml'.format(ruleset),
153bb3a541cSmrg                   input: 'base.extras.xml',
154bb3a541cSmrg                   copy: true,
155bb3a541cSmrg                   install: true,
156bb3a541cSmrg                   install_dir: dir_xkb_rules)
157bb3a541cSmrg
158bb3a541cSmrg    # Fourth: generate the evdev.lst and base.lst files
159bb3a541cSmrg    lst_file = '@0@.lst'.format(ruleset)
160bb3a541cSmrg    custom_target(lst_file,
161bb3a541cSmrg                  build_by_default: true,
162bb3a541cSmrg                  command: [xml2lst, ruleset_xml],
163bb3a541cSmrg                  capture: true,
164bb3a541cSmrg                  output: lst_file,
165bb3a541cSmrg                  install: true,
166bb3a541cSmrg                  install_dir: dir_xkb_rules)
167bb3a541cSmrgendforeach
168bb3a541cSmrg
169bb3a541cSmrg# Copy the DTD to the build directory, the man page generation expects it in
170bb3a541cSmrg# the same directory as the input XML file.
171bb3a541cSmrgconfigure_file(output: 'xkb.dtd',
172bb3a541cSmrg               input: 'xkb.dtd',
173bb3a541cSmrg               copy: true,
174bb3a541cSmrg               install: false)
175