aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--mesonbuild/backend/backends.py2
-rw-r--r--mesonbuild/interpreter.py28
-rw-r--r--test cases/common/57 custom target chain/meson.build2
-rw-r--r--test cases/common/95 dep fallback/meson.build6
4 files changed, 27 insertions, 11 deletions
diff --git a/mesonbuild/backend/backends.py b/mesonbuild/backend/backends.py
index 120280f..b5b3b5a 100644
--- a/mesonbuild/backend/backends.py
+++ b/mesonbuild/backend/backends.py
@@ -547,7 +547,7 @@ class Backend():
tmp = i.get_filename()[0]
i = os.path.join(self.get_target_dir(i), tmp)
elif isinstance(i, mesonlib.File):
- i = os.path.join(i.subdir, i.fname)
+ i = i.rel_to_builddir(self.build_to_src)
if absolute_paths:
i = os.path.join(self.environment.get_build_dir(), i)
# FIXME: str types are blindly added and ignore the 'absolute_paths' argument
diff --git a/mesonbuild/interpreter.py b/mesonbuild/interpreter.py
index c9a81fb..5e31a87 100644
--- a/mesonbuild/interpreter.py
+++ b/mesonbuild/interpreter.py
@@ -1717,14 +1717,23 @@ class Interpreter():
dep = cached_dep
else:
# We need to actually search for this dep
+ exception = None
+ dep = None
try:
dep = dependencies.find_external_dependency(name, self.environment, kwargs)
- except dependencies.DependencyException:
+ except dependencies.DependencyException as e:
+ exception = e
+ pass
+
+ if not dep or not dep.found():
if 'fallback' in kwargs:
- dep = self.dependency_fallback(name, kwargs)
- self.coredata.deps[identifier] = dep.held_object
- return dep
- raise
+ fallback_dep = self.dependency_fallback(name, kwargs)
+ if fallback_dep:
+ return fallback_dep
+
+ if not dep:
+ raise exception
+
self.coredata.deps[identifier] = dep
return DependencyHolder(dep)
@@ -1738,9 +1747,12 @@ class Interpreter():
self.do_subproject(dirname, {})
except:
mlog.log('Also couldn\'t find a fallback subproject in',
- mlog.bold(os.path.join(self.subproject_dir, dirname)),
- 'for the dependency', mlog.bold(name))
- raise
+ mlog.bold(os.path.join(self.subproject_dir, dirname)),
+ 'for the dependency', mlog.bold(name))
+ if kwargs.get('required', True):
+ raise
+ else:
+ return None
dep = self.subprojects[dirname].get_variable_method([varname], {})
if not isinstance(dep, (DependencyHolder, InternalDependencyHolder)):
raise InterpreterException('Fallback variable is not a dependency object.')
diff --git a/test cases/common/57 custom target chain/meson.build b/test cases/common/57 custom target chain/meson.build
index 73e15ea..1af0425 100644
--- a/test cases/common/57 custom target chain/meson.build
+++ b/test cases/common/57 custom target chain/meson.build
@@ -4,7 +4,7 @@ python = find_program('python3')
comp = '@0@/@1@'.format(meson.current_source_dir(), 'my_compiler.py')
comp2 = '@0@/@1@'.format(meson.current_source_dir(), 'my_compiler2.py')
-infile = '@0@/@1@'.format(meson.current_source_dir(), 'data_source.txt')
+infile = files('data_source.txt')[0]
mytarget = custom_target('bindat',
output : 'data.dat',
diff --git a/test cases/common/95 dep fallback/meson.build b/test cases/common/95 dep fallback/meson.build
index 86fb6b2..4cf0577 100644
--- a/test cases/common/95 dep fallback/meson.build
+++ b/test cases/common/95 dep fallback/meson.build
@@ -1,6 +1,10 @@
project('dep fallback', 'c')
-bob = dependency('boblib', fallback : ['boblib', 'bob_dep'])
+bob = dependency('boblib', fallback : ['boblib', 'bob_dep'], required: false)
+if not bob.found()
+ error('Bob is actually needed')
+endif
+jimmy = dependency('jimmylib', fallback : ['jimmylib', 'jimmy_dep'], required: false)
exe = executable('bobtester', 'tester.c', dependencies : bob)
test('bobtester', exe)