]> TLD Linux GIT Repositories - packages/ruby.git/commitdiff
- merged 2.0.0.645 from PLD
authorMarcin Krol <hawk@tld-linux.org>
Mon, 8 Jun 2015 12:03:13 +0000 (12:03 +0000)
committerMarcin Krol <hawk@tld-linux.org>
Mon, 8 Jun 2015 12:03:13 +0000 (12:03 +0000)
custom-rubygems-location.patch [new file with mode: 0644]
duplicated-paths.patch [new file with mode: 0644]
empty-ruby-version.patch [new file with mode: 0644]
mkmf-verbose.patch
operating_system.rb [new file with mode: 0644]
ruby-lib64.patch
ruby-posixsh.patch [new file with mode: 0644]
ruby.spec
rubygems-2.0.0-binary-extensions.patch [new file with mode: 0644]
strip-ccache.patch [new file with mode: 0644]
x32-asm.patch [new file with mode: 0644]

diff --git a/custom-rubygems-location.patch b/custom-rubygems-location.patch
new file mode 100644 (file)
index 0000000..90ad58d
--- /dev/null
@@ -0,0 +1,84 @@
+From b5e9dc3683cb085aa57e7b12c35a4f21b2cc1482 Mon Sep 17 00:00:00 2001
+From: =?UTF-8?q?V=C3=ADt=20Ondruch?= <vondruch@redhat.com>
+Date: Fri, 11 Nov 2011 13:14:45 +0100
+Subject: [PATCH] Allow to install RubyGems into custom location, outside of
+ Ruby tree.
+
+---
+ configure.in      | 8 ++++++++
+ tool/rbinstall.rb | 9 +++++++++
+ version.c         | 4 ++++
+ 3 files changed, 21 insertions(+)
+
+diff --git a/configure.in b/configure.in
+index 1627d12..e064b2b 100644
+--- a/configure.in
++++ b/configure.in
+@@ -3349,6 +3349,13 @@ AC_ARG_WITH(vendorarchdir,
+             [vendorarchdir=$withval],
+             [vendorarchdir=${multiarch+'${rubysitearchprefix}/vendor_ruby/${ruby_version}'}${multiarch-'${vendorlibdir}/${sitearch}'}])
+ 
++AC_ARG_WITH(rubygemsdir,
++           AS_HELP_STRING([--with-rubygemsdir=DIR], [custom rubygems directory]),
++            [rubygemsdir=$withval])
++if test "$rubygemsdir" != ""; then
++    AC_DEFINE_UNQUOTED(RUBYGEMS_DIR,"$rubygemsdir" !<verconf>!)
++fi
++
+ unexpand_shvar rubylibprefix       exec_prefix libdir RUBY_BASE_NAME
+ unexpand_shvar rubyarchprefix      exec_prefix libdir arch RUBY_BASE_NAME archlibdir rubylibprefix
+ unexpand_shvar rubysitearchprefix  exec_prefix libdir sitearch arch RUBY_BASE_NAME archlibdir sitearchlibdir rubylibprefix
+@@ -3415,6 +3422,7 @@ AC_SUBST(sitearchdir)dnl
+ AC_SUBST(vendordir)dnl
+ AC_SUBST(vendorlibdir)dnl
+ AC_SUBST(vendorarchdir)dnl
++AC_SUBST(rubygemsdir)dnl
+ 
+ configure_args=$ac_configure_args
+ AC_SUBST(configure_args)dnl
+diff --git a/tool/rbinstall.rb b/tool/rbinstall.rb
+index 92e54c6..c72dfb6 100755
+--- a/tool/rbinstall.rb
++++ b/tool/rbinstall.rb
+@@ -313,6 +313,7 @@ sitelibdir = CONFIG["sitelibdir"]
+ sitearchlibdir = CONFIG["sitearchdir"]
+ vendorlibdir = CONFIG["vendorlibdir"]
+ vendorarchlibdir = CONFIG["vendorarchdir"]
++rubygemsdir = CONFIG["rubygemsdir"]
+ mandir = CONFIG["mandir", true]
+ docdir = CONFIG["docdir", true]
+ configure_args = Shellwords.shellwords(CONFIG["configure_args"])
+@@ -500,7 +501,15 @@ end
+ install?(:local, :comm, :lib) do
+   prepare "library scripts", rubylibdir
+   noinst = %w[README* *.txt *.rdoc *.gemspec]
++  noinst += %w[*ubygems.rb rubygems/ datadir.rb] if rubygemsdir
+   install_recursive(File.join(srcdir, "lib"), rubylibdir, :no_install => noinst, :mode => $data_mode)
++  if rubygemsdir
++    noinst = %w[obsolete.rb]
++    install_recursive(File.join(srcdir, "lib", "rubygems"), File.join(rubygemsdir, "rubygems"), :mode => $data_mode)
++    install_recursive(File.join(srcdir, "lib", "rbconfig"), File.join(rubygemsdir, "rbconfig"), :no_install => noinst, :mode => $data_mode)
++    install(File.join(srcdir, "lib", "ubygems.rb"), File.join(rubygemsdir, "ubygems.rb"), :mode => $data_mode)
++    install(File.join(srcdir, "lib", "rubygems.rb"), File.join(rubygemsdir, "rubygems.rb"), :mode => $data_mode)
++  end
+ end
+ 
+ install?(:local, :arch, :lib) do
+diff --git a/version.c b/version.c
+index 54c4513..d76100b 100644
+--- a/version.c
++++ b/version.c
+@@ -99,6 +99,10 @@ const char ruby_initial_load_paths[] =
+ #endif
+ #endif
+ 
++#ifdef RUBYGEMS_DIR
++    RUBYGEMS_DIR "\0"
++#endif
++
+     RUBY_LIB "\0"
+ #ifdef RUBY_THINARCH
+     RUBY_ARCH_LIB_FOR(RUBY_THINARCH) "\0"
+-- 
+1.8.1.2
+
diff --git a/duplicated-paths.patch b/duplicated-paths.patch
new file mode 100644 (file)
index 0000000..58d602d
--- /dev/null
@@ -0,0 +1,70 @@
+From e943a89efd63dcfb80a0ab8d9a4db37f523f508e Mon Sep 17 00:00:00 2001
+From: =?UTF-8?q?V=C3=ADt=20Ondruch?= <vondruch@redhat.com>
+Date: Fri, 8 Feb 2013 22:48:41 +0100
+Subject: [PATCH] Prevent duplicated paths when empty version string is
+ configured.
+
+---
+ configure.in |  3 +++
+ version.c    | 10 ++++++++++
+ 2 files changed, 13 insertions(+)
+
+diff --git a/configure.in b/configure.in
+index 5850bbf..7604bb8 100644
+--- a/configure.in
++++ b/configure.in
+@@ -3367,6 +3367,9 @@ unexpand_shvar exec_prefix         prefix
+ if test ${RUBY_LIB_VERSION_STYLE+set}; then
+     AC_DEFINE_UNQUOTED(RUBY_LIB_VERSION_STYLE, $RUBY_LIB_VERSION_STYLE !<verconf>!)
+ else
++    if test "x${ruby_version}" = 'x'; then
++        AC_DEFINE(RUBY_LIB_VERSION_BLANK, 1)
++    fi
+     AC_DEFINE_UNQUOTED(RUBY_LIB_VERSION, [$RUBY_LIB_VERSION] !<verconf>!)
+ fi
+ AC_DEFINE_UNQUOTED(RUBY_EXEC_PREFIX, ${RUBY_EXEC_PREFIX})
+diff --git a/version.c b/version.c
+index 282960d..54c4513 100644
+--- a/version.c
++++ b/version.c
+@@ -39,9 +39,15 @@
+ #define RUBY_VENDOR_LIB RUBY_LIB_PREFIX"/vendor_ruby"
+ #endif
+ 
++#ifdef RUBY_LIB_VERSION_BLANK
++#define RUBY_LIB                    RUBY_LIB_PREFIX
++#define RUBY_SITE_LIB2              RUBY_SITE_LIB
++#define RUBY_VENDOR_LIB2            RUBY_VENDOR_LIB
++#else
+ #define RUBY_LIB                    RUBY_LIB_PREFIX  "/"RUBY_LIB_VERSION
+ #define RUBY_SITE_LIB2              RUBY_SITE_LIB    "/"RUBY_LIB_VERSION
+ #define RUBY_VENDOR_LIB2            RUBY_VENDOR_LIB  "/"RUBY_LIB_VERSION
++#endif
+ #ifndef RUBY_ARCH_LIB_FOR
+ #define RUBY_ARCH_LIB_FOR(arch)        RUBY_LIB         "/"arch
+ #endif
+@@ -77,8 +83,10 @@ const char ruby_initial_load_paths[] =
+     RUBY_SITE_ARCH_LIB_FOR(RUBY_THINARCH) "\0"
+ #endif
+     RUBY_SITE_ARCH_LIB_FOR(RUBY_SITEARCH) "\0"
++#ifndef RUBY_LIB_VERSION_BLANK
+     RUBY_SITE_LIB "\0"
+ #endif
++#endif
+ 
+ #ifndef NO_RUBY_VENDOR_LIB
+     RUBY_VENDOR_LIB2 "\0"
+@@ -86,8 +94,10 @@ const char ruby_initial_load_paths[] =
+     RUBY_VENDOR_ARCH_LIB_FOR(RUBY_THINARCH) "\0"
+ #endif
+     RUBY_VENDOR_ARCH_LIB_FOR(RUBY_SITEARCH) "\0"
++#ifndef RUBY_LIB_VERSION_BLANK
+     RUBY_VENDOR_LIB "\0"
+ #endif
++#endif
+ 
+     RUBY_LIB "\0"
+ #ifdef RUBY_THINARCH
+-- 
+1.8.1.2
+
diff --git a/empty-ruby-version.patch b/empty-ruby-version.patch
new file mode 100644 (file)
index 0000000..0e2b2d6
--- /dev/null
@@ -0,0 +1,34 @@
+From c9b2eff36728266052ccfff54d3ac0a0624fd0f1 Mon Sep 17 00:00:00 2001
+From: =?UTF-8?q?V=C3=ADt=20Ondruch?= <vondruch@redhat.com>
+Date: Thu, 14 Feb 2013 11:50:41 +0100
+Subject: [PATCH 1/2] Use File.join insteado of manual path creation.
+
+This prevents issues, when File.join in #new_default_spec removes
+superfluous slashes while they are kept in expected paths. E.g. the test
+would fail if ruby configuration specifies --with-ruby-version=''.
+---
+ test/rubygems/test_gem_commands_contents_command.rb | 8 ++++----
+ 1 file changed, 4 insertions(+), 4 deletions(-)
+
+diff --git a/test/rubygems/test_gem_commands_contents_command.rb b/test/rubygems/test_gem_commands_contents_command.rb
+index 60df53f..35c9631 100644
+--- a/test/rubygems/test_gem_commands_contents_command.rb
++++ b/test/rubygems/test_gem_commands_contents_command.rb
+@@ -140,10 +140,10 @@ lib/foo.rb
+       @cmd.execute
+     end
+ 
+-    expected = %W[
+-      #{Gem::ConfigMap[:bindir]}/default_command
+-      #{Gem::ConfigMap[:rubylibdir]}/default/gem.rb
+-      #{Gem::ConfigMap[:archdir]}/default_gem.so
++    expected = [
++      File.join(Gem::ConfigMap[:bindir], 'default_command'),
++      File.join(Gem::ConfigMap[:rubylibdir], 'default/gem.rb'),
++      File.join(Gem::ConfigMap[:archdir], 'default_gem.so')
+     ].sort.join "\n"
+ 
+     assert_equal expected, @ui.output.chomp
+-- 
+1.8.1.2
+
index 7da66c8e6adaaee74489b86b4163a4956f42d716..de78ad872e5c342483e29f5778a557d1ebd95590 100644 (file)
@@ -1,6 +1,17 @@
---- ruby-1.9.3-p0/lib/mkmf.rb.debug    2011-08-11 15:07:37.000000000 +0900
-+++ ruby-1.9.3-p0/lib/mkmf.rb  2012-01-29 21:34:17.000000000 +0900
-@@ -1638,7 +1638,7 @@
+From ec16398159a161fc77436b4855d489f193b2515b Mon Sep 17 00:00:00 2001
+From: =?UTF-8?q?V=C3=ADt=20Ondruch?= <vondruch@redhat.com>
+Date: Mon, 19 Nov 2012 15:14:51 +0100
+Subject: [PATCH] Verbose mkmf.
+
+---
+ lib/mkmf.rb | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+diff --git a/lib/mkmf.rb b/lib/mkmf.rb
+index 4b6c52e..67a15ee 100644
+--- a/lib/mkmf.rb
++++ b/lib/mkmf.rb
+@@ -1777,7 +1777,7 @@ SRC
  SHELL = /bin/sh
  
  # V=0 quiet, V=1 verbose.  other values don't work.
@@ -8,4 +19,7 @@
 +V = 1
  Q1 = $(V:1=)
  Q = $(Q1:0=@)
- n=$(NULLCMD)
+ ECHO1 = $(V:1=@#{CONFIG['NULLCMD']})
+-- 
+1.8.1.2
+
diff --git a/operating_system.rb b/operating_system.rb
new file mode 100644 (file)
index 0000000..c3b19d6
--- /dev/null
@@ -0,0 +1,85 @@
+module Gem
+  class << self
+
+    ##
+    # Returns full path of previous but one directory of dir in path
+    # E.g. for '/usr/share/ruby', 'ruby', it returns '/usr'
+
+    def previous_but_one_dir_to(path, dir)
+      split_path = path.split(File::SEPARATOR)
+      File.join(split_path.take_while { |one_dir| one_dir !~ /^#{dir}$/ }[0..-2])
+    end
+    private :previous_but_one_dir_to
+
+    ##
+    # Default gems locations allowed on FHS system (/usr, /usr/share).
+    # The locations are derived from directories specified during build
+    # configuration.
+
+    def default_locations
+      @default_locations ||= {
+        :system => previous_but_one_dir_to(ConfigMap[:vendordir], ConfigMap[:RUBY_INSTALL_NAME]),
+        :local => previous_but_one_dir_to(ConfigMap[:sitedir], ConfigMap[:RUBY_INSTALL_NAME])
+      }
+    end
+
+    ##
+    # For each location provides set of directories for binaries (:bin_dir)
+    # platform independent (:gem_dir) and dependent (:ext_dir) files.
+
+    def default_dirs
+      @libdir ||= case RUBY_PLATFORM
+      when 'java'
+        ConfigMap[:datadir]
+      else
+        ConfigMap[:libdir]
+      end
+
+      @default_dirs ||= Hash[default_locations.collect do |destination, path|
+        [destination, {
+          :bin_dir => File.join(path, ConfigMap[:bindir].split(File::SEPARATOR).last),
+          :gem_dir => File.join(path, ConfigMap[:datadir].split(File::SEPARATOR).last, 'gems'),
+          :ext_dir => File.join(path, @libdir.split(File::SEPARATOR).last, 'gems')
+        }]
+      end]
+    end
+
+    ##
+    # Remove methods we are going to override. This avoids "method redefined;"
+    # warnings otherwise issued by Ruby.
+
+    remove_method :default_dir if method_defined? :default_dir
+    remove_method :default_path if method_defined? :default_path
+    remove_method :default_bindir if method_defined? :default_bindir
+    remove_method :default_ext_dir_for if method_defined? :default_ext_dir_for
+
+    ##
+    # RubyGems default overrides.
+
+    def default_dir
+      if Process.uid == 0
+        Gem.default_dirs[:local][:gem_dir]
+      else
+        Gem.user_dir
+      end
+    end
+
+    def default_path
+      path = default_dirs.collect {|location, paths| paths[:gem_dir]}
+      path.unshift Gem.user_dir if File.exist? Gem.user_home
+    end
+
+    def default_bindir
+      if Process.uid == 0
+        Gem.default_dirs[:local][:bin_dir]
+      else
+        File.join [Dir.home, 'bin']
+      end
+    end
+
+    def default_ext_dir_for base_dir
+      dirs = Gem.default_dirs.detect {|location, paths| paths[:gem_dir] == base_dir}
+      dirs && File.join(dirs.last[:ext_dir], RbConfig::CONFIG['RUBY_INSTALL_NAME'])
+    end
+  end
+end
index 44de4b0c0e028d3fb58e34f5f581e3efeaa50d78..dadd715df534d88c19e0ddca1ef6dd15b91c5c60 100644 (file)
@@ -1,20 +1,3 @@
-diff -ur ruby-1.9.2-p0-o//configure.in ruby-1.9.2-p0/configure.in
---- ruby-1.9.2-p0-o//configure.in      2010-08-14 02:11:59.000000000 -0600
-+++ ruby-1.9.2-p0/configure.in 2010-09-16 17:16:23.000000000 -0600
-@@ -2222,7 +2222,7 @@
-       RUBY_APPEND_OPTION(CFLAGS, -pipe)
-       ],
-     [human*], [
--      AC_LIBOBJ([x68.o])
-+      AC_LIBOBJ([x68])
-       CFLAGS="$CFLAGS -fansi-only"
-       XCFLAGS="$XCFLAGS -cc1-stack=262144 -cpp-stack=2694144"
-       EXEEXT=.x
-Only in ruby-1.9.2-p0: configure.in.orig
-Only in ruby-1.9.2-p0: configure.in.rej
-Only in ruby-1.9.2-p0: configure.in.rej~
-Only in ruby-1.9.2-p0: configure.in~
-diff -ur ruby-1.9.2-p0-o//ext/tk/extconf.rb ruby-1.9.2-p0/ext/tk/extconf.rb
 --- ruby-1.9.2-p0-o//ext/tk/extconf.rb 2010-08-08 09:01:15.000000000 -0600
 +++ ruby-1.9.2-p0/ext/tk/extconf.rb    2010-09-16 17:17:25.000000000 -0600
 @@ -1188,7 +1188,7 @@
@@ -22,11 +5,7 @@ diff -ur ruby-1.9.2-p0-o//ext/tk/extconf.rb ruby-1.9.2-p0/ext/tk/extconf.rb
  def find_X11(*opt_paths)
    defaults =
 -    [ "/usr/X11*/lib", "/usr/lib/X11*", "/usr/local/X11*", "/usr/openwin/lib" ]
-+    [ "/usr/X11*/lib", "/usr/X11*/lib64", "/usr/lib/X11*", "/usr/lib64/X11*", "/usr/local/X11*", "/usr/openwin/lib" ]
++    [ "/usr/X11*/lib", "/usr/X11*/lib64", "/usr/X11*/libx32", "/usr/lib/X11*", "/usr/lib64/X11*", "/usr/libx32/X11*", "/usr/local/X11*", "/usr/openwin/lib" ]
    paths = []
    opt_paths.compact.each{|path| paths.concat(Dir.glob(path.strip.chomp('/'), File::FNM_CASEFOLD))}
    defaults.compact.each{|path| paths.concat(Dir.glob(path.strip.chomp('/'), File::FNM_CASEFOLD))}
-Only in ruby-1.9.2-p0/ext/tk: extconf.rb.orig
-Only in ruby-1.9.2-p0/ext/tk: extconf.rb.rej
-Only in ruby-1.9.2-p0/ext/tk: extconf.rb.rej~
-Only in ruby-1.9.2-p0/ext/tk: extconf.rb~
diff --git a/ruby-posixsh.patch b/ruby-posixsh.patch
new file mode 100644 (file)
index 0000000..66039c8
--- /dev/null
@@ -0,0 +1,80 @@
+--- ruby-2.0.0-p481/configure.in.orig  2014-08-29 20:47:53.036620911 +0200
++++ ruby-2.0.0-p481/configure.in       2014-08-30 16:07:42.010367205 +0200
+@@ -3241,37 +3241,37 @@
+ 
+ shvar_to_cpp() {
+     var="$1" val="$2"
+-    exec_prefix_pat="`echo \"${exec_prefix}\" | sed 's/\\./\\\\./g'`"
+-    arch_pat="`echo \"${arch}\" | sed 's/\\./\\\\./g'`"
+-    sitearch_pat="`echo \"${sitearch}\" | sed 's/\\./\\\\./g'`"
+-    val="`echo '\"'\"${val}\"'\"' |
++    exec_prefix_pat="$(echo "${exec_prefix}" | sed 's/\./\\./g')"
++    arch_pat="$(echo "${arch}" | sed 's/\./\\./g')"
++    sitearch_pat="$(echo "${sitearch}" | sed 's/\./\\./g')"
++    val="$(echo '"'"${val}"'"' |
+       sed \
+-          -e 's/\${\([[A-Z][A-Z_]]*\)}/\"\1\"/g' \
+-          -e 's|\${sitearchlibdir}|'\"${sitearchlibdir}|g\" \
+-          -e 's|\${sitearchincludedir}|'\"${sitearchincludedir}|g\" \
+-          -e 's|\${archlibdir}|'\"${archlibdir}|g\" \
+-          -e 's|\${archincludedir}|'\"${archincludedir}|g\" \
+-          -e 's|\${libdir}|'\"${libdir}|g\" \
+-          -e 's/\${ruby_version}/\"RUBY_LIB_VERSION\"/g' \
+-          -e 's/\${arch}/\"arch\"/g' \
+-          -e 's/\${sitearch}/\"arch\"/g' \
+-          -e 's/\${vendorarchdir}/\"RUBY_VENDOR_ARCH_LIB\"/g' \
+-          -e 's/\${sitearchdir}/\"RUBY_SITE_ARCH_LIB\"/g' \
+-          -e 's/\${vendorlibdir}/\"RUBY_VENDOR_LIB2\"/g' \
+-          -e 's/\${sitelibdir}/\"RUBY_SITE_LIB2\"/g' \
+-          -e 's/\${vendordir}/\"RUBY_VENDOR_LIB\"/g' \
+-          -e 's/\${sitedir}/\"RUBY_SITE_LIB\"/g' \
+-          -e 's/\${rubylibdir}/\"RUBY_LIB\"/g' \
+-          -e 's/\${rubylibprefix}/\"RUBY_LIB_PREFIX\"/g' \
+-          -e 's/\${rubyarchprefix}/\"RUBY_ARCH_PREFIX_FOR(arch)\"/g' \
+-          -e 's/\${rubysitearchprefix}/\"RUBY_SITEARCH_PREFIX_FOR(arch)\"/g' \
+-          -e 's/\${exec_prefix}/\"RUBY_EXEC_PREFIX\"/g' \
+-          -e \"s|${exec_prefix_pat}/|\"'\"RUBY_EXEC_PREFIX\"/|g' \
+-          -e \"s|${arch_pat}|\"'\"arch\"|g' \
+-          -e \"s|${sitearch_pat}|\"'\"sitearch\"|g' \
+-          -e 's|^\\\"NONE/|RUBY_EXEC_PREFIX\\\"/|' \
+-          -e 's|^\\\"NONE\\\"|\\\"'\"${prefix}\"'\\\"|' \
+-          -e 's/^\\\"\\\"\(.\)/\1/;s/\(.\)\\\"\\\"$/\1/'
+-      `"
++          -e 's/\${\([[A-Z][A-Z_]]*\)}/"\1"/g' \
++          -e 's|\${sitearchlibdir}|'"${sitearchlibdir}|g" \
++          -e 's|\${sitearchincludedir}|'"${sitearchincludedir}|g" \
++          -e 's|\${archlibdir}|'"${archlibdir}|g" \
++          -e 's|\${archincludedir}|'"${archincludedir}|g" \
++          -e 's|\${libdir}|'"${libdir}|g" \
++          -e 's/\${ruby_version}/"RUBY_LIB_VERSION"/g' \
++          -e 's/\${arch}/"arch"/g' \
++          -e 's/\${sitearch}/"arch"/g' \
++          -e 's/\${vendorarchdir}/"RUBY_VENDOR_ARCH_LIB"/g' \
++          -e 's/\${sitearchdir}/"RUBY_SITE_ARCH_LIB"/g' \
++          -e 's/\${vendorlibdir}/"RUBY_VENDOR_LIB2"/g' \
++          -e 's/\${sitelibdir}/"RUBY_SITE_LIB2"/g' \
++          -e 's/\${vendordir}/"RUBY_VENDOR_LIB"/g' \
++          -e 's/\${sitedir}/"RUBY_SITE_LIB"/g' \
++          -e 's/\${rubylibdir}/"RUBY_LIB"/g' \
++          -e 's/\${rubylibprefix}/"RUBY_LIB_PREFIX"/g' \
++          -e 's/\${rubyarchprefix}/"RUBY_ARCH_PREFIX_FOR(arch)"/g' \
++          -e 's/\${rubysitearchprefix}/"RUBY_SITEARCH_PREFIX_FOR(arch)"/g' \
++          -e 's/\${exec_prefix}/"RUBY_EXEC_PREFIX"/g' \
++          -e "s|${exec_prefix_pat}/|"'"RUBY_EXEC_PREFIX"/|g' \
++          -e "s|${arch_pat}|"'"arch"|g' \
++          -e "s|${sitearch_pat}|"'"sitearch"|g' \
++          -e 's|^\\"NONE/|RUBY_EXEC_PREFIX\\"/|' \
++          -e 's|^\\"NONE\\"|\\"'"${prefix}"'\\"|' \
++          -e 's/^\\"\\"\(.\)/\1/;s/\(.\)\\"\\"$/\1/'
++      )"
+     eval $var='"$val"'
+ }
+@@ -3289,7 +3289,7 @@
+       fi
+     done
+     expr=['s/${[^${}"]*}/"&"/g;'"${expr};"'s/"\(\${[^${}"]*}\)"/\1/g']
+-    eval $var='"`echo \"\\\"${'$var'}\\\"\" | sed \"$expr;s/\\\"//g\"`"'
++    eval $var='"$(echo "\"${'$var'}\"" | sed "$expr;s/\"//g")"'
+ }
+ 
+ rubylibprefix='${libdir}/${RUBY_BASE_NAME}'
index d057cbdb10c0c6a3c7244d2f76e5edb27cd9c5b9..c5564a3dead7f5e184b9e4b6d39fbb899e404bc6 100644 (file)
--- a/ruby.spec
+++ b/ruby.spec
@@ -3,67 +3,79 @@
 #      - replace ri with fastri
 #      - patch ri to search multiple indexes (one per package), so RPMs can install ri docs
 #   - fix inconsistencies with versioned vs not-versioned dirs (see dirname hacks in configure)
-#   - custom-rubygems-location.patch
+# - vendor *noarch* packages get installed to /usr/share/ruby/vendor_ruby/PACKAGE, which
+#   will be installed fine on ruby < 2.0, but not usable as dir not in included
+#   in load_path, how to force vendor packages built with ruby 2.0 pull ruby 2.0?
+#   for packages with gem deps it's simple: ruby-listen-2.7.1-0.2.noarch marks ruby-modules-2.0.0.451-0.17.x86_64 (cap /usr/share/gems/specifications)
+#   add that dir to legacy loadpath?
 #
 # Conditional build:
 %bcond_without doc             # skip (time-consuming) docs generating; intended for speed up test builds
-%bcond_without tk              # skip building package with Tk bindings
+%bcond_with    tk              # build Tk bindings (tcl8.6 is not supported)
 %bcond_without batteries       # Don't include rubygems, json, rake, minitest
+%bcond_without default_ruby    # use this Ruby as default system Ruby
 %bcond_with    bootstrap       # build bootstrap version
 
-%define                rel                     4
-%define                ruby_version    1.9
-%define                basever         1.9.3
-%define                patchlevel      429
-%define                doc_version     1_9_3
-%define                json_ver        1.5.5
-%define                rake_ver        0.9.2.2
-# when increasing rubygems_ver, please remove "11." prefix in rubygems package release
-%define                rubygems_ver    1.8.11
-%define                minitest_ver    2.5.1
-# when increasing rdoc_ver, please remove "11." prefix in rdoc package release
-%define                rdoc_ver        3.9.5
-%define                bigdecimal_ver  1.1.0
-%define                io_console_ver  0.3
+%define                rel             1
+%define                ruby_version    2.0
+%define                basever         2.0.0
+%define                patchlevel      645
+
+%define                ruby_suffix %{!?with_default_ruby:%{ruby_version}}
+%define                doc_version     2_0_0
+
+%define                bigdecimal_ver  1.2.0
+%define                io_console_ver  0.4.2
+%define                irb_ver         0.9.6
+%define                json_ver        1.7.7
+%define                minitest_ver    4.3.2
+%define                psych_ver       2.0.0
+%define                rake_ver        0.9.6
+%define                rdoc_ver        4.0.0
+%define                rubygems_ver    2.0.14
+%define                test_unit_ver   2.0.0.0
+
+%define                oname   ruby
 Summary:       Ruby - interpreted scripting language
 Summary(ja.UTF-8):     オブジェクト指向言語Rubyインタプリタ
 Summary(pl.UTF-8):     Ruby - interpretowany język skryptowy
 Summary(pt_BR.UTF-8):  Linguagem de script orientada a objeto
 Summary(zh_CN.UTF-8):  ruby - 一种快速高效的面向对象脚本编程语言
-Name:          ruby
+Name:          ruby%{ruby_suffix}
 Version:       %{basever}.%{patchlevel}
 Release:       %{rel}
 Epoch:         1
 # Public Domain for example for: include/ruby/st.h, strftime.c, ...
 License:       (Ruby or BSD) and Public Domain
 Group:         Development/Languages
-Source0:       ftp://ftp.ruby-lang.org/pub/ruby/1.9/%{name}-%{basever}-p%{patchlevel}.tar.bz2
-# Source0-md5: c2b2de5ef15ea9b1aaa3152f9112af1b
-Source1:       http://www.ruby-doc.org/downloads/%{name}-doc-bundle.tar.gz
+Source0:       https://ftp.ruby-lang.org/pub/ruby/2.0/%{oname}-%{basever}-p%{patchlevel}.tar.bz2
+# Source0-md5: d576240c97cfcc3ed9bdc457eb1e8280
+Source1:       http://www.ruby-doc.org/download/%{oname}-doc-bundle.tar.gz
 # Source1-md5: ad1af0043be98ba1a4f6d0185df63876
-Source2:       http://www.ruby-doc.org/downloads/%{name}_%{doc_version}_stdlib_rdocs.tgz
-# Source2-md5: e3bae139f9115b16ce9c27b586658982
-Source3:       http://www.ruby-doc.org/downloads/%{name}_%{doc_version}_core_rdocs.tgz
-# Source3-md5: 2a041d3734e33f51677c0b4f64c7bef6
-Source100:     ftp://ftp.ruby-lang.org/pub/ruby/1.8/%{name}-1.8.7-p330.tar.gz
+Source2:       http://www.ruby-doc.org/downloads/%{oname}_%{doc_version}_stdlib_rdocs.tgz
+# Source2-md5: 34d3770c9e62882e5f9199e1e1cb81bf
+Source3:       http://www.ruby-doc.org/downloads/%{oname}_%{doc_version}_core_rdocs.tgz
+# Source3-md5: 00979cf2f60f8d4b4286984799b3579d
+Source100:     ftp://ftp.ruby-lang.org/pub/ruby/1.8/%{oname}-1.8.7-p330.tar.gz
 # Source100-md5:       50a49edb787211598d08e756e733e42e
 Source4:       rdoc.1
 Source5:       testrb.1
-Patch0:                %{name}-lib64.patch
-Patch1:                %{name}-ffs.patch
+Source6:       operating_system.rb
+Patch0:                %{oname}-lib64.patch
+Patch1:                %{oname}-ffs.patch
 Patch2:                fix-bison-invocation.patch
-# http://redmine.ruby-lang.org/issues/5231
-Patch3:                disable-versioned-paths.patch
-# TODO: Should be submitted upstream?
-Patch4:                arch-specific-dir.patch
-# http://redmine.ruby-lang.org/issues/5281
-Patch5:                site-and-vendor-arch-flags.patch
-# Make mkmf verbose by default
-Patch6:                mkmf-verbose.patch
+Patch3:                mkmf-verbose.patch
+Patch4:                strip-ccache.patch
+Patch5:                duplicated-paths.patch
+Patch7:                empty-ruby-version.patch
+Patch8:                rubygems-2.0.0-binary-extensions.patch
+Patch9:                custom-rubygems-location.patch
+Patch10:       %{oname}-posixsh.patch
+Patch11:       x32-asm.patch
 URL:           http://www.ruby-lang.org/
 BuildRequires: autoconf >= 2.60
 BuildRequires: automake
-BuildRequires: bison
+BuildRequires: bison >= 1.875
 BuildRequires: db-devel
 BuildRequires: gdbm-devel >= 1.8.3
 BuildRequires: libffi-devel
@@ -71,7 +83,7 @@ BuildRequires:        ncurses-devel
 BuildRequires: openssl-devel
 BuildRequires: pkgconfig
 BuildRequires: readline-devel >= 4.2
-# boostrap needs ruby binary, erb module
+# bootstrap needs ruby binary, erb module
 %{!?with_bootstrap:BuildRequires:      ruby-modules}
 %{!?with_bootstrap:BuildRequires:      ruby}
 BuildRequires: sed >= 4.0
@@ -84,42 +96,42 @@ Provides:   ruby(ver) = %{ruby_version}
 Obsoletes:     ruby-REXML <= 2.4.0-2
 Obsoletes:     ruby-doc < 1.8.4
 Obsoletes:     ruby-fastthread <= 0.6.3
+Conflicts:     rpm-build-macros < 1.695
 Conflicts:     ruby-activesupport < 2.3.11-2
 Conflicts:     ruby-activesupport2 < 2.3.11-2
 BuildRoot:     %{tmpdir}/%{name}-%{version}-root-%(id -u -n)
 
-%define        ruby_ridir              %{_datadir}/ri/%{ruby_version}/system
-%define        gem_dir                 %{_datadir}/%{name}/gems/%{ruby_version}
+%define        ruby_ridir              %{_datadir}/ri/system
+%define        gem_dir                 %{_datadir}/gems
+%define        gem_libdir              %{_libdir}/gems/%{oname}
 
-# The RubyGems library has to stay out of Ruby directory three, since the
-# RubyGems should be share by all Ruby implementations.
-%define        rubygems_dir            %{_datadir}/rubygems
+# location where rubygems is installed
+%define        rubygems_dir            %{ruby_libdir}
 
-%define        ruby_archdir            %{_libdir}/%{name}/%{ruby_version}
-%define        ruby_libdir             %{_datadir}/%{name}/%{ruby_version}
+%define        ruby_archdir            %{_libdir}/%{oname}/%{ruby_version}
+%define        ruby_libarchdir         %{_libdir}/%{oname}/%{ruby_version}
+%define        ruby_libdir             %{_datadir}/%{oname}/%{ruby_version}
 
 # This is the local lib/arch and should not be used for packaging.
 %define        sitedir                 site_ruby
-%define        ruby_sitedir            %{_prefix}/local/share/%{name}/%{sitedir}
-%define        ruby_sitearchdir        %{_prefix}/local/%{_lib}/%{name}/%{sitedir}/%{ruby_version}
-%define        ruby_sitelibdir         %{_prefix}/local/share/%{name}/%{sitedir}/%{ruby_version}
+%define        ruby_sitearchdir        %{_prefix}/local/%{_lib}/%{oname}/%{sitedir}/%{ruby_version}
+%define        ruby_sitelibdir         %{_prefix}/local/share/%{oname}/%{sitedir}
 
 # This is the general location for libs/archs compatible with all
 # or most of the Ruby versions available in the PLD repositories.
 %define        vendordir               vendor_ruby
-%define        ruby_vendordir          %{_datadir}/%{name}/%{vendordir}
-%define        ruby_vendorarchdir      %{_libdir}/%{name}/%{vendordir}/%{ruby_version}
-%define        ruby_vendorlibdir       %{_datadir}/%{name}/%{vendordir}/%{ruby_version}
+%define        ruby_vendorarchdir      %{_libdir}/%{oname}/%{vendordir}/%{ruby_version}
+%define        ruby_vendorlibdir       %{_datadir}/%{oname}/%{vendordir}
 
 # TODO: drop legacy loadpaths after all ruby modules rebuilt in Th
-%define        legacy_libdir           %{_libdir}/%{name}/%{ruby_version}
-%define        legacy_archdir          %{_libdir}/%{name}/%{ruby_version}/%{_target_cpu}-linux
-%define        legacy_sitedir          %{_libdir}/%{name}/%{sitedir}
-%define        legacy_sitelibdir       %{_libdir}/%{name}/%{sitedir}/%{ruby_version}
-%define        legacy_sitearchdir      %{_libdir}/%{name}/%{sitedir}/%{ruby_version}/%{_target_cpu}-linux
-%define        legacy_vendordir        %{_libdir}/%{name}/%{vendordir}
-%define        legacy_vendorlibdir     %{_libdir}/%{name}/%{vendordir}/%{ruby_version}
-%define        legacy_vendorarchdir    %{_libdir}/%{name}/%{vendordir}/%{ruby_version}/%{_target_cpu}-linux
+%define        legacy_libdir           %{_libdir}/%{oname}/%{ruby_version}
+%define        legacy_archdir          %{_libdir}/%{oname}/%{ruby_version}/%{_target_cpu}-linux
+%define        legacy_sitedir          %{_libdir}/%{oname}/%{sitedir}
+%define        legacy_sitelibdir       %{_libdir}/%{oname}/%{sitedir}/%{ruby_version}
+%define        legacy_sitearchdir      %{_libdir}/%{oname}/%{sitedir}/%{ruby_version}/%{_target_cpu}-linux
+%define        legacy_vendordir        %{_libdir}/%{oname}/%{vendordir}
+%define        legacy_vendorlibdir     %{_libdir}/%{oname}/%{vendordir}/%{ruby_version}
+%define        legacy_vendorarchdir    %{_libdir}/%{oname}/%{vendordir}/%{ruby_version}/%{_target_cpu}-linux
 
 %define        legacy_siteloadpath     %{legacy_sitelibdir}\\0%{legacy_sitearchdir}\\0%{legacy_sitedir}
 %define        legacy_vendorloadpath   %{legacy_vendorarchdir}
@@ -178,17 +190,18 @@ Provides: ruby-modules(ver) = %{ruby_version}
 Provides:      ruby-minitest = %{minitest_ver}
 Obsoletes:     ruby-minitest <= 1.5.0
 %endif
+# FIXME later
+Provides:      ruby(abi) = %{ruby_version}
+%requires_ge_to        openssl openssl-devel
 
 %description modules
 Ruby standard modules and utilities:
 - erb - Tiny eRuby
-- irb - interactive Ruby
 - testrb - automatic runner for Test::Unit of Ruby
 
 %description modules -l pl.UTF-8
 Standardowe moduły i narzędzia Ruby:
 - erb - mały eRuby
-- irb - interaktywny Ruby
 - testrb - automatyczny runner dla Ruby Test::Unit
 
 %package tk
@@ -198,7 +211,7 @@ Group:              Development/Languages
 Requires:      %{name}-modules = %{epoch}:%{version}-%{release}
 
 %description tk
-This pachage contains Ruby/Tk bindings.
+This package contains Ruby/Tk bindings.
 
 %description tk -l pl.UTF-8
 Ten pakiet zawiera wiązania Ruby/Tk.
@@ -274,20 +287,38 @@ Ruby examples.
 %description examples -l pl.UTF-8
 Przykłady programów w języku Ruby.
 
-# IMPORTANT: keep rdoc, rubygems, rake, json as last packages as we reset epoch/version/release
+# IMPORTANT: keep irb, rdoc, rubygems, rake, json as last packages as we reset epoch/version/release
 # and %{version},%{release} macros may not be used directly as they take last
 # subpackage value not main package one what you intend to use
 
+%package irb
+Summary:       The Interactive Ruby
+Version:       %{irb_ver}
+Release:       %{basever}.%{patchlevel}.%{rel}
+Epoch:         0
+Group:         Development/Languages
+Requires:      %{name}-modules = 1:%{basever}.%{patchlevel}-%{rel}
+Provides:      irb = %{version}-%{release}
+Provides:      ruby(irb) = %{version}-%{release}
+%if "%{_rpmversion}" >= "5"
+BuildArch:     noarch
+%endif
+
+%description irb
+The irb is acronym for Interactive Ruby. It evaluates ruby expression
+from the terminal.
+
 %package rdoc
 Summary:       A tool to generate HTML and command-line documentation for Ruby projects
 Summary(pl.UTF-8):     Narzędzie do generowania dokumentacji HTML i linii poleceń dla projektów w Rubym
 Version:       %{rdoc_ver}
-# remove "11." when rdoc_ver is increased
-Release:       11.%{basever}.%{patchlevel}.%{rel}
+Release:       %{basever}.%{patchlevel}.%{rel}
 Epoch:         0
 License:       GPL v2 and Ruby and MIT
 Group:         Development/Libraries
 Requires:      %{name}-modules = 1:%{basever}.%{patchlevel}-%{rel}
+Requires:      %{name}-irb >= %{irb_ver}
+Requires:      %{name}-json >= %{json_ver}
 Obsoletes:     rdoc <= 0.9.0
 %if "%{_rpmversion}" >= "5"
 BuildArch:     noarch
@@ -307,8 +338,7 @@ wyświetlania dokumentacji online.
 Summary:       RubyGems - the Ruby standard for packaging Ruby libraries
 Summary(pl.UTF-8):     RubyGems - standard Ruby'ego pakietowania bibliotek
 Version:       %{rubygems_ver}
-# remove "11." when rubygems_ver is increased
-Release:       11.%{basever}.%{patchlevel}.%{rel}
+Release:       %{basever}.%{patchlevel}.%{rel}
 Epoch:         0
 License:       Ruby or MIT
 Group:         Development/Libraries
@@ -337,6 +367,7 @@ Epoch:              0
 License:       MIT
 Group:         Development/Languages
 Provides:      rake = %{rake_ver}
+Conflicts:     ruby-modules < 1:1.9.3.429-2
 %if "%{_rpmversion}" >= "5"
 BuildArch:     noarch
 %endif
@@ -378,6 +409,7 @@ Epoch:              0
 License:       MIT
 Group:         Development/Languages
 Obsoletes:     ruby-json-rubyforge
+Conflicts:     ruby-modules < 1:1.9.3.429-3
 
 %description json
 This is a JSON implementation as a Ruby extension in C.
@@ -387,9 +419,9 @@ Biblioteka JSON dla języka Ruby.
 
 %prep
 %if %{with bootstrap}
-%setup -q -n %{name}-%{basever}-p%{patchlevel} -a1 -a2 -a3 -a100
+%setup -q -n %{oname}-%{basever}-p%{patchlevel} -a1 -a2 -a3 -a100
 %else
-%setup -q -n %{name}-%{basever}-p%{patchlevel} -a1 -a2 -a3
+%setup -q -n %{oname}-%{basever}-p%{patchlevel} -a1 -a2 -a3
 %endif
 %patch0 -p1
 %patch1 -p1
@@ -397,22 +429,45 @@ Biblioteka JSON dla języka Ruby.
 %patch3 -p1
 %patch4 -p1
 %patch5 -p1
+%patch7 -p1
+%patch8 -p1
+%patch9 -p1
+%patch10 -p1
+%patch11 -p1
 
 # must be regenerated with new bison
 %{__rm} parse.{c,h}
 
+# Install custom operating_system.rb.
+install -d lib/rubygems/defaults
+cp -p %{SOURCE6} lib/rubygems/defaults
+
 find '(' -name '*~' -o -name '*.orig' ')' -print0 | xargs -0 -r -l512 rm -f
 
 find -type f '(' -name '*.rb' -o -name '*.cgi' -o -name '*.test' \
        -o -name 'ruby.1' -o -name '*.html' -o -name '*.tcl' ')' \
        | xargs %{__sed} -i 's,/usr/local/bin/,%{_bindir}/,'
 
+# no configure option to disable, so just rm
+%{!?with_tk:rm -rf ext/tk}
+
 %build
+rubygems_ver=$(awk '/VERSION =/ && $1 == "VERSION" {print $3}' lib/rubygems.rb | xargs)
+if [ $rubygems_ver != %{rubygems_ver} ]; then
+       echo "Set %%define rubygems_ver to $rubygems_ver and re-run."
+       exit 1
+fi
+rdoc_ver=$(awk '/VERSION =/ && $1 == "VERSION" {print $3}' lib/rdoc.rb | xargs)
+if [ $rdoc_ver != %{rdoc_ver} ]; then
+       echo "Set %%define rdoc_ver to $rdoc_ver and re-run."
+       exit 1
+fi
+
 cp -f /usr/share/automake/config.sub .
 
 # build ruby-1.8.7 first
 %if %{with bootstrap}
-cd %{name}-1.8.7-p330
+cd %{oname}-1.8.7-p330
 %configure
 %{__make}
 cd ..
@@ -420,24 +475,29 @@ cd ..
 
 %{__autoconf}
 %configure \
-       %{?with_bootstrap:--with-baseruby=%{name}-1.8.7-p330/miniruby} \
-       --with-rubylibprefix=%(dirname %{ruby_libdir}) \
-       --with-archdir=%{ruby_archdir} \
-       --with-sitedir=%(dirname %{ruby_sitelibdir}) \
+       %{?with_bootstrap:--with-baseruby=%{oname}-1.8.7-p330/miniruby} \
+       --program-suffix=%{ruby_suffix} \
+       --with-rubygemsdir=%{rubygems_dir} \
+       --with-rubylibprefix=%{ruby_libdir} \
+       --with-rubyarchprefix=%{ruby_archdir} \
+       --with-sitedir=%{ruby_sitelibdir} \
        --with-sitearchdir=%{ruby_sitearchdir} \
-       --with-vendordir=%(dirname %{ruby_vendorlibdir}) \
+       --with-vendordir=%{ruby_vendorlibdir} \
        --with-vendorarchdir=%{ruby_vendorarchdir} \
-       --with-rubygemsdir=%{rubygems_dir} \
-       --with-search-path="%{legacy_loadpaths}" \
+       --with-rubyhdrdir=%{_includedir}/%{oname}-%{ruby_version} \
+       --with-rubyarchhdrdir=%{_includedir}/%{oname}-%{ruby_version} \
+       --with-sitearchhdrdir='$(sitehdrdir)/$(arch)' \
+       --with-vendorarchhdrdir='$(vendorhdrdir)/$(arch)' \
        --enable-shared \
        --enable-pthread \
+       --enable-multiarch \
        --disable-rubygems \
        --disable-install-doc \
-       --with-ruby-version=minor
+       --with-ruby-version=''
 
 %{__make} -j1 main \
        COPY="cp -p" Q= \
-       %{?with_bootstrap:BASERUBY="ruby-1.8.7-p330/miniruby -I./ruby-1.8.7-p330/lib"}
+       %{?with_bootstrap:BASERUBY="%{oname}-1.8.7-p330/miniruby -I./ruby-1.8.7-p330/lib"}
 
 %if %{with doc}
 %{__make} -j1 rdoc
@@ -445,21 +505,121 @@ cd ..
 
 %install
 rm -rf $RPM_BUILD_ROOT
-install -d $RPM_BUILD_ROOT{%{ruby_rdocdir},%{_examplesdir}/%{name}-%{version}} \
-       $RPM_BUILD_ROOT{%{ruby_vendorarchdir},%{ruby_ridir}} \
+install -d $RPM_BUILD_ROOT{%{ruby_rdocdir},%{ruby_ridir}} \
+       $RPM_BUILD_ROOT%{ruby_vendorarchdir} \
        $RPM_BUILD_ROOT%{ruby_vendorlibdir}/net \
-       $RPM_BUILD_ROOT{%{legacy_archdir}/racc,%{legacy_sitelibdir},%{legacy_sitearchdir},%{legacy_vendorarchdir},%{legacy_libdir}/tasks} \
+       $RPM_BUILD_ROOT%{ruby_vendorlibdir}/data \
 
-%{__make} install %{?with_doc:install-doc} \
+%{__make} install %{?with_doc:install-doc -j1} \
        DESTDIR=$RPM_BUILD_ROOT
 
-cp -Rf sample/* $RPM_BUILD_ROOT%{_examplesdir}/%{name}-%{version}
-cp -p %{SOURCE4} $RPM_BUILD_ROOT%{_mandir}/man1
-cp -p %{SOURCE5} $RPM_BUILD_ROOT%{_mandir}/man1
+# Version is empty if --with-ruby-version is specified.
+# http://bugs.ruby-lang.org/issues/7807
+sed -i -e 's/Version: \${ruby_version}/Version: %{ruby_version}/' $RPM_BUILD_ROOT%{_pkgconfigdir}/%{oname}-%{ruby_version}.pc
+
+install -d $RPM_BUILD_ROOT%{_examplesdir}/%{oname}-%{basever}.%{patchlevel}
+cp -Rf sample/* $RPM_BUILD_ROOT%{_examplesdir}/%{oname}-%{basever}.%{patchlevel}
+cp -p %{SOURCE4} $RPM_BUILD_ROOT%{_mandir}/man1/rdoc%{ruby_suffix}.1
+cp -p %{SOURCE5} $RPM_BUILD_ROOT%{_mandir}/man1/testrb%{ruby_suffix}.1
 
 %{__rm} -rf $RPM_BUILD_ROOT%{_docdir}/%{name}/html
 
-ln -sf %{gem_dir}/gems/rake-%{rake_ver}/bin/rake $RPM_BUILD_ROOT%{_bindir}/rake
+# detect this runtime, "make install" is affected by operating_system.rb what is installed in system!
+gem_dir=$(./miniruby -I. -Ilib -r rubygems -e 'puts Gem.default_dir')
+
+# Move gems root into common directory, out of Ruby directory structure.
+install -d $RPM_BUILD_ROOT%{gem_dir}
+mv $RPM_BUILD_ROOT${gem_dir}/{gems,specifications} $RPM_BUILD_ROOT%{gem_dir}
+
+# Move bundled rubygems to %gem_dir
+# make symlinks for io-console and bigdecimal, which are considered to be part of stdlib by other Gems
+# make symlinks for all packages, so they would work without rubygems
+# NOTE: when making symlinks, do not symlink paths that could be directories,
+# as there may came files from other packages as well. actually, unlikely as
+# the links to got system dir and only ruby may package there (other distro
+# packages should go to vendor dirs)
+install -d $RPM_BUILD_ROOT%{gem_dir}/gems/rake-%{rake_ver}/lib
+mv $RPM_BUILD_ROOT%{ruby_libdir}/rake* $RPM_BUILD_ROOT%{gem_dir}/gems/rake-%{rake_ver}/lib
+ln -s %{gem_dir}/gems/rake-%{rake_ver}/lib/rake $RPM_BUILD_ROOT%{ruby_libdir}
+ln -s %{gem_dir}/gems/rake-%{rake_ver}/lib/rake.rb $RPM_BUILD_ROOT%{ruby_libdir}
+mv $RPM_BUILD_ROOT%{gem_dir}/specifications/default/rake-%{rake_ver}.gemspec $RPM_BUILD_ROOT%{gem_dir}/specifications
+
+install -d $RPM_BUILD_ROOT%{gem_dir}/gems/rdoc-%{rdoc_ver}/lib
+mv $RPM_BUILD_ROOT%{ruby_libdir}/rdoc* $RPM_BUILD_ROOT%{gem_dir}/gems/rdoc-%{rdoc_ver}/lib
+ln -s %{gem_dir}/gems/rdoc-%{rdoc_ver}/lib/rdoc $RPM_BUILD_ROOT%{ruby_libdir}
+ln -s %{gem_dir}/gems/rdoc-%{rdoc_ver}/lib/rdoc.rb $RPM_BUILD_ROOT%{ruby_libdir}
+mv $RPM_BUILD_ROOT%{gem_dir}/specifications/default/rdoc-%{rdoc_ver}.gemspec $RPM_BUILD_ROOT%{gem_dir}/specifications
+
+install -d $RPM_BUILD_ROOT%{gem_dir}/gems/bigdecimal-%{bigdecimal_ver}/lib
+install -d $RPM_BUILD_ROOT%{gem_libdir}/bigdecimal-%{bigdecimal_ver}/lib
+mv $RPM_BUILD_ROOT%{ruby_libdir}/bigdecimal $RPM_BUILD_ROOT%{gem_dir}/gems/bigdecimal-%{bigdecimal_ver}/lib
+mv $RPM_BUILD_ROOT%{ruby_libarchdir}/bigdecimal.so $RPM_BUILD_ROOT%{gem_libdir}/bigdecimal-%{bigdecimal_ver}/lib
+mv $RPM_BUILD_ROOT%{gem_dir}/specifications/default/bigdecimal-%{bigdecimal_ver}.gemspec $RPM_BUILD_ROOT%{gem_dir}/specifications
+ln -s %{gem_dir}/gems/bigdecimal-%{bigdecimal_ver}/lib/bigdecimal $RPM_BUILD_ROOT%{ruby_libdir}/bigdecimal
+ln -s %{gem_libdir}/bigdecimal-%{bigdecimal_ver}/lib/bigdecimal.so $RPM_BUILD_ROOT%{ruby_libarchdir}/bigdecimal.so
+
+install -d $RPM_BUILD_ROOT%{gem_dir}/gems/io-console-%{io_console_ver}/lib
+install -d $RPM_BUILD_ROOT%{gem_libdir}/io-console-%{io_console_ver}/lib/io
+mv $RPM_BUILD_ROOT%{ruby_libdir}/io $RPM_BUILD_ROOT%{gem_dir}/gems/io-console-%{io_console_ver}/lib
+mv $RPM_BUILD_ROOT%{ruby_libarchdir}/io/console.so $RPM_BUILD_ROOT%{gem_libdir}/io-console-%{io_console_ver}/lib/io
+mv $RPM_BUILD_ROOT%{gem_dir}/specifications/default/io-console-%{io_console_ver}.gemspec $RPM_BUILD_ROOT%{gem_dir}/specifications
+ln -s %{gem_dir}/gems/io-console-%{io_console_ver}/lib/io $RPM_BUILD_ROOT%{ruby_libdir}/io
+ln -s %{gem_libdir}/io-console-%{io_console_ver}/lib/io/console.so $RPM_BUILD_ROOT%{ruby_libarchdir}/io/console.so
+
+install -d $RPM_BUILD_ROOT%{gem_dir}/gems/json-%{json_ver}/lib
+install -d $RPM_BUILD_ROOT%{gem_libdir}/json-%{json_ver}/lib
+mv $RPM_BUILD_ROOT%{ruby_libdir}/json* $RPM_BUILD_ROOT%{gem_dir}/gems/json-%{json_ver}/lib
+mv $RPM_BUILD_ROOT%{ruby_libarchdir}/json $RPM_BUILD_ROOT%{gem_libdir}/json-%{json_ver}/lib
+mv $RPM_BUILD_ROOT%{gem_dir}/specifications/default/json-%{json_ver}.gemspec $RPM_BUILD_ROOT%{gem_dir}/specifications
+ln -s %{gem_dir}/gems/json-%{json_ver}/lib/json $RPM_BUILD_ROOT%{ruby_libdir}/json
+ln -s %{gem_dir}/gems/json-%{json_ver}/lib/json.rb $RPM_BUILD_ROOT%{ruby_libdir}/json.rb
+install -d $RPM_BUILD_ROOT%{ruby_libarchdir}/json/ext
+ln -s %{gem_libdir}/json-%{json_ver}/lib/json/ext/parser.so $RPM_BUILD_ROOT%{ruby_libarchdir}/json/ext
+ln -s %{gem_libdir}/json-%{json_ver}/lib/json/ext/generator.so $RPM_BUILD_ROOT%{ruby_libarchdir}/json/ext
+
+install -d $RPM_BUILD_ROOT%{gem_dir}/gems/minitest-%{minitest_ver}/lib
+mv $RPM_BUILD_ROOT%{ruby_libdir}/minitest $RPM_BUILD_ROOT%{gem_dir}/gems/minitest-%{minitest_ver}/lib
+ln -s %{gem_dir}/gems/minitest-%{minitest_ver}/lib/minitest $RPM_BUILD_ROOT%{ruby_libdir}
+mv $RPM_BUILD_ROOT%{gem_dir}/specifications/default/minitest-%{minitest_ver}.gemspec $RPM_BUILD_ROOT%{gem_dir}/specifications
+
+install -d $RPM_BUILD_ROOT%{gem_dir}/gems/test-unit-%{test_unit_ver}/lib
+install -d $RPM_BUILD_ROOT%{ruby_libdir}/test
+mv $RPM_BUILD_ROOT%{ruby_libdir}/test/unit $RPM_BUILD_ROOT%{gem_dir}/gems/test-unit-%{test_unit_ver}/lib
+ln -s %{gem_dir}/gems/test-unit-%{test_unit_ver}/lib/unit $RPM_BUILD_ROOT%{ruby_libdir}/test
+mv $RPM_BUILD_ROOT%{gem_dir}/specifications/default/test-unit-%{test_unit_ver}.gemspec $RPM_BUILD_ROOT%{gem_dir}/specifications
+
+install -d $RPM_BUILD_ROOT%{gem_dir}/gems/psych-%{psych_ver}/lib
+install -d $RPM_BUILD_ROOT%{gem_libdir}/psych-%{psych_ver}/lib
+mv $RPM_BUILD_ROOT%{ruby_libdir}/psych* $RPM_BUILD_ROOT%{gem_dir}/gems/psych-%{psych_ver}/lib
+mv $RPM_BUILD_ROOT%{ruby_libarchdir}/psych.so $RPM_BUILD_ROOT%{gem_libdir}/psych-%{psych_ver}/lib/
+mv $RPM_BUILD_ROOT%{gem_dir}/specifications/default/psych-%{psych_ver}.gemspec $RPM_BUILD_ROOT%{gem_dir}/specifications
+ln -s %{gem_dir}/gems/psych-%{psych_ver}/lib/psych $RPM_BUILD_ROOT%{ruby_libdir}/psych
+ln -s %{gem_dir}/gems/psych-%{psych_ver}/lib/psych.rb $RPM_BUILD_ROOT%{ruby_libdir}/psych.rb
+ln -s %{gem_libdir}/psych-%{psych_ver}/lib/psych.so $RPM_BUILD_ROOT%{ruby_archdir}/psych.so
+
+# Adjust the gemspec files so that the gems will load properly
+sed -i '/^end$/ i\
+  s.require_paths = ["lib"]' $RPM_BUILD_ROOT%{gem_dir}/specifications/rake-%{rake_ver}.gemspec
+
+sed -i '/^end$/ i\
+  s.require_paths = ["lib"]' $RPM_BUILD_ROOT%{gem_dir}/specifications/rdoc-%{rdoc_ver}.gemspec
+
+sed -i '/^end$/ i\
+  s.require_paths = ["lib"]\
+  s.extensions = ["bigdecimal.so"]' $RPM_BUILD_ROOT%{gem_dir}/specifications/bigdecimal-%{bigdecimal_ver}.gemspec
+
+sed -i '/^end$/ i\
+  s.require_paths = ["lib"]\
+  s.extensions = ["io/console.so"]' $RPM_BUILD_ROOT%{gem_dir}/specifications/io-console-%{io_console_ver}.gemspec
+
+sed -i '/^end$/ i\
+  s.require_paths = ["lib"]\
+  s.extensions = ["json/ext/parser.so", "json/ext/generator.so"]' $RPM_BUILD_ROOT%{gem_dir}/specifications/json-%{json_ver}.gemspec
+
+sed -i '/^end$/ i\
+  s.require_paths = ["lib"]' $RPM_BUILD_ROOT%{gem_dir}/specifications/minitest-%{minitest_ver}.gemspec
+
+ln -sf %{gem_dir}/gems/rake-%{rake_ver}/bin/rake $RPM_BUILD_ROOT%{_bindir}/rake%{ruby_suffix}
 
 %if %{without batteries}
 # packaged separately
@@ -469,7 +629,7 @@ ln -sf %{gem_dir}/gems/rake-%{rake_ver}/bin/rake $RPM_BUILD_ROOT%{_bindir}/rake
 %{__rm} $RPM_BUILD_ROOT%{ruby_libdir}/{rake,rubygems,json}.rb
 %{__rm} $RPM_BUILD_ROOT%{_bindir}/{gem,rake}
 %{__rm} $RPM_BUILD_ROOT%{_mandir}/man1/rake*
-%{__rm} $RPM_BUILD_ROOT%{gem_dir}/specifications/{json,minitest,rake}-*.gemspec
+%{__rm} $RPM_BUILD_ROOT%{gem_dir}/specifications/default/{json,minitest,rake}-*.gemspec
 %{?with_doc:%{__rm} -r $RPM_BUILD_ROOT%{_datadir}/ri/%{ruby_version}/system/JSON}
 %endif
 
@@ -487,31 +647,30 @@ rm -rf $RPM_BUILD_ROOT
 
 %files
 %defattr(644,root,root,755)
-%doc NEWS LEGAL README README.EXT ChangeLog ToDo
-%attr(755,root,root) %{_bindir}/ruby
+%doc NEWS LEGAL README README.EXT ChangeLog
+%attr(755,root,root) %{_bindir}/ruby%{ruby_suffix}
 %attr(755,root,root) %{_libdir}/libruby.so.*.*.*
-%attr(755,root,root) %ghost %{_libdir}/libruby.so.1.9
-%{_mandir}/man1/ruby.1*
+%attr(755,root,root) %ghost %{_libdir}/libruby.so.%{ruby_version}
+%{_mandir}/man1/ruby%{ruby_suffix}.1*
 
-%dir %{_libdir}/%{name}
-%dir %{_libdir}/%{name}/%{vendordir}
-%dir %{_datadir}/%{name}
-%dir %{_datadir}/%{name}/%{vendordir}
+%dir %{_libdir}/%{oname}
+%dir %{_libdir}/%{oname}/%{vendordir}
+%dir %{_datadir}/%{oname}
 
 %dir %{ruby_libdir}
 %dir %{ruby_archdir}
 %dir %{ruby_vendorlibdir}
 %dir %{ruby_vendorarchdir}
 
-%dir %{_datadir}/ri
-%dir %{_datadir}/ri/%{ruby_version}
+%dir %{dirname:%{ruby_ridir}}
 %dir %{ruby_ridir}
-
 %dir %{ruby_rdocdir}
 
 # common dirs for ruby vendor modules
+%dir %{ruby_vendorlibdir}/data
 %dir %{ruby_vendorlibdir}/net
 
+%if 0
 # legacy dirs. when everything rebuilt in Th not using these dirs. drop them
 %dir %{legacy_archdir}
 %dir %{legacy_sitedir}
@@ -520,12 +679,13 @@ rm -rf $RPM_BUILD_ROOT
 %dir %{legacy_vendorarchdir}
 %dir %{legacy_libdir}/tasks
 %dir %{legacy_archdir}/racc
+%endif
 
 %files devel
 %defattr(644,root,root,755)
 %attr(755,root,root) %{_libdir}/libruby.so
-%{_includedir}/%{name}-%{ruby_version}
-%{_pkgconfigdir}/ruby-%{ruby_version}.pc
+%{_includedir}/%{oname}-%{ruby_version}
+%{_pkgconfigdir}/%{oname}-%{ruby_version}.pc
 %{ruby_libdir}/mkmf.rb
 
 %files static
@@ -542,13 +702,21 @@ rm -rf $RPM_BUILD_ROOT
 %attr(755,root,root) %{ruby_archdir}/t*.so
 %endif
 
+%files irb
+%defattr(644,root,root,755)
+%attr(755,root,root) %{_bindir}/irb%{ruby_suffix}
+%{ruby_libdir}/irb.rb
+%{ruby_libdir}/irb
+%{_mandir}/man1/irb%{ruby_suffix}.1*
+
 %files rdoc
 %defattr(644,root,root,755)
-%attr(755,root,root) %{_bindir}/rdoc
-%attr(755,root,root) %{_bindir}/ri
-%{_mandir}/man1/rdoc.1*
+%attr(755,root,root) %{_bindir}/rdoc%{ruby_suffix}
+%attr(755,root,root) %{_bindir}/ri%{ruby_suffix}
+%{_mandir}/man1/rdoc%{ruby_suffix}.1*
 %{ruby_libdir}/rdoc
 %dir %{gem_dir}/gems/rdoc-%{rdoc_ver}
+%{gem_dir}/gems/rdoc-%{rdoc_ver}/lib
 %dir %{gem_dir}/gems/rdoc-%{rdoc_ver}/bin
 %attr(755,root,root) %{gem_dir}/gems/rdoc-%{rdoc_ver}/bin/rdoc
 %{gem_dir}/specifications/rdoc-%{rdoc_ver}.gemspec
@@ -557,17 +725,20 @@ rm -rf $RPM_BUILD_ROOT
 %if %{with batteries}
 %files rubygems
 %defattr(644,root,root,755)
-%attr(755,root,root) %{_bindir}/gem
-%{ruby_libdir}/rubygems
-%{ruby_libdir}/rubygems.rb
-%{ruby_libdir}/ubygems.rb
+%attr(755,root,root) %{_bindir}/gem%{ruby_suffix}
+%{rubygems_dir}/rubygems
+%{rubygems_dir}/rubygems.rb
+%{rubygems_dir}/ubygems.rb
+%{rubygems_dir}/rbconfig
 
 %files rake
 %defattr(644,root,root,755)
-%attr(755,root,root) %{_bindir}/rake
-%{_mandir}/man1/rake.1*
+%attr(755,root,root) %{_bindir}/rake%{ruby_suffix}
+%{_mandir}/man1/rake%{ruby_suffix}.1*
 %{ruby_libdir}/rake
+%{ruby_libdir}/rake.rb
 %dir %{gem_dir}/gems/rake-%{rake_ver}
+%{gem_dir}/gems/rake-%{rake_ver}/lib
 %dir %{gem_dir}/gems/rake-%{rake_ver}/bin
 %attr(755,root,root) %{gem_dir}/gems/rake-%{rake_ver}/bin/rake
 %{gem_dir}/specifications/rake-%{rake_ver}.gemspec
@@ -578,15 +749,21 @@ rm -rf $RPM_BUILD_ROOT
 %dir %{ruby_archdir}/json
 %dir %{ruby_archdir}/json/ext
 %attr(755,root,root) %{ruby_archdir}/json/ext/*.so
+
+%dir %{gem_libdir}/json-%{json_ver}
+%dir %{gem_libdir}/json-%{json_ver}/lib
+%dir %{gem_libdir}/json-%{json_ver}/lib/json
+%dir %{gem_libdir}/json-%{json_ver}/lib/json/ext
+%attr(755,root,root) %{gem_libdir}/json-%{json_ver}/lib/json/ext/generator.so
+%attr(755,root,root) %{gem_libdir}/json-%{json_ver}/lib/json/ext/parser.so
+
+%{gem_dir}/gems/json-%{json_ver}
 %{gem_dir}/specifications/json-%{json_ver}.gemspec
 %endif
 
 %files modules
 %defattr(644,root,root,755)
-%attr(755,root,root) %{_bindir}/erb
-%attr(755,root,root) %{_bindir}/irb
-%attr(755,root,root) %{_bindir}/testrb
-%{ruby_libdir}/bigdecimal
+%attr(755,root,root) %{_bindir}/erb%{ruby_suffix}
 %{ruby_libdir}/cgi
 %{ruby_libdir}/date
 %{ruby_libdir}/digest
@@ -594,12 +771,10 @@ rm -rf $RPM_BUILD_ROOT
 %{ruby_libdir}/drb
 %{ruby_libdir}/fiddle
 %{ruby_libdir}/io
-%{ruby_libdir}/irb
 %{ruby_libdir}/matrix
 %{ruby_libdir}/net
 %{ruby_libdir}/openssl
 %{ruby_libdir}/optparse
-%{ruby_libdir}/psych
 %{ruby_libdir}/racc
 %{ruby_libdir}/rbconfig
 %{ruby_libdir}/rexml
@@ -607,13 +782,73 @@ rm -rf $RPM_BUILD_ROOT
 %{ruby_libdir}/ripper
 %{ruby_libdir}/rss
 %{ruby_libdir}/shell
-%{ruby_libdir}/syck
+#%{ruby_libdir}/syck
+%{ruby_libdir}/syslog
 %{ruby_libdir}/test
 %{ruby_libdir}/uri
 %{ruby_libdir}/webrick
 %{ruby_libdir}/xmlrpc
 %{ruby_libdir}/yaml
-%{ruby_libdir}/[A-Za-s]*.rb
+
+%{ruby_libdir}/English.rb
+%{ruby_libdir}/abbrev.rb
+%{ruby_libdir}/base64.rb
+%{ruby_libdir}/benchmark.rb
+%{ruby_libdir}/cgi.rb
+%{ruby_libdir}/cmath.rb
+%{ruby_libdir}/complex.rb
+%{ruby_libdir}/csv.rb
+%{ruby_libdir}/date.rb
+%{ruby_libdir}/debug.rb
+%{ruby_libdir}/delegate.rb
+%{ruby_libdir}/digest.rb
+%{ruby_libdir}/dl.rb
+%{ruby_libdir}/drb.rb
+%{ruby_libdir}/e2mmap.rb
+%{ruby_libdir}/erb.rb
+%{ruby_libdir}/expect.rb
+%{ruby_libdir}/fiddle.rb
+%{ruby_libdir}/fileutils.rb
+%{ruby_libdir}/find.rb
+%{ruby_libdir}/forwardable.rb
+%{ruby_libdir}/getoptlong.rb
+%{ruby_libdir}/gserver.rb
+%{ruby_libdir}/ipaddr.rb
+%{ruby_libdir}/json.rb
+%{ruby_libdir}/kconv.rb
+%{ruby_libdir}/logger.rb
+%{ruby_libdir}/mathn.rb
+%{ruby_libdir}/matrix.rb
+%{ruby_libdir}/monitor.rb
+%{ruby_libdir}/mutex_m.rb
+%{ruby_libdir}/observer.rb
+%{ruby_libdir}/open-uri.rb
+%{ruby_libdir}/open3.rb
+%{ruby_libdir}/openssl.rb
+%{ruby_libdir}/optparse.rb
+%{ruby_libdir}/ostruct.rb
+%{ruby_libdir}/pathname.rb
+%{ruby_libdir}/pp.rb
+%{ruby_libdir}/prettyprint.rb
+%{ruby_libdir}/prime.rb
+%{ruby_libdir}/profile.rb
+%{ruby_libdir}/profiler.rb
+%{ruby_libdir}/pstore.rb
+%{ruby_libdir}/psych.rb
+%{ruby_libdir}/rational.rb
+%{ruby_libdir}/rdoc.rb
+%{ruby_libdir}/resolv-replace.rb
+%{ruby_libdir}/resolv.rb
+%{ruby_libdir}/ripper.rb
+%{ruby_libdir}/rss.rb
+%{ruby_libdir}/scanf.rb
+%{ruby_libdir}/securerandom.rb
+%{ruby_libdir}/set.rb
+%{ruby_libdir}/shell.rb
+%{ruby_libdir}/shellwords.rb
+%{ruby_libdir}/singleton.rb
+%{ruby_libdir}/socket.rb
+%{ruby_libdir}/sync.rb
 %{ruby_libdir}/tempfile.rb
 %{ruby_libdir}/thread.rb
 %{ruby_libdir}/thwait.rb
@@ -622,14 +857,52 @@ rm -rf $RPM_BUILD_ROOT
 %{ruby_libdir}/tmpdir.rb
 %{ruby_libdir}/tracer.rb
 %{ruby_libdir}/tsort.rb
-%{ruby_libdir}/[u-z]*.rb
+%{ruby_libdir}/un.rb
+%{ruby_libdir}/uri.rb
+%{ruby_libdir}/weakref.rb
+%{ruby_libdir}/webrick.rb
+%{ruby_libdir}/xmlrpc.rb
+%{ruby_libdir}/yaml.rb
+
 %if %{with batteries}
 %exclude %{ruby_libdir}/rubygems.rb
 %exclude %{ruby_libdir}/ubygems.rb
+%exclude %{ruby_libdir}/rbconfig/datadir.rb
+%exclude %{ruby_libdir}/rbconfig/obsolete.rb
 %endif
+%exclude %{ruby_libdir}/irb.rb
 %exclude %{ruby_libdir}/mkmf.rb
-%attr(755,root,root) %{ruby_archdir}/[a-s]*.so
-%attr(755,root,root) %{ruby_archdir}/[u-z]*.so
+%exclude %{ruby_libdir}/rake.rb
+
+%{ruby_archdir}/rbconfig.rb
+%attr(755,root,root) %{ruby_archdir}/bigdecimal.so
+%attr(755,root,root) %{ruby_archdir}/continuation.so
+%attr(755,root,root) %{ruby_archdir}/coverage.so
+%attr(755,root,root) %{ruby_archdir}/curses.so
+%attr(755,root,root) %{ruby_archdir}/date_core.so
+%attr(755,root,root) %{ruby_archdir}/dbm.so
+%attr(755,root,root) %{ruby_archdir}/digest.so
+%attr(755,root,root) %{ruby_archdir}/dl.so
+%attr(755,root,root) %{ruby_archdir}/etc.so
+%attr(755,root,root) %{ruby_archdir}/fcntl.so
+%attr(755,root,root) %{ruby_archdir}/fiber.so
+%attr(755,root,root) %{ruby_archdir}/fiddle.so
+%attr(755,root,root) %{ruby_archdir}/gdbm.so
+%attr(755,root,root) %{ruby_archdir}/nkf.so
+%attr(755,root,root) %{ruby_archdir}/objspace.so
+%attr(755,root,root) %{ruby_archdir}/openssl.so
+%attr(755,root,root) %{ruby_archdir}/pathname.so
+%attr(755,root,root) %{ruby_archdir}/psych.so
+%attr(755,root,root) %{ruby_archdir}/pty.so
+%attr(755,root,root) %{ruby_archdir}/readline.so
+%attr(755,root,root) %{ruby_archdir}/ripper.so
+%attr(755,root,root) %{ruby_archdir}/sdbm.so
+%attr(755,root,root) %{ruby_archdir}/socket.so
+%attr(755,root,root) %{ruby_archdir}/stringio.so
+%attr(755,root,root) %{ruby_archdir}/strscan.so
+%attr(755,root,root) %{ruby_archdir}/syslog.so
+%attr(755,root,root) %{ruby_archdir}/zlib.so
+
 %dir %{ruby_archdir}/digest
 %attr(755,root,root) %{ruby_archdir}/digest/*.so
 %dir %{ruby_archdir}/dl
@@ -644,28 +917,55 @@ rm -rf $RPM_BUILD_ROOT
 %attr(755,root,root) %{ruby_archdir}/mathn/*.so
 %dir %{ruby_archdir}/racc
 %attr(755,root,root) %{ruby_archdir}/racc/*.so
-%{ruby_archdir}/rbconfig.rb
 
+# bigdecimal
 %{gem_dir}/specifications/bigdecimal-%{bigdecimal_ver}.gemspec
+%{gem_dir}/gems/bigdecimal-%{bigdecimal_ver}
+%dir %{gem_libdir}/bigdecimal-%{bigdecimal_ver}
+%dir %{gem_libdir}/bigdecimal-%{bigdecimal_ver}/lib
+%attr(755,root,root) %{gem_libdir}/bigdecimal-%{bigdecimal_ver}/lib/bigdecimal.so
+%{ruby_libdir}/bigdecimal
+
+%dir %{_libdir}/gems
+%dir %{_libdir}/gems/%{oname}
+
+# io-console
 %{gem_dir}/specifications/io-console-%{io_console_ver}.gemspec
+%{gem_dir}/gems/io-console-%{io_console_ver}
+%dir %{gem_libdir}/io-console-%{io_console_ver}
+%dir %{gem_libdir}/io-console-%{io_console_ver}/lib
+%dir %{gem_libdir}/io-console-%{io_console_ver}/lib/io
+%attr(755,root,root) %{gem_libdir}/io-console-%{io_console_ver}/lib/io/console.so
 
 %if %{with batteries}
 # minitest
 %{ruby_libdir}/minitest
+%{gem_dir}/gems/minitest-%{minitest_ver}
 %{gem_dir}/specifications/minitest-%{minitest_ver}.gemspec
 %endif
 
-# parents of gem_dir
-%dir %{_datadir}/%{name}/gems
-#%dir %{_datadir}/%{name}/gems/%{ruby_version}
-%dir %{_datadir}/%{name}/gems/%{ruby_version}/gems
+%{gem_dir}/specifications/psych-%{psych_ver}.gemspec
+%{gem_dir}/gems/psych-%{psych_ver}
+%{ruby_libdir}/psych
+%dir %{gem_libdir}/psych-%{psych_ver}
+%dir %{gem_libdir}/psych-%{psych_ver}/lib
+%attr(755,root,root) %{gem_libdir}/psych-%{psych_ver}/lib/psych.so
+
+# test-unit
+%{gem_dir}/specifications/test-unit-%{test_unit_ver}.gemspec
+%dir %{gem_dir}/gems/test-unit-%{test_unit_ver}
+%{gem_dir}/gems/test-unit-%{test_unit_ver}/lib
+%dir %{gem_dir}/gems/test-unit-%{test_unit_ver}/bin
+%attr(755,root,root) %{gem_dir}/gems/test-unit-%{test_unit_ver}/bin/testrb
+%attr(755,root,root) %{_bindir}/testrb%{ruby_suffix}
+%{_mandir}/man1/testrb%{ruby_suffix}.1*
 
 %dir %{gem_dir}
+%dir %{gem_dir}/gems
 %dir %{gem_dir}/specifications
-%{_mandir}/man1/erb.1*
-%{_mandir}/man1/irb.1*
-%{_mandir}/man1/ri.1*
-%{_mandir}/man1/testrb.1*
+%dir %{gem_dir}/specifications/default
+%{_mandir}/man1/erb%{ruby_suffix}.1*
+%{_mandir}/man1/ri%{ruby_suffix}.1*
 
 %files doc
 %defattr(644,root,root,755)
@@ -681,4 +981,4 @@ rm -rf $RPM_BUILD_ROOT
 
 %files examples
 %defattr(644,root,root,755)
-%{_examplesdir}/%{name}-%{version}
+%{_examplesdir}/%{oname}-*
diff --git a/rubygems-2.0.0-binary-extensions.patch b/rubygems-2.0.0-binary-extensions.patch
new file mode 100644 (file)
index 0000000..4876d35
--- /dev/null
@@ -0,0 +1,344 @@
+From ec90622235ae19b28a327cb50a10e0311e8f3d71 Mon Sep 17 00:00:00 2001
+From: =?UTF-8?q?V=C3=ADt=20Ondruch?= <vondruch@redhat.com>
+Date: Thu, 3 Nov 2011 16:43:05 +0100
+Subject: [PATCH 1/8] Add dedicate extensions folder into $LOAD_PATH.
+
+---
+ lib/rubygems/specification.rb | 32 ++++++++++++++++++++++++++++++--
+ 1 file changed, 30 insertions(+), 2 deletions(-)
+
+diff --git a/lib/rubygems/specification.rb b/lib/rubygems/specification.rb
+index cabdf8d..87b14d2 100644
+--- a/lib/rubygems/specification.rb
++++ b/lib/rubygems/specification.rb
+@@ -1256,6 +1256,12 @@ class Gem::Specification
+       File.join full_gem_path, path
+     end
+ 
++    unless extensions.empty?
++      paths += require_paths.map do |path|
++        File.join ext_dir, path
++      end
++    end
++
+     # gem directories must come after -I and ENV['RUBYLIB']
+     insert_index = Gem.load_path_insert_index
+ 
+@@ -1374,11 +1380,16 @@ class Gem::Specification
+ 
+   def contains_requirable_file? file
+     root     = full_gem_path
++    ext      = ext_dir
+     suffixes = Gem.suffixes
+ 
+     require_paths.any? do |lib|
+-      base = "#{root}/#{lib}/#{file}"
+-      suffixes.any? { |suf| File.file? "#{base}#{suf}" }
++      base = ["#{root}/#{lib}/#{file}"]
++      base << "#{ext}/#{lib}/#{file}" unless extensions.empty?
++
++      base.any? do |path|
++        suffixes.any? { |suf| File.file? "#{path}#{suf}" }
++      end
+     end
+   end
+ 
+@@ -1674,6 +1685,23 @@ class Gem::Specification
+   end
+ 
+   ##
++  # Returns the full path to this spec's ext directory.
++  # eg: /usr/local/lib/ruby/1.8/exts/mygem-1.0
++
++  def ext_dir
++    @gem_dir ||= File.expand_path File.join(exts_dir, full_name)
++  end
++
++  ##
++  # Returns the full path to the exts directory containing this spec's
++  # gem directory. eg: /usr/local/lib/ruby/1.8/exts
++
++  def exts_dir
++    # TODO: this logic seems terribly broken, but tests fail if just base_dir
++    @exts_dir ||= File.join(loaded_from && base_dir || Gem.dir, "exts")
++  end
++
++  ##
+   # Deprecated and ignored, defaults to true.
+   #
+   # Formerly used to indicate this gem was RDoc-capable.
+-- 
+1.8.1.2
+
+
+From e42819f32fc5d935f7e7189ec4be8bdab0a2cf3f Mon Sep 17 00:00:00 2001
+From: =?UTF-8?q?V=C3=ADt=20Ondruch?= <vondruch@redhat.com>
+Date: Wed, 16 Nov 2011 13:26:48 +0100
+Subject: [PATCH 2/8] Use spec's ext dir for extension installation.
+
+---
+ lib/rubygems/installer.rb     | 2 +-
+ lib/rubygems/specification.rb | 7 +++----
+ 2 files changed, 4 insertions(+), 5 deletions(-)
+
+diff --git a/lib/rubygems/installer.rb b/lib/rubygems/installer.rb
+index 780a88b..854c177 100644
+--- a/lib/rubygems/installer.rb
++++ b/lib/rubygems/installer.rb
+@@ -646,7 +646,7 @@ TEXT
+       say "This could take a while..."
+     end
+ 
+-    dest_path = File.join gem_dir, spec.require_paths.first
++    dest_path = spec.ext_dir
+     ran_rake = false # only run rake once
+ 
+     spec.extensions.each do |extension|
+diff --git a/lib/rubygems/specification.rb b/lib/rubygems/specification.rb
+index 87b14d2..492ddbe 100644
+--- a/lib/rubygems/specification.rb
++++ b/lib/rubygems/specification.rb
+@@ -1689,16 +1689,15 @@ class Gem::Specification
+   # eg: /usr/local/lib/ruby/1.8/exts/mygem-1.0
+ 
+   def ext_dir
+-    @gem_dir ||= File.expand_path File.join(exts_dir, full_name)
++    @ext_dir ||= File.join exts_dir, full_name, require_paths.first
+   end
+ 
+   ##
+   # Returns the full path to the exts directory containing this spec's
+-  # gem directory. eg: /usr/local/lib/ruby/1.8/exts
++  # gem directory. eg: /usr/local/lib/ruby/1.8/gems
+ 
+   def exts_dir
+-    # TODO: this logic seems terribly broken, but tests fail if just base_dir
+-    @exts_dir ||= File.join(loaded_from && base_dir || Gem.dir, "exts")
++    @exts_dir ||= gems_dir
+   end
+ 
+   ##
+-- 
+1.8.1.2
+
+
+From 0e9dd0655111f7dda805233c79a3771459d9a66a Mon Sep 17 00:00:00 2001
+From: =?UTF-8?q?V=C3=ADt=20Ondruch?= <vondruch@redhat.com>
+Date: Wed, 16 Nov 2011 14:52:16 +0100
+Subject: [PATCH 3/9] Simplify the extending of $LOAD_PATH for binary gems.
+
+---
+ lib/rubygems/specification.rb | 11 +++++------
+ 1 file changed, 5 insertions(+), 6 deletions(-)
+
+diff --git a/lib/rubygems/specification.rb b/lib/rubygems/specification.rb
+index 492ddbe..c703827 100644
+--- a/lib/rubygems/specification.rb
++++ b/lib/rubygems/specification.rb
+@@ -1256,11 +1256,7 @@ class Gem::Specification
+       File.join full_gem_path, path
+     end
+ 
+-    unless extensions.empty?
+-      paths += require_paths.map do |path|
+-        File.join ext_dir, path
+-      end
+-    end
++    paths << ext_dir unless extensions.empty? || paths.include?(ext_dir)
+ 
+     # gem directories must come after -I and ENV['RUBYLIB']
+     insert_index = Gem.load_path_insert_index
+@@ -1697,7 +1693,10 @@ class Gem::Specification
+   # gem directory. eg: /usr/local/lib/ruby/1.8/gems
+ 
+   def exts_dir
+-    @exts_dir ||= gems_dir
++    @exts_dir ||= begin
++      dirs = Gem.default_dirs.detect {|location, paths| paths[:gem_dir] == base_dir}
++      dirs ? File.join(dirs.last[:ext_dir], 'exts') : gems_dir
++    end
+   end
+ 
+   ##
+-- 
+1.8.1.2
+
+
+From 9a8556c609e800d0dbd24af416d613f2e82f323c Mon Sep 17 00:00:00 2001
+From: =?UTF-8?q?V=C3=ADt=20Ondruch?= <vondruch@redhat.com>
+Date: Fri, 9 Dec 2011 16:31:04 +0100
+Subject: [PATCH 4/8] Fix the binary extension search path construction.
+
+---
+ lib/rubygems/installer.rb     | 2 +-
+ lib/rubygems/specification.rb | 4 ++--
+ 2 files changed, 3 insertions(+), 3 deletions(-)
+
+diff --git a/lib/rubygems/installer.rb b/lib/rubygems/installer.rb
+index 854c177..f1f2ad7 100644
+--- a/lib/rubygems/installer.rb
++++ b/lib/rubygems/installer.rb
+@@ -646,7 +646,7 @@ TEXT
+       say "This could take a while..."
+     end
+ 
+-    dest_path = spec.ext_dir
++    dest_path = File.join spec.ext_dir, spec.require_paths.first
+     ran_rake = false # only run rake once
+ 
+     spec.extensions.each do |extension|
+diff --git a/lib/rubygems/specification.rb b/lib/rubygems/specification.rb
+index c703827..fa9ea6e 100644
+--- a/lib/rubygems/specification.rb
++++ b/lib/rubygems/specification.rb
+@@ -1256,7 +1256,7 @@ class Gem::Specification
+       File.join full_gem_path, path
+     end
+ 
+-    paths << ext_dir unless extensions.empty? || paths.include?(ext_dir)
++    paths << File.join(ext_dir, require_paths.first) unless extensions.empty? || (ext_dir == full_gem_path)
+ 
+     # gem directories must come after -I and ENV['RUBYLIB']
+     insert_index = Gem.load_path_insert_index
+@@ -1685,7 +1685,7 @@ class Gem::Specification
+   # eg: /usr/local/lib/ruby/1.8/exts/mygem-1.0
+ 
+   def ext_dir
+-    @ext_dir ||= File.join exts_dir, full_name, require_paths.first
++    @ext_dir ||= File.join exts_dir, full_name
+   end
+ 
+   ##
+-- 
+1.8.1.2
+
+
+From 476c2f90cc6f5f490858f253a9b23eb19d53d2fc Mon Sep 17 00:00:00 2001
+From: =?UTF-8?q?V=C3=ADt=20Ondruch?= <vondruch@redhat.com>
+Date: Tue, 13 Dec 2011 12:14:54 +0100
+Subject: [PATCH 5/8] Remove binary extensions during uninstall.
+
+---
+ lib/rubygems/uninstaller.rb | 1 +
+ 1 file changed, 1 insertion(+)
+
+diff --git a/lib/rubygems/uninstaller.rb b/lib/rubygems/uninstaller.rb
+index d672b9d..5c31a0c 100644
+--- a/lib/rubygems/uninstaller.rb
++++ b/lib/rubygems/uninstaller.rb
+@@ -246,6 +246,7 @@ class Gem::Uninstaller
+       File.writable?(spec.base_dir)
+ 
+     FileUtils.rm_rf spec.full_gem_path
++    FileUtils.rm_rf spec.ext_dir
+ 
+     # TODO: should this be moved to spec?... I vote eww (also exists in docmgr)
+     old_platform_name = [spec.name,
+-- 
+1.8.1.2
+
+
+From 35dc17e86f701fe1be80d98ace79735c535fd570 Mon Sep 17 00:00:00 2001
+From: =?UTF-8?q?V=C3=ADt=20Ondruch?= <vondruch@redhat.com>
+Date: Tue, 13 Dec 2011 14:27:14 +0100
+Subject: [PATCH 6/8] Avoid dependency on customized operating_system.rb.
+
+---
+ lib/rubygems/defaults.rb      | 11 +++++++++++
+ lib/rubygems/specification.rb |  5 +----
+ 2 files changed, 12 insertions(+), 4 deletions(-)
+
+diff --git a/lib/rubygems/defaults.rb b/lib/rubygems/defaults.rb
+index ea84e5c..b221954 100644
+--- a/lib/rubygems/defaults.rb
++++ b/lib/rubygems/defaults.rb
+@@ -101,6 +101,17 @@ module Gem
+   end
+ 
+   ##
++  # Returns binary extensions dir for specified RubyGems base dir or nil
++  # if such directory cannot be determined.
++  #
++  # By default, the binary extensions are located side by side with their
++  # Ruby counterparts, therefore nil is returned
++
++  def self.default_ext_dir_for base_dir
++    nil
++  end
++
++  ##
+   # A wrapper around RUBY_ENGINE const that may not be defined
+ 
+   def self.ruby_engine
+diff --git a/lib/rubygems/specification.rb b/lib/rubygems/specification.rb
+index fa9ea6e..2b10499 100644
+--- a/lib/rubygems/specification.rb
++++ b/lib/rubygems/specification.rb
+@@ -1693,10 +1693,7 @@ class Gem::Specification
+   # gem directory. eg: /usr/local/lib/ruby/1.8/gems
+ 
+   def exts_dir
+-    @exts_dir ||= begin
+-      dirs = Gem.default_dirs.detect {|location, paths| paths[:gem_dir] == base_dir}
+-      dirs ? File.join(dirs.last[:ext_dir], 'exts') : gems_dir
+-    end
++    @exts_dir ||= Gem.default_ext_dir_for(base_dir) || gems_dir
+   end
+ 
+   ##
+-- 
+1.8.1.2
+
+
+From 0937c0b0a3c2ed08ab5b0875f7f95e24157525c2 Mon Sep 17 00:00:00 2001
+From: =?UTF-8?q?V=C3=ADt=20Ondruch?= <vondruch@redhat.com>
+Date: Thu, 7 Feb 2013 13:07:34 +0100
+Subject: [PATCH 7/8] Fix binary extensions installation when --install-dir is
+ specified.
+
+---
+ lib/rubygems/installer.rb | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+diff --git a/lib/rubygems/installer.rb b/lib/rubygems/installer.rb
+index f1f2ad7..e1577fc 100644
+--- a/lib/rubygems/installer.rb
++++ b/lib/rubygems/installer.rb
+@@ -646,7 +646,7 @@ TEXT
+       say "This could take a while..."
+     end
+ 
+-    dest_path = File.join spec.ext_dir, spec.require_paths.first
++    dest_path = File.join(options[:install_dir] ? gem_dir : spec.ext_dir, spec.require_paths.first)
+     ran_rake = false # only run rake once
+ 
+     spec.extensions.each do |extension|
+-- 
+1.8.1.2
+
+
+From 062a11c59731f5875d5a8821a212c8a41cb84577 Mon Sep 17 00:00:00 2001
+From: =?UTF-8?q?V=C3=ADt=20Ondruch?= <vondruch@redhat.com>
+Date: Fri, 15 Feb 2013 17:07:07 +0100
+Subject: [PATCH 8/8] Use correct option.
+
+---
+ lib/rubygems/installer.rb | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+diff --git a/lib/rubygems/installer.rb b/lib/rubygems/installer.rb
+index e1577fc..1492c68 100644
+--- a/lib/rubygems/installer.rb
++++ b/lib/rubygems/installer.rb
+@@ -646,7 +646,7 @@ TEXT
+       say "This could take a while..."
+     end
+ 
+-    dest_path = File.join(options[:install_dir] ? gem_dir : spec.ext_dir, spec.require_paths.first)
++    dest_path = File.join(@install_dir ? gem_dir : spec.ext_dir, spec.require_paths.first)
+     ran_rake = false # only run rake once
+ 
+     spec.extensions.each do |extension|
+-- 
+1.8.1.2
+
diff --git a/strip-ccache.patch b/strip-ccache.patch
new file mode 100644 (file)
index 0000000..456a100
--- /dev/null
@@ -0,0 +1,42 @@
+strip ccache from CC and CXX from rbconfig.rb
+as a side effect, we need to pass CC to sub-makes
+
+--- ruby-2.0.0-p353/tool/mkconfig.rb~  2013-03-24 17:42:06.000000000 +0200
++++ ruby-2.0.0-p353/tool/mkconfig.rb   2014-03-18 10:34:08.489251715 +0200
+@@ -77,6 +77,7 @@
+     when /^(?:MAJOR|MINOR|TEENY)$/; next
+     when /^RUBY_INSTALL_NAME$/; next if $install_name
+     when /^RUBY_SO_NAME$/; next if $so_name
++    when /^(CC|CXX)$/; val.sub!(/ccache /, '')
+     when /^arch$/; if val.empty? then val = arch else arch = val end
+     when /^sitearch$/; val = '$(arch)' if val.empty?
+     end
+--- ruby-2.0.0-p451/common.mk  2014-04-05 16:16:52.983112032 +0300
++++ ruby-2.0.0-p451/common.mk  2014-04-05 16:26:58.679843426 +0300
+@@ -176,7 +176,7 @@
+ configure-ext: $(EXTS_MK)
+ 
+ build-ext: $(EXTS_MK)
+-      $(Q)$(MAKE) -f $(EXTS_MK) $(MFLAGS) $(EXTSTATIC) LIBRUBY_EXTS=$(LIBRUBY_EXTS) ENCOBJS="$(ENCOBJS)"
++      $(Q)$(MAKE) -f $(EXTS_MK) $(MFLAGS) $(EXTSTATIC) LIBRUBY_EXTS=$(LIBRUBY_EXTS) ENCOBJS="$(ENCOBJS)" CC="$(CC)"
+ 
+ $(MKMAIN_CMD): $(MKFILES) all-incs $(PREP) $(RBCONFIG) $(LIBRUBY)
+       $(Q)$(MINIRUBY) $(srcdir)/ext/extmk.rb --make="$(MAKE)" --command-output=$@ $(EXTMK_ARGS)
+@@ -545,7 +545,7 @@
+       $(ECHO) making $@
+       $(Q) $(MAKE) -f $(ENC_MK) V="$(V)" \
+               RUBY="$(MINIRUBY)" MINIRUBY="$(MINIRUBY)" \
+-              $(MFLAGS) $@
++              $(MFLAGS) CC="$(CC)" $@
+ 
+ 
+ libenc enc: {$(VPATH)}encdb.h
+@@ -860,7 +860,7 @@
+ 
+ srcs-enc: $(ENC_MK)
+       $(ECHO) making srcs under enc
+-      $(Q) $(MAKE) -f $(ENC_MK) RUBY="$(MINIRUBY)" MINIRUBY="$(MINIRUBY)" $(MFLAGS) srcs
++      $(Q) $(MAKE) -f $(ENC_MK) RUBY="$(MINIRUBY)" MINIRUBY="$(MINIRUBY)" CC="$(CC)" $(MFLAGS) srcs
+ 
+ all-incs: incs
+ incs: $(INSNS) {$(VPATH)}node_name.inc {$(VPATH)}encdb.h {$(VPATH)}transdb.h {$(VPATH)}known_errors.inc \
diff --git a/x32-asm.patch b/x32-asm.patch
new file mode 100644 (file)
index 0000000..9fb8e87
--- /dev/null
@@ -0,0 +1,16 @@
+Index: ruby1.9.1-1.9.3.484/gc.h
+===================================================================
+--- ruby1.9.1-1.9.3.484.orig/gc.h      2014-03-08 07:14:10.672333559 -0800
++++ ruby1.9.1-1.9.3.484/gc.h   2014-03-08 07:17:00.820079593 -0800
+@@ -3,7 +3,11 @@
+ #define RUBY_GC_H 1
+ 
+ #if defined(__x86_64__) && defined(__GNUC__) && !defined(__native_client__)
++#ifdef __ILP32__
++#define SET_MACHINE_STACK_END(p) __asm__ volatile ("movl\t%%esp, %0" : "=r" (*(p)))
++#else
+ #define SET_MACHINE_STACK_END(p) __asm__ volatile ("movq\t%%rsp, %0" : "=r" (*(p)))
++#endif
+ #elif defined(__i386) && defined(__GNUC__) && !defined(__native_client__)
+ #define SET_MACHINE_STACK_END(p) __asm__ volatile ("movl\t%%esp, %0" : "=r" (*(p)))
+ #else