diff -ur rubyscript2exe-0.3.0.tar.gz/rubyscript2exe/ev/dependencies.rb rubyscript2exe-0.3.1.tar.gz/rubyscript2exe/ev/dependencies.rb
--- rubyscript2exe-0.3.0.tar.gz/rubyscript2exe/ev/dependencies.rb	2004-12-27 13:17:55.000000000 +0100
+++ rubyscript2exe-0.3.1.tar.gz/rubyscript2exe/ev/dependencies.rb	2005-01-13 23:07:30.000000000 +0100
@@ -14,7 +14,7 @@
     todo2.each do |file|
       File.open(file, "rb") do |f|
         strings	= f.read.scan(/[\w\-\.]+/)	# Hack ???
-        strings.delete_if{|s| s !~ /\.dll$/i}
+        strings.delete_if{|s| s !~ /\.(so|o|dll)$/i}
 
         strings.each do |lib|
           lib	= File.expand_path(lib, path)
diff -ur rubyscript2exe-0.3.0.tar.gz/rubyscript2exe/ev/ftools.rb rubyscript2exe-0.3.1.tar.gz/rubyscript2exe/ev/ftools.rb
--- rubyscript2exe-0.3.0.tar.gz/rubyscript2exe/ev/ftools.rb	2004-12-27 13:17:55.000000000 +0100
+++ rubyscript2exe-0.3.1.tar.gz/rubyscript2exe/ev/ftools.rb	2005-01-13 23:07:30.000000000 +0100
@@ -1,22 +1,12 @@
 require "ftools"
 
 class Dir
-  def self.mkdirrec(dir)
-    pdir	= File.dirname(dir)
-
-    if not pdir.empty? and not File.directory?(pdir)
-      Dir.mkdirrec(pdir)
-    end
-
-    Dir.mkdir(dir)	rescue nil
-  end
-
   def self.copy(from, to)
     if File.directory?(from)
       pdir	= Dir.pwd
       todir	= File.expand_path(to)
 
-      mkdirrec(todir)
+      File.mkpath(todir)
 
       Dir.chdir(from)
         Dir.new(".").each do |e|
@@ -26,7 +16,7 @@
     else
       todir	= File.dirname(File.expand_path(to))
 
-      mkdirrec(todir)
+      File.mkpath(todir)
 
       File.copy(from, to)
     end
@@ -47,16 +37,24 @@
         end
       Dir.chdir(pdir)
 
-      Dir.delete(entry)
+      begin
+        Dir.delete(entry)
+      rescue => e
+        $stderr.puts e.message
+      end
     else
-      File.delete(entry)
+      begin
+        File.delete(entry)
+      rescue => e
+        $stderr.puts e.message
+      end
     end
   end
 
   def self.find(entry=nil, mask=nil)
     entry	= "."	if entry.nil?
 
-    entry	= entry.gsub!(/[\/\\]*$/, "")	unless entry.nil?
+    entry	= entry.gsub(/[\/\\]*$/, "")	unless entry.nil?
 
     mask	= /^#{mask}$/i	if mask.kind_of?(String)
 
@@ -77,8 +75,8 @@
         ensure
           Dir.chdir(pdir)
         end
-      rescue Errno::EACCES => error
-        puts error
+      rescue Errno::EACCES => e
+        $stderr.puts e.message
       end
     else
       res += [entry]	if mask.nil? or entry =~ mask
@@ -99,7 +97,7 @@
 	# Rollback
 
     if File.file?(backupfile) and File.file?(controlfile)
-      $stdout.puts "Restoring #{file}..."
+      $stderr.puts "Restoring #{file}..."
 
       File.copy(backupfile, file)				# Rollback from phase 3
     end
diff -ur rubyscript2exe-0.3.0.tar.gz/rubyscript2exe/init.rb rubyscript2exe-0.3.1.tar.gz/rubyscript2exe/init.rb
--- rubyscript2exe-0.3.0.tar.gz/rubyscript2exe/init.rb	2004-12-26 22:50:56.000000000 +0100
+++ rubyscript2exe-0.3.1.tar.gz/rubyscript2exe/init.rb	2005-01-11 22:53:53.000000000 +0100
@@ -1,3 +1,7 @@
+$: << File.dirname(File.expand_path(__FILE__))
+
+required	= $".collect{|a| "-r " + a}
+
 require "ev/oldandnewlocation"
 require "ev/dependencies"
 require "ev/ftools"
@@ -26,6 +30,11 @@
   Config::CONFIG["target_os"] or ""
 end
 
+RUBY		= ARGV.include?("--rubyscript2exe-ruby")
+RUBYW		= ARGV.include?("--rubyscript2exe-rubyw")
+
+ARGV.delete_if{|arg| arg =~ /^--rubyscript2exe-/}
+
 script	= ARGV.shift
 
 if script.nil?
@@ -44,10 +53,8 @@
 
 rubyw	= false
 rubyw	= true		if script =~ /\.rbw$/
-rubyw	= false		if ARGV.include?("--rubyscript2exe-ruby")
-rubyw	= true		if ARGV.include?("--rubyscript2exe-rubyw")
-
-ARGV.delete_if{|arg| arg =~ /^--rubyscript2exe-/}
+rubyw	= false		if RUBY
+rubyw	= true		if RUBYW
 
 bindir1	= Config::CONFIG["bindir"]
 libdir1	= Config::CONFIG["libdir"]
@@ -60,10 +67,10 @@
 
 $stderr.puts "Tracing #{app}..."
 
-libs	= $:.collect{|a| " -I " + a}
+libs	= $:.collect{|a| "-I " + a}
 
 oldlocation do
-  system(backslashes("#{bindir1}/ruby #{libs.join(" ")} -r ´#{newlocation("require2lib.rb")}´ ´#{script}´ ´#{libdir2}´ ") + ARGV.collect{|a| "´" + a + "´"}.join(" "))
+  system(backslashes("#{bindir1}/ruby") + " #{required.join(" ")} #{libs.join(" ")} -r ´#{newlocation("require2lib.rb")}´ ´#{script}´ ´#{bindir2}´ ´#{libdir2}´ --require2lib-quiet" + " " + ARGV.collect{|a| "´" + a + "´"}.join(" "))
 end
 
 $stderr.puts "Copying files..."
@@ -92,7 +99,7 @@
   file	= File.basename(s1)
   s2	= File.expand_path(file, bindir2)
 
-  $stderr.puts "Copying #{s1} ..."
+  #$stderr.puts "Copying #{s1} ..."
   File.copy(s1, s2)	unless File.file?(s2)
 end
 
@@ -100,21 +107,21 @@
   s1	= oldlocation(script)
   s2	= File.expand_path("app.rb", appdir2)
 
-  $stderr.puts "Copying #{s1} ..."
+  #$stderr.puts "Copying #{s1} ..."
   File.copy(s1, s2)	unless File.file?(s2)
 end
 
 if linux?
-  tocopy	= Dir.find(libdir2, /\.so$/).collect{|file| ldds(file)}.flatten.sort.uniq
+  tocopy	= Dir.find(libdir2, /\.(so|o|dll)$/i).collect{|file| ldds(file)}.flatten.sort.uniq
 else
-  tocopy	= Dir.find(libdir2, /\.so$/).collect{|file| dlls(file, bindir1)}.flatten.sort.uniq
+  tocopy	= Dir.find(libdir2, /\.(so|o|dll)$/i).collect{|file| dlls(file, bindir1)}.flatten.sort.uniq
 end
 
 tocopy.each do |s1|
   file	= File.basename(s1)
   s2	= File.expand_path(file, bindir2)
 
-  $stderr.puts "Copying #{s1} ..."
+  #$stderr.puts "Copying #{s1} ..."
   File.copy(s1, s2)	unless File.file?(s2)
 end
 
@@ -141,8 +148,8 @@
 end
 
 File.open(tmplocation("eee.rb"), "w") do |f|
-  f.puts "lib = File.expand_path(File.dirname(__FILE__)) + ´/lib´"
-  f.puts "lib.sub!(/^.:/, ´/cygdrive/%s´ % $&[0..0].downcase) if lib =~ /^.:/"	if cygwin?
+  f.puts "lib	= File.expand_path(File.dirname(__FILE__)) + ´/lib´"
+  f.puts "lib.sub!(/^.:/, ´/cygdrive/%s´ % $&[0..0].downcase)	if lib =~ /^.:/"	if cygwin?
   f.puts "$:.clear"
   f.puts "$: << lib"
 end
diff -ur rubyscript2exe-0.3.0.tar.gz/rubyscript2exe/require2lib.rb rubyscript2exe-0.3.1.tar.gz/rubyscript2exe/require2lib.rb
--- rubyscript2exe-0.3.0.tar.gz/rubyscript2exe/require2lib.rb	2004-12-27 13:17:55.000000000 +0100
+++ rubyscript2exe-0.3.1.tar.gz/rubyscript2exe/require2lib.rb	2005-01-13 23:07:30.000000000 +0100
@@ -1,6 +1,8 @@
-require "ftools"
+require "ev/ftools"
 require "rbconfig"
 
+exit	if __FILE__ == $0
+
 $require2lib_loaded	= []
 
 module Kernel
@@ -13,17 +15,17 @@
 end
 
 module Require
-  JUSTEV	= ARGV.include?("--require2lib-justev")
   JUSTRUBYLIB	= ARGV.include?("--require2lib-justrubylib")
   JUSTSITELIB	= ARGV.include?("--require2lib-justsitelib")
+  RUBYGEMS	= (not JUSTRUBYLIB)
   VERBOSE	= ARGV.include?("--require2lib-verbose")
+  QUIET		= (ARGV.include?("--require2lib-quiet") and not VERBOSE)
 
-  ARGV.delete_if do |arg|
-    arg =~ /^--require2lib-/
-  end
+  ARGV.delete_if{|arg| arg =~ /^--require2lib-/}
 
   ORGDIR	= Dir.pwd
   THISFILE	= File.expand_path(__FILE__)
+  BINDIR	= File.expand_path(ARGV.shift)
   LIBDIR	= File.expand_path(ARGV.shift)
   RUBYLIBDIR	= Config::CONFIG["rubylibdir"]
   SITELIBDIR	= Config::CONFIG["sitelibdir"]
@@ -39,81 +41,148 @@
 
     File.makedirs(LIBDIR)
 
+    if RUBYGEMS
+      begin
+        Gem::dir
+        rubygems	= true
+      rescue NameError
+        rubygems	= false
+      end
+    else
+      rubygems		= false
+    end
+
     pureruby	= true
 
-    ($" + $require2lib_loaded).each do |req|
-      if not JUSTEV or req =~ /^ev\//
-        unless req =~ /^rubygems[\.\/]/
-          catch :found do
-            $:.each do |lib|
-              fromfile	= File.expand_path(req, lib)
-              tofile	= File.expand_path(req, LIBDIR)
+    if rubygems
+      autorequire	= {}
+      dependencies	= {}
+      requirelibs	= []
+      requireablefiles	= []
+
+      Gem::Specification.list.each do |gem|
+        if gem.loaded?
+          $stderr.puts "Found gem #{gem.name} (#{gem.version})."	if VERBOSE
+
+          fromdir	= gem.full_gem_path
+          todir		= File.expand_path(File.join("rubyscript2exe.gems", gem.full_name), LIBDIR)
+
+          Dir.copy(fromdir, todir)
+
+          autorequire[gem.name]	= gem.autorequire	if gem.autorequire
+
+          dependencies[gem.name]	= []
+          gem.dependencies.each do |dep|
+            dependencies[gem.name] << dep.name
+          end
 
-              if File.file?(fromfile)
-                unless fromfile == tofile or fromfile == THISFILE
+          #gem.require_paths << gem.bindir	if gem.bindir
+          #gem.require_paths.each do |lib|
+            #lib	= File.join("rubyscript2exe.gems", gem.full_name, lib)
+            #requirelibs << lib	unless requirelibs.include?(lib)
+          #end
+
+          $:.reverse.each do |lib|
+            gemdir	= File.join(Gem.dir, "gems")
+            if lib =~ /^#{gemdir}/
+              lib	= lib[(gemdir.size+1)..-1]
+              lib	= File.join("rubyscript2exe.gems", lib)
+
+              requirelibs << lib	unless requirelibs.include?(lib)
+            end
+          end
+
+          Dir.find(todir).each do |file|
+            if File.file?(file)
+              gem.require_paths.each do |lib|
+                unless lib.empty?
+                  lib	= File.expand_path(lib, todir)
+                  lib	= lib + "/"
+
+                  requireablefiles << file[lib.length..-1]	if file =~ /^#{lib}/
+                end
+              end
+            end
+          end
+        end
+      end
+
+      File.open(File.expand_path("rubygems.rb", LIBDIR), "w") do |f|
+        f.puts "module Kernel"
+        f.puts "  def require_gem(file, version=nil)"
+        f.puts "    autorequire		= %s" % autorequire.inspect
+        f.puts "    dependencies	= %s" % dependencies.inspect
+        f.puts ""
+        f.puts "    (dependencies[file] or []).each do |dep|"
+        f.puts "      require_gem(dep)"
+        f.puts "    end"
+        f.puts ""
+        f.puts "    if autorequire.include?(file)"
+        f.puts "      file	= autorequire[file]"
+        f.puts "      require(file)"
+        f.puts "    end"
+        f.puts "  end"
+        f.puts "end"
+        f.puts ""
+        f.puts "requirelibs	= %s" % requirelibs.inspect
+        f.puts ""
+        f.puts "requirelibs.each do |lib|"
+        f.puts "  $:.unshift(File.expand_path(lib, File.expand_path(File.dirname(__FILE__))))"
+        f.puts "end"
+      end
+    end
+
+    ($" + $require2lib_loaded).each do |req|
+      unless req =~ /^rubygems[\.\/]/
+        catch :found do
+          $:.each do |lib|
+            fromfile	= File.expand_path(req, lib)
+            tofile	= File.expand_path(req, LIBDIR)
+
+            if File.file?(fromfile)
+              unless fromfile == tofile or fromfile == THISFILE
+                unless (rubygems and requireablefiles.include?(req))	# ??? requireablefiles might be a little dangerous.
                   if (not JUSTRUBYLIB and not JUSTSITELIB) or
                      (JUSTRUBYLIB and fromfile.include?(RUBYLIBDIR)) or
                      (JUSTSITELIB and fromfile.include?(SITELIBDIR))
                     $stderr.puts "Found #{fromfile} ."	if VERBOSE
 
-                    File.makedirs(File.dirname(tofile))
+                    File.makedirs(File.dirname(tofile))	unless File.directory?(File.dirname(tofile))
                     File.copy(fromfile, tofile)
 
-                    pureruby	= false	unless req =~ /\.rb$/i
+                    pureruby	= false	unless req =~ /\.(rbw?|ruby)$/i
                   else
                     $stderr.puts "Skipped #{fromfile} ."	if VERBOSE
                   end
                 end
-
-                throw :found
               end
-            end
 
-            $stderr.puts "Can´t find #{req} ."	unless req =~ /^ev\//
+              throw :found
+            end
           end
+
+          #$stderr.puts "Can´t find #{req} ."	unless req =~ /^ev\//
+          #$stderr.puts "Can´t find #{req} ."	unless req =~ /^(\w:)?[\/\\]/
         end
       end
     end
 
-    $stderr.puts "Not all copied files are pure Ruby."	unless pureruby
+    $stderr.puts "Not all required files are pure Ruby."	unless pureruby or QUIET
 
-    if $".include?("rubygems.rb") or $".include?("rubygems.so")
-      autorequire	= {}
+    if defined?(RUBYSCRIPT2EXE_DLLS)
+      [RUBYSCRIPT2EXE_DLLS].flatten.each do |dll|
+        fromfile	= File.expand_path(dll, ORGDIR)
+        tofile		= File.expand_path(File.basename(dll), BINDIR)
+
+        if File.file?(fromfile)
+          unless fromfile == tofile
+            $stderr.puts "Found #{fromfile} ."	if VERBOSE
 
-      Gem::Specification.list.each do |gem|
-
-        unless gem.autorequire.nil?
-          unless $".collect{|s| (s =~ /^#{gem.autorequire}\.\w+$/)}.compact.empty?
-            autorequire[gem.name]	= gem.autorequire
-
-            gem.require_paths.flatten.each do |lib|
-              lib	= File.expand_path(lib, gem.full_gem_path)
-
-              gem.files.each do |file|
-                fromfile	= File.expand_path(file, gem.full_gem_path)
-                tofile	= File.expand_path(file, File.dirname(LIBDIR))
-
-                if fromfile.include?(lib) and File.file?(fromfile)
-                  $stderr.puts "Found #{fromfile} ."	if VERBOSE
-
-                  File.makedirs(File.dirname(tofile))
-                  File.copy(fromfile, tofile)
-                end
-              end
-            end
+            File.makedirs(File.dirname(tofile))	unless File.directory?(File.dirname(tofile))
+            File.copy(fromfile, tofile)
           end
         end
       end
-
-      File.open(File.expand_path("rubygems.rb", LIBDIR), "w") do |f|
-        f.puts "module Kernel"
-        f.puts "  def require_gem(file, version=nil)"
-        f.puts "    autorequire	= %s" % autorequire.inspect
-        f.puts "    file	= autorequire[file]	if autorequire.include?(file)"
-        f.puts "    require(file)"
-        f.puts "  end"
-        f.puts "end"
-      end
     end
   end
 end
Binary files rubyscript2exe-0.3.0.tar.gz/rubyscript2exe/eee.exe and rubyscript2exe-0.3.1.tar.gz/rubyscript2exe/eee.exe differ
Binary files rubyscript2exe-0.3.0.tar.gz/rubyscript2exe/eeew.exe and rubyscript2exe-0.3.1.tar.gz/rubyscript2exe/eeew.exe differ