Browse Source

Merge pull request #398 from luizluca/ruby_fixes-n-update

Ruby many fixes n update to 2.1.3
lilik-openwrt-22.03
Luiz Angelo Daros de Luca 10 years ago
parent
commit
b1d4af0be0
8 changed files with 1441 additions and 124 deletions
  1. +977
    -124
      lang/ruby/Makefile
  2. +5
    -0
      lang/ruby/files/ruby
  3. +32
    -0
      lang/ruby/patches/001-rdoc-remove_gems_dep.patch
  4. +13
    -0
      lang/ruby/patches/002-minitest-remove_gems_dep.patch
  5. +12
    -0
      lang/ruby/patches/003-digest_rmd160_wrong_name_fix.patch
  6. +117
    -0
      lang/ruby/patches/004-digest_dont-link-ssl-if-not-needed.patch
  7. +265
    -0
      lang/ruby/ruby_find_pkgsdeps
  8. +20
    -0
      lang/ruby/ruby_missingfiles

+ 977
- 124
lang/ruby/Makefile
File diff suppressed because it is too large
View File


+ 5
- 0
lang/ruby/files/ruby View File

@ -0,0 +1,5 @@
#!/bin/sh
if ! [ -r "@RUBY_LIBPATH@/rubygems.rb" ]; then
exec @RUBY_BINPATH@ --disable-gems "$@"
fi
exec @RUBY_BINPATH@ "$@"

+ 32
- 0
lang/ruby/patches/001-rdoc-remove_gems_dep.patch View File

@ -0,0 +1,32 @@
--- ruby-2.1.2.orig/lib/rdoc.rb 2014-09-02 17:14:28.719224215 -0300
+++ ruby-2.1.2/lib/rdoc.rb 2014-09-02 17:14:28.762223911 -0300
@@ -109,6 +109,8 @@
def self.load_yaml
begin
gem 'psych'
+ rescue NameError => e # --disable-gems
+ raise unless e.name == :gem
rescue Gem::LoadError
end
--- ruby-2.1.2.orig/lib/rdoc/markdown.rb 2014-09-02 17:14:28.761223918 -0300
+++ ruby-2.1.2/lib/rdoc/markdown.rb 2014-09-02 17:14:28.805223607 -0300
@@ -525,7 +525,6 @@
- require 'rubygems'
require 'rdoc'
require 'rdoc/markup/to_joined_paragraph'
require 'rdoc/markdown/entities'
--- ruby-2.1.2.orig/lib/rdoc/text.rb 2014-09-02 17:14:28.721224201 -0300
+++ ruby-2.1.2/lib/rdoc/text.rb 2014-09-02 17:14:28.764223897 -0300
@@ -10,6 +10,8 @@
begin
gem 'json'
+rescue NameError => e # --disable-gems
+ raise unless e.name == :gem
rescue Gem::LoadError
end

+ 13
- 0
lang/ruby/patches/002-minitest-remove_gems_dep.patch View File

@ -0,0 +1,13 @@
--- ruby-2.1.2.orig/lib/minitest/autorun.rb 2014-09-03 02:22:29.769909573 -0300
+++ ruby-2.1.2/lib/minitest/autorun.rb 2014-09-03 02:22:29.768909580 -0300
@@ -6,8 +6,9 @@
######################################################################
begin
- require 'rubygems'
gem 'minitest'
+rescue NameError => e # --disable-gems
+ raise unless e.name == :gem
rescue Gem::LoadError
# do nothing
end

+ 12
- 0
lang/ruby/patches/003-digest_rmd160_wrong_name_fix.patch View File

@ -0,0 +1,12 @@
diff -r -u ruby-2.1.2.old/ext/digest/rmd160/extconf.rb ruby-2.1.2/ext/digest/rmd160/extconf.rb
--- ruby-2.1.2.old/ext/digest/rmd160/extconf.rb 2012-11-26 22:58:52.000000000 -0200
+++ ruby-2.1.2/ext/digest/rmd160/extconf.rb 2014-09-17 14:20:57.537367488 -0300
@@ -14,7 +14,7 @@
require File.expand_path('../../../openssl/deprecation', __FILE__)
if !with_config("bundled-rmd160") &&
- have_library("crypto") && OpenSSL.check_func("RMD160_Transform", "openssl/ripemd.h")
+ have_library("crypto") && OpenSSL.check_func("RIPEMD160_Transform", "openssl/ripemd.h")
$objs << "rmd160ossl.#{$OBJEXT}"
else
$objs << "rmd160.#{$OBJEXT}"

+ 117
- 0
lang/ruby/patches/004-digest_dont-link-ssl-if-not-needed.patch View File

@ -0,0 +1,117 @@
--- ruby-2.1.2/ext/digest/md5/extconf.rb 2012-11-26 22:58:52.000000000 -0200
+++ ruby-2.1.2/ext/digest/md5/extconf.rb 2014-09-16 19:25:21.120457409 -0300
@@ -9,14 +9,21 @@
$objs = [ "md5init.#{$OBJEXT}" ]
-dir_config("openssl")
-pkg_config("openssl")
-require File.expand_path('../../../openssl/deprecation', __FILE__)
+if !with_config("bundled-md5")
+ dir_config("openssl")
+ pkg_config("openssl")
+ require File.expand_path('../../../openssl/deprecation', __FILE__)
+ if have_library("crypto") && OpenSSL.check_func("MD5_Transform", "openssl/md5.h")
+ $use_bundled=false
+ else
+ $use_bundled=true
+ end
+else
+ $use_bundled=true
+end
-if !with_config("bundled-md5") &&
- have_library("crypto") && OpenSSL.check_func("MD5_Transform", "openssl/md5.h")
+if !$use_bundled
$objs << "md5ossl.#{$OBJEXT}"
-
else
$objs << "md5.#{$OBJEXT}"
end
--- ruby-2.1.2/ext/digest/rmd160/extconf.rb 2012-11-26 22:58:52.000000000 -0200
+++ ruby-2.1.2/ext/digest/rmd160/extconf.rb 2014-09-16 19:29:11.425628541 -0300
@@ -9,12 +9,20 @@
$objs = [ "rmd160init.#{$OBJEXT}" ]
-dir_config("openssl")
-pkg_config("openssl")
-require File.expand_path('../../../openssl/deprecation', __FILE__)
+if !with_config("bundled-rmd160")
+ dir_config("openssl")
+ pkg_config("openssl")
+ require File.expand_path('../../../openssl/deprecation', __FILE__)
+ if have_library("crypto") && OpenSSL.check_func("RIPEMD160_Transform", "openssl/ripemd.h")
+ $use_bundled=false
+ else
+ $use_bundled=true
+ end
+else
+ $use_bundled=true
+end
-if !with_config("bundled-rmd160") &&
- have_library("crypto") && OpenSSL.check_func("RIPEMD160_Transform", "openssl/ripemd.h")
+if !$use_bundled
$objs << "rmd160ossl.#{$OBJEXT}"
else
$objs << "rmd160.#{$OBJEXT}"
--- ruby-2.1.2/ext/digest/sha1/extconf.rb 2012-11-26 22:58:52.000000000 -0200
+++ ruby-2.1.2/ext/digest/sha1/extconf.rb 2014-09-16 19:30:09.359168494 -0300
@@ -9,12 +9,20 @@
$objs = [ "sha1init.#{$OBJEXT}" ]
-dir_config("openssl")
-pkg_config("openssl")
-require File.expand_path('../../../openssl/deprecation', __FILE__)
+if !with_config("bundled-sha1")
+ dir_config("openssl")
+ pkg_config("openssl")
+ require File.expand_path('../../../openssl/deprecation', __FILE__)
+ if have_library("crypto") && OpenSSL.check_func("SHA1_Transform", "openssl/sha.h")
+ $use_bundled=false
+ else
+ $use_bundled=true
+ end
+else
+ $use_bundled=true
+end
-if !with_config("bundled-sha1") &&
- have_library("crypto") && OpenSSL.check_func("SHA1_Transform", "openssl/sha.h")
+if !$use_bundled
$objs << "sha1ossl.#{$OBJEXT}"
else
$objs << "sha1.#{$OBJEXT}"
--- ruby-2.1.2/ext/digest/sha2/extconf.rb 2012-11-26 22:58:52.000000000 -0200
+++ ruby-2.1.2/ext/digest/sha2/extconf.rb 2014-09-16 19:31:31.833513570 -0300
@@ -9,14 +9,22 @@
$objs = [ "sha2init.#{$OBJEXT}" ]
-dir_config("openssl")
-pkg_config("openssl")
-require File.expand_path('../../../openssl/deprecation', __FILE__)
-
-if !with_config("bundled-sha2") &&
- have_library("crypto") &&
+if !with_config("bundled-sha2")
+ dir_config("openssl")
+ pkg_config("openssl")
+ require File.expand_path('../../../openssl/deprecation', __FILE__)
+ if have_library("crypto") &&
%w[SHA256 SHA512].all? {|d| OpenSSL.check_func("#{d}_Transform", "openssl/sha.h")} &&
%w[SHA256 SHA512].all? {|d| have_type("#{d}_CTX", "openssl/sha.h")}
+ $use_bundled=false
+ else
+ $use_bundled=true
+ end
+else
+ $use_bundled=true
+end
+
+if !$use_bundled
$objs << "sha2ossl.#{$OBJEXT}"
$defs << "-DSHA2_USE_OPENSSL"
else

+ 265
- 0
lang/ruby/ruby_find_pkgsdeps View File

@ -0,0 +1,265 @@
#!/usr/bin/ruby -Eutf-8
# encoding: utf-8
#
# Find dependencies between ruby packages
#
# Must run inside a openwrt with all *ruby* packages installed
#
failed = false
puts "Looking for installed ruby packages..."
packages=`opkg list-installed '*ruby*' | cut -d' ' -f 1`.split("\n")
puts "Looking for packages files..."
package_files=Hash.new([])
packages.each do
|pkg|
files=`opkg files "#{pkg}" | sed -e 1d`.split("\n")
package_files[pkg]=files if files
end
require_regex=/^require ["']([^"']+)["'].*/
require_regex_ignore=/^require ([a-zA-Z\$]|["']$|.*\/$)/
require_ignore=%w{drb/invokemethod16 foo rubygems/defaults/operating_system win32console java Win32API
builder/xchar json/pure simplecov win32/sspi rdoc/markdown/literals_1_8 enumerator win32/resolv rbtree
nqxml/streamingparser nqxml/treeparser xmlscan/parser xmlscan/scanner xmltreebuilder xml/parser xmlparser xml/encoding-ja xmlencoding-ja
iconv uconv}
builtin_enc=[
Encoding.find("ASCII-8BIT"),
Encoding.find("UTF-8"),
Encoding.find("UTF-7"),
Encoding.find("US-ASCII"),
]
puts "Looking for requires in files..."
files_requires=Hash.new([])
packages.each do
|pkg|
package_files[pkg].each do
|file|
next if not File.file?(file)
if not file =~ /.rb$/
if File.executable?(file)
magic=`head -c50 '#{file}' | head -1`
begin
if not magic =~ /ruby/
next
end
rescue
next
end
else
next
end
end
#puts "Checking #{file}..."
File.open(file, "r") do
|f|
lineno=0
while line=f.gets() do
lineno+=1; encs=[]; requires=[]; need_encdb=false
line=line.chomp.gsub!(/^[[:blank:]]*/,"")
case line
when /^#.*coding *:/
if lineno <= 2
enc=line.sub(/.*coding *: */,"").sub(/ .*/,"")
encs << Encoding.find(enc)
end
end
line.gsub!(/#.*/,"")
case line
when "__END__"
break
when /^require /
#puts "#{file}:#{line}"
if require_regex_ignore =~ line
#puts "Ignoring #{line} at #{file}:#{lineno} (REGEX)..."
next
end
if not require_regex =~ line
$stderr.puts "Unknown require: '#{line}' at file #{file}:#{lineno}"
failed=true
end
require=line.gsub(require_regex,"\\1")
require.gsub!(/\.(so|rb)$/,"")
if require_ignore.include?(require)
#puts "Ignoring #{line} at #{file}:#{lineno} (STR)..."
next
end
files_requires[file]=files_requires[file] + [require]
when /Encoding::/
encs=line.scan(/Encoding::[[:alnum:]_]+/).collect {|enc| eval(enc) }.select {|enc| enc.kind_of? Encoding }
need_encdb=true
end
next if encs.empty?
required_encs = (encs - builtin_enc).collect {|enc| "enc/#{enc.name.downcase.gsub("-","_")}" }
required_encs << "enc/encdb" if need_encdb
files_requires[file] = files_requires[file] + required_encs
end
end
end
end
exit(1) if failed
# Add deps from .so
package_files.each do |(pkg,files)| files.each do |file|
case file
when /\/nkf\.so$/
files_requires[file]= files_requires[file] + ["enc/encdb"]
end
end; end
puts "Merging requirements into packages..."
package_requires = Hash[packages.collect { |pkg| [pkg, package_files[pkg].collect {|file| files_requires[file] }.inject([],:+).uniq] }]
weak_dependency=Hash.new([])
weak_dependency.merge!({
"ruby-misc"=>["ruby-openssl"], #securerandom.rb
"ruby-debuglib"=>["ruby-readline"], #debug.rb
"ruby-drb"=>["ruby-openssl"], #drb/ssl.rb
"ruby-irb"=>["ruby-rdoc", "ruby-readline"], #irb/cmd/help.rb
"ruby-gems"=>["ruby-openssl","ruby-io-console", #rubygems/commands/cert_command.rb rubygems/user_interaction.rb
"ruby-minitest", "ruby-webrick"], #rubygems/test_case.rb rubygems/server.rb
"ruby-mkmf"=>["ruby-webrick"], #un.rb
"ruby-net"=>["ruby-openssl","ruby-io-console","ruby-zlib"], #net/*.rb
"ruby-optparse"=>["ruby-uri","ruby-datetime"], #optparse/date.rb optparse/uri.rb
"ruby-rake"=>["ruby-net","ruby-testunit","ruby-gems"], #rake/contrib/ftptools.rb rake/runtest.rb /usr/bin/rake
"ruby-rdoc"=>["ruby-gems","ruby-readline","ruby-webrick",
"ruby-minitest"], #/usr/bin/rdoc and others
"ruby-testunit"=>["ruby-gems", "ruby-io-console"], #test/unit/parallel.rb test/unit.rb
"ruby-webrick"=>["ruby-openssl"], #webrick/ssl.rb
})
puts "Looking for package dependencies..."
package_provides = {}
package_dependencies = Hash.new([])
package_requires.each do
|(pkg,requires)|
requires.each do
|require|
if package_provides.include?(require)
found = package_provides[require]
else
found = package_files.detect {|(pkg,files)| files.detect {|file| $:.detect {|path| "#{path}/#{require}" == file.gsub(/\.(so|rb)$/,"") } } }
if not found
$stderr.puts "#{pkg}: Nobody provides #{require}"
failed = true
next
end
found = found.first
package_provides[require]=found
end
if weak_dependency[pkg].include?(found)
puts "#{pkg}: #{found} provides #{require} (ignored WEAK dep)"
else
puts "#{pkg}: #{found} provides #{require}"
package_dependencies[pkg]=package_dependencies[pkg] + [found]
end
end
end
exit(1) if failed
package_dependencies.each do
|(pkg,deps)|
package_dependencies[pkg]=deps.uniq.sort - [pkg]
end
puts "Expanding dependencies..."
begin
changed=false
package_dependencies.each do
|(pkg,deps)|
next if deps.empty?
deps_new = deps.collect {|dep| [dep] + package_dependencies[dep] }.inject([],:+).uniq.sort
if not deps == deps_new
puts "#{pkg}: #{deps.join(",")}"
puts "#{pkg}: #{deps_new.join(",")}"
package_dependencies[pkg]=deps_new
changed=true
end
end
end if not changed
puts "Checking for mutual dependencies..."
package_dependencies.each do
|(pkg,deps)|
if deps.include? pkg
$stderr.puts "#{pkg}: Cycle dependency detected! "
failed = true
end
end
exit(1) if failed
puts "Removing redundant dependencies..."
package_dependencies.each do
|(pkg,deps)|
package_dependencies[pkg]=deps.uniq - [pkg]
end
package_dependencies2=package_dependencies.dup
package_dependencies.each do
|(pkg,deps)|
# Ignore dependencies that are aready required by another dependency
deps_clean = deps.reject {|dep_suspect| deps.detect {|dep_provider|
if package_dependencies[dep_provider].include?(dep_suspect)
puts "#{pkg}: #{dep_suspect} is already required by #{dep_provider}"
true
end
} }
if not deps==deps_clean
puts "before: #{deps.join(",")}"
puts "after: #{deps_clean.join(",")}"
package_dependencies2[pkg]=deps_clean
end
end
package_dependencies=package_dependencies2
puts "Checking current packages dependencies..."
ok=true
package_dependencies.each do
|(pkg,deps)|
current_deps=`opkg depends #{pkg} | sed -r -e '1d;s/^[[:blank:]]*//'`.split("\n")
current_deps.reject!{|dep| dep =~ /^lib/ }
current_deps -= ["ruby"]
extra_dep = current_deps - deps
$stderr.puts "Package #{pkg} does not need to depend on #{extra_dep.join(" ")} " if not extra_dep.empty?
missing_dep = deps - current_deps
$stderr.puts "Package #{pkg} need to depend on #{missing_dep.join(" ")} " if not missing_dep.empty?
if not extra_dep.empty? or not missing_dep.empty?
$stderr.puts "define Package/#{pkg}"
$stderr.puts " DEPENDS:=ruby#{([""] +deps).join(" +")}"
ok=false
end
end
puts "All dependencies are OK." if ok
__END__
puts RUBY_VERSION, RUBY_PLATFORM
puts 123
puts Object.contants
#RUBY_VER=2.1
#RUBY_ARCH=i486-linux-gnu
#RUBYLIB=/usr/lib/ruby/$RUBY_VER/
#RUBYLIB_A=/usr/lib/ruby/$RUBY_ARCH/$RUBY_VER/

+ 20
- 0
lang/ruby/ruby_missingfiles View File

@ -0,0 +1,20 @@
#!/bin/bash
#
function list_staging_files {
cd staging_dir/target-*/; find \
\( \( -name "root-x86" -or -name "packages" -or -name "stamp" -or -name "pkginfo" \) -prune \) -or -true \
\( -path "*ruby*" -or -name "erb" -or -name "gem" -or -name "irb" -or -name "rake" -or -name "rdoc" -or -name "ri" -or -name "testrb" \) \
-print | sort
}
function list_ipkg_files {
for OPKG in bin/*/packages/packages/*ruby*; do
tar --to-stdout -xzf "$OPKG" ./data.tar.gz | tar tz | sed -e 's%/$%%'
done | sort -u
}
echo " Staging Packages"
diff -y <(list_staging_files) <(list_ipkg_files)

Loading…
Cancel
Save