Test windows.compile_resource() when depends: is a custom_target

This test covers the case where the resource script references a file which
is created by a custom_target (in this case, an icon).

Put icon in a separate directory to ensure we excercise setting the include
path to the directory which contains it.
pull/3752/head
Jon Turney 7 years ago committed by Nirbheek Chauhan
parent 7c4b8591b0
commit 09c03a409b
  1. 6
      test cases/windows/15 resources with custom target depend_files/ico/gen-ico.py
  2. 8
      test cases/windows/15 resources with custom target depend_files/ico/meson.build
  3. BIN
      test cases/windows/15 resources with custom target depend_files/ico/sample.ico.in
  4. 69
      test cases/windows/15 resources with custom target depend_files/meson.build
  5. 14
      test cases/windows/15 resources with custom target depend_files/prog.c
  6. 4
      test cases/windows/15 resources with custom target depend_files/res/meson.build
  7. 3
      test cases/windows/15 resources with custom target depend_files/res/myres.rc

@ -0,0 +1,6 @@
#!/usr/bin/env python3
import sys
with open(sys.argv[1], 'rb') as infile, open(sys.argv[2], 'wb') as outfile:
outfile.write(infile.read())

@ -0,0 +1,8 @@
ico_writer = find_program('gen-ico.py')
ico = custom_target('makeico',
input : 'sample.ico.in',
output : 'sample.ico',
command : [ico_writer, '@INPUT@', '@OUTPUT@'],
install : false,
build_always : false)

Binary file not shown.

After

Width:  |  Height:  |  Size: 9.4 KiB

@ -0,0 +1,69 @@
project('winmain', 'c')
# MinGW windres has a bug due to which it doesn't parse args with space properly:
# https://github.com/mesonbuild/meson/pull/1346
# https://sourceware.org/bugzilla/show_bug.cgi?id=4933
if meson.get_compiler('c').get_id() == 'gcc' and host_machine.system() == 'windows'
# Construct build_to_src and skip this test if it has spaces
# because then the -I flag to windres will also have spaces
# and we know the test will fail
src_parts = meson.source_root().split('/')
build_parts = meson.build_root().split('/')
# Get the common path (which might just be '/' or 'C:/')
common = []
done = false
count = 0
if src_parts.length() > build_parts.length()
parts = build_parts
other = src_parts
else
parts = src_parts
other = build_parts
endif
foreach part : parts
if not done and part == other.get(count)
common += [part]
else
done = true
endif
count += 1
endforeach
# Create path components to go down from the build root to the common path
count = 0
rel = build_parts
foreach build : build_parts
if count < build_parts.length() - common.length()
rel += ['..']
endif
count += 1
endforeach
# Create path components to go up from the common path to the build root
count = 0
foreach src : src_parts
if count >= common.length()
rel += [src]
endif
count += 1
endforeach
build_to_src = '/'.join(rel)
if build_to_src.contains(' ')
message('build_to_src is: ' + build_to_src)
error('MESON_SKIP_TEST build_to_src has spaces')
endif
# Welcome to the end of this conditional.
# We hope you never have to implement something like this.
endif
subdir('ico')
subdir('res')
exe = executable('prog', 'prog.c',
res,
gui_app : true)
test('winmain', exe)

@ -0,0 +1,14 @@
#include<windows.h>
#define MY_ICON 1
int APIENTRY
WinMain(
HINSTANCE hInstance,
HINSTANCE hPrevInstance,
LPSTR lpszCmdLine,
int nCmdShow) {
HICON hIcon;
hIcon = LoadIcon(GetModuleHandle(NULL), MAKEINTRESOURCE(MY_ICON));
return hIcon ? 0 : 1;
}

@ -0,0 +1,4 @@
win = import('windows')
res = win.compile_resources('myres.rc',
depends: ico)
Loading…
Cancel
Save