aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJussi Pakkanen <jpakkane@gmail.com>2018-06-17 17:28:09 +0300
committerGitHub <noreply@github.com>2018-06-17 17:28:09 +0300
commit8014a42f57af04620ff0625aa727864779479f1a (patch)
tree1fc5bba59443c99da9662ed2672d263a984f2bf4
parentcd63ca9c194c328e9a05b1c81898657c3acfe498 (diff)
parent4bc6b68bae3a11d9a77ac5511d3dd54aa2d9ff3b (diff)
downloadmeson-8014a42f57af04620ff0625aa727864779479f1a.zip
meson-8014a42f57af04620ff0625aa727864779479f1a.tar.gz
meson-8014a42f57af04620ff0625aa727864779479f1a.tar.bz2
Merge pull request #3715 from jon-turney/duplicate-rsrc-script-name
Use a unique name for windows resource compilation custom target
-rw-r--r--mesonbuild/modules/windows.py6
-rw-r--r--test cases/windows/16 resource scripts with duplicate filenames/a/meson.build1
-rw-r--r--test cases/windows/16 resource scripts with duplicate filenames/a/rsrc.rc1
-rw-r--r--test cases/windows/16 resource scripts with duplicate filenames/b/meson.build2
-rw-r--r--test cases/windows/16 resource scripts with duplicate filenames/b/rsrc.rc1
-rw-r--r--test cases/windows/16 resource scripts with duplicate filenames/c/meson.build2
-rw-r--r--test cases/windows/16 resource scripts with duplicate filenames/c/rsrc.rc1
-rw-r--r--test cases/windows/16 resource scripts with duplicate filenames/meson.build19
-rw-r--r--test cases/windows/16 resource scripts with duplicate filenames/rsrc.rc1
-rw-r--r--test cases/windows/16 resource scripts with duplicate filenames/verify.c23
10 files changed, 55 insertions, 2 deletions
diff --git a/mesonbuild/modules/windows.py b/mesonbuild/modules/windows.py
index fb5bacf..7dd87f2 100644
--- a/mesonbuild/modules/windows.py
+++ b/mesonbuild/modules/windows.py
@@ -88,8 +88,10 @@ class WindowsModule(ExtensionModule):
'depend_files': wrc_deps,
}
- if isinstance(src, (str, mesonlib.File)):
- name = 'file {!r}'.format(str(src))
+ if isinstance(src, str):
+ name = 'file {!r}'.format(os.path.join(state.subdir, src))
+ elif isinstance(src, mesonlib.File):
+ name = 'file {!r}'.format(src.relative_name())
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.')
diff --git a/test cases/windows/16 resource scripts with duplicate filenames/a/meson.build b/test cases/windows/16 resource scripts with duplicate filenames/a/meson.build
new file mode 100644
index 0000000..73f18c8
--- /dev/null
+++ b/test cases/windows/16 resource scripts with duplicate filenames/a/meson.build
@@ -0,0 +1 @@
+a = win.compile_resources('rsrc.rc')
diff --git a/test cases/windows/16 resource scripts with duplicate filenames/a/rsrc.rc b/test cases/windows/16 resource scripts with duplicate filenames/a/rsrc.rc
new file mode 100644
index 0000000..1997b8e
--- /dev/null
+++ b/test cases/windows/16 resource scripts with duplicate filenames/a/rsrc.rc
@@ -0,0 +1 @@
+a RCDATA { "a" }
diff --git a/test cases/windows/16 resource scripts with duplicate filenames/b/meson.build b/test cases/windows/16 resource scripts with duplicate filenames/b/meson.build
new file mode 100644
index 0000000..d0b0aab
--- /dev/null
+++ b/test cases/windows/16 resource scripts with duplicate filenames/b/meson.build
@@ -0,0 +1,2 @@
+bf = files('rsrc.rc')
+b = win.compile_resources(bf)
diff --git a/test cases/windows/16 resource scripts with duplicate filenames/b/rsrc.rc b/test cases/windows/16 resource scripts with duplicate filenames/b/rsrc.rc
new file mode 100644
index 0000000..a8e3b27
--- /dev/null
+++ b/test cases/windows/16 resource scripts with duplicate filenames/b/rsrc.rc
@@ -0,0 +1 @@
+b RCDATA { "b" }
diff --git a/test cases/windows/16 resource scripts with duplicate filenames/c/meson.build b/test cases/windows/16 resource scripts with duplicate filenames/c/meson.build
new file mode 100644
index 0000000..a7b7e30
--- /dev/null
+++ b/test cases/windows/16 resource scripts with duplicate filenames/c/meson.build
@@ -0,0 +1,2 @@
+cf = files('rsrc.rc')
+c = win.compile_resources(cf)
diff --git a/test cases/windows/16 resource scripts with duplicate filenames/c/rsrc.rc b/test cases/windows/16 resource scripts with duplicate filenames/c/rsrc.rc
new file mode 100644
index 0000000..1fa2c1c
--- /dev/null
+++ b/test cases/windows/16 resource scripts with duplicate filenames/c/rsrc.rc
@@ -0,0 +1 @@
+c RCDATA { "c" }
diff --git a/test cases/windows/16 resource scripts with duplicate filenames/meson.build b/test cases/windows/16 resource scripts with duplicate filenames/meson.build
new file mode 100644
index 0000000..4073a8e
--- /dev/null
+++ b/test cases/windows/16 resource scripts with duplicate filenames/meson.build
@@ -0,0 +1,19 @@
+project('foobar', 'c')
+
+win = import('windows')
+
+subdir('a')
+subdir('b')
+subdir('c')
+
+main = win.compile_resources('rsrc.rc')
+
+testa = executable('testa', 'verify.c', a)
+testb = executable('testb', 'verify.c', b)
+testc = executable('testc', 'verify.c', c)
+testmain = executable('testmain', 'verify.c', main)
+
+test('a', testa, args: 'a')
+test('b', testb, args: 'b')
+test('c', testc, args: 'c')
+test('main', testmain, args: 'main')
diff --git a/test cases/windows/16 resource scripts with duplicate filenames/rsrc.rc b/test cases/windows/16 resource scripts with duplicate filenames/rsrc.rc
new file mode 100644
index 0000000..8f6aa1f
--- /dev/null
+++ b/test cases/windows/16 resource scripts with duplicate filenames/rsrc.rc
@@ -0,0 +1 @@
+main RCDATA { "main" }
diff --git a/test cases/windows/16 resource scripts with duplicate filenames/verify.c b/test cases/windows/16 resource scripts with duplicate filenames/verify.c
new file mode 100644
index 0000000..4d2ccf0
--- /dev/null
+++ b/test cases/windows/16 resource scripts with duplicate filenames/verify.c
@@ -0,0 +1,23 @@
+#include <assert.h>
+#include <windows.h>
+
+int main(int arc, char *argv[])
+{
+ // verify that the expected resource exists and has the expected contents
+ HRSRC hRsrc;
+ unsigned int size;
+ HGLOBAL hGlobal;
+ void* data;
+
+ hRsrc = FindResource(NULL, argv[1], RT_RCDATA);
+ assert(hRsrc);
+
+ size = SizeofResource(NULL, hRsrc);
+ hGlobal = LoadResource(NULL, hRsrc);
+ data = LockResource(hGlobal);
+
+ assert(size == strlen(argv[1]));
+ assert(memcmp(data, argv[1], size) == 0);
+
+ return 0;
+}