1project('linkcustom', 'c') 2 3# This would require passing the static linker to the build script or having 4# it detect it by itself. I'm too lazy to implement it now and it is not 5# really needed for testing that custom targets work. It is the responsibility 6# of the custom target to produce things in the correct format. 7assert(not meson.is_cross_build(), 8 'MESON_SKIP_TEST cross checking not implemented.') 9 10cc = meson.get_compiler('c') 11genprog = find_program('custom_stlib.py') 12 13clib = custom_target('linkcustom', 14 output: 'libflob.a', 15 command: [genprog, 16 '-o', '@OUTPUT@', 17 '--private-dir', '@PRIVATE_DIR@'] + cc.cmd_array()) 18 19# custom_target tests 20 21exe = executable('prog', 'prog.c', link_with: clib) 22test('linkcustom', exe) 23 24d = declare_dependency(link_with: clib) 25 26exe2 = executable('prog2', 'prog.c', dependencies: d) 27test('linkcustom2', exe2) 28 29# Link whole tests 30 31if meson.backend() == 'xcode' 32 message('Xcode does not support link whole so skipping.') 33else 34 exe3 = executable('prog3', 'prog.c', link_whole: clib) 35 test('linkwhole', exe) 36 37 d2 = declare_dependency(link_whole: clib) 38 39 exe4 = executable('prog4', 'prog.c', dependencies: d2) 40 test('linkwhole2', exe2) 41endif 42 43# custom_target[i] tests 44 45exe_i = executable('prog_i', 'prog.c', link_with: clib[0]) 46test('linkcustom', exe_i) 47 48d_i = declare_dependency(link_with: clib[0]) 49 50exe2_i = executable('prog2_i', 'prog.c', dependencies: d_i) 51test('linkcustom2_i', exe2_i) 52 53# Link whole tests 54 55if meson.backend() == 'xcode' 56 message('Xcode does not support link whole so skipping.') 57else 58 shared_library('lib1', 'lib.c', link_whole: clib) 59 60 exe3_i = executable('prog3_i', 'prog.c', link_whole: clib[0]) 61 test('linkwhole', exe) 62 63 d2_i = declare_dependency(link_whole: clib[0]) 64 65 exe4_i = executable('prog4_i', 'prog.c', dependencies: d2_i) 66 test('linkwhole2_i', exe2_i) 67endif 68 69# Link with custom target 70 71dummy = static_library('dummy', 'dummy.c') 72 73custom_prog = find_program('custom_target.py') 74t = custom_target('custom', input: dummy, output: 'libcustom.a', command: [custom_prog, '@INPUT@', '@OUTPUT@']) 75 76dep1 = declare_dependency(link_with: t) 77dep2 = declare_dependency(link_with: t[0]) 78 79lib1 = static_library('lib1', 'outerlib.c', dependencies: dep1) 80lib2 = static_library('lib2', 'outerlib.c', dependencies: dep2) 81 82exe1 = executable('exe1', 'custom_target.c', link_with: lib1) 83test('custom_target_1', exe1) 84 85exe1_2 = executable('exe1_2', 'custom_target.c', link_with: lib2) 86test('custom_target_2', exe2)