Nov 29, 2009

qt4-qtruby を Windows で : qt4-qtrubyビルド編

ツール導入編からの続きです。


qt4-qtruby

KDEのSubversionリポジトリからソースコードを入手:
> mkdir kdebindings
> cd kdebindings
> svn co svn://anonsvn.kde.org/home/kde/trunk/KDE/kdebindings .
  ...
  Checked out revision 1055931.
Ruby以外用のソースコード(Python,C#など)も大量にダウンロードされる。今回利用するのは
  • smoke/qt
  • ruby/qtruby
の2個のみ。

まず CMakeLists.txt を qtruby 用に書き換える。

kdebindings/CMakeLists.txt を kdebindings/CMakeLists.txt.qtruby で上書き。その内容を以下のように編集する。
  • "add_subdirectory(smoke)" と書いてある行の上に "add_subdirectory(generator)" と追記する:
  ...
  FIND_PACKAGE (OpenGL REQUIRED)

  add_subdirectory(generator)
  add_subdirectory(smoke)

  if(RUBY_EXECUTABLE)
  ...
"Visual Studio 2008 コマンド プロンプト" を起動し、
kdebindings> PATH=d:\Qt\2009.04\qt\bin;d:\tmp\cmake-2.8.0-win32-x86\bin;d:\ruby19\bin;d:\Perl\bin;%PATH%
kdebindings> cmake -G "Visual Studio 9 2008" -DCMAKE_INSTALL_PREFIX=d:\ruby19  -DRUBY_EXECUTABLE=d:\ruby19\bin\ruby  -DRUBY_LIBRARY=d:\ruby19\lib\msvcr90-ruby191.lib  -DRUBY_INCLUDE_PATH=d:\ruby19\include\ruby-1.9.1  -DQT_QMAKE_EXECUTABLE=d:\Qt\2009.04\qt\bin\qmake  -Wno-dev  -DENABLE_SMOKE=on  -DENABLE_QTRUBY=on  -DENABLE_QTWEBKIT_SMOKE=off -DENABLE_QTSCRIPT_SMOKE=off  -DENABLE_QTUITOOLS_SMOKE=off  -DENABLE_QTTEST_SMOKE=off  -DENABLE_PHONON_SMOKE=off  -DENABLE_QSCI_SMOKE=off-DENABLE_QWT_SMOKE=off  -DENABLE_KDE_SMOKE=off  -DENABLE_KDEVPLATFORM_SMOKE=off  -DENABLE_KHTML_SMOKE=off  -DENABLE_KTEXTEDITOR_SMOKE=off  -DENABLE_SOLID_SMOKE=off  -DENABLE_PLASMA_SMOKE=off  -DENABLE_QTWEBKIT_RUBY=off  -DENABLE_QTUITOOLS_RUBY=off  -DENABLE_QTSCRIPT=off  -DENABLE_QTTEST=off  -DENABLE_PHONON_RUBY=off  -DENABLE_QSCINTILLA_RUBY=off  -DENABLE_QWT_RUBY=off  -DENABLE_SOPRANO_RUBY=off  -DENABLE_KDEVPLATFORM_RUBY=off  -DENABLE_KORUNDUM_RUBY=off  -DENABLE_KHTML_RUBY=off-DENABLE_KTEXTEDITOR_RUBY=off  -DENABLE_SOLID_RUBY=off  -DENABLE_KROSSRUBY=off -DENABLE_PLASMA_RUBY=off  -DENABLE_QIMAGEBLITZ_SMOKE=off -DENABLE_QTDBUS_SMOKE=off -DQT_QTDBUS_LIBRARY:FILEPATH= .

1回目の実行ではCMakeの内部エラー(?)のためソリューションファイル等が生成されない。原因はおそらくこれ:
CMake Error at smoke/qt/QtGuess.txt:134 (list):
この問題は上記コマンドをもう1度実行することで回避できる。2回目のcmake実行後、"kdebindings.sln" が生成されるので、 Visual Studio 2008 で開く。

各種手作業

DBusのサポートを外すため、複数の設定ファイルをビルド前に修正しておく必要がある。
  • kdebindings/smoke/qt/qt_includes.h
    • ファイル最下部: QtDBus.h をインクルードしている行をコメントアウト。
  • kdebindings/smoke/qt/smokeconfig.xml
    • QDBus... という行をすべて削除。

generator.exe のビルド

Qtのヘッダーファイルをパースする generator.exe をビルドする。
  • cppparser
  • generator
  • generator_dump
  • generator_smoke
の4プロジェクトを選択し、「選択範囲のビルド」を実行する。

smokeqt プロジェクトのビルド
  • ソリューション エクスプローラから smokeqt を右クリックで選択、プロジェクトのみをビルド。
    • ※ x_1.cpp ~ x_20.cpp と smokedata.cpp は generator.exe で自動生成されるソースコードなので、ビルド開始時には存在しない。

qtruby4 プロジェクトのビルド

まず以下の箇所に修正が必要。
  • kdebindings/ruby/qtruby/src/qtruby.h
    • 関数 "rb_str_catf" の宣言をコメントアウト。gcc 専用の "__attribute__" が付加されている他、ruby 側での宣言と矛盾しているなどの問題があり、コンパイルエラーの原因となる。

本来だと "qtruby4shared" → "qtruby4" の順にビルドし2個のDLLを生成することになるが、なぜか qtruby4 側から qtruby4shared のシンボルが見つからないため、リンクエラーが発生してしまう。ここでは qtruby4shared のソースコードを qtruby4 に含めてしまい、1個のDLL (qtruby4.so) のみを生成するように変更する。
  • "qtruby4shared" の "Source Files" 以下にある3個のファイル(handlers.cpp, marshall_types.cpp, Qt.cpp) を "qtruby4" プロジェクトの "Source Files" に移動。
  • 出力ファイル名を qtruby4.dll (kdebindings\ruby\qtruby\src\Release\qtruby4.dll) から qtruby4.so に変更。
  • qtruby4 プロジェクトの「追加の依存ファイル」から "Release\qtruby4shared.lib" を削除。
以上の変更を適用した後で qtruby4 プロジェクトのみをビルドする。kdebindings\ruby\qtruby\src\Release\qtruby4.so が生成される。


インストール

INSTALL プロジェクトはうまく動作しないようなので、以下手作業で各種ファイルを配置する。
  • Qt, OpenSSL
    • ビルドした DLL が d:\Qt\2009.04\qt\bin 以下にあるので d:\ruby19\bin にコピー
    • OpenSSL の ssleay32.dll, libeay32.dll も d:\ruby19\bin にコピー
  • qt4-qtruby
    • kdebindings/smoke/qt/Release/smokeqt.dll を d:\ruby19\bin にコピー
    • kdebindings/ruby/qtruby/src/Release/qtruby4.so を d:/ruby19/lib/ruby/site_ruby/1.9.1/i386-msvcr90 にコピー
    • kdebindings/ruby/qtruby/src/lib/*.rb を d:/ruby19/lib/ruby/site_ruby/1.9.1/ へコピー
    • kdebindings/ruby/qtruby/src/lib/Qt/qtruby4.rb を d:/ruby19/lib/ruby/site_ruby/1.9.1/Qt/ へコピー

実行
> ruby -rQt -e "app=Qt::Application.new(ARGV); hello=Qt::PushButton.new('Hello'); hello.show(); app.exec()"
というone-liner を実行して、このようなウィンドウが表示されればOKです:


qt4-qtruby を Windows で : ツール導入編

Ruby から Qt を利用するための qt4-qtruby を Visual C++ 2008 Express Edition で利用できるようにするまでの作業メモ。
長くなったので「ツール導入編」「qt4-qtrubyビルド編」に分けました。

Perl

  https://www.activestate.com/activeperl/downloads/

から ActivePerl-5.10.1.1006-MSWin32-x86-291086.zip をダウンロード。 ここでは D:\Perl 以下にインストールした。

CMake

  http://www.cmake.org/cmake/resources/software.html

から cmake-2.8.0-win32-x86.zip をダウンロード。適当な場所へ展開しておく。パスを通すのは後で。

Ruby

1.9.1-p243 を利用。VC++2008 でのビルド手順はこちらで。
OpenGLを利用したい場合はこちらで。

ここでは d:\ruby19 にインストールする。
qt4-qtruby ビルド時に、インクルードパスを2個以上設定する方法が無い。これでは
ruby19/include/ruby-1.9.1/i386-mswin32_90/ruby/config.h
を見つけられないため問題となる。今回はこの config.h を
ruby19/include/ruby-1.9.1/ruby/config.h
としてコピーしておくことで対処した。

Qt : インストール

  http://qt.nokia.com/downloads

から qt-sdk-win-opensource-2009.04.exe をダウンロード。ここでは D:\Qt にインストール。

OpenSSL

Qt の側は OpenSSL のサポートを外せるものの、qt4-qtruby 側でそれができない(ガード無しで QSslSocket を参照してしまっている)。

  http://gnuwin32.sourceforge.net/packages/openssl.htm

から入手。
> cd openssl-0.9.8h
> ms\32all.bat
でビルド。ヘッダーファイルは
d:/Qt/2009.04/qt/include/openssl
に配置。

※ヘッダーファイルがシンボリックリンクになっていて使えない場合は

  http://downloads.sourceforge.net/gnuwin32/openssl-0.9.8h-1-lib.zip

を展開した内容から include のみを
d:/Qt/2009.04/qt/include/openssl
に配置することで対処。

ライブラリ(out32dllフォルダにある ssleay32.lib, ssleay32.dll, libeay32.lib, libeay32.dll) は
d:/Qt/2009.04/qt/lib
にコピー。

Qt : ビルド

"Visual Studio 2008 コマンド プロンプト" から、
> cd d:\Qt\2009.04\qt
> configure -release -shared -qt-zlib -qt-gif -qt-libpng -qt-libtiff -qt-libmng -qt-libjpeg -no-qt3support -no-webkit -no-scripttools -openssl-linked OPENSSL_LIBS="-lssleay32 -llibeay32" -fast
> nmake

qt4-qtruby ビルド編」に続きます。

Nov 14, 2009

Kindle : Wishlist (2)

Kindle Store からのリストアップその2。

Game Physics Engine Development : Ian Millington
http://www.amazon.com/dp/B001C4MZC4/

原著購入済み。Kindleだと半額なのか。
小さな物理エンジンを作って処理の流れを納得するための本。David Eberly 氏のGame Physics よりも実践的でおすすめ。ただしそのまま規模の大きな問題に適用できるシステムではないので過剰な期待は禁物ですが。

この本こそ翻訳されるべきものだと思うのだけれど、そんな話は無いものでしょうかね。



Artificial Intelligence for Games (The Morgan Kaufmann Series in Interactive 3D Technology) : Ian Millington
http://www.amazon.com/dp/B001UN2W70/

上記 Game Physics Engine Development の著者による本。


Artificial Life Models in Software : Andrew Adamatzky, Maciej Komosinski
http://www.amazon.com/dp/B000QCRB3Q/


Dynamic Simulations of Multibody Systems : Murilo G. Coutinho
http://www.amazon.com/dp/B001CN9JM4/



The Pragmatic Programmer : Andrew Hunt, David Thomas
http://www.amazon.com/dp/B000SEGEKI/

訳書はこちら:
  • 達人プログラマー―システム開発の職人から名匠への道: アンドリュー ハント, デビッド トーマス, 村上 雅章

Nov 13, 2009

Kindle : Wishlist

Kindle Store から欲しい本等をリストアップ。

Real-Time Collision Detection (The Morgan Kaufmann Series in Interactive 3-D Technology) : Christer Ericson
http://www.amazon.com/dp/B001086MGM/
購入第一冊目。訳書はこちら:
  • ゲームプログラミングのためのリアルタイム衝突判定: Christer Ericson, 中村 達也
The Art of Multiprocessor Programming : Maurice Herlihy, Nir Shavit
http://www.amazon.com/dp/B00245A4U0/

最近日本語訳が出ました:
  • The Art of Multiprocessor Programming 並行プログラミングの原理から実践まで: Maurice Herlihy, Nir Shavit, 株式会社クイープ
Computational Geometry: Algorithms and Applications: Mark de Berg, Otfried Cheong, Marc van Kreveld, Mark Overmars
http://www.amazon.com/dp/B0019JDOGS/

訳書はこちら、だけど新品は手に入らないらしい…

  • コンピュータ・ジオメトリ―計算幾何学:アルゴリズムと応用: 浅野 哲夫, M.ドバーグ

Nov 3, 2009

Pro C# : Chapter 11 の単語リスト


Pro C# 2008 and the .NET 3.5 Platform, Fourth Edition の Chapter 11 : Delegates, Events, and Lambdas に出てきた表現・単語のメモ。
  • out of the box
    • adj. すぐに利用できる(箱から取り出したままの状態で)
  • crux
    • n. 最も重要なポイント
  • retrofit
    • v. (改良した)部品を組み込む
  • boilerplate
    • n. 定型的なソースコードの断片
  • prim and proper
    • adj. きちんとした、整った
  • showstopper
    • (コンピュータ分野限定、作業を止めてしまうような)不具合
    • ※通常だと「(ショーの進行を止めてしまうほどの)すばらしいもの」のことを指す