Skip to content

Commit

Permalink
Add test case for mesonbuild#8020
Browse files Browse the repository at this point in the history
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.
  • Loading branch information
vvainola authored and arch1t3cht committed Aug 27, 2024
1 parent 3abb42d commit 3feb322
Show file tree
Hide file tree
Showing 15 changed files with 150 additions and 0 deletions.
6 changes: 6 additions & 0 deletions test cases/common/278 extract_all custom_target/copy.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,6 @@
#!/usr/bin/env python3

import sys
import shutil

shutil.copyfile(sys.argv[1], sys.argv[2])
4 changes: 4 additions & 0 deletions test cases/common/278 extract_all custom_target/custom1.c
Original file line number Diff line number Diff line change
@@ -0,0 +1,4 @@
int func_custom1(void)
{
return 0;
}
4 changes: 4 additions & 0 deletions test cases/common/278 extract_all custom_target/gen1.c
Original file line number Diff line number Diff line change
@@ -0,0 +1,4 @@
int func_gen1(void)
{
return 0;
}
25 changes: 25 additions & 0 deletions test cases/common/278 extract_all custom_target/main.c
Original file line number Diff line number Diff line change
@@ -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;
}
42 changes: 42 additions & 0 deletions test cases/common/278 extract_all custom_target/meson.build
Original file line number Diff line number Diff line change
@@ -0,0 +1,42 @@
project('extract all custom', 'c')
fs = import('fs')

copy = find_program('copy.py')
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(), subsub_a.extract_all_objects()]
)
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)
4 changes: 4 additions & 0 deletions test cases/common/278 extract_all custom_target/sub/custom2.c
Original file line number Diff line number Diff line change
@@ -0,0 +1,4 @@
int func_custom2(void)
{
return 0;
}
4 changes: 4 additions & 0 deletions test cases/common/278 extract_all custom_target/sub/gen2.c
Original file line number Diff line number Diff line change
@@ -0,0 +1,4 @@
int func_gen2(void)
{
return 0;
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,4 @@
int func_custom3(void)
{
return 0;
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,4 @@
int func_gen3(void)
{
return 0;
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,26 @@
project('subproj', 'c')

fs = import('fs')
copy = find_program('../../copy.py')

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(), subsub_a.extract_all_objects()])
Original file line number Diff line number Diff line change
@@ -0,0 +1,4 @@
int func_custom4(void)
{
return 0;
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,4 @@
int func_gen4(void)
{
return 0;
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,4 @@
int func_gen5(void)
{
return 0;
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,11 @@
project('subproj', 'c')

fs = import('fs')
copy = find_program('../../../../copy.py')

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])
Original file line number Diff line number Diff line change
@@ -0,0 +1,4 @@
int func_gen6(void)
{
return 0;
}

0 comments on commit 3feb322

Please sign in to comment.