summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorNirbheek Chauhan <nirbheek@centricular.com>2018-04-12 02:41:33 +0530
committerNirbheek Chauhan <nirbheek@centricular.com>2018-04-16 08:39:02 +0530
commitc3c9f3a8d0f445a37cf05451e6c5443f81243834 (patch)
tree92d8cc937eb652aa328007b7a1a7b0bbd0291560
parentb216f03a01ec795d8c73147f59800192d266ab87 (diff)
downloadmeson-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__.py2
-rw-r--r--mesonbuild/dependencies/base.py8
-rw-r--r--mesonbuild/interpreter.py10
-rw-r--r--test cases/unit/27 forcefallback/meson.build3
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)