ruby-trunk-changes r33912 - r33923

MinGW でのビルドエラーの修正や Proc#arity の不具合修正などがありました。

kosaki:r33912 2011-12-01 07:17:48 +0900

configure で sys/prctl.h というヘッダの有無をチェックして、Linux で prctl(2) というシステムコールを呼んでタイマースレッドのプロセス名を "ruby-timer-thr" という名前に設定するようにしています。
これ prctl() を呼ぶ時に PR_SET_NAME の定義の有無も確認したほうがいいんじゃないでしょうか。man page を見ると PR_SET_NAME は 2.6.9 以降とありますし。

nobu:r33913 2011-12-01 10:31:41 +0900

新規追加されたファイルの svn property の設定。

nobu:r33914 2011-12-01 10:32:02 +0900

gcc のオプション -fstack-protector をつけてコンパイル&リンクした static library とのリンク時にも -fstack-protector オプションが必要なようで、LDFLAGS にも追加するようにしています。 [ruby-core:41387] [Bug #5686]
ということは ruby *を*組み込もうとするプロジェクトも全体が -fstack-protector が必要になるんですかね。結構影響が大きそう。

nobu:r33915 2011-12-01 14:43:22 +0900

Bigdecimal の Real 構造体の仮数部の配列 frac は可変長の配列で宣言上のサイズは 1 だけど実際は必要なサイズが確保されるという使われかたなのですが、clang でここの第2要素に決め打ちでアクセスしているところで警告メッセージが出てしまうというころで gcc かどうかで宣言する時の配列サイズを変えています。 [ruby-core:41418] [Bug#5693]
うーんでもこれだと gcc の時はサイズ0 でそうでない時は 1(これまでと同じ)なので、これでは clang の警告は収まらないような気がするんですがどうでしょうか。
[2011-12-02 追記]教えていただいたところによると clang でも __GNUC__ は定義されるのだそうです。で配列サイズが 0 で宣言されていればコンパイラが可変長の配列であることを認識してくれるので警告が出ないということでしょう。[/追記]

nobu:r33916 2011-12-01 14:48:05 +0900

include/ruby/subst.h で Windows 版での代替関数(rb_w32_???)への #define を引数の記述つきの関数マクロから関数名だけでの置換に変更しています。きちんと追跡できていないのですが、MinGW でのビルド時にうまく置換が行なわれず存在する(alias している)関数の HAVE_??? が定義されず拡張ライブラリのビルド時に代替の実装と衝突していたようです。 [ruby-core:41370] [Bug #5681]

nobu:r33917 2011-12-01 15:19:57 +0900

そして r33916 のマクロの宣言の引数をなくす修正はすぐ revert されています。 vm.inc の命令語などと同じ名前の関数などがあって変換しすぎてしまうようです。 send が YARV の send 命令とかぶっていそうですね。

nobu:r33918 2011-12-01 16:20:20 +0900

r33834 の mkmf.rb が -Wmissing-declarations/-Wold-style-definition 時の警告の出ないソースを吐かせる修正で間違ったソースを出力するようになっていた不具合を修正。

nobu:r33919 2011-12-01 16:59:21 +0900

拡張ライブラリ socket の extconf.rb で inet_ntop() 等のチェックをする際に inet_ntop という関数名だけ渡すと前述のようにマクロの置換がうまく効かずに検出に失敗するので、引数つきの記述でチェックをするようにしています。なるほどー mkmf.rb での関数検出時にうまくいかったということだったんですね。 [ruby-core:41370] [Bug #5681]

nobu:r33920 2011-12-01 17:45:22 +0900

ext/socket/extconf.rb でチェックに使っている C のソースコードgcc の -Wmissing-declarations と -Wold-style-definition で警告が出ないように修正しています。

marcandre:r33921 2011-12-01 20:46:31 +0900

1.9 から導入された lambda の新しい ->(){ ... } という記法では仮引数に ->(a=0) { ... } のように省略可能引数を指定できるのですが、その時に Proc#arity が返す値が省略可能引数より前の引数の数になってしまうので、 rest 引数と同様に負の値を返すようにしています。 Proc#arity の時に元々省略可能引数はなかったのでその考慮が漏れていたようですね。確かにこの修正で -(省略できない引数の数+1) が返ってくるようになりました。 [ruby-core:41431] [Bug #5694]

akr:r33922 2011-12-01 22:31:58 +0900

io.c の linux_get_max_fd() のローカル変数 n を np に改名するリファクタリング

nagachika:r33923 2011-12-01 23:28:42 +0900

pthread_pthread.c のタイマースレッドからの prctl(PR_SET_NAME, ...) は PR_SET_NAME が定義されている時だけ呼ぶようにしています。