Compare commits
202 commits
stream-rub
...
rawhide
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
deb89378b5 | ||
|
|
ed5fc66af7 | ||
|
|
95c21e5775 | ||
|
|
916dd3e4c2 | ||
|
|
bc07cae127 | ||
|
|
4c3cde9ed2 | ||
|
|
5d8c8b3fb5 | ||
|
|
c670682a97 | ||
|
|
4034e3e02c | ||
|
|
9dc850b911 | ||
|
|
6b81f1b80f | ||
|
|
aa9dd7be5f | ||
|
|
97eeae3d75 | ||
|
|
f50637ef39 | ||
|
|
84309be01e | ||
|
|
563fb688b3 | ||
|
|
1aeb02030c | ||
|
|
43d2363c1e | ||
|
|
e7395a7d22 | ||
|
|
a38fdce3da | ||
|
|
da900b8789 |
||
|
|
3541190791 | ||
|
|
7262ed4066 | ||
|
|
e3690ac430 | ||
|
|
5f10b7c93e | ||
|
|
74a9a07c69 | ||
|
|
7b420c76e8 | ||
|
|
4ccd95e387 | ||
|
|
037b0a34f2 | ||
|
|
da4a9f4b88 | ||
|
|
186be743be | ||
|
|
19423ee8d9 | ||
|
|
f241947e6c | ||
|
|
8daf7ccb72 | ||
|
|
b7e197fb88 | ||
|
|
6bed1e3bd5 | ||
|
|
2e6762df8d | ||
|
|
c4e686c716 | ||
|
|
f11fa48d8f | ||
|
|
bd711c9036 | ||
|
|
fde0aac8f9 | ||
|
|
0d81c8b95a | ||
|
|
d03ac3403a | ||
|
|
55661b64e9 | ||
|
|
ca13a51589 | ||
|
|
7724c2d703 | ||
|
|
42b0e43e5a | ||
|
|
c913e4326c | ||
|
|
93638d9e58 | ||
|
|
677893973e | ||
|
|
d9051618e3 | ||
|
|
ff5301a5f3 | ||
|
|
c649282efb | ||
|
|
4ff7de7007 | ||
|
|
5da6a15c57 | ||
|
|
a34f33bc50 | ||
|
|
3008410463 | ||
|
|
ac77c2a354 | ||
|
|
aa7e8debee | ||
|
|
066e0a3d6d | ||
|
|
308b2c0ab2 | ||
|
|
05a6c9c8f3 | ||
|
|
f195b6a3c8 | ||
|
|
321ed23c22 | ||
|
|
ba498ce48c | ||
|
|
8d5b538747 | ||
|
|
5fd12c42e7 | ||
|
|
d432c95c15 | ||
|
|
393e74f1e0 | ||
|
|
1f35109c5e | ||
|
|
64dc6dd3e4 | ||
|
|
814eaf5324 | ||
|
|
da8822cd33 | ||
|
|
9e39fd242a | ||
|
|
31778c5ebd | ||
|
|
8f9fe41ba6 | ||
|
|
59f62d6bc9 | ||
|
|
65acd291de | ||
|
|
9c8400d99a | ||
|
|
d46ef9bbf3 | ||
|
|
ff0f48acd6 | ||
|
|
22597b6039 | ||
|
|
c4043528c1 | ||
|
|
be9fcec798 | ||
|
|
f2899ee090 | ||
|
|
25858e766a | ||
|
|
f8ef5964d0 | ||
|
|
b1748af87f | ||
|
|
2cdb051166 | ||
|
|
9819174c8d | ||
|
|
649a6e3083 | ||
|
|
1d0c071aeb | ||
|
|
79d75fdcdd | ||
|
|
588a4ae9f0 | ||
|
|
c2026da175 | ||
|
|
3f106c188e | ||
|
|
bf921512e2 | ||
|
|
ad7f78b5c8 | ||
|
|
f93afdebdd | ||
|
|
e2951e6856 | ||
|
|
ca94aff023 | ||
|
|
b7b5473796 | ||
|
|
2c91b113bb | ||
|
|
03e8cec9fe | ||
|
|
c2061af620 | ||
|
|
09d0e79c2b | ||
|
|
22d91a0910 | ||
|
|
796a198176 | ||
|
|
aee17a2180 | ||
|
|
df8cc89df4 | ||
|
|
9e774fba70 | ||
|
|
74983bcd56 | ||
|
|
67d5a7b3c6 | ||
|
|
204bab4f7f | ||
|
|
8157cd4820 | ||
|
|
1ff09bed2b | ||
|
|
b0ce095f6d | ||
|
|
a51a61214c | ||
|
|
2da7a540e7 | ||
|
|
a0bcb33eaa | ||
|
|
a28556f684 | ||
|
|
b6d9b2acd1 | ||
|
|
46ee70614f | ||
|
|
b24ebf5ec1 | ||
|
|
08a1249d7f | ||
|
|
5d3688479a | ||
|
|
dbe75d1cb5 | ||
|
|
d584a5bfb3 | ||
|
|
c4f8814a93 | ||
|
|
78a9fbc351 | ||
|
|
d75a6c86f9 | ||
|
|
11a27766bd | ||
|
|
1170d812fe | ||
|
|
089c0a1928 | ||
|
|
63065e7db7 | ||
|
|
6b2ff68f33 | ||
|
|
e6a3dff909 | ||
|
|
a09dbbec17 | ||
|
|
882d68b75c | ||
|
|
26bc979446 | ||
|
|
fbaee91204 | ||
|
|
1b641ac57f | ||
|
|
9e656cf658 | ||
|
|
fd8c8ee765 | ||
|
|
4108f57be7 | ||
|
|
b65d1d3090 | ||
|
|
303495d1bf | ||
|
|
dae90ef93d | ||
|
|
cb0039f53c | ||
|
|
9b149e59e4 | ||
|
|
2bc8b3d5d5 | ||
|
|
3210f66fb1 | ||
|
|
35f28c9a68 | ||
|
|
b7229da165 | ||
|
|
b3e2d7fc60 | ||
|
|
c7513cd67c | ||
|
|
cdeff9e00a | ||
|
|
1e72602218 | ||
|
|
0256efd992 | ||
|
|
64975231d1 | ||
|
|
f63d6e5cd4 | ||
|
|
0e7ccf2b47 | ||
|
|
071cbd0906 | ||
|
|
fcc584306b | ||
|
|
9a03f61609 | ||
|
|
15d70f8b4a | ||
|
|
f11a9b4fe3 | ||
|
|
2a352348bd | ||
|
|
986dc48123 | ||
|
|
be9961f6d0 | ||
|
|
946f8b8693 | ||
|
|
8b746d13cf | ||
|
|
78c9d9e324 | ||
|
|
d471fb8f62 | ||
|
|
4979be53ac | ||
|
|
d461276d48 | ||
|
|
064a0517d6 | ||
|
|
bc5cb6094e | ||
|
|
0963ae5102 | ||
|
|
29816481d1 | ||
|
|
26bc2eb795 | ||
|
|
102ff85d98 | ||
|
|
50345c3ee4 | ||
|
|
fb50c77241 | ||
|
|
ca69f778a9 | ||
|
|
838cca0381 | ||
|
|
baf046a6a4 | ||
|
|
c63e907e87 | ||
|
|
e5cef5e271 | ||
|
|
759d6796c6 | ||
|
|
a9b3ba531f | ||
|
|
f2d727806b | ||
|
|
79683d7d62 | ||
|
|
40937c8a7a | ||
|
|
40610a988c | ||
|
|
dde320d13d | ||
|
|
26cfdf277e | ||
|
|
345ce0e5b8 | ||
|
|
197c02993b | ||
|
|
bb318e2964 | ||
|
|
8454ff1601 | ||
|
|
3696d7be37 |
40 changed files with 2796 additions and 2109 deletions
1
.fmf/version
Normal file
1
.fmf/version
Normal file
|
|
@ -0,0 +1 @@
|
||||||
|
1
|
||||||
6
.gitignore
vendored
6
.gitignore
vendored
|
|
@ -1,4 +1,6 @@
|
||||||
/*/
|
/*/
|
||||||
/ruby-2.*.tar.bz2
|
/ruby-*.tar.xz
|
||||||
/ruby-2.*.tar.xz
|
/rexml-*.gem
|
||||||
/*.rpm
|
/*.rpm
|
||||||
|
|
||||||
|
!/plans/
|
||||||
|
|
|
||||||
|
|
@ -1,8 +0,0 @@
|
||||||
if defined?(Gem)
|
|
||||||
require 'rubygems.rb'
|
|
||||||
|
|
||||||
begin
|
|
||||||
require 'abrt'
|
|
||||||
rescue LoadError
|
|
||||||
end
|
|
||||||
end
|
|
||||||
|
|
@ -2,13 +2,55 @@
|
||||||
%gem_dir %{_datadir}/gems
|
%gem_dir %{_datadir}/gems
|
||||||
%gem_archdir %{_libdir}/gems
|
%gem_archdir %{_libdir}/gems
|
||||||
|
|
||||||
|
# %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}}
|
||||||
|
|
||||||
|
# %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.
|
# Common gem locations and files.
|
||||||
%gem_instdir %{gem_dir}/gems/%{gem_name}-%{version}%{?prerelease}
|
#
|
||||||
%gem_extdir_mri %{gem_archdir}/%{name}/%{gem_name}-%{version}%{?prerelease}
|
# These macros leverages %gem_name_version macro and accepts custom gem_name.
|
||||||
%gem_libdir %{gem_instdir}/lib
|
#
|
||||||
%gem_cache %{gem_dir}/cache/%{gem_name}-%{version}%{?prerelease}.gem
|
# -d Use default gem install location.
|
||||||
%gem_spec %{gem_dir}/specifications/%{gem_name}-%{version}%{?prerelease}.gemspec
|
#
|
||||||
%gem_docdir %{gem_dir}/doc/%{gem_name}-%{version}%{?prerelease}
|
%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.
|
# %gem_install - Install gem into appropriate directory.
|
||||||
|
|
@ -21,7 +63,7 @@
|
||||||
%gem_install(d:n:) \
|
%gem_install(d:n:) \
|
||||||
mkdir -p %{-d*}%{!?-d:.%{gem_dir}} \
|
mkdir -p %{-d*}%{!?-d:.%{gem_dir}} \
|
||||||
\
|
\
|
||||||
CONFIGURE_ARGS="--with-cflags='%{optflags}' --with-cxxflags='%{optflags}' $CONFIGURE_ARGS" \\\
|
CONFIGURE_ARGS="--with-cflags='%{optflags}' --with-cxxflags='%{optflags}' --with-ldflags='%{build_ldflags}' $CONFIGURE_ARGS" \\\
|
||||||
gem install \\\
|
gem install \\\
|
||||||
-V \\\
|
-V \\\
|
||||||
--local \\\
|
--local \\\
|
||||||
|
|
@ -32,16 +74,6 @@ gem install \\\
|
||||||
%{nil}
|
%{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_* macros is not essential, but it is usefull
|
# The 'read' command in %%gemspec_* macros is not essential, but it is usefull
|
||||||
# to make the sript appear in build log.
|
# to make the sript appear in build log.
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -87,41 +87,51 @@ module Gem
|
||||||
# Remove methods we are going to override. This avoids "method redefined;"
|
# Remove methods we are going to override. This avoids "method redefined;"
|
||||||
# warnings otherwise issued by Ruby.
|
# 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_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_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
|
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.
|
# RubyGems default overrides.
|
||||||
|
|
||||||
def default_dir
|
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
|
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
|
def default_path
|
||||||
path = default_dirs.collect {|location, paths| paths[:gem_dir]}
|
path = default_dirs.collect {|location, paths| paths[:gem_dir]}
|
||||||
path.unshift Gem.user_dir if File.exist? Gem.user_home
|
path.unshift Gem.user_dir if File.exist? Gem.user_home
|
||||||
path
|
path
|
||||||
end
|
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
|
def default_ext_dir_for base_dir
|
||||||
dir = if rpmbuild?
|
dir = if rpmbuild?
|
||||||
build_dir = base_dir.chomp Gem.default_dirs[:system][:gem_dir]
|
build_dir = base_dir.chomp Gem.default_dirs[:system][:gem_dir]
|
||||||
|
|
|
||||||
6
plans/all.fmf
Normal file
6
plans/all.fmf
Normal file
|
|
@ -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
|
||||||
28
rdoc-pr1531-fix-mutilple-document-installation.patch
Normal file
28
rdoc-pr1531-fix-mutilple-document-installation.patch
Normal file
|
|
@ -0,0 +1,28 @@
|
||||||
|
From 994ee4c17fb8c217ab0335df55620c6bdb5d5cbe Mon Sep 17 00:00:00 2001
|
||||||
|
From: tompng <tomoyapenguin@gmail.com>
|
||||||
|
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
|
||||||
166
rpm_test_helper.rb
Normal file
166
rpm_test_helper.rb
Normal file
|
|
@ -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
|
||||||
|
|
@ -1,25 +0,0 @@
|
||||||
From 28cc0749d6729aa2444661ee7b411e183fe220b0 Mon Sep 17 00:00:00 2001
|
|
||||||
From: =?UTF-8?q?V=C3=ADt=20Ondruch?= <vondruch@redhat.com>
|
|
||||||
Date: Mon, 19 Nov 2012 15:14:51 +0100
|
|
||||||
Subject: [PATCH] Verbose mkmf.
|
|
||||||
|
|
||||||
---
|
|
||||||
lib/mkmf.rb | 2 +-
|
|
||||||
1 file changed, 1 insertion(+), 1 deletion(-)
|
|
||||||
|
|
||||||
diff --git a/lib/mkmf.rb b/lib/mkmf.rb
|
|
||||||
index 682eb46..e6b1445 100644
|
|
||||||
--- a/lib/mkmf.rb
|
|
||||||
+++ b/lib/mkmf.rb
|
|
||||||
@@ -1911,7 +1911,7 @@ def configuration(srcdir)
|
|
||||||
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.3.1
|
|
||||||
|
|
||||||
|
|
@ -1,58 +0,0 @@
|
||||||
From 996012f6abe0ce4d68a2de9f249935c6d5b467bc Mon Sep 17 00:00:00 2001
|
|
||||||
From: =?UTF-8?q?V=C3=ADt=20Ondruch?= <vondruch@redhat.com>
|
|
||||||
Date: Fri, 4 Oct 2013 22:13:11 +0200
|
|
||||||
Subject: [PATCH] Allow to specify addition preludes by configuration option.
|
|
||||||
|
|
||||||
---
|
|
||||||
Makefile.in | 2 ++
|
|
||||||
common.mk | 2 +-
|
|
||||||
configure.ac | 7 +++++++
|
|
||||||
3 files changed, 10 insertions(+), 1 deletion(-)
|
|
||||||
|
|
||||||
diff --git a/Makefile.in b/Makefile.in
|
|
||||||
index 7e8ed82..7916993 100644
|
|
||||||
--- a/Makefile.in
|
|
||||||
+++ b/Makefile.in
|
|
||||||
@@ -154,6 +154,8 @@ BOOTSTRAPRUBY = @BOOTSTRAPRUBY@
|
|
||||||
COROUTINE_H = @X_FIBER_COROUTINE_H@
|
|
||||||
COROUTINE_OBJ = $(COROUTINE_H:.h=.@OBJEXT@)
|
|
||||||
|
|
||||||
+OPTIONAL_PRELUDES = @OPTIONAL_PRELUDES@
|
|
||||||
+
|
|
||||||
#### End of system configuration section. ####
|
|
||||||
|
|
||||||
MAJOR= @MAJOR@
|
|
||||||
diff --git a/common.mk b/common.mk
|
|
||||||
index 5cfbc3d..3f0a82e 100644
|
|
||||||
--- a/common.mk
|
|
||||||
+++ b/common.mk
|
|
||||||
@@ -156,7 +156,7 @@ ALLOBJS = $(NORMALMAINOBJ) $(MINIOBJS) $(COMMONOBJS) $(INITOBJS)
|
|
||||||
GOLFOBJS = goruby.$(OBJEXT) golf_prelude.$(OBJEXT)
|
|
||||||
|
|
||||||
DEFAULT_PRELUDES = $(GEM_PRELUDE)
|
|
||||||
-PRELUDE_SCRIPTS = $(srcdir)/prelude.rb $(DEFAULT_PRELUDES)
|
|
||||||
+PRELUDE_SCRIPTS = $(srcdir)/prelude.rb $(DEFAULT_PRELUDES) $(OPTIONAL_PRELUDES)
|
|
||||||
GEM_PRELUDE = $(srcdir)/gem_prelude.rb
|
|
||||||
PRELUDES = {$(srcdir)}prelude.c {$(srcdir)}miniprelude.c
|
|
||||||
GOLFPRELUDES = {$(srcdir)}golf_prelude.c
|
|
||||||
diff --git a/configure.ac b/configure.ac
|
|
||||||
index 028ef7ca3e..cdeff87871 100644
|
|
||||||
--- a/configure.ac
|
|
||||||
+++ b/configure.ac
|
|
||||||
@@ -3872,6 +3872,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]),
|
|
||||||
[
|
|
||||||
--
|
|
||||||
1.8.3.1
|
|
||||||
|
|
||||||
|
|
@ -1,4 +1,4 @@
|
||||||
From 07c666ba5c3360dd6f43605a8ac7c85c99c1721f Mon Sep 17 00:00:00 2001
|
From e1293f665128b0d9c5bfa0b5beeab4afebf07e6a Mon Sep 17 00:00:00 2001
|
||||||
From: =?UTF-8?q?V=C3=ADt=20Ondruch?= <vondruch@redhat.com>
|
From: =?UTF-8?q?V=C3=ADt=20Ondruch?= <vondruch@redhat.com>
|
||||||
Date: Tue, 1 Oct 2013 12:22:40 +0200
|
Date: Tue, 1 Oct 2013 12:22:40 +0200
|
||||||
Subject: [PATCH] Allow to configure libruby.so placement.
|
Subject: [PATCH] Allow to configure libruby.so placement.
|
||||||
|
|
@ -8,10 +8,10 @@ Subject: [PATCH] Allow to configure libruby.so placement.
|
||||||
1 file changed, 5 insertions(+)
|
1 file changed, 5 insertions(+)
|
||||||
|
|
||||||
diff --git a/configure.ac b/configure.ac
|
diff --git a/configure.ac b/configure.ac
|
||||||
index 11fc237552..b77e88fc37 100644
|
index a64358fada..b3bdfad1eb 100644
|
||||||
--- a/configure.ac
|
--- a/configure.ac
|
||||||
+++ b/configure.ac
|
+++ b/configure.ac
|
||||||
@@ -3102,6 +3102,11 @@ AS_IF([test ${multiarch+set}], [
|
@@ -3556,6 +3556,11 @@ AS_IF([test ${multiarch+set}], [
|
||||||
])
|
])
|
||||||
|
|
||||||
archlibdir='${libdir}/${arch}'
|
archlibdir='${libdir}/${arch}'
|
||||||
|
|
@ -23,6 +23,3 @@ index 11fc237552..b77e88fc37 100644
|
||||||
sitearchlibdir='${libdir}/${sitearch}'
|
sitearchlibdir='${libdir}/${sitearch}'
|
||||||
archincludedir='${includedir}/${arch}'
|
archincludedir='${includedir}/${arch}'
|
||||||
sitearchincludedir='${includedir}/${sitearch}'
|
sitearchincludedir='${includedir}/${sitearch}'
|
||||||
--
|
|
||||||
1.8.3.1
|
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -1,4 +1,4 @@
|
||||||
From e24d97c938c481450ed80ec83e5399595946c1ae Mon Sep 17 00:00:00 2001
|
From 6062f4976c5b51f8b952b9f6745175be7b1c5ff9 Mon Sep 17 00:00:00 2001
|
||||||
From: =?UTF-8?q?V=C3=ADt=20Ondruch?= <vondruch@redhat.com>
|
From: =?UTF-8?q?V=C3=ADt=20Ondruch?= <vondruch@redhat.com>
|
||||||
Date: Fri, 8 Feb 2013 22:48:41 +0100
|
Date: Fri, 8 Feb 2013 22:48:41 +0100
|
||||||
Subject: [PATCH] Prevent duplicated paths when empty version string is
|
Subject: [PATCH] Prevent duplicated paths when empty version string is
|
||||||
|
|
@ -11,10 +11,10 @@ Subject: [PATCH] Prevent duplicated paths when empty version string is
|
||||||
3 files changed, 15 insertions(+), 2 deletions(-)
|
3 files changed, 15 insertions(+), 2 deletions(-)
|
||||||
|
|
||||||
diff --git a/configure.ac b/configure.ac
|
diff --git a/configure.ac b/configure.ac
|
||||||
index 999e2d6d5d..11fc237552 100644
|
index 2bc5153141..a64358fada 100644
|
||||||
--- a/configure.ac
|
--- a/configure.ac
|
||||||
+++ b/configure.ac
|
+++ b/configure.ac
|
||||||
@@ -3727,7 +3727,8 @@ AS_CASE(["$ruby_version_dir_name"],
|
@@ -4472,7 +4472,8 @@ AS_CASE(["$ruby_version_dir_name"],
|
||||||
ruby_version_dir=/'${ruby_version_dir_name}'
|
ruby_version_dir=/'${ruby_version_dir_name}'
|
||||||
|
|
||||||
if test -z "${ruby_version_dir_name}"; then
|
if test -z "${ruby_version_dir_name}"; then
|
||||||
|
|
@ -25,7 +25,7 @@ index 999e2d6d5d..11fc237552 100644
|
||||||
|
|
||||||
rubylibdir='${rubylibprefix}'${ruby_version_dir}
|
rubylibdir='${rubylibprefix}'${ruby_version_dir}
|
||||||
diff --git a/loadpath.c b/loadpath.c
|
diff --git a/loadpath.c b/loadpath.c
|
||||||
index 9160031..0d4d953 100644
|
index b8969e6998..bbfd4daa78 100644
|
||||||
--- a/loadpath.c
|
--- a/loadpath.c
|
||||||
+++ b/loadpath.c
|
+++ b/loadpath.c
|
||||||
@@ -65,21 +65,33 @@ const char ruby_initial_load_paths[] =
|
@@ -65,21 +65,33 @@ const char ruby_initial_load_paths[] =
|
||||||
|
|
@ -63,7 +63,7 @@ index 9160031..0d4d953 100644
|
||||||
|
|
||||||
RUBY_LIB "\0"
|
RUBY_LIB "\0"
|
||||||
diff --git a/tool/mkconfig.rb b/tool/mkconfig.rb
|
diff --git a/tool/mkconfig.rb b/tool/mkconfig.rb
|
||||||
index 07076d4..35e6c3c 100755
|
index db74115730..2b01796abf 100755
|
||||||
--- a/tool/mkconfig.rb
|
--- a/tool/mkconfig.rb
|
||||||
+++ b/tool/mkconfig.rb
|
+++ b/tool/mkconfig.rb
|
||||||
@@ -114,7 +114,7 @@
|
@@ -114,7 +114,7 @@
|
||||||
|
|
@ -75,6 +75,3 @@ index 07076d4..35e6c3c 100755
|
||||||
when /^ARCH_FLAG$/
|
when /^ARCH_FLAG$/
|
||||||
val = "arch_flag || #{val}" if universal
|
val = "arch_flag || #{val}" if universal
|
||||||
when /^UNIVERSAL_ARCHNAMES$/
|
when /^UNIVERSAL_ARCHNAMES$/
|
||||||
--
|
|
||||||
1.9.0
|
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -1,4 +1,4 @@
|
||||||
From 2089cab72b38d6d5e7ba2b596e41014209acad30 Mon Sep 17 00:00:00 2001
|
From 9e70f6e4b8771965a30ecfb6d1c6015df350ca55 Mon Sep 17 00:00:00 2001
|
||||||
From: =?UTF-8?q?V=C3=ADt=20Ondruch?= <vondruch@redhat.com>
|
From: =?UTF-8?q?V=C3=ADt=20Ondruch?= <vondruch@redhat.com>
|
||||||
Date: Mon, 19 Nov 2012 14:37:28 +0100
|
Date: Mon, 19 Nov 2012 14:37:28 +0100
|
||||||
Subject: [PATCH] Always use i386.
|
Subject: [PATCH] Always use i386.
|
||||||
|
|
@ -8,10 +8,10 @@ Subject: [PATCH] Always use i386.
|
||||||
1 file changed, 2 insertions(+)
|
1 file changed, 2 insertions(+)
|
||||||
|
|
||||||
diff --git a/configure.ac b/configure.ac
|
diff --git a/configure.ac b/configure.ac
|
||||||
index b77e88fc37..6bba453e3c 100644
|
index b3bdfad1eb..411322a27f 100644
|
||||||
--- a/configure.ac
|
--- a/configure.ac
|
||||||
+++ b/configure.ac
|
+++ b/configure.ac
|
||||||
@@ -3791,6 +3791,8 @@ AC_SUBST(vendorarchdir)dnl
|
@@ -4536,6 +4536,8 @@ AC_SUBST(vendorarchdir)dnl
|
||||||
AC_SUBST(CONFIGURE, "`echo $0 | sed 's|.*/||'`")dnl
|
AC_SUBST(CONFIGURE, "`echo $0 | sed 's|.*/||'`")dnl
|
||||||
AC_SUBST(configure_args, "`echo "${ac_configure_args}" | sed 's/\\$/$$/g'`")dnl
|
AC_SUBST(configure_args, "`echo "${ac_configure_args}" | sed 's/\\$/$$/g'`")dnl
|
||||||
|
|
||||||
|
|
@ -20,6 +20,3 @@ index b77e88fc37..6bba453e3c 100644
|
||||||
AS_IF([test "${universal_binary-no}" = yes ], [
|
AS_IF([test "${universal_binary-no}" = yes ], [
|
||||||
arch="universal-${target_os}"
|
arch="universal-${target_os}"
|
||||||
AS_IF([test "${rb_cv_architecture_available}" = yes], [
|
AS_IF([test "${rb_cv_architecture_available}" = yes], [
|
||||||
--
|
|
||||||
1.8.3.1
|
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -1,4 +1,4 @@
|
||||||
From 94da59aafacc6a9efe829529eb51385588d6f149 Mon Sep 17 00:00:00 2001
|
From c7952996ac9738a14bea0a1a971fea13460a6c94 Mon Sep 17 00:00:00 2001
|
||||||
From: =?UTF-8?q?V=C3=ADt=20Ondruch?= <vondruch@redhat.com>
|
From: =?UTF-8?q?V=C3=ADt=20Ondruch?= <vondruch@redhat.com>
|
||||||
Date: Fri, 11 Nov 2011 13:14:45 +0100
|
Date: Fri, 11 Nov 2011 13:14:45 +0100
|
||||||
Subject: [PATCH] Allow to install RubyGems into custom location, outside of
|
Subject: [PATCH] Allow to install RubyGems into custom location, outside of
|
||||||
|
|
@ -12,10 +12,10 @@ Subject: [PATCH] Allow to install RubyGems into custom location, outside of
|
||||||
4 files changed, 22 insertions(+)
|
4 files changed, 22 insertions(+)
|
||||||
|
|
||||||
diff --git a/configure.ac b/configure.ac
|
diff --git a/configure.ac b/configure.ac
|
||||||
index 6bba453e3c..028ef7ca3e 100644
|
index 411322a27f..b5f842a512 100644
|
||||||
--- a/configure.ac
|
--- a/configure.ac
|
||||||
+++ b/configure.ac
|
+++ b/configure.ac
|
||||||
@@ -3763,6 +3763,10 @@ AC_ARG_WITH(vendorarchdir,
|
@@ -4508,6 +4508,10 @@ AC_ARG_WITH(vendorarchdir,
|
||||||
[vendorarchdir=$withval],
|
[vendorarchdir=$withval],
|
||||||
[vendorarchdir=${multiarch+'${rubysitearchprefix}/vendor_ruby'${ruby_version_dir}}${multiarch-'${vendorlibdir}/${sitearch}'}])
|
[vendorarchdir=${multiarch+'${rubysitearchprefix}/vendor_ruby'${ruby_version_dir}}${multiarch-'${vendorlibdir}/${sitearch}'}])
|
||||||
|
|
||||||
|
|
@ -26,7 +26,7 @@ index 6bba453e3c..028ef7ca3e 100644
|
||||||
AS_IF([test "${LOAD_RELATIVE+set}"], [
|
AS_IF([test "${LOAD_RELATIVE+set}"], [
|
||||||
AC_DEFINE_UNQUOTED(LOAD_RELATIVE, $LOAD_RELATIVE)
|
AC_DEFINE_UNQUOTED(LOAD_RELATIVE, $LOAD_RELATIVE)
|
||||||
RUBY_EXEC_PREFIX=''
|
RUBY_EXEC_PREFIX=''
|
||||||
@@ -3787,6 +3787,7 @@ AC_SUBST(sitearchdir)dnl
|
@@ -4532,6 +4536,7 @@ AC_SUBST(sitearchdir)dnl
|
||||||
AC_SUBST(vendordir)dnl
|
AC_SUBST(vendordir)dnl
|
||||||
AC_SUBST(vendorlibdir)dnl
|
AC_SUBST(vendorlibdir)dnl
|
||||||
AC_SUBST(vendorarchdir)dnl
|
AC_SUBST(vendorarchdir)dnl
|
||||||
|
|
@ -35,7 +35,7 @@ index 6bba453e3c..028ef7ca3e 100644
|
||||||
AC_SUBST(CONFIGURE, "`echo $0 | sed 's|.*/||'`")dnl
|
AC_SUBST(CONFIGURE, "`echo $0 | sed 's|.*/||'`")dnl
|
||||||
AC_SUBST(configure_args, "`echo "${ac_configure_args}" | sed 's/\\$/$$/g'`")dnl
|
AC_SUBST(configure_args, "`echo "${ac_configure_args}" | sed 's/\\$/$$/g'`")dnl
|
||||||
diff --git a/loadpath.c b/loadpath.c
|
diff --git a/loadpath.c b/loadpath.c
|
||||||
index 623dc9d..74c5d9e 100644
|
index bbfd4daa78..69677a9297 100644
|
||||||
--- a/loadpath.c
|
--- a/loadpath.c
|
||||||
+++ b/loadpath.c
|
+++ b/loadpath.c
|
||||||
@@ -94,6 +94,10 @@ const char ruby_initial_load_paths[] =
|
@@ -94,6 +94,10 @@ const char ruby_initial_load_paths[] =
|
||||||
|
|
@ -50,7 +50,7 @@ index 623dc9d..74c5d9e 100644
|
||||||
#ifdef RUBY_THINARCH
|
#ifdef RUBY_THINARCH
|
||||||
RUBY_ARCH_LIB_FOR(RUBY_THINARCH) "\0"
|
RUBY_ARCH_LIB_FOR(RUBY_THINARCH) "\0"
|
||||||
diff --git a/template/verconf.h.tmpl b/template/verconf.h.tmpl
|
diff --git a/template/verconf.h.tmpl b/template/verconf.h.tmpl
|
||||||
index 79c003e..34f2382 100644
|
index 9ba2bd6de5..4ec4ce9353 100644
|
||||||
--- a/template/verconf.h.tmpl
|
--- a/template/verconf.h.tmpl
|
||||||
+++ b/template/verconf.h.tmpl
|
+++ b/template/verconf.h.tmpl
|
||||||
@@ -36,6 +36,9 @@
|
@@ -36,6 +36,9 @@
|
||||||
|
|
@ -64,10 +64,10 @@ index 79c003e..34f2382 100644
|
||||||
% R = {}
|
% R = {}
|
||||||
% R["ruby_version"] = '"RUBY_LIB_VERSION"'
|
% R["ruby_version"] = '"RUBY_LIB_VERSION"'
|
||||||
diff --git a/tool/rbinstall.rb b/tool/rbinstall.rb
|
diff --git a/tool/rbinstall.rb b/tool/rbinstall.rb
|
||||||
index d8987af..1efbd33 100755
|
index a9e6365b27..7117e65e82 100755
|
||||||
--- a/tool/rbinstall.rb
|
--- a/tool/rbinstall.rb
|
||||||
+++ b/tool/rbinstall.rb
|
+++ b/tool/rbinstall.rb
|
||||||
@@ -338,6 +338,7 @@ if CONFIG["vendordir"]
|
@@ -393,6 +393,7 @@ def CONFIG.[](name, mandatory = false)
|
||||||
vendorlibdir = CONFIG["vendorlibdir"]
|
vendorlibdir = CONFIG["vendorlibdir"]
|
||||||
vendorarchlibdir = CONFIG["vendorarchdir"]
|
vendorarchlibdir = CONFIG["vendorarchdir"]
|
||||||
end
|
end
|
||||||
|
|
@ -75,7 +75,7 @@ index d8987af..1efbd33 100755
|
||||||
mandir = CONFIG["mandir", true]
|
mandir = CONFIG["mandir", true]
|
||||||
docdir = CONFIG["docdir", true]
|
docdir = CONFIG["docdir", true]
|
||||||
enable_shared = CONFIG["ENABLE_SHARED"] == 'yes'
|
enable_shared = CONFIG["ENABLE_SHARED"] == 'yes'
|
||||||
@@ -564,7 +565,16 @@ end
|
@@ -1082,7 +1083,16 @@ def (bins = []).add(name)
|
||||||
install?(:local, :comm, :lib) do
|
install?(:local, :comm, :lib) do
|
||||||
prepare "library scripts", rubylibdir
|
prepare "library scripts", rubylibdir
|
||||||
noinst = %w[*.txt *.rdoc *.gemspec]
|
noinst = %w[*.txt *.rdoc *.gemspec]
|
||||||
|
|
@ -92,6 +92,3 @@ index d8987af..1efbd33 100755
|
||||||
end
|
end
|
||||||
|
|
||||||
install?(:local, :comm, :hdr, :'comm-hdr') do
|
install?(:local, :comm, :hdr, :'comm-hdr') do
|
||||||
--
|
|
||||||
1.8.3.1
|
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -1,28 +0,0 @@
|
||||||
From 07eb5f5e775dec01a92a8b13910eaced9e8ee0cd Mon Sep 17 00:00:00 2001
|
|
||||||
From: =?UTF-8?q?V=C3=ADt=20Ondruch?= <vondruch@redhat.com>
|
|
||||||
Date: Tue, 2 Dec 2014 10:56:58 +0100
|
|
||||||
Subject: [PATCH] Generate preludes using miniruby.
|
|
||||||
|
|
||||||
---
|
|
||||||
common.mk | 4 ++--
|
|
||||||
1 file changed, 2 insertions(+), 2 deletions(-)
|
|
||||||
|
|
||||||
diff --git a/common.mk b/common.mk
|
|
||||||
index 168dc52..20c218a 100644
|
|
||||||
--- a/common.mk
|
|
||||||
+++ b/common.mk
|
|
||||||
@@ -1053,9 +1053,9 @@ $(MINIPRELUDE_C): $(COMPILE_PRELUDE)
|
|
||||||
$(srcdir)/template/prelude.c.tmpl
|
|
||||||
|
|
||||||
$(PRELUDE_C): $(COMPILE_PRELUDE) \
|
|
||||||
- $(PRELUDE_SCRIPTS)
|
|
||||||
+ $(PRELUDE_SCRIPTS) $(PREP)
|
|
||||||
$(ECHO) generating $@
|
|
||||||
- $(Q) $(BASERUBY) $(srcdir)/tool/generic_erb.rb -I$(srcdir) -c -o $@ \
|
|
||||||
+ $(Q) $(MINIRUBY) $(srcdir)/tool/generic_erb.rb -I$(srcdir) -c -o $@ \
|
|
||||||
$(srcdir)/template/prelude.c.tmpl $(PRELUDE_SCRIPTS)
|
|
||||||
|
|
||||||
$(GOLF_PRELUDE_C): $(COMPILE_PRELUDE) {$(srcdir)}golf_prelude.rb
|
|
||||||
--
|
|
||||||
2.6.3
|
|
||||||
|
|
||||||
|
|
@ -0,0 +1,22 @@
|
||||||
|
From f833e213596b0bcfad8264a555eb5093303fb5f2 Mon Sep 17 00:00:00 2001
|
||||||
|
From: Jarek Prokop <jprokop@redhat.com>
|
||||||
|
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
|
||||||
|
|
||||||
|
|
@ -1,4 +1,4 @@
|
||||||
From 4fc1be3af3f58621bb751c9e63c208b15c0e8d16 Mon Sep 17 00:00:00 2001
|
From 5406ea4b4b13db747e5c1f8341bb257b4da04435 Mon Sep 17 00:00:00 2001
|
||||||
From: =?UTF-8?q?V=C3=ADt=20Ondruch?= <vondruch@redhat.com>
|
From: =?UTF-8?q?V=C3=ADt=20Ondruch?= <vondruch@redhat.com>
|
||||||
Date: Tue, 31 Mar 2015 16:21:04 +0200
|
Date: Tue, 31 Mar 2015 16:21:04 +0200
|
||||||
Subject: [PATCH 1/4] Use ruby_version_dir_name for versioned directories.
|
Subject: [PATCH 1/4] Use ruby_version_dir_name for versioned directories.
|
||||||
|
|
@ -12,15 +12,15 @@ ruby_version_dir_name now specifies custom version string for versioned
|
||||||
directories, e.g. instead of default X.Y.Z, you can specify whatever
|
directories, e.g. instead of default X.Y.Z, you can specify whatever
|
||||||
string.
|
string.
|
||||||
---
|
---
|
||||||
configure.ac | 64 ++++++++++++++++++++++++---------------------
|
configure.ac | 66 ++++++++++++++++++++++++---------------------
|
||||||
template/ruby.pc.in | 1 +
|
template/ruby.pc.in | 1 +
|
||||||
2 files changed, 35 insertions(+), 30 deletions(-)
|
2 files changed, 36 insertions(+), 31 deletions(-)
|
||||||
|
|
||||||
diff --git a/configure.ac b/configure.ac
|
diff --git a/configure.ac b/configure.ac
|
||||||
index 8ea969412f..a00f2b6776 100644
|
index 2bbce78fd0..9d8662369c 100644
|
||||||
--- a/configure.ac
|
--- a/configure.ac
|
||||||
+++ b/configure.ac
|
+++ b/configure.ac
|
||||||
@@ -3678,9 +3678,6 @@ AS_CASE(["$target_os"],
|
@@ -4422,9 +4422,6 @@ AS_CASE(["$target_os"],
|
||||||
rubyw_install_name='$(RUBYW_INSTALL_NAME)'
|
rubyw_install_name='$(RUBYW_INSTALL_NAME)'
|
||||||
])
|
])
|
||||||
|
|
||||||
|
|
@ -30,7 +30,7 @@ index 8ea969412f..a00f2b6776 100644
|
||||||
rubyarchprefix=${multiarch+'${archlibdir}/${RUBY_BASE_NAME}'}${multiarch-'${rubylibprefix}/${arch}'}
|
rubyarchprefix=${multiarch+'${archlibdir}/${RUBY_BASE_NAME}'}${multiarch-'${rubylibprefix}/${arch}'}
|
||||||
AC_ARG_WITH(rubyarchprefix,
|
AC_ARG_WITH(rubyarchprefix,
|
||||||
AS_HELP_STRING([--with-rubyarchprefix=DIR],
|
AS_HELP_STRING([--with-rubyarchprefix=DIR],
|
||||||
@@ -3703,56 +3703,62 @@ AC_ARG_WITH(ridir,
|
@@ -4447,57 +4444,63 @@ AC_ARG_WITH(ridir,
|
||||||
AC_SUBST(ridir)
|
AC_SUBST(ridir)
|
||||||
AC_SUBST(RI_BASE_NAME)
|
AC_SUBST(RI_BASE_NAME)
|
||||||
|
|
||||||
|
|
@ -46,6 +46,7 @@ index 8ea969412f..a00f2b6776 100644
|
||||||
-AS_IF([test ${RUBY_LIB_VERSION_STYLE+set}], [
|
-AS_IF([test ${RUBY_LIB_VERSION_STYLE+set}], [
|
||||||
- {
|
- {
|
||||||
- echo "#define RUBY_LIB_VERSION_STYLE $RUBY_LIB_VERSION_STYLE"
|
- echo "#define RUBY_LIB_VERSION_STYLE $RUBY_LIB_VERSION_STYLE"
|
||||||
|
- echo '@%:@include "confdefs.h"'
|
||||||
- echo '#define STRINGIZE(x) x'
|
- echo '#define STRINGIZE(x) x'
|
||||||
- test -f revision.h -o -f "${srcdir}/revision.h" || echo '#define RUBY_REVISION 0'
|
- test -f revision.h -o -f "${srcdir}/revision.h" || echo '#define RUBY_REVISION 0'
|
||||||
- echo '#include "version.h"'
|
- echo '#include "version.h"'
|
||||||
|
|
@ -61,6 +62,7 @@ index 8ea969412f..a00f2b6776 100644
|
||||||
+RUBY_LIB_VERSION_STYLE='3 /* full */'
|
+RUBY_LIB_VERSION_STYLE='3 /* full */'
|
||||||
+{
|
+{
|
||||||
+echo "#define RUBY_LIB_VERSION_STYLE $RUBY_LIB_VERSION_STYLE"
|
+echo "#define RUBY_LIB_VERSION_STYLE $RUBY_LIB_VERSION_STYLE"
|
||||||
|
+echo '@%:@include "confdefs.h"'
|
||||||
+echo '#define STRINGIZE(x) x'
|
+echo '#define STRINGIZE(x) x'
|
||||||
+test -f revision.h -o -f "${srcdir}/revision.h" || echo '#define RUBY_REVISION 0'
|
+test -f revision.h -o -f "${srcdir}/revision.h" || echo '#define RUBY_REVISION 0'
|
||||||
+echo '#include "version.h"'
|
+echo '#include "version.h"'
|
||||||
|
|
@ -120,7 +122,7 @@ index 8ea969412f..a00f2b6776 100644
|
||||||
|
|
||||||
AS_IF([test "${LOAD_RELATIVE+set}"], [
|
AS_IF([test "${LOAD_RELATIVE+set}"], [
|
||||||
AC_DEFINE_UNQUOTED(LOAD_RELATIVE, $LOAD_RELATIVE)
|
AC_DEFINE_UNQUOTED(LOAD_RELATIVE, $LOAD_RELATIVE)
|
||||||
@@ -3769,6 +3769,7 @@ AC_SUBST(sitearchincludedir)dnl
|
@@ -4514,6 +4517,7 @@ AC_SUBST(sitearchincludedir)dnl
|
||||||
AC_SUBST(arch)dnl
|
AC_SUBST(arch)dnl
|
||||||
AC_SUBST(sitearch)dnl
|
AC_SUBST(sitearch)dnl
|
||||||
AC_SUBST(ruby_version)dnl
|
AC_SUBST(ruby_version)dnl
|
||||||
|
|
@ -129,49 +131,32 @@ index 8ea969412f..a00f2b6776 100644
|
||||||
AC_SUBST(rubyarchdir)dnl
|
AC_SUBST(rubyarchdir)dnl
|
||||||
AC_SUBST(sitedir)dnl
|
AC_SUBST(sitedir)dnl
|
||||||
diff --git a/template/ruby.pc.in b/template/ruby.pc.in
|
diff --git a/template/ruby.pc.in b/template/ruby.pc.in
|
||||||
index 8a2c066..c81b211 100644
|
index 6901ec2320..9b7b787208 100644
|
||||||
--- a/template/ruby.pc.in
|
--- a/template/ruby.pc.in
|
||||||
+++ b/template/ruby.pc.in
|
+++ b/template/ruby.pc.in
|
||||||
@@ -9,6 +9,7 @@ MAJOR=@MAJOR@
|
@@ -2,6 +2,7 @@ MAJOR=@MAJOR@
|
||||||
MINOR=@MINOR@
|
MINOR=@MINOR@
|
||||||
TEENY=@TEENY@
|
TEENY=@TEENY@
|
||||||
ruby_version=@ruby_version@
|
ruby_version=@ruby_version@
|
||||||
+ruby_version_dir_name=@ruby_version_dir_name@
|
+ruby_version_dir_name=@ruby_version_dir_name@
|
||||||
RUBY_API_VERSION=@RUBY_API_VERSION@
|
RUBY_API_VERSION=@RUBY_API_VERSION@
|
||||||
RUBY_PROGRAM_VERSION=@RUBY_PROGRAM_VERSION@
|
RUBY_PROGRAM_VERSION=@RUBY_PROGRAM_VERSION@
|
||||||
RUBY_BASE_NAME=@RUBY_BASE_NAME@
|
arch=@arch@
|
||||||
--
|
|
||||||
2.1.0
|
|
||||||
|
|
||||||
|
From baff562149499973123d2187620201be641c6538 Mon Sep 17 00:00:00 2001
|
||||||
From 518850aba6eee76de7715aae8d37330e34b01983 Mon Sep 17 00:00:00 2001
|
|
||||||
From: =?UTF-8?q?V=C3=ADt=20Ondruch?= <vondruch@redhat.com>
|
From: =?UTF-8?q?V=C3=ADt=20Ondruch?= <vondruch@redhat.com>
|
||||||
Date: Tue, 31 Mar 2015 16:37:26 +0200
|
Date: Tue, 31 Mar 2015 16:37:26 +0200
|
||||||
Subject: [PATCH 2/4] Add ruby_version_dir_name support for RDoc.
|
Subject: [PATCH 2/4] Add ruby_version_dir_name support for RDoc.
|
||||||
|
|
||||||
---
|
---
|
||||||
lib/rdoc/ri/paths.rb | 2 +-
|
tool/rbinstall.rb | 2 +-
|
||||||
tool/rbinstall.rb | 2 +-
|
1 file changed, 1 insertion(+), 1 deletion(-)
|
||||||
2 files changed, 2 insertions(+), 2 deletions(-)
|
|
||||||
|
|
||||||
diff --git a/lib/rdoc/ri/paths.rb b/lib/rdoc/ri/paths.rb
|
|
||||||
index 970cb91..5bf8230 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 = if RbConfig::CONFIG.key? 'ridir' then
|
|
||||||
File.join RbConfig::CONFIG['ridir'], version
|
|
||||||
diff --git a/tool/rbinstall.rb b/tool/rbinstall.rb
|
diff --git a/tool/rbinstall.rb b/tool/rbinstall.rb
|
||||||
index d4c110e..d39c9a6 100755
|
index 874c3ef1d9..a9e6365b27 100755
|
||||||
--- a/tool/rbinstall.rb
|
--- a/tool/rbinstall.rb
|
||||||
+++ b/tool/rbinstall.rb
|
+++ b/tool/rbinstall.rb
|
||||||
@@ -428,7 +428,7 @@ def CONFIG.[](name, mandatory = false)
|
@@ -1053,7 +1053,7 @@ def (bins = []).add(name)
|
||||||
|
|
||||||
install?(:doc, :rdoc) do
|
install?(:doc, :rdoc) do
|
||||||
if $rdocdir
|
if $rdocdir
|
||||||
|
|
@ -180,95 +165,74 @@ index d4c110e..d39c9a6 100755
|
||||||
prepare "rdoc", ridatadir
|
prepare "rdoc", ridatadir
|
||||||
install_recursive($rdocdir, ridatadir, :no_install => rdoc_noinst, :mode => $data_mode)
|
install_recursive($rdocdir, ridatadir, :no_install => rdoc_noinst, :mode => $data_mode)
|
||||||
end
|
end
|
||||||
--
|
|
||||||
2.1.0
|
|
||||||
|
|
||||||
|
From 7cf872a9a34f38d71cd2ca04ac114b4ea85cc56c Mon Sep 17 00:00:00 2001
|
||||||
From f8d136f9a46d1fe87eba622ab9665935d05e981b Mon Sep 17 00:00:00 2001
|
|
||||||
From: =?UTF-8?q?V=C3=ADt=20Ondruch?= <vondruch@redhat.com>
|
From: =?UTF-8?q?V=C3=ADt=20Ondruch?= <vondruch@redhat.com>
|
||||||
Date: Tue, 31 Mar 2015 16:37:44 +0200
|
Date: Tue, 31 Mar 2015 16:37:44 +0200
|
||||||
Subject: [PATCH 3/4] Add ruby_version_dir_name support for RubyGems.
|
Subject: [PATCH 3/4] Add ruby_version_dir_name support for RubyGems.
|
||||||
|
|
||||||
---
|
---
|
||||||
lib/rubygems/defaults.rb | 11 ++++++-----
|
lib/rubygems/defaults.rb | 7 ++++---
|
||||||
test/rubygems/test_gem.rb | 5 +++--
|
test/rubygems/test_gem.rb | 5 +++--
|
||||||
2 files changed, 9 insertions(+), 7 deletions(-)
|
2 files changed, 7 insertions(+), 5 deletions(-)
|
||||||
|
|
||||||
diff --git a/lib/rubygems/defaults.rb b/lib/rubygems/defaults.rb
|
diff --git a/lib/rubygems/defaults.rb b/lib/rubygems/defaults.rb
|
||||||
index 55ca080..75eea2b 100644
|
index 90f09fc191..f6b8a03b95 100644
|
||||||
--- a/lib/rubygems/defaults.rb
|
--- a/lib/rubygems/defaults.rb
|
||||||
+++ b/lib/rubygems/defaults.rb
|
+++ b/lib/rubygems/defaults.rb
|
||||||
@@ -32,20 +32,20 @@ def self.default_dir
|
@@ -35,7 +35,7 @@ def self.default_spec_cache_dir
|
||||||
[
|
# specified in the environment
|
||||||
File.dirname(RbConfig::CONFIG['sitedir']),
|
|
||||||
'Gems',
|
|
||||||
- RbConfig::CONFIG['ruby_version']
|
|
||||||
+ RbConfig::CONFIG['ruby_version_dir_name'] || RbConfig::CONFIG['ruby_version']
|
|
||||||
]
|
|
||||||
elsif RbConfig::CONFIG['rubylibprefix']
|
|
||||||
[
|
|
||||||
RbConfig::CONFIG['rubylibprefix'],
|
|
||||||
'gems',
|
|
||||||
- RbConfig::CONFIG['ruby_version']
|
|
||||||
+ RbConfig::CONFIG['ruby_version_dir_name'] || RbConfig::CONFIG['ruby_version']
|
|
||||||
]
|
|
||||||
else
|
|
||||||
[
|
|
||||||
RbConfig::CONFIG['libdir'],
|
|
||||||
ruby_engine,
|
|
||||||
'gems',
|
|
||||||
- RbConfig::CONFIG['ruby_version']
|
|
||||||
+ RbConfig::CONFIG['ruby_version_dir_name'] || RbConfig::CONFIG['ruby_version']
|
|
||||||
]
|
|
||||||
end
|
|
||||||
|
|
||||||
@@ -75,7 +75,8 @@ def self.default_rubygems_dirs
|
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
|
||||||
|
|
||||||
def self.user_dir
|
##
|
||||||
parts = [Gem.user_home, '.gem', ruby_engine]
|
@@ -104,7 +104,8 @@ def self.user_dir
|
||||||
- parts << RbConfig::CONFIG['ruby_version'] unless RbConfig::CONFIG['ruby_version'].empty?
|
gem_dir = File.join(Gem.user_home, ".gem")
|
||||||
+ ruby_version_dir_name = RbConfig::CONFIG['ruby_version_dir_name'] || RbConfig::CONFIG['ruby_version']
|
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?
|
+ parts << ruby_version_dir_name unless ruby_version_dir_name.empty?
|
||||||
File.join parts
|
File.join parts
|
||||||
end
|
end
|
||||||
|
|
||||||
@@ -172,7 +173,7 @@ def self.vendor_dir # :nodoc:
|
@@ -265,7 +266,7 @@ def self.vendor_dir # :nodoc:
|
||||||
return nil unless RbConfig::CONFIG.key? 'vendordir'
|
return nil unless RbConfig::CONFIG.key? "vendordir"
|
||||||
|
|
||||||
File.join RbConfig::CONFIG['vendordir'], 'gems',
|
File.join RbConfig::CONFIG["vendordir"], "gems",
|
||||||
- RbConfig::CONFIG['ruby_version']
|
- RbConfig::CONFIG["ruby_version"]
|
||||||
+ RbConfig::CONFIG['ruby_version_dir_name'] || RbConfig::CONFIG['ruby_version']
|
+ RbConfig::CONFIG["ruby_version_dir_name"] || RbConfig::CONFIG["ruby_version"]
|
||||||
end
|
end
|
||||||
|
|
||||||
##
|
##
|
||||||
diff --git a/test/rubygems/test_gem.rb b/test/rubygems/test_gem.rb
|
diff --git a/test/rubygems/test_gem.rb b/test/rubygems/test_gem.rb
|
||||||
index 0428bea..b6e090e 100644
|
index 74c8953904..1f3bd91d51 100644
|
||||||
--- a/test/rubygems/test_gem.rb
|
--- a/test/rubygems/test_gem.rb
|
||||||
+++ b/test/rubygems/test_gem.rb
|
+++ b/test/rubygems/test_gem.rb
|
||||||
@@ -1288,7 +1288,8 @@ def test_self_use_paths
|
@@ -1339,7 +1339,8 @@ def test_self_use_paths
|
||||||
|
|
||||||
def test_self_user_dir
|
def test_self_user_dir
|
||||||
parts = [@userhome, '.gem', Gem.ruby_engine]
|
parts = [@userhome, ".gem", Gem.ruby_engine]
|
||||||
- parts << RbConfig::CONFIG['ruby_version'] unless RbConfig::CONFIG['ruby_version'].empty?
|
- 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']
|
+ 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?
|
+ parts << ruby_version_dir_name unless ruby_version_dir_name.empty?
|
||||||
|
|
||||||
assert_equal File.join(parts), Gem.user_dir
|
FileUtils.mkdir_p File.join(parts)
|
||||||
end
|
|
||||||
@@ -1365,7 +1366,7 @@ def test_self_gzip
|
|
||||||
def test_self_vendor_dir
|
|
||||||
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
|
@@ -1415,7 +1416,7 @@ def test_self_vendor_dir
|
||||||
end
|
vendordir(File.join(@tempdir, "vendor")) do
|
||||||
--
|
expected =
|
||||||
2.1.0
|
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 88c38a030c22dbf9422ece847bdfbf87d6659313 Mon Sep 17 00:00:00 2001
|
|
||||||
From: =?UTF-8?q?V=C3=ADt=20Ondruch?= <vondruch@redhat.com>
|
From: =?UTF-8?q?V=C3=ADt=20Ondruch?= <vondruch@redhat.com>
|
||||||
Date: Wed, 1 Apr 2015 14:55:37 +0200
|
Date: Wed, 1 Apr 2015 14:55:37 +0200
|
||||||
Subject: [PATCH 4/4] Let headers directories follow the configured version
|
Subject: [PATCH 4/4] Let headers directories follow the configured version
|
||||||
|
|
@ -279,18 +243,15 @@ Subject: [PATCH 4/4] Let headers directories follow the configured version
|
||||||
1 file changed, 1 insertion(+), 1 deletion(-)
|
1 file changed, 1 insertion(+), 1 deletion(-)
|
||||||
|
|
||||||
diff --git a/configure.ac b/configure.ac
|
diff --git a/configure.ac b/configure.ac
|
||||||
index a00f2b6776..999e2d6d5d 100644
|
index 9d8662369c..2bc5153141 100644
|
||||||
--- a/configure.ac
|
--- a/configure.ac
|
||||||
+++ b/configure.ac
|
+++ b/configure.ac
|
||||||
@@ -101,7 +101,7 @@ RUBY_BASE_NAME=`echo ruby | sed "$program_transform_name"`
|
@@ -151,7 +151,7 @@ RUBY_BASE_NAME=`echo ruby | sed "$program_transform_name"`
|
||||||
RUBYW_BASE_NAME=`echo rubyw | sed "$program_transform_name"`
|
RUBYW_BASE_NAME=`echo rubyw | sed "$program_transform_name"`
|
||||||
AC_SUBST(RUBY_BASE_NAME)
|
AC_SUBST(RUBY_BASE_NAME)
|
||||||
AC_SUBST(RUBYW_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}')
|
||||||
+AC_SUBST(RUBY_VERSION_NAME, '${RUBY_BASE_NAME}-${ruby_version_dir_name}')
|
+AC_SUBST(RUBY_VERSION_NAME, '${RUBY_BASE_NAME}-${ruby_version_dir_name}')
|
||||||
|
|
||||||
AC_CANONICAL_TARGET
|
dnl checks for alternative programs
|
||||||
test x"$target_alias" = x &&
|
AC_CANONICAL_BUILD
|
||||||
--
|
|
||||||
2.1.0
|
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -1,116 +0,0 @@
|
||||||
From 346e147ba6480839b87046e9a9efab0bf6ed3660 Mon Sep 17 00:00:00 2001
|
|
||||||
From: =?UTF-8?q?V=C3=ADt=20Ondruch?= <vondruch@redhat.com>
|
|
||||||
Date: Wed, 10 Aug 2016 17:35:48 +0200
|
|
||||||
Subject: [PATCH] Rely on ldd to detect glibc.
|
|
||||||
|
|
||||||
This is just workaround, since we know we are quite sure this will be successful
|
|
||||||
on Red Hat platforms.
|
|
||||||
|
|
||||||
This workaround rhbz#1361037
|
|
||||||
---
|
|
||||||
test/fiddle/helper.rb | 89 -------------------------------------------
|
|
||||||
1 file changed, 89 deletions(-)
|
|
||||||
|
|
||||||
diff --git a/test/fiddle/helper.rb b/test/fiddle/helper.rb
|
|
||||||
index 1da3d93..65148a1 100644
|
|
||||||
--- a/test/fiddle/helper.rb
|
|
||||||
+++ b/test/fiddle/helper.rb
|
|
||||||
@@ -6,95 +6,6 @@
|
|
||||||
|
|
||||||
libc_so = libm_so = nil
|
|
||||||
|
|
||||||
-case RUBY_PLATFORM
|
|
||||||
-when /cygwin/
|
|
||||||
- libc_so = "cygwin1.dll"
|
|
||||||
- libm_so = "cygwin1.dll"
|
|
||||||
-when /linux/
|
|
||||||
- libdir = '/lib'
|
|
||||||
- case [0].pack('L!').size
|
|
||||||
- when 4
|
|
||||||
- # 32-bit ruby
|
|
||||||
- libdir = '/lib32' if File.directory? '/lib32'
|
|
||||||
- when 8
|
|
||||||
- # 64-bit ruby
|
|
||||||
- libdir = '/lib64' if File.directory? '/lib64'
|
|
||||||
- end
|
|
||||||
- libc_so = File.join(libdir, "libc.so.6")
|
|
||||||
- libm_so = File.join(libdir, "libm.so.6")
|
|
||||||
-when /mingw/, /mswin/
|
|
||||||
- require "rbconfig"
|
|
||||||
- crtname = RbConfig::CONFIG["RUBY_SO_NAME"][/msvc\w+/] || 'ucrtbase'
|
|
||||||
- libc_so = libm_so = "#{crtname}.dll"
|
|
||||||
-when /darwin/
|
|
||||||
- libc_so = "/usr/lib/libc.dylib"
|
|
||||||
- libm_so = "/usr/lib/libm.dylib"
|
|
||||||
-when /kfreebsd/
|
|
||||||
- libc_so = "/lib/libc.so.0.1"
|
|
||||||
- libm_so = "/lib/libm.so.1"
|
|
||||||
-when /gnu/ #GNU/Hurd
|
|
||||||
- libc_so = "/lib/libc.so.0.3"
|
|
||||||
- libm_so = "/lib/libm.so.6"
|
|
||||||
-when /mirbsd/
|
|
||||||
- libc_so = "/usr/lib/libc.so.41.10"
|
|
||||||
- libm_so = "/usr/lib/libm.so.7.0"
|
|
||||||
-when /freebsd/
|
|
||||||
- libc_so = "/lib/libc.so.7"
|
|
||||||
- libm_so = "/lib/libm.so.5"
|
|
||||||
-when /bsd|dragonfly/
|
|
||||||
- libc_so = "/usr/lib/libc.so"
|
|
||||||
- libm_so = "/usr/lib/libm.so"
|
|
||||||
-when /solaris/
|
|
||||||
- libdir = '/lib'
|
|
||||||
- case [0].pack('L!').size
|
|
||||||
- when 4
|
|
||||||
- # 32-bit ruby
|
|
||||||
- libdir = '/lib' if File.directory? '/lib'
|
|
||||||
- when 8
|
|
||||||
- # 64-bit ruby
|
|
||||||
- libdir = '/lib/64' if File.directory? '/lib/64'
|
|
||||||
- end
|
|
||||||
- libc_so = File.join(libdir, "libc.so")
|
|
||||||
- libm_so = File.join(libdir, "libm.so")
|
|
||||||
-when /aix/
|
|
||||||
- pwd=Dir.pwd
|
|
||||||
- libc_so = libm_so = "#{pwd}/libaixdltest.so"
|
|
||||||
- unless File.exist? libc_so
|
|
||||||
- cobjs=%w!strcpy.o!
|
|
||||||
- mobjs=%w!floats.o sin.o!
|
|
||||||
- funcs=%w!sin sinf strcpy strncpy!
|
|
||||||
- expfile='dltest.exp'
|
|
||||||
- require 'tmpdir'
|
|
||||||
- Dir.mktmpdir do |dir|
|
|
||||||
- begin
|
|
||||||
- Dir.chdir dir
|
|
||||||
- %x!/usr/bin/ar x /usr/lib/libc.a #{cobjs.join(' ')}!
|
|
||||||
- %x!/usr/bin/ar x /usr/lib/libm.a #{mobjs.join(' ')}!
|
|
||||||
- %x!echo "#{funcs.join("\n")}\n" > #{expfile}!
|
|
||||||
- require 'rbconfig'
|
|
||||||
- if RbConfig::CONFIG["GCC"] = 'yes'
|
|
||||||
- lflag='-Wl,'
|
|
||||||
- else
|
|
||||||
- lflag=''
|
|
||||||
- end
|
|
||||||
- flags="#{lflag}-bE:#{expfile} #{lflag}-bnoentry -lm"
|
|
||||||
- %x!#{RbConfig::CONFIG["LDSHARED"]} -o #{libc_so} #{(cobjs+mobjs).join(' ')} #{flags}!
|
|
||||||
- ensure
|
|
||||||
- Dir.chdir pwd
|
|
||||||
- end
|
|
||||||
- end
|
|
||||||
- end
|
|
||||||
-else
|
|
||||||
- libc_so = ARGV[0] if ARGV[0] && ARGV[0][0] == ?/
|
|
||||||
- libm_so = ARGV[1] if ARGV[1] && ARGV[1][0] == ?/
|
|
||||||
- if( !(libc_so && libm_so) )
|
|
||||||
- $stderr.puts("libc and libm not found: #{$0} <libc> <libm>")
|
|
||||||
- end
|
|
||||||
-end
|
|
||||||
-
|
|
||||||
-libc_so = nil if !libc_so || (libc_so[0] == ?/ && !File.file?(libc_so))
|
|
||||||
-libm_so = nil if !libm_so || (libm_so[0] == ?/ && !File.file?(libm_so))
|
|
||||||
-
|
|
||||||
if !libc_so || !libm_so
|
|
||||||
ruby = EnvUtil.rubybin
|
|
||||||
ldd = `ldd #{ruby}`
|
|
||||||
--
|
|
||||||
2.9.2
|
|
||||||
|
|
||||||
|
|
@ -1,182 +0,0 @@
|
||||||
From f46bac1f3e8634e24c747d06b28e11b874f1e488 Mon Sep 17 00:00:00 2001
|
|
||||||
From: Kazuki Yamaguchi <k@rhe.jp>
|
|
||||||
Date: Thu, 16 Aug 2018 19:40:48 +0900
|
|
||||||
Subject: [PATCH] config: support .include directive
|
|
||||||
|
|
||||||
OpenSSL 1.1.1 introduces a new '.include' directive. Update our config
|
|
||||||
parser to support that.
|
|
||||||
|
|
||||||
As mentioned in the referenced GitHub issue, we should use the OpenSSL
|
|
||||||
API instead of implementing the parsing logic ourselves, but it will
|
|
||||||
need backwards-incompatible changes which we can't backport to stable
|
|
||||||
versions. So continue to use the Ruby implementation for now.
|
|
||||||
|
|
||||||
Reference: https://github.com/ruby/openssl/issues/208
|
|
||||||
---
|
|
||||||
ext/openssl/lib/openssl/config.rb | 54 ++++++++++++++++++++-----------
|
|
||||||
test/openssl/test_config.rb | 54 +++++++++++++++++++++++++++++++
|
|
||||||
2 files changed, 90 insertions(+), 18 deletions(-)
|
|
||||||
|
|
||||||
diff --git a/ext/openssl/lib/openssl/config.rb b/ext/openssl/lib/openssl/config.rb
|
|
||||||
index 88225451..ba3a54c8 100644
|
|
||||||
--- a/ext/openssl/lib/openssl/config.rb
|
|
||||||
+++ b/ext/openssl/lib/openssl/config.rb
|
|
||||||
@@ -77,29 +77,44 @@ def get_key_string(data, section, key) # :nodoc:
|
|
||||||
def parse_config_lines(io)
|
|
||||||
section = 'default'
|
|
||||||
data = {section => {}}
|
|
||||||
- while definition = get_definition(io)
|
|
||||||
+ io_stack = [io]
|
|
||||||
+ while definition = get_definition(io_stack)
|
|
||||||
definition = clear_comments(definition)
|
|
||||||
next if definition.empty?
|
|
||||||
- if definition[0] == ?[
|
|
||||||
+ case definition
|
|
||||||
+ when /\A\[/
|
|
||||||
if /\[([^\]]*)\]/ =~ definition
|
|
||||||
section = $1.strip
|
|
||||||
data[section] ||= {}
|
|
||||||
else
|
|
||||||
raise ConfigError, "missing close square bracket"
|
|
||||||
end
|
|
||||||
- else
|
|
||||||
- if /\A([^:\s]*)(?:::([^:\s]*))?\s*=(.*)\z/ =~ definition
|
|
||||||
- if $2
|
|
||||||
- section = $1
|
|
||||||
- key = $2
|
|
||||||
- else
|
|
||||||
- key = $1
|
|
||||||
+ when /\A\.include (\s*=\s*)?(.+)\z/
|
|
||||||
+ path = $2
|
|
||||||
+ if File.directory?(path)
|
|
||||||
+ files = Dir.glob(File.join(path, "*.{cnf,conf}"), File::FNM_EXTGLOB)
|
|
||||||
+ else
|
|
||||||
+ files = [path]
|
|
||||||
+ end
|
|
||||||
+
|
|
||||||
+ files.each do |filename|
|
|
||||||
+ begin
|
|
||||||
+ io_stack << StringIO.new(File.read(filename))
|
|
||||||
+ rescue
|
|
||||||
+ raise ConfigError, "could not include file '%s'" % filename
|
|
||||||
end
|
|
||||||
- value = unescape_value(data, section, $3)
|
|
||||||
- (data[section] ||= {})[key] = value.strip
|
|
||||||
+ end
|
|
||||||
+ when /\A([^:\s]*)(?:::([^:\s]*))?\s*=(.*)\z/
|
|
||||||
+ if $2
|
|
||||||
+ section = $1
|
|
||||||
+ key = $2
|
|
||||||
else
|
|
||||||
- raise ConfigError, "missing equal sign"
|
|
||||||
+ key = $1
|
|
||||||
end
|
|
||||||
+ value = unescape_value(data, section, $3)
|
|
||||||
+ (data[section] ||= {})[key] = value.strip
|
|
||||||
+ else
|
|
||||||
+ raise ConfigError, "missing equal sign"
|
|
||||||
end
|
|
||||||
end
|
|
||||||
data
|
|
||||||
@@ -212,10 +227,10 @@ def clear_comments(line)
|
|
||||||
scanned.join
|
|
||||||
end
|
|
||||||
|
|
||||||
- def get_definition(io)
|
|
||||||
- if line = get_line(io)
|
|
||||||
+ def get_definition(io_stack)
|
|
||||||
+ if line = get_line(io_stack)
|
|
||||||
while /[^\\]\\\z/ =~ line
|
|
||||||
- if extra = get_line(io)
|
|
||||||
+ if extra = get_line(io_stack)
|
|
||||||
line += extra
|
|
||||||
else
|
|
||||||
break
|
|
||||||
@@ -225,9 +240,12 @@ def get_definition(io)
|
|
||||||
end
|
|
||||||
end
|
|
||||||
|
|
||||||
- def get_line(io)
|
|
||||||
- if line = io.gets
|
|
||||||
- line.gsub(/[\r\n]*/, '')
|
|
||||||
+ def get_line(io_stack)
|
|
||||||
+ while io = io_stack.last
|
|
||||||
+ if line = io.gets
|
|
||||||
+ return line.gsub(/[\r\n]*/, '')
|
|
||||||
+ end
|
|
||||||
+ io_stack.pop
|
|
||||||
end
|
|
||||||
end
|
|
||||||
end
|
|
||||||
diff --git a/test/openssl/test_config.rb b/test/openssl/test_config.rb
|
|
||||||
index 99dcc497..5653b5d0 100644
|
|
||||||
--- a/test/openssl/test_config.rb
|
|
||||||
+++ b/test/openssl/test_config.rb
|
|
||||||
@@ -120,6 +120,49 @@ def test_s_parse_format
|
|
||||||
assert_equal("error in line 7: missing close square bracket", excn.message)
|
|
||||||
end
|
|
||||||
|
|
||||||
+ def test_s_parse_include
|
|
||||||
+ in_tmpdir("ossl-config-include-test") do |dir|
|
|
||||||
+ Dir.mkdir("child")
|
|
||||||
+ File.write("child/a.conf", <<~__EOC__)
|
|
||||||
+ [default]
|
|
||||||
+ file-a = a.conf
|
|
||||||
+ [sec-a]
|
|
||||||
+ a = 123
|
|
||||||
+ __EOC__
|
|
||||||
+ File.write("child/b.cnf", <<~__EOC__)
|
|
||||||
+ [default]
|
|
||||||
+ file-b = b.cnf
|
|
||||||
+ [sec-b]
|
|
||||||
+ b = 123
|
|
||||||
+ __EOC__
|
|
||||||
+ File.write("include-child.conf", <<~__EOC__)
|
|
||||||
+ key_outside_section = value_a
|
|
||||||
+ .include child
|
|
||||||
+ __EOC__
|
|
||||||
+
|
|
||||||
+ include_file = <<~__EOC__
|
|
||||||
+ [default]
|
|
||||||
+ file-main = unnamed
|
|
||||||
+ [sec-main]
|
|
||||||
+ main = 123
|
|
||||||
+ .include = include-child.conf
|
|
||||||
+ __EOC__
|
|
||||||
+
|
|
||||||
+ # Include a file by relative path
|
|
||||||
+ c1 = OpenSSL::Config.parse(include_file)
|
|
||||||
+ assert_equal(["default", "sec-a", "sec-b", "sec-main"], c1.sections.sort)
|
|
||||||
+ assert_equal(["file-main", "file-a", "file-b"], c1["default"].keys)
|
|
||||||
+ assert_equal({"a" => "123"}, c1["sec-a"])
|
|
||||||
+ assert_equal({"b" => "123"}, c1["sec-b"])
|
|
||||||
+ assert_equal({"main" => "123", "key_outside_section" => "value_a"}, c1["sec-main"])
|
|
||||||
+
|
|
||||||
+ # Relative paths are from the working directory
|
|
||||||
+ assert_raise(OpenSSL::ConfigError) do
|
|
||||||
+ Dir.chdir("child") { OpenSSL::Config.parse(include_file) }
|
|
||||||
+ end
|
|
||||||
+ end
|
|
||||||
+ end
|
|
||||||
+
|
|
||||||
def test_s_load
|
|
||||||
# alias of new
|
|
||||||
c = OpenSSL::Config.load
|
|
||||||
@@ -299,6 +342,17 @@ def test_clone
|
|
||||||
@it['newsection'] = {'a' => 'b'}
|
|
||||||
assert_not_equal(@it.sections.sort, c.sections.sort)
|
|
||||||
end
|
|
||||||
+
|
|
||||||
+ private
|
|
||||||
+
|
|
||||||
+ def in_tmpdir(*args)
|
|
||||||
+ Dir.mktmpdir(*args) do |dir|
|
|
||||||
+ dir = File.realpath(dir)
|
|
||||||
+ Dir.chdir(dir) do
|
|
||||||
+ yield dir
|
|
||||||
+ end
|
|
||||||
+ end
|
|
||||||
+ end
|
|
||||||
end
|
|
||||||
|
|
||||||
end
|
|
||||||
|
|
@ -1,58 +0,0 @@
|
||||||
diff --git a/ext/fiddle/closure.c b/ext/fiddle/closure.c
|
|
||||||
index 1a80b2b..b997e23 100644
|
|
||||||
--- a/ext/fiddle/closure.c
|
|
||||||
+++ b/ext/fiddle/closure.c
|
|
||||||
@@ -13,22 +13,11 @@ typedef struct {
|
|
||||||
ffi_type **argv;
|
|
||||||
} fiddle_closure;
|
|
||||||
|
|
||||||
-#if defined(USE_FFI_CLOSURE_ALLOC)
|
|
||||||
-#elif !defined(HAVE_FFI_CLOSURE_ALLOC)
|
|
||||||
-# define USE_FFI_CLOSURE_ALLOC 0
|
|
||||||
-#else
|
|
||||||
-# define USE_FFI_CLOSURE_ALLOC 1
|
|
||||||
-#endif
|
|
||||||
-
|
|
||||||
static void
|
|
||||||
dealloc(void * ptr)
|
|
||||||
{
|
|
||||||
fiddle_closure * cls = (fiddle_closure *)ptr;
|
|
||||||
-#if USE_FFI_CLOSURE_ALLOC
|
|
||||||
ffi_closure_free(cls->pcl);
|
|
||||||
-#else
|
|
||||||
- munmap(cls->pcl, sizeof(*cls->pcl));
|
|
||||||
-#endif
|
|
||||||
if (cls->argv) xfree(cls->argv);
|
|
||||||
xfree(cls);
|
|
||||||
}
|
|
||||||
@@ -202,12 +188,7 @@ allocate(VALUE klass)
|
|
||||||
VALUE i = TypedData_Make_Struct(klass, fiddle_closure,
|
|
||||||
&closure_data_type, closure);
|
|
||||||
|
|
||||||
-#if USE_FFI_CLOSURE_ALLOC
|
|
||||||
closure->pcl = ffi_closure_alloc(sizeof(ffi_closure), &closure->code);
|
|
||||||
-#else
|
|
||||||
- closure->pcl = mmap(NULL, sizeof(ffi_closure), PROT_READ | PROT_WRITE,
|
|
||||||
- MAP_ANON | MAP_PRIVATE, -1, 0);
|
|
||||||
-#endif
|
|
||||||
|
|
||||||
return i;
|
|
||||||
}
|
|
||||||
@@ -254,17 +238,8 @@ initialize(int rbargc, VALUE argv[], VALUE self)
|
|
||||||
if (FFI_OK != result)
|
|
||||||
rb_raise(rb_eRuntimeError, "error prepping CIF %d", result);
|
|
||||||
|
|
||||||
-#if USE_FFI_CLOSURE_ALLOC
|
|
||||||
result = ffi_prep_closure_loc(pcl, cif, callback,
|
|
||||||
(void *)self, cl->code);
|
|
||||||
-#else
|
|
||||||
- result = ffi_prep_closure(pcl, cif, callback, (void *)self);
|
|
||||||
- cl->code = (void *)pcl;
|
|
||||||
- i = mprotect(pcl, sizeof(*pcl), PROT_READ | PROT_EXEC);
|
|
||||||
- if (i) {
|
|
||||||
- rb_sys_fail("mprotect");
|
|
||||||
- }
|
|
||||||
-#endif
|
|
||||||
|
|
||||||
if (FFI_OK != result)
|
|
||||||
rb_raise(rb_eRuntimeError, "error prepping closure %d", result);
|
|
||||||
86
ruby-2.7.0-Initialize-ABRT-hook.patch
Normal file
86
ruby-2.7.0-Initialize-ABRT-hook.patch
Normal file
|
|
@ -0,0 +1,86 @@
|
||||||
|
From 03b44a86b574dc0b63fd57c5f9b52b56ad3ced37 Mon Sep 17 00:00:00 2001
|
||||||
|
From: =?UTF-8?q?V=C3=ADt=20Ondruch?= <vondruch@redhat.com>
|
||||||
|
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') }
|
||||||
|
|
@ -1,131 +0,0 @@
|
||||||
From 920b924e5652884064a9529ffbd80d458a46fbc6 Mon Sep 17 00:00:00 2001
|
|
||||||
From: eregon <eregon@b2dd03c8-39d4-4d8f-98ff-823fe69b080e>
|
|
||||||
Date: Tue, 5 Feb 2019 09:58:50 +0000
|
|
||||||
Subject: [PATCH] Make sure to wait with IO.select before using
|
|
||||||
Socket#recvfrom_nonblock
|
|
||||||
|
|
||||||
* On all platforms, as this is the recommended code pattern.
|
|
||||||
|
|
||||||
git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@67010 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
|
|
||||||
---
|
|
||||||
spec/ruby/library/socket/socket/recvfrom_nonblock_spec.rb | 8 ++++----
|
|
||||||
1 file changed, 4 insertions(+), 4 deletions(-)
|
|
||||||
|
|
||||||
diff --git a/spec/ruby/library/socket/socket/recvfrom_nonblock_spec.rb b/spec/ruby/library/socket/socket/recvfrom_nonblock_spec.rb
|
|
||||||
index c1239ae637e0..74fd286c42ad 100644
|
|
||||||
--- a/spec/ruby/library/socket/socket/recvfrom_nonblock_spec.rb
|
|
||||||
+++ b/spec/ruby/library/socket/socket/recvfrom_nonblock_spec.rb
|
|
||||||
@@ -36,12 +36,11 @@
|
|
||||||
describe 'with data available' do
|
|
||||||
before do
|
|
||||||
@client.write('hello')
|
|
||||||
-
|
|
||||||
- platform_is(:darwin, :freebsd) { IO.select([@server]) }
|
|
||||||
end
|
|
||||||
|
|
||||||
platform_is_not :windows do
|
|
||||||
it 'returns an Array containing the data and an Addrinfo' do
|
|
||||||
+ IO.select([@server])
|
|
||||||
ret = @server.recvfrom_nonblock(1)
|
|
||||||
|
|
||||||
ret.should be_an_instance_of(Array)
|
|
||||||
@@ -54,8 +53,7 @@
|
|
||||||
5.times do
|
|
||||||
@client.write('hello')
|
|
||||||
|
|
||||||
- platform_is(:darwin, :freebsd) { IO.select([@server]) }
|
|
||||||
-
|
|
||||||
+ IO.select([@server])
|
|
||||||
msg, _ = @server.recvfrom_nonblock(5)
|
|
||||||
|
|
||||||
msg.should == 'hello'
|
|
||||||
@@ -66,6 +64,7 @@
|
|
||||||
platform_is_not :windows do
|
|
||||||
describe 'the returned Array' do
|
|
||||||
before do
|
|
||||||
+ IO.select([@server])
|
|
||||||
@array = @server.recvfrom_nonblock(1)
|
|
||||||
end
|
|
||||||
|
|
||||||
@@ -80,6 +79,7 @@
|
|
||||||
|
|
||||||
describe 'the returned Addrinfo' do
|
|
||||||
before do
|
|
||||||
+ IO.select([@server])
|
|
||||||
@addr = @server.recvfrom_nonblock(1)[1]
|
|
||||||
end
|
|
||||||
|
|
||||||
From c1f0daeb6ac5c5414c9a4a58bb778a118006ae1f Mon Sep 17 00:00:00 2001
|
|
||||||
From: eregon <eregon@b2dd03c8-39d4-4d8f-98ff-823fe69b080e>
|
|
||||||
Date: Tue, 5 Feb 2019 10:19:29 +0000
|
|
||||||
Subject: [PATCH] Make sure to wait with IO.select before using
|
|
||||||
Socket#accept_nonblock and recvfrom_nonblock
|
|
||||||
|
|
||||||
* On all platforms, as this is the recommended code pattern.
|
|
||||||
|
|
||||||
git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@67011 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
|
|
||||||
---
|
|
||||||
spec/ruby/library/socket/socket/accept_nonblock_spec.rb | 4 ++--
|
|
||||||
spec/ruby/library/socket/udpsocket/recvfrom_nonblock_spec.rb | 5 +++--
|
|
||||||
2 files changed, 5 insertions(+), 4 deletions(-)
|
|
||||||
|
|
||||||
diff --git a/spec/ruby/library/socket/socket/accept_nonblock_spec.rb b/spec/ruby/library/socket/socket/accept_nonblock_spec.rb
|
|
||||||
index 3ef219ed05a9..cde9e6a4b669 100644
|
|
||||||
--- a/spec/ruby/library/socket/socket/accept_nonblock_spec.rb
|
|
||||||
+++ b/spec/ruby/library/socket/socket/accept_nonblock_spec.rb
|
|
||||||
@@ -86,8 +86,6 @@
|
|
||||||
@client = Socket.new(family, :STREAM, 0)
|
|
||||||
|
|
||||||
@client.connect(addr)
|
|
||||||
-
|
|
||||||
- platform_is(:darwin, :freebsd, :solaris) { IO.select([@server]) }
|
|
||||||
end
|
|
||||||
|
|
||||||
after do
|
|
||||||
@@ -96,6 +94,7 @@
|
|
||||||
end
|
|
||||||
|
|
||||||
it 'returns an Array containing a Socket and an Addrinfo' do
|
|
||||||
+ IO.select([@server])
|
|
||||||
@socket, addrinfo = @server.accept_nonblock
|
|
||||||
|
|
||||||
@socket.should be_an_instance_of(Socket)
|
|
||||||
@@ -104,6 +103,7 @@
|
|
||||||
|
|
||||||
describe 'the returned Addrinfo' do
|
|
||||||
before do
|
|
||||||
+ IO.select([@server])
|
|
||||||
@socket, @addr = @server.accept_nonblock
|
|
||||||
end
|
|
||||||
|
|
||||||
diff --git a/spec/ruby/library/socket/udpsocket/recvfrom_nonblock_spec.rb b/spec/ruby/library/socket/udpsocket/recvfrom_nonblock_spec.rb
|
|
||||||
index 015109a05200..62bbaf0dc93a 100644
|
|
||||||
--- a/spec/ruby/library/socket/udpsocket/recvfrom_nonblock_spec.rb
|
|
||||||
+++ b/spec/ruby/library/socket/udpsocket/recvfrom_nonblock_spec.rb
|
|
||||||
@@ -40,16 +40,16 @@
|
|
||||||
describe 'with data available' do
|
|
||||||
before do
|
|
||||||
@client.write('hello')
|
|
||||||
-
|
|
||||||
- platform_is(:darwin, :freebsd) { IO.select([@server]) }
|
|
||||||
end
|
|
||||||
|
|
||||||
it 'returns an Array containing the data and an Array' do
|
|
||||||
+ IO.select([@server])
|
|
||||||
@server.recvfrom_nonblock(1).should be_an_instance_of(Array)
|
|
||||||
end
|
|
||||||
|
|
||||||
describe 'the returned Array' do
|
|
||||||
before do
|
|
||||||
+ IO.select([@server])
|
|
||||||
@array = @server.recvfrom_nonblock(1)
|
|
||||||
end
|
|
||||||
|
|
||||||
@@ -64,6 +64,7 @@
|
|
||||||
|
|
||||||
describe 'the returned address Array' do
|
|
||||||
before do
|
|
||||||
+ IO.select([@server])
|
|
||||||
@addr = @server.recvfrom_nonblock(1)[1]
|
|
||||||
end
|
|
||||||
|
|
||||||
|
|
@ -1,34 +0,0 @@
|
||||||
From 9b42fce32bff25e0569581f76f532b9d57865aef Mon Sep 17 00:00:00 2001
|
|
||||||
From: =?UTF-8?q?V=C3=ADt=20Ondruch?= <vondruch@redhat.com>
|
|
||||||
Date: Mon, 27 Jul 2020 14:56:05 +0200
|
|
||||||
Subject: [PATCH] Timeout the test_bug_reporter_add witout raising error.
|
|
||||||
|
|
||||||
While timeouting the threads might be still good idea, it does not seems
|
|
||||||
the timeout impacts the TestBugReporter#test_bug_reporter_add result,
|
|
||||||
because the output of the child process has been already collected
|
|
||||||
earlier.
|
|
||||||
|
|
||||||
It seems that when the system is under heavy load, the thread might not
|
|
||||||
be sheduled to finish its processing. Even finishing the child process
|
|
||||||
might take tens of seconds and therefore the test case finish might take
|
|
||||||
a while.
|
|
||||||
---
|
|
||||||
test/-ext-/bug_reporter/test_bug_reporter.rb | 2 +-
|
|
||||||
1 file changed, 1 insertion(+), 1 deletion(-)
|
|
||||||
|
|
||||||
diff --git a/test/-ext-/bug_reporter/test_bug_reporter.rb b/test/-ext-/bug_reporter/test_bug_reporter.rb
|
|
||||||
index 628fcd0340..2c677cc8a7 100644
|
|
||||||
--- a/test/-ext-/bug_reporter/test_bug_reporter.rb
|
|
||||||
+++ b/test/-ext-/bug_reporter/test_bug_reporter.rb
|
|
||||||
@@ -19,7 +19,7 @@ def test_bug_reporter_add
|
|
||||||
args = ["--disable-gems", "-r-test-/bug_reporter",
|
|
||||||
"-C", tmpdir]
|
|
||||||
stdin = "register_sample_bug_reporter(12345); Process.kill :SEGV, $$"
|
|
||||||
- assert_in_out_err(args, stdin, [], expected_stderr, encoding: "ASCII-8BIT")
|
|
||||||
+ assert_in_out_err(args, stdin, [], expected_stderr, encoding: "ASCII-8BIT", timeout_error: nil)
|
|
||||||
ensure
|
|
||||||
FileUtils.rm_rf(tmpdir) if tmpdir
|
|
||||||
end
|
|
||||||
--
|
|
||||||
2.27.0
|
|
||||||
|
|
||||||
|
|
@ -1,134 +0,0 @@
|
||||||
From 5400fc3c67446e2f7f35ea317c596e71f0cb1ca4 Mon Sep 17 00:00:00 2001
|
|
||||||
From: Nobuyoshi Nakada <nobu@ruby-lang.org>
|
|
||||||
Date: Fri, 28 Feb 2020 21:15:37 +0900
|
|
||||||
Subject: [PATCH 2/2] Moved not-implemented method tests [Bug #16662]
|
|
||||||
|
|
||||||
Test not-implemented method with the dedicated methods, instead of
|
|
||||||
platform dependent features.
|
|
||||||
---
|
|
||||||
test/-ext-/test_notimplement.rb | 7 +++
|
|
||||||
test/ruby/test_notimp.rb | 90 ---------------------------------
|
|
||||||
2 files changed, 7 insertions(+), 90 deletions(-)
|
|
||||||
delete mode 100644 test/ruby/test_notimp.rb
|
|
||||||
|
|
||||||
diff --git a/test/-ext-/test_notimplement.rb b/test/-ext-/test_notimplement.rb
|
|
||||||
index 92a2fd22b8..038b507b73 100644
|
|
||||||
--- a/test/-ext-/test_notimplement.rb
|
|
||||||
+++ b/test/-ext-/test_notimplement.rb
|
|
||||||
@@ -13,10 +13,17 @@ def test_funcall_notimplement
|
|
||||||
end
|
|
||||||
|
|
||||||
def test_respond_to
|
|
||||||
+ assert_include(Bug.methods(false), :notimplement)
|
|
||||||
+ assert_include(Bug::NotImplement.instance_methods(false), :notimplement)
|
|
||||||
assert_not_respond_to(Bug, :notimplement)
|
|
||||||
assert_not_respond_to(Bug::NotImplement.new, :notimplement)
|
|
||||||
end
|
|
||||||
|
|
||||||
+ def test_method_inspect_notimplement
|
|
||||||
+ assert_match(/not-implemented/, Bug.method(:notimplement).inspect)
|
|
||||||
+ assert_match(/not-implemented/, Bug::NotImplement.instance_method(:notimplement).inspect)
|
|
||||||
+ end
|
|
||||||
+
|
|
||||||
def test_not_method_defined
|
|
||||||
assert !Bug::NotImplement.method_defined?(:notimplement)
|
|
||||||
assert !Bug::NotImplement.method_defined?(:notimplement, true)
|
|
||||||
diff --git a/test/ruby/test_notimp.rb b/test/ruby/test_notimp.rb
|
|
||||||
deleted file mode 100644
|
|
||||||
index daa5a82d7b..0000000000
|
|
||||||
--- a/test/ruby/test_notimp.rb
|
|
||||||
+++ /dev/null
|
|
||||||
@@ -1,90 +0,0 @@
|
|
||||||
-# frozen_string_literal: false
|
|
||||||
-require 'test/unit'
|
|
||||||
-require 'timeout'
|
|
||||||
-require 'tmpdir'
|
|
||||||
-
|
|
||||||
-class TestNotImplement < Test::Unit::TestCase
|
|
||||||
- def test_respond_to_fork
|
|
||||||
- assert_include(Process.methods, :fork)
|
|
||||||
- if /linux/ =~ RUBY_PLATFORM
|
|
||||||
- assert_equal(true, Process.respond_to?(:fork))
|
|
||||||
- end
|
|
||||||
- end
|
|
||||||
-
|
|
||||||
- def test_respond_to_lchmod
|
|
||||||
- assert_include(File.methods, :lchmod)
|
|
||||||
- case RUBY_PLATFORM
|
|
||||||
- when /freebsd/, /linux-musl/
|
|
||||||
- assert_equal(true, File.respond_to?(:lchmod))
|
|
||||||
- when /linux/
|
|
||||||
- assert_equal(false, File.respond_to?(:lchmod))
|
|
||||||
- end
|
|
||||||
- end
|
|
||||||
-
|
|
||||||
- def test_call_fork
|
|
||||||
- GC.start
|
|
||||||
- pid = nil
|
|
||||||
- ps =
|
|
||||||
- case RUBY_PLATFORM
|
|
||||||
- when /linux/ # assume Linux Distribution uses procps
|
|
||||||
- proc {`ps -eLf #{pid}`}
|
|
||||||
- when /freebsd/
|
|
||||||
- proc {`ps -lH #{pid}`}
|
|
||||||
- when /darwin/
|
|
||||||
- proc {`ps -lM #{pid}`}
|
|
||||||
- else
|
|
||||||
- proc {`ps -l #{pid}`}
|
|
||||||
- end
|
|
||||||
- assert_nothing_raised(Timeout::Error, ps) do
|
|
||||||
- Timeout.timeout(EnvUtil.apply_timeout_scale(5)) {
|
|
||||||
- pid = fork {}
|
|
||||||
- Process.wait pid
|
|
||||||
- pid = nil
|
|
||||||
- }
|
|
||||||
- end
|
|
||||||
- ensure
|
|
||||||
- if pid
|
|
||||||
- Process.kill(:KILL, pid)
|
|
||||||
- Process.wait pid
|
|
||||||
- end
|
|
||||||
- end if Process.respond_to?(:fork)
|
|
||||||
-
|
|
||||||
- def test_call_lchmod
|
|
||||||
- if File.respond_to?(:lchmod)
|
|
||||||
- Dir.mktmpdir {|d|
|
|
||||||
- f = "#{d}/f"
|
|
||||||
- g = "#{d}/g"
|
|
||||||
- File.open(f, "w") {}
|
|
||||||
- File.symlink f, g
|
|
||||||
- newmode = 0444
|
|
||||||
- begin
|
|
||||||
- File.lchmod newmode, "#{d}/g"
|
|
||||||
- rescue Errno::EOPNOTSUPP
|
|
||||||
- skip $!
|
|
||||||
- else
|
|
||||||
- snew = File.lstat(g)
|
|
||||||
- assert_equal(newmode, snew.mode & 0777)
|
|
||||||
- end
|
|
||||||
- }
|
|
||||||
- end
|
|
||||||
- end
|
|
||||||
-
|
|
||||||
- def test_method_inspect_fork
|
|
||||||
- m = Process.method(:fork)
|
|
||||||
- if Process.respond_to?(:fork)
|
|
||||||
- assert_not_match(/not-implemented/, m.inspect)
|
|
||||||
- else
|
|
||||||
- assert_match(/not-implemented/, m.inspect)
|
|
||||||
- end
|
|
||||||
- end
|
|
||||||
-
|
|
||||||
- def test_method_inspect_lchmod
|
|
||||||
- m = File.method(:lchmod)
|
|
||||||
- if File.respond_to?(:lchmod)
|
|
||||||
- assert_not_match(/not-implemented/, m.inspect)
|
|
||||||
- else
|
|
||||||
- assert_match(/not-implemented/, m.inspect)
|
|
||||||
- end
|
|
||||||
- end
|
|
||||||
-
|
|
||||||
-end
|
|
||||||
--
|
|
||||||
2.26.2
|
|
||||||
|
|
||||||
|
|
@ -1,26 +0,0 @@
|
||||||
From 2becb920e431110c4afc4fa069b051c5940c2096 Mon Sep 17 00:00:00 2001
|
|
||||||
From: Jeremy Evans <code@jeremyevans.net>
|
|
||||||
Date: Fri, 29 May 2020 14:13:30 -0700
|
|
||||||
Subject: [PATCH] Convert ip addresses to canonical form in
|
|
||||||
Resolv::DNS::Requester::UnconnectedUDP#sender
|
|
||||||
|
|
||||||
Otherwise, if the IP address given is not in canonical form, it
|
|
||||||
won't match, and Resolv will ignore it.
|
|
||||||
|
|
||||||
Fixes [Bug #16439]
|
|
||||||
---
|
|
||||||
lib/resolv.rb | 1 +
|
|
||||||
1 file changed, 1 insertion(+)
|
|
||||||
|
|
||||||
diff --git a/lib/resolv.rb b/lib/resolv.rb
|
|
||||||
index e7b45e785a85..d78531e174fd 100644
|
|
||||||
--- a/lib/resolv.rb
|
|
||||||
+++ b/lib/resolv.rb
|
|
||||||
@@ -762,6 +762,7 @@ def recv_reply(readable_socks)
|
|
||||||
end
|
|
||||||
|
|
||||||
def sender(msg, data, host, port=Port)
|
|
||||||
+ host = Addrinfo.ip(host).ip_address
|
|
||||||
lazy_initialize
|
|
||||||
sock = @socks_hash[host.index(':') ? "::" : "0.0.0.0"]
|
|
||||||
return nil if !sock
|
|
||||||
23
ruby-3.3.0-Disable-syntax-suggest-test-case.patch
Normal file
23
ruby-3.3.0-Disable-syntax-suggest-test-case.patch
Normal file
|
|
@ -0,0 +1,23 @@
|
||||||
|
From 9b7cb6a40d73bb86ee0de34360068e90e80f4e7e Mon Sep 17 00:00:00 2001
|
||||||
|
From: =?UTF-8?q?V=C3=ADt=20Ondruch?= <vondruch@redhat.com>
|
||||||
|
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
|
||||||
|
|
@ -0,0 +1,117 @@
|
||||||
|
From 1cfb11bc8d01e4fc1ff47807721e29b250f0f19f Mon Sep 17 00:00:00 2001
|
||||||
|
From: Jarek Prokop <jprokop@redhat.com>
|
||||||
|
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 <XrXr@users.noreply.github.com>
|
||||||
|
---
|
||||||
|
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@)
|
||||||
|
|
@ -1,217 +0,0 @@
|
||||||
--- a/addr2line.c
|
|
||||||
+++ b/addr2line.c
|
|
||||||
@@ -161,11 +161,12 @@
|
|
||||||
struct dwarf_section debug_info;
|
|
||||||
struct dwarf_section debug_line;
|
|
||||||
struct dwarf_section debug_ranges;
|
|
||||||
+ struct dwarf_section debug_rnglists;
|
|
||||||
struct dwarf_section debug_str;
|
|
||||||
struct obj_info *next;
|
|
||||||
} obj_info_t;
|
|
||||||
|
|
||||||
-#define DWARF_SECTION_COUNT 5
|
|
||||||
+#define DWARF_SECTION_COUNT 6
|
|
||||||
|
|
||||||
static struct dwarf_section *
|
|
||||||
obj_dwarf_section_at(obj_info_t *obj, int n)
|
|
||||||
@@ -175,6 +176,7 @@
|
|
||||||
&obj->debug_info,
|
|
||||||
&obj->debug_line,
|
|
||||||
&obj->debug_ranges,
|
|
||||||
+ &obj->debug_rnglists,
|
|
||||||
&obj->debug_str
|
|
||||||
};
|
|
||||||
if (n < 0 || DWARF_SECTION_COUNT <= n) {
|
|
||||||
@@ -413,7 +415,7 @@
|
|
||||||
FILL_LINE();
|
|
||||||
break;
|
|
||||||
case DW_LNS_advance_pc:
|
|
||||||
- a = uleb128((char **)&p);
|
|
||||||
+ a = uleb128((char **)&p) * header.minimum_instruction_length;
|
|
||||||
addr += a;
|
|
||||||
break;
|
|
||||||
case DW_LNS_advance_line: {
|
|
||||||
@@ -452,7 +454,7 @@
|
|
||||||
/* isa = (unsigned int)*/(void)uleb128((char **)&p);
|
|
||||||
break;
|
|
||||||
case 0:
|
|
||||||
- a = *(unsigned char *)p++;
|
|
||||||
+ a = uleb128((char **)&p);
|
|
||||||
op = *p++;
|
|
||||||
switch (op) {
|
|
||||||
case DW_LNE_end_sequence:
|
|
||||||
@@ -766,6 +768,18 @@
|
|
||||||
DW_FORM_addrx4 = 0x2c
|
|
||||||
};
|
|
||||||
|
|
||||||
+/* Range list entry encodings */
|
|
||||||
+enum {
|
|
||||||
+ DW_RLE_end_of_list = 0x00,
|
|
||||||
+ DW_RLE_base_addressx = 0x01,
|
|
||||||
+ DW_RLE_startx_endx = 0x02,
|
|
||||||
+ DW_RLE_startx_length = 0x03,
|
|
||||||
+ DW_RLE_offset_pair = 0x04,
|
|
||||||
+ DW_RLE_base_address = 0x05,
|
|
||||||
+ DW_RLE_start_end = 0x06,
|
|
||||||
+ DW_RLE_start_length = 0x07
|
|
||||||
+};
|
|
||||||
+
|
|
||||||
enum {
|
|
||||||
VAL_none = 0,
|
|
||||||
VAL_cstr = 1,
|
|
||||||
@@ -919,6 +933,23 @@
|
|
||||||
}
|
|
||||||
|
|
||||||
static void
|
|
||||||
+di_skip_die_attributes(char **p)
|
|
||||||
+{
|
|
||||||
+ for (;;) {
|
|
||||||
+ uint64_t at = uleb128(p);
|
|
||||||
+ uint64_t form = uleb128(p);
|
|
||||||
+ if (!at && !form) break;
|
|
||||||
+ switch (form) {
|
|
||||||
+ default:
|
|
||||||
+ break;
|
|
||||||
+ case DW_FORM_implicit_const:
|
|
||||||
+ sleb128(p);
|
|
||||||
+ break;
|
|
||||||
+ }
|
|
||||||
+ }
|
|
||||||
+}
|
|
||||||
+
|
|
||||||
+static void
|
|
||||||
di_read_debug_abbrev_cu(DebugInfoReader *reader)
|
|
||||||
{
|
|
||||||
uint64_t prev = 0;
|
|
||||||
@@ -932,12 +963,7 @@
|
|
||||||
prev = abbrev_number;
|
|
||||||
uleb128(&p); /* tag */
|
|
||||||
p++; /* has_children */
|
|
||||||
- /* skip content */
|
|
||||||
- for (;;) {
|
|
||||||
- uint64_t at = uleb128(&p);
|
|
||||||
- uint64_t form = uleb128(&p);
|
|
||||||
- if (!at && !form) break;
|
|
||||||
- }
|
|
||||||
+ di_skip_die_attributes(&p);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
@@ -1202,12 +1228,7 @@
|
|
||||||
/* skip 255th record */
|
|
||||||
uleb128(&p); /* tag */
|
|
||||||
p++; /* has_children */
|
|
||||||
- /* skip content */
|
|
||||||
- for (;;) {
|
|
||||||
- uint64_t at = uleb128(&p);
|
|
||||||
- uint64_t form = uleb128(&p);
|
|
||||||
- if (!at && !form) break;
|
|
||||||
- }
|
|
||||||
+ di_skip_die_attributes(&p);
|
|
||||||
for (n = uleb128(&p); abbrev_number != n; n = uleb128(&p)) {
|
|
||||||
if (n == 0) {
|
|
||||||
fprintf(stderr,"%d: Abbrev Number %"PRId64" not found\n",__LINE__, abbrev_number);
|
|
||||||
@@ -1215,12 +1236,7 @@
|
|
||||||
}
|
|
||||||
uleb128(&p); /* tag */
|
|
||||||
p++; /* has_children */
|
|
||||||
- /* skip content */
|
|
||||||
- for (;;) {
|
|
||||||
- uint64_t at = uleb128(&p);
|
|
||||||
- uint64_t form = uleb128(&p);
|
|
||||||
- if (!at && !form) break;
|
|
||||||
- }
|
|
||||||
+ di_skip_die_attributes(&p);
|
|
||||||
}
|
|
||||||
return p;
|
|
||||||
}
|
|
||||||
@@ -1348,6 +1364,21 @@
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
+static uint64_t
|
|
||||||
+read_dw_form_addr(DebugInfoReader *reader, char **ptr)
|
|
||||||
+{
|
|
||||||
+ char *p = *ptr;
|
|
||||||
+ *ptr = p + reader->format;
|
|
||||||
+ if (reader->format == 4) {
|
|
||||||
+ return read_uint32(&p);
|
|
||||||
+ } else if (reader->format == 8) {
|
|
||||||
+ return read_uint64(&p);
|
|
||||||
+ } else {
|
|
||||||
+ fprintf(stderr,"unknown address_size:%d", reader->address_size);
|
|
||||||
+ abort();
|
|
||||||
+ }
|
|
||||||
+}
|
|
||||||
+
|
|
||||||
static uintptr_t
|
|
||||||
ranges_include(DebugInfoReader *reader, ranges_t *ptr, uint64_t addr)
|
|
||||||
{
|
|
||||||
@@ -1361,8 +1392,50 @@
|
|
||||||
}
|
|
||||||
else if (ptr->ranges_set) {
|
|
||||||
/* TODO: support base address selection entry */
|
|
||||||
- char *p = reader->obj->debug_ranges.ptr + ptr->ranges;
|
|
||||||
+ char *p;
|
|
||||||
uint64_t base = ptr->low_pc_set ? ptr->low_pc : reader->current_low_pc;
|
|
||||||
+ if (reader->obj->debug_rnglists.ptr) {
|
|
||||||
+ p = reader->obj->debug_rnglists.ptr + ptr->ranges;
|
|
||||||
+ for (;;) {
|
|
||||||
+ uint8_t rle = read_uint8(&p);
|
|
||||||
+ uintptr_t base_address = 0;
|
|
||||||
+ uintptr_t from, to;
|
|
||||||
+ if (rle == DW_RLE_end_of_list) break;
|
|
||||||
+ switch (rle) {
|
|
||||||
+ case DW_RLE_base_addressx:
|
|
||||||
+ uleb128(&p);
|
|
||||||
+ break;
|
|
||||||
+ case DW_RLE_startx_endx:
|
|
||||||
+ uleb128(&p);
|
|
||||||
+ uleb128(&p);
|
|
||||||
+ break;
|
|
||||||
+ case DW_RLE_startx_length:
|
|
||||||
+ uleb128(&p);
|
|
||||||
+ uleb128(&p);
|
|
||||||
+ break;
|
|
||||||
+ case DW_RLE_offset_pair:
|
|
||||||
+ from = base_address + uleb128(&p);
|
|
||||||
+ to = base_address + uleb128(&p);
|
|
||||||
+ if (base + from <= addr && addr < base + to) {
|
|
||||||
+ return from;
|
|
||||||
+ }
|
|
||||||
+ break;
|
|
||||||
+ case DW_RLE_base_address:
|
|
||||||
+ base_address = read_dw_form_addr(reader, &p);
|
|
||||||
+ break;
|
|
||||||
+ case DW_RLE_start_end:
|
|
||||||
+ read_dw_form_addr(reader, &p);
|
|
||||||
+ read_dw_form_addr(reader, &p);
|
|
||||||
+ break;
|
|
||||||
+ case DW_RLE_start_length:
|
|
||||||
+ read_dw_form_addr(reader, &p);
|
|
||||||
+ uleb128(&p);
|
|
||||||
+ break;
|
|
||||||
+ }
|
|
||||||
+ }
|
|
||||||
+ return false;
|
|
||||||
+ }
|
|
||||||
+ p = reader->obj->debug_ranges.ptr + ptr->ranges;
|
|
||||||
for (;;) {
|
|
||||||
uintptr_t from = read_uintptr(&p);
|
|
||||||
uintptr_t to = read_uintptr(&p);
|
|
||||||
@@ -1702,6 +1775,7 @@
|
|
||||||
".debug_info",
|
|
||||||
".debug_line",
|
|
||||||
".debug_ranges",
|
|
||||||
+ ".debug_rnglists",
|
|
||||||
".debug_str"
|
|
||||||
};
|
|
||||||
|
|
||||||
@@ -1950,6 +2024,7 @@
|
|
||||||
"__debug_info",
|
|
||||||
"__debug_line",
|
|
||||||
"__debug_ranges",
|
|
||||||
+ "__debug_rnglists",
|
|
||||||
"__debug_str"
|
|
||||||
};
|
|
||||||
struct LP(segment_command) *scmd = (struct LP(segment_command) *)lcmd;
|
|
||||||
59
ruby.rpmlintrc
Normal file
59
ruby.rpmlintrc
Normal file
|
|
@ -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$')
|
||||||
|
|
@ -1,157 +0,0 @@
|
||||||
From 65cfebb041c454c246aaf32a177b0243915a9998 Mon Sep 17 00:00:00 2001
|
|
||||||
From: fatkodima <fatkodima123@gmail.com>
|
|
||||||
Date: Fri, 1 Nov 2019 23:06:10 +0200
|
|
||||||
Subject: [PATCH] Don't use insecure temporary directory as home directory
|
|
||||||
|
|
||||||
---
|
|
||||||
lib/bundler.rb | 29 +++++++++++---------------
|
|
||||||
spec/bundler/bundler_spec.rb | 38 +++++++++--------------------------
|
|
||||||
spec/bundler/settings_spec.rb | 2 +-
|
|
||||||
3 files changed, 22 insertions(+), 47 deletions(-)
|
|
||||||
|
|
||||||
diff --git a/lib/bundler.rb b/lib/bundler.rb
|
|
||||||
index 2ada6fe7891..b184f7e69c6 100644
|
|
||||||
--- a/lib/bundler.rb
|
|
||||||
+++ b/lib/bundler.rb
|
|
||||||
@@ -170,8 +170,7 @@ def user_home
|
|
||||||
end
|
|
||||||
|
|
||||||
if warning
|
|
||||||
- Kernel.send(:require, "etc")
|
|
||||||
- user_home = tmp_home_path(Etc.getlogin, warning)
|
|
||||||
+ user_home = tmp_home_path(warning)
|
|
||||||
Bundler.ui.warn "#{warning}\nBundler will use `#{user_home}' as your home directory temporarily.\n"
|
|
||||||
user_home
|
|
||||||
else
|
|
||||||
@@ -180,21 +180,6 @@ def user_home
|
|
||||||
end
|
|
||||||
end
|
|
||||||
|
|
||||||
- def tmp_home_path(login, warning)
|
|
||||||
- login ||= "unknown"
|
|
||||||
- Kernel.send(:require, "tmpdir")
|
|
||||||
- path = Pathname.new(Dir.tmpdir).join("bundler", "home")
|
|
||||||
- SharedHelpers.filesystem_access(path) do |tmp_home_path|
|
|
||||||
- unless tmp_home_path.exist?
|
|
||||||
- tmp_home_path.mkpath
|
|
||||||
- tmp_home_path.chmod(0o777)
|
|
||||||
- end
|
|
||||||
- tmp_home_path.join(login).tap(&:mkpath)
|
|
||||||
- end
|
|
||||||
- rescue RuntimeError => e
|
|
||||||
- raise e.exception("#{warning}\nBundler also failed to create a temporary home directory at `#{path}':\n#{e}")
|
|
||||||
- end
|
|
||||||
-
|
|
||||||
def user_bundle_path(dir = "home")
|
|
||||||
env_var, fallback = case dir
|
|
||||||
when "home"
|
|
||||||
@@ -555,6 +555,17 @@ def configure_gem_home
|
|
||||||
Bundler.rubygems.clear_paths
|
|
||||||
end
|
|
||||||
|
|
||||||
+ def tmp_home_path(warning)
|
|
||||||
+ Kernel.send(:require, "tmpdir")
|
|
||||||
+ SharedHelpers.filesystem_access(Dir.tmpdir) do
|
|
||||||
+ path = Bundler.tmp
|
|
||||||
+ at_exit { Bundler.rm_rf(path) }
|
|
||||||
+ path
|
|
||||||
+ end
|
|
||||||
+ rescue RuntimeError => e
|
|
||||||
+ raise e.exception("#{warning}\nBundler also failed to create a temporary home directory':\n#{e}")
|
|
||||||
+ end
|
|
||||||
+
|
|
||||||
# @param env [Hash]
|
|
||||||
def with_env(env)
|
|
||||||
backup = ENV.to_hash
|
|
||||||
diff --git a/spec/bundler/bundler/bundler_spec.rb b/spec/bundler/bundler/bundler_spec.rb
|
|
||||||
index 74cf7ae05d3..247838600bf 100644
|
|
||||||
--- a/spec/bundler/bundler/bundler_spec.rb
|
|
||||||
+++ b/spec/bundler/bundler/bundler_spec.rb
|
|
||||||
@@ -233,16 +233,13 @@
|
|
||||||
path = "/home/oggy"
|
|
||||||
allow(Bundler.rubygems).to receive(:user_home).and_return(path)
|
|
||||||
allow(File).to receive(:directory?).with(path).and_return false
|
|
||||||
- allow(Etc).to receive(:getlogin).and_return("USER")
|
|
||||||
- allow(Dir).to receive(:tmpdir).and_return("/TMP")
|
|
||||||
- allow(FileTest).to receive(:exist?).with("/TMP/bundler/home").and_return(true)
|
|
||||||
- expect(FileUtils).to receive(:mkpath).with("/TMP/bundler/home/USER")
|
|
||||||
+ allow(Bundler).to receive(:tmp).and_return(Pathname.new("/tmp/trulyrandom"))
|
|
||||||
message = <<EOF
|
|
||||||
`/home/oggy` is not a directory.
|
|
||||||
-Bundler will use `/TMP/bundler/home/USER' as your home directory temporarily.
|
|
||||||
+Bundler will use `/tmp/trulyrandom' as your home directory temporarily.
|
|
||||||
EOF
|
|
||||||
expect(Bundler.ui).to receive(:warn).with(message)
|
|
||||||
- expect(Bundler.user_home).to eq(Pathname("/TMP/bundler/home/USER"))
|
|
||||||
+ expect(Bundler.user_home).to eq(Pathname("/tmp/trulyrandom"))
|
|
||||||
end
|
|
||||||
end
|
|
||||||
|
|
||||||
@@ -255,16 +252,13 @@
|
|
||||||
allow(File).to receive(:directory?).with(path).and_return true
|
|
||||||
allow(File).to receive(:writable?).with(path).and_return false
|
|
||||||
allow(File).to receive(:directory?).with(dotbundle).and_return false
|
|
||||||
- allow(Etc).to receive(:getlogin).and_return("USER")
|
|
||||||
- allow(Dir).to receive(:tmpdir).and_return("/TMP")
|
|
||||||
- allow(FileTest).to receive(:exist?).with("/TMP/bundler/home").and_return(true)
|
|
||||||
- expect(FileUtils).to receive(:mkpath).with("/TMP/bundler/home/USER")
|
|
||||||
+ allow(Bundler).to receive(:tmp).and_return(Pathname.new("/tmp/trulyrandom"))
|
|
||||||
message = <<EOF
|
|
||||||
`/home/oggy` is not writable.
|
|
||||||
-Bundler will use `/TMP/bundler/home/USER' as your home directory temporarily.
|
|
||||||
+Bundler will use `/tmp/trulyrandom' as your home directory temporarily.
|
|
||||||
EOF
|
|
||||||
expect(Bundler.ui).to receive(:warn).with(message)
|
|
||||||
- expect(Bundler.user_home).to eq(Pathname("/TMP/bundler/home/USER"))
|
|
||||||
+ expect(Bundler.user_home).to eq(Pathname("/tmp/trulyrandom"))
|
|
||||||
end
|
|
||||||
|
|
||||||
context ".bundle exists and have correct permissions" do
|
|
||||||
@@ -283,31 +277,17 @@
|
|
||||||
context "home directory is not set" do
|
|
||||||
it "should issue warning and return a temporary user home" do
|
|
||||||
allow(Bundler.rubygems).to receive(:user_home).and_return(nil)
|
|
||||||
- allow(Etc).to receive(:getlogin).and_return("USER")
|
|
||||||
- allow(Dir).to receive(:tmpdir).and_return("/TMP")
|
|
||||||
- allow(FileTest).to receive(:exist?).with("/TMP/bundler/home").and_return(true)
|
|
||||||
- expect(FileUtils).to receive(:mkpath).with("/TMP/bundler/home/USER")
|
|
||||||
+ allow(Bundler).to receive(:tmp).and_return(Pathname.new("/tmp/trulyrandom"))
|
|
||||||
message = <<EOF
|
|
||||||
Your home directory is not set.
|
|
||||||
-Bundler will use `/TMP/bundler/home/USER' as your home directory temporarily.
|
|
||||||
+Bundler will use `/tmp/trulyrandom' as your home directory temporarily.
|
|
||||||
EOF
|
|
||||||
expect(Bundler.ui).to receive(:warn).with(message)
|
|
||||||
- expect(Bundler.user_home).to eq(Pathname("/TMP/bundler/home/USER"))
|
|
||||||
+ expect(Bundler.user_home).to eq(Pathname("/tmp/trulyrandom"))
|
|
||||||
end
|
|
||||||
end
|
|
||||||
end
|
|
||||||
|
|
||||||
- describe "#tmp_home_path" do
|
|
||||||
- it "should create temporary user home" do
|
|
||||||
- allow(Dir).to receive(:tmpdir).and_return("/TMP")
|
|
||||||
- allow(FileTest).to receive(:exist?).with("/TMP/bundler/home").and_return(false)
|
|
||||||
- expect(FileUtils).to receive(:mkpath).once.ordered.with("/TMP/bundler/home")
|
|
||||||
- expect(FileUtils).to receive(:mkpath).once.ordered.with("/TMP/bundler/home/USER")
|
|
||||||
- expect(File).to receive(:chmod).with(0o777, "/TMP/bundler/home")
|
|
||||||
- expect(Bundler.tmp_home_path("USER", "")).to eq(Pathname("/TMP/bundler/home/USER"))
|
|
||||||
- end
|
|
||||||
- end
|
|
||||||
-
|
|
||||||
describe "#requires_sudo?" do
|
|
||||||
let!(:tmpdir) { Dir.mktmpdir }
|
|
||||||
let(:bundle_path) { Pathname("#{tmpdir}/bundle") }
|
|
||||||
diff --git a/spec/bundler/bundler/settings_spec.rb b/spec/bundler/bundler/settings_spec.rb
|
|
||||||
index 7e1dadded76..2a285fdcf37 100644
|
|
||||||
--- a/spec/bundler/bundler/settings_spec.rb
|
|
||||||
+++ b/spec/bundler/bundler/settings_spec.rb
|
|
||||||
@@ -67,7 +67,7 @@
|
|
||||||
context "when $TMPDIR is not writable" do
|
|
||||||
it "does not raise" do
|
|
||||||
expect(Bundler.rubygems).to receive(:user_home).twice.and_return(nil)
|
|
||||||
- expect(FileUtils).to receive(:mkpath).twice.with(File.join(Dir.tmpdir, "bundler", "home")).and_raise(Errno::EROFS, "Read-only file system @ dir_s_mkdir - /tmp/bundler")
|
|
||||||
+ expect(Bundler).to receive(:tmp).twice.and_raise(Errno::EROFS, "Read-only file system @ dir_s_mkdir - /tmp/bundler")
|
|
||||||
|
|
||||||
expect(subject.send(:global_config_file)).to be_nil
|
|
||||||
end
|
|
||||||
|
|
@ -1,24 +0,0 @@
|
||||||
From c16675582a68800ef17b6056110e0a8bcdb38b55 Mon Sep 17 00:00:00 2001
|
|
||||||
From: SHIBATA Hiroshi <hsbt@ruby-lang.org>
|
|
||||||
Date: Tue, 22 Jan 2019 09:37:23 +0900
|
|
||||||
Subject: [PATCH] Avoid rdoc hook when it's failed to load rdoc library.
|
|
||||||
|
|
||||||
Fixed #2483
|
|
||||||
---
|
|
||||||
lib/rubygems/rdoc.rb | 4 ++--
|
|
||||||
1 file changed, 2 insertions(+), 2 deletions(-)
|
|
||||||
|
|
||||||
diff --git a/lib/rubygems/rdoc.rb b/lib/rubygems/rdoc.rb
|
|
||||||
index dfaf7c55bf..4e16fbb86f 100644
|
|
||||||
--- a/lib/rubygems/rdoc.rb
|
|
||||||
+++ b/lib/rubygems/rdoc.rb
|
|
||||||
@@ -18,7 +18,7 @@
|
|
||||||
module Gem
|
|
||||||
RDoc = ::RDoc::RubygemsHook
|
|
||||||
end
|
|
||||||
+
|
|
||||||
+ Gem.done_installing(&Gem::RDoc.method(:generation_hook))
|
|
||||||
rescue LoadError
|
|
||||||
end
|
|
||||||
-
|
|
||||||
-Gem.done_installing(&Gem::RDoc.method(:generation_hook))
|
|
||||||
|
|
@ -1,88 +0,0 @@
|
||||||
From f4061357d812e9033f07ae3f8f44c4e26839f1e5 Mon Sep 17 00:00:00 2001
|
|
||||||
From: bronzdoc <lsagastume1990@gmail.com>
|
|
||||||
Date: Mon, 14 Jan 2019 09:46:29 -0600
|
|
||||||
Subject: [PATCH] Restore gem build behavior and introdcue the "-C" flag to gem
|
|
||||||
build
|
|
||||||
|
|
||||||
---
|
|
||||||
lib/rubygems/commands/build_command.rb | 41 +++++++++++++------
|
|
||||||
.../test_gem_commands_build_command.rb | 1 +
|
|
||||||
2 files changed, 29 insertions(+), 13 deletions(-)
|
|
||||||
|
|
||||||
diff --git a/lib/rubygems/commands/build_command.rb b/lib/rubygems/commands/build_command.rb
|
|
||||||
index e59471e976..761b80ee94 100644
|
|
||||||
--- a/lib/rubygems/commands/build_command.rb
|
|
||||||
+++ b/lib/rubygems/commands/build_command.rb
|
|
||||||
@@ -18,6 +18,10 @@ def initialize
|
|
||||||
add_option '-o', '--output FILE', 'output gem with the given filename' do |value, options|
|
|
||||||
options[:output] = value
|
|
||||||
end
|
|
||||||
+
|
|
||||||
+ add_option '-C PATH', '', 'Run as if gem build was started in <PATH> instead of the current working directory.' do |value, options|
|
|
||||||
+ options[:build_path] = value
|
|
||||||
+ end
|
|
||||||
end
|
|
||||||
|
|
||||||
def arguments # :nodoc:
|
|
||||||
@@ -60,25 +64,36 @@ def execute
|
|
||||||
end
|
|
||||||
|
|
||||||
if File.exist? gemspec
|
|
||||||
- Dir.chdir(File.dirname(gemspec)) do
|
|
||||||
- spec = Gem::Specification.load File.basename(gemspec)
|
|
||||||
-
|
|
||||||
- if spec
|
|
||||||
- Gem::Package.build(
|
|
||||||
- spec,
|
|
||||||
- options[:force],
|
|
||||||
- options[:strict],
|
|
||||||
- options[:output]
|
|
||||||
- )
|
|
||||||
- else
|
|
||||||
- alert_error "Error loading gemspec. Aborting."
|
|
||||||
- terminate_interaction 1
|
|
||||||
+ spec = Gem::Specification.load(gemspec)
|
|
||||||
+
|
|
||||||
+ if options[:build_path]
|
|
||||||
+ Dir.chdir(File.dirname(gemspec)) do
|
|
||||||
+ spec = Gem::Specification.load File.basename(gemspec)
|
|
||||||
+ build_package(spec)
|
|
||||||
end
|
|
||||||
+ else
|
|
||||||
+ build_package(spec)
|
|
||||||
end
|
|
||||||
+
|
|
||||||
else
|
|
||||||
alert_error "Gemspec file not found: #{gemspec}"
|
|
||||||
terminate_interaction 1
|
|
||||||
end
|
|
||||||
end
|
|
||||||
|
|
||||||
+ private
|
|
||||||
+
|
|
||||||
+ def build_package(spec)
|
|
||||||
+ if spec
|
|
||||||
+ Gem::Package.build(
|
|
||||||
+ spec,
|
|
||||||
+ options[:force],
|
|
||||||
+ options[:strict],
|
|
||||||
+ options[:output]
|
|
||||||
+ )
|
|
||||||
+ else
|
|
||||||
+ alert_error "Error loading gemspec. Aborting."
|
|
||||||
+ terminate_interaction 1
|
|
||||||
+ end
|
|
||||||
+ end
|
|
||||||
end
|
|
||||||
diff --git a/test/rubygems/test_gem_commands_build_command.rb b/test/rubygems/test_gem_commands_build_command.rb
|
|
||||||
index ac82a408c7..02d1b98e8f 100644
|
|
||||||
--- a/test/rubygems/test_gem_commands_build_command.rb
|
|
||||||
+++ b/test/rubygems/test_gem_commands_build_command.rb
|
|
||||||
@@ -207,6 +207,7 @@ def test_execute_outside_dir
|
|
||||||
gs.write @gem.to_ruby
|
|
||||||
end
|
|
||||||
|
|
||||||
+ @cmd.options[:build_path] = gemspec_dir
|
|
||||||
@cmd.options[:args] = [gemspec_file]
|
|
||||||
|
|
||||||
use_ui @ui do
|
|
||||||
|
|
@ -19,7 +19,7 @@ module RubyGemsReq
|
||||||
end
|
end
|
||||||
|
|
||||||
# Report conflicting gem dependencies including their version.
|
# Report conflicting gem dependencies including their version.
|
||||||
def self.gem_depenencies(specification)
|
def self.gem_dependencies(specification)
|
||||||
specification.runtime_dependencies.each do |dependency|
|
specification.runtime_dependencies.each do |dependency|
|
||||||
conflict_strings = Helpers::requirement_versions_to_rpm(dependency.requirement).map do |requirement|
|
conflict_strings = Helpers::requirement_versions_to_rpm(dependency.requirement).map do |requirement|
|
||||||
requirement_string = "rubygem(#{dependency.name}) #{requirement}"
|
requirement_string = "rubygem(#{dependency.name}) #{requirement}"
|
||||||
|
|
@ -39,7 +39,7 @@ module RubyGemsReq
|
||||||
begin
|
begin
|
||||||
specification = Gem::Specification.load filename
|
specification = Gem::Specification.load filename
|
||||||
|
|
||||||
gem_depenencies(specification)
|
gem_dependencies(specification)
|
||||||
rescue => e
|
rescue => e
|
||||||
# Ignore all errors.
|
# Ignore all errors.
|
||||||
end
|
end
|
||||||
|
|
|
||||||
|
|
@ -58,7 +58,7 @@ module RubyGemsReq
|
||||||
end
|
end
|
||||||
|
|
||||||
# Report all gem dependencies including their version.
|
# Report all gem dependencies including their version.
|
||||||
def self.gem_depenencies(specification)
|
def self.gem_dependencies(specification)
|
||||||
specification.runtime_dependencies.each do |dependency|
|
specification.runtime_dependencies.each do |dependency|
|
||||||
dependency_name = "rubygem(#{dependency.name})"
|
dependency_name = "rubygem(#{dependency.name})"
|
||||||
requirements = Helpers::requirement_versions_to_rpm(dependency.requirement)
|
requirements = Helpers::requirement_versions_to_rpm(dependency.requirement)
|
||||||
|
|
@ -75,7 +75,7 @@ module RubyGemsReq
|
||||||
specification = Gem::Specification.load filename
|
specification = Gem::Specification.load filename
|
||||||
|
|
||||||
rubygems_dependency(specification)
|
rubygems_dependency(specification)
|
||||||
gem_depenencies(specification)
|
gem_dependencies(specification)
|
||||||
rescue => e
|
rescue => e
|
||||||
# Ignore all errors.
|
# Ignore all errors.
|
||||||
end
|
end
|
||||||
|
|
|
||||||
2
sources
2
sources
|
|
@ -1 +1 @@
|
||||||
SHA512 (ruby-2.6.9.tar.xz) = f60aa89e685cea324185eb0d13e6b44caef4e4f761cbf9ea1386ae70e39faf3866ac01e4bb5354574f2583e74290b8c80eaf63d126040d52368be6c771476451
|
SHA512 (ruby-4.0.1.tar.xz) = b67d9d1f97ba30200d103f8454e39dc2d0450819d51d91eb5451d44b0bafc56d2fa48bb1be6c5081babe5828f679984bad02b9bcee7441f6bd34c0a95b8f200b
|
||||||
|
|
|
||||||
34
test_openssl_fips.rb
Normal file
34
test_openssl_fips.rb
Normal file
|
|
@ -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
|
||||||
124
test_rubygems_con.rb
Normal file
124
test_rubygems_con.rb
Normal file
|
|
@ -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
|
||||||
52
test_rubygems_prov.rb
Normal file
52
test_rubygems_prov.rb
Normal file
|
|
@ -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
|
||||||
205
test_rubygems_req.rb
Normal file
205
test_rubygems_req.rb
Normal file
|
|
@ -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
|
||||||
Loading…
Add table
Add a link
Reference in a new issue