ラベル Vala の投稿を表示しています。 すべての投稿を表示
ラベル Vala の投稿を表示しています。 すべての投稿を表示

2020-08-29

【備忘録】Vala と CSS

Vala にかぎらず、pyGObject など GTK+ のライブラリを利用するプログラミングでは、ウィジェットの修飾に CSS を利用することが必須となってきています。いままで我流でやっていましたが、いわゆるチュートリアルが YouTube にありましたので、そこで紹介されていたやりかたを覚えることにしました。

簡単なサンプルを作って確認しました。使用した OS 環境は下記の通りです。

Fedora Workstation 32 x86_64
gtk_css_test.vala
css_test.css

実行例を示しました。

[bitwalk@fedora-pc vala-samples]$ ./gtk_css_test.vala --pkg gtk+-3.0

gtk_css_test.vala の実行例

参考サイト

  1. Gtk.CssProvider – gtk+-3.0

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

2020-08-21

【備忘録】Vala と MinGW

前回のブログ記事では、Linux 上の MinGW64 クロスコンパイル環境で Vala のプログラムをコンパイルして Wine で動作確認をしました。Windows 上の MSYS2 でも Vala を利用することができます。今回は Windows 上の MSYS2 の環境で、同じ Vala のプログラムをコンパイルする例を紹介します。ただし、Meson を使いこなせておらず、Windows のリソースをうまく扱えなかったので、直接コマンドを実行してビルドしています。

使用した OS 環境は下記の通りです。

Windows 10 Home (x64) 1909, 18363.1016
msys2-x86_64-20200720.exe
» mingw-w64-x86_64-toolchain
» mingw-w64-x86_64-gtk3-3.24.20-3
» mingw-w64-x86_64-vala 0.48.8-1

Vala の電卓プログラム

今回も github にある下記の Vala の電卓プログラムをサンプルとして使用します。

具体的には次のようにしてクローンし、クローンしたディレクトリ vala-calculator で作業をすることにします。

$ git clone https://github.com/bitwalk123/vala-calculator.git
...
...
$ ls
calc.ico  data     meson.build  README.md
calc.rc   LICENSE  mingw64.ini  vala-calculator.vala
$ cd vala-calculator

次のように、まずリソースファイルを windres でコンパイルしてから、valac でコンパイルする際に -X オプションでコンパイルした calc.o を渡します。また、-mwindows オプションを加えて、バイナリの実行時にコンソールのウィンドウが表示されないようにします。なお、-lm は数学ライブラリへのリンクです。

$ windres calc.rc calc.o
$ valac --pkg gtk+-3.0 -X -lm -X -mwindows -X calc.o vala-calculator.vala

コンパイルすると、アイコン calc.ico と同じ柄の vala-calculator.exe が生成されます。

ビルド後のファイル(エクスプローラ)

vala-calculator.exe をダブルクリックして起動することを確認します。

vala-calculator.exe の実行例

同じことを、クロスコンパイル環境でできないか確認中です。

参考サイト

  1. MSYS2

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

2020-08-17

Vala と Meson とクロスコンパイル

Meson /ˈmɛ.sɒn/ は、ビルド自動化のためのソフトウェアです。Meson は直接ソフトウェアをビルドするのではなく、Linux では Ninja のビルドファイルを生成します。

今回は、Linux 上で Meson を使ってビルドするプログラムを、Windows 上でも使えるように Linux 上でクロスコンパイルをして、Wine で動作確認をした例を紹介します。

使用した OS 環境は下記の通りです。

Fedora Workstation 32 x86_64

インストールの詳細は割愛しますが、Meson, Vala が使えることに加えて、mingw-w64(以下、MinGW64)のクロスコンパイル環境が使えることを前提としています。

※ sudo dnf install mingw64-* で MinGW64 の関係パッケージを全部インストールして、約 3GB です。

Vala の電卓プログラム

今回も github にある下記の Vala の電卓プログラムをサンプルとして使用します。

具体的には次のようにしてクローンし、クローンしたディレクトリ vala-calculator で作業をすることにします。

[bitwalk@fedora-pc Projects]$ git clone https://github.com/bitwalk123/vala-calculator.git
Cloning into 'vala-calculator'...
remote: Enumerating objects: 60, done.
remote: Counting objects: 100% (60/60), done.
remote: Compressing objects: 100% (47/47), done.
remote: Total 60 (delta 23), reused 47 (delta 10), pack-reused 0
Receiving objects: 100% (60/60), 80.79 KiB | 424.00 KiB/s, done.
Resolving deltas: 100% (23/23), done.
[bitwalk@fedora-pc Projects]$ cd vala-calculator
[bitwalk@fedora-pc vala-calculator]$ ls
README.md  data  meson.build  mingw64.ini  vala-calculator.vala
[bitwalk@fedora-pc vala-calculator]$ 

Meson でクロスビルド

クロスコンパイルの設定ファイル

MinGW64 のクロスコンパイル用に、下記のような設定ファイル mingw64.ini を使います [1]。この設定ファイルが、クロスコンパイルの要になります。

mingw64.ini

クロスビルドとインストール

次のようにビルドして、ユーザーアカウント内の $HOME/test へインストールします。

[bitwalk@fedora-pc vala-calculator]$ meson --cross-file mingw64.ini builddir
The Meson build system
Version: 0.55.0
Source dir: /home/bitwalk/Projects/vala-calculator
Build dir: /home/bitwalk/Projects/vala-calculator/builddir
Build type: cross build
Project name: Vala Calculator
Project version: 0.1
C compiler for the build machine: ccache cc (gcc 10.2.1 "cc (GCC) 10.2.1 20200723 (Red Hat 10.2.1-1)")
C linker for the build machine: cc ld.bfd 2.34-4
Vala compiler for the build machine: valac (valac 0.48.8)
C compiler for the host machine: x86_64-w64-mingw32-gcc (gcc 9.2.1 "x86_64-w64-mingw32-gcc (GCC) 9.2.1 20190827 (Fedora MinGW 9.2.1-6.fc32)")
C linker for the host machine: x86_64-w64-mingw32-gcc ld.bfd 2.32
Vala compiler for the host machine: valac (valac 0.48.8)
Build machine cpu family: x86_64
Build machine cpu: x86_64
Host machine cpu family: x86_64
Host machine cpu: x86_64
Target machine cpu family: x86_64
Target machine cpu: x86_64
Found pkg-config: /usr/bin/x86_64-w64-mingw32-pkg-config (0.28)
Run-time dependency glib-2.0 found: YES 2.63.5
Run-time dependency gobject-2.0 found: YES 2.63.5
Run-time dependency gtk+-3.0 found: YES 3.24.13
Build targets in project: 2

Found ninja-1.10.0 at /usr/bin/ninja
[bitwalk@fedora-pc vala-calculator]$ DESTDIR=$HOME/test ninja -C builddir install
ninja: Entering directory `builddir'
[6/7] Installing files.
Installing libcalculator.dll to /home/bitwalk/test/usr/local/bin
Installing libcalculator.dll.a to /home/bitwalk/test/usr/local/lib
Installing calculator.h to /home/bitwalk/test/usr/local/include
Installing calculator-1.0.vapi to /home/bitwalk/test/usr/local/share/vala/vapi
Installing calculator.exe to /home/bitwalk/test/usr/local/bin
[bitwalk@fedora-pc vala-calculator]$ 

コンパイラなどのビルドツールが変わっただけで、Linux ネイティブなアプリをビルドするときと流れは同じです。

Wine で動作確認

環境変数 PATH の設定

ビルドしたバイナリの動作確認をする前に、MinGW64 のランタイムライブラリ (DLL) へのパスを通しておく必要があります。

まず winepath コマンドで、MinGW64 の bin ディレクトリ (/usr/x86_64-w64-mingw32/sys-root/mingw/bin) が Wine 上のパスでどのように表現されるのかを確認します。

[bitwalk@fedora-pc vala-calculator]$ winepath -w /usr/x86_64-w64-mingw32/sys-root/mingw/bin
002c:fixme:winediag:__wine_start_process Wine Staging 5.14 is a testing version containing experimental patches.
002c:fixme:winediag:__wine_start_process Please mention your exact version when filing bug reports on winehq.org.
Z:\usr\x86_64-w64-mingw32\sys-root\mingw\bin
[bitwalk@fedora-pc vala-calculator]$ 

Wine のレジストリエディタ (regedit) を起動して、HKEY_CURRENT_USER\Environment に環境変数 PATH を設定し、調べたパスを入力します。

Wine に環境変数 PATH を設定

日本語環境の特有な事情だと思いますが、バックスラッシュ \ は、Wine では表示上 ¥ になります。

※ 環境によっては、もしかするとバックスラッシュとして表示した文字の方が円記号に表示されてしまっているかもしれません。

ビルドしたバイナリの動作確認

インストールした先に作業ディレクトリを移して、ビルドした calculator.exe を実行してみます。

[bitwalk@fedora-pc vala-calculator]$ cd $HOME/test
[bitwalk@fedora-pc test]$ ls
usr
[bitwalk@fedora-pc test]$ cd usr
[bitwalk@fedora-pc usr]$ ls
local
[bitwalk@fedora-pc usr]$ cd local/bin
[bitwalk@fedora-pc bin]$ ls
calculator.exe  libcalculator.dll
[bitwalk@fedora-pc bin]$ ./calculator.exe
002c:fixme:winediag:__wine_start_process Wine Staging 5.14 is a testing version containing experimental patches.
002c:fixme:winediag:__wine_start_process Please mention your exact version when filing bug reports on winehq.org.
00b8:fixme:dwmapi:DwmIsCompositionEnabled 000000000031F1CC

コンソール上にはなにやらメッセージが出ますが電卓の GUI が表示されました。

calculator.exe を Wine で実行した例

Windows 用に配布する際はどうするか?

ただ動作させるだけであれば、MinGW64 のランタイム DLL をごっそりコピーしてパスを通せば、とりあえず出来そうです。しかし、オープンソースの配布条件に、理解できる可能な限り、沿った方法にしたいこと、また、アプリが必要な DLL だけをピックアップしたいことの二点に対応したいので、調査、準備をしてから、あらためて後日、ブログ記事にします。

ちなみに、クロスコンパイラ関係のパッケージを、例えば binutils と Cross をキーワードにして確認すると、多くのアーキテクチャのものが表示されて、その数の多さに驚きます。

[bitwalk@fedora-pc ~]$ sudo dnf search binutils Cross
メタデータの期限切れの最終確認: 0:30:07 時間前の 2020年08月16日 21時07分21秒 に実施しました。
=============================================== Name & Summary 一致: Cross, binutils ===============================================
cross-binutils-common.noarch : Cross-build binary utility documentation and translation files
arm-none-eabi-binutils-cs.x86_64 : GNU Binutils for cross-compilation for arm-none-eabi target
avr-binutils.x86_64 : Cross Compiling GNU binutils targeted at avr
mingw32-binutils.x86_64 : Cross-compiled version of binutils for the Win32 environment
mingw64-binutils.x86_64 : Cross-compiled version of binutils for the Win64 environment
binutils-aarch64-linux-gnu.x86_64 : Cross-build binary utilities for aarch64-linux-gnu
binutils-alpha-linux-gnu.x86_64 : Cross-build binary utilities for alpha-linux-gnu
binutils-arc-linux-gnu.x86_64 : Cross-build binary utilities for arc-linux-gnu
binutils-arm-linux-gnu.x86_64 : Cross-build binary utilities for arm-linux-gnu
binutils-avr32-linux-gnu.x86_64 : Cross-build binary utilities for avr32-linux-gnu
...
(以下省略)
...

参考サイト

  1. Cross-compiling the GLib package: GLib Reference Manual
  2. Cross and Native File reference

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

2020-08-16

Vala で 電卓プログラム

あいかわらず簡単な題材で Vala のプログラミングを勉強中です。

使い古されたテーマですが、電卓プログラムが一応動作するようになったので紹介します。

使用した OS の環境は下記の通りです。

Fedora Workstation 32 x86_64
» vala-0.48.8-1.fc32.x86_64
vala-calculator.vala

実行は次のようにします。

[bitwalk@toolbox vala-calculator]$ ./vala-calculator.vala --pkg gtk+-3.0 -X -lm
vala-calculator.vala の実行例

最近はもっぱら Python/GObject で GUI プログラミングをするようになり、それなりに満足して使っています。ただ、ちょっとした定型処理をするような小さなプログラムを他の人と共有したいときに、いつも困ってしまいます。まず相手は Windows を使っていること、そして Python を使っていないからです。運良く Python を使っている人だとしても、Windows 用 Python では GObject を利用できません。MSYS2 をインストールしなければならないので手間です。

Vala は、C ソースへ変換してコンパイルしますので、バイナリで配布できます。利用者は MSYS2 のパッケージ群をインストールしなくとも、必要なバイナリパッケージがあれば直に実行させることができます。また、Windows 側で MSYS2 の開発環境を用意しなくとも Linux で開発したアプリをクロスコンパイルして Windows 用パッケージを準備することができます。

そう考えて、この夏休みに Vala を勉強しようと考えていたのですが、あれこれ他にも手を出しているうちに、あっという間に時間が過ぎ、もう夏休みも終わりです。Vala の学習は継続し、トピックがあれば不定期に紹介していきます。

参考サイト

  1. bitwalk123/vala-calculator

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

2020-08-15

【備忘録】Vala と GSL

GNU Scientific Library (GSL) は、応用数学や科学における数値計算のためのソフトウェアライブラリです。GSL は C 言語で書かれていますが、他のプログラミング言語用にもラッパーが用意されています。GSL は GNU プロジェクトの一部であり、GNU General Public License の下で配布されています。

バージョン 1.0 は 2001 年にリリースされました。ドキュメントにあるように、メンテナは機能追加よりも安定性に関心を持っていました。メジャーバージョン1は 2013 年 7 月のリリース 1.16 で終了しました。

2015 年 10 月にバージョン 2.0 を公開し、精力的な開発が再開され、2019 年 8 月には最新バージョン 2.6 が公開されました。

Wikipedia より引用、翻訳

参考サイト [1] に Vala で GSL ライブラリを利用したサンプルがありましたので、一部を紹介します。

使用した OS の環境は下記の通りです。

Fedora Silverblue 32 x86_64
» vala-0.48.8-1.fc32.x86_64

まず GSL をインストールしておきます。

[bitwalk@fedora-pc vala-samples]$ sudo dnf install gsl gsl-devel
メタデータの期限切れの最終確認: 0:10:28 時間前の 2020年08月15日 18時17分17秒 に実施しました。
パッケージ gsl-2.6-2.fc32.x86_64 は既にインストールされています。
依存関係が解決しました。
====================================================================================================================================
 Package                         Architecture                 Version                            Repository                    Size
====================================================================================================================================
インストール:
 gsl-devel                       x86_64                       2.6-2.fc32                         fedora                       591 k
...
(以下省略)
...
インストール済み:
  gsl-devel-2.6-2.fc32.x86_64                                                                                                       

完了しました!
[bitwalk@fedora-pc vala-samples]$ 

線形代数 (Linear Algebra) のサンプル

サンプルは、以下の連立一次方程式の x1 x2 x3 x4 を LU 分解で求めるプログラムです。

a11 x1 + a12 x2 + a13 x3 + a14 x4 = b1

a21 x1 + a22 x2 + a23 x3 + a24 x4 = b2

a31 x1 + a32 x2 + a33 x3 + a34 x4 = b3

a41 x1 + a42 x2 + a43 x3 + a44 x4 = b4

gsl_linalg.vala

実行結果は次のようになりました。

[bitwalk@fedora-pc vala-samples]$ ./gsl_linalg.vala --pkg gsl
x = 
-4.05205
-12.6056
1.66091
8.69377
[bitwalk@fedora-pc vala-samples]$ 

しばらく GSL を利用していませんでしたが、Vala で手軽に利用できることが判りました。あらためて、現在の GSL の機能を調べて活用できるようにしたいです。

参考サイト

  1. GSL - GNU Scientific Library - GNU Project - Free Software Foundation

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

2020-06-30

【備忘録】廃止されていた GtkStock

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

Wikipedia より引用・編集

PyGObject で GUI サンプルを作りためていたので、Vala 用に書き直しています。Vala 用にダイアログのサンプルを作り直してビルドしたときに、ちょっと困った警告が出たので備忘録にしました。

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

Fedora 32 (Workstation Edition) x86_64

PyGObject のダイアログのサンプルは下記のとおりです。

gtk_dialog.py
gtk_dialog.py の実行例

Vala でも(ちょっと手を抜いてはいますが)同じように記述できます。

gtk_dialog.vala

このコードを実行しようとすると、ビルド、実行はできるものの、下記のような警告が出ます。

$ ./gtk_dialog.vala --pkg gtk+-3.0
/tmp/gtk_dialog.vala.PPEXM0.c: 関数 ‘my_dialog_on_clicked’ 内:
/tmp/gtk_dialog.vala.PPEXM0.c:134:2: 警告: ‘GtkStock’ は廃止されました [-Wdeprecated-declarations]
  134 |  _tmp0_ = (GtkDialog*) gtk_dialog_new_with_buttons ("ダイアログ", (GtkWindow*) self, GTK_DIALOG_MODAL, GTK_STOCK_OK, GTK_RESPONSE_OK, GTK_STOCK_CANCEL, GTK_RESPONSE_CANCEL, NULL, NULL);
      |  ^~~~~~
/tmp/gtk_dialog.vala.PPEXM0.c:134:2: 警告: ‘GtkStock’ は廃止されました [-Wdeprecated-declarations]
/tmp/gtk_dialog.vala.PPEXM0.c:137:9: 警告: assignment to ‘GtkBox *’ {aka ‘struct _GtkBox *’} from incompatible pointer type ‘GtkWidget *’ {aka ‘struct _GtkWidget *’} [-Wincompatible-pointer-types]
  137 |  _tmp1_ = gtk_dialog_get_content_area (dialog);
      |         ^
$ 
gtk_dialog.vala の実行例

GtkStock は、メニューやツールバーなどで共通で使用する「開く」や「終了する」といったアイテムの ID を扱っています。しかし、参考サイト [1] によると、GTK 3.10 より Stock は廃止されたとあります。Fedora 32 で使用している GTK+ は 3.24 ですので、ずいぶん前から廃止されていることになりますが、PyGObject では警告が出なかったので気が付きませんでした。💦

Since GTK+ 3.10, stock items are deprecated. You should instead set up whatever labels and/or icons you need using normal widget API, rather than relying on GTK+ providing ready-made combinations of these.

今後のことを考えると、いつでも使えるやり方を確立したいので、代替案を探索しています。

参考サイト

  1. Stock Items: GTK+ 3 Reference Manual

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

2020-06-22

Vala でオブジェクト指向プログラミング

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

Wikipedia より引用・編集

Vala は C 言語のソースを生成しますが、オブジェクト指向の言語です。Vala のサンプル紹介でもオブジェクト指向を意識したコーディングを心掛けたいので、まずは Hello, World のサンプルから書き直します。

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

Fedora 32 (Workstation Edition) x86_64
  vala-0.48.6-1.fc32.x86_64

Hello World!(オブジェクト指向版)

以前のブログ記事 [1] で紹介した Hello, World! のサンプルと実行結果は同じですが、オブジェクト指向を意識して HelloWorld クラスに直したものを紹介します。

hello_object.vala

$ ./hello_object.vala --pkg gtk+-3.0
hello_object,vala の実行例

今後、Vala を用いた GUI サンプルを充実させていきたいと考えています。

参考サイト

  1. bitWalk's: Vala を試してみた [2020-06-06]
  2. Projects/Vala/Manual/Classes - GNOME Wiki!

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