ruby-trunk-changes r37010 - r37017

今日は主に mkmf.rb の変更がありました。生成する Makefile でできるだけパスの直書きのかわりに変数参照を利用するようにしたり、タイムスタンプファイルを使うようにしたり、空白を含むパス上でビルドできるようにしたり、など。

eregon:r37010 2012-09-23 02:36:47 +0900

r36993 で追記された Complex の rdoc のサンプルと説明を修正しています。 +, -, * などの四則演算で引数が Complex だった場合を考慮していない書きかただったり、余分な説明でかえってわかりにくくなっていたのを削ったりという感じです。

svn:r37011 2012-09-23 02:36:52 +0900

version.h の日付更新。

nobu:r37012 2012-09-23 21:42:29 +0900

lib/mkmf.rb で mkintpath というメソッドの存在チェックをするために defined? 文を利用していたのを method_defined? を利用してメソッドにのみ反応するようにしています。もっとも他の可能性はローカル変数だと思うのであまり違いはないとは思いますが。 ([追記]この部分は module 定義の中で、mkintpath はインスタンスメソッドとして定義されているものなので、defined? では検出できないので Module#define_method を使うようにするということでした。)

nobu:r37013 2012-09-23 21:44:30 +0900

cygwin 上で cygwin 以外のプラットフォーム向けのクロスコンパイルをする場合に cygpath というコマンドを使ったパスの変換を mkintpath メソッドを定義することで利用できるようにして、RbConfig::CONFIG の "prefix" がつくパスをこれで変換して定義するように Makefile を生成しています。

nobu:r37014 2012-09-23 21:45:21 +0900

lib/mkmf.rb で LIBPATHFLAG を初期化する時に -L"%s" とクオートをつけていたのをはずしています。libpathflag メソッドで LIBPATHFLAG を利用する時に %s に埋め込む値に対して quote メソッドというのを呼んでクオート済みだからです。

nobu:r37015 2012-09-23 21:46:48 +0900

lib/mkmf.rb で $arch_hdrdir を構築する時に $hdrdir をその時点で展開していたのを "$(hdrdir)" というマクロ参照のままで作成するようにしています。また Makefileruby という変数に格納するパスの $(bindir) と一致する部分を $(bindir) という変数参照に置換しています。

nobu:r37016 2012-09-23 21:48:15 +0900

lib/mkmf.rb が生成する Makefile でもディレクトリの依存関係にタイムスタンプファイルを利用するようにしているらしいです。しかしどうも新しいルールのの読みかたがよくわからず……。 colon がない?

nobu:r37017 2012-09-23 21:52:01 +0900

lib/mkmf.rb でビルドディレクトリに空白が含まれていた時のことを考慮してパスをエスケープするようにしています。GNU make などはエスケープしないといけないらしいのですが、nmake は仕様が違うのでまた別の対処をしないといけないそうです。 ChangeLog の unspace の説明は unescape -> escape でしょうか。 [ruby-core:47565] [Bug #7036]