From: Erik Veenstra Date: 2006-07-05T18:28:50+09:00 Subject: Re: ANN: RubyGems 0.9.0 Release > > I did some more testing with more gems on different > > platforms. The conclusion is twofold: a) The problem > > occurred with RubyGems 0.8.11 as well (in combination with > > RubyScript2Exe 0.4.4) and b) it doesn't occur with all gems > > (e.g. sqlite-ruby is a problem, actionmailer isn't). > > Perhaps sqlite-ruby is an old format gem? It seems to be the It seems to be the /what/?... Where is part two?... This is where I expected the most important part of the answer... ;] > > Which libraries are required conditionally by RubyGems? > > I think zlib and yaml are the only others for making require > work. It is difficult to tell with just grep. I used a different kind of grep, called regexp.rb. It doesn't show the line on which a pattern occurs, but it only shows the matching part of the line. It's listed below. I used this regexp.rb to find all libraries that /could/ be required by RubyGems, both conditionally and unconditionally, listed in list1. The second list, list2, are the libraries that are actually required after doing a "require 'rubygems'". The differences between these lists are conditionally required files (indicated with "-") and indirectly required files (indicated with "+"). I'm concerned about the "-" part... ;] (The lists may not be complete.) Suggestions? Ideas? gegroet, Erik V. - http://www.erikveen.dds.nl/ ---------------------------------------------------------------- $ find /usr/local/lib/ruby/site_ruby/1.8/rubygems*/ -type f -exec cat {} \; | ruby regexp.rb "\brequire[\(\s]*['\"]([^'\"]*)['\"]" | sort | uniq > list1 $ ruby -rubygems -e 'puts $".sort.join("\n")' | sed 's/\.[^\.]*$//g' > list2 $ diff -ur list[12] --- list1 2006-07-05 11:13:14.086994100 +0200 +++ list2 2006-07-05 11:13:16.440354600 +0200 @@ -1,43 +1,19 @@ -digest/md5 +date/format +digest digest/sha2 -fileutils -find forwardable -md5 -net/ftp -net/http -net/https -openssl -optparse -pathname +parsedate +rational rbconfig -rdoc/rdoc +rbconfig/datadir rubygems -rubygems/command -rubygems/dependency_list -rubygems/format -rubygems/format.rb -rubygems/gem_commands +rubygems/custom_require rubygems/gem_openssl -rubygems/incremental_fetcher -rubygems/installer -rubygems/old_format -rubygems/open-uri -rubygems/package +rubygems/rubygems_version rubygems/security rubygems/source_index rubygems/specification rubygems/user_interaction rubygems/version -socket -sources -stringio -tempfile -test/unit/ui/console/testrunner time -timeout -uri -x -yaml -yaml/syck -zlib +ubygems ---------------------------------------------------------------- chars = '^\s\r\n\`\!\(\)\[\]\{\}\<\> \,\.\/\?\\\|\=\;\:\"' chars11 = chars + "'" chars21 = chars + "'" chars22 = chars chars23 = chars + "'" chars31 = '\w\s\r\n' string = ARGV.shift regexp = case string when string.to_i.to_s then /(^\s*#{(["[^\\s]+"] * string.to_i).join("\\s+")}\r*$)/ when "-word" then /([#{chars11}]+)/ when "-word2" then /([#{chars21}]([#{chars22}]*[#{chars23}])?)/ when "-word3" then /([A-Za-z]+)/ when "-text" then /([#{chars31}]+)/ when "-file" then /(\w[\w\.\-]*)/ when "-path" then /(\w[\w\.\-\/\\\\]*)/ when "-email" then /(\w[\w\-\.]+@[\w\-\.]+\w)/ when "-url" then /(\w+:\/\/[\w\.\-]+(:\d*)?\/[\w\.\-\/\#\?\=\%]*)/ when "-ip" then /(\d+\.\d+\.\d+\.\d+)/ when "-mac" then /(([0-9A-Fa-f]{2}[:\.\-]){5}[0-9A-Fa-f]{2})/ when "-print" then /([\w \t\r\n\`\~\!\@\#\$\%\^\&\*\(\)\-\+\=\[\]\{\}\;\:\'\"\,\.\/\<\> \?\\\|]+)/ when "-noprint" then /([^\w \t\r\n\`\~\!\@\#\$\%\^\&\*\(\)\-\+\=\[\]\{\}\;\:\'\"\,\.\/\<\> \?\\\|]+)/ when "-diff" then /(^[\-\+]([^\-\+].*)?)/ when "-md5" then /([A-Za-z0-9]{32})/ when "-quote" then /("[^"]*")/ when "-mixedquote" then /(['"][^'"]*['"])/ else Regexp.new(string) end parse = lambda do |f| while (line = f.gets) line.chomp.scan(regexp).each do |a| puts a[0] end end end if ARGV.empty? parse.call($stdin) else ARGV.each do |file| File.open(file) do |f| parse.call(f) end end end ----------------------------------------------------------------