Windows7(+MSYS2)上で、Perl/GUIを模索していたところPrimaを用いることで、一部制約はありそうだが(及び確実に設定が足りてないところもあるが。。)、容易に構築出来たの備忘メモ。当初は、MSYS2+Perl/GTK2を目指したが、力量不足により挫折。。
Primaについては http://www.prima.eu.org/ 参照。
なお、環境は Windows7 Professional 64bit。
- 準備
- MSYS2のインストール
- 各種パッケージをインストール
- CPAN経由でPrimaインストール
- お試し実行
準備
該当PCの
「コントロール パネル\すべてのコントロール パネル項目\システム\システム詳細設定\環境変数」
で関連しそうなパスが無いか確認し、影響ありそうだったら適宜修正(cygwinやperlなどなど)。
MSYS2のインストール
基本、Officalサイトの手順通り。
- インストーラのダウンロード&インストール。2016/01/20時点では、msys2-x86_64-20150916.exe を利用。
- 起動したMSYS2のシェル上で、
pacman --needed -Sy bash pacman pacman-mirrors msys2-runtime
を実行。 一旦、終了。
exit
コマンドで抜けようとすると、以下の様なエラーがでるが、めげずにexit
していると終了する。(多分×で終わらしてもよいかと)
1 [main] bash 8504 fork: child -1 - forked process 14544 died unexpectedly, retry 0, exit code 0x1, errno 11
bash: fork: retry: No child processesスタートメニューより。MSYS2(MSYS2 Shell(msys2_shell.bat))を起動し、
pacman -Syu
を実行再び終了。
exit
する。
各種パッケージのインストール
二つのパッケージを指定するだけで、とりあえず問題無さそう。ただ、MSYS2の起動batだけは、mingw側を用いる。
- インストールしたフォルダ(例えば:C:\msys64配下)の
mingw64_shell.bat
を用いてMSYS2を起動する。通常のmsys2_shell.bat
を用いたいところだが、後者を用いて単純にPrimaのmakeすると、X11ライブラリがらみで失敗するので、前者のmingw64_shell.bat
を利用する。(32bit環境の場合は、試していないが、mingw32_shell.bat
でいけるかな。) - 起動したshellから、以下を実行する。この時、依存パッケージも含めてインストールされる。
$ pacman -S mingw-w64-x86_64-toolchain mingw-w64-x86_64-perl
CPAN経由でPrimaインストール
以下を実行。
$ perl -MCPAN -e "install Prima"
一発目のCPAN起動なので、以下の様な問い合わせがでるが、そのままEnter。関連モジュールも合わせてビルド&インストールされる。
CPAN.pm requires configuration, but most of it can be done automatically.
If you answer 'no' below, you will enter an interactive dialog for each
configuration option instead.
Would you like to configure as much as possible automatically? [yes]
お試し実行
https://github.com/dk/Prima の "Hello world"を試してみる。
use Prima qw(Application Buttons);
new Prima::MainWindow(
text => 'Hello world!',
size => [ 200, 200],
)-> insert( Button =>
centered => 1,
text => 'Hello world!',
onClick => sub { $::application-> close },
);
run Prima;
$ perl sample.pl
以下の様なダイアログが、表示され、一応満足。
実行時に表示されるエラー
なお、実行時に、以下の様なエラーがターミナル上に、Primaロゴがロード出来ないと、表示されるが、今のところ回避出来ていない
Failed to load standard bitmap 'C:/msys64/mingw64/lib/perl5/site_perl/Prima/sys/win32/sysimage.gif':No appropriate codec found. Did you compile Prima with GIF support?
確かに、ビルド時に以下の様な警告が出ていた。
** Warning: the following image libraries weren't found:
jpeg png tiff gif Xpm
そこで、pacman -Ss
で見つけたライブラリを突っ込んで、再度ビルド&インストール。
$ pacman -S mingw-w64-x86_64-giflib mingw-w64-x86_64-libtiff mingw-w64-x86_64-libjpeg mingw-w64-x86_64-libpng
$ cpan
cpan[1]> force install Prima
cpan[2]> quit
これで、ビルド時のWarning(jpeg/png/tiff/gif)は消えた。しかし、目的の実行時のエラーは消えないままとなる。。
保留。。。
Sample
Primaを用いたサンプルコードは以下にコピーされている。
/mingw64/lib/perl5/site_perl/Prima/examples
以下は、サンプル群の一部キャプチャ。また、サンプルで実行できないものも何点か存在したが、一応、それなりのことはでいる模様。ちなみに、gifファイルもデコード出来たようなので、libgifのインストールは無駄ではなかった。(一部サンプルでは、前述のWarningは出ない)
その他
その他
msys2_shell.batでの構築
本来は、msys2_shell.bat
上で、前述を行いたかったのだが、Primaのconfigureで、X11のヘッダーが無いと怒られてしまう。
Checking for X11 headers...no
Prima needs X11 headers for compilation! Set X11BASE='/path/to/X' or INCPATH+='/path/to/X/include' if you have a non-standard path to X. (see also makefile.log for details)
msys2_shell.bat
で、makeした場合は、Checking for X11 library... no, using built-in
で、うまくパスしてくれたのだが、msys2版だとX11ライブラリが必要となる模様。
そこで、pacman -Ss
でそれっぽいライブラリを探したのだが、回避に至らず。。。
ちなみに、msys2_shell.bat
でmakeする場合は、同batで起動したshell上で以下の様に、msys2用のツール環境を改めてインストールする必要がある。
pacman -S base-devel