diff options
author | Daniel Mensinger <daniel@mensinger-ka.de> | 2020-06-05 13:42:39 +0200 |
---|---|---|
committer | Nirbheek Chauhan <nirbheek.chauhan@gmail.com> | 2020-06-12 15:50:05 +0000 |
commit | 0332d7e35006afa78afb5e4b4f4d2ecf9a7ded27 (patch) | |
tree | 61541d66aea8dccc0592fefa55872e893c05f57a /mesonbuild | |
parent | 5f8d89b7077a2141c8251c4162c41f6e01847ebd (diff) | |
download | meson-0332d7e35006afa78afb5e4b4f4d2ecf9a7ded27.zip meson-0332d7e35006afa78afb5e4b4f4d2ecf9a7ded27.tar.gz meson-0332d7e35006afa78afb5e4b4f4d2ecf9a7ded27.tar.bz2 |
cmake: Subprojects support CMAKE_PREFIX_PATH (fixes #7249)
Diffstat (limited to 'mesonbuild')
-rw-r--r-- | mesonbuild/cmake/executor.py | 22 | ||||
-rw-r--r-- | mesonbuild/dependencies/base.py | 16 |
2 files changed, 23 insertions, 15 deletions
diff --git a/mesonbuild/cmake/executor.py b/mesonbuild/cmake/executor.py index adc028c..5ca8196 100644 --- a/mesonbuild/cmake/executor.py +++ b/mesonbuild/cmake/executor.py @@ -28,6 +28,7 @@ import textwrap from .. import mlog, mesonlib from ..mesonlib import PerMachine, Popen_safe, version_compare, MachineChoice from ..environment import Environment +from ..envconfig import get_env_var if T.TYPE_CHECKING: from ..dependencies.base import ExternalProgram @@ -48,6 +49,8 @@ class CMakeExecutor: self.cmakebin, self.cmakevers = self.find_cmake_binary(self.environment, silent=silent) self.always_capture_stderr = True self.print_cmout = False + self.prefix_paths = [] # type: T.List[str] + self.extra_cmake_args = [] # type: T.List[str] if self.cmakebin is False: self.cmakebin = None return @@ -60,6 +63,21 @@ class CMakeExecutor: self.cmakebin = None return + self.prefix_paths = self.environment.coredata.builtins_per_machine[self.for_machine]['cmake_prefix_path'].value + env_pref_path = get_env_var( + self.for_machine, + self.environment.is_cross_build(), + 'CMAKE_PREFIX_PATH') + if env_pref_path is not None: + env_pref_path = env_pref_path.split(os.pathsep) + env_pref_path = [x for x in env_pref_path if x] # Filter out empty strings + if not self.prefix_paths: + self.prefix_paths = [] + self.prefix_paths += env_pref_path + + if self.prefix_paths: + self.extra_cmake_args += ['-DCMAKE_PREFIX_PATH={}'.format(';'.join(self.prefix_paths))] + def find_cmake_binary(self, environment: Environment, silent: bool = False) -> T.Tuple['ExternalProgram', str]: from ..dependencies.base import ExternalProgram @@ -226,6 +244,7 @@ class CMakeExecutor: if env is None: env = os.environ + args = args + self.extra_cmake_args if disable_cache: return self._call_impl(args, build_dir, env) @@ -362,5 +381,8 @@ class CMakeExecutor: def get_command(self) -> T.List[str]: return self.cmakebin.get_command() + def get_cmake_prefix_paths(self) -> T.List[str]: + return self.prefix_paths + def machine_choice(self) -> MachineChoice: return self.for_machine diff --git a/mesonbuild/dependencies/base.py b/mesonbuild/dependencies/base.py index 2e5a5ae..956ca39 100644 --- a/mesonbuild/dependencies/base.py +++ b/mesonbuild/dependencies/base.py @@ -1085,21 +1085,7 @@ class CMakeDependency(ExternalDependency): if cm_path: cm_args.append('-DCMAKE_MODULE_PATH=' + ';'.join(cm_path)) - pref_path = self.env.coredata.builtins_per_machine[self.for_machine]['cmake_prefix_path'].value - env_pref_path = get_env_var( - self.for_machine, - self.env.is_cross_build(), - 'CMAKE_PREFIX_PATH') - if env_pref_path is not None: - env_pref_path = env_pref_path.split(os.pathsep) - env_pref_path = [x for x in env_pref_path if x] # Filter out empty strings - if not pref_path: - pref_path = [] - pref_path += env_pref_path - if pref_path: - cm_args.append('-DCMAKE_PREFIX_PATH={}'.format(';'.join(pref_path))) - - if not self._preliminary_find_check(name, cm_path, pref_path, environment.machines[self.for_machine]): + if not self._preliminary_find_check(name, cm_path, self.cmakebin.get_cmake_prefix_paths(), environment.machines[self.for_machine]): mlog.debug('Preliminary CMake check failed. Aborting.') return self._detect_dep(name, modules, components, cm_args) |