aboutsummaryrefslogtreecommitdiff
path: root/mesonbuild
diff options
context:
space:
mode:
Diffstat (limited to 'mesonbuild')
-rw-r--r--mesonbuild/dependencies/base.py40
-rw-r--r--mesonbuild/dependencies/ui.py28
2 files changed, 32 insertions, 36 deletions
diff --git a/mesonbuild/dependencies/base.py b/mesonbuild/dependencies/base.py
index a0c5ad4..d014415 100644
--- a/mesonbuild/dependencies/base.py
+++ b/mesonbuild/dependencies/base.py
@@ -349,6 +349,25 @@ class ExternalDependency(Dependency, HasNativeKwarg):
raise DependencyException(m.format(self.name, not_found, self.version))
return
+ # Create an iterator of options
+ def search_tool(self, name, display_name, default_names):
+ # Lookup in cross or machine file.
+ potential_path = self.env.binaries[self.for_machine].lookup_entry(name)
+ if potential_path is not None:
+ mlog.debug('{} binary for {} specified from cross file, native file, '
+ 'or env var as {}'.format(display_name, self.for_machine, potential_path))
+ yield ExternalProgram.from_entry(name, potential_path)
+ # We never fallback if the user-specified option is no good, so
+ # stop returning options.
+ return
+ mlog.debug('{} binary missing from cross or native file, or env var undefined.'.format(display_name))
+ # Fallback on hard-coded defaults.
+ # TODO prefix this for the cross case instead of ignoring thing.
+ if self.env.machines.matches_build_machine(self.for_machine):
+ for potential_path in default_names:
+ mlog.debug('Trying a default {} fallback at'.format(display_name), potential_path)
+ yield ExternalProgram(potential_path, silent=True)
+
class NotFoundDependency(Dependency):
def __init__(self, environment):
@@ -535,25 +554,6 @@ class PkgConfigDependency(ExternalDependency):
# stored in the pickled coredata and recovered.
self.pkgbin = None
- # Create an iterator of options
- def search():
- # Lookup in cross or machine file.
- potential_pkgpath = environment.binaries[self.for_machine].lookup_entry('pkgconfig')
- if potential_pkgpath is not None:
- mlog.debug('Pkg-config binary for {} specified from cross file, native file, '
- 'or env var as {}'.format(self.for_machine, potential_pkgpath))
- yield ExternalProgram.from_entry('pkgconfig', potential_pkgpath)
- # We never fallback if the user-specified option is no good, so
- # stop returning options.
- return
- mlog.debug('Pkg-config 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_pkgpath in environment.default_pkgconfig:
- mlog.debug('Trying a default pkg-config fallback at', potential_pkgpath)
- yield ExternalProgram(potential_pkgpath, silent=True)
-
# Only search for pkg-config for each machine the first time and store
# the result in the class definition
if PkgConfigDependency.class_pkgbin[self.for_machine] is False:
@@ -563,7 +563,7 @@ class PkgConfigDependency(ExternalDependency):
else:
assert PkgConfigDependency.class_pkgbin[self.for_machine] is None
mlog.debug('Pkg-config binary for %s is not cached.' % self.for_machine)
- for potential_pkgbin in search():
+ for potential_pkgbin in self.search_tool('pkgconfig', 'Pkg-config', environment.default_pkgconfig):
mlog.debug('Trying pkg-config binary {} for machine {} at {}'
.format(potential_pkgbin.name, self.for_machine, potential_pkgbin.command))
version_if_ok = self.check_pkgconfig(potential_pkgbin)
diff --git a/mesonbuild/dependencies/ui.py b/mesonbuild/dependencies/ui.py
index b633f25..5433150 100644
--- a/mesonbuild/dependencies/ui.py
+++ b/mesonbuild/dependencies/ui.py
@@ -28,7 +28,7 @@ from ..mesonlib import (
from ..environment import detect_cpu_family
from .base import DependencyException, DependencyMethods
-from .base import ExternalDependency, ExternalProgram, NonExistingExternalProgram
+from .base import ExternalDependency, NonExistingExternalProgram
from .base import ExtraFrameworkDependency, PkgConfigDependency
from .base import ConfigToolDependency, DependencyFactory
@@ -321,28 +321,24 @@ class QtBaseDependency(ExternalDependency):
if prefix:
self.bindir = os.path.join(prefix, 'bin')
- def _qmake_detect(self, mods, kwargs):
+ def search_qmake(self):
for qmake in ('qmake-' + self.name, 'qmake'):
- self.qmake = ExternalProgram.from_bin_list(
- self.env.binaries.host, qmake)
- if not self.qmake.found():
- # Even when cross-compiling, if a cross-info qmake is not
- # specified, we fallback to using the qmake in PATH because
- # that's what we used to do
- self.qmake = ExternalProgram.from_bin_list(
- self.env.binaries.build, qmake)
- if not self.qmake.found():
- self.qmake = ExternalProgram(qmake, silent=True)
- if not self.qmake.found():
+ for potential_qmake in self.search_tool(qmake, 'QMake', [qmake]):
+ yield potential_qmake
+
+ def _qmake_detect(self, mods, kwargs):
+ for qmake in self.search_qmake():
+ if not qmake.found():
continue
# Check that the qmake is for qt5
- pc, stdo = Popen_safe(self.qmake.get_command() + ['-v'])[0:2]
+ pc, stdo = Popen_safe(qmake.get_command() + ['-v'])[0:2]
if pc.returncode != 0:
continue
if not 'Qt version ' + self.qtver in stdo:
mlog.log('QMake is not for ' + self.qtname)
continue
# Found qmake for Qt5!
+ self.qmake = qmake
break
else:
# Didn't find qmake :(
@@ -364,7 +360,7 @@ class QtBaseDependency(ExternalDependency):
if self.env.machines.host.is_darwin() and not any(s in xspec for s in ['ios', 'tvos']):
mlog.debug("Building for macOS, looking for framework")
self._framework_detect(qvars, mods, kwargs)
- return qmake
+ return self.qmake.name
incdir = qvars['QT_INSTALL_HEADERS']
self.compile_args.append('-I' + incdir)
libdir = qvars['QT_INSTALL_LIBS']
@@ -405,7 +401,7 @@ class QtBaseDependency(ExternalDependency):
if not self._link_with_qtmain(is_debug, libdir):
self.is_found = False
- return qmake
+ return self.qmake.name
def _get_modules_lib_suffix(self, is_debug):
suffix = ''