aboutsummaryrefslogtreecommitdiff
path: root/docs/markdown/Vala.md
blob: 00df3719d81596155c2ce8a6bae48ac6d1cebbf7 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
---
title: Vala
...

# Compiling Vala applications

Meson has support for compiling Vala programs. A skeleton Vala file looks like this.

```meson
project('valaprog', ['vala', 'c'])

glib = dependency('glib-2.0')
gobject = dependency('gobject-2.0')

executable('valaprog', 'prog.vala',
           dependencies : [glib, gobject])
```

You must always specify `glib` and `gobject` as dependencies, because all Vala applications use them.

## Using a custom VAPI

When dealing with libraries that are not providing Vala bindings, you can point --vapidir to a directory relative to meson.current_source_dir containing the binding and include a --pkg flag.

```meson
glib = dependency('glib-2.0')
gobject = dependency('gobject-2.0')
foo = dependency('foo')

executable('app',
           dependencies: [glib, gobject, foo]
           vala_args: ['--pkg=foo', '--vapidir=' + meson.current_source_dir()])
```

## GObject Introspection

To generate GObject Introspection metadata, the --gir flags has to be set explicitly in vala_args.

```meson
foo_lib = library('foo',
                  dependencies: [glib, gobject],
                  vala_args: ['--gir=Foo-1.0.gir'])
```

For the typelib, use a custom_target depending on the library:

```meson
    g_ir_compiler = find_program('g_ir_compiler')
    custom_target('foo-typelib',
                   command: [g_ir_compiler, '--output', '@OUTPUT@', meson.current_build_dir() + '/foo@sha/Foo-1.0.gir'],
                   output: 'Foo-1.0.typelib',
                   depends: foo_lib,
                   install: true,
                   install_dir: get_option('libdir') + '/girepository-1.0')
```

## Installing VAPI and GIR files

To install generated VAPI and GIR files, it is necessary to add a custom install script.

```meson
meson.add_install_script('install.sh')
```

```bash
#!/bin/sh

mkdir -p "${DESTDIR}${MESON_INSTALL_PREFIX}/share/vala/vapi"
mkdir -p "${DESTDIR}${MESON_INSTALL_PREFIX}/share/gir-1.0"

install -m 0644                                         \
    "${MESON_BUILD_ROOT}/foo-1.0.vapi" \
    $"{DESTDIR}${MESON_INSTALL_PREFIX}/share/vala/vapi"

install -m 0644                            \
    "${MESON_BUILD_ROOT}/foo@sha/Foo-1.0.gir" \
    "${DESTDIR}${MESON_INSTALL_PREFIX}/share/gir-1.0"
```