diff options
author | Nirbheek Chauhan <nirbheek@centricular.com> | 2018-04-12 02:41:33 +0530 |
---|---|---|
committer | Nirbheek Chauhan <nirbheek@centricular.com> | 2018-04-16 08:39:02 +0530 |
commit | c3c9f3a8d0f445a37cf05451e6c5443f81243834 (patch) | |
tree | 92d8cc937eb652aa328007b7a1a7b0bbd0291560 | |
parent | b216f03a01ec795d8c73147f59800192d266ab87 (diff) | |
download | meson-nirbheek/fix-forcefallback-not-required-deps.tar.gz |
Don't fail on not-required not-found deps in forcefallback modenirbheek/fix-forcefallback-not-required-deps
This involves the creation of a new dummy NotFoundDependency.
-rw-r--r-- | mesonbuild/dependencies/__init__.py | 2 | ||||
-rw-r--r-- | mesonbuild/dependencies/base.py | 8 | ||||
-rw-r--r-- | mesonbuild/interpreter.py | 10 | ||||
-rw-r--r-- | test cases/unit/27 forcefallback/meson.build | 3 |
4 files changed, 16 insertions, 7 deletions
diff --git a/mesonbuild/dependencies/__init__.py b/mesonbuild/dependencies/__init__.py index 4796980c5..a07fda430 100644 --- a/mesonbuild/dependencies/__init__.py +++ b/mesonbuild/dependencies/__init__.py @@ -15,7 +15,7 @@ from .boost import BoostDependency from .base import ( # noqa: F401 Dependency, DependencyException, DependencyMethods, ExternalProgram, NonExistingExternalProgram, - ExternalDependency, ExternalLibrary, ExtraFrameworkDependency, InternalDependency, + ExternalDependency, NotFoundDependency, ExternalLibrary, ExtraFrameworkDependency, InternalDependency, PkgConfigDependency, find_external_dependency, get_dep_identifier, packages, _packages_accept_language) from .dev import GMockDependency, GTestDependency, LLVMDependency, ValgrindDependency from .misc import (MPIDependency, Python3Dependency, ThreadDependency, PcapDependency, CupsDependency, LibWmfDependency) diff --git a/mesonbuild/dependencies/base.py b/mesonbuild/dependencies/base.py index 03751027b..9a887b140 100644 --- a/mesonbuild/dependencies/base.py +++ b/mesonbuild/dependencies/base.py @@ -209,6 +209,14 @@ class ExternalDependency(Dependency): return self.compiler +class NotFoundDependency(Dependency): + def __init__(self, environment): + super().__init__('not-found', {}) + self.env = environment + self.name = 'not-found' + self.is_found = False + + class ConfigToolDependency(ExternalDependency): """Class representing dependencies found using a config tool.""" diff --git a/mesonbuild/interpreter.py b/mesonbuild/interpreter.py index 6ecd28569..5f2ed2ebe 100644 --- a/mesonbuild/interpreter.py +++ b/mesonbuild/interpreter.py @@ -23,7 +23,7 @@ from .wrap import wrap, WrapMode from . import mesonlib from .mesonlib import FileMode, Popen_safe, listify, extract_as_list, has_path_sep from .dependencies import ExternalProgram -from .dependencies import InternalDependency, Dependency, DependencyException +from .dependencies import InternalDependency, Dependency, NotFoundDependency, DependencyException from .interpreterbase import InterpreterBase from .interpreterbase import check_stringlist, noPosargs, noKwargs, stringArgs, permittedKwargs, permittedMethodKwargs from .interpreterbase import InterpreterException, InvalidArguments, InvalidCode, SubdirDoneRequest @@ -2377,7 +2377,7 @@ to directly access options of other subprojects.''') if name == '': if required: raise InvalidArguments('Dependency is both required and not-found') - return DependencyHolder(Dependency('not-found', {})) + return DependencyHolder(NotFoundDependency(self.environment)) if '<' in name or '>' in name or '=' in name: raise InvalidArguments('Characters <, > and = are forbidden in dependency names. To specify' @@ -2401,7 +2401,7 @@ to directly access options of other subprojects.''') # We need to actually search for this dep exception = None - dep = None + dep = NotFoundDependency(self.environment) # Search for it outside the project if self.coredata.wrap_mode != WrapMode.forcefallback or 'fallback' not in kwargs: @@ -2413,7 +2413,7 @@ to directly access options of other subprojects.''') exception = DependencyException("fallback for %s not found" % name) # Search inside the projects list - if not dep or not dep.found(): + if not dep.found(): if 'fallback' in kwargs: fallback_dep = self.dependency_fallback(name, kwargs) if fallback_dep: @@ -2421,7 +2421,7 @@ to directly access options of other subprojects.''') # cannot cache them. They must always be evaluated else # we won't actually read all the build files. return fallback_dep - if not dep: + if required: assert(exception is not None) raise exception diff --git a/test cases/unit/27 forcefallback/meson.build b/test cases/unit/27 forcefallback/meson.build index e6a90eae5..d5c06c342 100644 --- a/test cases/unit/27 forcefallback/meson.build +++ b/test cases/unit/27 forcefallback/meson.build @@ -2,7 +2,8 @@ project('mainproj', 'c', default_options : ['wrap_mode=forcefallback']) zlib_dep = dependency('zlib', fallback: ['notzlib', 'zlib_dep']) +notfound_dep = dependency('cannotabletofind', fallback: ['definitelynotfound', 'some_var'], required : false) -test_not_zlib = executable('test_not_zlib', ['test_not_zlib.c'], dependencies: [zlib_dep]) +test_not_zlib = executable('test_not_zlib', ['test_not_zlib.c'], dependencies: [zlib_dep, notfound_dep]) test('test_not_zlib', test_not_zlib) |