diff options
-rw-r--r-- | docs/markdown/Reference-manual.md | 7 | ||||
-rw-r--r-- | mesonbuild/dependencies/dev.py | 2 | ||||
-rw-r--r-- | mesonbuild/interpreter.py | 9 | ||||
-rw-r--r-- | test cases/common/50 subproject subproject/meson.build | 6 | ||||
-rw-r--r-- | test cases/common/50 subproject subproject/subprojects/c/meson.build | 3 |
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) |