Skip to content

Commit b8ff6cf

Browse files
committed
vala: Add method to get generated GIR from a build_target
Fixes: #2296 Fixes: #4481 Fixes: #5968
1 parent 57eb1e2 commit b8ff6cf

File tree

4 files changed

+37
-4
lines changed

4 files changed

+37
-4
lines changed

docs/markdown/Vala.md

Lines changed: 12 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -319,6 +319,7 @@ foo_h = foo_lib.vala_header()
319319
This header can now be used like any other generated header to create an
320320
order-only dependency.
321321

322+
322323
### Depending on VAPI header
323324

324325
*(since 1.10.0)*
@@ -331,6 +332,16 @@ foo_vapi = foo_lib.vala_vapi()
331332
```
332333

333334

335+
### Depending on generated GIR
336+
337+
*(since 1.10.0)*
338+
339+
```meson
340+
foo_lib = shared_library(..., vala_gir : 'foo.gir')
341+
foo_vapi = foo_lib.vala_gir()
342+
```
343+
344+
334345
### GObject Introspection and language bindings
335346

336347
A 'binding' allows another programming language to use a library
@@ -368,7 +379,7 @@ To then generate a typelib file use a custom target with the
368379
```meson
369380
g_ir_compiler = find_program('g-ir-compiler')
370381
custom_target('foo typelib', command: [g_ir_compiler, '--output', '@OUTPUT@', '@INPUT@'],
371-
input: meson.current_build_dir() / 'Foo-1.0.gir',
382+
input: foo_lib.vala_gir(),
372383
output: 'Foo-1.0.typelib',
373384
depends: foo_lib,
374385
install: true,
Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,14 +1,21 @@
11
## Vala BuildTarget dependency enhancements
22

33
A BuildTarget that has Vala sources can now get a File dependency for its
4-
generated header and generated vapi.
4+
generated header, and vapi, and gir files.
55

66
```meson
77
lib = library('foo', 'foo.vala')
88
lib_h = lib.vala_header()
99
lib_s = static_lib('static', 'static.c', lib_h)
1010
1111
lib_vapi = lib.vala_vapi()
12+
13+
custom_target(
14+
'foo-typelib',
15+
command : ['g-ir-compiler', '--output', '@OUTPUT@', '@INPUT@'],
16+
input : lib.vala_gir(),
17+
output : 'Foo-1.0-typelib'
18+
)
1219
```
1320

1421
`static.c` will not start compilation until `lib.h` is generated.

mesonbuild/interpreter/interpreterobjects.py

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1012,6 +1012,18 @@ def vala_vapi_method(self, args: T.List[TYPE_var], kwargs: TYPE_kwargs) -> meson
10121012
return mesonlib.File.from_built_file(
10131013
self.interpreter.backend.get_target_dir(self._target_object), self._target_object.vala_vapi)
10141014

1015+
@FeatureNew('vala_gir', '1.10.0')
1016+
@noPosargs
1017+
@noKwargs
1018+
@InterpreterObject.method('vala_gir')
1019+
def vala_gir_method(self, args: T.List[TYPE_var], kwargs: TYPE_kwargs) -> mesonlib.File:
1020+
if not hasattr(self._target_object, 'vala_gir'):
1021+
raise mesonlib.MesonException("Attempted to get a Vala GIR from a target that doesn't generate one")
1022+
1023+
assert self.interpreter.backend is not None, 'for mypy'
1024+
return mesonlib.File.from_built_file(
1025+
self.interpreter.backend.get_target_dir(self._target_object), self._target_object.vala_gir)
1026+
10151027

10161028
class ExecutableHolder(BuildTargetHolder[build.Executable]):
10171029
pass

test cases/vala/9 gir/meson.build

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,6 @@
1+
# SPDX-License-Identifier: Apache-2.0
2+
# Copyright © 2025 Intel Corporation
3+
14
project('foo', 'c', 'vala')
25

36
glib = dependency('glib-2.0')
@@ -12,6 +15,6 @@ foo = shared_library('foo', 'foo.vala',
1215

1316
custom_target('foo-typelib',
1417
command: [g_ir_compiler, '--output', '@OUTPUT@', '@INPUT@'],
15-
input: meson.current_build_dir() + '/Foo-1.0.gir',
18+
input: foo.vala_gir(),
1619
output: 'Foo-1.0.typelib',
17-
depends: foo)
20+
build_by_default : true)

0 commit comments

Comments
 (0)