aboutsummaryrefslogtreecommitdiff
path: root/mesonbuild/dependencies/base.py
diff options
context:
space:
mode:
authorDaniel Mensinger <daniel@mensinger-ka.de>2019-01-31 23:25:21 +0100
committerJussi Pakkanen <jpakkane@gmail.com>2019-02-01 00:25:21 +0200
commite1a83793ae986db44bc810c36a8ea8090d81fe3f (patch)
tree56706c7f19a38b36f609f5ba6fa318f60c7acc1d /mesonbuild/dependencies/base.py
parentabad2ff0056f1100425426094165691386477d11 (diff)
downloadmeson-e1a83793ae986db44bc810c36a8ea8090d81fe3f.zip
meson-e1a83793ae986db44bc810c36a8ea8090d81fe3f.tar.gz
meson-e1a83793ae986db44bc810c36a8ea8090d81fe3f.tar.bz2
CMake: Added support for CMAKE_MODULE_PATH and extra CMake args (closes #4779)
Diffstat (limited to 'mesonbuild/dependencies/base.py')
-rw-r--r--mesonbuild/dependencies/base.py20
1 files changed, 15 insertions, 5 deletions
diff --git a/mesonbuild/dependencies/base.py b/mesonbuild/dependencies/base.py
index 1f74de4..586c716 100644
--- a/mesonbuild/dependencies/base.py
+++ b/mesonbuild/dependencies/base.py
@@ -27,13 +27,14 @@ import textwrap
import platform
import itertools
import ctypes
+from typing import List
from enum import Enum
from pathlib import Path, PurePath
from .. import mlog
from .. import mesonlib
from ..compilers import clib_langs
-from ..environment import BinaryTable
+from ..environment import BinaryTable, Environment
from ..mesonlib import MachineChoice, MesonException, OrderedSet, PerMachine
from ..mesonlib import Popen_safe, version_compare_many, version_compare, listify
from ..mesonlib import Version
@@ -926,7 +927,7 @@ class CMakeDependency(ExternalDependency):
def _gen_exception(self, msg):
return DependencyException('Dependency {} not found: {}'.format(self.name, msg))
- def __init__(self, name, environment, kwargs, language=None):
+ def __init__(self, name: str, environment: Environment, kwargs, language=None):
super().__init__('cmake', environment, language, kwargs)
self.name = name
self.is_libtool = False
@@ -1010,16 +1011,25 @@ class CMakeDependency(ExternalDependency):
return
modules = kwargs.get('modules', [])
+ cm_path = kwargs.get('cmake_module_path', [])
+ cm_args = kwargs.get('cmake_args', [])
if not isinstance(modules, list):
modules = [modules]
- self._detect_dep(name, modules)
+ if not isinstance(cm_path, list):
+ cm_path = [cm_path]
+ if not isinstance(cm_args, list):
+ cm_args = [cm_args]
+ cm_path = [x if os.path.isabs(x) else os.path.join(environment.get_source_dir(), x) for x in cm_path]
+ if cm_path:
+ cm_args += ['-DCMAKE_MODULE_PATH={}'.format(';'.join(cm_path))]
+ self._detect_dep(name, modules, cm_args)
def __repr__(self):
s = '<{0} {1}: {2} {3}>'
return s.format(self.__class__.__name__, self.name, self.is_found,
self.version_reqs)
- def _detect_dep(self, name, modules):
+ def _detect_dep(self, name: str, modules: List[str], args: List[str]):
# Detect a dependency with CMake using the '--find-package' mode
# and the trace output (stderr)
#
@@ -1035,7 +1045,7 @@ class CMakeDependency(ExternalDependency):
mlog.debug('Try CMake generator: {}'.format(i if len(i) > 0 else 'auto'))
# Prepare options
- cmake_opts = ['--trace-expand', '-DNAME={}'.format(name), '.']
+ cmake_opts = ['--trace-expand', '-DNAME={}'.format(name)] + args + ['.']
if len(i) > 0:
cmake_opts = ['-G', i] + cmake_opts