parent
81100f0695
commit
ef7cb9f280
9 changed files with 118 additions and 5 deletions
@ -0,0 +1 @@ |
|||||||
|
inc = include_directories('resource') |
@ -0,0 +1 @@ |
|||||||
|
#define ICON_ID 1 |
@ -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('inc') |
||||||
|
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(NULL, IDI_APPLICATION); |
||||||
|
return hIcon ? 0 : 1; |
||||||
|
} |
@ -0,0 +1,6 @@ |
|||||||
|
#!/usr/bin/env python3 |
||||||
|
|
||||||
|
import sys |
||||||
|
|
||||||
|
with open(sys.argv[1], 'r') as infile, open(sys.argv[2], 'w') as outfile: |
||||||
|
outfile.write(infile.read().format(icon=sys.argv[3])) |
@ -0,0 +1,13 @@ |
|||||||
|
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) |
@ -0,0 +1,4 @@ |
|||||||
|
#include<windows.h> |
||||||
|
#include"resource.h" |
||||||
|
|
||||||
|
ICON_ID ICON "{icon}" |
After Width: | Height: | Size: 9.4 KiB |
Loading…
Reference in new issue