| project( |
| 'test both libraries', |
| 'c', |
| meson_version: '>= 1.6.0', |
| ) |
| |
| expected = 0 |
| |
| |
| with_bl = both_libraries( |
| 'with_bl', |
| files('src/both_libraries.c'), |
| c_shared_args: ['-DEXPORT'], |
| ) |
| |
| with_bl_dep = declare_dependency( |
| link_with: with_bl, |
| ) |
| |
| |
| if get_option('use_dep') |
| lib_deps = [with_bl_dep] |
| lib_links = [] |
| else |
| lib_deps = [] |
| lib_links = [with_bl] |
| endif |
| |
| |
| with_library = library( |
| 'with_library', |
| files('src/library.c'), |
| c_shared_args: ['-DEXPORT'], |
| link_with: lib_links, |
| dependencies: lib_deps, |
| ) |
| |
| with_library_dep = declare_dependency( |
| link_with: with_library, |
| ) |
| |
| |
| if get_option('default_library') == 'shared' |
| expected += 1 |
| if get_option('default_both_libraries') in ['shared', 'auto'] |
| expected += 1 |
| endif |
| elif get_option('default_library') == 'both' |
| if get_option('default_both_libraries') in ['shared', 'auto'] |
| expected += 2 |
| endif |
| else |
| if get_option('default_both_libraries') == 'shared' |
| expected += 1 |
| endif |
| endif |
| |
| |
| if get_option('use_dep') |
| main_deps = [with_library_dep] |
| main_links = [] |
| else |
| main_deps = [] |
| main_links = [with_library] |
| endif |
| |
| main = executable( |
| 'main', |
| files('src/main.c'), |
| c_args: [f'-DEXPECTED=@expected@'], |
| link_with: main_links, |
| dependencies: main_deps, |
| ) |
| test('test both libs', main) |
| |
| |
| if get_option('default_library') == 'both' and get_option('default_both_libraries') == 'auto' |
| # With those options, even if the both_libraries defaults to 'shared', |
| # 'static' version is used when linking to the static part of another both_libraries. |
| |
| if get_option('use_dep') |
| main_static_deps = [with_library_dep.as_static(recursive: true)] |
| main_static_links = [] |
| else |
| main_static_deps = [] |
| main_static_links = [with_library.get_static_lib()] |
| endif |
| main_static = executable( |
| 'main_static', |
| files('src/main.c'), |
| c_args: [f'-DEXPECTED=0'], |
| link_with: main_static_links, |
| dependencies: main_static_deps, |
| ) |
| test('test static', main_static) |
| |
| |
| if get_option('use_dep') |
| main_shared_deps = [with_library_dep.as_shared(recursive: true)] |
| main_shared_links = [] |
| else |
| main_shared_deps = [] |
| main_shared_links = [with_library.get_shared_lib()] |
| endif |
| main_shared = executable( |
| 'main_shared', |
| files('src/main.c'), |
| c_args: [f'-DEXPECTED=2'], |
| link_with: main_shared_links, |
| dependencies: main_shared_deps, |
| ) |
| test('test shared', main_shared) |
| endif |
| |
| # Test case for https://github.com/mesonbuild/meson/pull/14098 |
| if get_option('default_library') == 'shared' |
| |
| if get_option('use_dep') |
| lib_deps = [with_bl_dep.as_static(recursive: true)] |
| lib_links = [] |
| else |
| lib_deps = [] |
| lib_links = [with_bl.get_static_lib()] |
| endif |
| |
| lib_with_static_dep = library( |
| 'lib_with_static_dep', |
| files('src/library.c'), |
| c_shared_args: ['-DEXPORT'], |
| link_with: lib_links, |
| dependencies: lib_deps, |
| ) |
| |
| main_with_static_dep = executable( |
| 'main_with_static_dep', |
| files('src/main.c'), |
| c_args: [f'-DEXPECTED=1'], |
| link_with: lib_with_static_dep, |
| ) |
| test('test static dep', main_with_static_dep) |
| |
| endif |