aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAndrei Alexeyev <0x416b617269@gmail.com>2017-12-22 20:16:56 +0200
committerAndrei Alexeyev <0x416b617269@gmail.com>2018-01-12 23:36:48 +0200
commitf8bd1c5ff26bbb6b88dedcb400a33841201bf4eb (patch)
tree3f9193278b3d6fc20adadee4fa14a282e37a5638
parentef7cb9f280175d026b16e8e02ecda9ec87d7fd6d (diff)
downloadmeson-f8bd1c5ff26bbb6b88dedcb400a33841201bf4eb.zip
meson-f8bd1c5ff26bbb6b88dedcb400a33841201bf4eb.tar.gz
meson-f8bd1c5ff26bbb6b88dedcb400a33841201bf4eb.tar.bz2
windows.compile_resources: fix compiling multiple resources within one project
-rw-r--r--mesonbuild/modules/windows.py40
-rw-r--r--test cases/windows/13 resources with custom targets/inc/meson.build1
-rw-r--r--test cases/windows/13 resources with custom targets/inc/resource/resource.h1
-rw-r--r--test cases/windows/13 resources with custom targets/meson.build11
-rw-r--r--test cases/windows/13 resources with custom targets/res/meson.build23
-rw-r--r--test cases/windows/13 resources with custom targets/res/myres.rc.in3
-rw-r--r--test cases/windows/13 resources with custom targets/res/myres_static.rc3
7 files changed, 57 insertions, 25 deletions
diff --git a/mesonbuild/modules/windows.py b/mesonbuild/modules/windows.py
index 22bf49b..dc6e9d8 100644
--- a/mesonbuild/modules/windows.py
+++ b/mesonbuild/modules/windows.py
@@ -68,15 +68,41 @@ class WindowsModule(ExtensionModule):
if not rescomp.found():
raise MesonException('Could not find Windows resource compiler %s.' % ' '.join(rescomp.get_command()))
- res_kwargs = {
- 'output': '@BASENAME@.' + suffix,
- 'input': args,
- 'command': [rescomp] + res_args,
- }
+ res_targets = []
- res_target = build.CustomTarget('Windows resource', state.subdir, state.subproject, res_kwargs)
+ def add_target(src):
+ if isinstance(src, list):
+ for subsrc in src:
+ add_target(subsrc)
+ return
- return ModuleReturnValue(res_target, [res_target])
+ if hasattr(src, 'held_object'):
+ src = src.held_object
+
+ res_kwargs = {
+ 'output': '@BASENAME@.' + suffix,
+ 'input': [src],
+ 'command': [rescomp] + res_args,
+ }
+
+ if isinstance(src, (str, mesonlib.File)):
+ name = 'file {!r}'.format(str(src))
+ elif isinstance(src, build.CustomTarget):
+ if len(src.get_outputs()) > 1:
+ raise MesonException('windows.compile_resources does not accept custom targets with more than 1 output.')
+
+ name = 'target {!r}'.format(src.get_id())
+ else:
+ raise MesonException('Unexpected source type {!r}. windows.compile_resources accepts only strings, files, custom targets, and lists thereof.'.format(src))
+
+ # Path separators are not allowed in target names
+ name = name.replace('/', '_').replace('\\', '_')
+
+ res_targets.append(build.CustomTarget('Windows resource for ' + name, state.subdir, state.subproject, res_kwargs))
+
+ add_target(args)
+
+ return ModuleReturnValue(res_targets, [res_targets])
def initialize():
return WindowsModule()
diff --git a/test cases/windows/13 resources with custom targets/inc/meson.build b/test cases/windows/13 resources with custom targets/inc/meson.build
deleted file mode 100644
index b8b511a..0000000
--- a/test cases/windows/13 resources with custom targets/inc/meson.build
+++ /dev/null
@@ -1 +0,0 @@
-inc = include_directories('resource')
diff --git a/test cases/windows/13 resources with custom targets/inc/resource/resource.h b/test cases/windows/13 resources with custom targets/inc/resource/resource.h
deleted file mode 100644
index dbdd509..0000000
--- a/test cases/windows/13 resources with custom targets/inc/resource/resource.h
+++ /dev/null
@@ -1 +0,0 @@
-#define ICON_ID 1
diff --git a/test cases/windows/13 resources with custom targets/meson.build b/test cases/windows/13 resources with custom targets/meson.build
index ddb7d6e..b1e2b09 100644
--- a/test cases/windows/13 resources with custom targets/meson.build
+++ b/test cases/windows/13 resources with custom targets/meson.build
@@ -59,11 +59,12 @@ if meson.get_compiler('c').get_id() == 'gcc' and host_machine.system() == 'windo
# We hope you never have to implement something like this.
endif
-subdir('inc')
subdir('res')
-exe = executable('prog', 'prog.c',
- res,
- gui_app : true)
+foreach id : [0, 1, 2]
+ exe = executable('prog_@0@'.format(id), 'prog.c',
+ res[id],
+ gui_app : true)
-test('winmain', exe)
+ test('winmain_@0@'.format(id), exe)
+endforeach
diff --git a/test cases/windows/13 resources with custom targets/res/meson.build b/test cases/windows/13 resources with custom targets/res/meson.build
index 266e380..c15bd92 100644
--- a/test cases/windows/13 resources with custom targets/res/meson.build
+++ b/test cases/windows/13 resources with custom targets/res/meson.build
@@ -2,12 +2,17 @@ win = import('windows')
rc_writer = find_program('./gen-res.py')
-rc_target = custom_target('RC source file',
- input : 'myres.rc.in',
- output : 'myres.rc',
- command : [rc_writer, '@INPUT@', '@OUTPUT@', files('sample.ico')],
- install : false,
- build_always : true)
-
-res = win.compile_resources(rc_target,
- include_directories : inc)
+rc_sources = []
+
+foreach id : [1, 2]
+ rc_sources += custom_target('RC source file @0@'.format(id),
+ input : 'myres.rc.in',
+ output : 'myres_@0@.rc'.format(id),
+ command : [rc_writer, '@INPUT@', '@OUTPUT@', files('sample.ico')],
+ install : false,
+ build_always : true)
+endforeach
+
+rc_sources += files('myres_static.rc')
+
+res = win.compile_resources(rc_sources)
diff --git a/test cases/windows/13 resources with custom targets/res/myres.rc.in b/test cases/windows/13 resources with custom targets/res/myres.rc.in
index 9bb045d..6899bc8 100644
--- a/test cases/windows/13 resources with custom targets/res/myres.rc.in
+++ b/test cases/windows/13 resources with custom targets/res/myres.rc.in
@@ -1,4 +1,3 @@
#include<windows.h>
-#include"resource.h"
-ICON_ID ICON "{icon}"
+1 ICON "{icon}"
diff --git a/test cases/windows/13 resources with custom targets/res/myres_static.rc b/test cases/windows/13 resources with custom targets/res/myres_static.rc
new file mode 100644
index 0000000..12838ae
--- /dev/null
+++ b/test cases/windows/13 resources with custom targets/res/myres_static.rc
@@ -0,0 +1,3 @@
+#include<windows.h>
+
+1 ICON "sample.ico"