[ruby-trunk - Bug #7101] 拡張ライブラリの質問

Issue #7101 has been updated by knu (Akinori MUSHA).

configure.inのコメントに説明を書いたのですが、config.statusに書き出すCFLAGSの値を “${cflags} …”
のように置換(いわばunexpand)する処理が下の方にあるんですが、こいつはCFLAGSの値が $optflags $debugflags
$warnflags という並びになっていることが前提になっています。

修正前のコードでは、CFLAGSとoptflagsそれぞれの末尾に -fno-omit-frame-pointer
に追加してしまっていたのでこの置換が機能せず、rubyをコンパイルするとき用のCFLAGSの値、すなわちoptflags/debugflags/warnflagsが展開された状態の値がconfig.statusに書き込まれ、それがrbconfig.rbに反映され、mkmf.rbで生成されるMakefileにもその値が入り、C拡張のビルド時に(warnflagsに入っている)
-ansi -std=iso9899:199409 が指定されてしまっていました。

本修正は、CFLAGSの値から先頭の $optflags 部分を除去し、optflagsに -fno-omit-frame-pointer
を追加し、改めてCFLAGSの先頭に $optflags を追加するようにすることで、並びを保ち置換を機能させるようにするものです。

Bug #7101: 拡張ライブラリの質問

Author: ko1 (Koichi Sasada)
Status: Open
Priority: Normal
Assignee: mame (Yusuke E.)
Category: build
Target version: 2.0.0
ruby -v: trunk

ささだです.

trunk では,拡張ライブラリをビルドするとき,下記のようなオプションがつ
きます.

gcc -I. (snip) -Wall -Wextra -Wno-unused-parameter -Wno-parentheses
-Wno-long-long -Wno-missing-field-initializers -Wunused-variable
-Wpointer-arith -Wwrite-strings -Wdeclaration-after-statement
-Wimplicit-function-declaration -ansi -std=iso9899:199409 (snip)

-ansi -std=iso9899:199409 のあたりで,inline や // でのコメントアウト
を利用している拡張ライブラリがビルド出来ない感じです.
(inline については,ruby.h を include していれば適切に入れ替えられるん
ですが,ruby.h を include していない *.c をビルドする可能性もあり,そこ
でこけてる感じです)

これは,仕様でしょうか.ぎゃっという人は多そうなので,拡張ライブラリの
CC のオプションは,以前に外した方が良さそうに思いますが.

目の前でマンガを読んでいる須藤さんから

何とかしろと言われたのでご相談した次第です.


// SASADA Koichi at atdot dot net