This test covers usage of generated files in static_library that is later linked into shared_library.pull/3195/head
parent
e98ae58d0e
commit
bcd076276e
6 changed files with 123 additions and 0 deletions
@ -0,0 +1,18 @@ |
|||||||
|
#pragma once |
||||||
|
|
||||||
|
#if defined BUILDING_EMBEDDED |
||||||
|
#define DLL_PUBLIC |
||||||
|
#elif defined _WIN32 || defined __CYGWIN__ |
||||||
|
#if defined BUILDING_DLL |
||||||
|
#define DLL_PUBLIC __declspec(dllexport) |
||||||
|
#else |
||||||
|
#define DLL_PUBLIC __declspec(dllimport) |
||||||
|
#endif |
||||||
|
#else |
||||||
|
#if defined __GNUC__ |
||||||
|
#define DLL_PUBLIC __attribute__ ((visibility("default"))) |
||||||
|
#else |
||||||
|
#pragma message ("Compiler does not support symbol visibility.") |
||||||
|
#define DLL_PUBLIC |
||||||
|
#endif |
||||||
|
#endif |
@ -0,0 +1,30 @@ |
|||||||
|
#!/usr/bin/env python3 |
||||||
|
|
||||||
|
import os |
||||||
|
import os.path |
||||||
|
import sys |
||||||
|
|
||||||
|
|
||||||
|
def main(): |
||||||
|
name = os.path.splitext(os.path.basename(sys.argv[1]))[0] |
||||||
|
out = sys.argv[2] |
||||||
|
hname = os.path.join(out, name + '.h') |
||||||
|
cname = os.path.join(out, name + '.c') |
||||||
|
print(os.getcwd(), hname) |
||||||
|
with open(hname, 'w') as hfile: |
||||||
|
hfile.write(''' |
||||||
|
#pragma once |
||||||
|
#include "export.h" |
||||||
|
int DLL_PUBLIC {name}(); |
||||||
|
'''.format(name=name)) |
||||||
|
with open(cname, 'w') as cfile: |
||||||
|
cfile.write(''' |
||||||
|
#include "{name}.h" |
||||||
|
int {name}() {{ |
||||||
|
return {size}; |
||||||
|
}} |
||||||
|
'''.format(name=name, size=len(name))) |
||||||
|
|
||||||
|
|
||||||
|
if __name__ == '__main__': |
||||||
|
main() |
@ -0,0 +1,11 @@ |
|||||||
|
#include "meson_test_function.h" |
||||||
|
|
||||||
|
#include <stdio.h> |
||||||
|
|
||||||
|
int main() { |
||||||
|
if (meson_test_function() != 19) { |
||||||
|
printf("Bad meson_test_function()\n"); |
||||||
|
return 1; |
||||||
|
} |
||||||
|
return 0; |
||||||
|
} |
@ -0,0 +1,58 @@ |
|||||||
|
project('generator link_whole', 'c') |
||||||
|
|
||||||
|
# This just generates foo.h and foo.c with int foo() defined. |
||||||
|
gen_py = find_program('generator.py') |
||||||
|
gen = generator(gen_py, |
||||||
|
output: ['@BASENAME@.h', '@BASENAME@.c'], |
||||||
|
arguments : ['@INPUT@', '@BUILD_DIR@']) |
||||||
|
|
||||||
|
# Test 1: link directly into executable |
||||||
|
srcs = gen.process('meson_test_function.tmpl') |
||||||
|
exe = executable('exe1', [srcs, 'main.c'], c_args : '-DBUILDING_EMBEDDED') |
||||||
|
test('test1', exe) |
||||||
|
|
||||||
|
# Test 2: link into shared library and access from executable |
||||||
|
srcs = gen.process('meson_test_function.tmpl') |
||||||
|
shlib2 = shared_library('shlib2', [srcs], c_args : '-DBUILDING_DLL') |
||||||
|
exe = executable('exe2', 'main.c', |
||||||
|
link_with : shlib2, |
||||||
|
include_directories : shlib2.private_dir_include(), |
||||||
|
) |
||||||
|
test('test2', exe) |
||||||
|
|
||||||
|
# Test 3: link into static library and access from executable |
||||||
|
srcs = gen.process('meson_test_function.tmpl') |
||||||
|
stlib3 = static_library('stlib3', [srcs], c_args : '-DBUILDING_EMBEDDED') |
||||||
|
exe = executable('exe3', 'main.c', |
||||||
|
c_args : '-DBUILDING_EMBEDDED', |
||||||
|
link_with : stlib3, |
||||||
|
include_directories : stlib3.private_dir_include(), |
||||||
|
) |
||||||
|
test('test3', exe) |
||||||
|
|
||||||
|
# Test 4: link into static library, link into shared |
||||||
|
# and access from executable. To make sure static_library |
||||||
|
# is not dropped use pull_meson_test_function helper. |
||||||
|
srcs = gen.process('meson_test_function.tmpl') |
||||||
|
stlib4 = static_library('stlib4', [srcs], c_args : '-DBUILDING_DLL') |
||||||
|
shlib4 = shared_library('shlib4', 'pull_meson_test_function.c', |
||||||
|
c_args : '-DBUILDING_DLL', |
||||||
|
link_with : stlib4, |
||||||
|
include_directories : stlib4.private_dir_include(), |
||||||
|
) |
||||||
|
exe = executable('exe4', 'main.c', |
||||||
|
link_with : shlib4, |
||||||
|
include_directories : stlib4.private_dir_include(), |
||||||
|
) |
||||||
|
test('test4', exe) |
||||||
|
|
||||||
|
# Test 5: link into static library, link_whole into shared |
||||||
|
# and access from executable |
||||||
|
srcs = gen.process('meson_test_function.tmpl') |
||||||
|
stlib5 = static_library('stlib5', [srcs], c_args : '-DBUILDING_DLL') |
||||||
|
shlib5 = shared_library('shlib5', link_whole : stlib5) |
||||||
|
exe = executable('exe5', 'main.c', |
||||||
|
link_with : shlib5, |
||||||
|
include_directories : stlib5.private_dir_include(), |
||||||
|
) |
||||||
|
test('test5', exe) |
@ -0,0 +1,6 @@ |
|||||||
|
#include "export.h" |
||||||
|
#include "meson_test_function.h" |
||||||
|
|
||||||
|
int DLL_PUBLIC function_puller() { |
||||||
|
return meson_test_function(); |
||||||
|
} |
Loading…
Reference in new issue