diff --git a/.fmf/version b/.fmf/version new file mode 100644 index 0000000..d00491f --- /dev/null +++ b/.fmf/version @@ -0,0 +1 @@ +1 diff --git a/.gitignore b/.gitignore index 552398f..d2399ca 100644 --- a/.gitignore +++ b/.gitignore @@ -1,23 +1,6 @@ -ruby-1.8.7-p299.tar.bz2 -ruby-rev415a3ef9ab82c65a7abc-ext_tk.tar.gz -/ruby-1.8.7-p302.tar.bz2 -/ruby-rev54f344095916f83a2755a177f94e65a1c390a612-ext_tk.tar.gz -/ruby-1.8.7-p330.tar.bz2 -/ruby-revf30eca26639ce538339bc488c7ed1fd397b0c13f-ext_tk.tar.gz -/ruby-1.8.7-p334.tar.bz2 -/ruby-1.8.7-p352.tar.bz2 -/ruby-revc2dfaa7d40531aef3706bcc16f38178b0c6633ee-ext_tk.tar.gz -/ruby-1.8.7-p357.tar.bz2 -/ruby-1.9.3-p0.tar.gz -/ruby-1.9.3-p125.tar.gz -/ruby-1.9.3-p194.tar.gz -/ruby-1.9.3-p286.tar.gz -/ruby-1.9.3-p327.tar.gz -/ruby-1.9.3-p362.tar.gz -/ruby-1.9.3-p374.tar.gz -/ruby-1.9.3-p385.tar.gz -/ruby-2.0.0-r39387.tar.gz -/ruby-2.0.0-p0.tar.gz -/ruby-2.0.0-p195.tar.bz2 -/ruby-2.0.0-p247.tar.bz2 -/ruby-2.0.0-p353.tar.bz2 +/*/ +/ruby-*.tar.xz +/rexml-*.gem +/*.rpm + +!/plans/ diff --git a/abrt_prelude.rb b/abrt_prelude.rb deleted file mode 100644 index 5ffc51d..0000000 --- a/abrt_prelude.rb +++ /dev/null @@ -1,4 +0,0 @@ -begin - require 'abrt' -rescue LoadError -end diff --git a/config.h b/config.h deleted file mode 100644 index ce501db..0000000 --- a/config.h +++ /dev/null @@ -1,46 +0,0 @@ -/* - * This config.h is a wrapper include file for the original ruby/config.h, - * which has been renamed to ruby/config-.h. There are conflicts for the - * original ruby/config.h on multilib systems, which result from arch-specific - * configuration options. Please do not use the arch-specific file directly. - */ - -/* - * This wrapped is addpated from SDL's one: - * http://pkgs.fedoraproject.org/cgit/SDL.git/tree/SDL_config.h - */ - -#ifdef ruby_config_wrapper_h -#error "ruby_config_wrapper_h should not be defined!" -#endif -#define ruby_config_wrapper_h - -#if defined(__i386__) -#include "ruby/config-i386.h" -#elif defined(__ia64__) -#include "ruby/config-ia64.h" -#elif defined(__powerpc64__) -#include "ruby/config-ppc64.h" -#elif defined(__powerpc__) -#include "ruby/config-ppc.h" -#elif defined(__s390x__) -#include "ruby/config-s390x.h" -#elif defined(__s390__) -#include "ruby/config-s390.h" -#elif defined(__x86_64__) -#include "ruby/config-x86_64.h" -#elif defined(__arm__) -#include "ruby/config-arm.h" -#elif defined(__alpha__) -#include "ruby/config-alpha.h" -#elif defined(__sparc__) && defined (__arch64__) -#include "ruby/config-sparc64.h" -#elif defined(__sparc__) -#include "ruby/config-sparc.h" -#elif defined(__aarch64__) -#include "ruby/config-aarch64.h" -#else -#error "The ruby-devel package is not usable with the architecture." -#endif - -#undef ruby_config_wrapper_h diff --git a/macros.rubygems b/macros.rubygems index 1043c02..7146c77 100644 --- a/macros.rubygems +++ b/macros.rubygems @@ -2,36 +2,226 @@ %gem_dir %{_datadir}/gems %gem_archdir %{_libdir}/gems -# Common gem locations and files. -%gem_instdir %{gem_dir}/gems/%{gem_name}-%{version} -%gem_extdir_mri %{gem_archdir}/%{name}/%{gem_name}-%{version} -%gem_libdir %{gem_instdir}/lib -%gem_cache %{gem_dir}/cache/%{gem_name}-%{version}.gem -%gem_spec %{gem_dir}/specifications/%{gem_name}-%{version}.gemspec -%gem_docdir %{gem_dir}/doc/%{gem_name}-%{version} +# %gem_prerelease - Provides prerelease string if available. +# +# Usage: %gem_prerelease [custom_gem_name] +# +# If avilable, prints prerelease string, which is a %prerelease macro by +# default. When [custom_gem_name] is provided, the custom_gem_name is used to +# derive %custom_gem_name_prerelease macro, which can be predefined. +# +# Please note that for the prerelease macros are the dashes in +# [custom_gem_name] replaced by underscores. +# +%gem_prerelease() %{?1:%{expand:%%{?%{gsub %{1} - _}_prerelease}}}%{!?1:%{?prerelease}} -# Install gem into appropriate directory. -# -n Overrides gem file name for installation. -# -d Set installation directory. +# %gem_version - Provides version string (including prerelease if available). +# +# Usage: %gem_version [custom_gem_name] +# +# Prints version (including prerelease string), that is %version macro by +# default. When [custom_gem_name] is provided, the custom_gem_name is used to +# derive %custom_gem_name_version macro which needs to be predefined. +# +# Please note that for the version macros are the dashes in [custom_gem_name] +# replaced by underscores. +# +%gem_version() %{?1:%{expand:%{%{gsub %{1} - _}_version}}}%{!?1:%{version}}%{gem_prerelease %{?1}} + +# %gem_name_version - Provides gem_name-version string. +# +# Usage: %gem_name_version [custom_gem_name] +# +# Prints gem_name-version string, by default joining %gem_name, %version and +# %prerelease macros. When [custom_gem_name] is provided, the +# custom_gem_name is joined with version as provided by %gem_version macro. +# +%gem_name_version() %{?1}%{!?1:%{gem_name}}-%{gem_version %{?1}} + +# Common gem locations and files. +# +# These macros leverages %gem_name_version macro and accepts custom gem_name. +# +# -d Use default gem install location. +# +%gem_instdir() %{gem_dir}/gems/%{gem_name_version %{?1}} +%gem_extdir_mri() %{gem_archdir}/%{name}/%{gem_name_version %{?1}} +%gem_libdir() %{gem_instdir %{?1}}/lib +%gem_cache() %{gem_dir}/cache/%{gem_name_version %{?1}}.gem +%gem_spec(d) %{gem_dir}/specifications%{?-d:/default}/%{gem_name_version %{?1}}.gemspec +%gem_docdir() %{gem_dir}/doc/%{gem_name_version %{?1}} +%gem_plugin() %{gem_dir}/plugins/%{?1}%{!?1:%{gem_name}}_plugin.rb + + +# %gem_install - Install gem into appropriate directory. +# +# Usage: %gem_install [options] +# +# -n Overrides gem file name for installation. +# -d Set installation directory. +# %gem_install(d:n:) \ mkdir -p %{-d*}%{!?-d:.%{gem_dir}} \ \ -CONFIGURE_ARGS="--with-cflags='%{optflags}' $CONFIGURE_ARGS" \\\ +CONFIGURE_ARGS="--with-cflags='%{optflags}' --with-cxxflags='%{optflags}' --with-ldflags='%{build_ldflags}' $CONFIGURE_ARGS" \\\ gem install \\\ -V \\\ --local \\\ - --install-dir %{-d*}%{!?-d:.%{gem_dir}} \\\ - --bindir .%{_bindir} \\\ + --build-root %{-d*}%{!?-d:.} \\\ --force \\\ --document=ri,rdoc \\\ - %{-n*}%{!?-n:%{gem_name}-%{version}.gem} \ + %{-n*}%{!?-n:%{gem_name}-%{version}%{?prerelease}.gem} \ %{nil} -# For rubygems packages we want to filter out any provides caused by private -# libs in %%{gem_archdir}. + +# The 'read' command in %%gemspec_* macros is not essential, but it is usefull +# to make the sript appear in build log. + + +# %gemspec_add_dep - Add dependency into .gemspec. # -# Note that this must be invoked in the spec file, preferably as -# "%{?rubygems_default_filter}", before any %description block. -%rubygems_default_filter %{expand: \ -%global __provides_exclude_from %{?__provides_exclude_from:%{__provides_exclude_from}|}^%{gem_extdir_mri}/.*\\\\.so$ \ -} +# Usage: %gemspec_add_dep -g [options] [requirements] +# +# Add dependency named to .gemspec file. The macro adds runtime +# dependency by default. The [requirements] argument can be used to specify +# the dependency constraints more precisely. It is expected to be valid Ruby +# code. +# +# -s Overrides the default .gemspec location. +# -d Add development dependecy. +# +%gemspec_add_dep(g:s:d) \ +read -d '' gemspec_add_dep_script << 'EOR' || : \ + gemspec_file = '%{-s*}%{!?-s:%{_builddir}/%{gem_name}-%{version}%{?prerelease}.gemspec}' \ + \ + name = '%{-g*}' \ + requirements = %{*}%{!?1:nil} \ + \ + type = :%{!?-d:runtime}%{?-d:development} \ + \ + spec = Gem::Specification.load(gemspec_file) \ + abort("#{gemspec_file} is not accessible.") unless spec \ + \ + dep = spec.dependencies.detect { |d| d.type == type && d.name == name } \ + if dep \ + dep.requirement.concat requirements \ + else \ + spec.public_send "add_#{type}_dependency", name, requirements \ + end \ + File.write gemspec_file, spec.to_ruby \ +EOR\ +echo "$gemspec_add_dep_script" | ruby \ +unset -v gemspec_add_dep_script \ +%{nil} + + +# %gemspec_remove_dep - Remove dependency from .gemspec. +# +# Usage: %gemspec_remove_dep -g [options] [requirements] +# +# Remove dependency named from .gemspec file. The macro removes runtime +# dependency by default. The [requirements] argument can be used to specify +# the dependency constraints more precisely. It is expected to be valid Ruby +# code. The macro fails if these specific requirements can't be removed. +# +# -s Overrides the default .gemspec location. +# -d Remove development dependecy. +# +%gemspec_remove_dep(g:s:d) \ +read -d '' gemspec_remove_dep_script << 'EOR' || : \ + gemspec_file = '%{-s*}%{!?-s:%{_builddir}/%{gem_name}-%{version}%{?prerelease}.gemspec}' \ + \ + name = '%{-g*}' \ + requirements = %{*}%{!?1:nil} \ + \ + type = :%{!?-d:runtime}%{?-d:development} \ + \ + spec = Gem::Specification.load(gemspec_file) \ + abort("#{gemspec_file} is not accessible.") unless spec \ + \ + dep = spec.dependencies.detect { |d| d.type == type && d.name == name } \ + if dep \ + if requirements \ + requirements = Gem::Requirement.create(requirements).requirements \ + requirements.each do |r| \ + unless dep.requirement.requirements.reject! { |dependency_requirements| dependency_requirements == r } \ + abort("Requirement '#{r.first} #{r.last}' was not possible to remove for dependency '#{dep}'!") \ + end \ + end \ + spec.dependencies.delete dep if dep.requirement.requirements.empty? \ + else \ + spec.dependencies.delete dep \ + end \ + else \ + abort("Dependency '#{name}' was not found!") \ + end \ + File.write gemspec_file, spec.to_ruby \ +EOR\ +echo "$gemspec_remove_dep_script" | ruby \ +unset -v gemspec_remove_dep_script \ +%{nil} + + +# %%gemspec_add_file - Add files to various files lists in .gemspec. +# +# Usage: %%gemspec_add_file [options] +# +# Add files to .gemspec file. is expected to be valid Ruby code. +# Path to file is expected. Does not check real files in any way. +# By default, `files` list is edited. +# +# -s Overrides the default .gemspec location. +# -t Edit test_files only. +# -r Edit extra_rdoc_files only. +# +%gemspec_add_file(s:tr) \ +read -d '' gemspec_add_file_script << 'EOR' || : \ + gemspec_file = '%{-s*}%{!?-s:%{_builddir}/%{gem_name}-%{version}%{?prerelease}.gemspec}' \ + \ + abort("gemspec_add_file: Use only one '-t' or '-r' at a time.") if "%{?-t}%{?-r}" == "-t-r" \ + \ + filenames = %{*}%{!?1:nil} \ + filenames = Array(filenames) \ + \ + spec = Gem::Specification.load(gemspec_file) \ + abort("#{gemspec_file} is not accessible.") unless spec \ + \ + spec.%{?-t:test_}%{?-r:extra_rdoc_}files += filenames \ + File.write gemspec_file, spec.to_ruby \ +EOR\ +echo "$gemspec_add_file_script" | ruby \ +unset -v gemspec_add_file_script \ +%{nil} + + +# %%gemspec_remove_file - Remove files from various files lists in .gemspec. +# +# Usage: %%gemspec_remove_file [options] +# +# Remove files from .gemspec file. is expected to be valid Ruby code. +# Path to file is expected. Does not check/remove real files in any way. +# By default, `files` list is edited. File has to be removed from `test_files` +# first in order to be removable from `files`. +# +# -s Overrides the default .gemspec location. +# -t Edit test_files only. +# -r Edit extra_rdoc_files only. +# +%gemspec_remove_file(s:tr) \ +read -d '' gemspec_remove_file_script << 'EOR' || : \ + gemspec_file = '%{-s*}%{!?-s:%{_builddir}/%{gem_name}-%{version}%{?prerelease}.gemspec}' \ + \ + abort("gemspec_remove_file: Use only one '-t' or '-r' at a time.") if "%{?-t}%{?-r}" == "-t-r" \ + \ + filenames = %{*}%{!?1:nil} \ + filenames = Array(filenames) \ + \ + spec = Gem::Specification.load(gemspec_file) \ + abort("#{gemspec_file} is not accessible.") unless spec \ + \ + spec.%{?-t:test_}%{?-r:extra_rdoc_}files -= filenames \ + File.write gemspec_file, spec.to_ruby \ +EOR\ +echo "$gemspec_remove_file_script" | ruby \ +unset -v gemspec_remove_file_script \ +%{nil} diff --git a/operating_system.rb b/operating_system.rb index c3b19d6..fd56386 100644 --- a/operating_system.rb +++ b/operating_system.rb @@ -6,11 +6,38 @@ module Gem # E.g. for '/usr/share/ruby', 'ruby', it returns '/usr' def previous_but_one_dir_to(path, dir) + return unless path + 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 + ## + # Detects --install-dir option specified on command line. + + def opt_install_dir? + @opt_install_dir ||= ARGV.include?('--install-dir') || ARGV.include?('-i') + end + private :opt_install_dir? + + ## + # Detects --build-root option specified on command line. + + def opt_build_root? + @opt_build_root ||= ARGV.include?('--build-root') + end + private :opt_build_root? + + ## + # Tries to detect, if arguments and environment variables suggest that + # 'gem install' is executed from rpmbuild. + + def rpmbuild? + @rpmbuild ||= ENV['RPM_PACKAGE_NAME'] && (opt_install_dir? || opt_build_root?) + end + private :rpmbuild? + ## # Default gems locations allowed on FHS system (/usr, /usr/share). # The locations are derived from directories specified during build @@ -18,8 +45,8 @@ module Gem 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]) + :system => previous_but_one_dir_to(RbConfig::CONFIG['vendordir'], RbConfig::CONFIG['RUBY_INSTALL_NAME']), + :local => previous_but_one_dir_to(RbConfig::CONFIG['sitedir'], RbConfig::CONFIG['RUBY_INSTALL_NAME']) } end @@ -30,18 +57,30 @@ module Gem def default_dirs @libdir ||= case RUBY_PLATFORM when 'java' - ConfigMap[:datadir] + RbConfig::CONFIG['datadir'] else - ConfigMap[:libdir] + RbConfig::CONFIG['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] + @default_dirs ||= default_locations.inject(Hash.new) do |hash, location| + destination, path = location + + hash[destination] = if path + { + :bin_dir => File.join(path, RbConfig::CONFIG['bindir'].split(File::SEPARATOR).last), + :gem_dir => File.join(path, RbConfig::CONFIG['datadir'].split(File::SEPARATOR).last, 'gems'), + :ext_dir => File.join(path, @libdir.split(File::SEPARATOR).last, 'gems') + } + else + { + :bin_dir => '', + :gem_dir => '', + :ext_dir => '' + } + end + + hash + end end ## @@ -49,6 +88,7 @@ module Gem # warnings otherwise issued by Ruby. remove_method :default_dir if method_defined? :default_dir + remove_method :default_specifications_dir if method_defined? :default_specifications_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 @@ -57,20 +97,35 @@ module Gem # RubyGems default overrides. def default_dir - if Process.uid == 0 + if opt_build_root? + Gem.default_dirs[:system][:gem_dir] + elsif Process.uid == 0 Gem.default_dirs[:local][:gem_dir] else Gem.user_dir end end + ## + # Path to specification files of default gems. + + def default_specifications_dir + @default_specifications_dir ||= File.join(Gem.default_dirs[:system][:gem_dir], "specifications", "default") + end + + ## + # Default gem load path + def default_path path = default_dirs.collect {|location, paths| paths[:gem_dir]} path.unshift Gem.user_dir if File.exist? Gem.user_home + path end def default_bindir - if Process.uid == 0 + if opt_build_root? + Gem.default_dirs[:system][:bin_dir] + elsif Process.uid == 0 Gem.default_dirs[:local][:bin_dir] else File.join [Dir.home, 'bin'] @@ -78,8 +133,26 @@ module Gem 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']) + dir = if rpmbuild? + build_dir = base_dir.chomp Gem.default_dirs[:system][:gem_dir] + if build_dir != base_dir + File.join build_dir, Gem.default_dirs[:system][:ext_dir] + end + else + dirs = Gem.default_dirs.detect {|location, paths| paths[:gem_dir] == base_dir} + dirs && dirs.last[:ext_dir] + end + dir && File.join(dir, RbConfig::CONFIG['RUBY_INSTALL_NAME']) + end + + # This method should be available since RubyGems 2.2 until RubyGems 3.0. + # https://github.com/rubygems/rubygems/issues/749 + if method_defined? :install_extension_in_lib + remove_method :install_extension_in_lib + + def install_extension_in_lib + false + end end end end diff --git a/plans/all.fmf b/plans/all.fmf new file mode 100644 index 0000000..7b06cfb --- /dev/null +++ b/plans/all.fmf @@ -0,0 +1,6 @@ +summary: Test plan with all Fedora tests +discover: + how: fmf + url: https://src.fedoraproject.org/tests/ruby.git +execute: + how: tmt diff --git a/rdoc-pr1531-fix-mutilple-document-installation.patch b/rdoc-pr1531-fix-mutilple-document-installation.patch new file mode 100644 index 0000000..192863f --- /dev/null +++ b/rdoc-pr1531-fix-mutilple-document-installation.patch @@ -0,0 +1,28 @@ +From 994ee4c17fb8c217ab0335df55620c6bdb5d5cbe Mon Sep 17 00:00:00 2001 +From: tompng +Date: Fri, 26 Dec 2025 04:57:12 +0900 +Subject: [PATCH] Fix comment_location for merged ClassModule + +--- + lib/rdoc/code_object/class_module.rb | 7 ++++++- + test/rdoc/code_object/class_module_test.rb | 6 ++++++ + 2 files changed, 12 insertions(+), 1 deletion(-) + +diff --git a/lib/rdoc/code_object/class_module.rb b/lib/rdoc/code_object/class_module.rb +index b6bed352a2..d7ee36f950 100644 +--- a/lib/rdoc/code_object/class_module.rb ++++ b/lib/rdoc/code_object/class_module.rb +@@ -477,7 +477,12 @@ def merge(class_module) + document = document.merge other_document + + @comment = RDoc::Comment.from_document(document) +- @comment_location = document ++ ++ @comment_location = if document.parts.first.is_a?(RDoc::Markup::Document) ++ document.parts.map { |doc| [doc, doc.file] } ++ else ++ [[document, document.file]] ++ end + end + + cm = class_module diff --git a/rpm_test_helper.rb b/rpm_test_helper.rb new file mode 100644 index 0000000..671ca55 --- /dev/null +++ b/rpm_test_helper.rb @@ -0,0 +1,166 @@ +require 'tmpdir' +require 'tempfile' +require 'fileutils' +# Available in Ruby upstream sources under tool/lib/envutil.rb +# Required for finding and setting up the built ruby binary. +require 'envutil' + +module RPMTestHelper + def setup + @tmpdir = Dir.mktmpdir + @tempfiles = [] + end + + def teardown + @tempfiles.each do |file| + file.close + file.unlink + end + + FileUtils.rmtree(@tmpdir) + end + + GENERATOR_SCRIPT = ENV['GENERATOR_SCRIPT'].clone.freeze + if GENERATOR_SCRIPT.nil? || GENERATOR_SCRIPT == '' + raise "GENERATOR_SCRIPT is not specified." \ + "Specify the ENV variable with absolute path to the generator." + end + + Dependency = Struct.new('Dependency', :name, :requirements) do + def to_rpm_str + "rubygem(#{self.name})" + end + end + + def make_gemspec(gem_info) + file = Tempfile.new('req_gemspec', @tmpdir) + # Fake gemspec with enough to pass most checks + # Rubygems uses to validate the format. + gemspec_contents = <<~EOF + # -*- encoding: utf-8 -*- + # stub: #{gem_info.name} #{gem_info.version} ruby lib + + Gem::Specification.new do |s| + s.name = "#{gem_info.name}".freeze + s.version = "#{gem_info.version}" + + s.required_rubygems_version = Gem::Requirement.new(">= 0".freeze) if s.respond_to? :required_rubygems_version= + s.require_paths = ["lib".freeze] + s.authors = ["John Doe".freeze] + s.bindir = "bin".freeze + s.date = "2023-12-15" + s.description = "Fake gemspec helper for testing Rubygem Generators".freeze + s.email = ["example@example.com".freeze] + s.files = ["LICENSE.txt".freeze, "lib/#{gem_info.name}.rb".freeze, "#{gem_info.name}.gemspec".freeze] + s.homepage = "https://pkgs.fedoraproject.org/rpms/ruby".freeze + s.licenses = ["MIT".freeze] + s.required_ruby_version = Gem::Requirement.new(">= 2.5.0".freeze) + s.rubygems_version = "3.3.5".freeze + s.summary = "Fake gemspec for testing Rubygem Generators".freeze + + if s.respond_to? :specification_version then + s.specification_version = 4 + end + + if s.respond_to? :add_runtime_dependency then + #{gem_info.gemspec_runtime_dep_str} + else + #{gem_info.gemspec_dep_str} + end + end + EOF + + file.write gemspec_contents + file.rewind + @tempfiles << file + file + end + + # Caller is expected to close subprocess stdin via #close_write + # in order to let subprocess proceed if the process is reading + # from STDIN in a loop. + def rb_subprocess(*args) + args = [GENERATOR_SCRIPT] if args.empty? + ruby = EnvUtil.rubybin + f = IO.popen([ruby] + args, 'r+') #, external_encoding: external_encoding) + yield(f) + ensure + f.close unless !f || f.closed? + end + + def run_generator_single_file(gem_info) + lines = [] + gemspec_f = make_gemspec(gem_info) + + rb_subprocess do |io| + io.write gemspec_f.path + io.close_write + lines = io.readlines + end + + lines + end + + def helper_rubygems_dependency + "ruby(rubygems)" + end + + class GemInfo + attr_accessor :name, :version, :dependencies + + def initialize(name: 'foo', version: '1.2.3', dependencies: []) + @name = name + @version = version + @dependencies = dependencies + end + + def dependencies=(other) + raise ArgumentError, "#{self.class.name}##{__method__.to_s}: Expected array of `Dependency' elements" \ + unless other.is_a?(Array) && other.all? { |elem| elem.respond_to?(:name) && elem.respond_to?(:requirements) } + + @dependencies = other + end + + def to_rpm_str + "rubygem(#{self.name})" + end + + def gemspec_dep_str + return '' if self.dependencies.nil? || self.dependencies.empty? + @dependencies.inject("") do |memo, dep| + memo += if dep.requirements && !dep.requirements.empty? + %Q|s.add_dependency(%q<#{dep.name}>.freeze, #{handle_dep_requirements(dep.requirements)})| + else + %Q|s.add_dependency(%q<#{dep.name}>.freeze)| + end + + memo += "\n" + end + end + + def gemspec_runtime_dep_str + return '' if self.dependencies.nil? || self.dependencies.empty? + + @dependencies.inject("") do |memo, dep| + memo += if dep.requirements && !dep.requirements.empty? + %Q|s.add_runtime_dependency(%q<#{dep.name}>.freeze, #{handle_dep_requirements(dep.requirements)})| + else + %Q|s.add_runtime_dependency(%q<#{dep.name}>.freeze)| + end + + memo += "\n" + end + end + + private + + def handle_dep_requirements(reqs) + raise ArgumentError, "#{self.class.name}##{__method__.to_s}: Reqs must be an array." \ + unless reqs.is_a? Array + raise ArgumentError, "#{self.class.name}##{__method__.to_s}: Reqs must not be empty for this method." \ + if reqs.empty? + + '[ "' + reqs.join('", "') + '" ]' + end + end +end diff --git a/ruby-1.9.3-always-use-i386.patch b/ruby-1.9.3-always-use-i386.patch deleted file mode 100644 index 8b724a8..0000000 --- a/ruby-1.9.3-always-use-i386.patch +++ /dev/null @@ -1,25 +0,0 @@ -From 796aa193a0e01f3035361f045ac66486d71f608a Mon Sep 17 00:00:00 2001 -From: =?UTF-8?q?V=C3=ADt=20Ondruch?= -Date: Mon, 19 Nov 2012 14:37:28 +0100 -Subject: [PATCH] Always use i386. - ---- - configure.in | 2 ++ - 1 file changed, 2 insertions(+) - -diff --git a/configure.in b/configure.in -index 418b0cb..d26fe5b 100644 ---- a/configure.in -+++ b/configure.in -@@ -3419,6 +3419,8 @@ AC_SUBST(vendorarchdir)dnl - configure_args=$ac_configure_args - AC_SUBST(configure_args)dnl - -+target_cpu=`echo $target_cpu | sed s/i.86/i386/` -+ - if test "${universal_binary-no}" = yes ; then - arch="universal-${target_os}" - AC_CACHE_CHECK(whether __ARCHITECTURE__ is available, rb_cv_architecture_available, --- -1.8.1 - diff --git a/ruby-1.9.3-custom-rubygems-location.patch b/ruby-1.9.3-custom-rubygems-location.patch deleted file mode 100644 index 90ad58d..0000000 --- a/ruby-1.9.3-custom-rubygems-location.patch +++ /dev/null @@ -1,84 +0,0 @@ -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/ruby-1.9.3-mkmf-verbose.patch b/ruby-1.9.3-mkmf-verbose.patch deleted file mode 100644 index de78ad8..0000000 --- a/ruby-1.9.3-mkmf-verbose.patch +++ /dev/null @@ -1,25 +0,0 @@ -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. --V = 0 -+V = 1 - Q1 = $(V:1=) - Q = $(Q1:0=@) - ECHO1 = $(V:1=@#{CONFIG['NULLCMD']}) --- -1.8.1.2 - diff --git a/ruby-1.9.3.p195-fix-webrick-tests.patch b/ruby-1.9.3.p195-fix-webrick-tests.patch deleted file mode 100644 index b340bff..0000000 --- a/ruby-1.9.3.p195-fix-webrick-tests.patch +++ /dev/null @@ -1,13 +0,0 @@ -diff --git a/test/runner.rb b/test/runner.rb -index 49844c7..8e59a85 100644 ---- a/test/runner.rb -+++ b/test/runner.rb -@@ -2,6 +2,8 @@ require 'rbconfig' - - require 'test/unit' - -+require_relative 'ruby/envutil' -+ - src_testdir = File.dirname(File.realpath(__FILE__)) - $LOAD_PATH << src_testdir - module Gem diff --git a/ruby-2.0.0-Prevent-duplicated-paths-when-empty-version-string-i.patch b/ruby-2.0.0-Prevent-duplicated-paths-when-empty-version-string-i.patch deleted file mode 100644 index 58d602d..0000000 --- a/ruby-2.0.0-Prevent-duplicated-paths-when-empty-version-string-i.patch +++ /dev/null @@ -1,70 +0,0 @@ -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/ruby-2.0.0-p195-aarch64.patch b/ruby-2.0.0-p195-aarch64.patch deleted file mode 100644 index 8009d32..0000000 --- a/ruby-2.0.0-p195-aarch64.patch +++ /dev/null @@ -1,360 +0,0 @@ -diff -urN ruby-2.0.0-p0/tool/config.guess ruby-2.0.0-p0-aarch64/tool/config.guess ---- ruby-2.0.0-p0/tool/config.guess 2012-01-29 07:50:18.000000000 -0600 -+++ ruby-2.0.0-p0-aarch64/tool/config.guess 2013-03-08 07:15:49.233030866 -0600 -@@ -2,9 +2,9 @@ - # Attempt to guess a canonical system name. - # Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, - # 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010, --# 2011 Free Software Foundation, Inc. -+# 2011, 2012 Free Software Foundation, Inc. - --timestamp='2011-11-11' -+timestamp='2012-09-25' - - # This file is free software; you can redistribute it and/or modify it - # under the terms of the GNU General Public License as published by -@@ -17,9 +17,7 @@ - # General Public License for more details. - # - # You should have received a copy of the GNU General Public License --# along with this program; if not, write to the Free Software --# Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston, MA --# 02110-1301, USA. -+# along with this program; if not, see . - # - # As a special exception to the GNU General Public License, if you - # distribute this file as part of a program that contains a -@@ -57,8 +55,8 @@ - - Originally written by Per Bothner. - Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000, --2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011 Free --Software Foundation, Inc. -+2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011, 2012 -+Free Software Foundation, Inc. - - This is free software; see the source for copying conditions. There is NO - warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE." -@@ -145,7 +143,7 @@ - case "${UNAME_MACHINE}:${UNAME_SYSTEM}:${UNAME_RELEASE}:${UNAME_VERSION}" in - *:NetBSD:*:*) - # NetBSD (nbsd) targets should (where applicable) match one or -- # more of the tupples: *-*-netbsdelf*, *-*-netbsdaout*, -+ # more of the tuples: *-*-netbsdelf*, *-*-netbsdaout*, - # *-*-netbsdecoff* and *-*-netbsd*. For targets that recently - # switched to ELF, *-*-netbsd* would select the old - # object file format. This provides both forward -@@ -202,6 +200,10 @@ - # CPU_TYPE-MANUFACTURER-OPERATING_SYSTEM is used. - echo "${machine}-${os}${release}" - exit ;; -+ *:Bitrig:*:*) -+ UNAME_MACHINE_ARCH=`arch | sed 's/Bitrig.//'` -+ echo ${UNAME_MACHINE_ARCH}-unknown-bitrig${UNAME_RELEASE} -+ exit ;; - *:OpenBSD:*:*) - UNAME_MACHINE_ARCH=`arch | sed 's/OpenBSD.//'` - echo ${UNAME_MACHINE_ARCH}-unknown-openbsd${UNAME_RELEASE} -@@ -304,7 +306,7 @@ - arm:RISC*:1.[012]*:*|arm:riscix:1.[012]*:*) - echo arm-acorn-riscix${UNAME_RELEASE} - exit ;; -- arm:riscos:*:*|arm:RISCOS:*:*) -+ arm*:riscos:*:*|arm*:RISCOS:*:*) - echo arm-unknown-riscos - exit ;; - SR2?01:HI-UX/MPP:*:* | SR8000:HI-UX/MPP:*:*) -@@ -803,6 +805,9 @@ - i*:CYGWIN*:*) - echo ${UNAME_MACHINE}-pc-cygwin - exit ;; -+ *:MINGW64*:*) -+ echo ${UNAME_MACHINE}-pc-mingw64 -+ exit ;; - *:MINGW*:*) - echo ${UNAME_MACHINE}-pc-mingw32 - exit ;; -@@ -863,6 +868,13 @@ - i*86:Minix:*:*) - echo ${UNAME_MACHINE}-pc-minix - exit ;; -+ aarch64:Linux:*:*) -+ echo ${UNAME_MACHINE}-unknown-linux-gnu -+ exit ;; -+ aarch64_be:Linux:*:*) -+ UNAME_MACHINE=aarch64_be -+ echo ${UNAME_MACHINE}-unknown-linux-gnu -+ exit ;; - alpha:Linux:*:*) - case `sed -n '/^cpu model/s/^.*: \(.*\)/\1/p' < /proc/cpuinfo` in - EV5) UNAME_MACHINE=alphaev5 ;; -@@ -897,16 +909,16 @@ - echo ${UNAME_MACHINE}-unknown-linux-gnu - exit ;; - cris:Linux:*:*) -- echo cris-axis-linux-gnu -+ echo ${UNAME_MACHINE}-axis-linux-gnu - exit ;; - crisv32:Linux:*:*) -- echo crisv32-axis-linux-gnu -+ echo ${UNAME_MACHINE}-axis-linux-gnu - exit ;; - frv:Linux:*:*) -- echo frv-unknown-linux-gnu -+ echo ${UNAME_MACHINE}-unknown-linux-gnu - exit ;; - hexagon:Linux:*:*) -- echo hexagon-unknown-linux-gnu -+ echo ${UNAME_MACHINE}-unknown-linux-gnu - exit ;; - i*86:Linux:*:*) - LIBC=gnu -@@ -948,7 +960,7 @@ - test x"${CPU}" != x && { echo "${CPU}-unknown-linux-gnu"; exit; } - ;; - or32:Linux:*:*) -- echo or32-unknown-linux-gnu -+ echo ${UNAME_MACHINE}-unknown-linux-gnu - exit ;; - padre:Linux:*:*) - echo sparc-unknown-linux-gnu -@@ -989,7 +1001,7 @@ - echo ${UNAME_MACHINE}-dec-linux-gnu - exit ;; - x86_64:Linux:*:*) -- echo x86_64-unknown-linux-gnu -+ echo ${UNAME_MACHINE}-unknown-linux-gnu - exit ;; - xtensa*:Linux:*:*) - echo ${UNAME_MACHINE}-unknown-linux-gnu -@@ -1196,6 +1208,9 @@ - BePC:Haiku:*:*) # Haiku running on Intel PC compatible. - echo i586-pc-haiku - exit ;; -+ x86_64:Haiku:*:*) -+ echo x86_64-unknown-haiku -+ exit ;; - SX-4:SUPER-UX:*:*) - echo sx4-nec-superux${UNAME_RELEASE} - exit ;; -@@ -1251,7 +1266,7 @@ - NEO-?:NONSTOP_KERNEL:*:*) - echo neo-tandem-nsk${UNAME_RELEASE} - exit ;; -- NSE-?:NONSTOP_KERNEL:*:*) -+ NSE-*:NONSTOP_KERNEL:*:*) - echo nse-tandem-nsk${UNAME_RELEASE} - exit ;; - NSR-?:NONSTOP_KERNEL:*:*) -@@ -1320,11 +1335,11 @@ - i*86:AROS:*:*) - echo ${UNAME_MACHINE}-pc-aros - exit ;; -+ x86_64:VMkernel:*:*) -+ echo ${UNAME_MACHINE}-unknown-esx -+ exit ;; - esac - --#echo '(No uname command or uname output not recognized.)' 1>&2 --#echo "${UNAME_MACHINE}:${UNAME_SYSTEM}:${UNAME_RELEASE}:${UNAME_VERSION}" 1>&2 -- - eval $set_cc_for_build - cat >$dummy.c <. - # - # As a special exception to the GNU General Public License, if you - # distribute this file as part of a program that contains a -@@ -76,8 +74,8 @@ - GNU config.sub ($timestamp) - - Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000, --2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011 Free --Software Foundation, Inc. -+2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011, 2012 -+Free Software Foundation, Inc. - - This is free software; see the source for copying conditions. There is NO - warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE." -@@ -125,13 +123,17 @@ - maybe_os=`echo $1 | sed 's/^\(.*\)-\([^-]*-[^-]*\)$/\2/'` - case $maybe_os in - nto-qnx* | linux-gnu* | linux-android* | linux-dietlibc | linux-newlib* | \ -- linux-uclibc* | uclinux-uclibc* | uclinux-gnu* | kfreebsd*-gnu* | \ -+ linux-musl* | linux-uclibc* | uclinux-uclibc* | uclinux-gnu* | kfreebsd*-gnu* | \ - knetbsd*-gnu* | netbsd*-gnu* | \ - kopensolaris*-gnu* | \ - storm-chaos* | os2-emx* | rtmk-nova*) - os=-$maybe_os - basic_machine=`echo $1 | sed 's/^\(.*\)-\([^-]*-[^-]*\)$/\1/'` - ;; -+ android-linux) -+ os=-linux-android -+ basic_machine=`echo $1 | sed 's/^\(.*\)-\([^-]*-[^-]*\)$/\1/'`-unknown -+ ;; - *) - basic_machine=`echo $1 | sed 's/-[^-]*$//'` - if [ $basic_machine != $1 ] -@@ -154,7 +156,7 @@ - -convergent* | -ncr* | -news | -32* | -3600* | -3100* | -hitachi* |\ - -c[123]* | -convex* | -sun | -crds | -omron* | -dg | -ultra | -tti* | \ - -harris | -dolphin | -highlevel | -gould | -cbm | -ns | -masscomp | \ -- -apple | -axis | -knuth | -cray | -microblaze) -+ -apple | -axis | -knuth | -cray | -microblaze*) - os= - basic_machine=$1 - ;; -@@ -223,6 +225,12 @@ - -isc*) - basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` - ;; -+ -lynx*178) -+ os=-lynxos178 -+ ;; -+ -lynx*5) -+ os=-lynxos5 -+ ;; - -lynx*) - os=-lynxos - ;; -@@ -247,6 +255,7 @@ - # Some are omitted here because they have special meanings below. - 1750a | 580 \ - | a29k \ -+ | aarch64 | aarch64_be \ - | alpha | alphaev[4-8] | alphaev56 | alphaev6[78] | alphapca5[67] \ - | alpha64 | alpha64ev[4-8] | alpha64ev56 | alpha64ev6[78] | alpha64pca5[67] \ - | am33_2.0 \ -@@ -264,7 +273,7 @@ - | le32 | le64 \ - | lm32 \ - | m32c | m32r | m32rle | m68000 | m68k | m88k \ -- | maxq | mb | microblaze | mcore | mep | metag \ -+ | maxq | mb | microblaze | microblazeel | mcore | mep | metag \ - | mips | mipsbe | mipseb | mipsel | mipsle \ - | mips16 \ - | mips64 | mips64el \ -@@ -319,8 +328,7 @@ - c6x) - basic_machine=tic6x-unknown - ;; -- m6811 | m68hc11 | m6812 | m68hc12 | picochip) -- # Motorola 68HC11/12. -+ m6811 | m68hc11 | m6812 | m68hc12 | m68hcs12x | picochip) - basic_machine=$basic_machine-unknown - os=-none - ;; -@@ -333,7 +341,10 @@ - strongarm | thumb | xscale) - basic_machine=arm-unknown - ;; -- -+ xgate) -+ basic_machine=$basic_machine-unknown -+ os=-none -+ ;; - xscaleeb) - basic_machine=armeb-unknown - ;; -@@ -356,6 +367,7 @@ - # Recognize the basic CPU types with company name. - 580-* \ - | a29k-* \ -+ | aarch64-* | aarch64_be-* \ - | alpha-* | alphaev[4-8]-* | alphaev56-* | alphaev6[78]-* \ - | alpha64-* | alpha64ev[4-8]-* | alpha64ev56-* | alpha64ev6[78]-* \ - | alphapca5[67]-* | alpha64pca5[67]-* | arc-* \ -@@ -377,7 +389,8 @@ - | lm32-* \ - | m32c-* | m32r-* | m32rle-* \ - | m68000-* | m680[012346]0-* | m68360-* | m683?2-* | m68k-* \ -- | m88110-* | m88k-* | maxq-* | mcore-* | metag-* | microblaze-* \ -+ | m88110-* | m88k-* | maxq-* | mcore-* | metag-* \ -+ | microblaze-* | microblazeel-* \ - | mips-* | mipsbe-* | mipseb-* | mipsel-* | mipsle-* \ - | mips16-* \ - | mips64-* | mips64el-* \ -@@ -719,7 +732,6 @@ - i370-ibm* | ibm*) - basic_machine=i370-ibm - ;; --# I'm not sure what "Sysv32" means. Should this be sysv3.2? - i*86v32) - basic_machine=`echo $1 | sed -e 's/86.*/86-pc/'` - os=-sysv32 -@@ -777,9 +789,13 @@ - basic_machine=ns32k-utek - os=-sysv - ;; -- microblaze) -+ microblaze*) - basic_machine=microblaze-xilinx - ;; -+ mingw64) -+ basic_machine=x86_64-pc -+ os=-mingw64 -+ ;; - mingw32) - basic_machine=i386-pc - os=-mingw32 -@@ -1341,15 +1357,15 @@ - | -nindy* | -vxsim* | -vxworks* | -ebmon* | -hms* | -mvs* \ - | -clix* | -riscos* | -uniplus* | -iris* | -rtu* | -xenix* \ - | -hiux* | -386bsd* | -knetbsd* | -mirbsd* | -netbsd* \ -- | -openbsd* | -solidbsd* \ -+ | -bitrig* | -openbsd* | -solidbsd* \ - | -ekkobsd* | -kfreebsd* | -freebsd* | -riscix* | -lynxos* \ - | -bosx* | -nextstep* | -cxux* | -aout* | -elf* | -oabi* \ - | -ptx* | -coff* | -ecoff* | -winnt* | -domain* | -vsta* \ - | -udi* | -eabi* | -lites* | -ieee* | -go32* | -aux* \ - | -chorusos* | -chorusrdb* | -cegcc* \ - | -cygwin* | -msys* | -pe* | -psos* | -moss* | -proelf* | -rtems* \ -- | -mingw32* | -linux-gnu* | -linux-android* \ -- | -linux-newlib* | -linux-uclibc* \ -+ | -mingw32* | -mingw64* | -linux-gnu* | -linux-android* \ -+ | -linux-newlib* | -linux-musl* | -linux-uclibc* \ - | -uxpv* | -beos* | -mpeix* | -udk* \ - | -interix* | -uwin* | -mks* | -rhapsody* | -darwin* | -opened* \ - | -openstep* | -oskit* | -conix* | -pw32* | -nonstopux* \ -@@ -1532,6 +1548,9 @@ - c4x-* | tic4x-*) - os=-coff - ;; -+ hexagon-*) -+ os=-elf -+ ;; - tic54x-*) - os=-coff - ;; -@@ -1559,9 +1578,6 @@ - ;; - m68000-sun) - os=-sunos3 -- # This also exists in the configure program, but was not the -- # default. -- # os=-sunos4 - ;; - m68*-cisco) - os=-aout diff --git a/ruby-2.0.0-p247-Make-stable-Gem-Specification.files-in-default-.gems.patch b/ruby-2.0.0-p247-Make-stable-Gem-Specification.files-in-default-.gems.patch deleted file mode 100644 index 2989954..0000000 --- a/ruby-2.0.0-p247-Make-stable-Gem-Specification.files-in-default-.gems.patch +++ /dev/null @@ -1,28 +0,0 @@ -From fb9fcc8b01d968c62577756cbfd00f20a10b5cbf Mon Sep 17 00:00:00 2001 -From: =?UTF-8?q?V=C3=ADt=20Ondruch?= -Date: Tue, 9 Jul 2013 12:32:49 +0200 -Subject: [PATCH] Make stable Gem::Specification.files in default .gemspecs - -Although the .gemspec files for default gems are same in function, the -different order of their "s.files" makes them different therefore -possibly conflicting in multilib scenario. ---- - tool/rbinstall.rb | 2 +- - 1 file changed, 1 insertion(+), 1 deletion(-) - -diff --git a/tool/rbinstall.rb b/tool/rbinstall.rb -index 1063fac..fb2fcee 100755 ---- a/tool/rbinstall.rb -+++ b/tool/rbinstall.rb -@@ -592,7 +592,7 @@ module RbInstall - end - - def collect -- ruby_libraries + built_libraries -+ (ruby_libraries + built_libraries).sort - end - - private --- -1.8.3.1 - diff --git a/ruby-2.0.0-p247-Revert-mkmf.rb-prefix-install_dirs-only-with-DESTDIR.patch b/ruby-2.0.0-p247-Revert-mkmf.rb-prefix-install_dirs-only-with-DESTDIR.patch deleted file mode 100644 index fa7d946..0000000 --- a/ruby-2.0.0-p247-Revert-mkmf.rb-prefix-install_dirs-only-with-DESTDIR.patch +++ /dev/null @@ -1,70 +0,0 @@ -From 28e8a4ad0146fef37b514bde9a27ba5b6f7c34c5 Mon Sep 17 00:00:00 2001 -From: =?UTF-8?q?V=C3=ADt=20Ondruch?= -Date: Tue, 2 Jul 2013 11:51:50 +0200 -Subject: [PATCH] Revert "mkmf.rb: prefix install_dirs only with DESTDIR" - -This reverts commit 7e1d5045943835ff906850e7b3bc71f985ae5f36. ---- - lib/mkmf.rb | 29 ++++++++++++++--------------- - 1 file changed, 14 insertions(+), 15 deletions(-) - -diff --git a/lib/mkmf.rb b/lib/mkmf.rb -index ee89198..cca487e 100644 ---- a/lib/mkmf.rb -+++ b/lib/mkmf.rb -@@ -189,21 +189,21 @@ module MakeMakefile - ] - elsif $configure_args.has_key?('--vendor') - dirs = [ -- ['BINDIR', '$(DESTDIR)$(bindir)'], -- ['RUBYCOMMONDIR', '$(DESTDIR)$(vendordir)$(target_prefix)'], -- ['RUBYLIBDIR', '$(DESTDIR)$(vendorlibdir)$(target_prefix)'], -- ['RUBYARCHDIR', '$(DESTDIR)$(vendorarchdir)$(target_prefix)'], -- ['HDRDIR', '$(DESTDIR)$(rubyhdrdir)/ruby$(target_prefix)'], -- ['ARCHHDRDIR', '$(DESTDIR)$(rubyhdrdir)/$(arch)/ruby$(target_prefix)'], -+ ['BINDIR', '$(bindir)'], -+ ['RUBYCOMMONDIR', '$(vendordir)$(target_prefix)'], -+ ['RUBYLIBDIR', '$(vendorlibdir)$(target_prefix)'], -+ ['RUBYARCHDIR', '$(vendorarchdir)$(target_prefix)'], -+ ['HDRDIR', '$(rubyhdrdir)/ruby$(target_prefix)'], -+ ['ARCHHDRDIR', '$(rubyhdrdir)/$(arch)/ruby$(target_prefix)'], - ] - else - dirs = [ -- ['BINDIR', '$(DESTDIR)$(bindir)'], -- ['RUBYCOMMONDIR', '$(DESTDIR)$(sitedir)$(target_prefix)'], -- ['RUBYLIBDIR', '$(DESTDIR)$(sitelibdir)$(target_prefix)'], -- ['RUBYARCHDIR', '$(DESTDIR)$(sitearchdir)$(target_prefix)'], -- ['HDRDIR', '$(DESTDIR)$(rubyhdrdir)/ruby$(target_prefix)'], -- ['ARCHHDRDIR', '$(DESTDIR)$(rubyhdrdir)/$(arch)/ruby$(target_prefix)'], -+ ['BINDIR', '$(bindir)'], -+ ['RUBYCOMMONDIR', '$(sitedir)$(target_prefix)'], -+ ['RUBYLIBDIR', '$(sitelibdir)$(target_prefix)'], -+ ['RUBYARCHDIR', '$(sitearchdir)$(target_prefix)'], -+ ['HDRDIR', '$(rubyhdrdir)/ruby$(target_prefix)'], -+ ['ARCHHDRDIR', '$(rubyhdrdir)/$(arch)/ruby$(target_prefix)'], - ] - end - dirs << ['target_prefix', (target_prefix ? "/#{target_prefix}" : "")] -@@ -1728,7 +1728,6 @@ SRC - end - - def with_destdir(dir) -- return dir unless $extmk - dir = dir.sub($dest_prefix_pattern, '') - /\A\$[\(\{]/ =~ dir ? dir : "$(DESTDIR)"+dir - end -@@ -1787,8 +1786,8 @@ ECHO = $(ECHO1:0=@echo) - #### Start of system configuration section. #### - #{"top_srcdir = " + $top_srcdir.sub(%r"\A#{Regexp.quote($topdir)}/", "$(topdir)/") if $extmk} - srcdir = #{srcdir.gsub(/\$\((srcdir)\)|\$\{(srcdir)\}/) {mkintpath(CONFIG[$1||$2]).unspace}} --topdir = #{mkintpath(topdir = $extmk ? CONFIG["topdir"] : $topdir).unspace} --hdrdir = #{(hdrdir = CONFIG["hdrdir"]) == topdir ? "$(topdir)" : mkintpath(hdrdir).unspace} -+topdir = #{mkintpath($extmk ? CONFIG["topdir"] : $topdir).unspace} -+hdrdir = #{mkintpath(CONFIG["hdrdir"]).unspace} - arch_hdrdir = #{$arch_hdrdir.quote} - PATH_SEPARATOR = #{CONFIG['PATH_SEPARATOR']} - VPATH = #{vpath.join(CONFIG['PATH_SEPARATOR'])} --- -1.8.2.1 - diff --git a/ruby-2.1.0-Allow-to-specify-additional-preludes-by-configuratio.patch b/ruby-2.1.0-Allow-to-specify-additional-preludes-by-configuratio.patch deleted file mode 100644 index 3a36f91..0000000 --- a/ruby-2.1.0-Allow-to-specify-additional-preludes-by-configuratio.patch +++ /dev/null @@ -1,43 +0,0 @@ -diff --git a/Makefile.in b/Makefile.in -index a93a1e6..fb30c19 100644 ---- a/Makefile.in -+++ b/Makefile.in -@@ -108,6 +108,7 @@ XRUBY_RUBYLIBDIR = @XRUBY_RUBYLIBDIR@ - XRUBY_RUBYHDRDIR = @XRUBY_RUBYHDRDIR@ - - DEFAULT_PRELUDES = $(@USE_RUBYGEMS@_GEM_PRELUDE) -+OPTIONAL_PRELUDES = @OPTIONAL_PRELUDES@ - - #### End of system configuration section. #### - -diff --git a/common.mk b/common.mk -index e5069e5..ca5e3f9 100644 ---- a/common.mk -+++ b/common.mk -@@ -107,7 +107,7 @@ ALLOBJS = $(NORMALMAINOBJ) $(MINIOBJS) $(COMMONOBJS) $(DMYEXT) - - GOLFOBJS = goruby.$(OBJEXT) golf_prelude.$(OBJEXT) - --PRELUDE_SCRIPTS = $(srcdir)/prelude.rb $(srcdir)/enc/prelude.rb $(DEFAULT_PRELUDES) -+PRELUDE_SCRIPTS = $(srcdir)/prelude.rb $(srcdir)/enc/prelude.rb $(DEFAULT_PRELUDES) $(OPTIONAL_PRELUDES) - GEM_PRELUDE = $(srcdir)/gem_prelude.rb - YES_GEM_PRELUDE = $(GEM_PRELUDE) - NO_GEM_PRELUDE = -diff --git a/configure.in b/configure.in -index 7977aaf..1ef42cd 100644 ---- a/configure.in -+++ b/configure.in -@@ -3494,6 +3494,13 @@ AC_SUBST(rubyarchhdrdir)dnl - AC_SUBST(sitearchhdrdir)dnl - AC_SUBST(vendorarchhdrdir)dnl - -+AC_ARG_WITH(prelude, -+ AS_HELP_STRING([--with-prelude=FILE-LIST], [specify additional preludes separated by space]), -+ [prelude=$withval]) -+if test "$prelude" != ""; then -+ AC_SUBST(OPTIONAL_PRELUDES, $prelude) -+fi -+ - AC_ARG_WITH(mantype, - AS_HELP_STRING([--with-mantype=TYPE], [specify man page type; TYPE is one of man and doc]), - [ diff --git a/ruby-2.1.0-Enable-configuration-of-archlibdir.patch b/ruby-2.1.0-Enable-configuration-of-archlibdir.patch new file mode 100644 index 0000000..8551d79 --- /dev/null +++ b/ruby-2.1.0-Enable-configuration-of-archlibdir.patch @@ -0,0 +1,25 @@ +From e1293f665128b0d9c5bfa0b5beeab4afebf07e6a Mon Sep 17 00:00:00 2001 +From: =?UTF-8?q?V=C3=ADt=20Ondruch?= +Date: Tue, 1 Oct 2013 12:22:40 +0200 +Subject: [PATCH] Allow to configure libruby.so placement. + +--- + configure.ac | 5 +++++ + 1 file changed, 5 insertions(+) + +diff --git a/configure.ac b/configure.ac +index a64358fada..b3bdfad1eb 100644 +--- a/configure.ac ++++ b/configure.ac +@@ -3556,6 +3556,11 @@ AS_IF([test ${multiarch+set}], [ + ]) + + archlibdir='${libdir}/${arch}' ++AC_ARG_WITH(archlibdir, ++ AS_HELP_STRING([--with-archlibdir=DIR], ++ [prefix for libruby [[LIBDIR/ARCH]]]), ++ [archlibdir="$withval"]) ++ + sitearchlibdir='${libdir}/${sitearch}' + archincludedir='${includedir}/${arch}' + sitearchincludedir='${includedir}/${sitearch}' diff --git a/ruby-2.1.0-Prevent-duplicated-paths-when-empty-version-string-i.patch b/ruby-2.1.0-Prevent-duplicated-paths-when-empty-version-string-i.patch new file mode 100644 index 0000000..045d6ae --- /dev/null +++ b/ruby-2.1.0-Prevent-duplicated-paths-when-empty-version-string-i.patch @@ -0,0 +1,77 @@ +From 6062f4976c5b51f8b952b9f6745175be7b1c5ff9 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.ac | 3 ++- + loadpath.c | 12 ++++++++++++ + tool/mkconfig.rb | 2 +- + 3 files changed, 15 insertions(+), 2 deletions(-) + +diff --git a/configure.ac b/configure.ac +index 2bc5153141..a64358fada 100644 +--- a/configure.ac ++++ b/configure.ac +@@ -4472,7 +4472,8 @@ AS_CASE(["$ruby_version_dir_name"], + ruby_version_dir=/'${ruby_version_dir_name}' + + if test -z "${ruby_version_dir_name}"; then +- AC_MSG_ERROR([No ruby version, No place for bundled libraries]) ++ unset ruby_version_dir ++ AC_DEFINE(RUBY_LIB_VERSION_BLANK, 1) + fi + + rubylibdir='${rubylibprefix}'${ruby_version_dir} +diff --git a/loadpath.c b/loadpath.c +index b8969e6998..bbfd4daa78 100644 +--- a/loadpath.c ++++ b/loadpath.c +@@ -65,21 +65,33 @@ const char ruby_initial_load_paths[] = + RUBY_SEARCH_PATH "\0" + #endif + #ifndef NO_RUBY_SITE_LIB ++#ifdef RUBY_LIB_VERSION_BLANK ++ RUBY_SITE_LIB "\0" ++#else + RUBY_SITE_LIB2 "\0" ++#endif + #ifdef RUBY_THINARCH + 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 ++#ifdef RUBY_LIB_VERSION_BLANK ++ RUBY_VENDOR_LIB "\0" ++#else + RUBY_VENDOR_LIB2 "\0" ++#endif + #ifdef RUBY_THINARCH + 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" +diff --git a/tool/mkconfig.rb b/tool/mkconfig.rb +index db74115730..2b01796abf 100755 +--- a/tool/mkconfig.rb ++++ b/tool/mkconfig.rb +@@ -114,7 +114,7 @@ + val = val.gsub(/\$(?:\$|\{?(\w+)\}?)/) {$1 ? "$(#{$1})" : $&}.dump + case name + when /^prefix$/ +- val = "(TOPDIR || DESTDIR + #{val})" ++ val = "(((TOPDIR && TOPDIR.empty?) ? nil : TOPDIR) || DESTDIR + #{val})" + when /^ARCH_FLAG$/ + val = "arch_flag || #{val}" if universal + when /^UNIVERSAL_ARCHNAMES$/ diff --git a/ruby-2.1.0-always-use-i386.patch b/ruby-2.1.0-always-use-i386.patch new file mode 100644 index 0000000..6ecfb2e --- /dev/null +++ b/ruby-2.1.0-always-use-i386.patch @@ -0,0 +1,22 @@ +From 9e70f6e4b8771965a30ecfb6d1c6015df350ca55 Mon Sep 17 00:00:00 2001 +From: =?UTF-8?q?V=C3=ADt=20Ondruch?= +Date: Mon, 19 Nov 2012 14:37:28 +0100 +Subject: [PATCH] Always use i386. + +--- + configure.ac | 2 ++ + 1 file changed, 2 insertions(+) + +diff --git a/configure.ac b/configure.ac +index b3bdfad1eb..411322a27f 100644 +--- a/configure.ac ++++ b/configure.ac +@@ -4536,6 +4536,8 @@ AC_SUBST(vendorarchdir)dnl + AC_SUBST(CONFIGURE, "`echo $0 | sed 's|.*/||'`")dnl + AC_SUBST(configure_args, "`echo "${ac_configure_args}" | sed 's/\\$/$$/g'`")dnl + ++target_cpu=`echo $target_cpu | sed s/i.86/i386/` ++ + AS_IF([test "${universal_binary-no}" = yes ], [ + arch="universal-${target_os}" + AS_IF([test "${rb_cv_architecture_available}" = yes], [ diff --git a/ruby-2.1.0-custom-rubygems-location.patch b/ruby-2.1.0-custom-rubygems-location.patch new file mode 100644 index 0000000..969fefa --- /dev/null +++ b/ruby-2.1.0-custom-rubygems-location.patch @@ -0,0 +1,94 @@ +From c7952996ac9738a14bea0a1a971fea13460a6c94 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.ac | 5 +++++ + loadpath.c | 4 ++++ + template/verconf.h.tmpl | 3 +++ + tool/rbinstall.rb | 10 ++++++++++ + 4 files changed, 22 insertions(+) + +diff --git a/configure.ac b/configure.ac +index 411322a27f..b5f842a512 100644 +--- a/configure.ac ++++ b/configure.ac +@@ -4508,6 +4508,10 @@ AC_ARG_WITH(vendorarchdir, + [vendorarchdir=$withval], + [vendorarchdir=${multiarch+'${rubysitearchprefix}/vendor_ruby'${ruby_version_dir}}${multiarch-'${vendorlibdir}/${sitearch}'}]) + ++AC_ARG_WITH(rubygemsdir, ++ AS_HELP_STRING([--with-rubygemsdir=DIR], [custom rubygems directory]), ++ [rubygemsdir=$withval]) ++ + AS_IF([test "${LOAD_RELATIVE+set}"], [ + AC_DEFINE_UNQUOTED(LOAD_RELATIVE, $LOAD_RELATIVE) + RUBY_EXEC_PREFIX='' +@@ -4532,6 +4536,7 @@ AC_SUBST(sitearchdir)dnl + AC_SUBST(vendordir)dnl + AC_SUBST(vendorlibdir)dnl + AC_SUBST(vendorarchdir)dnl ++AC_SUBST(rubygemsdir)dnl + + AC_SUBST(CONFIGURE, "`echo $0 | sed 's|.*/||'`")dnl + AC_SUBST(configure_args, "`echo "${ac_configure_args}" | sed 's/\\$/$$/g'`")dnl +diff --git a/loadpath.c b/loadpath.c +index bbfd4daa78..69677a9297 100644 +--- a/loadpath.c ++++ b/loadpath.c +@@ -94,6 +94,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" +diff --git a/template/verconf.h.tmpl b/template/verconf.h.tmpl +index 9ba2bd6de5..4ec4ce9353 100644 +--- a/template/verconf.h.tmpl ++++ b/template/verconf.h.tmpl +@@ -36,6 +36,9 @@ + % if C["RUBY_SEARCH_PATH"] + #define RUBY_SEARCH_PATH "${RUBY_SEARCH_PATH}" + % end ++% if C["rubygemsdir"] ++#define RUBYGEMS_DIR "${rubygemsdir}" ++% end + % + % R = {} + % R["ruby_version"] = '"RUBY_LIB_VERSION"' +diff --git a/tool/rbinstall.rb b/tool/rbinstall.rb +index a9e6365b27..7117e65e82 100755 +--- a/tool/rbinstall.rb ++++ b/tool/rbinstall.rb +@@ -393,6 +393,7 @@ def CONFIG.[](name, mandatory = false) + vendorlibdir = CONFIG["vendorlibdir"] + vendorarchlibdir = CONFIG["vendorarchdir"] + end ++rubygemsdir = CONFIG["rubygemsdir"] + mandir = CONFIG["mandir", true] + docdir = CONFIG["docdir", true] + enable_shared = CONFIG["ENABLE_SHARED"] == 'yes' +@@ -1082,7 +1083,16 @@ def (bins = []).add(name) + install?(:local, :comm, :lib) do + prepare "library scripts", rubylibdir + noinst = %w[*.txt *.rdoc *.gemspec] ++ # Bundler carries "rubygems.rb" file, so it must be specialcased :/ ++ noinst += %w[rubygems.rb rubygems/ bundler.rb bundler/] if rubygemsdir + install_recursive(File.join(srcdir, "lib"), rubylibdir, :no_install => noinst, :mode => $data_mode) ++ if rubygemsdir ++ noinst = %w[*.txt *.rdoc *.gemspec] ++ install_recursive(File.join(srcdir, "lib", "rubygems"), File.join(rubygemsdir, "rubygems"), :no_install => noinst, :mode => $data_mode) ++ install(File.join(srcdir, "lib", "rubygems.rb"), File.join(rubygemsdir, "rubygems.rb"), :mode => $data_mode) ++ install_recursive(File.join(srcdir, "lib", "bundler"), File.join(rubylibdir, "bundler"), :no_install => noinst, :mode => $data_mode) ++ install(File.join(srcdir, "lib", "bundler.rb"), rubylibdir, :mode => $data_mode) ++ end + end + + install?(:local, :comm, :hdr, :'comm-hdr') do diff --git a/ruby-2.1.1-fix-test-failures-due-to-expired-certs.patch b/ruby-2.1.1-fix-test-failures-due-to-expired-certs.patch deleted file mode 100644 index 783484b..0000000 --- a/ruby-2.1.1-fix-test-failures-due-to-expired-certs.patch +++ /dev/null @@ -1,259 +0,0 @@ -From 5ac7c395c19426a9a92f0a918b03e0f493af6e2c Mon Sep 17 00:00:00 2001 -From: tmm1 -Date: Fri, 3 Jan 2014 01:46:55 +0000 -Subject: [PATCH] test/net/imap/test_imap.rb: fix test failures due to expired - certs - -* test/net/imap/cacert.pem: generate new CA cert, since the last one - expired. [Bug #9341] [ruby-core:59459] -* test/net/imap/server.crt: new server cert signed with updated CA. -* test/net/imap/Makefile: add `make regen_certs` to automate this - process. - -git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@44488 b2dd03c8-39d4-4d8f-98ff-823fe69b080e ---- - ChangeLog | 8 +++++ - test/net/imap/Makefile | 15 +++++++++ - test/net/imap/cacert.pem | 84 ++++++++++++++++++++++++++---------------------- - test/net/imap/server.crt | 65 +++++++++++++++---------------------- - 4 files changed, 94 insertions(+), 78 deletions(-) - create mode 100644 test/net/imap/Makefile - -diff --git a/ChangeLog b/ChangeLog -index a4f20cd..d6a7148 100644 ---- a/ChangeLog -+++ b/ChangeLog -@@ -1,3 +1,11 @@ -+Fri Jan 3 10:43:57 2014 Aman Gupta -+ -+ * test/net/imap/cacert.pem: generate new CA cert, since the last one -+ expired. [Bug #9341] [ruby-core:59459] -+ * test/net/imap/server.crt: new server cert signed with updated CA. -+ * test/net/imap/Makefile: add `make regen_certs` to automate this -+ process. -+ - Fri Nov 22 13:18:28 2013 Nobuyoshi Nakada - - * util.c (ruby_strtod): BigMath requires more precision. -diff --git a/test/net/imap/Makefile b/test/net/imap/Makefile -new file mode 100644 -index 0000000..b2bc9c7 ---- /dev/null -+++ b/test/net/imap/Makefile -@@ -0,0 +1,15 @@ -+all: -+ -+regen_certs: -+ touch server.key -+ make server.crt -+ -+cacert.pem: server.key -+ openssl req -new -x509 -days 1825 -key server.key -out cacert.pem -text -subj "/C=JP/ST=Shimane/L=Matz-e city/O=Ruby Core Team/CN=Ruby Test CA/emailAddress=security@ruby-lang.org" -+ -+server.csr: -+ openssl req -new -key server.key -out server.csr -text -subj "/C=JP/ST=Shimane/O=Ruby Core Team/OU=Ruby Test/CN=localhost" -+ -+server.crt: server.csr cacert.pem -+ openssl x509 -days 1825 -CA cacert.pem -CAkey server.key -set_serial 00 -in server.csr -req -text -out server.crt -+ rm server.csr -diff --git a/test/net/imap/cacert.pem b/test/net/imap/cacert.pem -index bd7e68a..7073387 100644 ---- a/test/net/imap/cacert.pem -+++ b/test/net/imap/cacert.pem -@@ -2,59 +2,65 @@ Certificate: - Data: - Version: 3 (0x2) - Serial Number: -- 9f:dc:f7:94:98:05:43:4c -+ b9:90:a2:bf:62:69:17:9c - Signature Algorithm: sha1WithRSAEncryption - Issuer: C=JP, ST=Shimane, L=Matz-e city, O=Ruby Core Team, CN=Ruby Test CA/emailAddress=security@ruby-lang.org - Validity -- Not Before: Dec 23 10:21:33 2010 GMT -- Not After : Jan 1 10:21:33 2014 GMT -+ Not Before: Jan 3 01:34:17 2014 GMT -+ Not After : Jan 2 01:34:17 2019 GMT - Subject: C=JP, ST=Shimane, L=Matz-e city, O=Ruby Core Team, CN=Ruby Test CA/emailAddress=security@ruby-lang.org - Subject Public Key Info: - Public Key Algorithm: rsaEncryption -- Public-Key: (1024 bit) -- Modulus: -- 00:ce:be:2c:9f:47:ba:db:9c:9c:5b:f0:38:3b:f3: -- 74:20:37:76:23:9f:84:1c:81:90:b4:3e:00:20:34: -- 98:7e:81:69:50:a1:c3:65:96:ea:fa:00:da:8c:cc: -- 53:3f:ba:3c:d0:50:7a:5a:b4:6b:ac:d3:2e:18:ca: -- 2a:69:b3:6a:6f:38:c2:32:a8:06:b6:0a:30:a9:ee: -- 03:38:e9:05:a5:19:23:54:a8:3c:b9:08:ad:2b:72: -- 23:df:93:22:c4:46:a8:ea:f1:a6:e9:30:4a:3f:83: -- 39:e9:62:8e:8b:a3:5e:67:89:1d:7c:75:de:05:aa: -- 58:b1:b7:79:7c:10:80:6d:87 -+ RSA Public Key: (1024 bit) -+ Modulus (1024 bit): -+ 00:db:75:d0:45:de:b1:df:bf:71:a0:0e:b0:a5:e6: -+ bc:f4:1c:9d:e5:25:67:64:c5:7b:cb:f1:af:c6:be: -+ 9a:aa:ea:7e:0f:cc:05:af:ef:40:69:06:b2:c9:13: -+ 9d:7e:eb:a2:06:e2:ea:7d:07:c7:c7:99:c7:fb:d5: -+ b8:eb:63:77:62:2b:18:12:c3:53:58:d0:f5:c7:40: -+ 0c:01:d1:26:82:34:16:09:e3:dc:65:f4:dc:bb:5d: -+ a5:41:60:e7:a9:74:ba:d7:4c:b6:a3:9c:c5:8c:89: -+ af:cb:e8:9f:05:fe:ea:fe:64:24:bf:e7:ed:e3:f6: -+ d0:fc:d6:eb:fc:06:82:10:fb - Exponent: 65537 (0x10001) - X509v3 extensions: - X509v3 Subject Key Identifier: -- 41:C9:49:37:B1:FA:61:E3:BA:D7:19:3D:D9:DA:8C:B9:82:C9:B4:6A -+ E8:7E:58:AC:13:7B:03:22:8D:9E:AF:32:0B:84:89:80:80:0C:1E:C2 - X509v3 Authority Key Identifier: -- keyid:41:C9:49:37:B1:FA:61:E3:BA:D7:19:3D:D9:DA:8C:B9:82:C9:B4:6A -+ keyid:E8:7E:58:AC:13:7B:03:22:8D:9E:AF:32:0B:84:89:80:80:0C:1E:C2 -+ DirName:/C=JP/ST=Shimane/L=Matz-e city/O=Ruby Core Team/CN=Ruby Test CA/emailAddress=security@ruby-lang.org -+ serial:B9:90:A2:BF:62:69:17:9C - - X509v3 Basic Constraints: - CA:TRUE - Signature Algorithm: sha1WithRSAEncryption -- 86:00:33:b9:dd:ff:5f:83:59:5f:c3:29:3c:d7:11:db:10:b3: -- d7:d1:70:fb:0a:c6:74:85:c6:ea:e1:15:c4:92:f8:0e:11:cc: -- ff:a6:3c:31:c2:2c:66:d8:fe:63:93:9f:b0:97:e6:f5:bc:5c: -- 80:68:96:5d:eb:77:b9:23:dd:68:a7:49:03:ff:22:48:55:f1: -- 39:7c:20:21:ff:64:52:e1:f6:cf:3c:b3:4d:2c:5c:03:62:ea: -- c5:49:99:07:fa:8d:ff:7b:c2:75:0c:ca:24:b5:0b:f5:b7:57: -- 3a:10:f0:8a:bb:9a:e8:92:4d:d5:6f:c2:a2:29:36:61:78:a4: -- dc:7b -+ 8f:77:06:4e:31:72:12:ee:68:09:70:27:d4:31:85:ef:10:95: -+ f9:0f:2b:66:63:08:37:88:6e:b7:9b:40:3e:18:77:33:86:e8: -+ 61:6a:b7:3c:cb:c7:a6:d6:d5:92:6a:1f:56:d0:9f:5c:32:56: -+ d3:37:52:fe:0e:20:c2:7a:0d:fe:2d:3c:81:da:b8:7f:4d:6a: -+ 08:01:d9:be:7a:a2:15:be:a6:ce:49:64:90:8c:9a:ca:6e:2e: -+ 84:48:1d:94:19:56:94:46:aa:25:9b:68:c2:80:60:bf:cb:2e: -+ 35:03:ea:0a:65:5a:33:38:c6:cc:81:46:c0:bc:36:86:96:39: -+ 10:7d - -----BEGIN CERTIFICATE----- --MIIC6DCCAlGgAwIBAgIJAJ/c95SYBUNMMA0GCSqGSIb3DQEBBQUAMIGMMQswCQYD --VQQGEwJKUDEQMA4GA1UECAwHU2hpbWFuZTEUMBIGA1UEBwwLTWF0ei1lIGNpdHkx --FzAVBgNVBAoMDlJ1YnkgQ29yZSBUZWFtMRUwEwYDVQQDDAxSdWJ5IFRlc3QgQ0Ex --JTAjBgkqhkiG9w0BCQEWFnNlY3VyaXR5QHJ1YnktbGFuZy5vcmcwHhcNMTAxMjIz --MTAyMTMzWhcNMTQwMTAxMTAyMTMzWjCBjDELMAkGA1UEBhMCSlAxEDAOBgNVBAgM --B1NoaW1hbmUxFDASBgNVBAcMC01hdHotZSBjaXR5MRcwFQYDVQQKDA5SdWJ5IENv --cmUgVGVhbTEVMBMGA1UEAwwMUnVieSBUZXN0IENBMSUwIwYJKoZIhvcNAQkBFhZz -+MIIDjTCCAvagAwIBAgIJALmQor9iaRecMA0GCSqGSIb3DQEBBQUAMIGMMQswCQYD -+VQQGEwJKUDEQMA4GA1UECBMHU2hpbWFuZTEUMBIGA1UEBxMLTWF0ei1lIGNpdHkx -+FzAVBgNVBAoTDlJ1YnkgQ29yZSBUZWFtMRUwEwYDVQQDEwxSdWJ5IFRlc3QgQ0Ex -+JTAjBgkqhkiG9w0BCQEWFnNlY3VyaXR5QHJ1YnktbGFuZy5vcmcwHhcNMTQwMTAz -+MDEzNDE3WhcNMTkwMTAyMDEzNDE3WjCBjDELMAkGA1UEBhMCSlAxEDAOBgNVBAgT -+B1NoaW1hbmUxFDASBgNVBAcTC01hdHotZSBjaXR5MRcwFQYDVQQKEw5SdWJ5IENv -+cmUgVGVhbTEVMBMGA1UEAxMMUnVieSBUZXN0IENBMSUwIwYJKoZIhvcNAQkBFhZz - ZWN1cml0eUBydWJ5LWxhbmcub3JnMIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKB --gQDOviyfR7rbnJxb8Dg783QgN3Yjn4QcgZC0PgAgNJh+gWlQocNllur6ANqMzFM/ --ujzQUHpatGus0y4Yyipps2pvOMIyqAa2CjCp7gM46QWlGSNUqDy5CK0rciPfkyLE --Rqjq8abpMEo/gznpYo6Lo15niR18dd4Fqlixt3l8EIBthwIDAQABo1AwTjAdBgNV --HQ4EFgQUQclJN7H6YeO61xk92dqMuYLJtGowHwYDVR0jBBgwFoAUQclJN7H6YeO6 --1xk92dqMuYLJtGowDAYDVR0TBAUwAwEB/zANBgkqhkiG9w0BAQUFAAOBgQCGADO5 --3f9fg1lfwyk81xHbELPX0XD7CsZ0hcbq4RXEkvgOEcz/pjwxwixm2P5jk5+wl+b1 --vFyAaJZd63e5I91op0kD/yJIVfE5fCAh/2RS4fbPPLNNLFwDYurFSZkH+o3/e8J1 --DMoktQv1t1c6EPCKu5rokk3Vb8KiKTZheKTcew== -+gQDbddBF3rHfv3GgDrCl5rz0HJ3lJWdkxXvL8a/Gvpqq6n4PzAWv70BpBrLJE51+ -+66IG4up9B8fHmcf71bjrY3diKxgSw1NY0PXHQAwB0SaCNBYJ49xl9Ny7XaVBYOep -+dLrXTLajnMWMia/L6J8F/ur+ZCS/5+3j9tD81uv8BoIQ+wIDAQABo4H0MIHxMB0G -+A1UdDgQWBBToflisE3sDIo2erzILhImAgAwewjCBwQYDVR0jBIG5MIG2gBToflis -+E3sDIo2erzILhImAgAwewqGBkqSBjzCBjDELMAkGA1UEBhMCSlAxEDAOBgNVBAgT -+B1NoaW1hbmUxFDASBgNVBAcTC01hdHotZSBjaXR5MRcwFQYDVQQKEw5SdWJ5IENv -+cmUgVGVhbTEVMBMGA1UEAxMMUnVieSBUZXN0IENBMSUwIwYJKoZIhvcNAQkBFhZz -+ZWN1cml0eUBydWJ5LWxhbmcub3JnggkAuZCiv2JpF5wwDAYDVR0TBAUwAwEB/zAN -+BgkqhkiG9w0BAQUFAAOBgQCPdwZOMXIS7mgJcCfUMYXvEJX5DytmYwg3iG63m0A+ -+GHczhuhharc8y8em1tWSah9W0J9cMlbTN1L+DiDCeg3+LTyB2rh/TWoIAdm+eqIV -+vqbOSWSQjJrKbi6ESB2UGVaURqolm2jCgGC/yy41A+oKZVozOMbMgUbAvDaGljkQ -+fQ== - -----END CERTIFICATE----- -diff --git a/test/net/imap/server.crt b/test/net/imap/server.crt -index d848b26..fa4f994 100644 ---- a/test/net/imap/server.crt -+++ b/test/net/imap/server.crt -@@ -1,17 +1,17 @@ - Certificate: - Data: -- Version: 3 (0x2) -+ Version: 1 (0x0) - Serial Number: 0 (0x0) - Signature Algorithm: sha1WithRSAEncryption - Issuer: C=JP, ST=Shimane, L=Matz-e city, O=Ruby Core Team, CN=Ruby Test CA/emailAddress=security@ruby-lang.org - Validity -- Not Before: Dec 23 10:23:52 2010 GMT -- Not After : Jan 1 10:23:52 2014 GMT -+ Not Before: Jan 3 01:34:17 2014 GMT -+ Not After : Jan 2 01:34:17 2019 GMT - Subject: C=JP, ST=Shimane, O=Ruby Core Team, OU=Ruby Test, CN=localhost - Subject Public Key Info: - Public Key Algorithm: rsaEncryption -- Public-Key: (1024 bit) -- Modulus: -+ RSA Public Key: (1024 bit) -+ Modulus (1024 bit): - 00:db:75:d0:45:de:b1:df:bf:71:a0:0e:b0:a5:e6: - bc:f4:1c:9d:e5:25:67:64:c5:7b:cb:f1:af:c6:be: - 9a:aa:ea:7e:0f:cc:05:af:ef:40:69:06:b2:c9:13: -@@ -22,40 +22,27 @@ Certificate: - af:cb:e8:9f:05:fe:ea:fe:64:24:bf:e7:ed:e3:f6: - d0:fc:d6:eb:fc:06:82:10:fb - Exponent: 65537 (0x10001) -- X509v3 extensions: -- X509v3 Basic Constraints: -- CA:FALSE -- Netscape Comment: -- OpenSSL Generated Certificate -- X509v3 Subject Key Identifier: -- E8:7E:58:AC:13:7B:03:22:8D:9E:AF:32:0B:84:89:80:80:0C:1E:C2 -- X509v3 Authority Key Identifier: -- keyid:41:C9:49:37:B1:FA:61:E3:BA:D7:19:3D:D9:DA:8C:B9:82:C9:B4:6A -- - Signature Algorithm: sha1WithRSAEncryption -- ae:ee:cd:fe:c9:af:48:0b:50:37:ac:6a:f6:68:90:9b:67:df: -- 6f:2d:17:c9:3c:a5:da:ad:39:dc:2a:5b:07:88:26:38:19:30: -- d6:95:cf:10:69:c7:92:14:83:be:f1:b5:8e:6f:d9:91:51:c5: -- 63:ae:1c:89:ac:27:bf:4f:2a:8f:4e:0c:57:42:0a:c9:8e:0c: -- f4:f3:02:f7:ea:44:b6:e4:47:05:af:4e:74:e4:87:87:d9:c8: -- 76:ed:ab:32:7c:f0:31:34:10:14:bc:a6:37:cd:d7:dc:33:da: -- 82:d3:d4:9b:e9:d5:cd:38:cc:fa:81:5f:4e:fd:5f:53:05:5d: -- 76:f9 -+ 85:f5:d3:05:8b:8c:f4:43:1c:88:f2:8f:b2:f2:93:77:b7:3d: -+ 95:c6:a0:34:bc:33:6a:d8:85:5f:3e:86:08:10:c5:5c:c1:76: -+ a3:53:3c:dc:38:98:23:97:e7:da:21:ac:e8:4d:3c:96:70:29: -+ ff:ff:1e:4a:9a:17:2b:db:04:62:b9:ef:ab:ea:a7:a5:e8:7c: -+ b1:d5:ed:30:a8:6c:78:de:51:7e:e3:8a:c2:a4:64:a8:63:a2: -+ bc:fd:43:9c:f3:55:7d:54:c9:6a:d8:53:1c:4b:6b:03:aa:b6: -+ 19:e6:a4:4f:47:00:96:c5:42:59:85:4e:c3:4e:cd:41:82:53: -+ 10:f8 - -----BEGIN CERTIFICATE----- --MIIC3jCCAkegAwIBAgIBADANBgkqhkiG9w0BAQUFADCBjDELMAkGA1UEBhMCSlAx --EDAOBgNVBAgMB1NoaW1hbmUxFDASBgNVBAcMC01hdHotZSBjaXR5MRcwFQYDVQQK --DA5SdWJ5IENvcmUgVGVhbTEVMBMGA1UEAwwMUnVieSBUZXN0IENBMSUwIwYJKoZI --hvcNAQkBFhZzZWN1cml0eUBydWJ5LWxhbmcub3JnMB4XDTEwMTIyMzEwMjM1MloX --DTE0MDEwMTEwMjM1MlowYDELMAkGA1UEBhMCSlAxEDAOBgNVBAgMB1NoaW1hbmUx --FzAVBgNVBAoMDlJ1YnkgQ29yZSBUZWFtMRIwEAYDVQQLDAlSdWJ5IFRlc3QxEjAQ --BgNVBAMMCWxvY2FsaG9zdDCBnzANBgkqhkiG9w0BAQEFAAOBjQAwgYkCgYEA23XQ --Rd6x379xoA6wpea89Byd5SVnZMV7y/Gvxr6aqup+D8wFr+9AaQayyROdfuuiBuLq --fQfHx5nH+9W462N3YisYEsNTWND1x0AMAdEmgjQWCePcZfTcu12lQWDnqXS610y2 --o5zFjImvy+ifBf7q/mQkv+ft4/bQ/Nbr/AaCEPsCAwEAAaN7MHkwCQYDVR0TBAIw --ADAsBglghkgBhvhCAQ0EHxYdT3BlblNTTCBHZW5lcmF0ZWQgQ2VydGlmaWNhdGUw --HQYDVR0OBBYEFOh+WKwTewMijZ6vMguEiYCADB7CMB8GA1UdIwQYMBaAFEHJSTex --+mHjutcZPdnajLmCybRqMA0GCSqGSIb3DQEBBQUAA4GBAK7uzf7Jr0gLUDesavZo --kJtn328tF8k8pdqtOdwqWweIJjgZMNaVzxBpx5IUg77xtY5v2ZFRxWOuHImsJ79P --Ko9ODFdCCsmODPTzAvfqRLbkRwWvTnTkh4fZyHbtqzJ88DE0EBS8pjfN19wz2oLT --1Jvp1c04zPqBX079X1MFXXb5 -+MIICXDCCAcUCAQAwDQYJKoZIhvcNAQEFBQAwgYwxCzAJBgNVBAYTAkpQMRAwDgYD -+VQQIEwdTaGltYW5lMRQwEgYDVQQHEwtNYXR6LWUgY2l0eTEXMBUGA1UEChMOUnVi -+eSBDb3JlIFRlYW0xFTATBgNVBAMTDFJ1YnkgVGVzdCBDQTElMCMGCSqGSIb3DQEJ -+ARYWc2VjdXJpdHlAcnVieS1sYW5nLm9yZzAeFw0xNDAxMDMwMTM0MTdaFw0xOTAx -+MDIwMTM0MTdaMGAxCzAJBgNVBAYTAkpQMRAwDgYDVQQIEwdTaGltYW5lMRcwFQYD -+VQQKEw5SdWJ5IENvcmUgVGVhbTESMBAGA1UECxMJUnVieSBUZXN0MRIwEAYDVQQD -+Ewlsb2NhbGhvc3QwgZ8wDQYJKoZIhvcNAQEBBQADgY0AMIGJAoGBANt10EXesd+/ -+caAOsKXmvPQcneUlZ2TFe8vxr8a+mqrqfg/MBa/vQGkGsskTnX7rogbi6n0Hx8eZ -+x/vVuOtjd2IrGBLDU1jQ9cdADAHRJoI0Fgnj3GX03LtdpUFg56l0utdMtqOcxYyJ -+r8vonwX+6v5kJL/n7eP20PzW6/wGghD7AgMBAAEwDQYJKoZIhvcNAQEFBQADgYEA -+hfXTBYuM9EMciPKPsvKTd7c9lcagNLwzatiFXz6GCBDFXMF2o1M83DiYI5fn2iGs -+6E08lnAp//8eSpoXK9sEYrnvq+qnpeh8sdXtMKhseN5RfuOKwqRkqGOivP1DnPNV -+fVTJathTHEtrA6q2GeakT0cAlsVCWYVOw07NQYJTEPg= - -----END CERTIFICATE----- --- -1.8.5.1 - diff --git a/ruby-2.3.0-ruby_version-Add-ruby_version_dir_name-support-for-RDoc.patch b/ruby-2.3.0-ruby_version-Add-ruby_version_dir_name-support-for-RDoc.patch new file mode 100644 index 0000000..82f5963 --- /dev/null +++ b/ruby-2.3.0-ruby_version-Add-ruby_version_dir_name-support-for-RDoc.patch @@ -0,0 +1,22 @@ +From f833e213596b0bcfad8264a555eb5093303fb5f2 Mon Sep 17 00:00:00 2001 +From: Jarek Prokop +Date: Thu, 25 Sep 2025 12:26:39 +0200 +Subject: [PATCH] Add ruby_version_dir_name support for RDoc. + +--- + lib/rdoc/ri/paths.rb | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +diff --git a/lib/rdoc/ri/paths.rb b/lib/rdoc/ri/paths.rb +index 8e89b04e..731f9e36 100644 +--- a/lib/rdoc/ri/paths.rb ++++ b/lib/rdoc/ri/paths.rb +@@ -10,7 +10,7 @@ module RDoc::RI::Paths + #:stopdoc: + require 'rbconfig' + +- version = RbConfig::CONFIG['ruby_version'] ++ version = RbConfig::CONFIG['ruby_version_dir_name'] || RbConfig::CONFIG['ruby_version'] + + BASE = File.join RbConfig::CONFIG['ridir'], version + diff --git a/ruby-2.3.0-ruby_version.patch b/ruby-2.3.0-ruby_version.patch new file mode 100644 index 0000000..2eb5d00 --- /dev/null +++ b/ruby-2.3.0-ruby_version.patch @@ -0,0 +1,257 @@ +From 5406ea4b4b13db747e5c1f8341bb257b4da04435 Mon Sep 17 00:00:00 2001 +From: =?UTF-8?q?V=C3=ADt=20Ondruch?= +Date: Tue, 31 Mar 2015 16:21:04 +0200 +Subject: [PATCH 1/4] Use ruby_version_dir_name for versioned directories. + +This disallows changing the ruby_version constant by --with-ruby-version +configuration options. The two places version numbers are disallowed as +well, since there are a lot of places which cannot handle this format +properly. + +ruby_version_dir_name now specifies custom version string for versioned +directories, e.g. instead of default X.Y.Z, you can specify whatever +string. +--- + configure.ac | 66 ++++++++++++++++++++++++--------------------- + template/ruby.pc.in | 1 + + 2 files changed, 36 insertions(+), 31 deletions(-) + +diff --git a/configure.ac b/configure.ac +index 2bbce78fd0..9d8662369c 100644 +--- a/configure.ac ++++ b/configure.ac +@@ -4422,9 +4422,6 @@ AS_CASE(["$target_os"], + rubyw_install_name='$(RUBYW_INSTALL_NAME)' + ]) + +-rubylibdir='${rubylibprefix}/${ruby_version}' +-rubyarchdir=${multiarch+'${rubyarchprefix}/${ruby_version}'}${multiarch-'${rubylibdir}/${arch}'} +- + rubyarchprefix=${multiarch+'${archlibdir}/${RUBY_BASE_NAME}'}${multiarch-'${rubylibprefix}/${arch}'} + AC_ARG_WITH(rubyarchprefix, + AS_HELP_STRING([--with-rubyarchprefix=DIR], +@@ -4447,57 +4444,63 @@ AC_ARG_WITH(ridir, + AC_SUBST(ridir) + AC_SUBST(RI_BASE_NAME) + +-AC_ARG_WITH(ruby-version, +- AS_HELP_STRING([--with-ruby-version=STR], [ruby version string for version specific directories [[full]] (full|minor|STR)]), +- [ruby_version=$withval], +- [ruby_version=full]) + unset RUBY_LIB_VERSION +-unset RUBY_LIB_VERSION_STYLE +-AS_CASE(["$ruby_version"], +- [full], [RUBY_LIB_VERSION_STYLE='3 /* full */'], +- [minor], [RUBY_LIB_VERSION_STYLE='2 /* minor */']) +-AS_IF([test ${RUBY_LIB_VERSION_STYLE+set}], [ +- { +- echo "#define RUBY_LIB_VERSION_STYLE $RUBY_LIB_VERSION_STYLE" +- echo '@%:@include "confdefs.h"' +- echo '#define STRINGIZE(x) x' +- test -f revision.h -o -f "${srcdir}/revision.h" || echo '#define RUBY_REVISION 0' +- echo '#include "version.h"' +- echo 'ruby_version=RUBY_LIB_VERSION' +- } > conftest.c +- ruby_version="`$CPP -I. -I"${srcdir}" -I"${srcdir}/include" conftest.c | sed '/^ruby_version=/!d;s/ //g'`" +- eval $ruby_version +-], [test -z "${ruby_version}"], [ +- AC_MSG_ERROR([No ruby version, No place for bundled libraries]) +-], [ +- RUBY_LIB_VERSION="${ruby_version}" +-]) ++RUBY_LIB_VERSION_STYLE='3 /* full */' ++{ ++echo "#define RUBY_LIB_VERSION_STYLE $RUBY_LIB_VERSION_STYLE" ++echo '@%:@include "confdefs.h"' ++echo '#define STRINGIZE(x) x' ++test -f revision.h -o -f "${srcdir}/revision.h" || echo '#define RUBY_REVISION 0' ++echo '#include "version.h"' ++echo 'ruby_version=RUBY_LIB_VERSION' ++} > conftest.c ++ruby_version="`$CPP -I. -I"${srcdir}" -I"${srcdir}/include" conftest.c | sed '/^ruby_version=/!d;s/ //g'`" ++eval $ruby_version ++ ++RUBY_LIB_VERSION="${ruby_version}" ++ + AC_SUBST(RUBY_LIB_VERSION_STYLE) + AC_SUBST(RUBY_LIB_VERSION) + ++AC_ARG_WITH(ruby-version, ++ AS_HELP_STRING([--with-ruby-version=STR], [ruby version string for version specific directories [[full]] (full|STR)]), ++ [ruby_version_dir_name=$withval], ++ [ruby_version_dir_name=full]) ++AS_CASE(["$ruby_version_dir_name"], ++ [full], [ruby_version_dir_name='${ruby_version}']) ++ ++ruby_version_dir=/'${ruby_version_dir_name}' ++ ++if test -z "${ruby_version_dir_name}"; then ++ AC_MSG_ERROR([No ruby version, No place for bundled libraries]) ++fi ++ ++rubylibdir='${rubylibprefix}'${ruby_version_dir} ++rubyarchdir=${multiarch+'${rubyarchprefix}'${ruby_version_dir}}${multiarch-'${rubylibdir}/${arch}'} ++ + AC_ARG_WITH(sitedir, + AS_HELP_STRING([--with-sitedir=DIR], [site libraries in DIR [[RUBY_LIB_PREFIX/site_ruby]], "no" to disable site directory]), + [sitedir=$withval], + [sitedir='${rubylibprefix}/site_ruby']) +-sitelibdir='${sitedir}/${ruby_version}' ++sitelibdir='${sitedir}'${ruby_version_dir} + + AC_ARG_WITH(sitearchdir, + AS_HELP_STRING([--with-sitearchdir=DIR], + [architecture dependent site libraries in DIR [[SITEDIR/SITEARCH]], "no" to disable site directory]), + [sitearchdir=$withval], +- [sitearchdir=${multiarch+'${rubysitearchprefix}/site_ruby/${ruby_version}'}${multiarch-'${sitelibdir}/${sitearch}'}]) ++ [sitearchdir=${multiarch+'${rubysitearchprefix}/site_ruby'${ruby_version_dir}}${multiarch-'${sitelibdir}/${sitearch}'}]) + + AC_ARG_WITH(vendordir, + AS_HELP_STRING([--with-vendordir=DIR], [vendor libraries in DIR [[RUBY_LIB_PREFIX/vendor_ruby]], "no" to disable vendor directory]), + [vendordir=$withval], + [vendordir='${rubylibprefix}/vendor_ruby']) +-vendorlibdir='${vendordir}/${ruby_version}' ++vendorlibdir='${vendordir}'${ruby_version_dir} + + AC_ARG_WITH(vendorarchdir, + AS_HELP_STRING([--with-vendorarchdir=DIR], + [architecture dependent vendor libraries in DIR [[VENDORDIR/SITEARCH]], "no" to disable vendor directory]), + [vendorarchdir=$withval], +- [vendorarchdir=${multiarch+'${rubysitearchprefix}/vendor_ruby/${ruby_version}'}${multiarch-'${vendorlibdir}/${sitearch}'}]) ++ [vendorarchdir=${multiarch+'${rubysitearchprefix}/vendor_ruby'${ruby_version_dir}}${multiarch-'${vendorlibdir}/${sitearch}'}]) + + AS_IF([test "${LOAD_RELATIVE+set}"], [ + AC_DEFINE_UNQUOTED(LOAD_RELATIVE, $LOAD_RELATIVE) +@@ -4514,6 +4517,7 @@ AC_SUBST(sitearchincludedir)dnl + AC_SUBST(arch)dnl + AC_SUBST(sitearch)dnl + AC_SUBST(ruby_version)dnl ++AC_SUBST(ruby_version_dir_name)dnl + AC_SUBST(rubylibdir)dnl + AC_SUBST(rubyarchdir)dnl + AC_SUBST(sitedir)dnl +diff --git a/template/ruby.pc.in b/template/ruby.pc.in +index 6901ec2320..9b7b787208 100644 +--- a/template/ruby.pc.in ++++ b/template/ruby.pc.in +@@ -2,6 +2,7 @@ MAJOR=@MAJOR@ + MINOR=@MINOR@ + TEENY=@TEENY@ + ruby_version=@ruby_version@ ++ruby_version_dir_name=@ruby_version_dir_name@ + RUBY_API_VERSION=@RUBY_API_VERSION@ + RUBY_PROGRAM_VERSION=@RUBY_PROGRAM_VERSION@ + arch=@arch@ + +From baff562149499973123d2187620201be641c6538 Mon Sep 17 00:00:00 2001 +From: =?UTF-8?q?V=C3=ADt=20Ondruch?= +Date: Tue, 31 Mar 2015 16:37:26 +0200 +Subject: [PATCH 2/4] Add ruby_version_dir_name support for RDoc. + +--- + tool/rbinstall.rb | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +diff --git a/tool/rbinstall.rb b/tool/rbinstall.rb +index 874c3ef1d9..a9e6365b27 100755 +--- a/tool/rbinstall.rb ++++ b/tool/rbinstall.rb +@@ -1053,7 +1053,7 @@ def (bins = []).add(name) + + install?(:doc, :rdoc) do + if $rdocdir +- ridatadir = File.join(CONFIG['ridir'], CONFIG['ruby_version'], "system") ++ ridatadir = File.join(CONFIG['ridir'], CONFIG['ruby_version_dir_name'] || CONFIG['ruby_version'], "system") + prepare "rdoc", ridatadir + install_recursive($rdocdir, ridatadir, :no_install => rdoc_noinst, :mode => $data_mode) + end + +From 7cf872a9a34f38d71cd2ca04ac114b4ea85cc56c Mon Sep 17 00:00:00 2001 +From: =?UTF-8?q?V=C3=ADt=20Ondruch?= +Date: Tue, 31 Mar 2015 16:37:44 +0200 +Subject: [PATCH 3/4] Add ruby_version_dir_name support for RubyGems. + +--- + lib/rubygems/defaults.rb | 7 ++++--- + test/rubygems/test_gem.rb | 5 +++-- + 2 files changed, 7 insertions(+), 5 deletions(-) + +diff --git a/lib/rubygems/defaults.rb b/lib/rubygems/defaults.rb +index 90f09fc191..f6b8a03b95 100644 +--- a/lib/rubygems/defaults.rb ++++ b/lib/rubygems/defaults.rb +@@ -35,7 +35,7 @@ def self.default_spec_cache_dir + # specified in the environment + + def self.default_dir +- @default_dir ||= File.join(RbConfig::CONFIG["rubylibprefix"], "gems", RbConfig::CONFIG["ruby_version"]) ++ @default_dir ||= File.join(RbConfig::CONFIG["rubylibprefix"], "gems", RbConfig::CONFIG["ruby_version_dir_name"] || RbConfig::CONFIG["ruby_version"]) + end + + ## +@@ -104,7 +104,8 @@ def self.user_dir + gem_dir = File.join(Gem.user_home, ".gem") + gem_dir = File.join(Gem.data_home, "gem") unless File.exist?(gem_dir) + parts = [gem_dir, ruby_engine] +- parts << RbConfig::CONFIG["ruby_version"] unless RbConfig::CONFIG["ruby_version"].empty? ++ ruby_version_dir_name = RbConfig::CONFIG["ruby_version_dir_name"] || RbConfig::CONFIG["ruby_version"] ++ parts << ruby_version_dir_name unless ruby_version_dir_name.empty? + File.join parts + end + +@@ -265,7 +266,7 @@ def self.vendor_dir # :nodoc: + return nil unless RbConfig::CONFIG.key? "vendordir" + + File.join RbConfig::CONFIG["vendordir"], "gems", +- RbConfig::CONFIG["ruby_version"] ++ RbConfig::CONFIG["ruby_version_dir_name"] || RbConfig::CONFIG["ruby_version"] + end + + ## +diff --git a/test/rubygems/test_gem.rb b/test/rubygems/test_gem.rb +index 74c8953904..1f3bd91d51 100644 +--- a/test/rubygems/test_gem.rb ++++ b/test/rubygems/test_gem.rb +@@ -1339,7 +1339,8 @@ def test_self_use_paths + + def test_self_user_dir + parts = [@userhome, ".gem", Gem.ruby_engine] +- parts << RbConfig::CONFIG["ruby_version"] unless RbConfig::CONFIG["ruby_version"].empty? ++ ruby_version_dir_name = RbConfig::CONFIG["ruby_version_dir_name"] || RbConfig::CONFIG["ruby_version"] ++ parts << ruby_version_dir_name unless ruby_version_dir_name.empty? + + FileUtils.mkdir_p File.join(parts) + +@@ -1415,7 +1416,7 @@ def test_self_vendor_dir + vendordir(File.join(@tempdir, "vendor")) do + expected = + File.join RbConfig::CONFIG["vendordir"], "gems", +- RbConfig::CONFIG["ruby_version"] ++ RbConfig::CONFIG["ruby_version_dir_name"] || RbConfig::CONFIG["ruby_version"] + + assert_equal expected, Gem.vendor_dir + end + +From 17cb98b7b78f8bfc511feffbe061747f676055b1 Mon Sep 17 00:00:00 2001 +From: =?UTF-8?q?V=C3=ADt=20Ondruch?= +Date: Wed, 1 Apr 2015 14:55:37 +0200 +Subject: [PATCH 4/4] Let headers directories follow the configured version + name. + +--- + configure.ac | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +diff --git a/configure.ac b/configure.ac +index 9d8662369c..2bc5153141 100644 +--- a/configure.ac ++++ b/configure.ac +@@ -151,7 +151,7 @@ RUBY_BASE_NAME=`echo ruby | sed "$program_transform_name"` + RUBYW_BASE_NAME=`echo rubyw | sed "$program_transform_name"` + AC_SUBST(RUBY_BASE_NAME) + AC_SUBST(RUBYW_BASE_NAME) +-AC_SUBST(RUBY_VERSION_NAME, '${RUBY_BASE_NAME}-${ruby_version}') ++AC_SUBST(RUBY_VERSION_NAME, '${RUBY_BASE_NAME}-${ruby_version_dir_name}') + + dnl checks for alternative programs + AC_CANONICAL_BUILD diff --git a/ruby-2.7.0-Initialize-ABRT-hook.patch b/ruby-2.7.0-Initialize-ABRT-hook.patch new file mode 100644 index 0000000..86d97fc --- /dev/null +++ b/ruby-2.7.0-Initialize-ABRT-hook.patch @@ -0,0 +1,86 @@ +From 03b44a86b574dc0b63fd57c5f9b52b56ad3ced37 Mon Sep 17 00:00:00 2001 +From: =?UTF-8?q?V=C3=ADt=20Ondruch?= +Date: Mon, 6 Jan 2020 13:56:04 +0100 +Subject: [PATCH] Initialize ABRT hook. + +The ABRT hook used to be initialized by preludes via patches [[1], [2]]. +Unfortunately, due to [[3]] and especially since [[4]], this would +require boostrapping [[5]]. + +To keep the things simple for now, load the ABRT hook via C. + +[1]: https://bugs.ruby-lang.org/issues/8566 +[2]: https://bugs.ruby-lang.org/issues/15306 +[3]: https://bugs.ruby-lang.org/issues/16254 +[4]: https://github.com/ruby/ruby/pull/2735 +[5]: https://lists.fedoraproject.org/archives/list/ruby-sig@lists.fedoraproject.org/message/LH6L6YJOYQT4Y5ZNOO4SLIPTUWZ5V45Q/ +--- + abrt.c | 12 ++++++++++++ + common.mk | 1 + + ruby.c | 4 ++++ + spec/ruby/core/kernel/require_spec.rb | 2 ++ + 4 files changed, 19 insertions(+) + create mode 100644 abrt.c + +diff --git a/abrt.c b/abrt.c +new file mode 100644 +index 0000000000..e99cb432e6 +--- /dev/null ++++ b/abrt.c +@@ -0,0 +1,12 @@ ++#include "internal.h" ++ ++void ++Init_abrt(void) ++{ ++ rb_eval_string( ++ " begin\n" ++ " require 'abrt'\n" ++ " rescue LoadError\n" ++ " end\n" ++ ); ++} +diff --git a/common.mk b/common.mk +index 08fee9119a..dae7d9dc00 100644 +--- a/common.mk ++++ b/common.mk +@@ -116,6 +116,7 @@ PRISM_FILES = prism/api_node.$(OBJEXT) \ + prism_init.$(OBJEXT) + + COMMONOBJS = \ ++ abrt.$(OBJEXT) \ + array.$(OBJEXT) \ + ast.$(OBJEXT) \ + bignum.$(OBJEXT) \ +diff --git a/ruby.c b/ruby.c +index b00fc1502d..32b88f7496 100644 +--- a/ruby.c ++++ b/ruby.c +@@ -1773,10 +1773,14 @@ proc_options(long argc, char **argv, ruby_cmdline_options_t *opt, int envopt) + + void Init_builtin_features(void); + ++/* abrt.c */ ++void Init_abrt(void); ++ + static void + ruby_init_prelude(void) + { + Init_builtin_features(); ++ Init_abrt(); + } + + void rb_call_builtin_inits(void); +diff --git a/spec/ruby/core/kernel/require_spec.rb b/spec/ruby/core/kernel/require_spec.rb +index 60d17242fe..a8f93b0db4 100644 +--- a/spec/ruby/core/kernel/require_spec.rb ++++ b/spec/ruby/core/kernel/require_spec.rb +@@ -26,6 +26,8 @@ + out = ruby_exe("puts $LOADED_FEATURES", options: '--disable-gems --disable-did-you-mean') + features = out.lines.map { |line| File.basename(line.chomp, '.*') } + ++ # Ignore ABRT ++ features -= %w[abrt] + # Ignore CRuby internals + features -= %w[encdb transdb windows_1252 windows_31j] + features.reject! { |feature| feature.end_with?('-fake') } diff --git a/ruby-3.3.0-Disable-syntax-suggest-test-case.patch b/ruby-3.3.0-Disable-syntax-suggest-test-case.patch new file mode 100644 index 0000000..09d11f9 --- /dev/null +++ b/ruby-3.3.0-Disable-syntax-suggest-test-case.patch @@ -0,0 +1,23 @@ +From 9b7cb6a40d73bb86ee0de34360068e90e80f4e7e Mon Sep 17 00:00:00 2001 +From: =?UTF-8?q?V=C3=ADt=20Ondruch?= +Date: Thu, 7 Sep 2023 13:13:02 +0200 +Subject: [PATCH] Disable syntax-suggest test case. + +This requires internet connection. +--- + common.mk | 2 -- + 1 file changed, 2 deletions(-) + +diff --git a/common.mk b/common.mk +index dae7d9dc00..111e859d1b 100644 +--- a/common.mk ++++ b/common.mk +@@ -1619,8 +1619,6 @@ no-test-bundled-gems-spec: + + test-syntax-suggest: + +-check: $(DOT_WAIT) $(PREPARE_SYNTAX_SUGGEST) test-syntax-suggest +- + test-bundler-precheck: $(TEST_RUNNABLE)-test-bundler-precheck + no-test-bundler-precheck: + yes-test-bundler-precheck: main $(arch)-fake.rb diff --git a/ruby-4.0.1-Support-customizable-rustc_flags-for-rustc-builds.patch b/ruby-4.0.1-Support-customizable-rustc_flags-for-rustc-builds.patch new file mode 100644 index 0000000..8238b58 --- /dev/null +++ b/ruby-4.0.1-Support-customizable-rustc_flags-for-rustc-builds.patch @@ -0,0 +1,117 @@ +From 1cfb11bc8d01e4fc1ff47807721e29b250f0f19f Mon Sep 17 00:00:00 2001 +From: Jarek Prokop +Date: Mon, 22 Dec 2025 10:13:34 +0100 +Subject: [PATCH] Support customizable rustc_flags for rustc builds. + +Add `rustc_flags` option for configure that appends to RUSTC_FLAGS +flags used when compiling with rustc for customizable build flags. +It appends to existing defaults in RUSTC_FLAGS. + +Co-authored-by: Alan Wu +--- + common.mk | 10 ++-------- + configure.ac | 8 ++++++++ + defs/jit.mk | 2 ++ + template/Makefile.in | 1 + + 4 files changed, 13 insertions(+), 8 deletions(-) + +diff --git a/common.mk b/common.mk +index 08fee9119a..9ac5ae919f 100644 +--- a/common.mk ++++ b/common.mk +@@ -270,21 +270,15 @@ MAKE_LINK = $(MINIRUBY) -rfileutils -e "include FileUtils::Verbose" \ + # For release builds + YJIT_RUSTC_ARGS = --crate-name=yjit \ + $(JIT_RUST_FLAGS) \ ++ $(RUSTC_FLAGS) \ + --edition=2021 \ +- -g \ +- -C lto=thin \ +- -C opt-level=3 \ +- -C overflow-checks=on \ + '--out-dir=$(CARGO_TARGET_DIR)/release/' \ + '$(top_srcdir)/yjit/src/lib.rs' + + ZJIT_RUSTC_ARGS = --crate-name=zjit \ + $(JIT_RUST_FLAGS) \ ++ $(RUSTC_FLAGS) \ + --edition=2024 \ +- -g \ +- -C lto=thin \ +- -C opt-level=3 \ +- -C overflow-checks=on \ + '--out-dir=$(CARGO_TARGET_DIR)/release/' \ + '$(top_srcdir)/zjit/src/lib.rs' + +diff --git a/configure.ac b/configure.ac +index 2bbce78fd0..a3aa6dc383 100644 +--- a/configure.ac ++++ b/configure.ac +@@ -69,6 +69,7 @@ dnl 93(bright yellow) is copied from .github/workflows/mingw.yml + AC_ARG_VAR([cflags], [additional CFLAGS (ignored when CFLAGS is given)])dnl + AC_ARG_VAR([cppflags], [additional CPPFLAGS (ignored when CPPFLAGS is given)])dnl + AC_ARG_VAR([cxxflags], [additional CXXFLAGS (ignored when CXXFLAGS is given)])dnl ++AC_ARG_VAR([rustc_flags], [additional RUSTC_FLAGS])dnl + + [begin]_group "environment section" && { + HAVE_BASERUBY=yes +@@ -4054,6 +4055,11 @@ AS_CASE(["${ZJIT_SUPPORT}"], + AC_DEFINE(USE_ZJIT, 0) + ]) + ++RUSTC_FLAGS='-g -C lto=thin -C opt-level=3 -C overflow-checks=on' ++AS_IF([test -n "${rustc_flags}"], [ ++ RUSTC_FLAGS="${RUSTC_FLAGS} ${rustc_flags}" ++]) ++ + JIT_RUST_FLAGS='--crate-type=staticlib --cfg feature=\"stats_allocator\"' + RLIB_DIR= + AS_CASE(["$JIT_CARGO_SUPPORT:$YJIT_SUPPORT:$ZJIT_SUPPORT"], +@@ -4111,6 +4117,7 @@ AS_IF([test -n "$RUST_LIB"], [ + dnl These variables end up in ::RbConfig::CONFIG + AC_SUBST(RUSTC)dnl Rust compiler command + AC_SUBST(JIT_RUST_FLAGS)dnl the common rustc flags for JIT crates such as zjit ++AC_SUBST(RUSTC_FLAGS)dnl user-configurable rustc compiler flags + AC_SUBST(CARGO)dnl Cargo command for Rust builds + AC_SUBST(CARGO_BUILD_ARGS)dnl for selecting Rust build profiles + AC_SUBST(YJIT_SUPPORT)dnl what flavor of YJIT the Ruby build includes +@@ -4855,6 +4862,7 @@ config_summary "strip command" "$STRIP" + config_summary "install doc" "$DOCTARGETS" + config_summary "YJIT support" "$YJIT_SUPPORT" + config_summary "ZJIT support" "$ZJIT_SUPPORT" ++config_summary "RUSTC_FLAGS" "$RUSTC_FLAGS" + config_summary "man page type" "$MANTYPE" + config_summary "search path" "$search_path" + config_summary "static-linked-ext" ${EXTSTATIC:+"yes"} +diff --git a/defs/jit.mk b/defs/jit.mk +index 42b56c4cd9..27b14e7a07 100644 +--- a/defs/jit.mk ++++ b/defs/jit.mk +@@ -40,6 +40,7 @@ else ifneq ($(strip $(RLIB_DIR)),) # combo build + $(RUST_LIB): $(srcdir)/ruby.rs + $(ECHO) 'building $(@F)' + $(gnumake_recursive)$(Q) $(RUSTC) --edition=2024 \ ++ $(RUSTC_FLAGS) \ + '-L$(@D)' \ + --extern=yjit \ + --extern=zjit \ +@@ -58,6 +59,7 @@ $(JIT_RLIB): + $(gnumake_recursive)$(Q) $(RUSTC) --crate-name=jit \ + --edition=2024 \ + $(JIT_RUST_FLAGS) \ ++ $(RUSTC_FLAGS) \ + '--out-dir=$(@D)' \ + '$(top_srcdir)/jit/src/lib.rs' + endif # ifneq ($(JIT_CARGO_SUPPORT),no) +diff --git a/template/Makefile.in b/template/Makefile.in +index 443c394cb4..0b7b50e3aa 100644 +--- a/template/Makefile.in ++++ b/template/Makefile.in +@@ -115,6 +115,7 @@ CARGO_TARGET_DIR=@abs_top_builddir@/target + CARGO_BUILD_ARGS=@CARGO_BUILD_ARGS@ + ZJIT_TEST_FEATURES=@ZJIT_TEST_FEATURES@ + JIT_RUST_FLAGS=@JIT_RUST_FLAGS@ ++RUSTC_FLAGS=@RUSTC_FLAGS@ + RLIB_DIR=@RLIB_DIR@ + RUST_LIB=@RUST_LIB@ + RUST_LIBOBJ = $(RUST_LIB:.a=.@OBJEXT@) diff --git a/ruby.rpmlintrc b/ruby.rpmlintrc new file mode 100644 index 0000000..ec8ac11 --- /dev/null +++ b/ruby.rpmlintrc @@ -0,0 +1,59 @@ +# Keep matching patterns enough not to hide unintended errors and warnings. + +# There is no way to implement this with `%{SOURCE0}` without `%{_sourcedir}`. +# The order in the .spec file could be possibly different. +addFilter(r'ruby\.(spec|src):20: E: use-of-RPM_SOURCE_DIR$') + +# The used version is not obvious. +addFilter(r'ruby\.(spec|src):\d+: W: unversioned-explicit-provides bundled\(ccan-build_assert\)$') +addFilter(r'ruby\.(spec|src):\d+: W: unversioned-explicit-provides bundled\(ccan-check_type\)$') +addFilter(r'ruby\.(spec|src):\d+: W: unversioned-explicit-provides bundled\(ccan-container_of\)$') +addFilter(r'ruby\.(spec|src):\d+: W: unversioned-explicit-provides bundled\(ccan-list\)$') + +# The template files do not have to have executable bits. +addFilter(r'^rubygem-bundler\.noarch: E: non-executable-script /usr/share/gems/gems/bundler-[\d\.]+/lib/bundler/templates/[\w/\.]+ 644 /usr/bin/env ') + +# Samples don't really need executable bits. +addFilter(r'^rubygem-bigdecimal\.x86_64: E: non-executable-script /usr/share/gems/gems/bigdecimal-[\d\.]+/sample/\w+.rb 644 /usr/local/bin/ruby$') + +# The bundled gem files permissions are overridden as 644 by `make install`. +# https://bugs.ruby-lang.org/issues/17840 +# https://github.com/rubygems/rubygems/issues/5255 +addFilter(r'^.*: E: non-executable-script /usr/share/gems/gems/(abbrev|getoptlong|nkf|observer|resolv|resolv-replace|rinda|syslog)-[\d\.]+/bin/\w+ 644 ') + +# Ruby provides API to set the cipher list. +addFilter(r'^ruby-libs\.\w+: W: crypto-policy-non-compliance-openssl /usr/lib(64)?/ruby/openssl.so SSL_CTX_set_cipher_list$') + +# `gethostbyname` is part of deprecated Ruby API. There is also request to drop the API altogether: +# https://bugs.ruby-lang.org/issues/13097 +# https://bugs.ruby-lang.org/issues/17944 +addFilter(r'^ruby-libs\.\w+: W: binary-or-shlib-calls-gethostbyname /usr/lib(64)?/ruby/socket.so$') + +# Rake ships some examples. +addFilter(r'^rubygem-rake.noarch: W: devel-file-in-non-devel-package /usr/share/gems/gems/rake-[\d\.]+/doc/example/\w+.c$') + +# Some executables don't have their manual pages. Is it worth of use help2man? +addFilter(r'^.+: W: no-manual-page-for-binary (bundler|gem|racc|rbs|rdbg|rdoc|ruby-mri|syntax_suggest|typeprof)$') + +# Default gems does not come with any documentation. +addFilter(r'^rubygem-(bigdecimal|io-console|json|psych)\.\w+: W: no-documentation$') + +# rubygems-devel ships only RPM macros and generators. Their placement is given +# by RPM and can't be modified. +addFilter(r'rubygems-devel.noarch: W: only-non-binary-in-usr-lib$') + +# Ignore some spelling false positives. +# Ignore spelling of technical terms +addFilter(r'^ruby-default-gems.noarch: E: spelling-error \(\'gemspec\'') +addFilter(r'^ruby-libs.x86_64: E: spelling-error \(\'libruby\'') +addFilter(r'^rubygem-test-unit.noarch: E: spelling-error \(\'xUnit\'') +addFilter(r'^rubygem-psych.x86_64: E: spelling-error \(\'libyaml\'') +addFilter(r'^rubygem-io-console.x86_64: E: spelling-error \(\'readline\'') +# `pyaml` is part of URL +addFilter(r'^rubygem-psych.x86_64: E: spelling-error \(\'pyyaml\'') +# `de-` is actually prefix +addFilter(r'^rubygem-psych.x86_64: E: spelling-error \(\'de\'') + +# It does not seemt to be worth of changing rubygems to archful package due to +# single directory, unless it causes some real troubles. +addFilter(r'^rubygems.noarch: E: noarch-with-lib64$') diff --git a/ruby.spec b/ruby.spec index 6921aeb..a364fe6 100644 --- a/ruby.spec +++ b/ruby.spec @@ -1,193 +1,361 @@ -%global major_version 2 +%global major_version 4 %global minor_version 0 -%global teeny_version 0 -%global patch_level 353 - +%global teeny_version 1 %global major_minor_version %{major_version}.%{minor_version} %global ruby_version %{major_minor_version}.%{teeny_version} -%global ruby_version_patch_level %{major_minor_version}.%{teeny_version}.%{patch_level} %global ruby_release %{ruby_version} # Specify the named version. It has precedense to revision. -#%%global milestone preview2 +%dnl %global milestone preview2 -# Keep the revision enabled for pre-releases from SVN. -#%%global revision 39387 +# Keep the revision enabled for pre-releases from GIT. +%dnl %global revision d428d086c2 %global ruby_archive %{name}-%{ruby_version} # If revision and milestone are removed/commented out, the official release build is expected. +%if 0%{?milestone:1} != 0 +%global ruby_archive %{ruby_archive}-%{?milestone} +%endif + +%if 0%{?revision:1} != 0 +%global ruby_archive %{ruby_archive}-%{?revision} +%define ruby_archive_timestamp %(stat --printf='@%Y' %{_sourcedir}/%{ruby_archive}.tar.xz | date -f - +"%Y%m%d") +%endif + %if 0%{?milestone:1}%{?revision:1} != 0 -%global development_release %{?milestone}%{?!milestone:%{?revision:r%{revision}}} -%global ruby_archive %{ruby_archive}-%{?milestone}%{?!milestone:%{?revision:r%{revision}}} -%else -%global ruby_archive %{ruby_archive}-p%{patch_level} +%define development_release ~%{?ruby_archive_timestamp}%{?milestone}%{?!milestone:%{?revision:git%{revision}}} %endif -%global release 18 -%{!?release_string:%global release_string %{?development_release:0.}%{release}%{?development_release:.%{development_release}}%{?dist}} - -%global rubygems_version 2.0.14 - -# The RubyGems library has to stay out of Ruby directory three, since the +# The RubyGems library has to stay out of Ruby directory tree, since the # RubyGems should be share by all Ruby implementations. %global rubygems_dir %{_datadir}/rubygems -%global rake_version 0.9.6 -# TODO: The IRB has strange versioning. Keep the Ruby's versioning ATM. -# http://redmine.ruby-lang.org/issues/5313 -%global irb_version %{ruby_version_patch_level} -%global rdoc_version 4.0.0 -%global bigdecimal_version 1.2.0 -%global io_console_version 0.4.2 -%global json_version 1.7.7 -%global minitest_version 4.3.2 -%global psych_version 2.0.0 +## BUNDLED_GEMS_VERSIONS + +# Bundled libraries versions +%global rubygems_version 4.0.3 +%global rubygems_molinillo_version 0.8.0 +%global rubygems_net_http_version 0.7.0 +%global rubygems_net_protocol_version 0.2.2 +%global rubygems_optparse_version 0.8.0 +%global rubygems_resolv_version 0.6.2 +%global rubygems_securerandom_version 0.4.1 +%global rubygems_timeout_version 0.4.4 +%global rubygems_tsort_version 0.2.0 +%global rubygems_uri_version 1.1.1 + +# Default gems. +%global bundler_version 4.0.3 +%global bundler_connection_pool_version 2.5.4 +%global bundler_fileutils_version 1.8.0 +%global bundler_net_http_persistent_version 4.0.6 +%global bundler_pub_grub_version 0.5.0 +%global bundler_securerandom_version 0.4.1 +%global bundler_thor_version 1.4.0 +%global bundler_tsort_version 0.2.0 +%global bundler_uri_version 1.1.1 + +%global date_version 3.5.1 +%global delegate_version 0.6.1 +%global did_you_mean_version 2.0.0 +%global digest_version 3.2.1 +%global english_version 0.8.1 +%global erb_version 6.0.1 +%global error_highlight_version 0.7.1 +%global etc_version 1.4.6 +%global fcntl_version 1.3.0 +%global fileutils_version 1.8.0 +%global find_version 0.2.0 +%global forwardable_version 1.4.0 +%global io_console_version 0.8.2 +%global io_nonblock_version 0.3.2 +%global io_wait_version 0.4.0 +%global ipaddr_version 1.2.8 +%global json_version 2.18.0 +%global net_http_version 0.9.1 +%global net_protocol_version 0.2.2 +%global open_uri_version 0.5.0 +%global open3_version 0.2.1 +%global openssl_version 4.0.0 +%global optparse_version 0.8.1 +%global pp_version 0.6.3 +%global prettyprint_version 0.2.0 +%global prism_version 1.8.0 +%global psych_version 5.3.1 +%global resolv_version 0.7.0 +%global ruby2_keywords_version 0.0.5 +%global securerandom_version 0.4.1 +%global shellwords_version 0.2.2 +%global singleton_version 0.3.0 +%global stringio_version 3.2.0 +%global strscan_version 3.1.6 +%global syntax_suggest_version 2.0.2 +%global tempfile_version 0.3.1 +%global time_version 0.4.2 +%global timeout_version 0.6.0 +%global tmpdir_version 0.3.1 +%global tsort_version 0.2.0 +%global un_version 0.3.0 +%global uri_version 1.1.1 +%global weakref_version 0.1.4 +%global win32_registry_version 0.1.2 +%global yaml_version 0.4.0 +%global zlib_version 3.2.2 + +# Bundled gems. +%global abbrev_version 0.1.2 +%global base64_version 0.3.0 +%global benchmark_version 0.5.0 +%global bigdecimal_version 4.0.1 +%global csv_version 3.3.5 +%global debug_version 1.11.1 +%global drb_version 2.2.3 +%global fiddle_version 1.1.8 +%global getoptlong_version 0.2.1 +%global irb_version 1.16.0 +%global logger_version 1.7.0 +%global matrix_version 0.4.3 +%global minitest_version 6.0.0 +%global mutex_m_version 0.3.0 +%global net_ftp_version 0.3.9 +%global net_imap_version 0.6.2 +%global net_pop_version 0.1.2 +%global net_smtp_version 0.5.1 +%global nkf_version 0.2.0 +%global observer_version 0.1.2 +%global ostruct_version 0.6.3 +%global power_assert_version 3.0.1 +%global prime_version 0.1.4 +%global pstore_version 0.2.0 +%global racc_version 1.8.1 +%global rake_version 13.3.1 +%global rbs_version 3.10.0 +%global rdoc_version 7.0.3 +%global readline_version 0.0.4 +%global reline_version 0.6.3 +%global repl_type_completor_version 0.1.12 +%global resolv_replace_version 0.1.1 +%global rexml_version 3.4.4 +%global rinda_version 0.2.0 +%global rss_version 0.3.2 +%global syslog_version 0.3.0 +%global test_unit_version 3.7.5 +%global typeprof_version 0.31.1 +%global win32ole_version 1.9.2 + +## END_BUNDLED_GEMS_VERSIONS + +# Bundled nkf version +%global bundled_nkf_version 2.1.5 -# Might not be needed in the future, if we are lucky enough. -# https://bugzilla.redhat.com/show_bug.cgi?id=888262 -%global tapset_root %{_datadir}/systemtap -%global tapset_dir %{tapset_root}/tapset %global tapset_libdir %(echo %{_libdir} | sed 's/64//')* -%global _normalized_cpu %(echo %{_target_cpu} | sed 's/^ppc/powerpc/;s/i.86/i386/;s/sparcv./sparc/') - %if 0%{?fedora} >= 19 -%global with_rubypick 1 +%bcond_without rubypick %endif +%bcond_without cmake +%bcond_without git +%bcond_without gmp +%bcond_without hostname +%bcond_without systemtap +%bcond_without rust + +# Don't build rust parts if we are not building with rust bits. +%if 0%{?with_rust} +# YJIT and ZJIT is supported on x86_64 and aarch64. +# https://github.com/ruby/ruby/blob/master/doc/jit/yjit.md +# https://github.com/ruby/ruby/blob/master/doc/jit/zjit.md +%ifarch x86_64 aarch64 +%bcond_without yjit +%bcond_without zjit +%endif +%endif + +# Enable test when building on local. +%bcond_with bundler_tests +%bcond_without parallel_tests + +%if 0%{?fedora} +%bcond_without hardening_test +%endif + +# The additional linker flags break binary rubygem- packages. +# https://bugzilla.redhat.com/show_bug.cgi?id=2043092 +%undefine _package_note_flags + Summary: An interpreter of object-oriented scripting language Name: ruby -Version: %{ruby_version_patch_level} -Release: %{release_string} -Group: Development/Languages -# Public Domain for example for: include/ruby/st.h, strftime.c, ... -License: (Ruby or BSD) and Public Domain -URL: http://ruby-lang.org/ -Source0: ftp://ftp.ruby-lang.org/pub/%{name}/%{major_minor_version}/%{ruby_archive}.tar.bz2 +Version: %{ruby_version}%{?development_release} +Release: 31%{?dist} +# Licenses, which are likely not included in binary RPMs: +# Apache-2.0: +# benchmark/gc/redblack.rb +# But this file might be BSD-2-Clause licensed after all: +# https://bugs.ruby-lang.org/issues/20420 +# GPL-1.0-or-later: ext/win32/lib/win32/sspi.rb +# GPL-1.0-or-later OR Artistic-1.0-Perl: win32/win32.c, include/ruby/win32.h, +# ext/win32ole/win32ole.c +# IETF (this is not official SPDX identifier) +# .bundle/gems/net-imap-0.4.9/LICENSE.txt +# Licenses in this file covers fair use and don't need to be listed: +# https://gitlab.com/fedora/legal/fedora-license-data/-/issues/506 +# +# BSD-3-Clause: missing/{crypt,mt19937,setproctitle}.c, addr2line.c:2652 +# CC0: ccan/{build_assert/build_assert.h,check_type/check_type.h, +# container_of/container_of.h,str/str.h} +# Allowed based on 'grandfather clause': +# https://gitlab.com/fedora/legal/fedora-license-data/-/blob/7d9720b2cfd8ccb98d1975312942d99588a0da7c/data/CC0-1.0.toml#L11-14 +# https://gitlab.com/fedora/legal/fedora-license-data/-/issues/499 +# dtoa: missing/dtoa.c +# GPL-3.0-or-later WITH Bison-exception-2.2: parse.{c,h}, ext/ripper/ripper.c +# HPND-Markus-Kuhn: missing/langinfo.c +# ISC: missing/strl{cat,cpy}.c +# LicenseRef-Fedora-Public-Domain: include/ruby/st.h, strftime.c, missing/*, ... +# https://gitlab.com/fedora/legal/fedora-license-data/-/merge_requests/145 +# MIT: ccan/list/list.h +# Ruby OR BSD-2-Clause OR GPL-1.0-or-later: lib/net/protocol.rb +# Ruby-pty: ext/pty/pty.c +# Unicode-DFS-2015: some of enc/trans/**/*.src +# There is also license review ticket here: +# https://gitlab.com/fedora/legal/fedora-license-data/-/issues/500 +# zlib: ext/digest/md5/md5.*, ext/nkf/nkf-utf8/nkf.c +License: (Ruby OR BSD-2-Clause) AND (Ruby OR BSD-2-Clause OR GPL-1.0-or-later) AND BSD-3-Clause AND (GPL-3.0-or-later WITH Bison-exception-2.2) AND ISC AND LicenseRef-Fedora-Public-Domain AND MIT AND CC0-1.0 AND zlib AND Unicode-DFS-2015 AND HPND-Markus-Kuhn AND Ruby-pty +URL: https://www.ruby-lang.org/ +Source0: https://cache.ruby-lang.org/pub/%{name}/%{major_minor_version}/%{ruby_archive}.tar.xz Source1: operating_system.rb # TODO: Try to push SystemTap support upstream. Source2: libruby.stp Source3: ruby-exercise.stp Source4: macros.ruby Source5: macros.rubygems -Source6: abrt_prelude.rb -# This wrapper fixes https://bugzilla.redhat.com/show_bug.cgi?id=977941 -# Hopefully, it will get removed soon: -# https://fedorahosted.org/fpc/ticket/312 -# https://bugzilla.redhat.com/show_bug.cgi?id=977941 -Source7: config.h +# RPM dependency generators. +Source6: rubygems.attr +Source7: rubygems.req +Source8: rubygems.prov +Source9: rubygems.con +# ABRT hoook test case. +Source10: test_abrt.rb +# SystemTap tests. +Source11: test_systemtap.rb +# Ruby OpenSSL FIPS tests. +Source12: test_openssl_fips.rb +# RPM gem Requires dependency generator tests. +Source13: rpm_test_helper.rb +Source14: test_rubygems_req.rb +Source15: test_rubygems_prov.rb +Source16: test_rubygems_con.rb +# The load directive is supported since RPM 4.12, i.e. F21+. The build process +# fails on older Fedoras. +%{load:%{SOURCE4}} +%{load:%{SOURCE5}} -# Include the constants defined in macros files. -# http://rpm.org/ticket/866 -%{lua: - -function source_macros(file) - local macro = nil - - for line in io.lines(file) do - if not macro and line:match("^%%") then - macro = line:match("^%%(.*)$") - line = nil - end - - if macro then - if line and macro:match("^.-%s*\\%s*$") then - macro = macro .. '\n' .. line - end - - if not macro:match("^.-%s*\\%s*$") then - rpm.define(macro) - macro = nil - end - end - end -end - -source_macros(rpm.expand("%{SOURCE4}")) -source_macros(rpm.expand("%{SOURCE5}")) - -} +%define _local_file_attrs local_generator +%define __local_generator_requires make -C %{_builddir}/%{buildsubdir}/%{_vpath_builddir} -s runruby TESTRUN_SCRIPT="--enable-gems %{SOURCE7}" +%define __local_generator_provides make -C %{_builddir}/%{buildsubdir}/%{_vpath_builddir} -s runruby TESTRUN_SCRIPT="--enable-gems %{SOURCE8}" +%define __local_generator_conflicts make -C %{_builddir}/%{buildsubdir}/%{_vpath_builddir} -s runruby TESTRUN_SCRIPT="--enable-gems %{SOURCE9}" +%define __local_generator_path ^%{gem_dir}/specifications/.*\.gemspec$ +# Fix ruby_version abuse. +# https://bugs.ruby-lang.org/issues/11002 +Patch0: ruby-2.3.0-ruby_version.patch +# Fix ruby_version abuse for rdoc. +# Since rdoc is bundled gem, the patch is split from ruby-2.3.0-ruby_version.patch +# re-made in ruby/rdoc git source and will be applied in correct path in the +# specfile where we have the exact rdoc version that is part of the path. +Patch1: ruby-2.3.0-ruby_version-Add-ruby_version_dir_name-support-for-RDoc.patch # http://bugs.ruby-lang.org/issues/7807 -Patch0: ruby-2.0.0-Prevent-duplicated-paths-when-empty-version-string-i.patch +Patch2: ruby-2.1.0-Prevent-duplicated-paths-when-empty-version-string-i.patch +# Allows to override libruby.so placement. Hopefully we will be able to return +# to plain --with-rubyarchprefix. +# http://bugs.ruby-lang.org/issues/8973 +Patch3: ruby-2.1.0-Enable-configuration-of-archlibdir.patch # Force multiarch directories for i.86 to be always named i386. This solves # some differencies in build between Fedora and RHEL. -Patch3: ruby-1.9.3-always-use-i386.patch -# Fixes random WEBRick test failures. -# https://bugs.ruby-lang.org/issues/6573. -Patch5: ruby-1.9.3.p195-fix-webrick-tests.patch +Patch4: ruby-2.1.0-always-use-i386.patch # Allows to install RubyGems into custom directory, outside of Ruby's tree. -# http://redmine.ruby-lang.org/issues/5617 -Patch8: ruby-1.9.3-custom-rubygems-location.patch -# Add support for installing binary extensions according to FHS. -# https://github.com/rubygems/rubygems/issues/210 -# Note that 8th patch might be resolved by -# https://bugs.ruby-lang.org/issues/7897 -Patch9: rubygems-2.0.0-binary-extensions.patch -# Make mkmf verbose by default -Patch12: ruby-1.9.3-mkmf-verbose.patch -# This slightly changes behavior of "gem install --install-dir" behavior. -# Without this patch, Specifications.dirs is modified and gems installed on -# the system cannot be required anymore. This causes later issues when RDoc -# documentation should be generated, since json gem is sudenly not accessible. -# https://github.com/rubygems/rubygems/pull/452 -Patch13: rubygems-2.0.0-Do-not-modify-global-Specification.dirs-during-insta.patch -# This prevents issues, when ruby configuration specifies --with-ruby-version=''. -# https://github.com/rubygems/rubygems/pull/455 -Patch14: rubygems-2.0.0-Fixes-for-empty-ruby-version.patch -# Adds aarch64 support. -# http://bugs.ruby-lang.org/issues/8331 -# https://bugzilla.redhat.com/show_bug.cgi?id=926463 -# Please note that this is the BZ patch, it might be good idea to update it -# with its upstream version when available. -Patch16: ruby-2.0.0-p195-aarch64.patch -# Adds support for '--with-prelude' configuration option. This allows to built -# in support for ABRT. -# http://bugs.ruby-lang.org/issues/8566 -Patch17: ruby-2.1.0-Allow-to-specify-additional-preludes-by-configuratio.patch -# Fixes issues with DESTDIR. -# https://bugs.ruby-lang.org/issues/8115 -Patch18: ruby-2.0.0-p247-Revert-mkmf.rb-prefix-install_dirs-only-with-DESTDIR.patch -# Fixes multilib conlicts of .gemspec files. -# https://bugs.ruby-lang.org/issues/8623 -Patch19: ruby-2.0.0-p247-Make-stable-Gem-Specification.files-in-default-.gems.patch -# Backport regenerated certificates for IMAP tests. -# http://bugs.ruby-lang.org/issues/9341 -Patch20: ruby-2.1.1-fix-test-failures-due-to-expired-certs.patch +# http://bugs.ruby-lang.org/issues/5617 +Patch5: ruby-2.1.0-custom-rubygems-location.patch +# The ABRT hook used to be initialized by preludes via following patches: +# https://bugs.ruby-lang.org/issues/8566 +# https://bugs.ruby-lang.org/issues/15306 +# Unfortunately, due to https://bugs.ruby-lang.org/issues/16254 +# and especially since https://github.com/ruby/ruby/pull/2735 +# this would require boostrapping: +# https://lists.fedoraproject.org/archives/list/ruby-sig@lists.fedoraproject.org/message/LH6L6YJOYQT4Y5ZNOO4SLIPTUWZ5V45Q/ +# For now, load the ABRT hook via this simple patch: +Patch6: ruby-2.7.0-Initialize-ABRT-hook.patch +# Disable syntax_suggest test suite, which tries to download its dependencies. +# https://bugs.ruby-lang.org/issues/19297 +Patch7: ruby-3.3.0-Disable-syntax-suggest-test-case.patch +# Add a way to provide %%build_rustflags to JIT's rustc. +# https://github.com/ruby/ruby/pull/15695 +Patch8: ruby-4.0.1-Support-customizable-rustc_flags-for-rustc-builds.patch +# https://github.com/ruby/rdoc/pull/1531 +# Fix error with `gem install --document=rdoc,ri` +Patch9: rdoc-pr1531-fix-mutilple-document-installation.patch Requires: %{name}-libs%{?_isa} = %{version}-%{release} -Requires: ruby(rubygems) >= %{rubygems_version} -# Make the bigdecimal gem a runtime dependency of Ruby to avoid problems -# with user-installed gems, that don't require it in gemspec/Gemfile -# See https://bugzilla.redhat.com/show_bug.cgi?id=829209 -# and http://bugs.ruby-lang.org/issues/6123 -Requires: rubygem(bigdecimal) >= %{bigdecimal_version} +%{?with_rubypick:Suggests: rubypick} +Recommends: ruby(rubygems) >= %{rubygems_version} +Recommends: ruby-default-gems >= %{version}-%{release} +Recommends: ruby-bundled-gems >= %{version}-%{release} +Recommends: rubygem(bigdecimal) >= %{bigdecimal_version} +# Build dependencies BuildRequires: autoconf -BuildRequires: gdbm-devel -BuildRequires: ncurses-devel -BuildRequires: libdb-devel +BuildRequires: gcc +BuildRequires: make BuildRequires: libffi-devel -BuildRequires: openssl-devel +BuildRequires: libxcrypt-devel BuildRequires: libyaml-devel -BuildRequires: readline-devel -BuildRequires: tk-devel +BuildRequires: openssl-devel +BuildRequires: zlib-devel +%{?with_gmp:BuildRequires: gmp-devel} +%{?with_systemtap:BuildRequires: %{_bindir}/dtrace} +%{?with_systemtap:BuildRequires: systemtap-sdt-devel} +%if 0%{?with_rust} +BuildRequires: %{_bindir}/rustc + +# We need the %%{build_rustflags}, EL needs different package than Fedora. +%if 0%{?fedora} +BuildRequires: rust-srpm-macros +%else +Buildrequires: rust-toolset +%endif + +%endif + +# Install section +BuildRequires: multilib-rpm-config + +# Check dependencies + +# Required to test hardening. +%{?with_hardening_test:BuildRequires: %{_bindir}/checksec} + # Needed to pass test_set_program_name(TestRubyOptions) BuildRequires: procps -BuildRequires: %{_bindir}/dtrace -# Unbundle cert.pem -BuildRequires: ca-certificates +# Neede by `Socket.gethostname returns the host name ERROR` +%{?with_hostname:BuildRequires: %{_bindir}/hostname} + +# RubyGems test suite optional dependencies. +%{?with_git:BuildRequires: git} +# `cmake` is required for test/rubygems/test_gem_ext_cmake_builder.rb. +%{?with_cmake:BuildRequires: %{_bindir}/cmake} + +# The bundler/spec/runtime/setup_spec.rb requires the command `man`. +%{?with_bundler_tests:BuildRequires: %{_bindir}/man} + # This package provides %%{_bindir}/ruby-mri therefore it is marked by this # virtual provide. It can be installed as dependency of rubypick. Provides: ruby(runtime_executable) = %{ruby_release} -%global __provides_exclude_from ^(%{ruby_libarchdir}|%{gem_archdir})/.*\\.so$ - %description Ruby is the interpreted scripting language for quick and easy object-oriented programming. It has many features to process text @@ -197,8 +365,13 @@ straight-forward, and extensible. %package devel Summary: A Ruby development environment -Group: Development/Languages Requires: %{name}%{?_isa} = %{version}-%{release} +# This would not be needed if ~50 packages depending on -devel used +# --disable-gems +Requires: rubygems +# Users need CFLAGS from /usr/lib/rpm/redhat/redhat-hardened-cc1 +# for building gems with binary extensions (rhbz#1905222). +Recommends: redhat-rpm-config %description devel Header files and libraries for building an extension library for the @@ -206,26 +379,57 @@ Ruby or an application embedding Ruby. %package libs Summary: Libraries necessary to run Ruby -Group: Development/Libraries -License: Ruby or BSD Provides: ruby(release) = %{ruby_release} +# Virtual provides for CCAN copylibs. +# https://fedorahosted.org/fpc/ticket/364 +Provides: bundled(ccan-build_assert) +Provides: bundled(ccan-check_type) +Provides: bundled(ccan-container_of) +Provides: bundled(ccan-list) + +# StdLib default gems. +Provides: bundled(rubygem-did_you_mean) = %{did_you_mean_version} +Provides: bundled(rubygem-openssl) = %{openssl_version} + + %description libs This package includes the libruby, necessary to run Ruby. + # TODO: Rename or not rename to ruby-rubygems? %package -n rubygems Summary: The Ruby standard for packaging ruby libraries Version: %{rubygems_version} -Group: Development/Libraries -License: Ruby or MIT +# BSD-2-Clause OR Ruby: +# lib/rubygems/net-http/ +# lib/rubygems/net-protocol/ +# lib/rubygems/optparse/ +# lib/rubygems/resolv/ +# lib/rubygems/timeout/ +# lib/rubygems/tsort/ +# MIT: lib/rubygems/resolver/molinillo +# Ruby OR BSD-2-Clause OR GPL-1.0-or-later: lib/net/protocol.rb +License: (Ruby OR MIT) AND BSD-2-Clause AND (BSD-2-Clause OR Ruby) AND (Ruby OR BSD-2-Clause OR GPL-1.0-or-later) AND MIT Requires: ruby(release) -Requires: rubygem(rdoc) >= %{rdoc_version} -Requires: rubygem(io-console) >= %{io_console_version} -Requires: rubygem(psych) >= %{psych_version} -Requires: ca-certificates +Recommends: rubygem(bundler) >= %{bundler_version} +Recommends: rubygem(rdoc) >= %{rdoc_version} +Recommends: rubygem(io-console) +Requires: rubygem(psych) >= %{psych_version}%{?psych_prerelease:~%{sub %{psych_prerelease} 2 -1}} Provides: gem = %{version}-%{release} Provides: ruby(rubygems) = %{version}-%{release} +Provides: bundled(rubygems) = %{rubygems_version} +# https://github.com/rubygems/rubygems/pull/1189#issuecomment-121600910 +Provides: bundled(rubygem-molinillo) = %{rubygems_molinillo_version} +Provides: bundled(rubygem-net-http) = %{rubygems_net_http_version} +Provides: bundled(rubygem-net-protocol) = %{rubygems_net_protocol_version} +Provides: bundled(rubygem-optparse) = %{rubygems_optparse_version} +Provides: bundled(rubygem-resolv) = %{rubygems_resolv_version} +Provides: bundled(rubygem-securerandom) = %{rubygems_securerandom_version} +Provides: bundled(rubygem-timeout) = %{rubygems_timeout_version} +Provides: bundled(rubygem-tsort) = %{rubygems_tsort_version} +Provides: bundled(rubygem-uri) = %{rubygems_uri_version} + BuildArch: noarch %description -n rubygems @@ -236,41 +440,43 @@ libraries. %package -n rubygems-devel Summary: Macros and development tools for packaging RubyGems Version: %{rubygems_version} -Group: Development/Libraries -License: Ruby or MIT -Requires: ruby(rubygems) = %{version}-%{release} +License: MIT +Requires: ruby(rubygems) >= %{version}-%{release} +# Needed for RDoc documentation format generation. +Requires: rubygem(json) >= %{json_version} +Requires: rubygem(rdoc) >= %{rdoc_version} BuildArch: noarch %description -n rubygems-devel Macros and development tools for packaging RubyGems. -%package -n rubygem-rake -Summary: Ruby based make-like utility -Version: %{rake_version} -Group: Development/Libraries -License: Ruby or MIT -Requires: ruby(release) -Requires: ruby(rubygems) >= %{rubygems_version} -Provides: rake = %{version}-%{release} -Provides: rubygem(rake) = %{version}-%{release} +# Default gems +# +# These packages are part of Ruby StdLib and are expected to be loadable even +# with disabled RubyGems. + +%package default-gems +Summary: Default gems which are part of Ruby StdLib +Supplements: ruby(rubygems) +# Obsoleted by Ruby 3.0 in F34 timeframe. +Obsoletes: rubygem-openssl < 2.2.0-145 BuildArch: noarch -%description -n rubygem-rake -Rake is a Make-like program implemented in Ruby. Tasks and dependencies are -specified in standard Ruby syntax. +%description default-gems +The .gemspec files and executables of default gems, which are part of Ruby +StdLib. -%package irb +%package -n rubygem-irb Summary: The Interactive Ruby Version: %{irb_version} -Group: Development/Libraries -Requires: %{name}-libs = %{ruby_version_patch_level} +License: Ruby OR BSD-2-Clause Provides: irb = %{version}-%{release} -Provides: ruby(irb) = %{version}-%{release} +Provides: bundled(rubygem-irb) = %{irb_version} BuildArch: noarch -%description irb +%description -n rubygem-irb The irb is acronym for Interactive Ruby. It evaluates ruby expression from the terminal. @@ -278,17 +484,21 @@ from the terminal. %package -n rubygem-rdoc Summary: A tool to generate HTML and command-line documentation for Ruby projects Version: %{rdoc_version} -Group: Development/Libraries -License: GPLv2 and Ruby and MIT -Requires: ruby(release) -Requires: ruby(rubygems) >= %{rubygems_version} -Requires: ruby(irb) = %{irb_version} +# BSD-3-Clause: lib/rdoc/generator/darkfish.rb +# CC-BY-2.5: lib/rdoc/generator/template/darkfish/images/loadingAnimation.gif +# OFL-1.1-RFN: lib/rdoc/generator/template/darkfish/css/fonts.css +# MIT: lib/rdoc/generator/aliki.rb +# MIT: lib/rdoc/generator/template/aliki/* +# Note that RDoc now embeds Racc parser: +# https://github.com/ruby/rdoc/pull/1019 +# Luckily, this should have no license impact: +# https://github.com/ruby/racc/blob/5eb07b28bfb3e193a1cac07798fe7be7e1e246c4/lib/racc/parser.rb#L8-L10 +License: GPL-2.0-only AND Ruby AND BSD-3-Clause AND CC-BY-2.5 AND OFL-1.1-RFN AND MIT +Requires: rubygem(io-console) Requires: rubygem(json) >= %{json_version} Provides: rdoc = %{version}-%{release} Provides: ri = %{version}-%{release} -Provides: rubygem(rdoc) = %{version}-%{release} -Obsoletes: ruby-rdoc < %{version} -Obsoletes: ruby-ri < %{version} +Provides: bundled(rubygem-rdoc) = %{rdoc_version} BuildArch: noarch %description -n rubygem-rdoc @@ -299,7 +509,6 @@ documentation. %package doc Summary: Documentation for %{name} -Group: Documentation Requires: %{_bindir}/ri BuildArch: noarch @@ -310,11 +519,9 @@ This package contains documentation for %{name}. %package -n rubygem-bigdecimal Summary: BigDecimal provides arbitrary-precision floating point decimal arithmetic Version: %{bigdecimal_version} -Group: Development/Libraries -License: GPL+ or Artistic -Requires: ruby(release) -Requires: ruby(rubygems) >= %{rubygems_version} -Provides: rubygem(bigdecimal) = %{version}-%{release} +# dtoa: missing/dtoa.c +License: (Ruby OR BSD-2-Clause) AND dtoa +Provides: bundled(rubygem-bigdecimal) = %{bigdecimal_version} %description -n rubygem-bigdecimal Ruby provides built-in support for arbitrary precision integer arithmetic. @@ -332,10 +539,8 @@ conversion between base 10 and base 2. %package -n rubygem-io-console Summary: IO/Console is a simple console utilizing library Version: %{io_console_version} -Group: Development/Libraries -Requires: ruby(release) -Requires: ruby(rubygems) >= %{rubygems_version} -Provides: rubygem(io-console) = %{version}-%{release} +License: Ruby OR BSD-2-Clause +Provides: bundled(rubygem-io-console) = %{io_console_version} %description -n rubygem-io-console IO/Console provides very simple and portable access to console. It doesn't @@ -345,11 +550,18 @@ provide higher layer features, such like curses and readline. %package -n rubygem-json Summary: This is a JSON implementation as a Ruby extension in C Version: %{json_version} -Group: Development/Libraries -License: Ruby or GPLv2 -Requires: ruby(release) -Requires: ruby(rubygems) >= %{rubygems_version} -Provides: rubygem(json) = %{version}-%{release} +# Apache-2.0 OR BSL-1.0: ext/json/vendor/ryu.h +# MIT: ext/json/vendor/jeaiii-ltoa.h +# BSL-1.0: ext/json/vendor/fpconv.c +License: (Ruby OR BSD-2-Clause) AND (Apache-2.0 OR BSL-1.0) AND MIT AND BSL-1.0 +Provides: bundled(rubygem-json) = %{json_version} +# https://github.com/ulfjack/ryu +Provides: bundled(ryu) +# jeaiii-ltoa.h +# https://github.com/jeaiii/itoa +Provides: bundled(itoa) +# https://github.com/night-shift/fpconv +Provides: bundled(fpconv) %description -n rubygem-json This is a implementation of the JSON specification according to RFC 4627. @@ -358,39 +570,11 @@ data to disk or transmit it over a network rather than use a verbose markup language. -%package -n rubygem-minitest -Summary: Minitest provides a complete suite of testing facilities -Version: %{minitest_version} -Group: Development/Libraries -License: MIT -Requires: ruby(release) -Requires: ruby(rubygems) >= %{rubygems_version} -Provides: rubygem(minitest) = %{version}-%{release} -BuildArch: noarch - -%description -n rubygem-minitest -minitest/unit is a small and incredibly fast unit testing framework. - -minitest/spec is a functionally complete spec engine. - -minitest/benchmark is an awesome way to assert the performance of your -algorithms in a repeatable manner. - -minitest/mock by Steven Baker, is a beautifully tiny mock object -framework. - -minitest/pride shows pride in testing and adds coloring to your test -output. - - %package -n rubygem-psych Summary: A libyaml wrapper for Ruby -Version: %{psych_version} -Group: Development/Libraries +Version: %{psych_version}%{?psych_prerelease:~%{sub %{psych_prerelease} 2 -1}} License: MIT -Requires: ruby(release) -Requires: ruby(rubygems) >= %{rubygems_version} -Provides: rubygem(psych) = %{version}-%{release} +Provides: bundled(rubygem-psych) = %{psych_version}%{?psych_prerelease:~%{sub %{psych_prerelease} 2 -1}} %description -n rubygem-psych Psych is a YAML parser and emitter. Psych leverages @@ -398,49 +582,249 @@ libyaml[http://pyyaml.org/wiki/LibYAML] for its YAML parsing and emitting capabilities. In addition to wrapping libyaml, Psych also knows how to serialize and de-serialize most Ruby objects to and from the YAML format. -# TODO: -# %%pacakge -n rubygem-test-unit + +%package -n rubygem-bundler +Summary: Library and utilities to manage a Ruby application's gem dependencies +Version: %{bundler_version} +# BSD-2-Clause OR Ruby: +# lib/bundler/vendor/fileutils +# lib/bundler/vendor/tsort +# lib/bundler/vendor/uri +# MIT: +# lib/bundler/vendor/connection_pool +# lib/bundler/vendor/net-http-persistent +# lib/bundler/vendor/pub_brub +# lib/bundler/vendor/thor +# lib/rubygems/resolver/molinillo +License: MIT AND (Ruby OR BSD-2-Clause) +Requires: rubygem(io-console) +Provides: bundled(rubygem-bundler) = %{bundler_version} +# https://github.com/bundler/bundler/issues/3647 +Provides: bundled(rubygem-connection_pool) = %{bundler_connection_pool_version} +Provides: bundled(rubygem-fileutils) = %{bundler_fileutils_version} +Provides: bundled(rubygem-net-http-persistent) = %{bundler_net_http_persistent_version} +Provides: bundled(rubygem-pub_grub) = %{bundler_pub_grub_version} +Provides: bundled(rubygem-securerandom) = %{bundler_securerandom_version} +Provides: bundled(rubygem-thor) = %{bundler_thor_version} +Provides: bundled(rubygem-tsort) = %{bundler_tsort_version} +Provides: bundled(rubygem-uri) = %{bundler_uri_version} +BuildArch: noarch + +%description -n rubygem-bundler +Bundler manages an application's dependencies through its entire life, across +many machines, systematically and repeatably. -%package tcltk -Summary: Tcl/Tk interface for scripting language Ruby -Group: Development/Languages -Requires: %{name}-libs%{?_isa} = %{ruby_version_patch_level} -Provides: ruby(tcltk) = %{ruby_version_patch_level}-%{release} +# Bundled gems +# +# These are regular packages, which might be installed just optionally. Users +# should list them among their dependencies (in Gemfile). + +%package bundled-gems +Summary: Bundled gems which are part of Ruby StdLib +Provides: bundled(rubygem-abbrev) = %{abbrev_version} +Provides: bundled(rubygem-base64) = %{base64_version} +Provides: bundled(rubygem-benchmark) = %{benchmark_version} +Provides: bundled(rubygem-csv) = %{csv_version} +Provides: bundled(rubygem-debug) = %{debug_version} +Provides: bundled(rubygem-drb) = %{drb_version} +Provides: bundled(rubygem-getoptlong) = %{getoptlong_version} +Provides: bundled(rubygem-fiddle) = %{fiddle_version} +Provides: bundled(rubygem-logger) = %{logger_version} +Provides: bundled(rubygem-matrix) = %{matrix_version} +Provides: bundled(rubygem-mutex_m) = %{mutex_m_version} +Provides: bundled(rubygem-net-ftp) = %{net_ftp_version} +Provides: bundled(rubygem-net-imap) = %{net_imap_version} +Provides: bundled(rubygem-net-pop) = %{net_pop_version} +Provides: bundled(rubygem-net-smtp) = %{net_smtp_version} +Provides: bundled(rubygem-nkf) = %{nkf_version} +Provides: bundled(rubygem-observer) = %{observer_version} +Provides: bundled(rubygem-ostruct) = %{ostruct_version} +Provides: bundled(rubygem-prime) = %{prime_version} +Provides: bundled(rubygem-pstore) = %{pstore_version} +Provides: bundled(rubygem-readline) = %{readline_version} +Provides: bundled(rubygem-reline) = %{reline_version} +Provides: bundled(rubygem-repl_type_completor) = %{repl_type_completor_version} +Provides: bundled(rubygem-resolv-replace) = %{resolv_replace_version} +Provides: bundled(rubygem-rinda) = %{rinda_version} +Provides: bundled(rubygem-syslog) = %{syslog_version} +# https://github.com/nurse/nkf +# Please note that nkf going to be promoted to bundled gem in Ruby 3.4: +# https://github.com/ruby/ruby/commit/2e3a7f70ae71650be6ea38a483f66ce17ca5eb1d +Provides: bundled(nkf) = %{bundled_nkf_version} + + +%description bundled-gems +Bundled gems which are part of Ruby StdLib. While being part of Ruby, these +needs to be listed in Gemfile to be used by Bundler. + + +%package -n rubygem-minitest +Summary: Minitest provides a complete suite of testing facilities +Version: %{minitest_version} +License: MIT +Provides: bundled(rubygem-minitest) = %{minitest_version} +BuildArch: noarch + +%description -n rubygem-minitest +minitest/test is a small and incredibly fast unit testing framework. + +minitest/spec is a functionally complete spec engine. + +minitest/benchmark is an awesome way to assert the performance of your +algorithms in a repeatable manner. + +minitest/pride shows pride in testing and adds coloring to your test +output. + + +%package -n rubygem-power_assert +Summary: Power Assert for Ruby +Version: %{power_assert_version} +License: Ruby OR BSD-2-Clause +Provides: bundled(rubygem-power_assert) = %{power_assert_version} +BuildArch: noarch + +%description -n rubygem-power_assert +Power Assert shows each value of variables and method calls in the expression. +It is useful for testing, providing which value wasn't correct when the +condition is not satisfied. + + +%package -n rubygem-rake +Summary: Ruby based make-like utility +Version: %{rake_version} +License: MIT +Provides: rake = %{version}-%{release} +Provides: bundled(rubygem-rake) = %{rake_version} +BuildArch: noarch + +%description -n rubygem-rake +Rake is a Make-like program implemented in Ruby. Tasks and dependencies are +specified in standard Ruby syntax. + + +%package -n rubygem-rbs +Summary: Type signature for Ruby +Version: %{rbs_version} +License: Ruby OR BSD-2-Clause +Provides: bundled(rubygem-rbs) = %{rbs_version} + +%description -n rubygem-rbs +RBS is the language for type signatures for Ruby and standard library +definitions. + + +%package -n rubygem-test-unit +Summary: An xUnit family unit testing framework for Ruby +Version: %{test_unit_version} +# lib/test/unit/diff.rb is a double license of the Ruby license and PSF license. +License: (Ruby OR BSD-2-Clause) AND (Ruby OR BSD-2-Clause OR Python-2.0.1) +Provides: bundled(rubygem-test-unit) = %{test_unit_version} +BuildArch: noarch + +%description -n rubygem-test-unit +Test::Unit (test-unit) is unit testing framework for Ruby, based on xUnit +principles. These were originally designed by Kent Beck, creator of extreme +programming software development methodology, for Smalltalk's SUnit. It allows +writing tests, checking results and automated testing in Ruby. + + +%package -n rubygem-racc +Version: %{racc_version} +Summary: Racc is a LALR(1) parser generator +License: Ruby OR BSD-2-Clause +URL: https://github.com/ruby/racc +Provides: bundled(rubygem-racc) = %{racc_version} + +%description -n rubygem-racc +Racc is a LALR(1) parser generator. +It is written in Ruby itself, and generates Ruby program. + + +%package -n rubygem-rexml +Summary: An XML toolkit for Ruby +Version: %{rexml_version} +License: BSD-2-Clause +URL: https://github.com/ruby/rexml +Provides: bundled(rubygem-rexml) = %{rexml_version} +BuildArch: noarch + +%description -n rubygem-rexml +REXML was inspired by the Electric XML library for Java, which features an +easy-to-use API, small size, and speed. Hopefully, REXML, designed with the same +philosophy, has these same features. I've tried to keep the API as intuitive as +possible, and have followed the Ruby methodology for method naming and code +flow, rather than mirroring the Java API. + +REXML supports both tree and stream document parsing. Stream parsing is faster +(about 1.5 times as fast). However, with stream parsing, you don't get access to +features such as XPath. + + +%package -n rubygem-rss +Summary: Family of libraries that support various formats of XML "feeds" +Version: %{rss_version} +License: BSD-2-Clause +URL: https://github.com/ruby/rss +Provides: bundled(rubygem-rss) = %{rss_version} +BuildArch: noarch + +%description -n rubygem-rss +Really Simple Syndication (RSS) is a family of formats that describe 'feeds', +specially constructed XML documents that allow an interested person to subscribe +and receive updates from a particular web service. This library provides tooling +to read and create these feeds. + + +%package -n rubygem-typeprof +Summary: TypeProf is a type analysis tool for Ruby code based on abstract interpretation +Version: %{typeprof_version} +License: MIT +URL: https://github.com/ruby/typeprof +Provides: bundled(rubygem-typeprof) = %{typeprof_version} +BuildArch: noarch + +%description -n rubygem-typeprof +TypeProf performs a type analysis of non-annotated Ruby code. +It abstractly executes input Ruby code in a level of types instead of values, +gathers what types are passed to and returned by methods, and prints the +analysis result in RBS format, a standard type description format for Ruby +3.0. -%description tcltk -Tcl/Tk interface for the object-oriented scripting language Ruby. %prep %setup -q -n %{ruby_archive} -%patch0 -p1 -%patch3 -p1 -%patch5 -p1 -%patch8 -p1 -%patch9 -p1 -%patch12 -p1 -%patch13 -p1 -%patch14 -p1 -%patch16 -p1 -%patch17 -p1 -%patch18 -p1 -%patch19 -p1 -%patch20 -p1 +%patch 0 -p1 + +pushd .bundle/gems/rdoc-%{rdoc_version} +%patch 1 -p1 +%patch 9 -p1 +popd + +%patch 2 -p1 +%patch 3 -p1 +%patch 4 -p1 +%patch 5 -p1 +%patch 6 -p1 +%patch 7 -p1 +%patch 8 -p1 # Provide an example of usage of the tapset: cp -a %{SOURCE3} . -# Make abrt_prelude.rb available for compilation process. The prelude must be -# available together with Ruby's source due to -# https://github.com/ruby/ruby/blob/trunk/tool/compile_prelude.rb#L26 -cp -a %{SOURCE6} . - %build autoconf +%global _configure %{_builddir}/%{buildsubdir}/configure + +mkdir -p %{_vpath_builddir} +pushd %{_vpath_builddir} + %configure \ --with-rubylibprefix='%{ruby_libdir}' \ + --with-archlibdir='%{_libdir}' \ --with-rubyarchprefix='%{ruby_libarchdir}' \ --with-sitedir='%{ruby_sitelibdir}' \ --with-sitearchdir='%{ruby_sitearchdir}' \ @@ -452,26 +836,42 @@ autoconf --with-vendorarchhdrdir='$(vendorhdrdir)/$(arch)' \ --with-rubygemsdir='%{rubygems_dir}' \ --with-ruby-pc='%{name}.pc' \ + --with-compress-debug-sections=no \ --disable-rpath \ + --enable-mkmf-verbose \ --enable-shared \ --with-ruby-version='' \ --enable-multiarch \ - --with-prelude=./abrt_prelude.rb \ + %{?with_yjit: --enable-yjit} \ + %{?with_zjit: --enable-zjit} \ + %{?with_rust: rustc_flags='%{build_rustflags}'} \ +popd - -# Q= makes the build output more verbose and allows to check Fedora -# compiler options. -make %{?_smp_mflags} COPY="cp -p" Q= +# V=1 in %%make_build outputs the compiler options more verbosely. +# https://bugs.ruby-lang.org/issues/18756 +%make_build COPY="cp -p" -C %{_vpath_builddir} %install rm -rf %{buildroot} -make install DESTDIR=%{buildroot} + +%make_install -C %{_vpath_builddir} + +# TODO: Regenerate RBS parser in lib/rbs/parser.rb # Rename ruby/config.h to ruby/config-.h to avoid file conflicts on # multilib systems and install config.h wrapper -mv %{buildroot}%{_includedir}/%{name}/config.h %{buildroot}%{_includedir}/%{name}/config-%{_arch}.h -install -m644 %{SOURCE7} %{buildroot}%{_includedir}/%{name}/config.h +%multilib_fix_c_header --file %{_includedir}/%{name}/config.h + +# `ruby` executable is placed in some strange directory for some unknow +# reasons. +# https://bugs.ruby-lang.org/issues/20800 +# https://github.com/ruby/ruby/pull/12043 +CONFIG_TARGET_DIR=%{buildroot}%{_exec_prefix}/$( \ + %{_vpath_builddir}/miniruby -I%{_vpath_builddir} -rrbconfig -e 'puts RbConfig::CONFIG["config_target"]' +) +mv ${CONFIG_TARGET_DIR}/bin/ruby %{buildroot}%{_bindir} +rm -rd ${CONFIG_TARGET_DIR} # Rename the ruby executable. It is replaced by RubyPick. %{?with_rubypick:mv %{buildroot}%{_bindir}/%{name}{,-mri}} @@ -480,18 +880,30 @@ install -m644 %{SOURCE7} %{buildroot}%{_includedir}/%{name}/config.h # http://bugs.ruby-lang.org/issues/7807 sed -i 's/Version: \${ruby_version}/Version: %{ruby_version}/' %{buildroot}%{_libdir}/pkgconfig/%{name}.pc -# Move macros file insto proper place and replace the %%{name} macro, since it -# would be wrongly evaluated during build of other packages. -mkdir -p %{buildroot}%{_sysconfdir}/rpm -install -m 644 %{SOURCE4} %{buildroot}%{_sysconfdir}/rpm/macros.ruby -sed -i "s/%%{name}/%{name}/" %{buildroot}%{_sysconfdir}/rpm/macros.ruby -install -m 644 %{SOURCE5} %{buildroot}%{_sysconfdir}/rpm/macros.rubygems -sed -i "s/%%{name}/%{name}/" %{buildroot}%{_sysconfdir}/rpm/macros.rubygems +# Kill bundled certificates, as they should be part of ca-certificates. +for cert in \ + rubygems.org/GlobalSign.pem +do + rm %{buildroot}%{rubygems_dir}/rubygems/ssl_certs/$cert + rm -d $(dirname %{buildroot}%{rubygems_dir}/rubygems/ssl_certs/$cert) || : +done +# Ensure there is not forgotten any certificate. +test ! "$(ls -A %{buildroot}%{rubygems_dir}/rubygems/ssl_certs/ 2>/dev/null)" -# Kill bundled cert.pem -mkdir -p %{buildroot}%{rubygems_dir}/rubygems/ssl_certs/ -ln -sf %{_sysconfdir}/pki/tls/cert.pem \ - %{buildroot}%{rubygems_dir}/rubygems/ssl_certs/ca-bundle.pem +# Move macros file into proper place and replace the %%{name} macro, since it +# would be wrongly evaluated during build of other packages. +mkdir -p %{buildroot}%{_rpmmacrodir} +install -m 644 %{SOURCE4} %{buildroot}%{_rpmmacrodir}/macros.ruby +sed -i "s/%%{name}/%{name}/" %{buildroot}%{_rpmmacrodir}/macros.ruby +install -m 644 %{SOURCE5} %{buildroot}%{_rpmmacrodir}/macros.rubygems +sed -i "s/%%{name}/%{name}/" %{buildroot}%{_rpmmacrodir}/macros.rubygems + +# Install dependency generators. +mkdir -p %{buildroot}%{_fileattrsdir} +install -m 644 %{SOURCE6} %{buildroot}%{_fileattrsdir} +install -m 755 %{SOURCE7} %{buildroot}%{_rpmconfigdir} +install -m 755 %{SOURCE8} %{buildroot}%{_rpmconfigdir} +install -m 755 %{SOURCE9} %{buildroot}%{_rpmconfigdir} # Install custom operating_system.rb. mkdir -p %{buildroot}%{rubygems_dir}/rubygems/defaults @@ -507,189 +919,418 @@ mv %{buildroot}%{ruby_libdir}/gems %{buildroot}%{gem_dir} mkdir -p %{buildroot}%{_exec_prefix}/lib{,64}/gems/%{name} # Move bundled rubygems to %%gem_dir and %%gem_extdir_mri -# make symlinks for io-console and bigdecimal, which are considered to be part of stdlib by other Gems -mkdir -p %{buildroot}%{gem_dir}/gems/rake-%{rake_version}/lib -mv %{buildroot}%{ruby_libdir}/rake* %{buildroot}%{gem_dir}/gems/rake-%{rake_version}/lib -mv %{buildroot}%{gem_dir}/specifications/default/rake-%{rake_version}.gemspec %{buildroot}%{gem_dir}/specifications +# make symlinks for io-console, which is considered to be part of stdlib by other Gems +# TODO: Put help files into proper location. +# https://bugs.ruby-lang.org/issues/15359 +mkdir -p %{buildroot}%{gem_libdir bundler} +mv %{buildroot}%{ruby_libdir}/bundler.rb %{buildroot}%{gem_libdir bundler} +mv %{buildroot}%{ruby_libdir}/bundler %{buildroot}%{gem_libdir bundler} +mv %{buildroot}%{gem_spec -d bundler} %{buildroot}%{gem_spec bundler} -mkdir -p %{buildroot}%{gem_dir}/gems/rdoc-%{rdoc_version}/lib -mv %{buildroot}%{ruby_libdir}/rdoc* %{buildroot}%{gem_dir}/gems/rdoc-%{rdoc_version}/lib -mv %{buildroot}%{gem_dir}/specifications/default/rdoc-%{rdoc_version}.gemspec %{buildroot}%{gem_dir}/specifications +mkdir -p %{buildroot}%{gem_libdir io-console} +mkdir -p %{buildroot}%{gem_extdir_mri io-console}/io +mv %{buildroot}%{ruby_libdir}/io %{buildroot}%{gem_libdir io-console} +mv %{buildroot}%{ruby_libarchdir}/io/console.so %{buildroot}%{gem_extdir_mri io-console}/io +touch %{buildroot}%{gem_extdir_mri io-console}/gem.build_complete +mv %{buildroot}%{gem_spec -d io-console} %{buildroot}%{gem_spec io-console} +ln -s %{gem_libdir io-console}/io %{buildroot}%{ruby_libdir}/io +ln -s %{gem_extdir_mri io-console}/io/console.so %{buildroot}%{ruby_libarchdir}/io/console.so -mkdir -p %{buildroot}%{gem_dir}/gems/bigdecimal-%{bigdecimal_version}/lib -mkdir -p %{buildroot}%{_libdir}/gems/%{name}/bigdecimal-%{bigdecimal_version}/lib -mv %{buildroot}%{ruby_libdir}/bigdecimal %{buildroot}%{gem_dir}/gems/bigdecimal-%{bigdecimal_version}/lib -mv %{buildroot}%{ruby_libarchdir}/bigdecimal.so %{buildroot}%{_libdir}/gems/%{name}/bigdecimal-%{bigdecimal_version}/lib -mv %{buildroot}%{gem_dir}/specifications/default/bigdecimal-%{bigdecimal_version}.gemspec %{buildroot}%{gem_dir}/specifications -ln -s %{gem_dir}/gems/bigdecimal-%{bigdecimal_version}/lib/bigdecimal %{buildroot}%{ruby_libdir}/bigdecimal -ln -s %{_libdir}/gems/%{name}/bigdecimal-%{bigdecimal_version}/lib/bigdecimal.so %{buildroot}%{ruby_libarchdir}/bigdecimal.so +mkdir -p %{buildroot}%{gem_libdir json} +mkdir -p %{buildroot}%{gem_extdir_mri json} +mv %{buildroot}%{ruby_libdir}/json* %{buildroot}%{gem_libdir json} +mv %{buildroot}%{ruby_libarchdir}/json/ %{buildroot}%{gem_extdir_mri json} +touch %{buildroot}%{gem_extdir_mri json}/gem.build_complete +mv %{buildroot}%{gem_spec -d json} %{buildroot}%{gem_spec json} +ln -s %{gem_libdir json}/json.rb %{buildroot}%{ruby_libdir}/json.rb +ln -s %{gem_libdir json}/json %{buildroot}%{ruby_libdir}/json +ln -s %{gem_extdir_mri json}/json/ %{buildroot}%{ruby_libarchdir}/json -mkdir -p %{buildroot}%{gem_dir}/gems/io-console-%{io_console_version}/lib -mkdir -p %{buildroot}%{_libdir}/gems/%{name}/io-console-%{io_console_version}/lib/io -mv %{buildroot}%{ruby_libdir}/io %{buildroot}%{gem_dir}/gems/io-console-%{io_console_version}/lib -mv %{buildroot}%{ruby_libarchdir}/io/console.so %{buildroot}%{_libdir}/gems/%{name}/io-console-%{io_console_version}/lib/io -mv %{buildroot}%{gem_dir}/specifications/default/io-console-%{io_console_version}.gemspec %{buildroot}%{gem_dir}/specifications -ln -s %{gem_dir}/gems/io-console-%{io_console_version}/lib/io %{buildroot}%{ruby_libdir}/io -ln -s %{_libdir}/gems/%{name}/io-console-%{io_console_version}/lib/io/console.so %{buildroot}%{ruby_libarchdir}/io/console.so +mkdir -p %{buildroot}%{gem_libdir psych} +mkdir -p %{buildroot}%{gem_extdir_mri psych} +mv %{buildroot}%{ruby_libdir}/psych* %{buildroot}%{gem_libdir psych} +mv %{buildroot}%{ruby_libarchdir}/psych.so %{buildroot}%{gem_extdir_mri psych} +touch %{buildroot}%{gem_extdir_mri psych}/gem.build_complete +mv %{buildroot}%{gem_spec -d psych} %{buildroot}%{gem_spec psych} +ln -s %{gem_libdir psych}/psych %{buildroot}%{ruby_libdir}/psych +ln -s %{gem_libdir psych}/psych.rb %{buildroot}%{ruby_libdir}/psych.rb +ln -s %{gem_extdir_mri psych}/psych.so %{buildroot}%{ruby_libarchdir}/psych.so -mkdir -p %{buildroot}%{gem_dir}/gems/json-%{json_version}/lib -mkdir -p %{buildroot}%{_libdir}/gems/%{name}/json-%{json_version}/lib -mv %{buildroot}%{ruby_libdir}/json* %{buildroot}%{gem_dir}/gems/json-%{json_version}/lib -mv %{buildroot}%{ruby_libarchdir}/json/ %{buildroot}%{_libdir}/gems/%{name}/json-%{json_version}/lib/ -mv %{buildroot}%{gem_dir}/specifications/default/json-%{json_version}.gemspec %{buildroot}%{gem_dir}/specifications +# Move the binary extensions into proper place (if no gem has binary extension, +# the extensions directory might be empty). +# TODO: Get information about extension form .gemspec files. +find %{buildroot}%{gem_dir}/extensions/*-%{_target_os}/%{major_minor_version}.*/* -maxdepth 0 \ + -exec mv '{}' %{buildroot}%{_libdir}/gems/%{name}/ \; \ + || echo "No gem binary extensions to move." -mkdir -p %{buildroot}%{gem_dir}/gems/minitest-%{minitest_version}/lib -mv %{buildroot}%{ruby_libdir}/minitest %{buildroot}%{gem_dir}/gems/minitest-%{minitest_version}/lib -mv %{buildroot}%{gem_dir}/specifications/default/minitest-%{minitest_version}.gemspec %{buildroot}%{gem_dir}/specifications +# Remove the extension sources and library copies from `lib` dir. +find %{buildroot}%{gem_dir}/gems/*/ext -maxdepth 0 -exec rm -rf '{}' + +find %{buildroot}%{gem_dir}/gems/*/lib -name \*.so -delete -mkdir -p %{buildroot}%{gem_dir}/gems/psych-%{psych_version}/lib -mkdir -p %{buildroot}%{_libdir}/gems/%{name}/psych-%{psych_version}/lib -mv %{buildroot}%{ruby_libdir}/psych* %{buildroot}%{gem_dir}/gems/psych-%{psych_version}/lib -mv %{buildroot}%{ruby_libarchdir}/psych.so %{buildroot}%{_libdir}/gems/%{name}/psych-%{psych_version}/lib/ -mv %{buildroot}%{gem_dir}/specifications/default/psych-%{psych_version}.gemspec %{buildroot}%{gem_dir}/specifications -# The links should replace directory, which RPM cannot handle and it is causing -# issues during upgrade from F18 to F19. As a workaround the links are placed -# into vendor direcories. This could be changed back as soon as F18 is EOLed. -# https://bugzilla.redhat.com/show_bug.cgi?id=988490 -ln -s %{gem_dir}/gems/psych-%{psych_version}/lib/psych %{buildroot}%{ruby_vendorlibdir}/psych -ln -s %{gem_dir}/gems/psych-%{psych_version}/lib/psych.rb %{buildroot}%{ruby_vendorlibdir}/psych.rb -ln -s %{_libdir}/gems/%{name}/psych-%{psych_version}/lib/psych.so %{buildroot}%{ruby_vendorarchdir}/psych.so - -# Adjust the gemspec files so that the gems will load properly -sed -i '/^end$/ i\ - s.require_paths = ["lib"]' %{buildroot}%{gem_dir}/specifications/rake-%{rake_version}.gemspec - -sed -i '/^end$/ i\ - s.require_paths = ["lib"]' %{buildroot}%{gem_dir}/specifications/rdoc-%{rdoc_version}.gemspec - -sed -i '/^end$/ i\ - s.require_paths = ["lib"]\ - s.extensions = ["bigdecimal.so"]' %{buildroot}%{gem_dir}/specifications/bigdecimal-%{bigdecimal_version}.gemspec - -sed -i '/^end$/ i\ - s.require_paths = ["lib"]\ - s.extensions = ["io/console.so"]' %{buildroot}%{gem_dir}/specifications/io-console-%{io_console_version}.gemspec - -sed -i '/^end$/ i\ - s.require_paths = ["lib"]\ - s.extensions = ["json/ext/parser.so", "json/ext/generator.so"]' %{buildroot}%{gem_dir}/specifications/json-%{json_version}.gemspec - -sed -i '/^end$/ i\ - s.require_paths = ["lib"]' %{buildroot}%{gem_dir}/specifications/minitest-%{minitest_version}.gemspec +# Move man pages into proper location +mkdir -p %{buildroot}%{_mandir}/man{1,5} +mv %{buildroot}%{gem_instdir irb}/man/irb.1 %{buildroot}%{_mandir}/man1 +mv %{buildroot}%{gem_instdir rake}/doc/rake.1 %{buildroot}%{_mandir}/man1 +mv %{buildroot}%{gem_instdir rdoc}/man/ri.1 %{buildroot}%{_mandir}/man1 +# https://bugs.ruby-lang.org/issues/17778 +cp -a %{buildroot}%{gem_libdir bundler}/bundler/man/*.1 %{buildroot}%{_mandir}/man1 +cp -a %{buildroot}%{gem_libdir bundler}/bundler/man/*.5 %{buildroot}%{_mandir}/man5 +%if %{with systemtap} # Install a tapset and fix up the path to the library. -mkdir -p %{buildroot}%{tapset_dir} -sed -e "s|@LIBRARY_PATH@|%{tapset_libdir}/libruby.so.%{ruby_version}|" \ - %{SOURCE2} > %{buildroot}%{tapset_dir}/libruby.so.%{ruby_version}.stp +mkdir -p %{buildroot}%{_systemtap_tapsetdir} +sed -e "s|@LIBRARY_PATH@|%{tapset_libdir}/libruby.so.%{major_minor_version}|" \ + %{SOURCE2} > %{buildroot}%{_systemtap_tapsetdir}/libruby.so.%{major_minor_version}.stp # Escape '*/' in comment. -sed -i -r "s|( \*.*\*)\/(.*)|\1\\\/\2|" %{buildroot}%{tapset_dir}/libruby.so.%{ruby_version}.stp +sed -i -r "s|( \*.*\*)\/(.*)|\1\\\/\2|" %{buildroot}%{_systemtap_tapsetdir}/libruby.so.%{major_minor_version}.stp +%endif + +# Prepare -doc subpackage file lists. +find doc -maxdepth 1 -type f ! -name '.*' ! -name '*.ja*' > .ruby-doc.en +echo 'doc/images' >> .ruby-doc.en +echo 'doc/syntax' >> .ruby-doc.en + +find doc -maxdepth 1 -type f -name '*.ja*' > .ruby-doc.ja +echo 'doc/pty' >> .ruby-doc.ja + +sed -i 's/^/%doc /' .ruby-doc.* +sed -i 's/^/%lang(ja) /' .ruby-doc.ja %check -DISABLE_TESTS="" - -%ifarch armv7l armv7hl armv7hnl -# test_call_double(DL::TestDL) fails on ARM HardFP -# http://bugs.ruby-lang.org/issues/6592 -DISABLE_TESTS="-x test_dl2.rb $DISABLE_TESTS" +%if 0%{?with_hardening_test} +# Check Ruby hardening. +%define fortification_x86_64 fortified="10" fortify-able="26" +%define fortification_i686 fortified="10" fortify-able="26" +%define fortification_aarch64 fortified="11" fortify-able="28" +%define fortification_ppc64le fortified="7" fortify-able="24" +%define fortification_s390x fortified="10" fortify-able="24" +%define fortification_riscv64 fortified="10" fortify-able="26" +# https://unix.stackexchange.com/questions/366/convince-grep-to-output-all-lines-not-just-those-with-matches +checksec --format=xml --file=%{_vpath_builddir}/libruby.so.%{ruby_version} | \ + sed -r "s//\1/" | \ + sed -nr $'/relro="full" canary="yes" nx="yes" pie="dso" rpath="no" runpath="no" symbols="yes" fortify_source="partial" %{expand:%{fortification_%{_target_cpu}}} filename='\''redhat-linux-build\/libruby.so.%{ruby_version}'\''/h; ${p;x;/./Q0;Q1}' %endif +# Check RubyGems version. +[ "`make -C %{_vpath_builddir} -s runruby TESTRUN_SCRIPT='%{_builddir}/%{buildsubdir}/bin/gem -v' | tail -1`" == '%{rubygems_version}' ] + +# Check Rubygems bundled dependencies versions. + +# Molinillo. +make -C %{_vpath_builddir} -s runruby TESTRUN_SCRIPT="-e \" \ + module Gem; module Resolver; end; end; \ + require 'rubygems/vendor/molinillo/lib/molinillo/gem_metadata'; \ + puts '%%{rubygems_molinillo_version}: %{rubygems_molinillo_version}'; \ + puts %Q[Gem::Molinillo::VERSION: #{Gem::Molinillo::VERSION}]; \ + exit 1 if Gem::Molinillo::VERSION != '%{rubygems_molinillo_version}'; \ +\"" + +# Net::HTTP. +make -C %{_vpath_builddir} -s runruby TESTRUN_SCRIPT="-e \" \ + module Gem; module Net; end; end; \ + require 'rbconfig'; \ + require 'rubygems/vendor/net-http/lib/net/http'; \ + puts '%%{rubygems_net_http_version}: %{rubygems_net_http_version}'; \ + puts %Q[Gem::Net::HTTP::VERSION: #{Gem::Net::HTTP::VERSION}]; \ + exit 1 if Gem::Net::HTTP::VERSION != '%{rubygems_net_http_version}'; \ +\"" + +# Net::Protocol. +make -C %{_vpath_builddir} -s runruby TESTRUN_SCRIPT="-e \" \ + module Gem; module Net; end; end; \ + require 'rubygems/vendor/net-protocol/lib/net/protocol'; \ + puts '%%{rubygems_net_protocol_version}: %{rubygems_net_protocol_version}'; \ + puts %Q[Gem::Net::Protocol::VERSION: #{Gem::Net::Protocol::VERSION}]; \ + exit 1 if Gem::Net::Protocol::VERSION != '%{rubygems_net_protocol_version}'; \ +\"" + +# OptParse. +make -C %{_vpath_builddir} -s runruby TESTRUN_SCRIPT="-e \" \ + module Gem; end; \ + require 'rubygems/vendor/optparse/lib/optparse'; \ + puts '%%{rubygems_optparse_version}: %{rubygems_optparse_version}'; \ + puts %Q[Gem::OptionParser::Version: #{Gem::OptionParser::Version}]; \ + exit 1 if Gem::OptionParser::Version != '%{rubygems_optparse_version}'; \ +\"" + +# Resolv. +make -C %{_vpath_builddir} -s runruby TESTRUN_SCRIPT="-e \" \ + module Gem; end; \ + require 'rbconfig'; \ + require 'rubygems/vendor/resolv/lib/resolv'; \ + puts '%%{rubygems_resolv_version}: %{rubygems_resolv_version}'; \ + puts %Q[Gem::Resolv::VERSION: #{Gem::Resolv::VERSION}]; \ + exit 1 if Gem::Resolv::VERSION != '%{rubygems_resolv_version}'; \ +\"" + +# SecureRandom. +make -C %{_vpath_builddir} -s runruby TESTRUN_SCRIPT="-e \" \ + module Gem; module Random; end; end; \ + require 'rubygems/vendor/securerandom/lib/securerandom'; \ + puts '%%{rubygems_securerandom_version}: %{rubygems_securerandom_version}'; \ + puts %Q[Gem::SecureRandom::VERSION: #{Gem::SecureRandom::VERSION}]; \ + exit 1 if Gem::SecureRandom::VERSION != '%{rubygems_securerandom_version}'; \ +\"" + +# Timeout. +make -C %{_vpath_builddir} -s runruby TESTRUN_SCRIPT="-e \" \ + module Gem; end; \ + require 'rubygems/vendor/timeout/lib/timeout'; \ + puts '%%{rubygems_timeout_version}: %{rubygems_timeout_version}'; \ + puts %Q[Gem::Timeout::VERSION: #{Gem::Timeout::VERSION}]; \ + exit 1 if Gem::Timeout::VERSION != '%{rubygems_timeout_version}'; \ +\"" + +# TSort +make -C %{_vpath_builddir} -s runruby TESTRUN_SCRIPT="-e \" \ + module Gem; end; \ + require 'rubygems/vendor/tsort/lib/tsort'; \ + puts '%%{rubygems_tsort_version}: %{rubygems_tsort_version}'; \ + puts %Q[Gem::TSort::VERSION: #{Gem::TSort::VERSION}]; \ + exit 1 if Gem::TSort::VERSION != '%{rubygems_tsort_version}'; \ +\"" + +# URI. +make -C %{_vpath_builddir} -s runruby TESTRUN_SCRIPT="-e \" \ + module Gem; end; \ + require 'rubygems/vendor/uri/lib/uri/version'; \ + puts '%%{rubygems_uri_version}: %{rubygems_uri_version}'; \ + puts %Q[Gem::URI::VERSION: #{Gem::URI::VERSION}]; \ + exit 1 if Gem::URI::VERSION != '%{rubygems_uri_version}'; \ +\"" + +# Check Bundler bundled dependencies versions. + +# connection_pool. +make -C %{_vpath_builddir} -s runruby TESTRUN_SCRIPT="-e \" \ + module Bundler; end; \ + require 'bundler/vendor/connection_pool/lib/connection_pool/version'; \ + puts '%%{bundler_connection_pool_version}; %{bundler_connection_pool_version}'; \ + puts %Q[Bundler::ConnectionPool::VERSION: #{Bundler::ConnectionPool::VERSION}]; \ + exit 1 if Bundler::ConnectionPool::VERSION != '%{bundler_connection_pool_version}'; \ +\"" + +# FileUtils. +make -C %{_vpath_builddir} -s runruby TESTRUN_SCRIPT="-e \" \ + module Bundler; end; \ + require 'bundler/vendor/fileutils/lib/fileutils'; \ + puts '%%{bundler_fileutils_version}: %{bundler_fileutils_version}'; \ + puts %Q[Bundler::FileUtils::VERSION: #{Bundler::FileUtils::VERSION}]; \ + exit 1 if Bundler::FileUtils::VERSION != '%{bundler_fileutils_version}'; \ +\"" + +# PubGrub +make -C %{_vpath_builddir} -s runruby TESTRUN_SCRIPT="-e \" \ + module Bundler; end; \ + require 'bundler/vendor/pub_grub/lib/pub_grub/version'; \ + puts '%%{bundler_pub_grub_version}: %{bundler_pub_grub_version}'; \ + puts %Q[Bundler::PubGrub::VERSION: #{Bundler::PubGrub::VERSION}]; \ + exit 1 if Bundler::PubGrub::VERSION != '%{bundler_pub_grub_version}'; \ +\"" + +# Net::HTTP::Persistent. +make -C %{_vpath_builddir} -s runruby TESTRUN_SCRIPT="-e \" \ + module Gem; end; \ + module Bundler; end; \ + require 'rbconfig'; \ + require 'bundler/vendor/net-http-persistent/lib/net/http/persistent'; \ + puts '%%{bundler_net_http_persistent_version}: %{bundler_net_http_persistent_version}'; \ + puts %Q[Gem::Net::HTTP::Persistent::VERSION: #{Gem::Net::HTTP::Persistent::VERSION}]; \ + exit 1 if Gem::Net::HTTP::Persistent::VERSION != '%{bundler_net_http_persistent_version}'; \ +\"" + +# SecureRandom. +make -C %{_vpath_builddir} -s runruby TESTRUN_SCRIPT="-e \" \ + module Bundler; module Random; end; end; \ + require 'bundler/vendor/securerandom/lib/securerandom'; \ + puts '%%{bundler_securerandom_version}: %{bundler_securerandom_version}'; \ + puts %Q[Bundler::SecureRandom::VERSION: #{Bundler::SecureRandom::VERSION}]; \ + exit 1 if Bundler::SecureRandom::VERSION != '%{bundler_securerandom_version}'; \ +\"" + +# Thor. +make -C %{_vpath_builddir} -s runruby TESTRUN_SCRIPT="-e \" \ + module Bundler; end; \ + require 'bundler/vendor/thor/lib/thor/version'; \ + puts '%%{bundler_thor_version}: %{bundler_thor_version}'; \ + puts %Q[Bundler::Thor::VERSION: #{Bundler::Thor::VERSION}]; \ + exit 1 if Bundler::Thor::VERSION != '%{bundler_thor_version}'; \ +\"" + +# TSort +make -C %{_vpath_builddir} -s runruby TESTRUN_SCRIPT="-e \" \ + module Bundler; end; \ + require 'bundler/vendor/tsort/lib/tsort'; \ + puts '%%{bundler_tsort_version}: %{bundler_tsort_version}'; \ + puts %Q[Bundler::TSort::VERSION: #{Bundler::TSort::VERSION}]; \ + exit 1 if Bundler::TSort::VERSION != '%{bundler_tsort_version}'; \ +\"" + +# URI. +make -C %{_vpath_builddir} -s runruby TESTRUN_SCRIPT="-e \" \ + module Bundler; end; \ + require 'bundler/vendor/uri/lib/uri/version'; \ + puts '%%{bundler_uri_version}: %{bundler_uri_version}'; \ + puts %Q[Bundler::URI::VERSION: #{Bundler::URI::VERSION}]; \ + exit 1 if Bundler::URI::VERSION != '%{bundler_uri_version}'; \ +\"" + +# Check bundled libraries versions. + +# Nkf. +make -C %{_vpath_builddir} -s runruby TESTRUN_SCRIPT="-e \" \ + require 'rubygems'; \ + require 'nkf'; \ + puts '%%{bundled_nkf_version}: %{bundled_nkf_version}'; \ + puts %Q[NKF::NKF_VERSION: #{NKF::NKF_VERSION}]; \ + exit 1 if NKF::NKF_VERSION != '%{bundled_nkf_version}'; \ +\"" + + # test_debug(TestRubyOptions) fails due to LoadError reported in debug mode, # when abrt.rb cannot be required (seems to be easier way then customizing # the test suite). -touch abrt.rb +touch %{_vpath_builddir}/abrt.rb -make check TESTS="-v $DISABLE_TESTS" +# Check if abrt hook is required (RubyGems are disabled by default when using +# runruby, so re-enable them). +make -C %{_vpath_builddir} runruby TESTRUN_SCRIPT="--enable-gems %{SOURCE10}" -%post libs -p /sbin/ldconfig +# Check if systemtap is supported. +%if %{with systemtap} +ln -sfr probes.d %{_vpath_builddir}/ +make -C %{_vpath_builddir} runruby TESTRUN_SCRIPT=%{SOURCE11} +%endif -%postun libs -p /sbin/ldconfig +# Test dependency generators for RPM +GENERATOR_SCRIPT="%{SOURCE7}" \ +make -C %{_vpath_builddir} runruby TESTRUN_SCRIPT=" \ + -I%{_builddir}/%{buildsubdir}/tool/lib -I%{_sourcedir} --enable-gems \ + %{SOURCE14} --verbose" +GENERATOR_SCRIPT="%{SOURCE8}" \ +make -C %{_vpath_builddir} runruby TESTRUN_SCRIPT=" \ + -I%{_builddir}/%{buildsubdir}/tool/lib -I%{_sourcedir} --enable-gems \ + %{SOURCE15} --verbose" +GENERATOR_SCRIPT="%{SOURCE9}" \ +make -C %{_vpath_builddir} runruby TESTRUN_SCRIPT=" \ + -I%{_builddir}/%{buildsubdir}/tool/lib -I%{_sourcedir} --enable-gems \ + %{SOURCE16} --verbose" + + +DISABLE_TESTS="" +MSPECOPTS="" + +# Avoid `hostname' dependency. +%{!?with_hostname:MSPECOPTS="-P 'Socket.gethostname returns the host name'"} + +# Give an option to increase the timeout in tests. +# https://bugs.ruby-lang.org/issues/16921 +%{?test_timeout_scale:RUBY_TEST_TIMEOUT_SCALE="%{test_timeout_scale}"} \ + make -C %{_vpath_builddir} %{?with_parallel_tests:%{?_smp_mflags}} check TESTS="-v --show-skip $DISABLE_TESTS" MSPECOPT="-fs $MSPECOPTS" + +# Run Ruby OpenSSL tests in OpenSSL FIPS. +make -C %{_vpath_builddir} runruby TESTRUN_SCRIPT=" \ + -I%{_builddir}/%{buildsubdir}/tool/lib --enable-gems \ + %{SOURCE12} %{_builddir}/%{buildsubdir} --verbose" + +%{?with_bundler_tests:make -C %{_vpath_builddir} test-bundler-parallel} %files -%doc COPYING -%lang(ja) %doc COPYING.ja -%doc GPL -%doc LEGAL -%{_bindir}/erb +%license BSDL +%license COPYING +%lang(ja) %license COPYING.ja +%license GPL +%license LEGAL %{_bindir}/%{name}%{?with_rubypick:-mri} -%{_bindir}/testrb -%{_mandir}/man1/erb* %{_mandir}/man1/ruby* -# http://fedoraproject.org/wiki/Packaging:Guidelines#Packaging_Static_Libraries -%exclude %{_libdir}/libruby-static.a - %files devel -%doc COPYING* -%doc GPL -%doc LEGAL -%doc README.EXT -%lang(ja) %doc README.EXT.ja +%license BSDL +%license COPYING +%lang(ja) %license COPYING.ja +%license GPL +%license LEGAL -%{_sysconfdir}/rpm/macros.ruby +%{_rpmmacrodir}/macros.ruby %{_includedir}/* %{_libdir}/libruby.so %{_libdir}/pkgconfig/%{name}.pc %files libs -%doc COPYING -%lang(ja) %doc COPYING.ja -%doc GPL -%doc LEGAL -%doc README -%lang(ja) %doc README.ja -%doc NEWS -%doc doc/NEWS-* +%license COPYING +%lang(ja) %license COPYING.ja +%license GPL +%license LEGAL +%doc README.md +%doc NEWS.md # Exclude /usr/local directory since it is supposed to be managed by # local system administrator. %exclude %{ruby_sitelibdir} %exclude %{ruby_sitearchdir} -%{ruby_vendorlibdir} -%{ruby_vendorarchdir} +%dir %{ruby_vendorlibdir} +%dir %{ruby_vendorarchdir} # List all these files explicitly to prevent surprises # Platform independent libraries. %dir %{ruby_libdir} -%{ruby_libdir}/*.rb -%exclude %{ruby_libdir}/*-tk.rb -%exclude %{ruby_libdir}/irb.rb -%exclude %{ruby_libdir}/tcltk.rb -%exclude %{ruby_libdir}/tk*.rb -%{ruby_libdir}/cgi -%{ruby_libdir}/date -%{ruby_libdir}/digest -%{ruby_libdir}/dl -%{ruby_libdir}/drb -%{ruby_libdir}/fiddle -%exclude %{ruby_libdir}/irb -%{ruby_libdir}/matrix +%exclude %{ruby_libdir}/json* +%exclude %{ruby_libdir}/psych* +%{ruby_libdir}/bundled_gems.rb +%{ruby_libdir}/cgi* +%{ruby_libdir}/coverage.rb +%{ruby_libdir}/date.rb +%{ruby_libdir}/delegate* +%{ruby_libdir}/digest* +%{ruby_libdir}/English.rb +%{ruby_libdir}/erb* +%{ruby_libdir}/error_highlight* +%{ruby_libdir}/expect.rb +%{ruby_libdir}/fileutils.rb +%{ruby_libdir}/find.rb +%{ruby_libdir}/forwardable* +%{ruby_libdir}/ipaddr.rb +%{ruby_libdir}/mkmf.rb +%{ruby_libdir}/monitor.rb %{ruby_libdir}/net -%{ruby_libdir}/openssl -%{ruby_libdir}/optparse -%{ruby_libdir}/racc -%{ruby_libdir}/rbconfig -%{ruby_libdir}/rexml -%{ruby_libdir}/rinda -%{ruby_libdir}/ripper -%{ruby_libdir}/rss -%{ruby_libdir}/shell -%{ruby_libdir}/syslog -%{ruby_libdir}/test -%exclude %{ruby_libdir}/tk -%exclude %{ruby_libdir}/tkextlib -%{ruby_libdir}/uri -%{ruby_libdir}/webrick -%{ruby_libdir}/xmlrpc -%{ruby_libdir}/yaml +%{ruby_libdir}/objspace* +%{ruby_libdir}/open-uri.rb +%{ruby_libdir}/open3* +%{ruby_libdir}/optionparser.rb +%{ruby_libdir}/optparse* +%{ruby_libdir}/pathname.rb +%{ruby_libdir}/pp.rb +%{ruby_libdir}/prettyprint.rb +%{ruby_libdir}/random +%{ruby_libdir}/resolv.rb +%{ruby_libdir}/ripper* +%{ruby_libdir}/securerandom.rb +%{ruby_libdir}/set/subclass_compatible.rb +%{ruby_libdir}/shellwords.rb +%{ruby_libdir}/singleton* +%{ruby_libdir}/socket.rb +%{ruby_libdir}/strscan +%{ruby_libdir}/syntax_suggest* +%{ruby_libdir}/tempfile.rb +%{ruby_libdir}/timeout* +%{ruby_libdir}/time.rb +%{ruby_libdir}/tmpdir.rb +%{ruby_libdir}/tsort.rb +%{ruby_libdir}/unicode_normalize +%{ruby_libdir}/un.rb +%{ruby_libdir}/uri* +%{ruby_libdir}/weakref* +%{ruby_libdir}/yaml* +%{ruby_libdir}/prism* # Platform specific libraries. -%{_libdir}/libruby.so.* +%{_libdir}/libruby.so.{%{major_minor_version},%{ruby_version}} %dir %{ruby_libarchdir} +%dir %{ruby_libarchdir}/cgi +%{ruby_libarchdir}/cgi/escape.so %{ruby_libarchdir}/continuation.so %{ruby_libarchdir}/coverage.so -%{ruby_libarchdir}/curses.so %{ruby_libarchdir}/date_core.so -%{ruby_libarchdir}/dbm.so %dir %{ruby_libarchdir}/digest %{ruby_libarchdir}/digest.so %{ruby_libarchdir}/digest/bubblebabble.so @@ -697,11 +1338,9 @@ make check TESTS="-v $DISABLE_TESTS" %{ruby_libarchdir}/digest/rmd160.so %{ruby_libarchdir}/digest/sha1.so %{ruby_libarchdir}/digest/sha2.so -%dir %{ruby_libarchdir}/dl -%{ruby_libarchdir}/dl.so -%{ruby_libarchdir}/dl/callback.so %dir %{ruby_libarchdir}/enc %{ruby_libarchdir}/enc/big5.so +%{ruby_libarchdir}/enc/cesu_8.so %{ruby_libarchdir}/enc/cp949.so %{ruby_libarchdir}/enc/emacs_mule.so %{ruby_libarchdir}/enc/encdb.so @@ -731,7 +1370,9 @@ make check TESTS="-v $DISABLE_TESTS" %{ruby_libarchdir}/enc/shift_jis.so %dir %{ruby_libarchdir}/enc/trans %{ruby_libarchdir}/enc/trans/big5.so +%{ruby_libarchdir}/enc/trans/cesu_8.so %{ruby_libarchdir}/enc/trans/chinese.so +%{ruby_libarchdir}/enc/trans/ebcdic.so %{ruby_libarchdir}/enc/trans/emoji.so %{ruby_libarchdir}/enc/trans/emoji_iso2022_kddi.so %{ruby_libarchdir}/enc/trans/emoji_sjis_docomo.so @@ -753,153 +1394,1301 @@ make check TESTS="-v $DISABLE_TESTS" %{ruby_libarchdir}/enc/utf_16le.so %{ruby_libarchdir}/enc/utf_32be.so %{ruby_libarchdir}/enc/utf_32le.so +%{ruby_libarchdir}/enc/windows_1250.so %{ruby_libarchdir}/enc/windows_1251.so +%{ruby_libarchdir}/enc/windows_1252.so +%{ruby_libarchdir}/enc/windows_1253.so +%{ruby_libarchdir}/enc/windows_1254.so +%{ruby_libarchdir}/enc/windows_1257.so %{ruby_libarchdir}/enc/windows_31j.so +%{ruby_libarchdir}/erb/escape.so %{ruby_libarchdir}/etc.so %{ruby_libarchdir}/fcntl.so -%{ruby_libarchdir}/fiber.so -%{ruby_libarchdir}/fiddle.so -%{ruby_libarchdir}/gdbm.so %dir %{ruby_libarchdir}/io %{ruby_libarchdir}/io/nonblock.so %{ruby_libarchdir}/io/wait.so -%dir %{ruby_libarchdir}/mathn -%{ruby_libarchdir}/mathn/complex.so -%{ruby_libarchdir}/mathn/rational.so -%{ruby_libarchdir}/nkf.so +%{ruby_libarchdir}/monitor.so %{ruby_libarchdir}/objspace.so -%{ruby_libarchdir}/openssl.so -%{ruby_libarchdir}/pathname.so %{ruby_libarchdir}/pty.so -%dir %{ruby_libarchdir}/racc -%{ruby_libarchdir}/racc/cparse.so +%dir %{ruby_libarchdir}/rbconfig %{ruby_libarchdir}/rbconfig.rb -%{ruby_libarchdir}/readline.so +%{ruby_libarchdir}/rbconfig/sizeof.so %{ruby_libarchdir}/ripper.so -%{ruby_libarchdir}/sdbm.so %{ruby_libarchdir}/socket.so %{ruby_libarchdir}/stringio.so %{ruby_libarchdir}/strscan.so -%{ruby_libarchdir}/syslog.so -%exclude %{ruby_libarchdir}/tcltklib.so -%exclude %{ruby_libarchdir}/tkutil.so %{ruby_libarchdir}/zlib.so -%{tapset_root} +# Default gems +%{ruby_libdir}/did_you_mean* +%{ruby_libdir}/openssl* +%{ruby_libarchdir}/openssl.so -# TODO rubygems 2.0.0 does not create test-unit gemspec -# TODO for now put this in ruby-libs rpm -# TODO check if the following can be removed after -# TODO test-unit rebuild -%dir %{gem_dir} -%dir %{gem_dir}/specifications -%dir %{gem_dir}/specifications/default -%{gem_dir}/specifications/default/test-unit-*.gemspec +%{?with_systemtap:%{_systemtap_datadir}} %files -n rubygems %{_bindir}/gem -%{rubygems_dir} -%{gem_dir} -%exclude %{gem_dir}/gems/* -%{_exec_prefix}/lib*/gems -%exclude %{_exec_prefix}/lib*/gems/%{name}/bigdecimal-%{bigdecimal_version} -%exclude %{_exec_prefix}/lib*/gems/%{name}/io-console-%{io_console_version} -%exclude %{_exec_prefix}/lib*/gems/%{name}/json-%{json_version} -%exclude %{_exec_prefix}/lib*/gems/%{name}/psych-%{psych_version} -%exclude %{gem_dir}/gems/rake-%{rake_version} -%exclude %{gem_dir}/gems/rdoc-%{rdoc_version} -%exclude %{gem_dir}/specifications/bigdecimal-%{bigdecimal_version}.gemspec -%exclude %{gem_dir}/specifications/io-console-%{io_console_version}.gemspec -%exclude %{gem_dir}/specifications/json-%{json_version}.gemspec -%exclude %{gem_dir}/specifications/minitest-%{minitest_version}.gemspec -%exclude %{gem_dir}/specifications/rake-%{rake_version}.gemspec -%exclude %{gem_dir}/specifications/rdoc-%{rdoc_version}.gemspec -%exclude %{gem_dir}/specifications/psych-%{psych_version}.gemspec -# TODO rubygems 2.0.0 does not create test-unit gemspec -# TODO where to put test-unit-*.gemspec?? -%exclude %{gem_dir}/specifications/default/test-unit-*.gemspec +%dir %{rubygems_dir} +%{rubygems_dir}/rubygems +%{rubygems_dir}/rubygems.rb + +# Explicitly include only RubyGems directory strucure to avoid accidentally +# packaged content. +%dir %{gem_dir} +%dir %{gem_dir}/build_info +%dir %{gem_dir}/cache +%dir %{gem_dir}/doc +%dir %{gem_dir}/extensions +%dir %{gem_dir}/gems +%dir %{gem_dir}/plugins +%dir %{gem_dir}/specifications +%dir %{gem_dir}/specifications/default +%dir %{_exec_prefix}/lib*/gems +%dir %{_exec_prefix}/lib*/gems/ruby + +%exclude %{gem_dir}/cache/* %files -n rubygems-devel -%{_sysconfdir}/rpm/macros.rubygems +%{_rpmmacrodir}/macros.rubygems +%{_fileattrsdir}/rubygems.attr +%{_rpmconfigdir}/rubygems.req +%{_rpmconfigdir}/rubygems.prov +%{_rpmconfigdir}/rubygems.con -%files -n rubygem-rake -%{_bindir}/rake -%{gem_dir}/gems/rake-%{rake_version} -%{gem_dir}/specifications/rake-%{rake_version}.gemspec -%{_mandir}/man1/rake.1* +%files default-gems +%gem_spec -d date +%gem_spec -d delegate +%gem_spec -d did_you_mean +%gem_spec -d digest +%gem_spec -d english +%gem_spec -d erb +%gem_instdir erb +%{_bindir}/erb +%{_mandir}/man1/erb* +%gem_spec -d error_highlight +%gem_spec -d etc +%gem_spec -d fcntl +%gem_spec -d fileutils +%gem_spec -d find +%gem_spec -d forwardable +%gem_spec -d io-nonblock +%gem_spec -d io-wait +%gem_spec -d ipaddr +%gem_spec -d net-http +%gem_spec -d net-protocol +%gem_spec -d open3 +%gem_spec -d open-uri +%gem_spec -d optparse +%gem_spec -d openssl +%gem_spec -d pp +%gem_spec -d prettyprint +%gem_spec -d resolv +%gem_spec -d ruby2_keywords +%gem_spec -d securerandom +%gem_spec -d shellwords +%gem_spec -d singleton +%gem_spec -d stringio +%gem_spec -d strscan +%gem_spec -d syntax_suggest +%{_bindir}/syntax_suggest +%gem_instdir syntax_suggest +%gem_spec -d tempfile +%gem_spec -d time +%gem_spec -d timeout +%gem_spec -d tmpdir +%gem_spec -d tsort +%gem_spec -d un +%gem_spec -d uri +%gem_spec -d weakref +#%%gem_spec -d win32ole +#%%gem_spec -d win32-registry +%gem_spec -d yaml +%gem_spec -d prism +%gem_spec -d zlib -%files irb +%files -n rubygem-irb %{_bindir}/irb -%{ruby_libdir}/irb.rb -%{ruby_libdir}/irb +%dir %{gem_instdir irb} +%{gem_libdir irb} +%{gem_spec irb} +%{gem_instdir irb}/exe + +%{gem_instdir irb}/Gemfile +%license %{gem_instdir irb}/LICENSE.txt +%doc %{gem_instdir irb}/doc +%doc %{gem_instdir irb}/README.md +%doc %{gem_instdir irb}/CONTRIBUTING.md +%doc %{gem_instdir irb}/EXTEND_IRB.md %{_mandir}/man1/irb.1* %files -n rubygem-rdoc %{_bindir}/rdoc %{_bindir}/ri -%{gem_dir}/gems/rdoc-%{rdoc_version} -%{gem_dir}/specifications/rdoc-%{rdoc_version}.gemspec +%{gem_instdir rdoc} +%{gem_spec rdoc} +%{gem_plugin rdoc} %{_mandir}/man1/ri* -%files doc -%doc README -%lang(ja) %doc README.ja +%files doc -f .ruby-doc.en -f .ruby-doc.ja +%doc README.md %doc ChangeLog -%doc doc/ChangeLog-* -%doc ruby-exercise.stp +%{?with_systemtap:%doc ruby-exercise.stp} %{_datadir}/ri %files -n rubygem-bigdecimal -%{ruby_libdir}/bigdecimal -%{ruby_libarchdir}/bigdecimal.so -%{_libdir}/gems/%{name}/bigdecimal-%{bigdecimal_version} -%{gem_dir}/gems/bigdecimal-%{bigdecimal_version} -%{gem_dir}/specifications/bigdecimal-%{bigdecimal_version}.gemspec +%{gem_extdir_mri bigdecimal} +%{gem_instdir bigdecimal} +%{gem_spec bigdecimal} %files -n rubygem-io-console %{ruby_libdir}/io %{ruby_libarchdir}/io/console.so -%{_libdir}/gems/%{name}/io-console-%{io_console_version} -%{gem_dir}/gems/io-console-%{io_console_version} -%{gem_dir}/specifications/io-console-%{io_console_version}.gemspec +%{gem_extdir_mri io-console} +%{gem_instdir io-console} +%{gem_spec io-console} %files -n rubygem-json -%{_libdir}/gems/%{name}/json-%{json_version} -%{gem_dir}/gems/json-%{json_version} -%{gem_dir}/specifications/json-%{json_version}.gemspec - -%files -n rubygem-minitest -%{gem_dir}/gems/minitest-%{minitest_version} -%{gem_dir}/specifications/minitest-%{minitest_version}.gemspec +%{ruby_libdir}/json* +%{ruby_libarchdir}/json* +%{gem_extdir_mri json} +%{gem_instdir json} +%{gem_spec json} %files -n rubygem-psych -%{ruby_vendorlibdir}/psych -%{ruby_vendorlibdir}/psych.rb -%{ruby_vendorarchdir}/psych.so -%{_libdir}/gems/%{name}/psych-%{psych_version} -%{gem_dir}/gems/psych-%{psych_version} -%{gem_dir}/specifications/psych-%{psych_version}.gemspec +%{ruby_libdir}/psych +%{ruby_libdir}/psych.rb +%{ruby_libarchdir}/psych.so +%{gem_extdir_mri psych} +%dir %{gem_instdir psych} +%{gem_libdir psych} +%{gem_spec psych} + +%files -n rubygem-bundler +%{_bindir}/bundle +%{_bindir}/bundler +%{gem_instdir bundler} +%{gem_spec bundler} +%{_mandir}/man1/bundle*.1* +%{_mandir}/man5/gemfile.5* + +%files bundled-gems +# abbrev +%dir %{gem_instdir abbrev} +%license %{gem_instdir abbrev}/LICENSE.txt +%{gem_instdir abbrev}/bin +%{gem_libdir abbrev} +%{gem_spec abbrev} +%{gem_instdir abbrev}/Gemfile +%doc %{gem_instdir abbrev}/README.md +%{gem_instdir abbrev}/Rakefile + +# base64 +%dir %{gem_instdir base64} +%license %{gem_instdir base64}/BSDL +%license %{gem_instdir base64}/COPYING +%license %{gem_instdir base64}/LEGAL +%{gem_instdir base64}/sig +%{gem_libdir base64} +%{gem_spec base64} +%doc %{gem_instdir base64}/README.md + +# benchmark +%dir %{gem_instdir benchmark} +%license %{gem_instdir benchmark}/BSDL +%license %{gem_instdir benchmark}/COPYING +%doc %{gem_instdir benchmark}/README.md +%{gem_instdir benchmark}/Gemfile +%{gem_instdir benchmark}/Rakefile +%{gem_instdir benchmark}/bin +%{gem_libdir benchmark} +%{gem_spec benchmark} + +# csv +%dir %{gem_instdir csv} +%license %{gem_instdir csv}/LICENSE.txt +%doc %{gem_instdir csv}/NEWS.md +%{gem_libdir csv} +%{gem_spec csv} +%doc %{gem_instdir csv}/README.md +%doc %{gem_instdir csv}/doc + +# drb +%dir %{gem_instdir drb} +%license %{gem_instdir drb}/LICENSE.txt +%{gem_libdir drb} +%{gem_instdir drb}/drb.gemspec +%{gem_spec drb} + +# getoptlong +%dir %{gem_instdir getoptlong} +%license %{gem_instdir getoptlong}/LICENSE.txt +%{gem_instdir getoptlong}/bin +%{gem_libdir getoptlong} +%{gem_instdir getoptlong}/sample +%{gem_spec getoptlong} +%{gem_instdir getoptlong}/Gemfile +%doc %{gem_instdir getoptlong}/README.md +%{gem_instdir getoptlong}/Rakefile + +# fiddle +%dir %{gem_instdir fiddle} +%license %{gem_instdir fiddle}/LICENSE.txt +%doc %{gem_instdir fiddle}/README.md +%{gem_instdir fiddle}/Rakefile +%{gem_libdir fiddle} +%dir %{gem_extdir_mri fiddle} +%{gem_extdir_mri fiddle}/fiddle.so +%{gem_extdir_mri fiddle}/gem.build_complete +%{gem_instdir fiddle}/fiddle.gemspec +%{gem_spec fiddle} + +# logger +%dir %{gem_instdir logger} +%license %{gem_instdir logger}/BSDL +%license %{gem_instdir logger}/COPYING +%doc %{gem_instdir logger}/README.md +%{gem_libdir logger} +%{gem_spec logger} + +# matrix +%dir %{gem_instdir matrix} +%license %{gem_instdir matrix}/BSDL +%license %{gem_instdir matrix}/COPYING +%{gem_libdir matrix} +%{gem_instdir matrix}/matrix.gemspec +%{gem_spec matrix} + +# mutex_m +%dir %{gem_instdir mutex_m} +%license %{gem_instdir mutex_m}/BSDL +%license %{gem_instdir mutex_m}/COPYING +%{gem_libdir mutex_m} +%{gem_instdir mutex_m}/sig +%{gem_spec mutex_m} +%doc %{gem_instdir mutex_m}/README.md + +# net-ftp +%dir %{gem_instdir net-ftp} +%license %{gem_instdir net-ftp}/BSDL +%license %{gem_instdir net-ftp}/COPYING +%{gem_instdir net-ftp}/Gemfile +%license %{gem_instdir net-ftp}/LICENSE.txt +%doc %{gem_instdir net-ftp}/README.md +%{gem_instdir net-ftp}/Rakefile +%{gem_libdir net-ftp} +%{gem_spec net-ftp} + +# net-imap +%dir %{gem_instdir net-imap} +%license %{gem_instdir net-imap}/BSDL +%license %{gem_instdir net-imap}/COPYING +%{gem_instdir net-imap}/Gemfile +%license %{gem_instdir net-imap}/LICENSE.txt +%doc %{gem_instdir net-imap}/README.md +%{gem_instdir net-imap}/Rakefile +%{gem_instdir net-imap}/docs +%{gem_libdir net-imap} +%{gem_instdir net-imap}/rakelib +%{gem_instdir net-imap}/sample +%{gem_spec net-imap} + +# net-pop +%dir %{gem_instdir net-pop} +%{gem_instdir net-pop}/Gemfile +%license %{gem_instdir net-pop}/LICENSE.txt +%doc %{gem_instdir net-pop}/README.md +%{gem_instdir net-pop}/Rakefile +%{gem_libdir net-pop} +%{gem_spec net-pop} + +# net-smtp +%dir %{gem_instdir net-smtp} +%doc %{gem_instdir net-smtp}/NEWS.md +%doc %{gem_instdir net-smtp}/README.md +%license %{gem_instdir net-smtp}/LICENSE.txt +%{gem_libdir net-smtp} +%{gem_spec net-smtp} + +# nkf +%dir %{gem_instdir nkf} +%{gem_extdir_mri nkf} +%license %{gem_instdir nkf}/LICENSE.txt +%{gem_instdir nkf}/bin +%{gem_libdir nkf} +%{gem_spec nkf} +%{gem_instdir nkf}/Gemfile +%doc %{gem_instdir nkf}/README.md +%{gem_instdir nkf}/Rakefile + +# observer +%dir %{gem_instdir observer} +%license %{gem_instdir observer}/LICENSE.txt +%{gem_instdir observer}/bin +%{gem_libdir observer} +%exclude %{gem_cache observer} +%{gem_spec observer} +%{gem_instdir observer}/Gemfile +%doc %{gem_instdir observer}/README.md +%{gem_instdir observer}/Rakefile + +# ostruct +%dir %{gem_instdir ostruct} +%license %{gem_instdir ostruct}/BSDL +%license %{gem_instdir ostruct}/COPYING +%doc %{gem_instdir ostruct}/README.md +%{gem_instdir ostruct}/Gemfile +%{gem_instdir ostruct}/Rakefile +%{gem_instdir ostruct}/bin +%{gem_libdir ostruct} +%{gem_instdir ostruct}/ostruct.gemspec +%{gem_spec ostruct} + +# prime +%dir %{gem_instdir prime} +%license %{gem_instdir prime}/BSDL +%license %{gem_instdir prime}/COPYING +%doc %{gem_instdir prime}/README.md +%{gem_instdir prime}/Rakefile +%{gem_libdir prime} +%{gem_instdir prime}/sig +%{gem_instdir prime}/prime.gemspec +%{gem_spec prime} + +# pstore +%dir %{gem_instdir pstore} +%license %{gem_instdir pstore}/BSDL +%license %{gem_instdir pstore}/COPYING +%doc %{gem_instdir pstore}/README.md +%{gem_instdir pstore}/Gemfile +%{gem_instdir pstore}/Rakefile +%{gem_instdir pstore}/bin +%{gem_libdir pstore} +%{gem_spec pstore} + +# rdbg +%{_bindir}/rdbg +%dir %{gem_extdir_mri debug} +%{gem_extdir_mri debug}/gem.build_complete +%dir %{gem_extdir_mri debug}/debug +%{gem_extdir_mri debug}/debug/debug.so +%dir %{gem_instdir debug} +%exclude %{gem_instdir debug}/.* +%doc %{gem_instdir debug}/CONTRIBUTING.md +%{gem_instdir debug}/Gemfile +%license %{gem_instdir debug}/LICENSE.txt +%doc %{gem_instdir debug}/README.md +%{gem_instdir debug}/Rakefile +%doc %{gem_instdir debug}/TODO.md +%{gem_instdir debug}/exe +%{gem_libdir debug} +%{gem_instdir debug}/misc +%{gem_spec debug} + +# readline +%dir %{gem_instdir readline} +%license %{gem_instdir readline}/BSDL +%license %{gem_instdir readline}/COPYING +%doc %{gem_instdir readline}/README.md +%{gem_libdir readline} +%{gem_spec readline} + +# reline +%dir %{gem_instdir reline} +%license %{gem_instdir reline}/BSDL +%license %{gem_instdir reline}/COPYING +%license %{gem_instdir reline}/license_of_rb-readline +%doc %{gem_instdir reline}/README.md +%{gem_libdir reline} +%{gem_spec reline} + +# repl_type_completor +%dir %{gem_instdir repl_type_completor} +%license %{gem_instdir repl_type_completor}/LICENSE.txt +%{gem_libdir repl_type_completor} +%{gem_instdir repl_type_completor}/sig +%exclude %{gem_cache repl_type_completor} +%{gem_spec repl_type_completor} +%{gem_instdir repl_type_completor}/Gemfile +%doc %{gem_instdir repl_type_completor}/README.md +%{gem_instdir repl_type_completor}/Rakefile + +# rinda +%dir %{gem_instdir rinda} +%license %{gem_instdir rinda}/LICENSE.txt +%{gem_instdir rinda}/bin +%{gem_libdir rinda} +%{gem_spec rinda} +%{gem_instdir rinda}/Gemfile +%doc %{gem_instdir rinda}/README.md +%{gem_instdir rinda}/Rakefile + +# resolv-replace +%dir %{gem_instdir resolv-replace} +%license %{gem_instdir resolv-replace}/LICENSE.txt +%{gem_instdir resolv-replace}/bin +%{gem_libdir resolv-replace} +%{gem_spec resolv-replace} +%{gem_instdir resolv-replace}/Gemfile +%doc %{gem_instdir resolv-replace}/README.md +%{gem_instdir resolv-replace}/Rakefile + +# syslog +%dir %{gem_instdir syslog} +%{gem_extdir_mri syslog} +%license %{gem_instdir syslog}/BSDL +%license %{gem_instdir syslog}/COPYING +%{gem_instdir syslog}/bin +%{gem_libdir syslog} +%exclude %{gem_cache syslog} +%{gem_spec syslog} +%{gem_instdir syslog}/Gemfile +%doc %{gem_instdir syslog}/README.md +%{gem_instdir syslog}/Rakefile + +%files -n rubygem-minitest +%{_bindir}/minitest +%dir %{gem_instdir minitest} +%exclude %{gem_instdir minitest}/.* +%{gem_instdir minitest}/Manifest.txt +%{gem_instdir minitest}/design_rationale.rb +%{gem_instdir minitest}/bin +%{gem_libdir minitest} +%{gem_spec minitest} +%doc %{gem_instdir minitest}/History.rdoc +%doc %{gem_instdir minitest}/README.rdoc +%{gem_instdir minitest}/Rakefile +%{gem_instdir minitest}/test + +%files -n rubygem-power_assert +%dir %{gem_instdir power_assert} +%exclude %{gem_instdir power_assert}/.* +%license %{gem_instdir power_assert}/BSDL +%license %{gem_instdir power_assert}/COPYING +%license %{gem_instdir power_assert}/LEGAL +%{gem_libdir power_assert} +%{gem_spec power_assert} +%{gem_instdir power_assert}/Gemfile +%doc %{gem_instdir power_assert}/README.md +%{gem_instdir power_assert}/Rakefile + +%files -n rubygem-rake +%{_bindir}/rake +%{gem_instdir rake} +%{gem_spec rake} +%{_mandir}/man1/rake.1* + +%files -n rubygem-rbs +%{_bindir}/rbs +%dir %{gem_extdir_mri rbs} +%{gem_extdir_mri rbs}/gem.build_complete +%{gem_extdir_mri rbs}/rbs_extension.so +%dir %{gem_instdir rbs} +%license %{gem_instdir rbs}/BSDL +%doc %{gem_instdir rbs}/CHANGELOG.md +%license %{gem_instdir rbs}/COPYING +%doc %{gem_instdir rbs}/README.md +%{gem_instdir rbs}/Rakefile +%{gem_instdir rbs}/Steepfile +%{gem_instdir rbs}/config.yml +%{gem_instdir rbs}/core +%doc %{gem_instdir rbs}/docs +%{gem_instdir rbs}/exe +%{gem_instdir rbs}/goodcheck.yml +%{gem_instdir rbs}/include +%{gem_libdir rbs} +%{gem_instdir rbs}/schema +%{gem_instdir rbs}/sig +%{gem_instdir rbs}/src +%{gem_instdir rbs}/stdlib +%{gem_spec rbs} + +%files -n rubygem-test-unit +%{_bindir}/test-unit +%dir %{gem_instdir test-unit} +%license %{gem_instdir test-unit}/BSDL +%license %{gem_instdir test-unit}/COPYING +%license %{gem_instdir test-unit}/PSFL +%{gem_libdir test-unit} +%{gem_instdir test-unit}/sample +%{gem_instdir test-unit}/bin +%{gem_spec test-unit} +%doc %{gem_instdir test-unit}/README.md +%{gem_instdir test-unit}/Rakefile +%doc %{gem_instdir test-unit}/doc + +%files -n rubygem-racc +%dir %{gem_instdir racc} +%{_bindir}/racc +%{gem_extdir_mri racc} +%license %{gem_instdir racc}/BSDL +%license %{gem_instdir racc}/COPYING +%doc %{gem_instdir racc}/ChangeLog +%lang(ja) %doc %{gem_instdir racc}/README.ja.rdoc +%doc %{gem_instdir racc}/README.rdoc +%doc %{gem_instdir racc}/TODO +%{gem_instdir racc}/bin +%doc %{gem_instdir racc}/doc +%{gem_libdir racc} +%{gem_spec racc} + +%files -n rubygem-rexml +%dir %{gem_instdir rexml} +%license %{gem_instdir rexml}/LICENSE.txt +%doc %{gem_instdir rexml}/NEWS.md +%doc %{gem_instdir rexml}/doc +%{gem_libdir rexml} +%{gem_spec rexml} +%doc %{gem_instdir rexml}/README.md + +%files -n rubygem-rss +%dir %{gem_instdir rss} +%exclude %{gem_instdir rss}/.* +%license %{gem_instdir rss}/LICENSE.txt +%doc %{gem_instdir rss}/NEWS.md +%{gem_libdir rss} +%{gem_spec rss} +%doc %{gem_instdir rss}/README.md + +%files -n rubygem-typeprof +%dir %{gem_instdir typeprof} +%{_bindir}/typeprof +%exclude %{gem_instdir typeprof}/.* +%license %{gem_instdir typeprof}/LICENSE +%{gem_instdir typeprof}/bin +%{gem_instdir typeprof}/typeprof.conf.jsonc +%doc %{gem_instdir typeprof}/doc +%{gem_libdir typeprof} +%{gem_spec typeprof} +%doc %{gem_instdir typeprof}/README.md -%files tcltk -%{ruby_libdir}/*-tk.rb -%{ruby_libdir}/tcltk.rb -%{ruby_libdir}/tk*.rb -%{ruby_libarchdir}/tcltklib.so -%{ruby_libarchdir}/tkutil.so -%{ruby_libdir}/tk -%{ruby_libdir}/tkextlib %changelog -* Tue May 06 2014 Vít Ondruch - 2.0.0.353-18 +* Tue Jan 13 2026 Vít Ondruch - 4.0.1-31 +- Upgrade to Ruby 4.0.1. + Resolves: rhbz#2428861 + +* Fri Jan 02 2026 Jarek Prokop - 4.0.0-30 +- Upgrade to Ruby 4.0.0. + Resolves: rhbz#2425358 + +* Wed Dec 17 2025 Vít Ondruch - 3.4.8-29 +- Update to Ruby 3.4.8. + Resolves: rhbz#2422963 + Resolves: rhbz#2412227 + +* Tue Oct 21 2025 Jun Aruga - 3.4.7-28 +- Upgrade to Ruby 3.4.7. + Resolves: rhbz#2402422 +- Fix URI Credential Leakage Bypass previous fixes. + Resolves: CVE-2025-61594 +- Fix REXML denial of service. + Resolves: CVE-2025-58767 + +* Mon Aug 18 2025 Jarek Prokop - 3.4.5-27 +- Upgrade to Ruby 3.4.5. + Resolves: rhbz#2380246 + +* Fri Jul 25 2025 Fedora Release Engineering +- Rebuilt for https://fedoraproject.org/wiki/Fedora_43_Mass_Rebuild + +* Wed Jun 11 2025 Jarek Prokop - 3.4.4-25 +- Upgrade to Ruby 3.4.4. + Resolves: rhbz#2359563 + +* Tue Apr 08 2025 Jun Aruga - 3.4.2-24 +- Fix the tests using SHA-1 Probabilistic Signature Scheme (PSS) parameters. + Resolves: rhbz#2358256 + +* Wed Feb 19 2025 Vít Ondruch - 3.4.2-23 +- Upgrade to Ruby 3.4.2. + Resolves: rhbz#2345875 + +* Sat Feb 01 2025 Björn Esser - 3.4.1-23 +- Add explicit BR: libxcrypt-devel + +* Fri Jan 24 2025 Jarek Prokop - 3.4.1-22 +- Stop including C++ header, it is deprecated since C++17. + Resolves: rhbz#2336567 + +* Sat Jan 18 2025 Fedora Release Engineering +- Rebuilt for https://fedoraproject.org/wiki/Fedora_42_Mass_Rebuild + +* Wed Jan 08 2025 Vít Ondruch - 3.4.1-20 +- Re-enable FIPS test cases. + +* Thu Jan 02 2025 Vít Ondruch - 3.4.1-19 +- Upgrade to Ruby 3.4.1. + Resolves: rhbz#2334047 + +* Mon Dec 16 2024 Jun Aruga - 3.3.6-18 +- Fix Ruby OpenSSL to respect crypto-policies TLS minimal version. + +* Wed Nov 20 2024 David Abdurachmanov - 3.3.6-17 +- Add riscv64 information for checksec + +* Mon Nov 11 2024 Vít Ondruch - 3.3.6-16 +- Upgrade to Ruby 3.3.6. + +* Fri Sep 13 2024 Vít Ondruch - 3.3.5-15 +- Fix Bundler `--local` option + Resolves: rhbz#2311898 + +* Tue Sep 03 2024 Vít Ondruch - 3.3.5-14 +- Upgrade to Ruby 3.3.5. + Resolves: rhbz#2309364 + +* Mon Jul 29 2024 Jun Aruga - 3.3.4-13 +- Add systemtap-sdt-devel to build Ruby with systemtap sdt header files. + Co-authored-by: Lumír Balhar + +* Fri Jul 19 2024 Fedora Release Engineering +- Rebuilt for https://fedoraproject.org/wiki/Fedora_41_Mass_Rebuild + +* Wed Jul 10 2024 Vít Ondruch - 3.3.4-11 +- Upgrade to Ruby 3.3.4. + Resolves: rhbz#2292052 + +* Tue Jun 18 2024 Vít Ondruch - 3.3.2-10 +- Make sure hardening configuration flags are correctly applied. + +* Thu Jun 06 2024 Vít Ondruch - 3.3.2-9 +- Upgrade to Ruby 3.3.2. + Resolves: rhbz#2284020 + +* Tue May 28 2024 Vít Ondruch - 3.3.1-8 +- Adjust the test to updated `checksec` output. + Resolves: rhbz#2282953 +- Make sure fortification flags are applied. + +* Tue Apr 23 2024 Vít Ondruch - 3.3.1-7 +- Upgrade to Ruby 3.3.1. + Resolves: rhbz#2276680 + +* Fri Apr 12 2024 Vít Ondruch - 3.3.0-6 +- Add `bundled` provide for NKF. +- License review and fixes of SPDX syntax. + +* Wed Mar 06 2024 Vít Ondruch - 3.3.0-5 +- Fix FTBFS caused by OpenSSL 3.2.1 update. + +* Fri Jan 26 2024 Jarek Prokop - 3.3.0-4 +- Do not set AI_ADDRCONFIG by default when calling getaddrinfo(3). + +* Mon Jan 22 2024 Fedora Release Engineering +- Rebuilt for https://fedoraproject.org/wiki/Fedora_40_Mass_Rebuild + +* Mon Jan 15 2024 Jarek Prokop - 3.3.0-2 +- Fix compiling coroutines with aarch64's branch protection. + +* Tue Jan 02 2024 Vít Ondruch - 3.3.0-1 +- Upgrade to Ruby 3.3.0. + Resolves: rhbz#2255918 + +* Thu Nov 09 2023 Jun Aruga - 3.2.2-183 +- ssl: use ffdhe2048 from RFC 7919 as the default DH group parameters + +* Thu Nov 02 2023 Jarek Prokop - 3.2.2-183 +- Fix typo in bundled provide of rubygem-bundler for rubygem-net-http-persistent. + +* Wed Sep 20 2023 Jun Aruga - 3.2.2-182 +- Fix OpenSSL.fips_mode and OpenSSL::PKey.read in OpenSSL 3 FIPS. + +* Fri Jul 21 2023 Fedora Release Engineering +- Rebuilt for https://fedoraproject.org/wiki/Fedora_39_Mass_Rebuild + +* Fri Mar 31 2023 Vít Ondruch - 3.2.2-180 +- Upgrade to Ruby 3.2.2. + Resolves: rhbz#2183284 + +* Thu Feb 09 2023 Vít Ondruch - 3.2.1-179 +- Upgrade to Ruby 3.2.1. + Resolves: rhbz#2168292 + +* Fri Jan 20 2023 Fedora Release Engineering +- Rebuilt for https://fedoraproject.org/wiki/Fedora_38_Mass_Rebuild + +* Thu Jan 05 2023 Vít Ondruch - 3.2.0-177 +- Fix ELN FTBFS due to stronger crypto settings. + +* Mon Jan 02 2023 Vít Ondruch - 3.2.0-176 +- Upgrade to Ruby 3.2.0. + +* Thu Dec 22 2022 Yaakov Selkowitz - 3.1.3-175 +- Use SHA256 instead of SHA1 where needed in Openssl tests +- Let OpenSSL choose the digest if digest for Openssl::OCSP::BasicResponse#sign is nil + +* Wed Dec 21 2022 Vít Ondruch - 3.1.3-174 +- Fix for tzdata-2022g. + +* Thu Dec 08 2022 Vít Ondruch - 3.1.3-173 +- Disable MJIT test cases on i686 due to issues with PCH. +- Fix CGI causing issue with leading '.' in domain names. + +* Thu Nov 24 2022 Vít Ondruch - 3.1.3-172 +- Upgrade to Ruby 3.1.3. + +* Tue Nov 22 2022 Vít Ondruch - 3.1.2-171 +- Re-disable package notes. It causes additional issues with installing binary + gems. + +* Thu Sep 29 2022 Vít Ondruch - 3.1.2-170 +- Re-enable package notes. + +* Fri Sep 02 2022 Jarek Prokop - 3.1.2-169 +- Disable fiddle tests that use FFI closures. + Related: rhbz#2040380 + +* Mon Aug 29 2022 Jun Aruga - 3.1.2-168 +- Make RDoc soft dependnecy in IRB. + Resolves: rhbz#2119964 +- Add IRB to ruby-bundled-gems recommends. + Resolves: rhbz#2120562 + +* Wed Aug 24 2022 Jun Aruga - 3.1.2-168 +- Fix tests with Europe/Amsterdam pre-1970 time on tzdata version 2022b. + Resolves: rhbz#2120354 + +* Mon Jul 25 2022 Jarek Prokop - 3.1.2-167 +- Fix directory permissions in one of the rubygems tests. + +* Sat Jul 23 2022 Fedora Release Engineering +- Rebuilt for https://fedoraproject.org/wiki/Fedora_37_Mass_Rebuild + +* Thu Jun 16 2022 Jarek Prokop - 3.1.2-166 +- Detect compaction support during run time. + +* Tue Jun 07 2022 Jarek Prokop - 3.1.2-165 +- Define GC compaction methods as rb_f_notimplement on unsupported platforms. + +* Thu Apr 14 2022 Vít Ondruch - 3.1.2-164 +- Upgrade to Ruby 3.1.2. +- Use upstream patch for correct build of gem extensions. + +* Mon Apr 04 2022 Vít Ondruch - 3.1.1-163 +- Properly build binary gem extensions. + +* Mon Mar 14 2022 Vít Ondruch - 3.1.1-162 +- Upgrade to Ruby 3.1.1. + +* Thu Feb 10 2022 Vít Ondruch - 3.1.0-161 +- Prevent segfaults running with SystemTap. + +* Wed Jan 26 2022 Vít Ondruch - 3.1.0-160 +- Upgrade to Ruby 3.1.0. + +* Tue Jan 25 2022 Vít Ondruch - 3.0.3-159 +- Update OpenSSL 3 compatibility patches. + +* Thu Jan 20 2022 Vít Ondruch - 3.0.3-158 +- Disable package notes to prevent rubygem- build breakage. + +* Thu Jan 20 2022 Vít Ondruch - 3.0.3-157 +- Fix segfault in `TestArray#test_sample` on s390x. + +* Tue Jan 11 2022 Jun Aruga - 3.0.3-157 +- Remove the patch applied to pass the test/fiddle/test_import.rb on PPC. + +* Mon Jan 10 2022 Miro Hrončok - 3.0.3-156 +- Rebuilt for https://fedoraproject.org/wiki/Changes/LIBFFI34 + +* Thu Dec 09 2021 Vít Ondruch - 3.0.3-155 +- Fix loading of default gems. + Resolves: rhbz#2027099 + +* Thu Nov 25 2021 Vít Ondruch - 3.0.3-154 +- Upgrade to Ruby 3.0.3. + +* Fri Nov 05 2021 Vít Ondruch - 3.0.2-153 +- Fix OpenSSL 3.0 compatibility. + Resolves: rhbz#2021922 + +* Tue Sep 14 2021 Sahana Prasad +- Rebuilt with OpenSSL 3.0.0 + +* Tue Aug 24 2021 Vít Ondruch - 3.0.2-152 +- Enable LTO. +- Load user installed RubyGems plugins. + +* Fri Jul 23 2021 Fedora Release Engineering +- Rebuilt for https://fedoraproject.org/wiki/Fedora_35_Mass_Rebuild + +* Tue Jul 13 2021 Jarek Prokop - 3.0.2-150 +- Upgrade to Ruby 3.0.2. +- Fix command injection vulnerability in RDoc. + Resolves: CVE-2021-31799 +- Fix FTP PASV command response can cause Net::FTP to connect to arbitrary host. + Resolves: CVE-2021-31810 +- Fix StartTLS stripping vulnerability in Net::IMAP. + Resolves: CVE-2021-32066 +- Fix dependencies of gems with explicit source installed from a different + source. + Resolves: CVE-2020-36327 + +* Mon May 17 2021 Timm Bäder - 3.0.1-149 +- Pass ldflags to gem install via CONFIGURE_ARGS + +* Tue Apr 06 2021 Vít Ondruch - 3.0.1-148 +- Upgrade to Ruby 3.0.1. + +* Thu Apr 01 2021 Vít Ondruch - 3.0.0-147 +- Remove IRB dependency from rubygem-rdoc. + +* Tue Mar 02 2021 Vít Ondruch - 3.0.0-146 +- Fix flaky excon test suite. +- Properly support DWARF5 debug information. + Resolves: rhbz#1920533 + +* Mon Jan 25 2021 Vít Ondruch - 3.0.0-145 +- Bundle OpenSSL into StdLib. +- Use proper path for plugin wrappers. + +* Sat Jan 16 2021 Vít Ondruch - 3.0.0-144 +- Fix SEGFAULT in rubygem-shoulda-matchers test suite. + +* Tue Jan 12 2021 Vít Ondruch - 3.0.0-143 +- Provide `gem.build_complete` file for binary gems. + +* Mon Jan 11 2021 Vít Ondruch - 3.0.0-142 +- Re-enable test suite. + +* Fri Jan 8 2021 Vít Ondruch - 3.0.0-141 +- ruby-default-gems have to depend on rubygem(io-console) due to reline. + +* Fri Jan 8 2021 Vít Ondruch - 3.0.0-140 +- Fix SEGFAULT preventing rubygem-unicode to build on armv7hl. + +* Wed Jan 6 2021 Vít Ondruch - 3.0.0-139 +- Add support for reworked RubyGems plugins. + +* Mon Jan 04 2021 Vít Ondruch - 3.0.0-138 +- Upgrade to Ruby 3.0.0. +- Extract RSS and REXML into separate subpackages, because they were moved from + default gems to bundled gems. +- Obsolete Net::Telnet and XMLRPC packages, because they were dropped from Ruby. + +* Tue Dec 15 16:26:46 CET 2020 Pavel Valena - 2.7.2-137 +- Add Recommends: redhat-rpm-config to devel subpackage. + Resolves: rhbz#1905222 + +* Tue Nov 24 18:16:02 CET 2020 Vít Ondruch - 2.7.2-136 +- Add explicit `BR: make`. + +* Tue Oct 13 2020 Vít Ondruch - 2.7.2-135 +- Upgrade to Ruby 2.7.2. + +* Wed Jul 29 2020 Fedora Release Engineering - 2.7.1-134 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_33_Mass_Rebuild + +* Mon Jul 27 2020 Vít Ondruch - 2.7.1-133 +- Disable LTO, which appear to cause issues with SIGSEV handler. +- Avoid possible timeout errors in TestBugReporter#test_bug_reporter_add. + +* Tue Jul 14 2020 Tom Stellard - 2.7.1-133 +- Use make macros +- https://fedoraproject.org/wiki/Changes/UseMakeBuildInstallMacro + +* Wed Jun 24 2020 Jun Aruga - 2.7.1-132 +- Add ruby-default-gems dependency on irb. + Resolves: rhbz#1850541 + +* Wed Jun 24 2020 Vít Ondruch - 2.7.1-132 +- Fix `require` behavior allowing to load libraries multiple times. + Resolves: rhbz#1835836 + +* Fri May 15 2020 Vít Ondruch - 2.7.1-131 +- Relax rubygems-devel dependency on rubygems. + +* Wed Apr 08 2020 Vít Ondruch - 2.7.1-130 +- Bundle did_you_mean into StdLib. + Resolves: rhbz#1817178 +- Prevent issues with openssl loading when RubyGems are disabled. + +* Thu Apr 02 2020 Vít Ondruch - 2.7.1-129 +- Add ruby-default-gems subpackage shipping all extra default gem content. +- Bundle Racc into StdLib. + +* Wed Apr 01 2020 Vít Ondruch - 2.7.1-128 +- Upgrade to Ruby 2.7.1. +- Fix FTBFS due to glibc 2.31.9000 implementing lchmod(2). + +* Tue Jan 28 2020 Vít Ondruch - 2.7.0-127 +- Provide StdLib links for Racc and install it by default. + +* Thu Jan 16 2020 Vít Ondruch - 2.7.0-126 +- Make rubygem(did_you_mean) hard dependency. + +* Tue Jan 07 2020 Vít Ondruch - 2.7.0-125 +- Upgrade to Ruby 2.7.0. +- Drop useless %%{rubygems_default_filter}. + +* Tue Oct 08 2019 Slava Kardakov - 2.6.5-124 +- Update to Ruby 2.6.5. + +* Fri Aug 30 2019 Pavel Valena - 2.6.4-123 +- Update to Ruby 2.6.4. +- Fix checksec 2.0+ compatibility. + +* Fri Jul 26 2019 Fedora Release Engineering - 2.6.3-122 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_31_Mass_Rebuild + +* Tue Jun 25 2019 Vít Ondruch - 2.6.3-121 +- Properly support %%prerelease in %%gemspec_ macros. + +* Thu Apr 25 2019 Pavel Valena - 2.6.3-120 +- Update to Ruby 2.6.3. + +* Thu Mar 28 2019 Arjen Heidinga - 2.6.2-119 +- Add zlib-devel explicitly as BuildRequirement. + +* Thu Mar 21 2019 Vít Ondruch - 2.6.2-118 +- Link IRB files instead of directories, which RPM cannot handle + during updates (rhbz#1691039). + +* Tue Mar 19 2019 Vít Ondruch - 2.6.2-117 +- Link IRB back to StdLib. + +* Thu Mar 14 2019 Vít Ondruch - 2.6.2-116 +- Upgrade to Ruby 2.6.2. + +* Tue Mar 05 2019 Vít Ondruch - 2.6.1-115 +- Fix ".include =" support in openssl.cnf (rhbz#1668916). + +* Sun Feb 17 2019 Igor Gnatenko - 2.6.1-114 +- Rebuild for readline 8.0 + +* Thu Feb 07 2019 Vít Ondruch - 2.6.1-113 +- Don't ship .stp files when SystemTap support is disabled. + +* Thu Jan 31 2019 Vít Ondruch - 2.6.1-112 +- Upgrade to Ruby 2.6.1. + +* Thu Jan 24 2019 Vít Ondruch - 2.6.0-111 +- Properly generate versioned ruby(rubygems) dependencies. +- Loosen RDoc dependency. + +* Thu Jan 17 2019 Vít Ondruch - 2.6.0-110 +- Upgrade to Ruby 2.6.0. + +* Mon Jan 14 2019 Björn Esser - 2.5.3-104 +- Rebuilt for libcrypt.so.2 (#1666033) + +* Fri Jan 11 2019 Jun Aruga - 2.5.3-103 +- Refresh expired certificates to fix FTBFS. + +* Tue Nov 13 2018 Vít Ondruch - 2.5.3-102 +- Fix Tokyo TZ tests. + +* Fri Oct 19 2018 Jun Aruga - 2.5.3-101 +- Update to Ruby 2.5.3. + +* Mon Sep 03 2018 Vít Ondruch - 2.5.1-100 +- Properly harden package using -fstack-protector-strong. + +* Wed Aug 29 2018 Vít Ondruch - 2.5.1-99 +- Additional OpenSSL 1.1.1 fixes. +- Add --with-cxxflags configuration for %%gem_install macro. + +* Tue Aug 28 2018 Jun Aruga - 2.5.1-99 +- Fix generated rdoc template issues. + +* Mon Aug 13 2018 Vít Ondruch - 2.5.1-98 +- Properly execute entire test suite. + +* Mon Aug 13 2018 Vít Ondruch - 2.5.1-97 +- Fix TLS 1.3 issues. + +* Tue Jul 31 2018 Florian Weimer - 2.5.1-96 +- Rebuild with fixed binutils + +* Fri Jul 27 2018 Igor Gnatenko - 2.5.1-95 +- Rebuild for new binutils + +* Thu Jul 26 2018 Vít Ondruch - 2.5.1-94 +- Disable some test failing with OpenSSL 1.1.1. + +* Sat Jul 14 2018 Fedora Release Engineering - 2.5.1-94 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_29_Mass_Rebuild + +* Thu May 10 2018 Pavel Valena - 2.5.1-93 +- Add macros to edit files lists in .gemspec + (gemspec_add_file and gemspec_remove_file). + +* Wed May 02 2018 Vít Ondruch - 2.5.1-93 +- Make %%gemspec_{add,remove}_dep modify .gemspec provided by %%setup macro. + +* Tue Apr 10 2018 Vít Ondruch - 2.5.1-92 +- Conflict requirement needs to generate dependency. +- Stop using --with-setjmp-type=setjmp on aarch64 (rhbz#1545239). + +* Thu Mar 29 2018 Pavel Valena - 2.5.1-92 +- Update to Ruby 2.5.1. + +* Mon Mar 05 2018 Vít Ondruch - 2.5.0-91 +- Don't force libraries used to build Ruby to its dependencies. +- Re-enable GMP dependency. + +* Thu Mar 01 2018 Vít Ondruch - 2.5.0-90 +- Drop GMP dependency. + +* Sat Feb 24 2018 Florian Weimer - 2.5.0-89 +- Rebuild with new LDFLAGS from redhat-rpm-config +- Use --with-setjmp-type=setjmp on aarch64 to work around gcc issue (#1545239) + +* Wed Feb 21 2018 Pavel Valena - 2.5.0-89 +- Fix: Multiple vulnerabilities in RubyGems + https://bugzilla.redhat.com/show_bug.cgi?id=1547431 + https://www.ruby-lang.org/en/news/2018/02/17/multiple-vulnerabilities-in-rubygems/ + +* Tue Feb 13 2018 Vít Ondruch - 2.5.0-89 +- Drop obsolete ldconfig scriptlets. +- Add GMP dependency. +- Use 'with' operator in RPM dependency generator. +- Add conflicts RPM generator. +- Fix thread_safe test suite segfaults. +- Fix invalid licenses. + +* Fri Feb 09 2018 Fedora Release Engineering - 2.5.0-89 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_28_Mass_Rebuild + +* Sat Jan 20 2018 Björn Esser - 2.5.0-88 +- Rebuilt for switch to libxcrypt + +* Tue Jan 09 2018 Vít Ondruch - 2.5.0-87 +- Fix segfaults during generating of documentation. + +* Tue Jan 02 2018 Vít Ondruch - 2.5.0-86 +- Upgrade to Ruby 2.5.0. + +* Fri Oct 27 2017 Jun Aruga - 2.4.2-86 +- Add macro to remove rubypick dependency. +- Improve "with" conditional statement as inline. + +* Thu Oct 19 2017 Jun Aruga - 2.4.2-85 +- Add macros to remove systemtap, git and cmake dependencies. + +* Mon Sep 18 2017 Pavel Valena - 2.4.2-84 +- Update to Ruby 2.4.2. + +* Fri Sep 08 2017 Vít Ondruch - 2.4.1-84 +- Drop ruby-devel dependency on rubypick, which is pulled in transtitively. + +* Fri Aug 11 2017 Vít Ondruch - 2.4.1-83 +- Fix "IOError: stream closed" errors affecting Puma. +- Temporary disable checksec on PPC64LE (rhbz#1479302). + +* Thu Aug 03 2017 Fedora Release Engineering - 2.4.1-82 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_27_Binutils_Mass_Rebuild + +* Thu Jul 27 2017 Fedora Release Engineering - 2.4.1-81 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_27_Mass_Rebuild + +* Thu Jul 20 2017 Vít Ondruch - 2.4.1-80 +- OpenSSL 1.1.0f-3 disables some weak ciphers. Adjust the package to pass + the tests suite. + +* Mon Apr 03 2017 Vít Ondruch - 2.4.1-79 +- Update to Ruby 2.4.1. + +* Thu Feb 23 2017 Vít Ondruch - 2.4.0-78 +- Fix OpenSSL symlinks. + +* Sat Feb 11 2017 Fedora Release Engineering - 2.4.0-77 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_26_Mass_Rebuild + +* Fri Feb 03 2017 Vít Ondruch - 2.4.0-76 +- Fix GCC 7.x compatibility (rhbz#1417590). +- Use standardized multilib solution (rhbz#1412274). + +* Tue Jan 17 2017 Vít Ondruch - 2.4.0-75 +- Apply patch fixing rubygem-mongo build failures. + +* Fri Jan 13 2017 Mamoru TASAKA - 2.4.0-74 +- Rebuild again for f26-ruby24 sidetag + +* Thu Jan 12 2017 Igor Gnatenko - 2.4.0-73 +- Rebuild for readline 7.x + +* Wed Jan 11 2017 Vít Ondruch - 2.4.0-72 +- Link files into directory to avoid dir => symlink isues. + +* Mon Jan 09 2017 Vít Ondruch - 2.4.0-71 +- Add rubygem-io-console dependency for rubygem-rdoc. + +* Mon Jan 02 2017 Vít Ondruch - 2.4.0-70 +- Upgrade to Ruby 2.4.0. +- Move gemified xmlrpc into subpackage. +- Move gemified openssl into subpackage. +- Tk is removed from stdlib. +- Extend 'gem_' macros for pre-release version support. + +* Tue Nov 22 2016 Vít Ondruch - 2.3.3-61 +- Update to Ruby 2.3.3. +- Exclude json.rb from ruby-libs (rhbz#1397370). + +* Fri Nov 18 2016 Vít Ondruch - 2.3.2-60 +- Update to Ruby 2.3.2. + +* Fri Oct 21 2016 Vít Ondruch - 2.3.1-59 +- Continue to use OpenSSL 1.0 for the moment. +- Add gemspec_add_dep and gemspec_remove_dep macros. +- Harden package. + +* Wed Aug 10 2016 Vít Ondruch - 2.3.1-58 +- Workaround "an invalid stdio handle" error on PPC (rhbz#1361037). + +* Tue Jul 12 2016 Vít Ondruch - 2.3.1-57 +- Make symlinks for json gem. + +* Mon May 23 2016 Vít Ondruch - 2.3.1-56 +- Requires rubygem(json) for rubygem-rdoc (rhbz#1325022). + +* Fri Apr 29 2016 Vít Ondruch - 2.3.1-55 +- Update to Ruby 2.3.1. + +* Wed Feb 3 2016 Peter Robinson 2.3.0-54 +- Add rubypick and rubygems requires to ruby-devel to deal with BuildRequires + +* Fri Jan 15 2016 Mamoru TASAKA - 2.3.0-53 +- Backport trunk@53455 to make ruby-qt build + +* Wed Jan 06 2016 Vít Ondruch - 2.3.0-52 +- Explicitly require RDoc, since weak dependencies are ignored by default. + +* Wed Jan 06 2016 Vít Ondruch - 2.3.0-51 +- Load RubyGems prior ABRT hook to properly rescue RubyGems exceptions. + +* Mon Jan 04 2016 Vít Ondruch - 2.3.0-50 +- Upgrade to Ruby 2.3.0. +- Move gemified net-telnet into subpackage. +- Add did_you_mean subpackage. +- Add virtual provides for CCAN copylibs. +- Use weak dependencies. + +* Tue Dec 22 2015 Pavel Valena - 2.3.0-0.7.preview2 +- Add systemtap tests. + +* Mon Dec 21 2015 Vít Ondruch - 2.2.4-47 +- Update to Ruby 2.2.4. + +* Thu Dec 10 2015 Vít Ondruch - 2.2.3-46 +- Fix ABRT hook autoloading. + +* Fri Sep 04 2015 Michal Toman - 2.2.3-45 +- Add support for MIPS architecture to config.h + +* Tue Sep 01 2015 Vít Ondruch - 2.2.3-44 +- Update to Ruby 2.2.3. + +* Tue Jun 23 2015 Vít Ondruch - 2.2.2-43 +- Fix for "dh key too small" error of OpenSSL 1.0.2+. + +* Thu Jun 18 2015 Fedora Release Engineering - 2.2.2-42 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_23_Mass_Rebuild + +* Wed Jun 10 2015 Vít Ondruch - 2.2.2-41 +- Fix the git BR following the git package split. + +* Mon May 04 2015 Vít Ondruch - 2.2.2-40 +- Fix upgrade path (rubygem-io-console's version was recently bumped in F21 + and makes the higher release to win). + +* Tue Apr 14 2015 Josef Stribny - 2.2.2-11 +- Bump release because of gems + +* Tue Apr 14 2015 Josef Stribny - 2.2.2-1 +- Update to Ruby 2.2.2 + +* Fri Mar 20 2015 Vít Ondruch - 2.2.1-10 +- Fix libruby.so versions in SystemTap scripts (rhbz#1202232). + +* Wed Mar 04 2015 Vít Ondruch - 2.2.1-9 +- Update to Ruby 2.2.1. + +* Sat Feb 21 2015 Till Maas - 2.2.0-8 +- Rebuilt for Fedora 23 Change + https://fedoraproject.org/wiki/Changes/Harden_all_packages_with_position-independent_code + +* Thu Feb 05 2015 Vít Ondruch - 2.2.0-7 +- Fix directory ownership. + +* Wed Feb 04 2015 Vít Ondruch - 2.2.0-6 +- Initialize all load paths in operating_system.rb. + +* Tue Feb 03 2015 Vít Ondruch - 2.2.0-5 +- Make operating_system.rb more robust. +- Add RubyGems stub headers for bundled gems. + +* Thu Jan 29 2015 Vít Ondruch - 2.2.0-4 +- Add missing rubygem-test-unit dependency on rubygem-power_assert. + +* Thu Jan 15 2015 Mamoru TASAKA - 2.2.0-3 +- Bump release to avoid EVR issue on rubygem-test-unit + +* Fri Jan 02 2015 Vít Ondruch - 2.2.0-1 +- Upgrade to Ruby 2.2.0. +- Explicitly list RubyGems directories to avoid accidentaly packaged content. +- Split test-unit and power_assert gems into separate sub-packages. +- Drop libdb dependency in favor of gdbm. + +* Fri Dec 26 2014 Orion Poplwski - 2.1.5-26 +- Disbable sse2 on i668 (bug #1101811) + +* Thu Nov 20 2014 Vít Ondruch - 2.1.5-25 +- Update to Ruby 2.1.5. + +* Fri Oct 31 2014 Vít Ondruch - 2.1.4-24 +- Update to Ruby 2.1.4. +- Include only vendor directories, not their content (rhbz#1114071). +- Fix "invalid regex" warning for non-rubygem packages (rhbz#1154067). +- Use load macro introduced in RPM 4.12. + +* Mon Aug 18 2014 Fedora Release Engineering +- Rebuilt for https://fedoraproject.org/wiki/Fedora_21_22_Mass_Rebuild + +* Tue Jun 24 2014 Peter Robinson 2.1.2-23 +- Fix FTBFS +- Specify tcl/tk 8.6 +- Add upstream patch to build with libffi 3.1 + +* Sun Jun 08 2014 Fedora Release Engineering +- Rebuilt for https://fedoraproject.org/wiki/Fedora_21_Mass_Rebuild + +* Wed May 21 2014 Jaroslav Škarvada +- Rebuilt for https://fedoraproject.org/wiki/Changes/f21tcl86 + +* Tue May 20 2014 Josef Stribny - 2.1.2-21 +- Update to Ruby 2.1.2 + +* Tue May 06 2014 Vít Ondruch - 2.1.1-20 - Remove useless exclude (rhbz#1065897). +- Extract load macro into external file and include it. +- Kill bundled certificates. -* Fri Jan 03 2014 Vít Ondruch - 2.0.0.353-17 -- Fix RubyGems version (rhbz#1036708). -- Fix FTBFS due to expired certificate for IMAP test case. +* Wed Apr 23 2014 Vít Ondruch - 2.1.1-19 +- Correctly expand $(prefix) in some Makefiles, e.g. eruby. -* Mon Nov 25 2013 Vít Ondruch - 2.0.0.353-16 -- Update to Ruby 2.0.0-p353. -- Fix heap overflow in floating point parsing (CVE-2013-4164). +* Tue Apr 08 2014 Vít Ondruch - 2.1.1-18 +- Update to Ruby 2.1.1. +- Revert regression of Hash#reject. + +* Mon Mar 03 2014 Vít Ondruch - 2.1.0-19 +- Add RPM dependency generators for RubyGems. + +* Mon Feb 10 2014 Josef Stribny - 2.1.0-19 +- Don't link cert.pem explicitely + +* Wed Jan 15 2014 Vít Ondruch - 2.1.0-18 +- Don't generate documentation on unexpected places. +- Detect if rubygems are running under rpmbuild and install gem binary + extensions into appropriate place. +- Add support for ppc64le arch (rhbz#1053263). +- Re-enable some test cases, which are passing now with Kernel 3.12.8+. +- Backport fix for floating point issues on i686. + +* Thu Jan 02 2014 Vít Ondruch - 2.1.0-17 +- Upgrade to Ruby 2.1.0. +- Move RPM macros into /usr/lib/rpm/macros.d directory. +- Allow MD5 in OpenSSL for tests. * Tue Jul 30 2013 Vít Ondruch - 2.0.0.247-15 - Move Psych symlinks to vendor dir, to prevent F18 -> F19 upgrade issues @@ -1363,7 +3152,7 @@ make check TESTS="-v $DISABLE_TESTS" - Disable the static library building. * Tue Dec 04 2007 Release Engineering - 1.8.6.111-2 - - Rebuild for openssl bump +- Rebuild for openssl bump * Wed Oct 31 2007 Akira TAGOH - Fix the dead link. diff --git a/rubygems-2.0.0-Do-not-modify-global-Specification.dirs-during-insta.patch b/rubygems-2.0.0-Do-not-modify-global-Specification.dirs-during-insta.patch deleted file mode 100644 index 98013a7..0000000 --- a/rubygems-2.0.0-Do-not-modify-global-Specification.dirs-during-insta.patch +++ /dev/null @@ -1,151 +0,0 @@ -From b95b9942361104dc5b7fd08eb4970f893d8c1a54 Mon Sep 17 00:00:00 2001 -From: =?UTF-8?q?V=C3=ADt=20Ondruch?= -Date: Wed, 13 Feb 2013 13:12:30 +0100 -Subject: [PATCH 1/3] Remove duplicated check. - -The loaded specifications are rejected already in #gather_dependencies, -so this condition cannot trigger. ---- - lib/rubygems/dependency_installer.rb | 3 --- - 1 file changed, 3 deletions(-) - -diff --git a/lib/rubygems/dependency_installer.rb b/lib/rubygems/dependency_installer.rb -index d811f62..dffa8df 100644 ---- a/lib/rubygems/dependency_installer.rb -+++ b/lib/rubygems/dependency_installer.rb -@@ -330,9 +330,6 @@ class Gem::DependencyInstaller - - last = @gems_to_install.size - 1 - @gems_to_install.each_with_index do |spec, index| -- # REFACTOR more current spec set hardcoding, should be abstracted? -- next if Gem::Specification.include?(spec) and index != last -- - # TODO: make this sorta_verbose so other users can benefit from it - say "Installing gem #{spec.full_name}" if Gem.configuration.really_verbose - --- -1.8.1.2 - - -From 2fa9087b1986db6c7945c0f997fed2bfff5ce06a Mon Sep 17 00:00:00 2001 -From: =?UTF-8?q?V=C3=ADt=20Ondruch?= -Date: Wed, 13 Feb 2013 15:47:47 +0100 -Subject: [PATCH 2/3] Do not modify global Specification.dirs during - installation. - -While gems are installed into --install-dir just fine even without -modifications of Specification.dirs, change in it makes inaccessible -gems already present on the system. ---- - lib/rubygems/dependency_installer.rb | 15 ++++++--------- - 1 file changed, 6 insertions(+), 9 deletions(-) - -diff --git a/lib/rubygems/dependency_installer.rb b/lib/rubygems/dependency_installer.rb -index dffa8df..841f26a 100644 ---- a/lib/rubygems/dependency_installer.rb -+++ b/lib/rubygems/dependency_installer.rb -@@ -57,16 +57,14 @@ class Gem::DependencyInstaller - # :build_args:: See Gem::Installer::new - - def initialize(options = {}) -- @install_dir = options[:install_dir] || Gem.dir - - if options[:install_dir] then -- # HACK shouldn't change the global settings, needed for -i behavior -- # maybe move to the install command? See also github #442 -- Gem::Specification.dirs = @install_dir -+ Gem.ensure_gem_subdirectories options[:install_dir] - end - - options = DEFAULT_OPTIONS.merge options - -+ @install_dir = options[:install_dir] - @bin_dir = options[:bin_dir] - @dev_shallow = options[:dev_shallow] - @development = options[:development] -@@ -92,7 +89,7 @@ class Gem::DependencyInstaller - @installed_gems = [] - @toplevel_specs = nil - -- @cache_dir = options[:cache_dir] || @install_dir -+ @cache_dir = options[:cache_dir] || @install_dir || Gem.dir - - # Set with any errors that SpecFetcher finds while search through - # gemspecs for a dep -@@ -202,7 +199,7 @@ class Gem::DependencyInstaller - # that this isn't dependent only on the currently installed gems - dependency_list.specs.reject! { |spec| - not keep_names.include?(spec.full_name) and -- Gem::Specification.include?(spec) -+ (!@install_dir && Gem::Specification.include?(spec)) - } - - unless dependency_list.ok? or @ignore_dependencies or @force then -@@ -254,7 +251,7 @@ class Gem::DependencyInstaller - to_do.push t.spec - end - -- results.remove_installed! dep -+ results.remove_installed! dep unless @install_dir - - @available << results - results.inject_into_list dependency_list -@@ -360,7 +357,7 @@ class Gem::DependencyInstaller - :force => @force, - :format_executable => @format_executable, - :ignore_dependencies => @ignore_dependencies, -- :install_dir => @install_dir, -+ :install_dir => (@install_dir || Gem.dir), - :security_policy => @security_policy, - :user_install => @user_install, - :wrappers => @wrappers, --- -1.8.1.2 - - -From d473204ce920702dd87257db49355929f31530d4 Mon Sep 17 00:00:00 2001 -From: =?UTF-8?q?V=C3=ADt=20Ondruch?= -Date: Fri, 15 Feb 2013 17:02:44 +0100 -Subject: [PATCH 3/3] Default to Gem.dir as late as possible. - ---- - lib/rubygems/dependency_installer.rb | 2 +- - lib/rubygems/installer.rb | 4 ++-- - 2 files changed, 3 insertions(+), 3 deletions(-) - -diff --git a/lib/rubygems/dependency_installer.rb b/lib/rubygems/dependency_installer.rb -index 841f26a..abcfa0f 100644 ---- a/lib/rubygems/dependency_installer.rb -+++ b/lib/rubygems/dependency_installer.rb -@@ -357,7 +357,7 @@ class Gem::DependencyInstaller - :force => @force, - :format_executable => @format_executable, - :ignore_dependencies => @ignore_dependencies, -- :install_dir => (@install_dir || Gem.dir), -+ :install_dir => @install_dir, - :security_policy => @security_policy, - :user_install => @user_install, - :wrappers => @wrappers, -diff --git a/lib/rubygems/installer.rb b/lib/rubygems/installer.rb -index 780a88b..6543130 100644 ---- a/lib/rubygems/installer.rb -+++ b/lib/rubygems/installer.rb -@@ -537,13 +537,13 @@ class Gem::Installer - :bin_dir => nil, - :env_shebang => false, - :force => false, -- :install_dir => Gem.dir, - :only_install_dir => false - }.merge options - - @env_shebang = options[:env_shebang] - @force = options[:force] -- @gem_home = options[:install_dir] -+ @install_dir = options[:install_dir] -+ @gem_home = options[:install_dir] || Gem.dir - @ignore_dependencies = options[:ignore_dependencies] - @format_executable = options[:format_executable] - @security_policy = options[:security_policy] --- -1.8.1.2 - diff --git a/rubygems-2.0.0-Fixes-for-empty-ruby-version.patch b/rubygems-2.0.0-Fixes-for-empty-ruby-version.patch deleted file mode 100644 index 365dc7b..0000000 --- a/rubygems-2.0.0-Fixes-for-empty-ruby-version.patch +++ /dev/null @@ -1,34 +0,0 @@ -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] 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/rubygems-2.0.0-binary-extensions.patch b/rubygems-2.0.0-binary-extensions.patch deleted file mode 100644 index 4876d35..0000000 --- a/rubygems-2.0.0-binary-extensions.patch +++ /dev/null @@ -1,344 +0,0 @@ -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/rubygems.attr b/rubygems.attr new file mode 100644 index 0000000..5793bf7 --- /dev/null +++ b/rubygems.attr @@ -0,0 +1,6 @@ +%__rubygems_requires %{_rpmconfigdir}/rubygems.req +%__rubygems_provides %{_rpmconfigdir}/rubygems.prov +%__rubygems_conflicts %{_rpmconfigdir}/rubygems.con +# In non-gem packages, the %%{gem_name} macro is not available and the macro +# stays unexpanded which leads to "invalid regex" error (rhbz#1154067). +%__rubygems_path ^%{?gem_name:%{gem_spec}}%{!?gem_name:this_should_never_match_anything}$ diff --git a/rubygems.con b/rubygems.con new file mode 100644 index 0000000..bcdeddc --- /dev/null +++ b/rubygems.con @@ -0,0 +1,52 @@ +#!/usr/bin/ruby + +require 'rubygems/package' + +module RubyGemsReq + module Helpers + # Keep only '!=' requirements. + def self.conflicts(requirements) + conflicts = requirements.select {|r| r.first == '!='} + end + + # Converts Gem::Requirement into array of requirements strings compatible + # with RPM .spec file. + def self.requirement_versions_to_rpm(requirement) + self.conflicts(requirement.requirements).map do |op, version| + version == Gem::Version.new(0) ? "" : "= #{version}" + end + end + end + + # Report conflicting gem dependencies including their version. + def self.gem_dependencies(specification) + specification.runtime_dependencies.each do |dependency| + conflict_strings = Helpers::requirement_versions_to_rpm(dependency.requirement).map do |requirement| + requirement_string = "rubygem(#{dependency.name}) #{requirement}" + end + if conflict_strings.length > 0 + conflict_string = conflict_strings.join(' with ') + conflict_string.prepend('(').concat(')') if conflict_strings.length > 1 + puts conflict_string + end + end + end + + # Reports all conflicts specified by all provided .gemspec files. + def self.conflicts + while filename = gets + filename.strip! + begin + specification = Gem::Specification.load filename + + gem_dependencies(specification) + rescue => e + # Ignore all errors. + end + end + end +end + +if __FILE__ == $0 + RubyGemsReq::conflicts +end diff --git a/rubygems.prov b/rubygems.prov new file mode 100644 index 0000000..f23ec3f --- /dev/null +++ b/rubygems.prov @@ -0,0 +1,36 @@ +#!/usr/bin/ruby + +require 'rubygems/package' + +module RubyGemsProv + module Helpers + # If there is some prelease version files, such as rc1 (i.e. non-numeric + # field), prepend this field by tilde instead of dot. + def self.normalize_prerelease(version) + if version.prerelease? + prerelease = version.version.sub /^#{version.release}\./, '' + "#{version.release}~#{prerelease}" + else + version.release + end + end + end + + # Reports all functionality gem provides. + def self.provides + while filename = gets + filename.strip! + begin + specification = Gem::Specification.load filename + + puts "rubygem(#{specification.name}) = #{Helpers::normalize_prerelease(specification.version)}" + rescue => e + # Ignore all errors. + end + end + end +end + +if __FILE__ == $0 + RubyGemsProv::provides +end diff --git a/rubygems.req b/rubygems.req new file mode 100644 index 0000000..70aebd4 --- /dev/null +++ b/rubygems.req @@ -0,0 +1,88 @@ +#!/usr/bin/ruby + +require 'rubygems/package' + +module RubyGemsReq + module Helpers + # Expands '~>' and '!=' gem requirements. + def self.expand_requirement(requirements) + requirements.inject([]) do |output, r| + output.concat case r.first + when '~>' + expand_pessimistic_requirement(r) + when '!=' + # If there is only the conflict requirement, we still need to depend + # on the specified gem. + if requirements.size == 1 + Gem::Requirement.default.requirements + else + [] + end + else + [r] + end + end.reject {|r| r.empty? } + end + + # Expands the pessimistic version operator '~>' into equivalent '>=' and + # '<' pair. + def self.expand_pessimistic_requirement(requirement) + next_version = Gem::Version.create(requirement.last).bump + return ['>=', requirement.last], ['<', next_version] + end + + # Converts Gem::Requirement into array of requirements strings compatible + # with RPM .spec file. + def self.requirement_versions_to_rpm(requirement) + self.expand_requirement(requirement.requirements).map do |op, version| + version == Gem::Version.new(0) ? "" : " #{op} #{version}" + end + end + + # Compose dependency together with its requirements in RPM rich dependency + # string. + def self.compose_dependency_string(name, requirements) + dependency_strings = requirements.map { |requirement| name + requirement } + dependency_string = dependency_strings.join(' with ') + dependency_string.prepend('(').concat(')') if dependency_strings.length > 1 + dependency_string + end + end + + # Report RubyGems dependency, versioned if required. + def self.rubygems_dependency(specification) + dependency_name = "ruby(rubygems)" + requirements = Helpers::requirement_versions_to_rpm(specification.required_rubygems_version) + + puts Helpers::compose_dependency_string(dependency_name, requirements) + end + + # Report all gem dependencies including their version. + def self.gem_dependencies(specification) + specification.runtime_dependencies.each do |dependency| + dependency_name = "rubygem(#{dependency.name})" + requirements = Helpers::requirement_versions_to_rpm(dependency.requirement) + + puts Helpers::compose_dependency_string(dependency_name, requirements) + end + end + + # Reports all requirements specified by all provided .gemspec files. + def self.requires + while filename = gets + filename.strip! + begin + specification = Gem::Specification.load filename + + rubygems_dependency(specification) + gem_dependencies(specification) + rescue => e + # Ignore all errors. + end + end + end +end + +if __FILE__ == $0 + RubyGemsReq::requires +end diff --git a/sources b/sources index 0c071c1..f1f97eb 100644 --- a/sources +++ b/sources @@ -1 +1 @@ -20eb8f067d20f6b76b7e16cce2a85a55 ruby-2.0.0-p353.tar.bz2 +SHA512 (ruby-4.0.1.tar.xz) = b67d9d1f97ba30200d103f8454e39dc2d0450819d51d91eb5451d44b0bafc56d2fa48bb1be6c5081babe5828f679984bad02b9bcee7441f6bd34c0a95b8f200b diff --git a/test_abrt.rb b/test_abrt.rb new file mode 100644 index 0000000..6d110ba --- /dev/null +++ b/test_abrt.rb @@ -0,0 +1,7 @@ +if !!$LOADED_FEATURES.detect { |f| f =~ /abrt\.rb/ } + exit true +else + puts 'ERROR: ABRT hook was not loaded.' + + exit false +end diff --git a/test_openssl_fips.rb b/test_openssl_fips.rb new file mode 100644 index 0000000..ffc7883 --- /dev/null +++ b/test_openssl_fips.rb @@ -0,0 +1,34 @@ +require 'openssl' + +# Run openssl tests in OpenSSL FIPS. See the link below for how to test. +# https://github.com/ruby/openssl/blob/master/.github/workflows/test.yml +# - step name: test on fips module + +# Listing the testing files by an array explicitly rather than the `Dir.glob` +# to prevent the test files from not loading unintentionally. +TEST_FILES = %w[ + test/openssl/test_fips.rb + test/openssl/test_pkey.rb +].freeze + +if ARGV.empty? + puts 'ERROR: Argument base_dir required.' + puts "Usage: #{__FILE__} base_dir [options]" + exit false +end +BASE_DIR = ARGV[0] +abs_test_files = TEST_FILES.map { |file| File.join(BASE_DIR, file) } + +# Set Fedora/RHEL downstream OpenSSL downstream environment variable to enable +# FIPS module in non-FIPS OS environment. It is available in Fedora 38 or later +# versions. +# https://src.fedoraproject.org/rpms/openssl/blob/rawhide/f/0009-Add-Kernel-FIPS-mode-flag-support.patch +ENV['OPENSSL_FORCE_FIPS_MODE'] = '1' +# A flag to tell the tests the current environment is FIPS enabled. +# https://github.com/ruby/openssl/blob/master/test/openssl/test_fips.rb +ENV['TEST_RUBY_OPENSSL_FIPS_ENABLED'] = 'true' + +abs_test_files.each do |file| + puts "INFO: Loading #{file}." + require file +end diff --git a/test_rubygems_con.rb b/test_rubygems_con.rb new file mode 100644 index 0000000..e124a49 --- /dev/null +++ b/test_rubygems_con.rb @@ -0,0 +1,124 @@ +# frozen_string_literal: true + +require 'test/unit' +require 'rpm_test_helper' + +class TestRubyGemsCon < Test::Unit::TestCase + include RPMTestHelper + + def test_filter_out_regular_requirements + gem_i = GemInfo.new + + lines = run_generator_single_file(gem_i) + + assert_equal(0, lines.size) + + deps = [ Dependency.new('bar') ] + gem_i.dependencies = deps + + lines = run_generator_single_file(gem_i) + + assert_equal(0, lines.size) + + deps = [ + Dependency.new('bar'), + Dependency.new('baq'), + Dependency.new('quz') + ] + + gem_i.dependencies = deps + lines = run_generator_single_file(gem_i) + + assert_equal(0, lines.size) + + deps = [ + Dependency.new('bar', ['>= 4.1']), + Dependency.new('baz', ['~> 3.2']), + Dependency.new('quz', ['>= 5.6']) + ] + + gem_i.dependencies = deps + + lines = run_generator_single_file(gem_i) + + assert_equal(0, lines.size) + end + + def test_single_gem_single_version_conflict + con = Dependency.new('bar', ['!= 0.4.4']) + + gem_i = GemInfo.new(dependencies: [ con ]) + lines = run_generator_single_file(gem_i) + + assert_equal(1, lines.size) + assert_equal("#{con.to_rpm_str} = 0.4.4\n", lines.first) + end + + def test_multiple_gems_with_single_conflict + cons = [ + Dependency.new('bar', ['!= 1.1']), + Dependency.new('baq', ['!= 1.2.2']), + Dependency.new('quz', ['!= 1.3']) + ] + + gem_i = GemInfo.new(dependencies: cons) + + lines = run_generator_single_file(gem_i) + + assert_equal(3, lines.size) + + assert_equal("#{cons[0].to_rpm_str} = 1.1\n" , lines[0]) + assert_equal("#{cons[1].to_rpm_str} = 1.2.2\n", lines[1]) + assert_equal("#{cons[2].to_rpm_str} = 1.3\n" , lines[2]) + end + + def test_multiple_conflicts_on_single_gem + con = Dependency.new('bar', ['!= 2.3', '!= 2.4']) + + gem_i = GemInfo.new(dependencies: [con]) + + lines = run_generator_single_file(gem_i) + + assert_equal(1, lines.size) + rpm_name = con.to_rpm_str + left_rpm_constraint = "(#{rpm_name} = 2.3 with " + right_rpm_constraint = "#{rpm_name} = 2.4)\n" + assert_equal((left_rpm_constraint + right_rpm_constraint), lines[0]) + + con = Dependency.new('bar', ['!= 2.3', '!= 2.4', '!= 4.5']) + + gem_i = GemInfo.new(dependencies: [ con ]) + + lines = run_generator_single_file(gem_i) + + assert_equal(1, lines.size) + + rpm_name = con.to_rpm_str + left_rpm_constraint = "(#{rpm_name} = 2.3 with " + middle_rpm_constraint = "#{rpm_name} = 2.4 with " + right_rpm_constraint = "#{rpm_name} = 4.5)\n" + + assert_equal((left_rpm_constraint + middle_rpm_constraint + right_rpm_constraint), lines[0]) + end + + def test_generates_conflicts_while_ignoring_regular_requirements + deps = [ + Dependency.new('bar', ['>= 2.3', '!= 2.4.2']), + Dependency.new('quz', ['~> 3.0', '!= 3.2']) + ] + + gem_i = GemInfo.new(dependencies: deps) + + lines = run_generator_single_file(gem_i) + + assert_equal(2, lines.size) + + rpm_name = deps[0].to_rpm_str + rpm_constraint = "#{rpm_name} = 2.4.2\n" + assert_equal(rpm_constraint, lines[0]) + + rpm_name = deps[1].to_rpm_str + rpm_constraint = "#{rpm_name} = 3.2\n" + assert_equal(rpm_constraint, lines[1]) + end +end diff --git a/test_rubygems_prov.rb b/test_rubygems_prov.rb new file mode 100644 index 0000000..b660ff6 --- /dev/null +++ b/test_rubygems_prov.rb @@ -0,0 +1,52 @@ +# frozen_string_literal: true + +require 'test/unit' +require 'rpm_test_helper' + +class TestRubyGemsProv < Test::Unit::TestCase + include RPMTestHelper + + def test_provides_the_gem_version + gem_i = GemInfo.new(version: '1.2') + + lines = run_generator_single_file(gem_i) + + assert_equal(1, lines.size) + assert_equal("#{gem_i.to_rpm_str} = #{gem_i.version}\n", lines.first) + + gem_i = GemInfo.new(name: 'somegem_foo', version: '4.5.6') + + lines = run_generator_single_file(gem_i) + + assert_equal(1, lines.size) + assert_equal("#{gem_i.to_rpm_str} = #{gem_i.version}\n", lines.first) + + deps = [ + Dependency.new('bar'), + Dependency.new('baq', [">= 1.2"]), + Dependency.new('quz', ["!= 3.2"]) + ] + gem_i = GemInfo.new(dependencies: deps) + + lines = run_generator_single_file(gem_i) + + assert_equal(1, lines.size) + assert_equal("#{gem_i.to_rpm_str} = #{gem_i.version}\n", lines.first) + end + + def test_translates_prelease_version_provides_from_rubygems_to_rpm + gem_i = GemInfo.new(version: '1.2.3.dev') + + lines = run_generator_single_file(gem_i) + + assert_equal(1, lines.size) + assert_equal("#{gem_i.to_rpm_str} = 1.2.3~dev\n", lines.first) + + gem_i = GemInfo.new(name: 'foo2', version: '1.2.3.dev.2') + + lines = run_generator_single_file(gem_i) + + assert_equal(1, lines.size) + assert_equal("#{gem_i.to_rpm_str} = 1.2.3~dev.2\n", lines.first) + end +end diff --git a/test_rubygems_req.rb b/test_rubygems_req.rb new file mode 100644 index 0000000..490923e --- /dev/null +++ b/test_rubygems_req.rb @@ -0,0 +1,205 @@ +# frozen_string_literal: true + +require 'test/unit' +require 'rpm_test_helper' + +class TestRubyGemsReq < Test::Unit::TestCase + include RPMTestHelper + + def test_depends_on_rubygems + gem_i = GemInfo.new + + lines = run_generator_single_file(gem_i) + + assert_equal(1, lines.size) + assert_equal("#{helper_rubygems_dependency}\n", lines.first) + end + + def test_requires_rubygems_and_dependency + dep = Dependency.new('bar') + gem_i = GemInfo.new(dependencies: [dep]) + + lines = run_generator_single_file(gem_i) + + assert_equal(2, lines.size) + assert_equal("#{helper_rubygems_dependency}\n", lines.first) + assert_equal("#{dep.to_rpm_str}\n", lines[1]) + end + + def test_requires_multiple_dependencies_with_constraint + constraints = [ + '>= 3.0', + '>= 3.0.0', + '>= 3', + '= 1.0.2', + '= 3.0', + '< 3.2', + '<= 3.4' + ] + + dependencies = [] + constraints.each_with_index do |constraint, idx| + dependencies << Dependency.new("bar#{idx}", [constraint]) + end + + gem_i = GemInfo.new(dependencies: dependencies) + + lines = run_generator_single_file(gem_i) + # + 1 for the rubygems dependency + assert_equal(constraints.size + 1, lines.size) + dependencies.each_with_index do |dep, idx| + rpm_dep_name = dep.to_rpm_str + # Start indexing lines at 1, to jump over rubygems dependency + assert_equal("#{rpm_dep_name} #{constraints[idx]}\n", lines[idx + 1]) + end + end + + def test_expands_pessimistic_constraint_for_rpm + dep = Dependency.new('bar', ['~> 1.2']) + + gem_i = GemInfo.new(dependencies: [dep]) + + lines = run_generator_single_file(gem_i) + + assert_equal(2, lines.size) + + rpm_dep_name = dep.to_rpm_str + left_constraint = "#{rpm_dep_name} >= 1.2" + right_constraint = "#{rpm_dep_name} < 2" + expected_constraint = "(#{left_constraint} with #{right_constraint})\n" + assert_equal(expected_constraint, lines[1]) + end + + def test_multiple_pessimistically_constrained_dependencies + dependencies = [] + dep_map = [ + { + constraint: '~> 1.2.3', + expanded_left: '>= 1.2.3', + expanded_rigth: '< 1.3', + gem_name: 'bar1' + }, + { + constraint: '~> 1.2', + expanded_left: '>= 1.2', + expanded_rigth: '< 2', + gem_name: 'bar2' + }, + { + constraint: '~> 3', + expanded_left: '>= 3', + expanded_rigth: '< 4', + gem_name: 'bar3' + } + ].each do |deps| + dependencies << Dependency.new(deps[:gem_name], [deps[:constraint]]) + end + + gem_i = GemInfo.new(dependencies: dependencies) + + lines = run_generator_single_file(gem_i) + + assert_equal(dep_map.size + 1, lines.size) + + dep_map.each_with_index do |hash, idx| + rpm_dep_name = dependencies[idx].to_rpm_str + left_constraint = rpm_dep_name + ' ' + hash[:expanded_left] + right_constraint = rpm_dep_name + ' ' + hash[:expanded_rigth] + expected_constraint = "(#{left_constraint} with #{right_constraint})\n" + assert_equal(expected_constraint, lines[idx + 1]) + end + end + + def test_multiple_constraints_on_one_dependency_composes_constraints_for_RPM + # The quoting here depends on how the constraint is expanded in the helpers. + # right now the form is `["#{constraint}"]`, therefore we have to not specify + # left and right quotes. + constraints = ['>= 0.2.3', '<= 0.2.5'] + dep = Dependency.new('baz', constraints) + + gem_i = GemInfo.new(dependencies: [dep]) + + lines = run_generator_single_file(gem_i) + + assert_equal(2, lines.size) + rpm_dep_name = dep.to_rpm_str + assert_equal("(#{rpm_dep_name} >= 0.2.3 with #{rpm_dep_name} <= 0.2.5)\n", lines[1]) + + # Not sure who would compose a dependency like this, but it's possible + # to do with the current generator + constraints = ['> 0.4.5', '< 0.6.4', '>= 2.3', '<= 2.5.3'] + dep = Dependency.new('qux', constraints) + + gem_i = GemInfo.new(dependencies: [dep]) + + lines = run_generator_single_file(gem_i) + + rpm_dep = dep.to_rpm_str + expected_str = "(#{rpm_dep} > 0.4.5 with #{rpm_dep} < 0.6.4 with " \ + "#{rpm_dep} >= 2.3 with #{rpm_dep} <= 2.5.3)\n" + + assert_equal(2, lines.size) + assert_equal(expected_str, lines[1]) + end + + # https://bugzilla.redhat.com/show_bug.cgi?id=1561487 + def test_depends_on_gem_with_version_conflict + dep = Dependency.new('baz', ['!= 0.4']) + + gem_i = GemInfo.new(dependencies: [dep]) + + lines = run_generator_single_file(gem_i) + + assert_equal(2, lines.size) + assert_equal("#{dep.to_rpm_str}\n", lines[1]) + end + + def test_filters_conflict_from_regular_version_constraints + constraint = ['> 1.2.4', '!= 1.2.7'] + dep = Dependency.new('baq', constraint) + + gem_i = GemInfo.new(dependencies: [dep]) + + lines = run_generator_single_file(gem_i) + + assert_equal(2, lines.size) + assert_equal("#{dep.to_rpm_str} > 1.2.4\n", lines[1]) + end + + def test_filtering_conflicts_is_not_depending_on_contraint_ordering + constraints = ['!= 1.2.7', '> 1.2.4'] + dep = Dependency.new('baq', constraints) + + gem_i = GemInfo.new(dependencies: [dep]) + + lines = run_generator_single_file(gem_i) + + assert_equal(2, lines.size) + assert_equal("#{dep.to_rpm_str} > 1.2.4\n", lines[1]) + end + + def test_filters_multiple_conflicts_from_dependency + omit "Case not yet supported." + constraints = ['!= 1.2.4', '!= 1.2.5', '!= 2.3', '!= 4.8'] + dep = Dependency.new('baf', constraints) + + gem_i = GemInfo.new(dependencies: [dep]) + + lines = run_generator_single_file(gem_i) + + assert_equal(2, lines.size) + assert_equal("#{dep.to_rpm_str}\n", lines[1]) + end + + def test_filters_multiple_conflicts_from_dependency_but_keeps_regular_constraint + constraints = ['!= 1.2.4', '!= 1.2.5', '!= 2.3', '<= 4.8'] + dep = Dependency.new('bam', constraints) + + gem_i = GemInfo.new(dependencies: [dep]) + + lines = run_generator_single_file(gem_i) + + assert_equal(2, lines.size) + assert_equal("#{dep.to_rpm_str} <= 4.8\n", lines[1]) + end +end diff --git a/test_systemtap.rb b/test_systemtap.rb new file mode 100644 index 0000000..5784e2d --- /dev/null +++ b/test_systemtap.rb @@ -0,0 +1,65 @@ +require 'set' + +LIBRUBY_SO = 'libruby.so' +PROBES_D = 'probes.d' + +# These probes are excluded by VM_COLLECT_USAGE_DETAILS ifdef. +EXCLUDE_PROBES = Set.new %w(insn insn__operand) + +## Detect SystemTap section headers presence + +stap_headers = [ + '\.stapsdt\.base', + '\.note\.stapsdt' +] + +header_regexp = %r{ (#{stap_headers.join('|')}) } + +section_headers = `readelf -S "#{LIBRUBY_SO}"` +detected_stap_headers = section_headers.scan(header_regexp).flatten + +# Assume there are both headers until this is proven wrong ;) +unless detected_stap_headers.size == 2 + puts 'ERROR: SystemTap (DTrace) headers were not detected in resulting library.' + exit false +end + +## Find if every declared probe is propagated to resulting library + +# Colect probes specified in probes.d file. +probes_declared = [] + +File.open(PROBES_D) do |file| + file.each_line do |line| + if probe = line[/probe (\S+)\(.*\);/, 1] + probes_declared << probe + end + end +end + +probes_declared = Set.new probes_declared + +unless EXCLUDE_PROBES.subset? probes_declared + puts 'ERROR: Change in SystemTap (DTrace) probes definition file detected.' + exit false +end + +probes_declared -= EXCLUDE_PROBES + +# Detect probes in resulting library. +get_probes_detected = %r{ +^\s*Provider:\s+ruby,\s+Name:\s+(\S+),\s+.*$ +} + +probes_detected = `eu-readelf -n "#{LIBRUBY_SO}"` + +probes_detected = Set.new probes_detected.scan(get_probes_detected).flatten + +# Both sets must be equal, otherwise something is wrong. +unless probes_declared == probes_detected + puts 'ERROR: SystemTap (DTrace) probes were not correctly propagated into resulting library.' + puts " Undetected probes: #{(probes_declared - probes_detected).sort.join(', ')}\n", + " Additional detected probes: #{(probes_detected - probes_declared).sort.join(', ')}" + + exit false +end