Project

General

Profile

Actions

Bug #3238

closed

cross-compiling ext/tk

Added by nobu (Nobuyoshi Nakada) almost 14 years ago. Updated almost 13 years ago.

Status:
Closed
Target version:
-
ruby -v:
1.9.2,1.8.8
Backport:
[ruby-dev:41133]

Description

=begin
なかだです。

クロスコンパイルのときにext/tk/extconf.rbが適切なディレクトリを
探していません。また、is_win32?のときに同じディレクトリを、与え
られたパス自体と\を/に置換したものとドライブレターの直後の/を二
重にしたものとと、各3回ずつ探しているようなんですが、これはなぜ
でしょうか。とくに最後のものはドライブレターがない場合はUNCになっ
てしまうので意味が変わってしまうと思います。


diff --git i/ext/tk/extconf.rb w/ext/tk/extconf.rb
index 676c132..a8adac2 100644
--- i/ext/tk/extconf.rb
+++ w/ext/tk/extconf.rb
@@ -193,5 +193,6 @@ def get_shlib_path_head
end

  • if is_win32?
  • if CROSS_COMPILING
  • elsif is_win32?
    drive, drv_regexp = win_drive
    if TkLib_Config["ActiveTcl"]
    @@ -422,5 +423,6 @@ def get_tclConfig_dirs
    config_dir = []
  • if is_win32?
  • if CROSS_COMPILING
  • elsif is_win32?
    drive, drv_regexp = win_drive
    if TkLib_Config["ActiveTcl"]
    @@ -559,5 +561,6 @@ def search_tclConfig(*paths) # libdir list or [tcl-libdir|file, tk-libdir|file]
    conf = nil
  • (config_dir | config_dir).map{|dir|
  • config_dir.uniq!
  • config_dir.map{|dir|
    if dir.kind_of? Array
    [dir[0].strip.chomp('/'), dir[1].strip.chomp('/')]
    @@ -603,5 +606,5 @@ def search_tclConfig(*paths) # libdir list or [tcl-libdir|file, tk-libdir|file]
    # nativethread check
    if !TkLib_Config["ruby_with_thread"] && tclconf['TCL_THREADS'] == '1'
  •    puts "WARNIG: find #{tclpath.inspect}, but it WITH nativethread-support under ruby WITHOUT nativethread-support. So, ignore it."
    
  •    puts "WARNING: found #{tclpath.inspect}, but it WITH nativethread-support under ruby WITHOUT nativethread-support. So, ignore it."
       TkLib_Config["tcltk-NG-path"] << File.dirname(tclpath)
       next
    

@@ -648,5 +651,5 @@ def search_tclConfig(*paths) # libdir list or [tcl-libdir|file, tk-libdir|file]

    unless tcllib_ok && tklib_ok
  •    puts "WARNIG: find #{tclpath.inspect}, but cannot find valid Tcl/Tk libraries on the same directory. So, ignore it."
    
  •    puts "WARNING: found #{tclpath.inspect}, but cannot find valid Tcl/Tk libraries on the same directory. So, ignore it."
       TkLib_Config["tcltk-NG-path"] << File.dirname(tclpath)
       next
    

@@ -788,17 +791,15 @@ def check_shlib_search_path(paths)

path_list = check_NG_path(path_list)
  • path_list.map!{|path| path.strip}
  • if is_win32?
  • if !CROSS_COMPILING and is_win32?

    exist-dir only

    drive, drv_regexp = win_drive
  • path_list.each{|path|
  •  path = path.strip;
    
  •  #$LIBPATH |= [path] if File.directory?(path)
    
  •  $LIBPATH |= [path.sub(%r|^(#{drv_regexp})?//|, '\1/')] unless Dir.glob(File.join(path, "*.{a,so,dll,lib}")).empty?
    
  • }
  • else
  • keep paths for searching dynamic libs

  • path_list.each{|path| $LIBPATH |= [path.strip] }
  • path_list.map!{|path| path.sub(%r|^(#{drv_regexp})?//|, '\1/')}
  • path_list.delete_if{|path| Dir.glob(File.join(path, "*.{a,so,dll,lib}")).empty?}
    end
  • keep paths for searching dynamic libs

  • $LIBPATH |= path_list
    end

@@ -842,5 +843,5 @@ def find_tcl(tcllib, stubs, version, *opt_paths)
File.join(RbConfig::CONFIG['prefix'], 'lib'),
"/usr/local/lib", "/usr/pkg/lib", "/usr/contrib/lib", "/usr/lib"

  • ].find_all{|dir| File.directory?(dir)}
  • ].find_all{|dir| File.directory?(dir)} unless CROSS_COMPILING

    if TkLib_Config["ActiveTcl"].kind_of?(String) # glob path
    @@ -848,5 +849,5 @@ def find_tcl(tcllib, stubs, version, *opt_paths)
    end

  • if is_win32?
  • if !CROSS_COMPILING and is_win32?
    drive, drv_regexp = win_drive
    if TkLib_Config["ActiveTcl"]
    @@ -874,34 +875,22 @@ def find_tcl(tcllib, stubs, version, *opt_paths)
    end
  • env_paths = []
  • ENV['PATH'].split(File::PATH_SEPARATOR).each{|dir|
  • env_paths << File.expand_path(File.join(dir, '..', 'lib'))
  • env_paths << dir
  • env_paths << File.expand_path(File.join(dir, '..'))
  • if is_win32?
  •  if dir.gsub!(/\\/, '/')
    
  •    env_paths << File.expand_path(File.join(dir, '..', 'lib'))
    
  •    env_paths << dir
    
  •    env_paths << File.expand_path(File.join(dir, '..'))
    
  •  end
    
  •  if dir.sub!(%r|^(#{drv_regexp})?/([^/])|, '\1//\2')
    
  •    env_paths << File.expand_path(File.join(dir, '..', 'lib'))
    
  •    env_paths << dir
    
  •    env_paths << File.expand_path(File.join(dir, '..'))
    
  •  end
    
  • unless CROSS_COMPILING
  • env_paths = []
  • ENV['PATH'].split(File::PATH_SEPARATOR).each{|dir|
  •  env_paths << File.expand_path(File.join(dir, '..', 'lib'))
    
  •  env_paths << dir
    
  •  env_paths << File.expand_path(File.join(dir, '..'))
    
  • }
  • if File::ALT_SEPARATOR
  •  env_paths.map!{|dir| dir.tr(File::ALT_SEPARATOR, File::SEPARATOR)}
    
    end
  • }

  • if is_win32?

  • env_paths = env_paths.find_all{|d|

  •  not (Dir.glob(File.join(d, "*[Tt]cl*")) | Dir.glob(File.join(d.sub(%r|^(#{drv_regexp})?/([^/])|, '\1//\2'), "*[Tt]cl*"))).empty?
    
  • }

  • else

  • env_paths = env_paths.find_all{|d|

  •  not (Dir.glob(File.join(d, "*[Tt]cl*"))).empty?
    
  • env_paths.delete_if{|d|
  •  (Dir.glob(File.join(d, "*[Tt]cl*"))).empty?
    
    }
  • end

  • default_paths.concat env_paths

  • default_paths.concat env_paths

  • end

    default_paths |= default_paths
    @@ -1010,5 +999,5 @@ def find_tk(tklib, stubs, version, *opt_paths)
    File.join(RbConfig::CONFIG['prefix'], 'lib'),
    "/usr/local/lib", "/usr/pkg/lib", "/usr/contrib/lib", "/usr/lib"

  • ].find_all{|dir| File.directory?(dir)}
  • ].find_all{|dir| File.directory?(dir)} unless CROSS_COMPILING

    if TkLib_Config["ActiveTcl"].kind_of?(String) # glob path
    @@ -1016,5 +1005,5 @@ def find_tk(tklib, stubs, version, *opt_paths)
    end

  • if is_win32?
  • if !CROSS_COMPILING and is_win32?
    drive, drv_regexp = win_drive
    if TkLib_Config["ActiveTcl"]
    @@ -1042,34 +1031,22 @@ def find_tk(tklib, stubs, version, *opt_paths)
    end
  • env_paths = []
  • ENV['PATH'].split(File::PATH_SEPARATOR).each{|dir|
  • env_paths << File.expand_path(File.join(dir, '..', 'lib'))
  • env_paths << dir
  • env_paths << File.expand_path(File.join(dir, '..'))
  • if is_win32?
  •  if dir.gsub!(/\\/, '/')
    
  •    env_paths << File.expand_path(File.join(dir, '..', 'lib'))
    
  •    env_paths << dir
    
  •    env_paths << File.expand_path(File.join(dir, '..'))
    
  •  end
    
  •  if dir.sub!(%r|^(#{drv_regexp})?/([^/])|, '\1//\2')
    
  •    env_paths << File.expand_path(File.join(dir, '..', 'lib'))
    
  •    env_paths << dir
    
  •    env_paths << File.expand_path(File.join(dir, '..'))
    
  •  end
    
  • unless CROSS_COMPILING
  • env_paths = []
  • ENV['PATH'].split(File::PATH_SEPARATOR).each{|dir|
  •  env_paths << File.expand_path(File.join(dir, '..', 'lib'))
    
  •  env_paths << dir
    
  •  env_paths << File.expand_path(File.join(dir, '..'))
    
  • }
  • if File::ALT_SEPARATOR
  •  env_paths.map!{|dir| dir.tr(File::ALT_SEPARATOR, File::SEPARATOR)}
    
    end
  • }

  • if is_win32?

  • env_paths = env_paths.find_all{|d|

  •  not (Dir.glob(File.join(d, "*[Tt]k*")) | Dir.glob(File.join(d.sub(%r|^(#{drv_regexp})?/([^/])|, '\1//\2'), "*[Tt]k*"))).empty?
    
  • }

  • else

  • env_paths = env_paths.find_all{|d|

  •  not (Dir.glob(File.join(d, "*[Tt]k*"))).empty?
    
  • env_paths.delete_if{|d|
  •  (Dir.glob(File.join(d, "*[Tt]k*"))).empty?
    
    }
  • end

  • default_paths.concat env_paths

  • default_paths.concat env_paths

  • end

    default_paths |= default_paths
    @@ -1166,5 +1143,5 @@ def find_tcltk_header(tclver, tkver)
    end

  • if is_win32?
  • if !CROSS_COMPILING && is_win32?
    drive, drv_regexp = win_drive
    if TkLib_Config["ActiveTcl"]
    @@ -1199,15 +1176,9 @@ def find_tcltk_header(tclver, tkver)
    base_dir << dir
    base_dir << File.expand_path(File.join(dir, '..'))
  •  if dir.gsub!(/\\/, '/')
    
  •    base_dir << File.expand_path(File.join(dir, '..', 'include'))
    
  •    base_dir << dir
    
  •    base_dir << File.expand_path(File.join(dir, '..'))
    
  •  end
    
  •  if dir.sub!(%r|^(#{drv_regexp})?/([^/])|, '\1//\2')
    
  •    base_dir << File.expand_path(File.join(dir, '..', 'include'))
    
  •    base_dir << dir
    
  •    base_dir << File.expand_path(File.join(dir, '..'))
    
  •  end
    
    }
  • if File::ALT_SEPARATOR
  •  base_dir.map!{|dir| dir.tr(File::ALT_SEPARATOR, File::SEPARATOR)}
    
  • end
    end

--
--- 僕の前にBugはない。
--- 僕の後ろにBugはできる。
中田 伸悦
=end

Actions #1

Updated by nobu (Nobuyoshi Nakada) almost 14 years ago

  • Category set to ext
  • Status changed from Open to Assigned
  • Assignee set to nagai (Hidetoshi Nagai)
  • ruby -v set to 1.9.2,1.8.8

=begin

=end

Actions #2

Updated by nagai (Hidetoshi Nagai) almost 14 years ago

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

=begin
This issue was solved with changeset r27627.
Nobuyoshi, thank you for reporting this issue.
Your contribution to Ruby is greatly appreciated.
May Ruby be with you.

=end

Actions

Also available in: Atom PDF

Like0
Like0Like0