aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--docs/markdown/Reference-manual.md7
-rw-r--r--mesonbuild/dependencies/dev.py2
-rw-r--r--mesonbuild/interpreter.py9
-rw-r--r--test cases/common/50 subproject subproject/meson.build6
-rw-r--r--test cases/common/50 subproject subproject/subprojects/c/meson.build3
5 files changed, 22 insertions, 5 deletions
diff --git a/docs/markdown/Reference-manual.md b/docs/markdown/Reference-manual.md
index 9762c5d..e59c153 100644
--- a/docs/markdown/Reference-manual.md
+++ b/docs/markdown/Reference-manual.md
@@ -361,8 +361,11 @@ otherwise. This function supports the following keyword arguments:
dependency is not found in the system. The value is an array
`['subproj_name', 'subproj_dep']` where the first value is the name
of the subproject and the second is the variable name in that
- subproject that contains the value of
- [`declare_dependency`](#declare_dependency).
+ subproject that contains a dependency object such as the return
+ value of [`declare_dependency`](#declare_dependency) or
+ [`dependency()`](#dependency), etc. Note that this means the
+ fallback dependency may be a not-found dependency, in which
+ case the value of the `required:` kwarg will be obeyed.
- `language` *(added 0.42.0)* defines what language-specific
dependency to find if it's available for multiple languages.
- `method` defines the way the dependency is detected, the default is
diff --git a/mesonbuild/dependencies/dev.py b/mesonbuild/dependencies/dev.py
index f90422e..bcaf2e8 100644
--- a/mesonbuild/dependencies/dev.py
+++ b/mesonbuild/dependencies/dev.py
@@ -288,7 +288,7 @@ class LLVMDependency(ConfigToolDependency):
libdir = self.get_config_value(['--libdir'], 'link_args')[0]
expected_name = 'libLLVM-{}'.format(self.version)
- re_name = re.compile(r'{}.(so|dll|dylib)'.format(expected_name))
+ re_name = re.compile(r'{}.(so|dll|dylib)$'.format(expected_name))
for file_ in os.listdir(libdir):
if re_name.match(file_):
diff --git a/mesonbuild/interpreter.py b/mesonbuild/interpreter.py
index 9bd21e3..98fab7c 100644
--- a/mesonbuild/interpreter.py
+++ b/mesonbuild/interpreter.py
@@ -3069,7 +3069,8 @@ root and issuing %s.
msg.append(traceback.format_exc())
mlog.log(*msg)
return None
- dep = self.get_subproject_dep(name, dirname, varname, kwargs.get('required', True))
+ required = kwargs.get('required', True)
+ dep = self.get_subproject_dep(name, dirname, varname, required)
if not dep:
return None
subproj_path = os.path.join(self.subproject_dir, dirname)
@@ -3077,6 +3078,12 @@ root and issuing %s.
if 'version' in kwargs:
wanted = kwargs['version']
found = dep.version_method([], {})
+ # Don't do a version check if the dependency is not found and not required
+ if not dep.found_method([], {}) and not required:
+ subproj_path = os.path.join(self.subproject_dir, dirname)
+ mlog.log('Dependency', mlog.bold(display_name), 'from subproject',
+ mlog.bold(subproj_path), 'found:', mlog.red('NO'))
+ return dep
if not self.check_subproject_version(wanted, found):
mlog.log('Subproject', mlog.bold(subproj_path), 'dependency',
mlog.bold(display_name), 'version is', mlog.bold(found),
diff --git a/test cases/common/50 subproject subproject/meson.build b/test cases/common/50 subproject subproject/meson.build
index f7df361..d8735a1 100644
--- a/test cases/common/50 subproject subproject/meson.build
+++ b/test cases/common/50 subproject subproject/meson.build
@@ -3,5 +3,9 @@ project('sub sub', 'c')
a = subproject('a')
lib = a.get_variable('l')
+dependency('not-found-dep', required : false,
+ version : '>=1',
+ fallback : ['c', 'notfound_dep'])
+
exe = executable('prog', 'prog.c', link_with : lib)
-test('basic', exe) \ No newline at end of file
+test('basic', exe)
diff --git a/test cases/common/50 subproject subproject/subprojects/c/meson.build b/test cases/common/50 subproject subproject/subprojects/c/meson.build
new file mode 100644
index 0000000..97a5be1
--- /dev/null
+++ b/test cases/common/50 subproject subproject/subprojects/c/meson.build
@@ -0,0 +1,3 @@
+project('not-found-dep-subproj', 'c', version : '1.0')
+
+notfound_dep = dependency('', required : false)