cmake: Use shared find_external_program instead of open coding

This commit is contained in:
Dylan Baker 2020-06-08 12:00:19 -07:00
parent 85be45ea11
commit 01e0cc6735
1 changed files with 5 additions and 22 deletions

View File

@ -79,25 +79,7 @@ class CMakeExecutor:
self.extra_cmake_args += ['-DCMAKE_PREFIX_PATH={}'.format(';'.join(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]: def find_cmake_binary(self, environment: Environment, silent: bool = False) -> T.Tuple['ExternalProgram', str]:
from ..dependencies.base import ExternalProgram from ..dependencies.base import find_external_program
# Create an iterator of options
def search():
# Lookup in cross or machine file.
potential_cmakepath = environment.lookup_binary_entry(self.for_machine, 'cmake')
if potential_cmakepath is not None:
mlog.debug('CMake binary for %s specified from cross file, native file, or env var as %s.', self.for_machine, potential_cmakepath)
yield ExternalProgram.from_entry('cmake', potential_cmakepath)
# We never fallback if the user-specified option is no good, so
# stop returning options.
return
mlog.debug('CMake binary missing from cross or native file, or env var undefined.')
# Fallback on hard-coded defaults.
# TODO prefix this for the cross case instead of ignoring thing.
if environment.machines.matches_build_machine(self.for_machine):
for potential_cmakepath in environment.default_cmake:
mlog.debug('Trying a default CMake fallback at', potential_cmakepath)
yield ExternalProgram(potential_cmakepath, silent=True)
# Only search for CMake the first time and store the result in the class # Only search for CMake the first time and store the result in the class
# definition # definition
@ -107,10 +89,11 @@ class CMakeExecutor:
mlog.debug('CMake binary for %s is cached.' % self.for_machine) mlog.debug('CMake binary for %s is cached.' % self.for_machine)
else: else:
assert CMakeExecutor.class_cmakebin[self.for_machine] is None assert CMakeExecutor.class_cmakebin[self.for_machine] is None
mlog.debug('CMake binary for %s is not cached' % self.for_machine) mlog.debug('CMake binary for %s is not cached' % self.for_machine)
for potential_cmakebin in search(): for potential_cmakebin in find_external_program(
mlog.debug('Trying CMake binary {} for machine {} at {}' environment, self.for_machine, 'cmake', 'CMake',
.format(potential_cmakebin.name, self.for_machine, potential_cmakebin.command)) environment.default_cmake):
version_if_ok = self.check_cmake(potential_cmakebin) version_if_ok = self.check_cmake(potential_cmakebin)
if not version_if_ok: if not version_if_ok:
continue continue