diff options
author | Xavier Claessens <xavier.claessens@collabora.com> | 2021-03-12 10:03:24 -0500 |
---|---|---|
committer | Daniel Mensinger <daniel@mensinger-ka.de> | 2021-03-12 22:08:33 +0100 |
commit | 1f3bf0f1357a20d9975a2de54e0fd097fc52424f (patch) | |
tree | 1e072df4ee539a111d355dfe1992420d904f3d29 | |
parent | 88013815633759fd499bde9e0173aaf9024604b1 (diff) | |
download | meson-1f3bf0f1357a20d9975a2de54e0fd097fc52424f.zip meson-1f3bf0f1357a20d9975a2de54e0fd097fc52424f.tar.gz meson-1f3bf0f1357a20d9975a2de54e0fd097fc52424f.tar.bz2 |
interpreter: Cache found dependency before converting for include_type
Fixes: #8516.
7 files changed, 35 insertions, 7 deletions
diff --git a/mesonbuild/interpreter.py b/mesonbuild/interpreter.py index 68744ef..f169d59 100644 --- a/mesonbuild/interpreter.py +++ b/mesonbuild/interpreter.py @@ -3704,13 +3704,6 @@ external dependencies (including libraries) must go to "dependencies".''') if not d.found() and not_found_message: self.message_impl([not_found_message]) self.message_impl([not_found_message]) - # Ensure the correct include type - if 'include_type' in kwargs: - wanted = kwargs['include_type'] - actual = d.include_type_method([], {}) - if wanted != actual: - mlog.debug(f'Current include type of {name} is {actual}. Converting to requested {wanted}') - d = d.as_system_method([wanted], {}) # Override this dependency to have consistent results in subsequent # dependency lookups. if name and d.found(): @@ -3719,6 +3712,13 @@ external dependencies (including libraries) must go to "dependencies".''') if identifier not in self.build.dependency_overrides[for_machine]: self.build.dependency_overrides[for_machine][identifier] = \ build.DependencyOverride(d.held_object, node, explicit=False) + # Ensure the correct include type + if 'include_type' in kwargs: + wanted = kwargs['include_type'] + actual = d.include_type_method([], {}) + if wanted != actual: + mlog.debug(f'Current include type of {name} is {actual}. Converting to requested {wanted}') + d = d.as_system_method([wanted], {}) return d def dependency_impl(self, name, display_name, kwargs, force_fallback=False): diff --git a/test cases/common/239 dependency include_type inconsistency/bar/meson.build b/test cases/common/239 dependency include_type inconsistency/bar/meson.build new file mode 100644 index 0000000..6e1218b --- /dev/null +++ b/test cases/common/239 dependency include_type inconsistency/bar/meson.build @@ -0,0 +1,5 @@ +baz_dep = dependency('baz', + fallback: ['baz', 'baz_dep'], + include_type: 'system', + method: 'pkg-config', # if we comment this out or change to 'auto' the build is successful + required: false) diff --git a/test cases/common/239 dependency include_type inconsistency/meson.build b/test cases/common/239 dependency include_type inconsistency/meson.build new file mode 100644 index 0000000..7f28e25 --- /dev/null +++ b/test cases/common/239 dependency include_type inconsistency/meson.build @@ -0,0 +1,5 @@ +project('test', 'c', 'cpp') + +foo_dep = subproject('foo').get_variable('foo_dep') + +subdir('bar') diff --git a/test cases/common/239 dependency include_type inconsistency/subprojects/baz.wrap b/test cases/common/239 dependency include_type inconsistency/subprojects/baz.wrap new file mode 100644 index 0000000..c727794 --- /dev/null +++ b/test cases/common/239 dependency include_type inconsistency/subprojects/baz.wrap @@ -0,0 +1,3 @@ +[wrap-file] +source_url = http://host.invalid/baz.tar.gz +source_filename = baz.tar.gz diff --git a/test cases/common/239 dependency include_type inconsistency/subprojects/baz/meson.build b/test cases/common/239 dependency include_type inconsistency/subprojects/baz/meson.build new file mode 100644 index 0000000..a6a3775 --- /dev/null +++ b/test cases/common/239 dependency include_type inconsistency/subprojects/baz/meson.build @@ -0,0 +1,3 @@ +project('baz', 'cpp') + +baz_dep = declare_dependency() diff --git a/test cases/common/239 dependency include_type inconsistency/subprojects/foo.wrap b/test cases/common/239 dependency include_type inconsistency/subprojects/foo.wrap new file mode 100644 index 0000000..dcc434b --- /dev/null +++ b/test cases/common/239 dependency include_type inconsistency/subprojects/foo.wrap @@ -0,0 +1,3 @@ +[wrap-file] +source_url = http://host.invalid/foo.tar.gz +source_filename = foo.tar.gz diff --git a/test cases/common/239 dependency include_type inconsistency/subprojects/foo/meson.build b/test cases/common/239 dependency include_type inconsistency/subprojects/foo/meson.build new file mode 100644 index 0000000..51d9503 --- /dev/null +++ b/test cases/common/239 dependency include_type inconsistency/subprojects/foo/meson.build @@ -0,0 +1,9 @@ +project('foo', 'c', 'cpp') + +baz_dep = dependency('baz', + fallback: ['baz', 'baz_dep'], + include_type: 'system', + method: 'pkg-config', + required: false) + +foo_dep = declare_dependency(dependencies: baz_dep) |