|▽ ̄)ノ なページ再帰 - Gonzui

もろもろ準備中。

Gonzui.setup.rb


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 版です。

ビルド


ソース


todo

mingw でビルドしたファイルのダウンロード。 todo

必要な GNU Tools


MinGW のサイトからダウンロード&インストールしておいてください。 MSys 環境は必要ありません。
flexlangscan 関係のビルドに必要です。
regexMinGW flex が使用しています。
MSysMinGW flex が使用しています。
GNU Makeテストの一部で使用します。 msvc 環境でのビルドには必要ありません。

依存ライブラリ


バージョンは僕が試したもの。
Ruby/BDB 0.6.5Berkely DB の Ruby インターフェイス。
Berkely DB 4.7.25release ascii ビルドの dll が必要。

各々のインストール先は異なります。 --winstandalone した場合は bin に dll を置き、lib/i386-* に so ファイルを置きます。
Berkely DB のビルド

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

ruby/bdb のビルド

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

Gonzui のビルド

一般的なビルド&インストール手順です。必要なら 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>

setup.rb オプション

--noounistdwindows に 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 で空白を含むディレクトリを指定できない。

不具合報告


このページのコメントもしくは geocities のゲストブックに書き込んでください。

todo


行う、わけではなく出来ればいいなあ位の軽い気持ち。
  • 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/>

更新履歴


2009/2/16mon メモに追記。 geocities にソースを上げ忘れていたことに気づく。
2008/12/12fri もろもろ追記。
2008/11/13thu ページ作成。