include_type: Add CMake subporject dependency method (fixes #6879)

pull/7841/head
Daniel Mensinger 4 years ago committed by Jussi Pakkanen
parent e00df9046d
commit e36f713a7f
  1. 5
      docs/markdown/CMake-module.md
  2. 5
      docs/markdown/snippets/cmake_include_type.md
  3. 13
      mesonbuild/modules/cmake.py
  4. 3
      test cases/cmake/1 basic/meson.build

@ -133,7 +133,10 @@ kept for compatibility. It will not work together with the `options` kwarg.
This object is returned by the `subproject` function described above
and supports the following methods:
- `dependency(target)` returns a dependency object for any CMake target.
- `dependency(target)` returns a dependency object for any CMake target. The
`include_type` kwarg *(new in 0.56.0)* controls the include type of the
returned dependency object similar to the same kwarg in the
[`dependency()`](Reference-manual.md#dependency) function.
- `include_directories(target)` returns a meson `include_directories()`
object for the specified target. Using this function is not necessary
if the dependency object is used.

@ -0,0 +1,5 @@
## `include_type` support for the CMake subproject object dependency method
The `dependency()` method of the CMake subproject object now also supports the
`include_type` kwarg which is similar to the sane kwarg in the `dependency()`
function.

@ -20,7 +20,7 @@ from . import ExtensionModule, ModuleReturnValue
from .. import build, dependencies, mesonlib, mlog
from ..cmake import SingleTargetOptions, TargetOptions, cmake_defines_to_args
from ..interpreter import ConfigurationDataHolder, InterpreterException, SubprojectHolder
from ..interpreter import ConfigurationDataHolder, InterpreterException, SubprojectHolder, DependencyHolder
from ..interpreterbase import (
InterpreterObject,
ObjectHolder,
@ -105,11 +105,18 @@ class CMakeSubprojectHolder(InterpreterObject, ObjectHolder):
def get_variable(self, args, kwargs):
return self.held_object.get_variable_method(args, kwargs)
@noKwargs
@FeatureNewKwargs('dependency', '0.56.0', ['include_type'])
@permittedKwargs({'include_type'})
@stringArgs
def dependency(self, args, kwargs):
info = self._args_to_info(args)
return self.get_variable([info['dep']], kwargs)
orig = self.get_variable([info['dep']], {})
assert isinstance(orig, DependencyHolder)
actual = orig.include_type_method([], {})
if 'include_type' in kwargs and kwargs['include_type'] != actual:
mlog.debug('Current include type is {}. Converting to requested {}'.format(actual, kwargs['include_type']))
return orig.as_system_method([kwargs['include_type']], {})
return orig
@noKwargs
@stringArgs

@ -3,11 +3,12 @@ project('cmakeSubTest', ['c', 'cpp'])
cm = import('cmake')
sub_pro = cm.subproject('cmMod')
sub_dep = sub_pro.dependency('cmModLib++')
sub_dep = sub_pro.dependency('cmModLib++', include_type: 'system')
assert(sub_pro.found(), 'found() method reports not found, but should be found')
assert(sub_pro.target_list() == ['cmModLib++'], 'There should be exactly one target')
assert(sub_pro.target_type('cmModLib++') == 'shared_library', 'Target type should be shared_library')
assert(sub_dep.include_type() == 'system', 'the include_type kwarg of dependency() works')
exe1 = executable('main', ['main.cpp'], dependencies: [sub_dep])
test('test1', exe1)

Loading…
Cancel
Save