Skip to content

Commit a3437c4

Browse files
amysparkeli-schwartz
authored andcommitted
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 ab57be7. Fixes #14908
1 parent 97c4e9d commit a3437c4

File tree

1 file changed

+12
-10
lines changed

1 file changed

+12
-10
lines changed

mesonbuild/modules/gnome.py

Lines changed: 12 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -254,6 +254,7 @@ class GnomeModule(ExtensionModule):
254254

255255
def __init__(self, interpreter: 'Interpreter') -> None:
256256
super().__init__(interpreter)
257+
self.gir_dep: T.Optional[Dependency] = None
257258
self.giscanner: T.Optional[ToolType] = None
258259
self.gicompiler: T.Optional[ToolType] = None
259260
self.install_glib_compile_schemas = False
@@ -787,18 +788,20 @@ def postconf_hook(self, b: build.Build) -> None:
787788
if self.devenv is not None:
788789
b.devenv.append(self.devenv)
789790

790-
def _get_gi(self, state: 'ModuleState') -> T.Tuple[ToolType, ToolType]:
791-
if not self.giscanner:
792-
self.giscanner = self._find_tool(state, 'g-ir-scanner', for_machine=MachineChoice.BUILD)
793-
self.gicompiler = self._find_tool(state, 'g-ir-compiler', for_machine=MachineChoice.HOST)
794-
return self.giscanner, self.gicompiler
791+
def _get_gir_dep(self, state: 'ModuleState') -> T.Tuple[Dependency, T.Union[Executable, 'ExternalProgram', 'OverrideProgram'],
792+
T.Union[Executable, 'ExternalProgram', 'OverrideProgram']]:
793+
if not self.gir_dep:
794+
self.gir_dep = state.dependency('gobject-introspection-1.0')
795+
self.giscanner = self._find_tool(state, 'g-ir-scanner')
796+
self.gicompiler = self._find_tool(state, 'g-ir-compiler')
797+
return self.gir_dep, self.giscanner, self.gicompiler
795798

796799
def _giscanner_version_compare(self, state: 'ModuleState', cmp: str) -> bool:
797800
# Support for --version was introduced in g-i 1.58, but Ubuntu
798801
# Bionic shipped 1.56.1. As all our version checks are greater
799802
# than 1.58, we can just return False if get_version fails.
800803
try:
801-
giscanner, _ = self._get_gi(state)
804+
giscanner, _, _ = self._get_gir_dep(state)
802805
return mesonlib.version_compare(giscanner.get_version(), cmp)
803806
except MesonException:
804807
return False
@@ -994,8 +997,6 @@ def _make_gir_target(
994997
run_env.set('CFLAGS', [quote_arg(x) for x in env_flags], ' ')
995998
run_env.merge(kwargs['env'])
996999

997-
giscanner, _ = self._get_gi(state)
998-
9991000
# response file supported?
10001001
rspable = self._giscanner_version_compare(state, '>= 1.85.0')
10011002

@@ -1149,7 +1150,7 @@ def generate_gir(self, state: 'ModuleState', args: T.Tuple[T.List[T.Union[Execut
11491150
if len(girtargets) > 1 and any(isinstance(el, Executable) for el in girtargets):
11501151
raise MesonException('generate_gir only accepts a single argument when one of the arguments is an executable')
11511152

1152-
giscanner, gicompiler = self._get_gi(state)
1153+
gir_dep, giscanner, gicompiler = self._get_gir_dep(state)
11531154

11541155
ns = kwargs['namespace']
11551156
nsversion = kwargs['nsversion']
@@ -1160,13 +1161,14 @@ def generate_gir(self, state: 'ModuleState', args: T.Tuple[T.List[T.Union[Execut
11601161
builddir = os.path.join(state.environment.get_build_dir(), state.subdir)
11611162

11621163
depends: T.List[T.Union['FileOrString', 'build.GeneratedTypes', build.BuildTarget, build.StructuredSources]] = []
1164+
depends.extend(gir_dep.sources)
11631165
depends.extend(girtargets)
11641166

11651167
langs_compilers = self._get_girtargets_langs_compilers(girtargets)
11661168
cflags, internal_ldflags, external_ldflags = self._get_langs_compilers_flags(state, langs_compilers)
11671169
deps = self._get_gir_targets_deps(girtargets)
11681170
deps += kwargs['dependencies']
1169-
deps += [state.dependency('glib-2.0'), state.dependency('gobject-2.0'), state.dependency('gmodule-2.0'), state.dependency('gio-2.0')]
1171+
deps += [gir_dep]
11701172
typelib_includes, depends = self._gather_typelib_includes_and_update_depends(state, deps, depends)
11711173
# ldflags will be misinterpreted by gir scanner (showing
11721174
# spurious dependencies) but building GStreamer fails if they

0 commit comments

Comments
 (0)