ruby-trunk-changes r40767 - r40790

今日は主に verconf.h の生成方法の変更のためビルドプロセス回りでいろいろと変更がありました。またコンパイラの最適化避けの追加もありました。ビルドプロセス難しいです。

nobu:r40767 2013-05-16 01:08:48 +0900

r40760 の警告除去を一部 revert しています。 変数の宣言に volatile を付けただけなのですが test/ruby/test_thread.rb の TestThread#test_stack_size のテストがタイムアウトするようになってしまったからだそうです。マシンスタックの消費量が増えるからですかね。

svn:r40768 2013-05-16 01:08:56 +0900

version.h の日付更新。

tenderlove:r40769 2013-05-16 01:25:39 +0900

r40753 で Psych::Visitors::YamlTree.new の引数が省略された時の deprecated 警告を -w オプションが指定された時だけ出力するようにしています。

nobu:r40770 2013-05-16 01:44:55 +0900

mswin 版で nmake を使ったビルドのエラーの対処。nmake だと rule 部に使えない変数を使っていたのをやめるのと win32/Makefile.sub で verconf.h を生成するかわりに verconf.in を生成するようにしています。

nobu:r40771 2013-05-16 01:50:05 +0900

verconf.h の依存関係から $(PREP) を削って、rbconfig.rb が変更されないと作りなおさなくてもいいようにしています。 $(PREP) って何かちょっと気になったのですがよく調べていません。 configure.in で $(arch)-fake.rb として定義されているのですけどね。
[追記]なかださんに教えてもらいました。 クロスコンパイル時は fake.rb ですが通常は miniruby を指すそうです[/追記]

nobu:r40772 2013-05-16 01:51:54 +0900

r40753 および r40769 の続きで Psych::Visitors::YamlTree.new の引数省略時の警告メッセージに埋め込むクラス名が間違っていたのを修正。クラスメソッドなので self が既に Psych::Visitors::YamlTree クラスなので self.class は Class になってしまっていたようです。 でもこれ class じゃなくて self にすべきですよね。後ほど修正されています。

akr:r40773 2013-05-16 02:04:03 +0900

拡張ライブラリ socket の depend ファイルに ifaddr.o の依存関係を追記しています。ソースファイル名が間違っていますが、これは r40789 で修正されています。

nobu:r40774 2013-05-16 02:37:55 +0900

r40763 で ChangeLog のささださんのエントリのヘッダ(?)が削られていたのを戻しています。

ko1:r40775 2013-05-16 03:07:12 +0900

gc.c の NODE 構造体を生成する*1関数 rb_node_newnode() でも rb_newobj() のかわりに r40764 で導入された newobj_of() を利用するようにしています。

tenderlove:r40776 2013-05-16 05:48:15 +0900

r40772 で Psych::Visitors::YamlTree.new の警告のメッセージがエラーになっていたのを修正しています。 [ruby-core:55011] [Bug #8410]

nobu:r40777 2013-05-16 13:13:22 +0900

make に -j オプションをつけて並列ビルドした時にビルドエラーが発生するので verconf.h の依存関係で rbconfig.rb ではなくて $(RBCONFIG) に依存するようにしています。コミットログによると $(RBCONFIG) はタイムスタンプファイルを参照するみたいですね。

nobu:r40778 2013-05-16 13:13:36 +0900

tool/generic_erb.rb というビルド時にテンプレートからヘッダやらソースファイルやらを生成するのに使っているスクリプトデバッグ用に -x/--source というオプションを追加しています。 ERB の展開結果じゃなくてその展開結果を生成するために ERB が生成した ruby スクリプトのソースを表示するようにするオプションです。

nobu:r40779 2013-05-16 13:13:40 +0900

verconf.h を生成する方法を変更して template/verconf.h.in を作って tool/generic_erb.rb で展開して作るようにしています。r40758 で追加した tool/shvar_to_cpp.rb というツールは不要になったので削除しています。

usa:r40780 2013-05-16 14:59:58 +0900

r40779 で追加した template/verconf.h.in のクオート漏れを修正。と、思いきやこれは typo ではなかったようで次の r40781 で revert されています。template/verconf.h.in は verconf.h.in のテンプレートなので verconf.h からさらに verconf.h にする時にここの変数参照は展開されて最終的に C 言語の文字列になるからこれでいいってことですね、きっと。

nobu:r40781 2013-05-16 16:15:45 +0900

というわけで r40780 を revert しています。

nobu:r40782 2013-05-16 16:15:48 +0900

もう追う気力がなくなってきたのでコミットログから内容を推測しますが、configure で --prefix オプションが指定されない時に(もしくはデフォルトと同じパスを指定された時も?)、変数の直接書き換えてしまってうまくいってなかったところがあったのを対処しているみたいです。 どこで入った問題でしょうか。最近の変更のどれかだと思うのですが。

nobu:r40783 2013-05-16 16:20:00 +0900

r40770 で verconf.h の生成から変更した verconf.h.in の生成のルールをさらに不要になったため(tool/generic_erb.rb を使った方法で Windows 版も同じ方法で生成できるようになったから?) win32/Makefile.sub から削除しています。
また同じく win32/Makefile.sub の config.status 生成する時に vendorarchdir を置換する変数名が ${vendirlibdir} になっていたので ${vendorlibdir} に修正しています。 r39132 で入って r39201 で少し変更された行なので 2.0.0 にも入っていますね。ここはバックポートしないと...というわけでチケット化しておきました(#8413)。

nobu:r40784 2013-05-16 16:54:04 +0900

make に loadpath っていう $LOAD_PATH を表示するターゲットがあったそうで(知らなかった)、しかし miniruby で $: を表示するというものだったので、完全なパス群が表示されていなかったので、loadpath.c をプリプロセッサにかけて展開後に sed でロードパス部分を切り出すというかなり力技な方法に切り替えています。またこのため Windows 版では cmd.exe で実行できるようにするため common.mk から Makefile.in と win32/Makefile.sub に分離しています。

naruse:r40785 2013-05-16 17:17:00 +0900

Debian 上での CI でたまに crash しているのを避けるため vm_eval.c の rb_catch_obj() で引数の t を volatile VALUE 型に宣言した変数に格納するようにしています。実験的な対処のようですがコンパイラの最適化避けっぽいですね。

xibbar:r40786 2013-05-16 19:01:07 +0900

標準添付ライブラリ cgi の lib/cgi/util.rb で String を ASCII-8BIT エンコーディングに変更するため dup.force_encoding("ASCII-8BIT") していたのを 2.0.0 から導入された String#b メソッドを使うようにリファクタリングしています。チケットでは cgi と erb のパッチが提示されていましたが、このコミットは cgi のぶんだけです。 [ruby-dev:47336] [Feature #8394]

xibbar:r40787 2013-05-16 19:14:45 +0900

標準添付ライブラリ cgi で ASCII-8BIT エンコーディングを指定するために文字列指定を使っていたところを Encoding::ASCII_8BIT 定数を使うように変更しています。こっちのほうが文字列の名前から Encoding オブジェクトに変換するステップが省けるので効率的です。

xibbar:r40788 2013-05-16 19:26:57 +0900

r40787 と同じく標準添付ライブラリ cgi の lib/cgi/util.rb でもエンコーディングの指定に定数を使うようにしています。

akr:r40789 2013-05-16 19:29:05 +0900

r40773 で追加した拡張ライブラリ socket の ifaddr.o の依存関係のファイル名の間違いを修正しています。

nobu:r40790 2013-05-16 22:35:44 +0900

template/verconf.h.in で RbConfig::CONFIG['exec_prefix'] の変数参照が .h.in から .h に変換する時に展開されないようにしている、のだと思います。多分。うーん template から .h.in にする時に、かも。
[追記]なかださんに教えていただきました。--enable-load-relativeのときにできるだけ相対パスになるように、$(exec_prefix)に一致するパスをRUBY_EXEC_PREFIXに置換している、のだそうです。ほうほう。[/追記]

*1:NODE 構造体は主に Ruby スクリプトをパースした結果の AST を構成する tree 構造のノードで、たまに他の用途にも流用されていますが、Ruby レベルでは意識されることはない内部的な構造体です。しかしながら Ruby のオブジェクトと同じように struct RVALUE として確保されて GC でメモリ管理されています