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
Vili Väinölä 4 years ago committed by arch1t3cht
parent 2638a8ce73
commit d8a8df2ed4
  1. 6
      test cases/common/281 extract_all custom_target/copy.py
  2. 4
      test cases/common/281 extract_all custom_target/custom1.c
  3. 4
      test cases/common/281 extract_all custom_target/gen1.c
  4. 25
      test cases/common/281 extract_all custom_target/main.c
  5. 43
      test cases/common/281 extract_all custom_target/meson.build
  6. 4
      test cases/common/281 extract_all custom_target/sub/custom2.c
  7. 4
      test cases/common/281 extract_all custom_target/sub/gen2.c
  8. 4
      test cases/common/281 extract_all custom_target/subprojects/s1/custom3.c
  9. 4
      test cases/common/281 extract_all custom_target/subprojects/s1/gen3.c
  10. 26
      test cases/common/281 extract_all custom_target/subprojects/s1/meson.build
  11. 4
      test cases/common/281 extract_all custom_target/subprojects/s1/sub/custom4.c
  12. 4
      test cases/common/281 extract_all custom_target/subprojects/s1/sub/gen4.c
  13. 4
      test cases/common/281 extract_all custom_target/subprojects/s1/subprojects/s2/gen5.c
  14. 11
      test cases/common/281 extract_all custom_target/subprojects/s1/subprojects/s2/meson.build
  15. 4
      test cases/common/281 extract_all custom_target/subprojects/s1/subprojects/s2/sub/gen6.c

@ -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,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,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])
Loading…
Cancel
Save