aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorXavier Claessens <xavier.claessens@collabora.com>2021-03-12 10:03:24 -0500
committerDaniel Mensinger <daniel@mensinger-ka.de>2021-03-12 22:08:33 +0100
commit1f3bf0f1357a20d9975a2de54e0fd097fc52424f (patch)
tree1e072df4ee539a111d355dfe1992420d904f3d29
parent88013815633759fd499bde9e0173aaf9024604b1 (diff)
downloadmeson-1f3bf0f1357a20d9975a2de54e0fd097fc52424f.zip
meson-1f3bf0f1357a20d9975a2de54e0fd097fc52424f.tar.gz
meson-1f3bf0f1357a20d9975a2de54e0fd097fc52424f.tar.bz2
interpreter: Cache found dependency before converting for include_type
Fixes: #8516.
-rw-r--r--mesonbuild/interpreter.py14
-rw-r--r--test cases/common/239 dependency include_type inconsistency/bar/meson.build5
-rw-r--r--test cases/common/239 dependency include_type inconsistency/meson.build5
-rw-r--r--test cases/common/239 dependency include_type inconsistency/subprojects/baz.wrap3
-rw-r--r--test cases/common/239 dependency include_type inconsistency/subprojects/baz/meson.build3
-rw-r--r--test cases/common/239 dependency include_type inconsistency/subprojects/foo.wrap3
-rw-r--r--test cases/common/239 dependency include_type inconsistency/subprojects/foo/meson.build9
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)