Skip to content

Commit 02d1cfd

Browse files
committed
interpreter: Add a get_gir() method for BuildTarget
Which allows us to handle Vala targets that generate gir as a side effect in a more natural way, instead of generating strings using `meson.source_dir()`
1 parent 47acce8 commit 02d1cfd

File tree

4 files changed

+18
-2
lines changed

4 files changed

+18
-2
lines changed

docs/markdown/Vala.md

+1-1
Original file line numberDiff line numberDiff line change
@@ -342,7 +342,7 @@ To then generate a typelib file use a custom target with the
342342
```meson
343343
g_ir_compiler = find_program('g-ir-compiler')
344344
custom_target('foo typelib', command: [g_ir_compiler, '--output', '@OUTPUT@', '@INPUT@'],
345-
input: meson.current_build_dir() / 'Foo-1.0.gir',
345+
input: foo_lib.get_gir(), # For Meson < 1.4 support: meson.current_build_dir() / 'Foo-1.0.gir',
346346
output: 'Foo-1.0.typelib',
347347
depends: foo_lib,
348348
install: true,
+5
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
## Add way to get Vala GIR file
2+
3+
Our current recomendation is to create a string via `meson.current_build_dir() /
4+
Foo-1.0.gir`, which is not the Meson way. A new `BuildTarget.get_gir()` method
5+
has been added which returns a `File` object pointing to the GIR file.

mesonbuild/interpreter/interpreterobjects.py

+11
Original file line numberDiff line numberDiff line change
@@ -863,6 +863,7 @@ def __init__(self, target: _BuildTarget, interp: 'Interpreter'):
863863
'path': self.path_method,
864864
'found': self.found_method,
865865
'private_dir_include': self.private_dir_include_method,
866+
'get_gir': self.get_gir_method,
866867
})
867868

868869
def __repr__(self) -> str:
@@ -944,6 +945,16 @@ def get_id_method(self, args: T.List[TYPE_var], kwargs: TYPE_kwargs) -> str:
944945
def name_method(self, args: T.List[TYPE_var], kwargs: TYPE_kwargs) -> str:
945946
return self._target_object.name
946947

948+
@FeatureNew('get_gir', '1.4.0')
949+
@noPosargs
950+
@noKwargs
951+
def get_gir_method(self, args: T.List[TYPE_var], kwargs: TYPE_kwargs) -> mesonlib.File:
952+
obj = self._target_object
953+
if not hasattr(obj, 'vala_gir') or obj.vala_gir is None:
954+
raise InterpreterException(f'target {obj.name} does not generate GIR')
955+
return mesonlib.File.from_built_file(obj.subdir, obj.vala_gir)
956+
957+
947958
class ExecutableHolder(BuildTargetHolder[build.Executable]):
948959
pass
949960

test cases/vala/9 gir/meson.build

+1-1
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,6 @@ foo = shared_library('foo', 'foo.vala',
1212

1313
custom_target('foo-typelib',
1414
command: [g_ir_compiler, '--output', '@OUTPUT@', '@INPUT@'],
15-
input: meson.current_build_dir() + '/Foo-1.0.gir',
15+
input: foo.get_gir(),
1616
output: 'Foo-1.0.typelib',
1717
depends: foo)

0 commit comments

Comments
 (0)