2020-06-20

Vala と Meson

Vala は GObject を利用した C 言語のソースコードを生成する、セルフホスティングコンパイラを持つオブジェクト指向言語です。C# に似た構文を持ち、無名関数シグナルプロパティジェネリクスメモリ管理例外処理型推論、および、for-each など、C 言語にはない言語仕様を持っています。

Wikipedia より引用・編集

Vala を試してみて、簡単に GObject の GUI が作れることに興味を持ちました [1]。そこで開発環境を探したところ GNOME Builder が Vala のプロジェクトに対応していることが判りました [2]。しかし使い方がよくわからず、どうもとっつきにくい印象を受けます。GNOME Builder のマニュアルは英語ですが整備されているので、根気良く読めば良いのですが、試しに作ったプロジェクトで生成された meson.build ファイルが気になります。

GNOME Builder で生成された meson.build ファイルの例

この meson.build は Meson (/ˈmɛ.sɒn/) というビルド自動化するツールのためのファイルです。この Mason を知れば、GNOME Builder を見る目が変わるかもしれないと思い、Vala のサンプルを Mason を使ってビルドしてみました。

本ブログ記事では下記の OS 環境で動作確認をしています。

Fedora 32 (Workstation Edition) x86_64
  meson-0.54.2-1.fc32.noarch
  ninja-build-1.10.0-1.fc32.x86_64

Hello World!

参考サイト [1] で紹介した Hello World! のプログラムを今回も使うことにします。

hellogtk.vala
using Gtk;
 
int main (string[] args) {
    Gtk.init (ref args);
    
    var window = new Window ();
    window.title = "Hello, World!";
    window.border_width = 10;
    window.window_position = WindowPosition.CENTER;
    window.set_default_size(350, 70);
    window.destroy.connect (Gtk.main_quit);
    
    var label = new Label ("こんにちは、世界!");
    
    window.add (label);
    window.show_all ();
    
    Gtk.main ();
    return 0;
}

はじめての Meson

Wikipedia によると Meson は直接ソフトウェアをビルドするのではなく、Linux では Ninja のような低レベルなビルドシステム用のビルドファイルを生成するということです。Ninja も使ったことがないのですが、とりあえず簡単なサンプルで Meson を使ってみることにします。

Meson のプロジェクトサイト [3] のマニュアルに Vala 用のサンプルもありましたので、それを参考に、前述の hellogtk.vala をビルドできるように meson.buildhellogtk.vala と同じディレクトリ内に作成しました。ソースが hellogtk.vala で、ビルドする実行ファイル名を hello としています。

meson.build
project('vala sample', 'vala', 'c')

dependencies = [
    dependency('glib-2.0'),
    dependency('gobject-2.0'),
    dependency('gtk+-3.0'),
]

sources = files('hellogtk.vala')

executable('hello', sources, dependencies: dependencies)

hellogtk.vala をビルドするディレクトリを builddir として Meson を実行します。

[bitwalk@fedora-pc hellogtk]$ ls
hellogtk.vala  meson.build
[bitwalk@fedora-pc hellogtk]$ meson builddir
The Meson build system
Version: 0.54.2
Source dir: /home/bitwalk/プロジェクト/hellogtk
Build dir: /home/bitwalk/プロジェクト/hellogtk/builddir
Build type: native build
Project name: vala sample
Project version: undefined
C compiler for the host machine: ccache cc (gcc 10.1.1 "cc (GCC) 10.1.1 20200507 (Red Hat 10.1.1-1)")
C linker for the host machine: cc ld.bfd 2.34-3
Vala compiler for the host machine: valac (valac 0.48.6)
Host machine cpu family: x86_64
Host machine cpu: x86_64
Found pkg-config: /usr/bin/pkg-config (1.6.3)
Run-time dependency glib-2.0 found: YES 2.64.3
Run-time dependency gobject-2.0 found: YES 2.64.3
Run-time dependency gtk+-3.0 found: YES 3.24.20
Build targets in project: 1

Found ninja-1.10.0 at /usr/bin/ninja
[bitwalk@fedora-pc hellogtk]$ ls
builddir  hellogtk.vala  meson.build
[bitwalk@fedora-pc hellogtk]$ 

builddir 内にディレクトリを移して ninja コマンドを実行すると hello がビルドされます。

[bitwalk@fedora-pc hellogtk]$ cd builddir
[bitwalk@fedora-pc builddir]$ ls
build.ninja  compile_commands.json  meson-info  meson-logs  meson-private
[bitwalk@fedora-pc builddir]$ ninja
[3/3] Linking target hello
[bitwalk@fedora-pc builddir]$ ls
build.ninja  compile_commands.json  hello  hello@exe  meson-info  meson-logs  meson-private
[bitwalk@fedora-pc builddir]$ ./hello
hello の実行例

とてもシンプルな例をビルドしただけですが、現金なもので、これだけのでも Meson への親近感が増し、ひいては GNOME Builder の meson.build に記載されている内容を理解できる気にもなります。この錯覚が GNOME Builder を使えるようにするためにはきっと必要なのでしょう。🤗

参考サイト

  1. bitWalk's: Vala を試してみた [2020-06-06]
  2. bitWalk's: GNOME Builder は GNOME アプリ開発用の IDE [2020-06-08]
  3. The Meson Build system

ブログランキング・にほんブログ村へ
にほんブログ村

0 件のコメント: