Add test case for #8020
The referenced issue involved the VS backend breaking when custom_targets where linked, extracted using extract_all_objects, and then linked into other targets, while in a subproject.pull/12549/head
parent
2638a8ce73
commit
d8a8df2ed4
15 changed files with 151 additions and 0 deletions
@ -0,0 +1,6 @@ |
||||
#!/usr/bin/env python3 |
||||
|
||||
import sys |
||||
import shutil |
||||
|
||||
shutil.copyfile(sys.argv[1], sys.argv[2]) |
@ -0,0 +1,4 @@ |
||||
int func_custom1(void) |
||||
{ |
||||
return 0; |
||||
} |
@ -0,0 +1,4 @@ |
||||
int func_gen1(void) |
||||
{ |
||||
return 0; |
||||
} |
@ -0,0 +1,25 @@ |
||||
int func_custom1(void); |
||||
int func_custom2(void); |
||||
int func_custom3(void); |
||||
int func_custom4(void); |
||||
int func_gen1(void); |
||||
int func_gen2(void); |
||||
int func_gen3(void); |
||||
int func_gen4(void); |
||||
int func_gen5(void); |
||||
int func_gen6(void); |
||||
|
||||
int main(void) |
||||
{ |
||||
func_custom1(); |
||||
func_custom2(); |
||||
func_custom3(); |
||||
func_custom4(); |
||||
func_gen1(); |
||||
func_gen2(); |
||||
func_gen3(); |
||||
func_gen4(); |
||||
func_gen5(); |
||||
func_gen6(); |
||||
return 0; |
||||
} |
@ -0,0 +1,43 @@ |
||||
project('extract all custom', 'c') |
||||
fs = import('fs') |
||||
|
||||
copy = find_program('copy.py') |
||||
meson.override_find_program('copy', copy) |
||||
gen = generator(copy, |
||||
output : 'gen_@PLAINNAME@', |
||||
arguments: ['@INPUT@', '@OUTPUT@']) |
||||
src_gen = gen.process('gen1.c', 'sub/gen2.c') |
||||
|
||||
i = 0 |
||||
src_custom = [] |
||||
foreach f : ['custom1.c', 'sub/custom2.c'] |
||||
i += 1 |
||||
src_custom += [custom_target('custom' + i.to_string(), |
||||
input : f, |
||||
output : 'gen_' + fs.name(f), |
||||
command : [copy, '@INPUT@', '@OUTPUT@']) |
||||
] |
||||
endforeach |
||||
|
||||
s1 = subproject('s1') |
||||
sub_a = s1.get_variable('sub_a') |
||||
sub_b = s1.get_variable('sub_b') |
||||
subsub_a = s1.get_variable('s2').get_variable('subsub_a') |
||||
|
||||
# Use objects from subproject and subsubproject |
||||
a = static_library('a', |
||||
sources : [src_gen, src_custom], |
||||
objects : [sub_a.extract_all_objects(recursive: true), subsub_a.extract_all_objects(recursive: true)] |
||||
) |
||||
e1= executable('e1', |
||||
sources: ['main.c'], |
||||
link_with : a |
||||
) |
||||
|
||||
# link with lib that uses objects from subproject of subproject |
||||
e2 = executable('e2', |
||||
sources : ['main.c', src_gen, src_custom], |
||||
link_with : [sub_b] |
||||
) |
||||
test('test_e1', e1) |
||||
test('test_e2', e2) |
@ -0,0 +1,4 @@ |
||||
int func_custom2(void) |
||||
{ |
||||
return 0; |
||||
} |
@ -0,0 +1,4 @@ |
||||
int func_gen2(void) |
||||
{ |
||||
return 0; |
||||
} |
@ -0,0 +1,4 @@ |
||||
int func_custom3(void) |
||||
{ |
||||
return 0; |
||||
} |
@ -0,0 +1,4 @@ |
||||
int func_gen3(void) |
||||
{ |
||||
return 0; |
||||
} |
@ -0,0 +1,26 @@ |
||||
project('subproj', 'c') |
||||
|
||||
fs = import('fs') |
||||
copy = find_program('copy') |
||||
|
||||
i = 2 |
||||
src_custom = [] |
||||
foreach f : ['custom3.c', 'sub/custom4.c'] |
||||
i += 1 |
||||
src_custom += [custom_target('custom' + i.to_string(), |
||||
input : f, |
||||
output : 'gen_' + fs.name(f), |
||||
command : [copy, '@INPUT@', '@OUTPUT@']) |
||||
] |
||||
endforeach |
||||
|
||||
gen = generator(copy, |
||||
output : 'gen_@PLAINNAME@', |
||||
arguments: ['@INPUT@', '@OUTPUT@']) |
||||
src_gen = gen.process('gen3.c', 'sub/gen4.c') |
||||
|
||||
s2 = subproject('s2') |
||||
subsub_a = s2.get_variable('subsub_a') |
||||
|
||||
sub_a = static_library('sub_a', sources : [src_custom, src_gen]) |
||||
sub_b = static_library('sub_b', objects : [sub_a.extract_all_objects(recursive: true), subsub_a.extract_all_objects(recursive: true)]) |
@ -0,0 +1,4 @@ |
||||
int func_custom4(void) |
||||
{ |
||||
return 0; |
||||
} |
@ -0,0 +1,4 @@ |
||||
int func_gen4(void) |
||||
{ |
||||
return 0; |
||||
} |
@ -0,0 +1,4 @@ |
||||
int func_gen5(void) |
||||
{ |
||||
return 0; |
||||
} |
@ -0,0 +1,11 @@ |
||||
project('subproj', 'c') |
||||
|
||||
fs = import('fs') |
||||
copy = find_program('copy') |
||||
|
||||
gen = generator(copy, |
||||
output : 'gen_@PLAINNAME@', |
||||
arguments: ['@INPUT@', '@OUTPUT@']) |
||||
src_gen = gen.process('gen5.c', 'sub/gen6.c') |
||||
|
||||
subsub_a = static_library('subsub_a', sources : [src_gen]) |
@ -0,0 +1,4 @@ |
||||
int func_gen6(void) |
||||
{ |
||||
return 0; |
||||
} |
Loading…
Reference in new issue