もろもろ準備中。
Gonzui はコード リーディングを手助けするツールです。
このページでは setup.rb に対応した gonzui の配布とビルド、依存ライブラリのビルド、諸問題、 setup.rb 移行メモを説明します。
Windows では Gonzui のビルドにさまざまな障害があります。 Gonzui は GNU Tools べったりであるため、 msvc ではビルドが困難です。不可欠な GNU Tools の使用はともかく、コンパイル オプションなども gcc 互換を想定して作られています。
Ruby では拡張ファイルのビルドに専用のツールを用意しています。それを使用すれば makefile やコンパイル オプションの面倒を見てくれます。さらに setup.rb を使用すれば複雑なパッケージ構成も楽にビルドできるようにります。
autoconf/automake および gcc 依存を避け、 Ruby が提供するビルド プロセスに適合するよう setup.rb/extconf に置き換えました。
使用したソースは 2008/9 初旬の cvs 版です。
MinGW のサイトからダウンロード&インストールしておいてください。
flex | langscan 関係のビルドに必要です。 |
regex | MinGW flex が使用しています。 |
MSys | MinGW flex が使用しています。 |
GNU Make | テストの一部で使用します。 msvc 環境でのビルドには必要ありません。 |
バージョンは僕が試したもの。
Ruby/BDB 0.6.5 | Berkely DB の Ruby インターフェイス。 |
Berkely DB 4.7.25 | release ascii ビルドの dll が必要。 |
各々のインストール先は異なります。 --winstandalone した場合は bin に dll を置き、lib/i386-* に so ファイルを置きます。
Visual Studio が使えない場合は code::blocks を使用して release ascii をビルドする。 MinGW では MSys から cd build_unix && ../dist/configure --enable-mingw 。 todo
msvc & code::blocks でビルドする場合(大雑把な説明。書き換えろ>自分 todo)。 db_dll.dsp を読み込ませてプロパティを開き release ascii の search directories -> linker から $(OUTDIR) を削除する。リンカに /def:libdb.def を渡す。 release ascii をビルド。
todo
extconf.rb の conftest で Berkely DB の dll を呼び出すのでパスの通った場所に dll を配置しておく。
msvc の場合(大雑把な説明。書き換えろ>自分 todo)。ライブラリの検索に pc-unix な名前規則を前提していたり、 ruby のスタティック ライブラリをリンクしようとしたり、面倒です。前者はシェアードなライブラリをコピーしてごまかす。後者は --with-db-version オプションや同様なファイルコピーでごまかす。
ruby extconf.rb --with-db-include=<Belkely DB>\dbinc --with-db-lib=<Belkely DB>\build_windows\Release_ascii --with-db-version=_static cd src nmake
テストなどで BDB オブジェクトを参照した所でエラーになる場合は bdb_features.h の HAVE_ENV_OPEN_DB_CONFIG を寝かせてリビルドする。
todo
一般的なビルド&インストール手順です。必要なら install する前に ruby setup.rb test してください。
ruby setup.rb config ruby setup.rb setup ruby setup.rb install
windows では --nounistd オプションをつけます。
ruby setup.rb config --nounistd ruby setup.rb setup ruby setup.rb install
windows で ruby と分離したい場合は --winstandalone オプションをつけます。 install でインストール先を指定します。
ruby setup.rb config --nounistd --winstandalone ruby setup.rb setup ruby setup.rb install --prefix=<install directory>
--noounistd | windows に unistd.h ヘッダがないため、それへの対応。 config 時に指定する。 |
--winstandalone | インストール先のディレクトリ構成を、 windows に移植された unix ツールと似たディレクトリ構成にする。 config 時に指定する。 |
- setup.rb に手を入れた。
- 各パッケージの下にある test の {pre, post}_test.rb を呼び出すようにした。
- gonzui が使用する作業ディレクトリを変更した。
- /tmp 決めうちではなく ENV['temp'] の値を使用する。
- gonzui-import でドライブレターつきのアドレスを指定できるようにした。
- langscan のモジュール名を modulename.txt ファイルで指定するようにした。
- /dev/null へのリダイレクトを柔軟にした。
- msvc/mingw/bccwin では nul デバイス ファイルを使用するよう変更した。
- doc, catalog ディレクトリを移動した。
- デフォルトでは share/gonzui 以下にインストールする。
- gonzuirc ファイルの検索場所を追加した。
- 起動したスクリプトが保存されているディレクトリの gonzuirc も探す。
- ユニット テストで autorunner を使うようにした。
- テスト スクリプトを test_* にリネーム。
- しかし autorunner では segv する...(ruby 1.8.7 (2008-08-11 patchlevel 72) [i386-mswin32])
- git に対応したかもしれない。
- ユニット テストが通ることは確認した。 gonzui-import は試してない。
- pc-unix 環境で試してない。
- mingw 環境で試してない。
- gonzui-db, gonzui-remove, gonzui-search, gonzui-update を試してない。
- perl ファイルのインポートを試してない。他の言語も不十分...
- ocaml のテストを実行してない。
- apt-get
, svn, cvsのテストをしてない。 -
rpmspec あたりに問題があるかもしれない。 test/rpmspec を実行すると警告が出る。 -
gonzui-import で空白を含むディレクトリを指定できない。
行う、わけではなく出来ればいいなあ位の軽い気持ち。
- git 対応。
- doc2txt を使用した pdf, doc, xls などへの対応。
-
gonzui-import のターゲット パスの半角空白を含むパスへの対応。
- ripper.c がリンクできない。
- Ruby 本体の開発用ライブラリのインクルードファイル env.h で extern している行があるが、これは RUBY_EXTERN にするべき。
よくでくわす問題。
extern __declspec(dllimport) でインポートすればリンクできる。 RUBY_EXTERN はそれのマクロ。
- cd xxx; unzip yyy のような形では実行できない。
- コマンド プロンプトはセミコロン(;)をパラメータの区切りとして解釈する。
cd xxx && unzip yyy にするべき。
- cd xxx ではドライブが変わらない
- cd /d xxx でドライブも変わる。
- cvs -d c:/temp import 〜 ではインポートできない。
- MSys CVS はパスに含まれるスラッシュ(/)をスイッチと解釈してしまう。
Gonzui::Util.shell_escape を拡張し、スラッシュ(/)をバックスラッシュ(\)に置き換える。
- URI.parse と file プロトコル
- file://c:/temp をパースすると file://c/temp に変換される。
file:///c:/temp では file:/c:/temp に変換される。
svn は file:///c:/temp の形でなければ受け付けてくれない( 1.5.3 (r33570) )。
Gonzui::Util.shell_escape を拡張して間に合わせる。
- grep -H '^ foo(' が失敗する。
- コマンド プロンプトはハット記号(^)を特殊な意味で解釈する。
ダブル クオート内では無効になるためダブル クオートに変更する。 grep -H "^ foo(" 。リテラルは % 記法で。 %Q;〜;
- &block で受け取ったブロックから return できない。
- ruby proc の仕様変更。 langscan のテストで問題になっていた。詳しく調べてない。
- setup.rb の --prefix は config と install で意味が異なる。
- config の --prefix は実行環境のアドレス。ここで実行されると想定している。
install の --prefix はコピー先のアドレス。
- setup.rb で --prefix した場合に下位ディレクトリを絶対アドレスで連結しようとする。
- windows では d:\temp\gonzui\d:\ruby\ のようになる。
expand_path しているのが原因。
ext 系のインストール先もあまり考慮されてない。ちゃんと追え>自分 todo
- URI.parse まわりの空白文字の対処法。
- File.expand_path して /^([a-zA-Z]:|\\\\)(.*)$/ にマッチする場合は
URI::Generic.new( "file", nil, $1, nil, nil, $2, nil, nil, nil, false )
\\ って使えるのかなあと思いつつ、調べてない。 todo
- gonzui: ソースコード検索エンジン <http://gonzui.sourceforge.net/index.html.ja>
- 総本山。
- gonzui-win32: swiming in windows <http://soutaro.com/gonzui-win32/index.ja.html>
- exerb でまとめた windows バイナリ。
- MinGW
- Minimalist GNU for Windows <http://www.mingw.org/>| GNU Tool の windows port のひとつ。
- setup.rb <http://i.loveruby.net/ja/projects/setup/>
タグ
コメントをかく