aboutsummaryrefslogtreecommitdiff
path: root/mesonbuild
diff options
context:
space:
mode:
authorDylan Baker <dylan@pnwbakers.com>2021-10-08 14:48:07 -0700
committerDylan Baker <dylan@pnwbakers.com>2021-10-09 21:34:54 -0700
commit6849baa47633d2986c049cd68916bc9ce95ba2d0 (patch)
tree7084800f0fb1f42c58f01a8aae13d11304f1c30b /mesonbuild
parent0d52a6161a7572b6132643d16f8a16ab7ba6cf66 (diff)
downloadmeson-6849baa47633d2986c049cd68916bc9ce95ba2d0.zip
meson-6849baa47633d2986c049cd68916bc9ce95ba2d0.tar.gz
meson-6849baa47633d2986c049cd68916bc9ce95ba2d0.tar.bz2
modules/windows: allow CustomTargets with more than one output for compile_resources
Diffstat (limited to 'mesonbuild')
-rw-r--r--mesonbuild/modules/windows.py37
1 files changed, 20 insertions, 17 deletions
diff --git a/mesonbuild/modules/windows.py b/mesonbuild/modules/windows.py
index 568ad97..4aa7e3a 100644
--- a/mesonbuild/modules/windows.py
+++ b/mesonbuild/modules/windows.py
@@ -143,24 +143,27 @@ class WindowsModule(ExtensionModule):
res_targets: T.List[build.CustomTarget] = []
- for src in args[0]:
- if isinstance(src, str):
- name_formatted = src
- name = os.path.join(state.subdir, src)
- elif isinstance(src, mesonlib.File):
- name_formatted = src.fname
- name = src.relative_name()
- else:
- if isinstance(src, build.CustomTargetIndex):
+ def get_names() -> T.Iterable[T.Tuple[str, str, T.Union[str, mesonlib.File, build.CustomTargetIndex]]]:
+ for src in args[0]:
+ if isinstance(src, str):
+ yield os.path.join(state.subdir, src), src, src
+ elif isinstance(src, mesonlib.File):
+ yield src.relative_name(), src.fname, src
+ elif isinstance(src, build.CustomTargetIndex):
FeatureNew.single_use('windows.compile_resource CustomTargetIndex in positional arguments', '0.61.0', state.subproject)
- if len(src.get_outputs()) > 1:
- raise MesonException('windows.compile_resources does not accept custom targets with more than 1 output.')
-
- # Chances are that src.get_filename() is already the name of that
- # target, add a prefix to avoid name clash.
- name_formatted = 'windows_compile_resources_' + src.get_filename()
- name = src.get_id()
-
+ # This dance avoids a case where two indexs of the same
+ # target are given as separate arguments.
+ yield (f'{src.get_id()}_{src.target.get_outputs().index(src.output)}',
+ f'windows_compile_resources_{src.get_filename()}', src)
+ else:
+ if len(src.get_outputs()) > 1:
+ FeatureNew.single_use('windows.compile_resource CustomTarget with multiple outputs in positional arguments', '0.61.0', state.subproject)
+ for i, out in enumerate(src.get_outputs()):
+ # Chances are that src.get_filename() is already the name of that
+ # target, add a prefix to avoid name clash.
+ yield f'{src.get_id()}_{i}', f'windows_compile_resources_{i}_{out}', src[i]
+
+ for name, name_formatted, src in get_names():
# Path separators are not allowed in target names
name = name.replace('/', '_').replace('\\', '_').replace(':', '_')
name_formatted = name_formatted.replace('/', '_').replace('\\', '_').replace(':', '_')