[Bug:trunk] cross-compiling ext/tk

e$B$J$+$@$G$9!#e(B

e$B%/%m%9%3%s%Q%$%k$N$H$-$Ke(Bext/tk/extconf.rbe$B$,E,@Z$J%G%#%l%/%H%j$re(B
e$BC5$7$F$$$^$;$s!#$^$?!"e(Bis_win32?e$B$N$H$-$KF1$8%G%#%l%/%H%j$r!"M?$(e(B
e$B$i$l$?%Q%9<+BN$He(B\e$B$re(B/e$B$KCV49$7$?$b$N$H%I%i%$%V%l%?!<$ND>8e$Ne(B/e$B$rFse(B
e$B=E$K$7$?$b$N$H$H!“3Fe(B3e$B2s$:$DC5$7$F$$$k$h$&$J$s$G$9$,!”$3$l$O$J$<e(B
e$B$G$7$g$&$+!#$H$/$K:G8e$N$b$N$O%I%i%$%V%l%?!<$,$J$$>l9g$Oe(BUNCe$B$K$J$Ce(B
e$B$F$7$^$&$N$G0UL#$,JQ$o$C$F$7$^$&$H;W$$$^$9!#e(B

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

e$B%A%1%C%He(B #3238 e$B$,99?7$5$l$^$7$?!#e(B (by Hidetoshi Nagai)

e$B%9%F!<%?%9e(B Assignede$B$+$ie(BClosede$B$KJQ99e(B
e$B?JD=e(B % 0e$B$+$ie(B100e$B$KJQ99e(B

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.


http://redmine.ruby-lang.org/issues/show/3238