Fix i18n target name when using @BASENAME@ and configure_file() input

Fixes: #9022
pull/9089/head
Xavier Claessens 3 years ago committed by Xavier Claessens
parent 487d45c1e5
commit 223991c09e
  1. 24
      mesonbuild/modules/i18n.py
  2. 28
      test cases/frameworks/6 gettext/data/meson.build
  3. 6
      test cases/frameworks/6 gettext/data/test5.desktop.in.in
  4. 6
      test cases/frameworks/6 gettext/data/test6.desktop.in.in
  5. 4
      test cases/frameworks/6 gettext/test.json

@ -108,18 +108,15 @@ class I18nModule(ExtensionModule):
kwargs['command'] = command
inputfile = kwargs['input']
# I have no idea why/how this if isinstance(inputfile, mesonlib.HoldableObject) works / used to work...
if isinstance(inputfile, mesonlib.HoldableObject):
ct = build.CustomTarget(kwargs['output'] + '_merge', state.subdir, state.subproject, kwargs)
else:
if isinstance(inputfile, list):
# We only use this input file to create a name of the custom target.
# Thus we can ignore the other entries.
inputfile = inputfile[0]
if isinstance(inputfile, str):
inputfile = mesonlib.File.from_source_file(state.environment.source_dir,
state.subdir, inputfile)
# We only use this input file to create a name of the custom target.
# Thus we can ignore the other entries.
inputfile = mesonlib.extract_as_list(kwargs, 'input')[0]
if isinstance(inputfile, str):
inputfile = mesonlib.File.from_source_file(state.environment.source_dir,
state.subdir, inputfile)
if isinstance(inputfile, mesonlib.File):
# output could be '@BASENAME@' in which case we need to do substitutions
# to get a unique target name.
output = kwargs['output']
ifile_abs = inputfile.absolute_path(state.environment.source_dir,
state.environment.build_dir)
@ -127,6 +124,9 @@ class I18nModule(ExtensionModule):
outputs = mesonlib.substitute_values([output], values)
output = outputs[0]
ct = build.CustomTarget(output + '_' + state.subdir.replace('/', '@').replace('\\', '@') + '_merge', state.subdir, state.subproject, kwargs)
else:
ct = build.CustomTarget(kwargs['output'] + '_merge', state.subdir, state.subproject, kwargs)
return ModuleReturnValue(ct, [ct])
@FeatureNewKwargs('i18n.gettext', '0.37.0', ['preset'])

@ -27,4 +27,32 @@ i18n.merge_file(
install_dir: join_paths(get_option('datadir'), 'applications')
)
# Regression test when passing File object as input and '@BASENAME@' as output
# in multiple i18n.merge_file() calls. It used to make target name collision.
# https://github.com/mesonbuild/meson/issues/9022
i18n.merge_file(
input: configure_file(
input: 'test5.desktop.in.in',
output: '@BASENAME@',
configuration: { 'NAME': 'Application' },
),
output: '@BASENAME@',
type: 'desktop',
po_dir: '../po',
install: true,
install_dir: join_paths(get_option('datadir'), 'applications')
)
i18n.merge_file(
input: configure_file(
input: 'test6.desktop.in.in',
output: '@BASENAME@',
configuration: { 'NAME': 'Application' },
),
output: '@BASENAME@',
type: 'desktop',
po_dir: '../po',
install: true,
install_dir: join_paths(get_option('datadir'), 'applications')
)
subdir('data3')

@ -0,0 +1,6 @@
[Desktop Entry]
Name=Test 2
GenericName=@NAME@
Comment=Test Application
Type=Application

@ -0,0 +1,6 @@
[Desktop Entry]
Name=Test 2
GenericName=@NAME@
Comment=Test Application
Type=Application

@ -9,7 +9,9 @@
{"type": "file", "file": "usr/share/applications/test.plugin"},
{"type": "file", "file": "usr/share/applications/test2.desktop"},
{"type": "file", "file": "usr/share/applications/test3.desktop"},
{"type": "file", "file": "usr/share/applications/test4.desktop"}
{"type": "file", "file": "usr/share/applications/test4.desktop"},
{"type": "file", "file": "usr/share/applications/test5.desktop"},
{"type": "file", "file": "usr/share/applications/test6.desktop"}
],
"matrix": {
"options": {

Loading…
Cancel
Save