[#41278] [BUG:1.9] BINARY should not be ASCII-compatible — Yugui <yugui@...>

WXVndWkbJEIkRyQ5ISMbKEIKCgo+IBskQiRHISIkKiQqJGAkTSQzJDMkXiRHJE41RE9AJEclKyVQ

15 messages 2010/05/11

[#41407] [Bug #3339] win32ole test failure — Usaku NAKAMURA <redmine@...>

Bug #3339: win32ole test failure

20 messages 2010/05/25
[#41411] Re: [Bug #3339] win32ole test failure — Masaki Suketa <masaki.suketa@...> 2010/05/25

助田です。

[#41412] Re: [Bug #3339] win32ole test failure — "U.Nakamura" <usa@...> 2010/05/25

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

[ruby-dev:41133] [Bug:trunk] cross-compiling ext/tk

From: Nobuyoshi Nakada <nobu@...>
Date: 2010-05-03 05:18:35 UTC
List: ruby-dev #41133
なかだです。

クロスコンパイルのときに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はできる。
    中田 伸悦

In This Thread

Prev Next