The Meson Build System
http://mesonbuild.com/
You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
78 lines
2.2 KiB
78 lines
2.2 KiB
--- |
|
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" |
|
```
|
|
|