Bug #3238
closedcross-compiling ext/tk
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
-
endenv_paths.map!{|dir| dir.tr(File::ALT_SEPARATOR, File::SEPARATOR)}
-
}
-
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
-
endenv_paths.map!{|dir| dir.tr(File::ALT_SEPARATOR, File::SEPARATOR)}
-
}
-
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