When building gobject-introspection we want the *native* binaries (as they need
to be executed) but *host* gobject-introspection libraries, as otherwise the
native pkg-config can be used and the build will try to link native and host
binaries together.

Upstream-Status: Pending
Signed-off-by: Ross Burton <ross.burton@arm.com>

diff --git a/mesonbuild/modules/gnome.py b/mesonbuild/modules/gnome.py
index f9660838e..2eefc3fc7 100644
--- a/mesonbuild/modules/gnome.py
+++ b/mesonbuild/modules/gnome.py
@@ -84,8 +84,8 @@ class GnomeModule(ExtensionModule):
                      mlog.bold('https://github.com/mesonbuild/meson/issues/1387'),
                      once=True)
 
-    def _get_native_dep(self, state, depname, required=True):
-        kwargs = {'native': True, 'required': required}
+    def _get_dep(self, state, depname, native=False, required=True):
+        kwargs = {'native': native, 'required': required}
         holder = self.interpreter.func_dependency(state.current_node, [depname], kwargs)
         return holder.held_object
 
@@ -101,7 +101,7 @@ class GnomeModule(ExtensionModule):
             return ExternalProgram.from_entry(name, prog)
 
         # Check if pkgconfig has a variable
-        dep = self._get_native_dep(state, depname, required=False)
+        dep = self._get_dep(state, depname, native=True, required=False)
         if dep.found() and dep.type_name == 'pkgconfig':
             value = dep.get_pkgconfig_variable(varname, {})
             if value:
@@ -481,7 +481,7 @@ class GnomeModule(ExtensionModule):
 
     def _get_gir_dep(self, state):
         if not self.gir_dep:
-            self.gir_dep = self._get_native_dep(state, 'gobject-introspection-1.0')
+            self.gir_dep = self._get_dep(state, 'gobject-introspection-1.0')
             self.giscanner = self._get_native_binary(state, 'g-ir-scanner', 'gobject-introspection-1.0', 'g_ir_scanner')
             self.gicompiler = self._get_native_binary(state, 'g-ir-compiler', 'gobject-introspection-1.0', 'g_ir_compiler')
         return self.gir_dep, self.giscanner, self.gicompiler
