Issue #6519 has been updated by mame (Yusuke E.).
Status changed from Open to Assigned
Assignee set to usa (Usaku NAKAMURA)
ruby -v set to -
これって [ruby-dev:45694] を見るとバックポート以外決着がついてるように見えるのですが、
今更チケット化されたのは何かやることが残っているのでしょうか。
よくわからないままに usa さんにアサイン。
–
Yusuke E. [email protected]
Bug #6519: space in COUTFLAG
Author: taca (Takahiro K.)
Status: Assigned
Priority: Normal
Assignee: usa (Usaku NAKAMURA)
Category:
Target version:
ruby -v: -
こんにちは。
mkmf.rbで作成するMakefileには COUTFLAG や OUTFLAG といったmakeの変数が
定義されます。その内容が意図した結果となっていないのではないかと思いま
した。殆どの環境で実害は出ていないと思います。
きっかけは4月の終わりに、Solaris 9上のpkgsrcでruby193-baseのコンパイル
がエラーとなるという報告がありました。報告された方に答えつつ確認を求め
た事項が少々的外れだったのですが、症状としてはmakeから、以下を実行して
エラーになるという内容です。
cc …(いっぱいオプション) -fPIC -obug.o -c bug.c
ここで、ポイントは -o オプションと出力先のファイル名の間にスペースがな
いことです。Solaris 9のas(1)は、ここにスペースがないとエラーとなるよう
です。(Solaris 10では問題とはならないことは確認しています。)
上記のコマンドが来た元を追うと、
- 生成されたMakefile(例えば、ext/-test-/bug-3571/Makefile)では、
.c.o:
$(ECHO) compiling $(<)
$(Q) $(CC) $(INCFLAGS) $(CPPFLAGS) $(CFLAGS) $(COUTFLAG)$@ -c $<
といったルールがあって、$(COUTFLAG)と$@の間にスペースはありません。
(スペースがあってはならない環境もあるのでしょうか?)
- 同じMakefileで COUTFLAGS は、
COUTFLAG = -o
と設定されています。
- これらのMakefileを生成する元のlib/mkmf.rbで1.については、
COMPILE_C = config_string(‘COMPILE_C’) || ‘$(CC) $(INCFLAGS)
$(CPPFLAGS) $(CFLAGS) $(COUTFLAG)$@ -c $<’
というのが元となっていて、まぁ、これはそのまんまです。
- lib/mkmf.rbで2.については、
COUTFLAG = #{COUTFLAG}
という文字列中で展開している行が存在していて、Rubyの定数COUTFLAGが
元で、さらにこの定数はlib/mkmf.rbの先の方で、
COUTFLAG = CONFIG[‘COUTFLAG’]
として定義しています。
- CONFIG[‘COUTFLAG’]はrbconfig.rbが元ですが、これはconfigure時に由来
していて、config.logで確認すると、
COUTFLAG='-o ’
となっています。
と、いうわけで改めて2.の部分を見ると、COUTFLAG に代入している行で -o
の後ろにスペースが1つあるのですが、Makefileの世界ではこのスペースは捨
てられてしまいます。
話が長くなりましたが、1.や3.のルールでは$(COUTFLAG)と$@の間にはスペー
スが入ると期待していたのか、全然気にしていないのか、どうなんだろうと思っ
た次第です。
A. 元々、$(COUTFLAG)と$@の間にスペースを入れてはいけない理由はない。
B. $(COUTFLAGS)の後ろにスペースがあると思っていた。
pkgsrcが対象とするプラットフォームでは、A.に基づいても良さそうに思えま
すが、少し気になったのでメールにまとめてみました。
–
神戸 隆博 (かんべ たかひろ) at 仕事場