From: Marcin Krol Date: Mon, 8 Jun 2015 12:03:13 +0000 (+0000) Subject: - merged 2.0.0.645 from PLD X-Git-Url: https://git.tld-linux.org/?a=commitdiff_plain;h=600fa2bfdfce82c547bc699ddce738f73932d84c;p=packages%2Fruby.git - merged 2.0.0.645 from PLD --- diff --git a/custom-rubygems-location.patch b/custom-rubygems-location.patch new file mode 100644 index 0000000..90ad58d --- /dev/null +++ b/custom-rubygems-location.patch @@ -0,0 +1,84 @@ +From b5e9dc3683cb085aa57e7b12c35a4f21b2cc1482 Mon Sep 17 00:00:00 2001 +From: =?UTF-8?q?V=C3=ADt=20Ondruch?= +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" !!) ++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 index 0000000..58d602d --- /dev/null +++ b/duplicated-paths.patch @@ -0,0 +1,70 @@ +From e943a89efd63dcfb80a0ab8d9a4db37f523f508e Mon Sep 17 00:00:00 2001 +From: =?UTF-8?q?V=C3=ADt=20Ondruch?= +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 !!) + 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] !!) + 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 index 0000000..0e2b2d6 --- /dev/null +++ b/empty-ruby-version.patch @@ -0,0 +1,34 @@ +From c9b2eff36728266052ccfff54d3ac0a0624fd0f1 Mon Sep 17 00:00:00 2001 +From: =?UTF-8?q?V=C3=ADt=20Ondruch?= +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 + diff --git a/mkmf-verbose.patch b/mkmf-verbose.patch index 7da66c8..de78ad8 100644 --- a/mkmf-verbose.patch +++ b/mkmf-verbose.patch @@ -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?= +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 index 0000000..c3b19d6 --- /dev/null +++ b/operating_system.rb @@ -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 diff --git a/ruby-lib64.patch b/ruby-lib64.patch index 44de4b0..dadd715 100644 --- a/ruby-lib64.patch +++ b/ruby-lib64.patch @@ -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 index 0000000..66039c8 --- /dev/null +++ b/ruby-posixsh.patch @@ -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}' diff --git a/ruby.spec b/ruby.spec index d057cbd..c5564a3 100644 --- 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 index 0000000..4876d35 --- /dev/null +++ b/rubygems-2.0.0-binary-extensions.patch @@ -0,0 +1,344 @@ +From ec90622235ae19b28a327cb50a10e0311e8f3d71 Mon Sep 17 00:00:00 2001 +From: =?UTF-8?q?V=C3=ADt=20Ondruch?= +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?= +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?= +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?= +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?= +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?= +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?= +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?= +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 index 0000000..456a100 --- /dev/null +++ b/strip-ccache.patch @@ -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 index 0000000..9fb8e87 --- /dev/null +++ b/x32-asm.patch @@ -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