ruby-trunk-changes r39242 - r39257

今日は拡張ライブラリ socket の extconf.rb まわりのリファクタリングと、FreeBSD などで RbConfig::CONFIG の CFLAGS などに本体のビルド時に使われるチェックの厳しいコンパイラオプションの指定が入りこんで外部の拡張ライブラリのビルドがエラーになることがあった不具合を修正しています。

akr:r39242 2013-02-15 00:17:49 +0900

拡張ライブラリ socket でソケットアドレス構造体の sa_len メンバの値と用意されているバッファサイズが一致しているかをチェックしている処理を VALIDATE_SOCKLEN() マクロとして切り出して、sockaddr 構造体に sa_len メンバがあるかどうかによってチェックの有無を一括で切り替えられるようにしています。これまで sa_len がないということはなかったのだと思いますけど。

svn:r39243 2013-02-15 00:17:54 +0900

version.h の日付更新。

kosaki:r39245 2013-02-15 05:01:37 +0900

Process.setsid のテストでタイミングによって子プロセスが終了した後で Process.getsid を呼ぶと Errno::ESRCH を返すことがあったので、子プロセスで sleep させて終了前に Process.getsid が呼べるようにしています。 チケットのコメントによると getsid(2) で Zombie 状態(終了したけどまだ親プロセスが wait していない)のプロセスに対して実行して ESRCH が返るのは Mac OS X でのおかしな挙動って感じみたいなので、少なくとも Linux では session id が取れるんでしょうね、多分。 [ruby-core:52126] [Bug #7826]

akr:r39246 2013-02-15 07:08:28 +0900

拡張ライブラリ socket の SA_LEN() という関数マクロはもう利用している箇所がなくなったので定義を削除しています。

drbrain:r39247 2013-02-15 07:49:48 +0900

RubyGem のバージョンを 2.0.0 に、RDoc のバージョンを 4.0.0 に更新しています。リリースに向けてのバージョン番号のみの更新です。

akr:r39248 2013-02-15 08:14:22 +0900

拡張ライブラリ socket の sa_len や ai_addr の設定を INIT_SOCKADDR() マクロとして定義して再利用するようにリファクタリングしています。

akr:r39249 2013-02-15 12:27:05 +0900

r39248 で追加した INIT_SOCKADDR() の不要な(?)キャストを削除しています。

akr:r39250 2013-02-15 12:36:05 +0900

拡張ライブラリ socket の extconf.rb で struct sockaddr_storage のメンバ ss_family をチェックした時に -DDHAVE_SOCKADDR_STORAGE をコマンドラインオプションに追加して、それを使って条件コンパイルしていたところを、have_type() で構造体の存在チェックをしてその結果の HAVE_TYPE_STRUCT_SOCKADDR_STORAGE を使うように修正しています。

nobu:r39251 2013-02-15 16:54:38 +0900

拡張ライブラリ socket の ai_addrlen を受ける引数や変数の型を size_t から socklen_t に修正しています。

nobu:r39252 2013-02-15 18:24:50 +0900

mkmf.rb の try_run でコンパイルした実行形式ファイルを実行してみるところでクロスコンパイル中はビルド環境では形式やアーキテクチャが違って動かないので実行する前に例外を発生させるようにしています。

nobu:r39253 2013-02-15 18:31:16 +0900

win32/win32.c のスタイルの修正のみ。

akr:r39254 2013-02-15 20:30:19 +0900

r39248 で導入した拡張ライブラリ socket の INIT_SOCKADDR() マクロの第1引数にローカル変数(自動変数)の & 演算子による参照をとったものを渡すとコンパイラの aliasing の警告が出力されるため(たぶん)それを避けるために一時的に変数に代入する INIT_SOCKADDR_IN() というマクロを導入して、そのようなケースではこちらを利用するようにしています。 またそのため一旦削除した SET_SIN_LEN() マクロを復活させています。

knu:r39255 2013-02-15 22:25:28 +0900

r38342 で FreeBSD でバックトレース取得のためコンパイラオプションに -fno-omit-frame-pointer を付加するようにした時に CFLAGS や optflags の置換時に変数の展開順序を変化させてしまっていたため、RbConfig::CONFIG に格納される CFLAGS などを変数展開前の形に戻す処理がうまく置換できなくなってしまっていました。(@knu さんに教えていただきました。ありがとうございます!)
このため外部の拡張ライブラリのビルド時に ruby のビルド時と同じ、チェックの厳しいコンパイルオプションが使われてビルドエラーになることがあったのでconfigure での変数置換の順序を修正しています。 [ruby-dev:46105] [Bug #7101]

akr:r39256 2013-02-16 00:20:34 +0900

拡張ライブラリ socket で have_header でチェックして存在していたヘッダを保持しておいて、その後の have_func, have_type, have_struct_member などで渡すことで利用できるヘッダを全て include してチェックするようにしています。

svn:r39257 2013-02-16 00:20:38 +0900

version.h の日付更新。