mrubyでQtを使えないかなーとずっと試行錯誤していたら、やっと、わたしのqtbindingsのforkにあるmrubyブランチが実用段階になってきました。
基本的に、qtbindings(メンテナンスが継続されているQtRubyのフォーク)をmrubyに移植したものですが、mrubyに標準でないようなメソッドやモジュールを使っているrubyコードをC++で置き換えてあります。その関係で、C++11を使用しているので、ビルドするとき若干ややこしくなっています。
まずは、ビルド手順ですが、いきなり通常のmrubyではビルドできません。mrubyではrubyの様にRDataに独自のgcマーカーを使えないので、わたしのmrubyリポジトリのrdata_gc_markerブランチを使用する必要があります。とりあえず、擬似的なシェルスクリプトでビルドする方法を書きます。
# 以下に進む前にqt qscintillaのsmokeパッケージをインストールします。その2つがインストールできれば、Qtのパッケージも自動的にインストールされるはずです。
export CXX="ccache clang++ -std=c++11" # 適当なC++11を使えるコンパイラを指定します。
cd 適当なディレクトリ/
git clone --branch mruby "https://github.com/take-cheeze/qtbindings.git"
cd qtbindings/
git clone --branch rdata_gc_marker "https://github.com/take-cheeze/mruby.git"
./build.sh
環境によっては、このインストール手順でビルドできない場合があるかもしれないのでそのときは、 build.sh や build_config.rb を編集してください。また、DBusやQScintillaが不要な場合は qtbindings/mrbgem.rake でそれら2つに関係ある部分を消していいです。
これでbuild.shの実行が終わったら、指定した適当なディレクトリの下に qtbindings/mruby/bin/mruby がビルドできてるはずです。
その後、動いているのかの確認のためにその実行ファイルで、 qtbindings/examples/minimal.rb を実行します。 "Hello World!" とだけ表示するウィンドウが出てくるだけのスクリプトですので、その目で "Hello World!" を確認してください。以下の様なウィンドウ(OS Xで実行した場合です)が表示されれば成功です。ちなみにウィンドウの閉じるボタンを押せばちゃんと終了します。
ガンガン生成されるデバッグログがうざったい場合はスクリプトの先頭に以下の行を追加してください。まだまだ開発途中なのでデフォルトの状態だと生成できる最大の量を生成します。ログを少し細かく制限したい場合は、qtbindings/mrblib/_qtruby.rbにあるDebugChannelモジュール内のフラグで調整できます。
Qt::Internal.debug = 0
以上が、現在のmruby-qtをビルドしてとりあえず動かすまでの手順です。内部の構造などは、追々記事にできたらと思います。