Project

General

Profile

Actions

Bug #6519

closed

space in COUTFLAG

Added by taca (Takahiro Kambe) almost 12 years ago. Updated almost 12 years ago.

Status:
Closed
Target version:
-
ruby -v:
-
Backport:
[ruby-dev:45650]

Description

こんにちは。

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では問題とはならないことは確認しています。)

上記のコマンドが来た元を追うと、

  1. 生成されたMakefile(例えば、ext/-test-/bug-3571/Makefile)では、

.c.o:
$(ECHO) compiling $(<)
$(Q) $(CC) $(INCFLAGS) $(CPPFLAGS) $(CFLAGS) $(COUTFLAG)$@ -c $<

といったルールがあって、$(COUTFLAG)と$@の間にスペースはありません。
(スペースがあってはならない環境もあるのでしょうか?)
  1. 同じMakefileで COUTFLAGS は、

COUTFLAG = -o

と設定されています。
  1. これらのMakefileを生成する元のlib/mkmf.rbで1.については、

COMPILE_C = config_string('COMPILE_C') || '$(CC) $(INCFLAGS) $(CPPFLAGS) $(CFLAGS) $(COUTFLAG)$@ -c $<'

というのが元となっていて、まぁ、これはそのまんまです。
  1. lib/mkmf.rbで2.については、

COUTFLAG = #{COUTFLAG}

という文字列中で展開している行が存在していて、Rubyの定数COUTFLAGが
元で、さらにこの定数はlib/mkmf.rbの先の方で、

COUTFLAG = CONFIG['COUTFLAG']

として定義しています。
  1. CONFIG['COUTFLAG']はrbconfig.rbが元ですが、これはconfigure時に由来
    していて、config.logで確認すると、

COUTFLAG='-o '

となっています。

と、いうわけで改めて2.の部分を見ると、COUTFLAG に代入している行で -o
の後ろにスペースが1つあるのですが、Makefileの世界ではこのスペースは捨
てられてしまいます。

話が長くなりましたが、1.や3.のルールでは$(COUTFLAG)と$@の間にはスペー
スが入ると期待していたのか、全然気にしていないのか、どうなんだろうと思っ
た次第です。

A. 元々、$(COUTFLAG)と$@の間にスペースを入れてはいけない理由はない。
B. $(COUTFLAGS)の後ろにスペースがあると思っていた。

pkgsrcが対象とするプラットフォームでは、A.に基づいても良さそうに思えま
すが、少し気になったのでメールにまとめてみました。

--
神戸 隆博 (かんべ たかひろ) at 仕事場

Updated by mame (Yusuke Endoh) almost 12 years ago

  • Status changed from Open to Assigned
  • Assignee set to usa (Usaku NAKAMURA)
  • ruby -v set to -

これって [ruby-dev:45694] を見るとバックポート以外決着がついてるように見えるのですが、
今更チケット化されたのは何かやることが残っているのでしょうか。
よくわからないままに usa さんにアサイン。

--
Yusuke Endoh

Updated by naruse (Yui NARUSE) almost 12 years ago

  • Status changed from Assigned to Closed

redmine側のbugfixをしていたり系なのでclose

Actions

Also available in: Atom PDF

Like0
Like0Like0