diff --git a/.gitignore b/.gitignore index 8ae4291..be25674 100644 --- a/.gitignore +++ b/.gitignore @@ -1 +1,37 @@ -/rubygems-*.tgz +rubygems-1.3.7.tgz +/rubygems-1.5.0.tgz +/rubygems-1.5.2.tgz +/rubygems-1.5.3.tgz +/rubygems-1.6.0.tgz +/rubygems-1.6.1.tgz +/rubygems-1.6.2.tgz +/rubygems-1.7.2.tgz +/rubygems-1.8.5.tgz +/rubygems-1.8.6.tgz +/rubygems-1.8.7.tgz +/rubygems-1.8.8.tgz +/rubygems-1.8.9.tgz +/rubygems-1.8.10.tgz +/rubygems-1.8.11.tgz +/rubygems-1.8.15.tgz +/rubygems-1.8.22.tgz +/rubygems-1.8.23.tgz +/rubygems-1.8.24.tgz +/rubygems-1.8.25.tgz +/rubygems-2.0.0.tgz +/rubygems-2.0.3.tgz +/rubygems-2.0.5.tgz +/rubygems-2.0.6.tgz +/rubygems-2.0.7.tgz +/rubygems-2.0.8.tgz +/rubygems-2.0.9.tgz +/rubygems-2.0.10.tgz +/rubygems-2.0.11.tgz +/rubygems-2.0.12.tgz +/rubygems-2.1.9.tgz +/rubygems-2.1.10.tgz +/rubygems-2.1.11.tgz +/rubygems-2.2.2.tgz +/rubygems-2.4.8.tgz +/rubygems-2.6.10.tgz +/rubygems-2.6.13.tgz diff --git a/macros.rubygems b/macros.rubygems new file mode 100644 index 0000000..0652ec6 --- /dev/null +++ b/macros.rubygems @@ -0,0 +1,130 @@ +# The RubyGems root folder. +%gem_dir %{_datadir}/gems +%gem_archdir %{_libdir}/gems + +# Common gem locations and files. +%gem_instdir %{gem_dir}/gems/%{gem_name}-%{version}%{?prerelease} +%gem_extdir_mri %{gem_archdir}/%{name}/%{gem_name}-%{version}%{?prerelease} +%gem_libdir %{gem_instdir}/lib +%gem_cache %{gem_dir}/cache/%{gem_name}-%{version}%{?prerelease}.gem +%gem_spec %{gem_dir}/specifications/%{gem_name}-%{version}%{?prerelease}.gemspec +%gem_docdir %{gem_dir}/doc/%{gem_name}-%{version}%{?prerelease} + + +# %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" \\\ +gem install \\\ + -V \\\ + --local \\\ + --build-root %{-d*}%{!?-d:.} \\\ + --force \\\ + --document=ri,rdoc \\\ + %{-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}. +# +# 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$ \ +} + + +# The 'read' command in gemspec_add _depand gemspec_remove_dep macros is not +# essential, but it is usefull to make the sript appear in build log. + + +# %gemspec_add_dep - Add dependency into .gemspec. +# +# 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:./%{gem_name}.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:./%{gem_name}.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} diff --git a/operating_system.rb b/operating_system.rb index d95b303..4b2903d 100644 --- a/operating_system.rb +++ b/operating_system.rb @@ -87,39 +87,37 @@ module Gem # Remove methods we are going to override. This avoids "method redefined;" # warnings otherwise issued by Ruby. - remove_method :operating_system_defaults if method_defined? :operating_system_defaults remove_method :default_dir if method_defined? :default_dir remove_method :default_path if method_defined? :default_path + remove_method :default_bindir if method_defined? :default_bindir remove_method :default_ext_dir_for if method_defined? :default_ext_dir_for - ## - # Regular user installs into user directory, root manages /usr/local. - - def operating_system_defaults - unless opt_build_root? - options = if Process.uid == 0 - "--install-dir=#{Gem.default_dirs[:local][:gem_dir]} --bindir #{Gem.default_dirs[:local][:bin_dir]}" - else - "--user-install --bindir #{File.join [Dir.home, 'bin']}" - end - - {"gem" => options} - else - {} - end - end - ## # RubyGems default overrides. def default_dir - Gem.default_dirs[:system][:gem_dir] + 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 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 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'] + end end def default_ext_dir_for base_dir diff --git a/ruby-2.3.0-ruby_version.patch b/ruby-2.3.0-ruby_version.patch deleted file mode 100644 index e460873..0000000 --- a/ruby-2.3.0-ruby_version.patch +++ /dev/null @@ -1,68 +0,0 @@ -From 9f0ec0233f618cbb862629816b22491c3df79578 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 d4ff4a262c..3f9a5bf590 100644 ---- a/lib/rubygems/defaults.rb -+++ b/lib/rubygems/defaults.rb -@@ -34,7 +34,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 - - ## -@@ -103,7 +103,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 - -@@ -234,7 +235,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 b25068405d..e9fef4a311 100644 ---- a/test/rubygems/test_gem.rb -+++ b/test/rubygems/test_gem.rb -@@ -1395,7 +1395,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) - -@@ -1471,7 +1472,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 --- -2.1.0 - diff --git a/rubygems-2.6.13-Ignored-test-for-real-world-default-gem.patch b/rubygems-2.6.13-Ignored-test-for-real-world-default-gem.patch new file mode 100644 index 0000000..54e3ad0 --- /dev/null +++ b/rubygems-2.6.13-Ignored-test-for-real-world-default-gem.patch @@ -0,0 +1,51 @@ +From 8598da6ea02fe69c20f93ac4d5504ca4aba6fe6b Mon Sep 17 00:00:00 2001 +From: SHIBATA Hiroshi +Date: Wed, 9 Aug 2017 16:30:53 +0900 +Subject: [PATCH 1/2] Ignored test for real world default gem. + + Because default gem was enabled after ruby installation that + is `make install` +--- + test/rubygems/test_require.rb | 6 ++++++ + 1 file changed, 6 insertions(+) + +diff --git a/test/rubygems/test_require.rb b/test/rubygems/test_require.rb +index 936f78fb2..c44c759cc 100644 +--- a/test/rubygems/test_require.rb ++++ b/test/rubygems/test_require.rb +@@ -303,6 +303,12 @@ def test_default_gem_only + + def test_realworld_default_gem + skip "no default gems on ruby < 2.0" unless RUBY_VERSION >= "2" ++ begin ++ gem 'json' ++ rescue Gem::MissingSpecError ++ skip "default gems is only available after ruby installation" ++ end ++ + cmd = <<-RUBY + $stderr = $stdout + require "json" + +From 0dafce8188691a7b942ed4724a0d0e462e74a809 Mon Sep 17 00:00:00 2001 +From: SHIBATA Hiroshi +Date: Wed, 9 Aug 2017 21:06:41 +0900 +Subject: [PATCH 2/2] Fixed grammer + +--- + test/rubygems/test_require.rb | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +diff --git a/test/rubygems/test_require.rb b/test/rubygems/test_require.rb +index c44c759cc..edb36f1f3 100644 +--- a/test/rubygems/test_require.rb ++++ b/test/rubygems/test_require.rb +@@ -306,7 +306,7 @@ def test_realworld_default_gem + begin + gem 'json' + rescue Gem::MissingSpecError +- skip "default gems is only available after ruby installation" ++ skip "default gems are only available after ruby installation" + end + + cmd = <<-RUBY diff --git a/rubygems-3.1.3-Avoid-Bundler-installation.patch b/rubygems-3.1.3-Avoid-Bundler-installation.patch deleted file mode 100644 index 55edaf0..0000000 --- a/rubygems-3.1.3-Avoid-Bundler-installation.patch +++ /dev/null @@ -1,17 +0,0 @@ -diff --git a/setup.rb b/setup.rb -index 16ffa7215..49f6bfca5 100644 ---- a/setup.rb -+++ b/setup.rb -@@ -24,6 +24,12 @@ require 'rubygems/exceptions' - - Gem::CommandManager.instance.register_command :setup - -+require 'rubygems/commands/setup_command' -+ -+class Gem::Commands::SetupCommand -+ def install_default_bundler_gem(bin_dir); end -+end -+ - args = ARGV.clone - if ENV["GEM_PREV_VER"] - args = [ "--previous-version", ENV["GEM_PREV_VER"] ] + args diff --git a/rubygems.attr b/rubygems.attr new file mode 100644 index 0000000..f033d43 --- /dev/null +++ b/rubygems.attr @@ -0,0 +1,5 @@ +%__rubygems_requires %{_rpmconfigdir}/rubygems.req +%__rubygems_provides %{_rpmconfigdir}/rubygems.prov +# 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.prov b/rubygems.prov new file mode 100644 index 0000000..b7c9777 --- /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}-0.1.#{prerelease}" + else + "#{version.release}-1" + 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..4f7a583 --- /dev/null +++ b/rubygems.req @@ -0,0 +1,81 @@ +#!/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 '!=' + expand_not_equal_requirement(r) + else + [r] + end + end + 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 + + # Expands the not equal version operator '!=' into equivalent '<' and + # '>' pair. + def self.expand_not_equal_requirement(requirement) + return ['<', requirement.last], ['>', requirement.last] + 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 + end + + # Report RubyGems dependency, versioned if required. + def self.rubygems_dependency(specification) + Helpers::requirement_versions_to_rpm(specification.required_rubygems_version).each do |requirement| + dependency_string = "ruby(rubygems)" + dependency_string += " #{specification.required_rubygems_version}" if requirement && requirement.length > 0 + puts dependency_string + end + end + + # Report all gem dependencies including their version. + def self.gem_depenencies(specification) + specification.runtime_dependencies.each do |dependency| + Helpers::requirement_versions_to_rpm(dependency.requirement).each do |requirement| + dependency_string = "rubygem(#{dependency.name})" + dependency_string += " #{requirement}" if requirement && requirement.length > 0 + puts dependency_string + end + 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_depenencies(specification) + rescue => e + # Ignore all errors. + end + end + end +end + +if __FILE__ == $0 + RubyGemsReq::requires +end diff --git a/rubygems.spec b/rubygems.spec index 44636f8..47e931d 100644 --- a/rubygems.spec +++ b/rubygems.spec @@ -3,19 +3,16 @@ # # Bundled libraries versions -%global molinillo_version 0.7.0 -%global optparse_version 0.2.0 -# TODO: Check the version if/when available in library. -%global tsort_version 0.1.0 +%global molinillo_version 0.5.7 # Requires versions -%global bundler_version 2.3.25 -%global io_console_version 0.5.6 -%global openssl_version 2.2.0 -%global psych_version 3.3.0 -%global rdoc_version 6.3.0 +%global io_console_version 0.4.6 +%global json_version 2.0.2 +%global openssl_version 2.0.2 +%global psych_version 2.2.2 +%global rdoc_version 5.0.0 -# The RubyGems library has to stay out of Ruby directory tree, since the +# The RubyGems library has to stay out of Ruby directory three, since the # RubyGems should be share by all Ruby implementations. %global rubygems_dir %(ruby -e "puts RbConfig::CONFIG['rubygemsdir']") @@ -26,7 +23,7 @@ # Executing testsuite (enabling %%check section) will cause dependency loop. # To avoid dependency loop when necessary, please set the following value to 0 -%bcond_with bootstrap +%global enable_check 1 # It cannot be relied on %%{_libdir} for noarch packages. Query Ruby for # the right value. @@ -35,18 +32,21 @@ Summary: The Ruby standard for packaging ruby libraries Name: rubygems -Version: 3.3.25 -Release: 207%{?dist} -# BSD-2-Clause: lib/rubygems/tsort/ -# BSD-2-Clause OR RUBY: lib/rubygems/optparse/ -# MIT: lib/rubygems/resolver/molinillo -License: (Ruby OR MIT) AND BSD-2-Clause AND (BSD-2-Clause OR RUBY) AND MIT +Version: 2.6.13 +Release: 100%{?dist} +Group: Development/Libraries +License: Ruby or MIT URL: https://rubygems.org/ -Source0: https://rubygems.org/rubygems/%{name}-%{version}.tgz +Source0: http://production.cf.rubygems.org/rubygems/%{name}-%{version}.tgz # Sources from the works by Vít Ondruch -# NOTE: Keep Source1 in sync with ruby.spec. +# Please keep Source{1,5,8,9,10} in sync with ruby.spec Source1: operating_system.rb +Source5: macros.rubygems +# RPM dependency generators. +Source8: rubygems.attr +Source9: rubygems.req +Source10: rubygems.prov # http://seclists.org/oss-sec/2013/q3/att-576/check_CVE-2013-4287_rb.bin # Slightly modified for exit status Source11: check_CVE-2013-4287.rb @@ -55,37 +55,36 @@ Source11: check_CVE-2013-4287.rb # Also modified to match: # http://seclists.org/oss-sec/2013/q3/605 Source12: check_CVE-2013-4363.rb -# Fix ruby_version abuse. -# https://bugs.ruby-lang.org/issues/11002 -# NOTE: Keep this patch in sync with ruby.spec. -Patch0: ruby-2.3.0-ruby_version.patch -# Bundler installation does not respec `--destdir`. But we ship Bundler in -# independent package, therefore just ignore the installation altogether. -# https://github.com/rubygems/rubygems/issues/3604 -Patch1: rubygems-3.1.3-Avoid-Bundler-installation.patch +# Ignore failing TestGemRequire#test_realworld_default_gem with +# --disable-gems option. +# https://github.com/rubygems/rubygems/pull/1986 +Patch0: rubygems-2.6.13-Ignored-test-for-real-world-default-gem.patch + +%{?load:%{SOURCE5}} Requires: ruby(release) -Recommends: rubygem(bundler) >= %{bundler_version} Recommends: rubygem(rdoc) >= %{rdoc_version} Recommends: rubygem(io-console) >= %{io_console_version} Requires: rubygem(openssl) >= %{openssl_version} Requires: rubygem(psych) >= %{psych_version} BuildRequires: ruby(release) -BuildRequires: rubygems-devel -%if %{without bootstrap} +BuildRequires: rubygem(json) +BuildRequires: rubygem(rdoc) +%if %{enable_check} # For mkmf.rb BuildRequires: ruby-devel -BuildRequires: rubygem(test-unit) -BuildRequires: %{_bindir}/cmake -BuildRequires: %{_bindir}/git -BuildRequires: %{_bindir}/gcc +BuildRequires: rubygem(minitest) < 5 BuildRequires: rubygem(rake) -BuildRequires: rubygem(webrick) +# TestGemExtCmakeBuilder +BuildRequires: %{_bindir}/cmake +BuildRequires: git +BuildRequires: rubygem(builder) %endif Provides: gem = %{version}-%{release} Provides: ruby(rubygems) = %{version}-%{release} # https://github.com/rubygems/rubygems/pull/1189#issuecomment-121600910 +Provides: bundled(rubygem(molinillo)) = %{molinillo_version} Provides: bundled(rubygem-molinillo) = %{molinillo_version} BuildArch: noarch @@ -93,8 +92,22 @@ BuildArch: noarch RubyGems is the Ruby standard for publishing and managing third party libraries. +%package devel +Summary: Macros and development tools for packaging RubyGems +Group: Development/Libraries +License: Ruby or MIT +Requires: ruby(%{name}) = %{version}-%{release} +# Needed for RDoc documentation format generation. +Requires: rubygem(json) >= %{json_version} +Requires: rubygem(rdoc) >= %{rdoc_version} +BuildArch: noarch + +%description devel +Macros and development tools for packaging RubyGems. + %package doc Summary: Documentation for %{name} +Group: Development/Libraries License: Ruby or MIT Requires: ruby(%{name}) = %{version}-%{release} BuildArch: noarch @@ -105,93 +118,78 @@ Documentation for %{name}. %prep %setup -q -%patch 0 -p1 -%patch 1 -p1 +%patch0 -p1 %build # Nothing %install -mkdir -p %{buildroot}{%{rubygems_dir},%{gem_dir}}/ -GEM_HOME=%{buildroot}%{gem_dir} \ +GEM_HOME=%{buildroot}/%{gem_dir} \ ruby setup.rb \ --document rdoc,ri \ --prefix=/ \ --backtrace \ - --no-regenerate-binstubs \ - --destdir=%{buildroot}%{rubygems_dir}/ + --destdir=%{buildroot}/%{rubygems_dir}/ -mkdir -p %{buildroot}%{_bindir} -mv %{buildroot}%{rubygems_dir}/bin/gem %{buildroot}%{_bindir}/. -rm -rf %{buildroot}%{rubygems_dir}/bin +mkdir -p %{buildroot}/%{_bindir} +mv %{buildroot}/%{rubygems_dir}/bin/gem %{buildroot}/%{_bindir}/gem +rm -rf %{buildroot}/%{rubygems_dir}/bin -mv %{buildroot}/%{rubygems_dir}/lib/* %{buildroot}%{rubygems_dir}/. +mv %{buildroot}/%{rubygems_dir}/lib/* %{buildroot}/%{rubygems_dir}/. # No longer needed rmdir %{buildroot}%{rubygems_dir}/lib # Kill bundled certificates, as they should be part of ca-certificates. for cert in \ - .document \ - rubygems.org/GlobalSignRootCA.pem \ - rubygems.org/GlobalSignRootCA_R3.pem + rubygems.global.ssl.fastly.net/DigiCertHighAssuranceEVRootCA.pem \ + rubygems.org/AddTrustExternalCARoot.pem \ + index.rubygems.org/GlobalSignRootCA.pem do rm %{buildroot}%{rubygems_dir}/rubygems/ssl_certs/$cert - rm -d $(dirname %{buildroot}%{rubygems_dir}/rubygems/ssl_certs/$cert) || : + rm -r $(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)" +test ! "$(ls -A %{buildroot}%{rubygems_dir}/rubygems/ssl_certs/ 2>/dev/null)" + +# 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}%{_rpmconfigdir}/macros.d +install -m 644 %{SOURCE5} %{buildroot}%{_rpmconfigdir}/macros.d/macros.rubygems +sed -i "s/%%{name}/ruby/" %{buildroot}%{_rpmconfigdir}/macros.d/macros.rubygems + +# Install dependency generators. +mkdir -p %{buildroot}%{_rpmconfigdir}/fileattrs +install -m 644 %{SOURCE8} %{buildroot}%{_rpmconfigdir}/fileattrs +install -m 755 %{SOURCE9} %{buildroot}%{_rpmconfigdir} +install -m 755 %{SOURCE10} %{buildroot}%{_rpmconfigdir} # Install custom operating_system.rb. mkdir -p %{buildroot}%{rubygems_dir}/rubygems/defaults install -cpm 0644 %{SOURCE1} %{buildroot}%{rubygems_dir}/rubygems/defaults/ # Create gem folders. -mkdir -p %{buildroot}%{gem_dir}/{cache,gems,specifications,extensions,doc,plugins} +mkdir -p %{buildroot}%{gem_dir}/{cache,gems,specifications,extensions,doc} mkdir -p %{buildroot}%{gem_extdir}/ruby # Create below mkdir -p %{buildroot}%{gem_dir}/specifications/default -# Remove bundled bundler -rm -vr %{buildroot}%{rubygems_dir}/bundler* - - %check # Create an empty operating_system.rb, so that the system's one doesn't get used, # otherwise the test suite fails. mkdir -p lib/rubygems/defaults touch lib/rubygems/defaults/operating_system.rb -# Check Bundler version. -[ "`RUBYOPT=-Ibundler/lib ruby -rbundler/version -e 'puts Bundler::VERSION'| tail -1`" \ - == '%{bundler_version}' ] +# It is necessary to specify the paths to let the test suite pass." +export GEM_PATH=%{gem_dir} +export RUBYOPT="--disable-gems -Ilib:test" # Check Molinillo version correctness. -[ "`RUBYOPT=-Ilib ruby -e 'module Gem; class Resolver; end; end; require %{rubygems/resolver/molinillo/lib/molinillo/gem_metadata}; puts Gem::Resolver::Molinillo::VERSION' | tail -1`" \ +[ "`ruby -e 'module Gem; module Resolver; end; end; require %{rubygems/resolver/molinillo/lib/molinillo/gem_metadata}; puts Gem::Resolver::Molinillo::VERSION' | tail -1`" \ == '%{molinillo_version}' ] -# Check optparse version correctness. -[ "`RUBYOPT=-Ilib ruby -e 'require %{rubygems/optparse/lib/optparse}; puts Gem::OptionParser::Version' | tail -1`" \ - == '%{optparse_version}' ] - -%if %{without bootstrap} -# util directory with changelog generator are not shipped in release archive. -mv test/test_changelog_generator.rb{,.disabled} - -# Put all required libraries on the `$LOAD_PATH`, where the original Ruby -# `require` can find them. This prevents the RubyGems load machinery from -# running and failing to find `gem.build_complete` files for sytem packages -# and therefore raising warnings such as: "Ignoring json-2.5.1 because its -# extensions are not built. Try: gem pristine json --version 2.5.1". -# https://github.com/rubygems/rubygems/pull/4446 -export RUBYOPT="-I$(ruby -e 'size = $LOAD_PATH.size; %w(rake test-unit rdoc webrick).each {|r| require r}; puts $LOAD_PATH[...-size].join ?:')" - -# Rakefile is not shipped anymore => emulate its content. -# https://github.com/rubygems/rubygems/blob/v3.3.22/Rakefile#L56-L64 -# The `test_realworld_{default_gem,upgraded_default_gem}` needs the same -# treatment as the have in Ruby repository. Use `GEM_COMMAND` to skip them. -GEM_COMMAND="skip test_realworld_{default_gem,upgraded_default_gem}" \ - ruby -Itest:bundler/lib:lib -e 'Dir.glob "./test/**/test_*.rb", &method(:require)' - \ +%if %{enable_check} +ruby -e 'Dir.glob "./test/**/test_*.rb", &method(:require)' # CVE vulnerability check ruby %{SOURCE11} @@ -199,23 +197,15 @@ ruby %{SOURCE12} %endif %files -%doc CODE_OF_CONDUCT.md -%doc CHANGELOG.md -%doc CONTRIBUTING.md -%doc MAINTAINERS.txt -%doc POLICIES.md -%doc README.md -%doc UPGRADING.md +%doc README* +%doc History.txt %license MIT.txt LICENSE.txt +%doc CVE-*txt %{_bindir}/gem %dir %{rubygems_dir} %{rubygems_dir}/rubygems %{rubygems_dir}/rubygems.rb -%exclude %{rubygems_dir}/rubygems/optparse/.* -%license %{rubygems_dir}/rubygems/optparse/COPYING -%license %{rubygems_dir}/rubygems/resolver/molinillo/LICENSE -%exclude %{rubygems_dir}/rubygems/tsort/.* -%license %{rubygems_dir}/rubygems/tsort/LICENSE.txt +%{rubygems_dir}/ubygems.rb # Explicitly include only RubyGems directory strucure to avoid accidentally # packaged content. @@ -225,100 +215,22 @@ ruby %{SOURCE12} %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 +%files devel +%{_rpmconfigdir}/macros.d/macros.rubygems +%{_rpmconfigdir}/fileattrs/rubygems.attr +%{_rpmconfigdir}/rubygems.req +%{_rpmconfigdir}/rubygems.prov + %files doc %doc %{gem_dir}/doc/* %changelog -* Fri Jul 25 2025 Fedora Release Engineering - 3.3.25-207 -- Rebuilt for https://fedoraproject.org/wiki/Fedora_43_Mass_Rebuild - -* Sun Jan 19 2025 Fedora Release Engineering - 3.3.25-206 -- Rebuilt for https://fedoraproject.org/wiki/Fedora_42_Mass_Rebuild - -* Fri Jul 19 2024 Fedora Release Engineering - 3.3.25-205 -- Rebuilt for https://fedoraproject.org/wiki/Fedora_41_Mass_Rebuild - -* Fri Jan 26 2024 Fedora Release Engineering - 3.3.25-204 -- Rebuilt for https://fedoraproject.org/wiki/Fedora_40_Mass_Rebuild - -* Fri Jul 21 2023 Fedora Release Engineering - 3.3.25-203 -- Rebuilt for https://fedoraproject.org/wiki/Fedora_39_Mass_Rebuild - -* Fri Jan 20 2023 Fedora Release Engineering - 3.3.25-202 -- Rebuilt for https://fedoraproject.org/wiki/Fedora_38_Mass_Rebuild - -* Thu Nov 03 2022 Jun Aruga - 3.3.25-201 -- Update to RubyGems 3.3.25. - Resolves: rhbz#2132563 - -* Thu Sep 08 2022 Vít Ondruch - 3.3.22-201 -- Update to RubyGems 3.3.22. - Resolves: rhbz#1941091 - Resolves: rhbz#2046966 - -* Sat Jul 23 2022 Fedora Release Engineering - 3.2.14-204 -- Rebuilt for https://fedoraproject.org/wiki/Fedora_37_Mass_Rebuild - -* Fri Jan 21 2022 Fedora Release Engineering - 3.2.14-203 -- Rebuilt for https://fedoraproject.org/wiki/Fedora_36_Mass_Rebuild - -* Fri Jul 23 2021 Fedora Release Engineering - 3.2.14-202 -- Rebuilt for https://fedoraproject.org/wiki/Fedora_35_Mass_Rebuild - -* Thu Mar 11 2021 Vít Ondruch - 3.2.14-201 -- Enable additional test cases with Ruby load path setup correctly. - -* Fri Mar 05 2021 Vít Ondruch - 3.2.14-200 -- Update to RubyGems 3.2.14. - Resolves: rhbz#1905813 - Resolves: rhbz#1923699 - -* Wed Jan 27 2021 Fedora Release Engineering - 3.1.4-202 -- Rebuilt for https://fedoraproject.org/wiki/Fedora_34_Mass_Rebuild - -* Wed Jul 29 2020 Fedora Release Engineering - 3.1.4-201 -- Rebuilt for https://fedoraproject.org/wiki/Fedora_33_Mass_Rebuild - -* Wed Jun 24 2020 Vít Ondruch - 3.1.4-200 -- Update to RubyGems 3.1.4. - -* Thu May 28 2020 Vít Ondruch - 3.1.3-201 -- Fix `require` behavior allowing to load libraries multiple times. - Resolves: rhbz#1835836 - -* Thu May 07 2020 Vít Ondruch - 3.1.3-200 -- Update to RubyGems 3.1.3. - -* Thu May 07 2020 Pavel Valena - 3.0.3-106 -- Upgrade to Rubygems 3.0.3. - -* Thu May 07 2020 Vít Ondruch - 2.6.13-106 -- Fix FTBFS due to Ruby 2.7, OpenSSL 1.1.1 and CMake 2.8+ incompatibilities. - Resolves: rhbz#1800046 -- Drop rubygems-devel subpackage. - -* Thu Jan 30 2020 Fedora Release Engineering - 2.6.13-105 -- Rebuilt for https://fedoraproject.org/wiki/Fedora_32_Mass_Rebuild - -* Fri Jul 26 2019 Fedora Release Engineering - 2.6.13-104 -- Rebuilt for https://fedoraproject.org/wiki/Fedora_31_Mass_Rebuild - -* Sat Feb 02 2019 Fedora Release Engineering - 2.6.13-103 -- Rebuilt for https://fedoraproject.org/wiki/Fedora_30_Mass_Rebuild - -* Sat Jul 14 2018 Fedora Release Engineering - 2.6.13-102 -- Rebuilt for https://fedoraproject.org/wiki/Fedora_29_Mass_Rebuild - -* Fri Feb 09 2018 Fedora Release Engineering - 2.6.13-101 -- Rebuilt for https://fedoraproject.org/wiki/Fedora_28_Mass_Rebuild - * Tue Sep 05 2017 Vít Ondruch - 2.6.13-100 - Update to RubyGems 2.6.13. diff --git a/sources b/sources index 8eb1dc0..2e443bc 100644 --- a/sources +++ b/sources @@ -1 +1 @@ -SHA512 (rubygems-3.3.25.tgz) = 0ec39f4110c0ae21b3a2acb97e78220a429b3340a1498d48e663e98ebdc16123cc99b455474bc43d116a6b7c967340aebd77d93c13edcb3f9112e6614759216a +SHA512 (rubygems-2.6.13.tgz) = c952b6061a9a0778db304c3aa5bea693e71ae2564abfb19f8b123eef66eb1e3877fc7c36f4f1527da97bb320870cbfd4574ac57ad88e850a44fadd67ebdac152