|
|
|
# this test can ONLY be run successfully from run_project_test.py
|
|
|
|
# due to use of setup_env.json
|
|
|
|
project('external CMake dependency', ['c', 'cpp'])
|
|
|
|
|
|
|
|
cmake = find_program('cmake', required: false)
|
|
|
|
if not cmake.found()
|
|
|
|
error('MESON_SKIP_TEST cmake binary not available.')
|
|
|
|
endif
|
|
|
|
|
|
|
|
# Zlib is probably on all dev machines.
|
|
|
|
|
|
|
|
dep = dependency('ZLIB', version : '>=1.2', method : 'cmake')
|
|
|
|
|
|
|
|
if '#define' in dep.version() and cmake.version().version_compare('< 3.27.4')
|
|
|
|
# ZLIB 1.3 version is broken with those cmake versions
|
|
|
|
error('MESON_SKIP_TEST known bug in cmake (https://gitlab.kitware.com/cmake/cmake/-/issues/25200)')
|
|
|
|
endif
|
|
|
|
|
|
|
|
exe = executable('zlibprog', 'prog-checkver.c',
|
|
|
|
dependencies : dep,
|
|
|
|
c_args : '-DFOUND_ZLIB="' + dep.version() + '"')
|
|
|
|
|
|
|
|
assert(dep.version().version_compare('>=1.2'), 'CMake version numbers exposed incorrectly.')
|
|
|
|
|
|
|
|
# Check that CMake targets are extracted
|
|
|
|
dept = dependency('ZLIB', version : '>=1.2', method : 'cmake', modules : 'ZLIB::ZLIB')
|
|
|
|
exet = executable('zlibprog_target', 'prog-checkver.c',
|
|
|
|
dependencies : dep,
|
|
|
|
c_args : '-DFOUND_ZLIB="' + dep.version() + '"')
|
|
|
|
|
|
|
|
# Check that the version exposed by zlib internally is the same as the one we
|
|
|
|
# retrieve from the pkg-config file. This assumes that the packager didn't mess
|
|
|
|
# up, but we can be reasonably sure of that.
|
|
|
|
test('zlibtest', exe)
|
|
|
|
|
|
|
|
# Test that dependencies of dependencies work.
|
|
|
|
dep2 = declare_dependency(dependencies : dep)
|
|
|
|
exe2 = executable('zlibprog2', 'prog.c', dependencies : dep2)
|
|
|
|
test('zlibtest2', exe2)
|
|
|
|
|
|
|
|
# Try to find a nonexistent library to ensure requires:false works.
|
|
|
|
|
|
|
|
depf1 = dependency('nvakuhrabnsdfasdf', required : false, method : 'cmake')
|
|
|
|
depf2 = dependency('ZLIB', required : false, method : 'cmake', modules : 'dfggh::hgfgag')
|
|
|
|
|
|
|
|
assert(depf2.found() == false, 'Invalid CMake targets should fail')
|
|
|
|
|
|
|
|
# Try to find cmMesonTestDep in a custom prefix
|
|
|
|
# setup_env.json is used by run_project_tests.py:_run_test to point to ./cmake_pref_env/
|
|
|
|
depPrefEnv = dependency('cmMesonTestDep', required : true, method : 'cmake')
|
|
|
|
depPrefEnv1 = dependency('cmMesonTestF1', required : true, method : 'cmake')
|
|
|
|
depPrefEnv2 = dependency('cmMesonTestF2', required : true, method : 'cmake')
|
|
|
|
depPrefEnv3 = dependency('cmMesonTestF3', required : true, method : 'cmake')
|
|
|
|
|
|
|
|
# Try to actually link with depPrefEnv1, since we are doing "fun" stuff there
|
|
|
|
exe3 = executable('zlibprog3', 'prog.c', dependencies : depPrefEnv1)
|
|
|
|
test('zlibtest3', exe3)
|
|
|
|
|
|
|
|
# Try to find a dependency with a custom CMake module
|
|
|
|
|
|
|
|
depm1 = dependency('SomethingLikeZLIB', required : true, components : 'required_comp', method : 'cmake', cmake_module_path : 'cmake')
|
|
|
|
depm2 = dependency('SomethingLikeZLIB', required : true, components : 'required_comp', method : 'cmake', cmake_module_path : ['cmake'])
|
|
|
|
depm3 = dependency('SomethingLikeZLIB', required : true, components : ['required_comp'], cmake_module_path : 'cmake')
|
|
|
|
|
|
|
|
|
|
|
|
# Mix of imported targets and old style variables
|
|
|
|
|
|
|
|
depio1 = dependency('ImportedOldStyle', required : true, cmake_module_path : 'cmake')
|
|
|
|
|
|
|
|
# Try to actually link with depio1, since we are doing even more "fun" stuff there
|
|
|
|
exe4 = executable('zlibprog4', 'prog.c', dependencies : depio1)
|
|
|
|
test('zlibtest4', exe4)
|
|
|
|
|
|
|
|
# Test some edge cases with spaces, etc. (but only for CMake >= 3.15)
|
|
|
|
|
|
|
|
if find_program('cmake', required: false, version: '>=3.15').found()
|
|
|
|
testDep1 = dependency('ImportedTarget', required : true, method : 'cmake', cmake_module_path : 'cmake', modules: 'mesonTestLibDefs')
|
|
|
|
testDep2 = dependency('ImportedTarget', required : true, method : 'cmake', cmake_module_path : 'cmake', modules : ['MesonTest::TestLibDefs'])
|
|
|
|
testFlagSet1 = executable('testFlagSet1', ['testFlagSet.c'], dependencies: [testDep1])
|
|
|
|
testFlagSet2 = executable('testFlagSet2', ['testFlagSet.c'], dependencies: [testDep2])
|
|
|
|
test('testFlagSetTest1', testFlagSet1)
|
|
|
|
test('testFlagSetTest2', testFlagSet2)
|
|
|
|
endif
|
|
|
|
|
|
|
|
# Try to find a dependency with a cmake module which requires a package version
|
|
|
|
# test.json sets CMAKE_PREFIX_PATH to include ./cmake_pref_env/
|
|
|
|
verdep1 = dependency('cmMesonVersionedTestDep', required : true, method : 'cmake', cmake_package_version : '3.0')
|
|
|
|
verdep2 = dependency('cmMesonVersionedTestDep', required : false, method : 'cmake', cmake_package_version : '200.0')
|
|
|
|
assert(not verdep2.found(), 'found a version dep we shouldn\'t have')
|
|
|
|
|
|
|
|
# Try to compile a test that takes a dep and an include_directories
|
|
|
|
|
|
|
|
cc = meson.get_compiler('c')
|
|
|
|
zlibdep = cc.find_library('z')
|
|
|
|
code = '''#include<myinc.h>
|
|
|
|
|
|
|
|
int main(void) {
|
|
|
|
void * something = deflate;
|
|
|
|
if(something != 0)
|
|
|
|
return 0;
|
|
|
|
return 1;
|
|
|
|
}
|
|
|
|
'''
|
|
|
|
|
|
|
|
inc = include_directories('incdir')
|
|
|
|
|
|
|
|
r = cc.run(code, include_directories : inc, dependencies : zlibdep)
|
|
|
|
assert(r.returncode() == 0, 'Running manual zlib test failed.')
|