ruby-trunk-changes r30545 - r30551

昨日の gem_prelude の変更にやはりというか追加の変更が入っています。その結果現在(r30549 以降)は RubyGems パッケージを利用するために明示的に require "rubygems" が必要な状態になっています。この状態は永続的な変更なのでしょうか。しばらく rubygems の問題がどう決着するのか ruby-core の議論に注目です。っていうかこの件も ruby-dev だけ読んでたら何が起きてるのかわからないですよね。 CRuby の開発が日本語偏重ともはや FUD です。

akr:r30545 2011-01-14 23:26:27 +0900

vm_method.c の関数マクロの引数にかっこをつける修正です。

nobu:r30546 2011-01-15 09:42:14 +0900

ruby/io.h で rb_io_bufwrite() や rb_io_get_io()、rb_io_check_char_readable()、rb_io_check_byte_readable() などの関数プロトタイプが宣言されていなかったので追加。

nobu:r30547 2011-01-15 09:48:16 +0900

r30538 で --disable-gems の指定有無をグローバル変数 $disable_rubygems を使って gem_prelude に渡していたのをグローバル変数名前空間に影響するのを嫌って Gem モジュールを定義することで指定するようにしています。しかしこの変更もすぐに上書きされてます。

nobu:r30548 2011-01-15 10:00:09 +0900

空の ???_prelude.rb ファイルのロードをスキップするようにしています。

nobu:r30549 2011-01-15 10:04:16 +0900

gem_prelude.rb は空っぽにしてしまって、autoload 機能を使って Gem が利用された時に require "rubygems" するようにしています。
しかし、これだと

require "rack"

みたいにいきなり RubyGems でインストールしているライブラリを require すると失敗してしまいますね。

require "rubygems"
require "rack"

とすれば動きます。

nobu:r30550 2011-01-15 11:57:36 +0900

mkmf.rb で gcc の時は -Werror=implicit-function-declaration が使えれば RbConfig["warnflags"] に追加するようにしています。r30546 で関数のプロトタイプ宣言を追加したように、抜けがあると引数や戻り値が暗黙のうちに int として扱われてしまうので sizeof(int) != sizeof(void *) のような環境で拡張ライブラリにおかしなポインタが渡ってしまうなどのバグの元になるので警告を出すようにしているのだと思います。最近たまたまそういうケースを見ました。また mkmf のテストを整理しています。

nobu:r30551 2011-01-15 12:01:19 +0900

Net::SMTP のテストで StringIO に依存しているので require を追加し、OpenSSL が未定義の時にテストをスキップするようにしています。