From 884f38fe1b8a005d494be39049a2378e964f0948 Mon Sep 17 00:00:00 2001 From: Jon Turney Date: Thu, 7 Jun 2018 18:01:39 +0100 Subject: [PATCH 1/3] Use a unique name for windows resource compilation custom target --- mesonbuild/modules/windows.py | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/mesonbuild/modules/windows.py b/mesonbuild/modules/windows.py index fb5bacfc1..7dd87f245 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.') From 80ce5e08171bcc163b961bf1ce695b9d1e93ca10 Mon Sep 17 00:00:00 2001 From: Jon Turney Date: Thu, 7 Jun 2018 18:00:18 +0100 Subject: [PATCH 2/3] Test for Windows resource compilation reusing the same script name Extended from the test case in #3575. This exercises File objects and string filenames for the same resource script filename at different paths. --- .../a/meson.build | 1 + .../a/rsrc.rc | 1 + .../b/meson.build | 2 ++ .../b/rsrc.rc | 1 + .../c/meson.build | 2 ++ .../c/rsrc.rc | 1 + .../meson.build | 16 ++++++++++++++++ .../rsrc.rc | 1 + 8 files changed, 25 insertions(+) create mode 100644 test cases/windows/16 resource scripts with duplicate filenames/a/meson.build create mode 100644 test cases/windows/16 resource scripts with duplicate filenames/a/rsrc.rc create mode 100644 test cases/windows/16 resource scripts with duplicate filenames/b/meson.build create mode 100644 test cases/windows/16 resource scripts with duplicate filenames/b/rsrc.rc create mode 100644 test cases/windows/16 resource scripts with duplicate filenames/c/meson.build create mode 100644 test cases/windows/16 resource scripts with duplicate filenames/c/rsrc.rc create mode 100644 test cases/windows/16 resource scripts with duplicate filenames/meson.build create mode 100644 test cases/windows/16 resource scripts with duplicate filenames/rsrc.rc 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 000000000..73f18c8b6 --- /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 000000000..1997b8ecb --- /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 000000000..d0b0aabb5 --- /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 000000000..a8e3b27b4 --- /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 000000000..a7b7e309c --- /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 000000000..1fa2c1cfa --- /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 000000000..ec6d98d82 --- /dev/null +++ b/test cases/windows/16 resource scripts with duplicate filenames/meson.build @@ -0,0 +1,16 @@ +project('foobar', 'c') + +win = import('windows') + +subdir('a') +subdir('b') +subdir('c') + +main = win.compile_resources('rsrc.rc') + +# these make the resource compilation a dependency of something which is built +# by default +static_library('libmain', main) +static_library('liba', a) +static_library('libb', b) +static_library('libc', c) 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 000000000..8f6aa1f5c --- /dev/null +++ b/test cases/windows/16 resource scripts with duplicate filenames/rsrc.rc @@ -0,0 +1 @@ +main RCDATA { "main" } From 4bc6b68bae3a11d9a77ac5511d3dd54aa2d9ff3b Mon Sep 17 00:00:00 2001 From: Jon Turney Date: Thu, 7 Jun 2018 18:00:18 +0100 Subject: [PATCH 3/3] Also test that the resource has the expected contents --- .../meson.build | 15 +++++++----- .../verify.c | 23 +++++++++++++++++++ 2 files changed, 32 insertions(+), 6 deletions(-) create mode 100644 test cases/windows/16 resource scripts with duplicate filenames/verify.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 index ec6d98d82..4073a8e7c 100644 --- a/test cases/windows/16 resource scripts with duplicate filenames/meson.build +++ b/test cases/windows/16 resource scripts with duplicate filenames/meson.build @@ -8,9 +8,12 @@ subdir('c') main = win.compile_resources('rsrc.rc') -# these make the resource compilation a dependency of something which is built -# by default -static_library('libmain', main) -static_library('liba', a) -static_library('libb', b) -static_library('libc', c) +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/verify.c b/test cases/windows/16 resource scripts with duplicate filenames/verify.c new file mode 100644 index 000000000..4d2ccf028 --- /dev/null +++ b/test cases/windows/16 resource scripts with duplicate filenames/verify.c @@ -0,0 +1,23 @@ +#include +#include + +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; +}