Project

General

Profile

Actions

Bug #1774

closed

Re: [ruby-cvs:31281] Ruby:r24063 (trunk): * ext/tk/extconf.rb: New strategy for searching Tcl/Tk libraries.

Added by usa (Usaku NAKAMURA) almost 15 years ago. Updated almost 13 years ago.

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

Description

=begin
こんにちは、なかむら(う)です。

In message "[ruby-cvs:31281] Ruby:r24063 (trunk): * ext/tk/extconf.rb: New strategy for searching Tcl/Tk libraries."
on Jul.13,2009 08:08:48, wrote:

nagai 2009-07-13 08:08:32 +0900 (Mon, 13 Jul 2009)

New Revision: 24063

http://svn.ruby-lang.org/cgi-bin/viewvc.cgi?view=rev&revision=24063

Log:
* ext/tk/extconf.rb: New strategy for searching Tcl/Tk libraries.

このコミットですが、dir_configを行う条件が間違っているのでは
ないでしょうか?

これが原因で、configureにおける--with-tk-dirあるいは--with-tcl-dir
指定が伝わらず、mswin32+ActiveTclの組み合わせではtcl/tk拡張ラ
イブラリを構築できません(そして間違った方法でリンクを実行しよ
うとしてエラーとなるため、rubyビルドプロセス自体が中断されま
す)。

Index: ext/tk/extconf.rb

--- ext/tk/extconf.rb (revision 24101)
+++ ext/tk/extconf.rb (working copy)
@@ -1173,8 +1173,8 @@ if TkLib_Config["tcltk-framework"]
end

search Tcl/Tk libraries

-tk_idir, tk_ldir = dir_config("tk") if with_config('tk')
-tcl_idir, tcl_ldir = dir_config("tcl") if with_config('tcl')
+tk_idir, tk_ldir = dir_config("tk") if with_config('tk-dir')
+tcl_idir, tcl_ldir = dir_config("tcl") if with_config('tcl-dir')

tk_ldir2 = with_config("tk-lib")
tcl_ldir2 = with_config("tcl-lib")

それでは。

U.Nakamura
=end

Actions #1

Updated by nagai (Hidetoshi Nagai) almost 15 years ago

=begin
永井@知能.九工大です.

From: "U.Nakamura"
Subject: [ruby-dev:38782] [Bug:trunk] Re: [ruby-cvs:31281] Ruby:r24063 (trunk): * ext/tk/extconf.rb: New strategy for searching Tcl/Tk libraries.
Date: Tue, 14 Jul 2009 14:03:16 +0900
Message-ID:

このコミットですが、dir_configを行う条件が間違っているのでは
ないでしょうか?

ごめんなさい.
いろいろ試していたときに付けていた後置 if を消し忘れていたようです.
しばらくは commit できる環境にいないので,もし可能であれば,
問題の 2 行の後置 if を削って commit していただけると助かります.

それはそれとして,

これが原因で、configureにおける--with-tk-dirあるいは--with-tcl-dir
指定が伝わらず、mswin32+ActiveTclの組み合わせではtcl/tk拡張ラ
イブラリを構築できません(そして間違った方法でリンクを実行しよ
うとしてエラーとなるため、rubyビルドプロセス自体が中断されま
す)。

これは,ActiveTcl の tkConfig.sh は正しく見付けているものの,
その中の TK_LIBS 記述に基づいて link しようとしているのが
根本的に間違っているということでしょうか.
「現状,オプション指定なしの場合は Makefile における link 命令が
こうなってしまうが,正しくはこうならねならない」という情報を
教えていただけますと助かります.

永井 秀利 ()
九州工業大学 大学院情報工学研究院 知能情報工学研究系 知能情報メディア部門

=end

Actions #2

Updated by nagai (Hidetoshi Nagai) almost 15 years ago

  • Status changed from Open to Closed
  • % Done changed from 0 to 100

=begin
Applied in changeset r24111.
=end

Actions #3

Updated by usa (Usaku NAKAMURA) almost 15 years ago

=begin
こんにちは、なかむら(う)です。

In message "[ruby-dev:38784] Re: [Bug:trunk] Re: [ruby-cvs:31281] Ruby:r24063 (trunk): * ext/tk/extconf.rb: New strategy for searching Tcl/Tk libraries."
on Jul.14,2009 16:41:37, wrote:

ごめんなさい.
いろいろ試していたときに付けていた後置 if を消し忘れていたようです.
しばらくは commit できる環境にいないので,もし可能であれば,
問題の 2 行の後置 if を削って commit していただけると助かります.

あのメールの後出かけてたのですが、直していただいたようであり
がとうございます。

これは,ActiveTcl の tkConfig.sh は正しく見付けているものの,
その中の TK_LIBS 記述に基づいて link しようとしているのが
根本的に間違っているということでしょうか.

その通りです。

「現状,オプション指定なしの場合は Makefile における link 命令が
こうなってしまうが,正しくはこうならねならない」という情報を
教えていただけますと助かります.

-Lなどといったライブラリパス指定オプションがTK_LIB_SPEC等に現
れるのですが、Microsoftのlink.exeには該当するオプションは存在
しないでエラーで終了します。
ActiveTclが対象環境として何を想定しているのかいまいち謎なので
すが(MinGW、というわけでもなさげ)、とりあえず、tkConfig.sh等
の中身はそのままでは使い物にならないようです。

それでは。

U.Nakamura

=end

Actions #4

Updated by nagai (Hidetoshi Nagai) almost 15 years ago

=begin
永井@知能.九工大です.

From: "U.Nakamura"
Subject: [ruby-dev:38790] Re: [Bug:trunk] Re: [ruby-cvs:31281] Ruby:r24063 (trunk): * ext/tk/extconf.rb: New strategy for searching Tcl/Tk libraries.
Date: Wed, 15 Jul 2009 12:06:42 +0900
Message-ID:

これは,ActiveTcl の tkConfig.sh は正しく見付けているものの,
その中の TK_LIBS 記述に基づいて link しようとしているのが
根本的に間違っているということでしょうか.

その通りです。

そうでしたか.

「現状,オプション指定なしの場合は Makefile における link 命令が
こうなってしまうが,正しくはこうならねならない」という情報を
教えていただけますと助かります.

-Lなどといったライブラリパス指定オプションがTK_LIB_SPEC等に現
れるのですが、Microsoftのlink.exeには該当するオプションは存在
しないでエラーで終了します。
ActiveTclが対象環境として何を想定しているのかいまいち謎なので
すが(MinGW、というわけでもなさげ)、とりあえず、tkConfig.sh等
の中身はそのままでは使い物にならないようです。

「わざわざ用意しているのだから使うべきなのだろう」とやってみましたが,
大きなお世話だったというわけですね.(^_^;

最悪,--with-tk-old-extconf オプションを付ければ
「これまで通り」になるにはなるわけですが,
「これまで通り」であれば,特別なオプション指定処理なし
(せいぜいパス指定くらい) でも正しく make できていたのでしょうか?
それは Windows 系のすべてのコンパイル環境 (mswin32 mingw, cygwin ?) で
同じでしょうか?

もしよろしければ,正しくコンパイルできないような Makefile と
正しくコンパイルできる Makefile とを送っていただけると助かります.

よろしくお願いいたします.

永井 秀利 ()
九州工業大学 大学院情報工学研究院 知能情報工学研究系 知能情報メディア部門

=end

Actions #5

Updated by usa (Usaku NAKAMURA) almost 15 years ago

=begin
こんにちは、なかむら(う)です。

実は先に修正いただいた分では完全じゃありませんでした。
とりあえず、$LIBPATHに実在しないパスを追加するのは勘弁してく
ださい、ということで。

Index: ext/tk/extconf.rb

--- ext/tk/extconf.rb (revision 24115)
+++ ext/tk/extconf.rb (working copy)
@@ -627,7 +627,7 @@ def check_shlib_search_path(paths)

path_list = check_NG_path(path_list)
  • path_list.each{|path| $LIBPATH |= [path.strip] }
  • path_list.each{|path| path = path.strip; $LIBPATH |= [path] if File.directory?(path)}
    end

def find_tcl(tcllib, stubs, version, *opt_paths)

In message "[ruby-dev:38791] Re: [Bug:trunk] Re: [ruby-cvs:31281] Ruby:r24063 (trunk): * ext/tk/extconf.rb: New strategy for searching Tcl/Tk libraries."
on Jul.15,2009 14:31:35, wrote:

最悪,--with-tk-old-extconf オプションを付ければ
「これまで通り」になるにはなるわけですが,
「これまで通り」であれば,特別なオプション指定処理なし
(せいぜいパス指定くらい) でも正しく make できていたのでしょうか?
それは Windows 系のすべてのコンパイル環境 (mswin32 mingw, cygwin ?) で
同じでしょうか?

従来はmswin32+ActiveTclの組み合わせで、パスが指定されていれば
普通にmakeできていました。
mingwやcygwinはここ数年見てません...

それでは。

U.Nakamura

=end

Actions #6

Updated by nagai (Hidetoshi Nagai) almost 15 years ago

=begin
永井@知能.九工大です.

From: "U.Nakamura"
Subject: [ruby-dev:38792] Re: [Bug:trunk] Re: [ruby-cvs:31281] Ruby:r24063 (trunk): * ext/tk/extconf.rb: New strategy for searching Tcl/Tk libraries.
Date: Wed, 15 Jul 2009 16:29:25 +0900
Message-ID:

実は先に修正いただいた分では完全じゃありませんでした。
とりあえず、$LIBPATHに実在しないパスを追加するのは勘弁してく
ださい、ということで。

これは,将来的に新しいバージョンの Tcl/Tk をインストールしたり,
コンパイル済みのバイナリを他の環境に持っていったりした場合に備えて,
現在は存在しなくても将来的には「ありそうな」ディレクトリを
現況に基づく推測の下に追加しておくようにしたのですが,
Windows 環境ではこれも余計なお世話だったでしょうか.

例えば Linux 環境において,最初は /usr/local/lib/{tcl,tk}8.6 に
基づいて tcltklib.so を構築していたのだけれども,
その後に ActiveTcl を /opt/ActiveTcl-8.6 (以前は存在しなかった) に
新たにインストールしたなどというような状況を想定しています.
最優先は /usr/local/lib のままですが,
不要となったであろう /usr/local/lib/{tcl,tk}8.6 を消してしまえば
tcltklib.so を make しなおしたり環境変数を特別に設定したりしなくても
/opt/ActiveTcl-8.6 に新たにインストールしたものが
そのまま使えるようにと考えてのことです.

現況調査で構築に要する時間が長くなるなどの make 上の問題はあっても,
インストール後の実行上の問題はないだろうとの予測です.

私が Windows 環境をきちんとわかっていないというのが問題なのですが,
mswin32 環境または Windows 環境一般では実行時に問題が生じるのでしょうか.
それとも mswin32 環境での make において,
存在しないディレクトリが指定されていると
コンパイルエラーで止まってしまうということでしょうか.

質問ばかりですみません.

In message "[ruby-dev:38791] Re: [Bug:trunk] Re: [ruby-cvs:31281] Ruby:r24063 (trunk): * ext/tk/extconf.rb: New strategy for searching Tcl/Tk libraries."
on Jul.15,2009 14:31:35, wrote:

最悪,--with-tk-old-extconf オプションを付ければ
「これまで通り」になるにはなるわけですが,
「これまで通り」であれば,特別なオプション指定処理なし
(せいぜいパス指定くらい) でも正しく make できていたのでしょうか?
それは Windows 系のすべてのコンパイル環境 (mswin32 mingw, cygwin ?) で
同じでしょうか?

従来はmswin32+ActiveTclの組み合わせで、パスが指定されていれば
普通にmakeできていました。
mingwやcygwinはここ数年見てません...

mswin32 の場合には TK_LIB_SPEC を使ってはダメということのようですが,
TK_LIBS を使っている点はどうでしょうか.
これも使うとダメになりますか?

あ,もしかして TK_LIBS を加工しようとしていることがそもそもの間違いで,
TK_LIBS の内容はそのまま LDFLAGS につなぐだけでいいのでしょうか.
link.exe が受け取ることができるオプションを
きちんと調べないといけないですね.

永井 秀利 ()
九州工業大学 大学院情報工学研究院 知能情報工学研究系 知能情報メディア部門

=end

Actions #7

Updated by usa (Usaku NAKAMURA) almost 15 years ago

=begin
こんにちは、なかむら(う)です。

In message "[ruby-dev:38793] Re: [Bug:trunk] Re: [ruby-cvs:31281] Ruby:r24063 (trunk): * ext/tk/extconf.rb: New strategy for searching Tcl/Tk libraries."
on Jul.15,2009 18:06:23, wrote:

実は先に修正いただいた分では完全じゃありませんでした。
とりあえず、$LIBPATHに実在しないパスを追加するのは勘弁してく
ださい、ということで。

これは,将来的に新しいバージョンの Tcl/Tk をインストールしたり,
コンパイル済みのバイナリを他の環境に持っていったりした場合に備えて,
現在は存在しなくても将来的には「ありそうな」ディレクトリを
現況に基づく推測の下に追加しておくようにしたのですが,
Windows 環境ではこれも余計なお世話だったでしょうか.

いえ、推測は全然問題ないんですが...
$LIBPATHは拡張ライブラリのビルド時に必要なライブラリのパスを
入れる配列ですから、今現在存在しないパスを指定する意味が全然
わかりません...

あ、$LIBPATHがrpathとしてバイナリに埋め込まれる環境があるんで
すかね。

私が Windows 環境をきちんとわかっていないというのが問題なのですが,
mswin32 環境または Windows 環境一般では実行時に問題が生じるのでしょうか.
それとも mswin32 環境での make において,
存在しないディレクトリが指定されていると
コンパイルエラーで止まってしまうということでしょうか.

実は存在するしないには関係ないのですが、VC++のリンカのバージ
ョンによっては(なのかな)、空白を含むライブラリパスは使用でき
ません。
なので、c:/Program Files/Tcl/lib とかが強制的に指定されるよう
だと、どこに何があろうが必ずリンクに失敗します。

これは永井先生が悪いんじゃなくてMicrosoftが悪いんですけどね...

mswin32 の場合には TK_LIB_SPEC を使ってはダメということのようですが,
TK_LIBS を使っている点はどうでしょうか.
これも使うとダメになりますか?

とりあえず、TK_LIBSはそのまま使えそうには見えます。
TK_LIB_FLAGやTK_LIB_SPECはVC++で使うことを想定しているように
は見えませんね。

extconf.rbがあまりに巨大でちゃんと読めてないんですが、そもそ
も実際にはどんな入力を仮定してどんな出力を生成しようとしてい
るのでしょう?

ちなみに手元のtkConfig.shにはこんなものが入っています。

TK_LIBS='user32.lib advapi32.lib gdi32.lib comdlg32.lib imm32.lib comctl32.lib shell32.lib'
TK_LIB_FLAG='-ltk84'
TK_LIB_SPEC='-LC:/tcl/lib -ltk84'

あ,もしかして TK_LIBS を加工しようとしていることがそもそもの間違いで,
TK_LIBS の内容はそのまま LDFLAGS につなぐだけでいいのでしょうか.
link.exe が受け取ることができるオプションを
きちんと調べないといけないですね.

とりあえず、-lと-Lはありません。
というか、LDFLAGSに直接なんか渡すのは困難だと思います。
ちなみに、tcltklib.soのリンクにはTK_LIBSの内容自体がそもそも
不要です。あっても害はさほどなさそうですが。

--
永井 秀利 ()
九州工業大学 大学院情報工学研究院 知能情報工学研究系 知能情報メディア部門

それでは。

U.Nakamura

=end

Actions #8

Updated by nagai (Hidetoshi Nagai) almost 15 years ago

=begin
永井@知能.九工大です.

From: "U.Nakamura"
Subject: [ruby-dev:38794] Re: [Bug:trunk] Re: [ruby-cvs:31281] Ruby:r24063 (trunk): * ext/tk/extconf.rb: New strategy for searching Tcl/Tk libraries.
Date: Wed, 15 Jul 2009 18:37:53 +0900
Message-ID:

いえ、推測は全然問題ないんですが...
$LIBPATHは拡張ライブラリのビルド時に必要なライブラリのパスを
入れる配列ですから、今現在存在しないパスを指定する意味が全然
わかりません...

あ、$LIBPATHがrpathとしてバイナリに埋め込まれる環境があるんで
すかね。

あ,いえ,そういうことではありません.
mkmf.rb の create_makefile() メソッドにおいて,
Makefile 生成の際に rpath 設定を定義させるために
$LIBPATH に設定しておく方法しか見付けられなかったためです.(^_^;

おっしゃる通り,本当は rpath 設定だけでいいし,そうしたいのですが,
$LIBPATH へ設定する方法では,いやが応にも両方設定されてしまいます.

単に私が間抜けで見付けることができなかっただけに過ぎず,
実際には正しいやり方が存在するということであれば
教えていただけますと助かります.

実は存在するしないには関係ないのですが、VC++のリンカのバージ
ョンによっては(なのかな)、空白を含むライブラリパスは使用でき
ません。
なので、c:/Program Files/Tcl/lib とかが強制的に指定されるよう
だと、どこに何があろうが必ずリンクに失敗します。

ぁぅ,ぁぅ...
だとすると,インストールされそうな場所に思える Program Files 以下は
ダメってことですよね.
きっと,Windows 環境のリンカのすべてがそうと限られているわけではなく,
リンカ次第では Program Files 以下でも問題なしだったりするのでしょうね.
で,extconf.rb の中からでは,リンカの特性まではわからない...
ぅぅ...どうしようもないですねぇ...

mswin32 の場合には TK_LIB_SPEC を使ってはダメということのようですが,
TK_LIBS を使っている点はどうでしょうか.
これも使うとダメになりますか?

とりあえず、TK_LIBSはそのまま使えそうには見えます。
TK_LIB_FLAGやTK_LIB_SPECはVC++で使うことを想定しているように
は見えませんね。
(snip)
ちなみに、tcltklib.soのリンクにはTK_LIBSの内容自体がそもそも
不要です。あっても害はさほどなさそうですが。

わかりました.
では Windows 環境用にはTcl/Tk の検索先を増やす
(空白入りのパスは含めない) 以外には特別なことをせず,
従来通りとするように方針を変更します.

ただ,もし処理方法選択に使えそうな情報や判断基準がありましたら
ぜひ教えてください.
そういうものがある場合には極力それを活かしたいと思います.

永井 秀利 ()
九州工業大学 大学院情報工学研究院 知能情報工学研究系 知能情報メディア部門

=end

Actions #9

Updated by nagai (Hidetoshi Nagai) almost 15 years ago

=begin
永井@知能.九工大です.

From: Hidetoshi NAGAI
Subject: [ruby-dev:38796] Re: [Bug:trunk] Re: [ruby-cvs:31281] Ruby:r24063 (trunk): * ext/tk/extconf.rb: New strategy for searching Tcl/Tk libraries.
Date: Wed, 15 Jul 2009 22:25:09 +0900
Message-ID:

では Windows 環境用にはTcl/Tk の検索先を増やす
(空白入りのパスは含めない) 以外には特別なことをせず,
従来通りとするように方針を変更します.

以下のパッチではいかがでしょうか.

Index: ext/tk/config_list.in

--- ext/tk/config_list.in (revision 24110)
+++ ext/tk/config_list.in (working copy)
@@ -1,6 +1,6 @@
##############################################

configure options for Ruby/Tk

-# release date: 2009-07-12
+# release date: 2009-07-15
##############################################
with tk-old-extconf
with ActiveTcl
@@ -33,3 +33,4 @@
enable pthread
enable tcl-thread
with tclConfig-file
+enable space-on-tk-libpath
Index: ext/tk/extconf.rb

--- ext/tk/extconf.rb (revision 24111)
+++ ext/tk/extconf.rb (working copy)
@@ -1,6 +1,6 @@
##############################################################

extconf.rb for tcltklib

-# release date: 2009-07-12
+# release date: 2009-07-15
##############################################################
require 'mkmf'

@@ -214,6 +214,11 @@
}
end

  • unless TkLib_Config["space-on-tk-libpath"]
  • path_head.delete_if{|path| path =~ / /}
  • path_dirs.delete_if{|path| path =~ / /}
  • end
  • [path_head, path_dirs]
    end

@@ -418,6 +423,10 @@
dirs << File.expand_path(File.join(dir, '..'))
}

  • unless TkLib_Config["space-on-tk-libpath"]

  •  dirs.delete_if{|path| path =~ / /}
    
  • end

  • config_dir.concat(dirs.zip(dirs))

    elsif framework = find_macosx_framework()
    @@ -627,7 +636,14 @@

    path_list = check_NG_path(path_list)

  • path_list.each{|path| $LIBPATH |= [path.strip] }
  • if is_win32?
  • exist-dir only

  • path_list.each{|path|
  •  path = path.strip; $LIBPATH |= [path] if File.directory?(path)
    
  • }
  • else
  • path_list.each{|path| $LIBPATH |= [path.strip] }
  • end
    end

def find_tcl(tcllib, stubs, version, *opt_paths)
@@ -646,6 +662,10 @@
"/Tcl/lib", "/Program Files/Tcl/lib"
].find_all{|dir| File.directory?(dir)}

  • unless TkLib_Config["space-on-tk-libpath"]

  • default_paths.delete_if{|path| path =~ / /}

  • end

  • if (paths = opt_paths.compact).empty?
    if TclConfig_Info['config_file_path']
    # use definisions on tclConfig.sh
    @@ -654,9 +674,11 @@

     unless stubs
       #*** Probably, TCL_LIBS is a subset of TK_LIBS. ***
    
  •    # $LDFLAGS << ' ' << TclConfig_Info['TCL_LIBS']
    
  •    # $DLDFLAGS << ' ' << TclConfig_Info['TCL_LIBS']
    
  •    $LDFLAGS << ' ' << TclConfig_Info['TCL_LIB_SPEC']
    
  •    unless is_win32? # ignore tclConfig on Windows
    
  •      # $LDFLAGS << ' ' << TclConfig_Info['TCL_LIBS']
    
  •      # $DLDFLAGS << ' ' << TclConfig_Info['TCL_LIBS']
    
  •      $LDFLAGS << ' ' << TclConfig_Info['TCL_LIB_SPEC']
    
  •    end
       return true
     end
    

@@ -666,9 +688,11 @@
return false
else
#*** Probably, TCL_LIBS is a subset of TK_LIBS. ***

  •    # $LDFLAGS << ' ' << TclConfig_Info['TCL_LIBS']
    
  •    # $DLDFLAGS << ' ' << TclConfig_Info['TCL_LIBS']
    
  •    $LDFLAGS << ' ' << TclConfig_Info['TCL_STUB_LIB_SPEC']
    
  •    unless is_win32? # ignore tclConfig on Windows
    
  •      # $LDFLAGS << ' ' << TclConfig_Info['TCL_LIBS']
    
  •      # $DLDFLAGS << ' ' << TclConfig_Info['TCL_LIBS']
    
  •      $LDFLAGS << ' ' << TclConfig_Info['TCL_STUB_LIB_SPEC']
    
  •    end
       return true
     end
    

    end
    @@ -742,6 +766,10 @@
    "/Tcl/lib", "/Program Files/Tcl/lib"
    ].find_all{|dir| File.directory?(dir)}

  • unless TkLib_Config["space-on-tk-libpath"]

  • default_paths.delete_if{|path| path =~ / /}

  • end

  • if (paths = opt_paths.compact).empty?
    if TkConfig_Info['config_file_path']
    # use definisions on tkConfig.sh
    @@ -749,9 +777,12 @@
    $LIBPATH |= [$2] unless $2.empty?

     unless stubs
    
  •    $LDFLAGS << ' ' << parse_TK_LIBS(TkConfig_Info['TK_LIBS'])
    
  •    # $DLDFLAGS << ' ' << parse_TK_LIBS(TkConfig_Info['TK_LIBS'])
    
  •    $LDFLAGS << ' ' << TkConfig_Info['TK_LIB_SPEC']
    
  •    unless is_win32? # ignore tclConfig on Windows
    
  •      # $LDFLAGS << ' ' << parse_TK_LIBS(TkConfig_Info['TK_LIBS'])
    
  •      $LDFLAGS << ' ' << TkConfig_Info['TK_LIBS'] unless is_win32?
    
  •      # $DLDFLAGS << ' ' << parse_TK_LIBS(TkConfig_Info['TK_LIBS'])
    
  •      $LDFLAGS << ' ' << TkConfig_Info['TK_LIB_SPEC'] unless is_win32?
    
  •    end
       return true
     end
    

@@ -759,9 +790,12 @@
puts "#{TkConfig_Info['config_file_path']} tells us that your Tcl/Tk library doesn't support stub."
return false
else

  •    $LDFLAGS << ' ' << parse_TK_LIBS(TkConfig_Info['TK_LIBS'])
    
  •    # $DLDFLAGS << ' ' << parse_TK_LIBS(TkConfig_Info['TK_LIBS'])
    
  •    $LDFLAGS << ' ' << TkConfig_Info['TK_STUB_LIB_SPEC']
    
  •    unless is_win32? # ignore tclConfig on Windows
    
  •      # $LDFLAGS << ' ' << parse_TK_LIBS(TkConfig_Info['TK_LIBS'])
    
  •      $LDFLAGS << ' ' << TkConfig_Info['TK_LIBS']
    
  •      # $DLDFLAGS << ' ' << parse_TK_LIBS(TkConfig_Info['TK_LIBS'])
    
  •      $LDFLAGS << ' ' << TkConfig_Info['TK_STUB_LIB_SPEC']
    
  •    end
       return true
     end
    

    end
    @@ -818,6 +852,10 @@
    "/Tcl/include", "/Program Files/Tcl/include"
    ].find_all{|dir| File.directory?(dir)}

  • unless TkLib_Config["space-on-tk-libpath"]

  • base_dir.delete_if{|path| path =~ / /}

  • end

  • if TclConfig_Info['TCL_INCLUDE_SPEC'] &&
    have_tcl_h = try_cpp('tcl.h', TclConfig_Info['TCL_INCLUDE_SPEC'])
    $INCFLAGS << " " << TclConfig_Info['TCL_INCLUDE_SPEC']
    @@ -1123,6 +1161,10 @@
    end
    TkLib_Config["ActiveTcl"] = activeTcl

+# allow space chars on a libpath
+TkLib_Config["space-on-tk-libpath"] =

  • enable_config("space-on-tk-libpath", ! is_win32?)

enable Tcl/Tk stubs?

=begin
if TclConfig_Info['TCL_STUB_LIB_SPEC'] && TkConfig_Info['TK_STUB_LIB_SPEC'] &&

--
永井 秀利 ()
九州工業大学 大学院情報工学研究院 知能情報工学研究系 知能情報メディア部門

=end

Actions #10

Updated by usa (Usaku NAKAMURA) almost 15 years ago

=begin
こんにちは、なかむら(う)です。

In message "[ruby-dev:38799] Re: [Bug:trunk] Re: [ruby-cvs:31281] Ruby:r24063 (trunk): * ext/tk/extconf.rb: New strategy for searching Tcl/Tk libraries."
on Jul.15,2009 23:09:44, wrote:

では Windows 環境用にはTcl/Tk の検索先を増やす
(空白入りのパスは含めない) 以外には特別なことをせず,
従来通りとするように方針を変更します.

以下のパッチではいかがでしょうか.

とりあえず、このパッチで私の方の問題は解決していそうです。
ありがとうございます。

それはそれとして、extconf.rbがどうあるべきか、という話ですが、
現状のmkmf.rbでは、rpathをライブラリパスと分離して指定するこ
とはできません。
なので、rpathに埋めたいパスがあったら$LIBPATHに入れておくしか
ないというのは間違ってはいないわけではありますが...

しかし、これはあくまで個人的見解ですけど、現状存在しなかった
り、存在していたとしても現時点で目的のライブラリが置かれると
決まっているわけでもないパスをrpathに埋め込んでおく、というの
は、そもそも勝手にやっていいことなのか、という疑問があります。
ユーザーが明示的に指定しない限りやらない方がいいんじゃないで
しょうか?

それでは。

U.Nakamura

=end

Actions #11

Updated by oshida (Teruo Oshida) almost 15 years ago

=begin
押田です。
お世話になっております。

#別スレと重複しますが、
ruby-dev:38792 に

mingwやcygwinはここ数年見てません...

とありましたので、
trunk@24117 を Cygwin で make してみたところ、
成功しました。
一応動作もするようです。

ユーザーが明示的に指定しない限りやらない方がいいんじゃないで
しょうか?

私もそう思います。
と、言いますか、Tk など外来の共有ライブラリのサーチは、
ローダに任せてよいのではないでしょうか。

そのサーチパスをオーバーライドすれば、
システムデフォルトじゃないパスにあるライブラリを利用することも出来ます。

PATH なり LD_LIBRARY_PATH を設定(変更)して。

#ActiveTcl は %WINDIR%system32 に dll を置いてくれないっぽいですが。

・・・論点がずれていたらスミマセン(^^;;;

それと、VC++ の link.exe の各引数に空白を含む値を渡したい場合、
"" でクオートすれば渡せる筈ですが、
ダメでしたでしょうか?
http://support.microsoft.com/kb/815645/ja

=end

Actions #12

Updated by nagai (Hidetoshi Nagai) almost 15 years ago

=begin
永井@知能.九工大です.

From: "U.Nakamura"
Subject: [ruby-dev:38801] Re: [Bug:trunk] Re: [ruby-cvs:31281] Ruby:r24063 (trunk): * ext/tk/extconf.rb: New strategy for searching Tcl/Tk libraries.
Date: Thu, 16 Jul 2009 09:54:10 +0900
Message-ID:

とりあえず、このパッチで私の方の問題は解決していそうです。
ありがとうございます。

よかったです.ご面倒をおかけしてすみませんでした.

しかし、これはあくまで個人的見解ですけど、現状存在しなかった
り、存在していたとしても現時点で目的のライブラリが置かれると
決まっているわけでもないパスをrpathに埋め込んでおく、というの
は、そもそも勝手にやっていいことなのか、という疑問があります。
ユーザーが明示的に指定しない限りやらない方がいいんじゃないで
しょうか?

その批判についてはもちろん理解できます.
ただ,そのことに気付かないようなユーザほど,
オプション指定を面倒くさがるユーザほど,
「Tcl/Tk のディレクトリにバージョン番号を付けたら
動かなくなった.融通がきかなくて面倒だ」だとか,
「ActiveTcl をインストールしたのに使ってくれない」だとかの
苦情を発するケースが多いように見受けられます.

ならば,できるだけ融通をきかせてやろうとしたのが現状です.
ユーザが明示的に指定した場合には
その指定だけを使うはず (そうしたつもり) なので,
埋め込みを気にするような「わかっている」人には
指定するようにしてもらえばいいかなという考えです.

とりあえず,現在の rpath 埋め込みに対する苦情のあがり具合を見て,
その結果により再検討するようにしようかと思いますが,
それで御容赦いただけますか?

永井 秀利 ()
九州工業大学 大学院情報工学研究院 知能情報工学研究系 知能情報メディア部門

=end

Actions #13

Updated by usa (Usaku NAKAMURA) almost 15 years ago

=begin
こんにちは、なかむら(う)です。

In message "[ruby-dev:38804] Re: [Bug:trunk] Re: [ruby-cvs:31281] Ruby:r24063 (trunk): * ext/tk/extconf.rb: New strategy for searching Tcl/Tk libraries."
on Jul.16,2009 12:49:16, wrote:

それと、VC++ の link.exe の各引数に空白を含む値を渡したい場合、
"" でクオートすれば渡せる筈ですが、
ダメでしたでしょうか?
http://support.microsoft.com/kb/815645/ja

バージョンによります、ということで。

それでは。

U.Nakamura

=end

Actions #14

Updated by usa (Usaku NAKAMURA) almost 15 years ago

=begin
こんにちは、なかむら(う)です。

In message "[ruby-dev:38807] Re: [Bug:trunk] Re: [ruby-cvs:31281] Ruby:r24063 (trunk): * ext/tk/extconf.rb: New strategy for searching Tcl/Tk libraries."
on Jul.16,2009 12:57:29, wrote:

それと、VC++ の link.exe の各引数に空白を含む値を渡したい場合、
"" でクオートすれば渡せる筈ですが、
ダメでしたでしょうか?
http://support.microsoft.com/kb/815645/ja

バージョンによります、ということで。

と、手拍子で答えてしまいましたが、その後問題がどこにあるかひ
らめきました。

実際にはrubyのビルドプロセスではlink.exeを直接実行はせず、cl.exe
の-linkオプション経由で-libpathを指定しています。
この時点ではダブルクォートでくくった上でライブラリパスを指定
しているのですが、cl.exeが受け取った時点でダブルクォートが消
えてしまっており、そこからlink.exeに渡されてエラーになってい
るのだと思われます。

うーん、ちょっと頑張ってみますか。

それでは。

U.Nakamura

=end

Actions

Also available in: Atom PDF

Like0
Like0Like0Like0Like0Like0Like0Like0Like0Like0Like0Like0Like0Like0Like0