diff options
author | L. E. Segovia <amy@amyspark.me> | 2025-08-17 11:21:27 -0300 |
---|---|---|
committer | Eli Schwartz <eschwartz93@gmail.com> | 2025-08-17 13:24:14 -0400 |
commit | a3437c4c81a96b41576f810c51c9b0b5ce5631c2 (patch) | |
tree | df52f7ebfcc6ffb7a5f8481cdd90942d13cf479f | |
parent | 97c4e9dea6ccc7772651533dc2afaf0fa43aca84 (diff) | |
download | meson-a3437c4c81a96b41576f810c51c9b0b5ce5631c2.zip meson-a3437c4c81a96b41576f810c51c9b0b5ce5631c2.tar.gz meson-a3437c4c81a96b41576f810c51c9b0b5ce5631c2.tar.bz2 |
gnome: Restore dependency of g-ir-scanner on gobject-introspection
g-ir-scanner is a pair of Python script + pymod, and the latter must be
available at any time the script is executed. The changes in the below
commit removed the ordering guarantee, breaking GStreamer introspection
building on Windows when using the monorepo.
This reverts commit ab57be75148c2faac67dba7877167772410ca5ef.
Fixes #14908
-rw-r--r-- | mesonbuild/modules/gnome.py | 22 |
1 files changed, 12 insertions, 10 deletions
diff --git a/mesonbuild/modules/gnome.py b/mesonbuild/modules/gnome.py index 53919bc..9a45bb4 100644 --- a/mesonbuild/modules/gnome.py +++ b/mesonbuild/modules/gnome.py @@ -254,6 +254,7 @@ class GnomeModule(ExtensionModule): def __init__(self, interpreter: 'Interpreter') -> None: super().__init__(interpreter) + self.gir_dep: T.Optional[Dependency] = None self.giscanner: T.Optional[ToolType] = None self.gicompiler: T.Optional[ToolType] = None self.install_glib_compile_schemas = False @@ -787,18 +788,20 @@ class GnomeModule(ExtensionModule): if self.devenv is not None: b.devenv.append(self.devenv) - def _get_gi(self, state: 'ModuleState') -> T.Tuple[ToolType, ToolType]: - if not self.giscanner: - self.giscanner = self._find_tool(state, 'g-ir-scanner', for_machine=MachineChoice.BUILD) - self.gicompiler = self._find_tool(state, 'g-ir-compiler', for_machine=MachineChoice.HOST) - return self.giscanner, self.gicompiler + def _get_gir_dep(self, state: 'ModuleState') -> T.Tuple[Dependency, T.Union[Executable, 'ExternalProgram', 'OverrideProgram'], + T.Union[Executable, 'ExternalProgram', 'OverrideProgram']]: + if not self.gir_dep: + self.gir_dep = state.dependency('gobject-introspection-1.0') + self.giscanner = self._find_tool(state, 'g-ir-scanner') + self.gicompiler = self._find_tool(state, 'g-ir-compiler') + return self.gir_dep, self.giscanner, self.gicompiler def _giscanner_version_compare(self, state: 'ModuleState', cmp: str) -> bool: # Support for --version was introduced in g-i 1.58, but Ubuntu # Bionic shipped 1.56.1. As all our version checks are greater # than 1.58, we can just return False if get_version fails. try: - giscanner, _ = self._get_gi(state) + giscanner, _, _ = self._get_gir_dep(state) return mesonlib.version_compare(giscanner.get_version(), cmp) except MesonException: return False @@ -994,8 +997,6 @@ class GnomeModule(ExtensionModule): run_env.set('CFLAGS', [quote_arg(x) for x in env_flags], ' ') run_env.merge(kwargs['env']) - giscanner, _ = self._get_gi(state) - # response file supported? rspable = self._giscanner_version_compare(state, '>= 1.85.0') @@ -1149,7 +1150,7 @@ class GnomeModule(ExtensionModule): if len(girtargets) > 1 and any(isinstance(el, Executable) for el in girtargets): raise MesonException('generate_gir only accepts a single argument when one of the arguments is an executable') - giscanner, gicompiler = self._get_gi(state) + gir_dep, giscanner, gicompiler = self._get_gir_dep(state) ns = kwargs['namespace'] nsversion = kwargs['nsversion'] @@ -1160,13 +1161,14 @@ class GnomeModule(ExtensionModule): builddir = os.path.join(state.environment.get_build_dir(), state.subdir) depends: T.List[T.Union['FileOrString', 'build.GeneratedTypes', build.BuildTarget, build.StructuredSources]] = [] + depends.extend(gir_dep.sources) depends.extend(girtargets) langs_compilers = self._get_girtargets_langs_compilers(girtargets) cflags, internal_ldflags, external_ldflags = self._get_langs_compilers_flags(state, langs_compilers) deps = self._get_gir_targets_deps(girtargets) deps += kwargs['dependencies'] - deps += [state.dependency('glib-2.0'), state.dependency('gobject-2.0'), state.dependency('gmodule-2.0'), state.dependency('gio-2.0')] + deps += [gir_dep] typelib_includes, depends = self._gather_typelib_includes_and_update_depends(state, deps, depends) # ldflags will be misinterpreted by gir scanner (showing # spurious dependencies) but building GStreamer fails if they |