c8-beta-stream-3.3
imports/c8-beta-stream-3.3/ruby-3.3.0-1.module+el8.10.0+21226+b78a28c4
commit
49ccfbabbe
@ -0,0 +1 @@
|
||||
SOURCES/ruby-3.3.0.tar.xz
|
@ -0,0 +1 @@
|
||||
c8f68e1b0a114b90460a0b44165a3b2f540fa5b6 SOURCES/ruby-3.3.0.tar.xz
|
@ -0,0 +1,303 @@
|
||||
/* SystemTap tapset to make it easier to trace Ruby 2.0
|
||||
*
|
||||
* All probes provided by Ruby can be listed using following command
|
||||
* (the path to the library must be adjuste appropriately):
|
||||
*
|
||||
* stap -L 'process("@LIBRARY_PATH@").mark("*")'
|
||||
*/
|
||||
|
||||
/**
|
||||
* probe ruby.array.create - Allocation of new array.
|
||||
*
|
||||
* @size: Number of elements (an int)
|
||||
* @file: The file name where the method is being called (string)
|
||||
* @line: The line number where the method is being called (int)
|
||||
*/
|
||||
probe ruby.array.create =
|
||||
process("@LIBRARY_PATH@").mark("array__create")
|
||||
{
|
||||
size = $arg1
|
||||
file = user_string($arg2)
|
||||
line = $arg3
|
||||
}
|
||||
|
||||
/**
|
||||
* probe ruby.cmethod.entry - Fired just before a method implemented in C is entered.
|
||||
*
|
||||
* @classname: Name of the class (string)
|
||||
* @methodname: The method about bo be executed (string)
|
||||
* @file: The file name where the method is being called (string)
|
||||
* @line: The line number where the method is being called (int)
|
||||
*/
|
||||
probe ruby.cmethod.entry =
|
||||
process("@LIBRARY_PATH@").mark("cmethod__entry")
|
||||
{
|
||||
classname = user_string($arg1)
|
||||
methodname = user_string($arg2)
|
||||
file = user_string($arg3)
|
||||
line = $arg4
|
||||
}
|
||||
|
||||
/**
|
||||
* probe ruby.cmethod.return - Fired just after a method implemented in C has returned.
|
||||
*
|
||||
* @classname: Name of the class (string)
|
||||
* @methodname: The executed method (string)
|
||||
* @file: The file name where the method is being called (string)
|
||||
* @line: The line number where the method is being called (int)
|
||||
*/
|
||||
probe ruby.cmethod.return =
|
||||
process("@LIBRARY_PATH@").mark("cmethod__return")
|
||||
{
|
||||
classname = user_string($arg1)
|
||||
methodname = user_string($arg2)
|
||||
file = user_string($arg3)
|
||||
line = $arg4
|
||||
}
|
||||
|
||||
/**
|
||||
* probe ruby.find.require.entry - Fired when require starts to search load
|
||||
* path for suitable file to require.
|
||||
*
|
||||
* @requiredfile: The name of the file to be required (string)
|
||||
* @file: The file name where the method is being called (string)
|
||||
* @line: The line number where the method is being called (int)
|
||||
*/
|
||||
probe ruby.find.require.entry =
|
||||
process("@LIBRARY_PATH@").mark("find__require__entry")
|
||||
{
|
||||
requiredfile = user_string($arg1)
|
||||
file = user_string($arg2)
|
||||
line = $arg3
|
||||
}
|
||||
|
||||
/**
|
||||
* probe ruby.find.require.return - Fired just after require has finished
|
||||
* search of load path for suitable file to require.
|
||||
*
|
||||
* @requiredfile: The name of the file to be required (string)
|
||||
* @file: The file name where the method is being called (string)
|
||||
* @line: The line number where the method is being called (int)
|
||||
*/
|
||||
probe ruby.find.require.return =
|
||||
process("@LIBRARY_PATH@").mark("find__require__return")
|
||||
{
|
||||
requiredfile = user_string($arg1)
|
||||
file = user_string($arg2)
|
||||
line = $arg3
|
||||
}
|
||||
|
||||
/**
|
||||
* probe ruby.gc.mark.begin - Fired when a GC mark phase is about to start.
|
||||
*
|
||||
* It takes no arguments.
|
||||
*/
|
||||
probe ruby.gc.mark.begin =
|
||||
process("@LIBRARY_PATH@").mark("gc__mark__begin")
|
||||
{
|
||||
}
|
||||
|
||||
/**
|
||||
* probe ruby.gc.mark.end - Fired when a GC mark phase has ended.
|
||||
*
|
||||
* It takes no arguments.
|
||||
*/
|
||||
probe ruby.gc.mark.end =
|
||||
process("@LIBRARY_PATH@").mark("gc__mark__end")
|
||||
{
|
||||
}
|
||||
|
||||
/**
|
||||
* probe ruby.gc.sweep.begin - Fired when a GC sweep phase is about to start.
|
||||
*
|
||||
* It takes no arguments.
|
||||
*/
|
||||
probe ruby.gc.sweep.begin =
|
||||
process("@LIBRARY_PATH@").mark("gc__sweep__begin")
|
||||
{
|
||||
}
|
||||
|
||||
/**
|
||||
* probe ruby.gc.sweep.end - Fired when a GC sweep phase has ended.
|
||||
*
|
||||
* It takes no arguments.
|
||||
*/
|
||||
probe ruby.gc.sweep.end =
|
||||
process("@LIBRARY_PATH@").mark("gc__sweep__end")
|
||||
{
|
||||
}
|
||||
|
||||
/**
|
||||
* probe ruby.hash.create - Allocation of new hash.
|
||||
*
|
||||
* @size: Number of elements (int)
|
||||
* @file: The file name where the method is being called (string)
|
||||
* @line: The line number where the method is being called (int)
|
||||
*/
|
||||
probe ruby.hash.create =
|
||||
process("@LIBRARY_PATH@").mark("hash__create")
|
||||
{
|
||||
size = $arg1
|
||||
file = user_string($arg2)
|
||||
line = $arg3
|
||||
}
|
||||
|
||||
/**
|
||||
* probe ruby.load.entry - Fired when calls to "load" are made.
|
||||
*
|
||||
* @loadedfile: The name of the file to be loaded (string)
|
||||
* @file: The file name where the method is being called (string)
|
||||
* @line: The line number where the method is being called (int)
|
||||
*/
|
||||
probe ruby.load.entry =
|
||||
process("@LIBRARY_PATH@").mark("load__entry")
|
||||
{
|
||||
loadedfile = user_string($arg1)
|
||||
file = user_string($arg2)
|
||||
line = $arg3
|
||||
}
|
||||
|
||||
/**
|
||||
* probe ruby.load.return - Fired just after require has finished
|
||||
* search of load path for suitable file to require.
|
||||
*
|
||||
* @loadedfile: The name of the file that was loaded (string)
|
||||
*/
|
||||
probe ruby.load.return =
|
||||
process("@LIBRARY_PATH@").mark("load__return")
|
||||
{
|
||||
loadedfile = user_string($arg1)
|
||||
}
|
||||
|
||||
/**
|
||||
* probe ruby.method.entry - Fired just before a method implemented in Ruby is entered.
|
||||
*
|
||||
* @classname: Name of the class (string)
|
||||
* @methodname: The method about bo be executed (string)
|
||||
* @file: The file name where the method is being called (string)
|
||||
* @line: The line number where the method is being called (int)
|
||||
*/
|
||||
probe ruby.method.entry =
|
||||
process("@LIBRARY_PATH@").mark("method__entry")
|
||||
{
|
||||
classname = user_string($arg1)
|
||||
methodname = user_string($arg2)
|
||||
file = user_string($arg3)
|
||||
line = $arg4
|
||||
}
|
||||
|
||||
/**
|
||||
* probe ruby.method.return - Fired just after a method implemented in Ruby has returned.
|
||||
*
|
||||
* @classname: Name of the class (string)
|
||||
* @methodname: The executed method (string)
|
||||
* @file: The file name where the method is being called (string)
|
||||
* @line: The line number where the method is being called (int)
|
||||
*/
|
||||
probe ruby.method.return =
|
||||
process("@LIBRARY_PATH@").mark("method__return")
|
||||
{
|
||||
classname = user_string($arg1)
|
||||
methodname = user_string($arg2)
|
||||
file = user_string($arg3)
|
||||
line = $arg4
|
||||
}
|
||||
|
||||
/**
|
||||
* probe ruby.object.create - Allocation of new object.
|
||||
*
|
||||
* @classname: Name of the class (string)
|
||||
* @file: The file name where the method is being called (string)
|
||||
* @line: The line number where the method is being called (int)
|
||||
*/
|
||||
probe ruby.object.create =
|
||||
process("@LIBRARY_PATH@").mark("object__create")
|
||||
{
|
||||
classname = user_string($arg1)
|
||||
file = user_string($arg2)
|
||||
line = $arg3
|
||||
}
|
||||
|
||||
/**
|
||||
* probe ruby.parse.begin - Fired just before a Ruby source file is parsed.
|
||||
*
|
||||
* @parsedfile: The name of the file to be parsed (string)
|
||||
* @parsedline: The line number of beginning of parsing (int)
|
||||
*/
|
||||
probe ruby.parse.begin =
|
||||
process("@LIBRARY_PATH@").mark("parse__begin")
|
||||
{
|
||||
parsedfile = user_string($arg1)
|
||||
parsedline = $arg2
|
||||
}
|
||||
|
||||
/**
|
||||
* probe ruby.parse.end - Fired just after a Ruby source file was parsed.
|
||||
*
|
||||
* @parsedfile: The name of parsed the file (string)
|
||||
* @parsedline: The line number of beginning of parsing (int)
|
||||
*/
|
||||
probe ruby.parse.end =
|
||||
process("@LIBRARY_PATH@").mark("parse__end")
|
||||
{
|
||||
parsedfile = user_string($arg1)
|
||||
parsedline = $arg2
|
||||
}
|
||||
|
||||
/**
|
||||
* probe ruby.raise - Fired when an exception is raised.
|
||||
*
|
||||
* @classname: The class name of the raised exception (string)
|
||||
* @file: The name of the file where the exception was raised (string)
|
||||
* @line: The line number in the file where the exception was raised (int)
|
||||
*/
|
||||
probe ruby.raise =
|
||||
process("@LIBRARY_PATH@").mark("raise")
|
||||
{
|
||||
classname = user_string($arg1)
|
||||
file = user_string($arg2)
|
||||
line = $arg3
|
||||
}
|
||||
|
||||
/**
|
||||
* probe ruby.require.entry - Fired on calls to rb_require_safe (when a file
|
||||
* is required).
|
||||
*
|
||||
* @requiredfile: The name of the file to be required (string)
|
||||
* @file: The file that called "require" (string)
|
||||
* @line: The line number where the call to require was made(int)
|
||||
*/
|
||||
probe ruby.require.entry =
|
||||
process("@LIBRARY_PATH@").mark("require__entry")
|
||||
{
|
||||
requiredfile = user_string($arg1)
|
||||
file = user_string($arg2)
|
||||
line = $arg3
|
||||
}
|
||||
|
||||
/**
|
||||
* probe ruby.require.return - Fired just after require has finished
|
||||
* search of load path for suitable file to require.
|
||||
*
|
||||
* @requiredfile: The file that was required (string)
|
||||
*/
|
||||
probe ruby.require.return =
|
||||
process("@LIBRARY_PATH@").mark("require__return")
|
||||
{
|
||||
requiredfile = user_string($arg1)
|
||||
}
|
||||
|
||||
/**
|
||||
* probe ruby.string.create - Allocation of new string.
|
||||
*
|
||||
* @size: Number of elements (an int)
|
||||
* @file: The file name where the method is being called (string)
|
||||
* @line: The line number where the method is being called (int)
|
||||
*/
|
||||
probe ruby.string.create =
|
||||
process("@LIBRARY_PATH@").mark("string__create")
|
||||
{
|
||||
size = $arg1
|
||||
file = user_string($arg2)
|
||||
line = $arg3
|
||||
}
|
@ -0,0 +1,22 @@
|
||||
%ruby_libdir %{_datadir}/%{name}
|
||||
%ruby_libarchdir %{_libdir}/%{name}
|
||||
|
||||
# This is the local lib/arch and should not be used for packaging.
|
||||
%ruby_sitedir site_ruby
|
||||
%ruby_sitelibdir %{_prefix}/local/share/%{name}/%{ruby_sitedir}
|
||||
%ruby_sitearchdir %{_prefix}/local/%{_lib}/%{name}/%{ruby_sitedir}
|
||||
|
||||
# This is the general location for libs/archs compatible with all
|
||||
# or most of the Ruby versions available in the Fedora repositories.
|
||||
%ruby_vendordir vendor_ruby
|
||||
%ruby_vendorlibdir %{ruby_libdir}/%{ruby_vendordir}
|
||||
%ruby_vendorarchdir %{ruby_libarchdir}/%{ruby_vendordir}
|
||||
|
||||
# For ruby packages we want to filter out any provides caused by private
|
||||
# libs in %%{ruby_vendorarchdir}/%%{ruby_sitearchdir}.
|
||||
#
|
||||
# Note that this must be invoked in the spec file, preferably as
|
||||
# "%{?ruby_default_filter}", before any %description block.
|
||||
%ruby_default_filter %{expand: \
|
||||
%global __provides_exclude_from %{?__provides_exclude_from:%{__provides_exclude_from}|}^(%{ruby_vendorarchdir}|%{ruby_sitearchdir})/.*\\\\.so$ \
|
||||
}
|
@ -0,0 +1,203 @@
|
||||
# The RubyGems root folder.
|
||||
%gem_dir %{_datadir}/gems
|
||||
%gem_archdir %{_libdir}/gems
|
||||
|
||||
# %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 %custom_gem_name_version macro which needs
|
||||
# to be predefined. Please note that for the version macros are the dashes
|
||||
# replaced by underscores.
|
||||
#
|
||||
%gem_name_version() %{?1}%{!?1:%{gem_name}}-%{?1:%{lua: st = string.gsub(rpm.expand(\"%{1}\"), \"-\", \"_\"); print(rpm.expand('%{'..st..'_version}'))}}%{!?1:%{version}}%{?prerelease}
|
||||
|
||||
# Common gem locations and files.
|
||||
#
|
||||
# These macros leverages %gem_name_version macro and accepts custom gem_name.
|
||||
#
|
||||
# -d Use default gem install location.
|
||||
#
|
||||
%gem_instdir() %{gem_dir}/gems/%{gem_name_version %{?1}}
|
||||
%gem_extdir_mri() %{gem_archdir}/%{name}/%{gem_name_version %{?1}}
|
||||
%gem_libdir() %{gem_instdir %{?1}}/lib
|
||||
%gem_cache() %{gem_dir}/cache/%{gem_name_version %{?1}}.gem
|
||||
%gem_spec(d) %{gem_dir}/specifications%{?-d:/default}/%{gem_name_version %{?1}}.gemspec
|
||||
%gem_docdir() %{gem_dir}/doc/%{gem_name_version %{?1}}
|
||||
%gem_plugin() %{gem_dir}/plugins/%{?1}%{!?1:%{gem_name}}_plugin.rb
|
||||
|
||||
|
||||
# %gem_install - Install gem into appropriate directory.
|
||||
#
|
||||
# Usage: %gem_install [options]
|
||||
#
|
||||
# -n <gem_file> Overrides gem file name for installation.
|
||||
# -d <install_dir> Set installation directory.
|
||||
#
|
||||
%gem_install(d:n:) \
|
||||
mkdir -p %{-d*}%{!?-d:.%{gem_dir}} \
|
||||
\
|
||||
CONFIGURE_ARGS="--with-cflags='%{optflags}' --with-cxxflags='%{optflags}' --with-ldflags='%{build_ldflags}' $CONFIGURE_ARGS" \\\
|
||||
gem install \\\
|
||||
-V \\\
|
||||
--local \\\
|
||||
--build-root %{-d*}%{!?-d:.} \\\
|
||||
--force \\\
|
||||
--document=ri,rdoc \\\
|
||||
%{-n*}%{!?-n:%{gem_name}-%{version}%{?prerelease}.gem} \
|
||||
%{nil}
|
||||
|
||||
|
||||
# The 'read' command in %%gemspec_* macros is not essential, but it is usefull
|
||||
# to make the sript appear in build log.
|
||||
|
||||
|
||||
# %gemspec_add_dep - Add dependency into .gemspec.
|
||||
#
|
||||
# Usage: %gemspec_add_dep -g <gem> [options] [requirements]
|
||||
#
|
||||
# Add dependency named <gem> to .gemspec file. The macro adds runtime
|
||||
# dependency by default. The [requirements] argument can be used to specify
|
||||
# the dependency constraints more precisely. It is expected to be valid Ruby
|
||||
# code.
|
||||
#
|
||||
# -s <gemspec_file> Overrides the default .gemspec location.
|
||||
# -d Add development dependecy.
|
||||
#
|
||||
%gemspec_add_dep(g:s:d) \
|
||||
read -d '' gemspec_add_dep_script << 'EOR' || : \
|
||||
gemspec_file = '%{-s*}%{!?-s:%{_builddir}/%{gem_name}-%{version}%{?prerelease}.gemspec}' \
|
||||
\
|
||||
name = '%{-g*}' \
|
||||
requirements = %{*}%{!?1:nil} \
|
||||
\
|
||||
type = :%{!?-d:runtime}%{?-d:development} \
|
||||
\
|
||||
spec = Gem::Specification.load(gemspec_file) \
|
||||
abort("#{gemspec_file} is not accessible.") unless spec \
|
||||
\
|
||||
dep = spec.dependencies.detect { |d| d.type == type && d.name == name } \
|
||||
if dep \
|
||||
dep.requirement.concat requirements \
|
||||
else \
|
||||
spec.public_send "add_#{type}_dependency", name, requirements \
|
||||
end \
|
||||
File.write gemspec_file, spec.to_ruby \
|
||||
EOR\
|
||||
echo "$gemspec_add_dep_script" | ruby \
|
||||
unset -v gemspec_add_dep_script \
|
||||
%{nil}
|
||||
|
||||
|
||||
# %gemspec_remove_dep - Remove dependency from .gemspec.
|
||||
#
|
||||
# Usage: %gemspec_remove_dep -g <gem> [options] [requirements]
|
||||
#
|
||||
# Remove dependency named <gem> from .gemspec file. The macro removes runtime
|
||||
# dependency by default. The [requirements] argument can be used to specify
|
||||
# the dependency constraints more precisely. It is expected to be valid Ruby
|
||||
# code. The macro fails if these specific requirements can't be removed.
|
||||
#
|
||||
# -s <gemspec_file> Overrides the default .gemspec location.
|
||||
# -d Remove development dependecy.
|
||||
#
|
||||
%gemspec_remove_dep(g:s:d) \
|
||||
read -d '' gemspec_remove_dep_script << 'EOR' || : \
|
||||
gemspec_file = '%{-s*}%{!?-s:%{_builddir}/%{gem_name}-%{version}%{?prerelease}.gemspec}' \
|
||||
\
|
||||
name = '%{-g*}' \
|
||||
requirements = %{*}%{!?1:nil} \
|
||||
\
|
||||
type = :%{!?-d:runtime}%{?-d:development} \
|
||||
\
|
||||
spec = Gem::Specification.load(gemspec_file) \
|
||||
abort("#{gemspec_file} is not accessible.") unless spec \
|
||||
\
|
||||
dep = spec.dependencies.detect { |d| d.type == type && d.name == name } \
|
||||
if dep \
|
||||
if requirements \
|
||||
requirements = Gem::Requirement.create(requirements).requirements \
|
||||
requirements.each do |r| \
|
||||
unless dep.requirement.requirements.reject! { |dependency_requirements| dependency_requirements == r } \
|
||||
abort("Requirement '#{r.first} #{r.last}' was not possible to remove for dependency '#{dep}'!") \
|
||||
end \
|
||||
end \
|
||||
spec.dependencies.delete dep if dep.requirement.requirements.empty? \
|
||||
else \
|
||||
spec.dependencies.delete dep \
|
||||
end \
|
||||
else \
|
||||
abort("Dependency '#{name}' was not found!") \
|
||||
end \
|
||||
File.write gemspec_file, spec.to_ruby \
|
||||
EOR\
|
||||
echo "$gemspec_remove_dep_script" | ruby \
|
||||
unset -v gemspec_remove_dep_script \
|
||||
%{nil}
|
||||
|
||||
|
||||
# %%gemspec_add_file - Add files to various files lists in .gemspec.
|
||||
#
|
||||
# Usage: %%gemspec_add_file [options] <file>
|
||||
#
|
||||
# Add files to .gemspec file. <file> is expected to be valid Ruby code.
|
||||
# Path to file is expected. Does not check real files in any way.
|
||||
# By default, `files` list is edited.
|
||||
#
|
||||
# -s <gemspec_file> Overrides the default .gemspec location.
|
||||
# -t Edit test_files only.
|
||||
# -r Edit extra_rdoc_files only.
|
||||
#
|
||||
%gemspec_add_file(s:tr) \
|
||||
read -d '' gemspec_add_file_script << 'EOR' || : \
|
||||
gemspec_file = '%{-s*}%{!?-s:%{_builddir}/%{gem_name}-%{version}%{?prerelease}.gemspec}' \
|
||||
\
|
||||
abort("gemspec_add_file: Use only one '-t' or '-r' at a time.") if "%{?-t}%{?-r}" == "-t-r" \
|
||||
\
|
||||
filenames = %{*}%{!?1:nil} \
|
||||
filenames = Array(filenames) \
|
||||
\
|
||||
spec = Gem::Specification.load(gemspec_file) \
|
||||
abort("#{gemspec_file} is not accessible.") unless spec \
|
||||
\
|
||||
spec.%{?-t:test_}%{?-r:extra_rdoc_}files += filenames \
|
||||
File.write gemspec_file, spec.to_ruby \
|
||||
EOR\
|
||||
echo "$gemspec_add_file_script" | ruby \
|
||||
unset -v gemspec_add_file_script \
|
||||
%{nil}
|
||||
|
||||
|
||||
# %%gemspec_remove_file - Remove files from various files lists in .gemspec.
|
||||
#
|
||||
# Usage: %%gemspec_remove_file [options] <file>
|
||||
#
|
||||
# Remove files from .gemspec file. <file> is expected to be valid Ruby code.
|
||||
# Path to file is expected. Does not check/remove real files in any way.
|
||||
# By default, `files` list is edited. File has to be removed from `test_files`
|
||||
# first in order to be removable from `files`.
|
||||
#
|
||||
# -s <gemspec_file> Overrides the default .gemspec location.
|
||||
# -t Edit test_files only.
|
||||
# -r Edit extra_rdoc_files only.
|
||||
#
|
||||
%gemspec_remove_file(s:tr) \
|
||||
read -d '' gemspec_remove_file_script << 'EOR' || : \
|
||||
gemspec_file = '%{-s*}%{!?-s:%{_builddir}/%{gem_name}-%{version}%{?prerelease}.gemspec}' \
|
||||
\
|
||||
abort("gemspec_remove_file: Use only one '-t' or '-r' at a time.") if "%{?-t}%{?-r}" == "-t-r" \
|
||||
\
|
||||
filenames = %{*}%{!?1:nil} \
|
||||
filenames = Array(filenames) \
|
||||
\
|
||||
spec = Gem::Specification.load(gemspec_file) \
|
||||
abort("#{gemspec_file} is not accessible.") unless spec \
|
||||
\
|
||||
spec.%{?-t:test_}%{?-r:extra_rdoc_}files -= filenames \
|
||||
File.write gemspec_file, spec.to_ruby \
|
||||
EOR\
|
||||
echo "$gemspec_remove_file_script" | ruby \
|
||||
unset -v gemspec_remove_file_script \
|
||||
%{nil}
|
@ -0,0 +1,158 @@
|
||||
module Gem
|
||||
class << self
|
||||
|
||||
##
|
||||
# Returns full path of previous but one directory of dir in path
|
||||
# E.g. for '/usr/share/ruby', 'ruby', it returns '/usr'
|
||||
|
||||
def previous_but_one_dir_to(path, dir)
|
||||
return unless path
|
||||
|
||||
split_path = path.split(File::SEPARATOR)
|
||||
File.join(split_path.take_while { |one_dir| one_dir !~ /^#{dir}$/ }[0..-2])
|
||||
end
|
||||
private :previous_but_one_dir_to
|
||||
|
||||
##
|
||||
# Detects --install-dir option specified on command line.
|
||||
|
||||
def opt_install_dir?
|
||||
@opt_install_dir ||= ARGV.include?('--install-dir') || ARGV.include?('-i')
|
||||
end
|
||||
private :opt_install_dir?
|
||||
|
||||
##
|
||||
# Detects --build-root option specified on command line.
|
||||
|
||||
def opt_build_root?
|
||||
@opt_build_root ||= ARGV.include?('--build-root')
|
||||
end
|
||||
private :opt_build_root?
|
||||
|
||||
##
|
||||
# Tries to detect, if arguments and environment variables suggest that
|
||||
# 'gem install' is executed from rpmbuild.
|
||||
|
||||
def rpmbuild?
|
||||
@rpmbuild ||= ENV['RPM_PACKAGE_NAME'] && (opt_install_dir? || opt_build_root?)
|
||||
end
|
||||
private :rpmbuild?
|
||||
|
||||
##
|
||||
# Default gems locations allowed on FHS system (/usr, /usr/share).
|
||||
# The locations are derived from directories specified during build
|
||||
# configuration.
|
||||
|
||||
def default_locations
|
||||
@default_locations ||= {
|
||||
:system => previous_but_one_dir_to(RbConfig::CONFIG['vendordir'], RbConfig::CONFIG['RUBY_INSTALL_NAME']),
|
||||
:local => previous_but_one_dir_to(RbConfig::CONFIG['sitedir'], RbConfig::CONFIG['RUBY_INSTALL_NAME'])
|
||||
}
|
||||
end
|
||||
|
||||
##
|
||||
# For each location provides set of directories for binaries (:bin_dir)
|
||||
# platform independent (:gem_dir) and dependent (:ext_dir) files.
|
||||
|
||||
def default_dirs
|
||||
@libdir ||= case RUBY_PLATFORM
|
||||
when 'java'
|
||||
RbConfig::CONFIG['datadir']
|
||||
else
|
||||
RbConfig::CONFIG['libdir']
|
||||
end
|
||||
|
||||
@default_dirs ||= default_locations.inject(Hash.new) do |hash, location|
|
||||
destination, path = location
|
||||
|
||||
hash[destination] = if path
|
||||
{
|
||||
:bin_dir => File.join(path, RbConfig::CONFIG['bindir'].split(File::SEPARATOR).last),
|
||||
:gem_dir => File.join(path, RbConfig::CONFIG['datadir'].split(File::SEPARATOR).last, 'gems'),
|
||||
:ext_dir => File.join(path, @libdir.split(File::SEPARATOR).last, 'gems')
|
||||
}
|
||||
else
|
||||
{
|
||||
:bin_dir => '',
|
||||
:gem_dir => '',
|
||||
:ext_dir => ''
|
||||
}
|
||||
end
|
||||
|
||||
hash
|
||||
end
|
||||
end
|
||||
|
||||
##
|
||||
# Remove methods we are going to override. This avoids "method redefined;"
|
||||
# warnings otherwise issued by Ruby.
|
||||
|
||||
remove_method :default_dir if method_defined? :default_dir
|
||||
remove_method :default_specifications_dir if method_defined? :default_specifications_dir
|
||||
remove_method :default_path if method_defined? :default_path
|
||||
remove_method :default_bindir if method_defined? :default_bindir
|
||||
remove_method :default_ext_dir_for if method_defined? :default_ext_dir_for
|
||||
|
||||
##
|
||||
# RubyGems default overrides.
|
||||
|
||||
def default_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
|
||||
|
||||
##
|
||||
# Path to specification files of default gems.
|
||||
|
||||
def default_specifications_dir
|
||||
@default_specifications_dir ||= File.join(Gem.default_dirs[:system][:gem_dir], "specifications", "default")
|
||||
end
|
||||
|
||||
##
|
||||
# Default gem load path
|
||||
|
||||
def default_path
|
||||
path = default_dirs.collect {|location, paths| paths[:gem_dir]}
|
||||
path.unshift Gem.user_dir if File.exist? Gem.user_home
|
||||
path
|
||||
end
|
||||
|
||||
def default_bindir
|
||||
if 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
|
||||
dir = if rpmbuild?
|
||||
build_dir = base_dir.chomp Gem.default_dirs[:system][:gem_dir]
|
||||
if build_dir != base_dir
|
||||
File.join build_dir, Gem.default_dirs[:system][:ext_dir]
|
||||
end
|
||||
else
|
||||
dirs = Gem.default_dirs.detect {|location, paths| paths[:gem_dir] == base_dir}
|
||||
dirs && dirs.last[:ext_dir]
|
||||
end
|
||||
dir && File.join(dir, RbConfig::CONFIG['RUBY_INSTALL_NAME'])
|
||||
end
|
||||
|
||||
# This method should be available since RubyGems 2.2 until RubyGems 3.0.
|
||||
# https://github.com/rubygems/rubygems/issues/749
|
||||
if method_defined? :install_extension_in_lib
|
||||
remove_method :install_extension_in_lib
|
||||
|
||||
def install_extension_in_lib
|
||||
false
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
@ -0,0 +1,25 @@
|
||||
From 07c666ba5c3360dd6f43605a8ac7c85c99c1721f Mon Sep 17 00:00:00 2001
|
||||
From: =?UTF-8?q?V=C3=ADt=20Ondruch?= <vondruch@redhat.com>
|
||||
Date: Tue, 1 Oct 2013 12:22:40 +0200
|
||||
Subject: [PATCH] Allow to configure libruby.so placement.
|
||||
|
||||
---
|
||||
configure.ac | 5 +++++
|
||||
1 file changed, 5 insertions(+)
|
||||
|
||||
diff --git a/configure.ac b/configure.ac
|
||||
index d261ea57b5..3c13076b82 100644
|
||||
--- a/configure.ac
|
||||
+++ b/configure.ac
|
||||
@@ -3470,6 +3470,11 @@ AS_IF([test ${multiarch+set}], [
|
||||
])
|
||||
|
||||
archlibdir='${libdir}/${arch}'
|
||||
+AC_ARG_WITH(archlibdir,
|
||||
+ AS_HELP_STRING([--with-archlibdir=DIR],
|
||||
+ [prefix for libruby [[LIBDIR/ARCH]]]),
|
||||
+ [archlibdir="$withval"])
|
||||
+
|
||||
sitearchlibdir='${libdir}/${sitearch}'
|
||||
archincludedir='${includedir}/${arch}'
|
||||
sitearchincludedir='${includedir}/${sitearch}'
|
@ -0,0 +1,77 @@
|
||||
From e24d97c938c481450ed80ec83e5399595946c1ae Mon Sep 17 00:00:00 2001
|
||||
From: =?UTF-8?q?V=C3=ADt=20Ondruch?= <vondruch@redhat.com>
|
||||
Date: Fri, 8 Feb 2013 22:48:41 +0100
|
||||
Subject: [PATCH] Prevent duplicated paths when empty version string is
|
||||
configured.
|
||||
|
||||
---
|
||||
configure.ac | 3 ++-
|
||||
loadpath.c | 12 ++++++++++++
|
||||
tool/mkconfig.rb | 2 +-
|
||||
3 files changed, 15 insertions(+), 2 deletions(-)
|
||||
|
||||
diff --git a/configure.ac b/configure.ac
|
||||
index c42436c23d..d261ea57b5 100644
|
||||
--- a/configure.ac
|
||||
+++ b/configure.ac
|
||||
@@ -4309,7 +4309,8 @@ AS_CASE(["$ruby_version_dir_name"],
|
||||
ruby_version_dir=/'${ruby_version_dir_name}'
|
||||
|
||||
if test -z "${ruby_version_dir_name}"; then
|
||||
- AC_MSG_ERROR([No ruby version, No place for bundled libraries])
|
||||
+ unset ruby_version_dir
|
||||
+ AC_DEFINE(RUBY_LIB_VERSION_BLANK, 1)
|
||||
fi
|
||||
|
||||
rubylibdir='${rubylibprefix}'${ruby_version_dir}
|
||||
diff --git a/loadpath.c b/loadpath.c
|
||||
index 9160031..0d4d953 100644
|
||||
--- a/loadpath.c
|
||||
+++ b/loadpath.c
|
||||
@@ -65,21 +65,33 @@ const char ruby_initial_load_paths[] =
|
||||
RUBY_SEARCH_PATH "\0"
|
||||
#endif
|
||||
#ifndef NO_RUBY_SITE_LIB
|
||||
+#ifdef RUBY_LIB_VERSION_BLANK
|
||||
+ RUBY_SITE_LIB "\0"
|
||||
+#else
|
||||
RUBY_SITE_LIB2 "\0"
|
||||
+#endif
|
||||
#ifdef RUBY_THINARCH
|
||||
RUBY_SITE_ARCH_LIB_FOR(RUBY_THINARCH) "\0"
|
||||
#endif
|
||||
RUBY_SITE_ARCH_LIB_FOR(RUBY_SITEARCH) "\0"
|
||||
+#ifndef RUBY_LIB_VERSION_BLANK
|
||||
RUBY_SITE_LIB "\0"
|
||||
#endif
|
||||
+#endif
|
||||
|
||||
#ifndef NO_RUBY_VENDOR_LIB
|
||||
+#ifdef RUBY_LIB_VERSION_BLANK
|
||||
+ RUBY_VENDOR_LIB "\0"
|
||||
+#else
|
||||
RUBY_VENDOR_LIB2 "\0"
|
||||
+#endif
|
||||
#ifdef RUBY_THINARCH
|
||||
RUBY_VENDOR_ARCH_LIB_FOR(RUBY_THINARCH) "\0"
|
||||
#endif
|
||||
RUBY_VENDOR_ARCH_LIB_FOR(RUBY_SITEARCH) "\0"
|
||||
+#ifndef RUBY_LIB_VERSION_BLANK
|
||||
RUBY_VENDOR_LIB "\0"
|
||||
+#endif
|
||||
#endif
|
||||
|
||||
RUBY_LIB "\0"
|
||||
diff --git a/tool/mkconfig.rb b/tool/mkconfig.rb
|
||||
index 07076d4..35e6c3c 100755
|
||||
--- a/tool/mkconfig.rb
|
||||
+++ b/tool/mkconfig.rb
|
||||
@@ -115,7 +115,7 @@
|
||||
val = val.gsub(/\$(?:\$|\{?(\w+)\}?)/) {$1 ? "$(#{$1})" : $&}.dump
|
||||
case name
|
||||
when /^prefix$/
|
||||
- val = "(TOPDIR || DESTDIR + #{val})"
|
||||
+ val = "(((TOPDIR && TOPDIR.empty?) ? nil : TOPDIR) || DESTDIR + #{val})"
|
||||
when /^ARCH_FLAG$/
|
||||
val = "arch_flag || #{val}" if universal
|
||||
when /^UNIVERSAL_ARCHNAMES$/
|
@ -0,0 +1,22 @@
|
||||
From 2089cab72b38d6d5e7ba2b596e41014209acad30 Mon Sep 17 00:00:00 2001
|
||||
From: =?UTF-8?q?V=C3=ADt=20Ondruch?= <vondruch@redhat.com>
|
||||
Date: Mon, 19 Nov 2012 14:37:28 +0100
|
||||
Subject: [PATCH] Always use i386.
|
||||
|
||||
---
|
||||
configure.ac | 2 ++
|
||||
1 file changed, 2 insertions(+)
|
||||
|
||||
diff --git a/configure.ac b/configure.ac
|
||||
index 3c13076b82..93af30321d 100644
|
||||
--- a/configure.ac
|
||||
+++ b/configure.ac
|
||||
@@ -4373,6 +4373,8 @@ AC_SUBST(vendorarchdir)dnl
|
||||
AC_SUBST(CONFIGURE, "`echo $0 | sed 's|.*/||'`")dnl
|
||||
AC_SUBST(configure_args, "`echo "${ac_configure_args}" | sed 's/\\$/$$/g'`")dnl
|
||||
|
||||
+target_cpu=`echo $target_cpu | sed s/i.86/i386/`
|
||||
+
|
||||
AS_IF([test "${universal_binary-no}" = yes ], [
|
||||
arch="universal-${target_os}"
|
||||
AS_IF([test "${rb_cv_architecture_available}" = yes], [
|
@ -0,0 +1,94 @@
|
||||
From 94da59aafacc6a9efe829529eb51385588d6f149 Mon Sep 17 00:00:00 2001
|
||||
From: =?UTF-8?q?V=C3=ADt=20Ondruch?= <vondruch@redhat.com>
|
||||
Date: Fri, 11 Nov 2011 13:14:45 +0100
|
||||
Subject: [PATCH] Allow to install RubyGems into custom location, outside of
|
||||
Ruby tree.
|
||||
|
||||
---
|
||||
configure.ac | 5 +++++
|
||||
loadpath.c | 4 ++++
|
||||
template/verconf.h.tmpl | 3 +++
|
||||
tool/rbinstall.rb | 10 ++++++++++
|
||||
4 files changed, 22 insertions(+)
|
||||
|
||||
diff --git a/configure.ac b/configure.ac
|
||||
index 93af30321d..bc13397e0e 100644
|
||||
--- a/configure.ac
|
||||
+++ b/configure.ac
|
||||
@@ -4345,6 +4345,10 @@ AC_ARG_WITH(vendorarchdir,
|
||||
[vendorarchdir=$withval],
|
||||
[vendorarchdir=${multiarch+'${rubysitearchprefix}/vendor_ruby'${ruby_version_dir}}${multiarch-'${vendorlibdir}/${sitearch}'}])
|
||||
|
||||
+AC_ARG_WITH(rubygemsdir,
|
||||
+ AS_HELP_STRING([--with-rubygemsdir=DIR], [custom rubygems directory]),
|
||||
+ [rubygemsdir=$withval])
|
||||
+
|
||||
AS_IF([test "${LOAD_RELATIVE+set}"], [
|
||||
AC_DEFINE_UNQUOTED(LOAD_RELATIVE, $LOAD_RELATIVE)
|
||||
RUBY_EXEC_PREFIX=''
|
||||
@@ -4369,6 +4373,7 @@ AC_SUBST(sitearchdir)dnl
|
||||
AC_SUBST(vendordir)dnl
|
||||
AC_SUBST(vendorlibdir)dnl
|
||||
AC_SUBST(vendorarchdir)dnl
|
||||
+AC_SUBST(rubygemsdir)dnl
|
||||
|
||||
AC_SUBST(CONFIGURE, "`echo $0 | sed 's|.*/||'`")dnl
|
||||
AC_SUBST(configure_args, "`echo "${ac_configure_args}" | sed 's/\\$/$$/g'`")dnl
|
||||
diff --git a/loadpath.c b/loadpath.c
|
||||
index 623dc9d..74c5d9e 100644
|
||||
--- a/loadpath.c
|
||||
+++ b/loadpath.c
|
||||
@@ -94,6 +94,10 @@ const char ruby_initial_load_paths[] =
|
||||
#endif
|
||||
#endif
|
||||
|
||||
+#ifdef RUBYGEMS_DIR
|
||||
+ RUBYGEMS_DIR "\0"
|
||||
+#endif
|
||||
+
|
||||
RUBY_LIB "\0"
|
||||
#ifdef RUBY_THINARCH
|
||||
RUBY_ARCH_LIB_FOR(RUBY_THINARCH) "\0"
|
||||
diff --git a/template/verconf.h.tmpl b/template/verconf.h.tmpl
|
||||
index 79c003e..34f2382 100644
|
||||
--- a/template/verconf.h.tmpl
|
||||
+++ b/template/verconf.h.tmpl
|
||||
@@ -36,6 +36,9 @@
|
||||
% if C["RUBY_SEARCH_PATH"]
|
||||
#define RUBY_SEARCH_PATH "${RUBY_SEARCH_PATH}"
|
||||
% end
|
||||
+% if C["rubygemsdir"]
|
||||
+#define RUBYGEMS_DIR "${rubygemsdir}"
|
||||
+% end
|
||||
%
|
||||
% R = {}
|
||||
% R["ruby_version"] = '"RUBY_LIB_VERSION"'
|
||||
diff --git a/tool/rbinstall.rb b/tool/rbinstall.rb
|
||||
index e9110a17ca..76a1f0a315 100755
|
||||
--- a/tool/rbinstall.rb
|
||||
+++ b/tool/rbinstall.rb
|
||||
@@ -359,6 +359,7 @@ def CONFIG.[](name, mandatory = false)
|
||||
vendorlibdir = CONFIG["vendorlibdir"]
|
||||
vendorarchlibdir = CONFIG["vendorarchdir"]
|
||||
end
|
||||
+rubygemsdir = CONFIG["rubygemsdir"]
|
||||
mandir = CONFIG["mandir", true]
|
||||
docdir = CONFIG["docdir", true]
|
||||
enable_shared = CONFIG["ENABLE_SHARED"] == 'yes'
|
||||
@@ -595,7 +596,16 @@ def stub
|
||||
install?(:local, :comm, :lib) do
|
||||
prepare "library scripts", rubylibdir
|
||||
noinst = %w[*.txt *.rdoc *.gemspec]
|
||||
+ # Bundler carries "rubygems.rb" file, so it must be specialcased :/
|
||||
+ noinst += %w[rubygems.rb rubygems/ bundler.rb bundler/] if rubygemsdir
|
||||
install_recursive(File.join(srcdir, "lib"), rubylibdir, :no_install => noinst, :mode => $data_mode)
|
||||
+ if rubygemsdir
|
||||
+ noinst = %w[*.txt *.rdoc *.gemspec]
|
||||
+ install_recursive(File.join(srcdir, "lib", "rubygems"), File.join(rubygemsdir, "rubygems"), :no_install => noinst, :mode => $data_mode)
|
||||
+ install(File.join(srcdir, "lib", "rubygems.rb"), File.join(rubygemsdir, "rubygems.rb"), :mode => $data_mode)
|
||||
+ install_recursive(File.join(srcdir, "lib", "bundler"), File.join(rubylibdir, "bundler"), :no_install => noinst, :mode => $data_mode)
|
||||
+ install(File.join(srcdir, "lib", "bundler.rb"), rubylibdir, :mode => $data_mode)
|
||||
+ end
|
||||
end
|
||||
|
||||
install?(:local, :comm, :hdr, :'comm-hdr') do
|
@ -0,0 +1,273 @@
|
||||
From 4fc1be3af3f58621bb751c9e63c208b15c0e8d16 Mon Sep 17 00:00:00 2001
|
||||
From: =?UTF-8?q?V=C3=ADt=20Ondruch?= <vondruch@redhat.com>
|
||||
Date: Tue, 31 Mar 2015 16:21:04 +0200
|
||||
Subject: [PATCH 1/4] Use ruby_version_dir_name for versioned directories.
|
||||
|
||||
This disallows changing the ruby_version constant by --with-ruby-version
|
||||
configuration options. The two places version numbers are disallowed as
|
||||
well, since there are a lot of places which cannot handle this format
|
||||
properly.
|
||||
|
||||
ruby_version_dir_name now specifies custom version string for versioned
|
||||
directories, e.g. instead of default X.Y.Z, you can specify whatever
|
||||
string.
|
||||
---
|
||||
configure.ac | 66 ++++++++++++++++++++++++---------------------
|
||||
template/ruby.pc.in | 1 +
|
||||
2 files changed, 36 insertions(+), 31 deletions(-)
|
||||
|
||||
diff --git a/configure.ac b/configure.ac
|
||||
index 80b137e380..63cd3b4f8b 100644
|
||||
--- a/configure.ac
|
||||
+++ b/configure.ac
|
||||
@@ -4259,9 +4259,6 @@ AS_CASE(["$target_os"],
|
||||
rubyw_install_name='$(RUBYW_INSTALL_NAME)'
|
||||
])
|
||||
|
||||
-rubylibdir='${rubylibprefix}/${ruby_version}'
|
||||
-rubyarchdir=${multiarch+'${rubyarchprefix}/${ruby_version}'}${multiarch-'${rubylibdir}/${arch}'}
|
||||
-
|
||||
rubyarchprefix=${multiarch+'${archlibdir}/${RUBY_BASE_NAME}'}${multiarch-'${rubylibprefix}/${arch}'}
|
||||
AC_ARG_WITH(rubyarchprefix,
|
||||
AS_HELP_STRING([--with-rubyarchprefix=DIR],
|
||||
@@ -4284,57 +4281,63 @@ AC_ARG_WITH(ridir,
|
||||
AC_SUBST(ridir)
|
||||
AC_SUBST(RI_BASE_NAME)
|
||||
|
||||
-AC_ARG_WITH(ruby-version,
|
||||
- AS_HELP_STRING([--with-ruby-version=STR], [ruby version string for version specific directories [[full]] (full|minor|STR)]),
|
||||
- [ruby_version=$withval],
|
||||
- [ruby_version=full])
|
||||
unset RUBY_LIB_VERSION
|
||||
-unset RUBY_LIB_VERSION_STYLE
|
||||
-AS_CASE(["$ruby_version"],
|
||||
- [full], [RUBY_LIB_VERSION_STYLE='3 /* full */'],
|
||||
- [minor], [RUBY_LIB_VERSION_STYLE='2 /* minor */'])
|
||||
-AS_IF([test ${RUBY_LIB_VERSION_STYLE+set}], [
|
||||
- {
|
||||
- echo "#define RUBY_LIB_VERSION_STYLE $RUBY_LIB_VERSION_STYLE"
|
||||
- echo '@%:@include "confdefs.h"'
|
||||
- echo '#define STRINGIZE(x) x'
|
||||
- test -f revision.h -o -f "${srcdir}/revision.h" || echo '#define RUBY_REVISION 0'
|
||||
- echo '#include "version.h"'
|
||||
- echo 'ruby_version=RUBY_LIB_VERSION'
|
||||
- } > conftest.c
|
||||
- ruby_version="`$CPP -I. -I"${srcdir}" -I"${srcdir}/include" conftest.c | sed '/^ruby_version=/!d;s/ //g'`"
|
||||
- eval $ruby_version
|
||||
-], [test -z "${ruby_version}"], [
|
||||
- AC_MSG_ERROR([No ruby version, No place for bundled libraries])
|
||||
-], [
|
||||
- RUBY_LIB_VERSION="${ruby_version}"
|
||||
-])
|
||||
+RUBY_LIB_VERSION_STYLE='3 /* full */'
|
||||
+{
|
||||
+echo "#define RUBY_LIB_VERSION_STYLE $RUBY_LIB_VERSION_STYLE"
|
||||
+echo '@%:@include "confdefs.h"'
|
||||
+echo '#define STRINGIZE(x) x'
|
||||
+test -f revision.h -o -f "${srcdir}/revision.h" || echo '#define RUBY_REVISION 0'
|
||||
+echo '#include "version.h"'
|
||||
+echo 'ruby_version=RUBY_LIB_VERSION'
|
||||
+} > conftest.c
|
||||
+ruby_version="`$CPP -I. -I"${srcdir}" -I"${srcdir}/include" conftest.c | sed '/^ruby_version=/!d;s/ //g'`"
|
||||
+eval $ruby_version
|
||||
+
|
||||
+RUBY_LIB_VERSION="${ruby_version}"
|
||||
+
|
||||
AC_SUBST(RUBY_LIB_VERSION_STYLE)
|
||||
AC_SUBST(RUBY_LIB_VERSION)
|
||||
|
||||
+AC_ARG_WITH(ruby-version,
|
||||
+ AS_HELP_STRING([--with-ruby-version=STR], [ruby version string for version specific directories [[full]] (full|STR)]),
|
||||
+ [ruby_version_dir_name=$withval],
|
||||
+ [ruby_version_dir_name=full])
|
||||
+AS_CASE(["$ruby_version_dir_name"],
|
||||
+ [full], [ruby_version_dir_name='${ruby_version}'])
|
||||
+
|
||||
+ruby_version_dir=/'${ruby_version_dir_name}'
|
||||
+
|
||||
+if test -z "${ruby_version_dir_name}"; then
|
||||
+ AC_MSG_ERROR([No ruby version, No place for bundled libraries])
|
||||
+fi
|
||||
+
|
||||
+rubylibdir='${rubylibprefix}'${ruby_version_dir}
|
||||
+rubyarchdir=${multiarch+'${rubyarchprefix}'${ruby_version_dir}}${multiarch-'${rubylibdir}/${arch}'}
|
||||
+
|
||||
AC_ARG_WITH(sitedir,
|
||||
AS_HELP_STRING([--with-sitedir=DIR], [site libraries in DIR [[RUBY_LIB_PREFIX/site_ruby]], "no" to disable site directory]),
|
||||
[sitedir=$withval],
|
||||
[sitedir='${rubylibprefix}/site_ruby'])
|
||||
-sitelibdir='${sitedir}/${ruby_version}'
|
||||
+sitelibdir='${sitedir}'${ruby_version_dir}
|
||||
|
||||
AC_ARG_WITH(sitearchdir,
|
||||
AS_HELP_STRING([--with-sitearchdir=DIR],
|
||||
[architecture dependent site libraries in DIR [[SITEDIR/SITEARCH]], "no" to disable site directory]),
|
||||
[sitearchdir=$withval],
|
||||
- [sitearchdir=${multiarch+'${rubysitearchprefix}/site_ruby/${ruby_version}'}${multiarch-'${sitelibdir}/${sitearch}'}])
|
||||
+ [sitearchdir=${multiarch+'${rubysitearchprefix}/site_ruby'${ruby_version_dir}}${multiarch-'${sitelibdir}/${sitearch}'}])
|
||||
|
||||
AC_ARG_WITH(vendordir,
|
||||
AS_HELP_STRING([--with-vendordir=DIR], [vendor libraries in DIR [[RUBY_LIB_PREFIX/vendor_ruby]], "no" to disable vendor directory]),
|
||||
[vendordir=$withval],
|
||||
[vendordir='${rubylibprefix}/vendor_ruby'])
|
||||
-vendorlibdir='${vendordir}/${ruby_version}'
|
||||
+vendorlibdir='${vendordir}'${ruby_version_dir}
|
||||
|
||||
AC_ARG_WITH(vendorarchdir,
|
||||
AS_HELP_STRING([--with-vendorarchdir=DIR],
|
||||
[architecture dependent vendor libraries in DIR [[VENDORDIR/SITEARCH]], "no" to disable vendor directory]),
|
||||
[vendorarchdir=$withval],
|
||||
- [vendorarchdir=${multiarch+'${rubysitearchprefix}/vendor_ruby/${ruby_version}'}${multiarch-'${vendorlibdir}/${sitearch}'}])
|
||||
+ [vendorarchdir=${multiarch+'${rubysitearchprefix}/vendor_ruby'${ruby_version_dir}}${multiarch-'${vendorlibdir}/${sitearch}'}])
|
||||
|
||||
AS_IF([test "${LOAD_RELATIVE+set}"], [
|
||||
AC_DEFINE_UNQUOTED(LOAD_RELATIVE, $LOAD_RELATIVE)
|
||||
@@ -4351,6 +4354,7 @@ AC_SUBST(sitearchincludedir)dnl
|
||||
AC_SUBST(arch)dnl
|
||||
AC_SUBST(sitearch)dnl
|
||||
AC_SUBST(ruby_version)dnl
|
||||
+AC_SUBST(ruby_version_dir_name)dnl
|
||||
AC_SUBST(rubylibdir)dnl
|
||||
AC_SUBST(rubyarchdir)dnl
|
||||
AC_SUBST(sitedir)dnl
|
||||
diff --git a/template/ruby.pc.in b/template/ruby.pc.in
|
||||
index 8a2c066..c81b211 100644
|
||||
--- a/template/ruby.pc.in
|
||||
+++ b/template/ruby.pc.in
|
||||
@@ -2,6 +2,7 @@ MAJOR=@MAJOR@
|
||||
MINOR=@MINOR@
|
||||
TEENY=@TEENY@
|
||||
ruby_version=@ruby_version@
|
||||
+ruby_version_dir_name=@ruby_version_dir_name@
|
||||
RUBY_API_VERSION=@RUBY_API_VERSION@
|
||||
RUBY_PROGRAM_VERSION=@RUBY_PROGRAM_VERSION@
|
||||
arch=@arch@
|
||||
|
||||
|
||||
From 518850aba6eee76de7715aae8d37330e34b01983 Mon Sep 17 00:00:00 2001
|
||||
From: =?UTF-8?q?V=C3=ADt=20Ondruch?= <vondruch@redhat.com>
|
||||
Date: Tue, 31 Mar 2015 16:37:26 +0200
|
||||
Subject: [PATCH 2/4] Add ruby_version_dir_name support for RDoc.
|
||||
|
||||
---
|
||||
lib/rdoc/ri/paths.rb | 2 +-
|
||||
tool/rbinstall.rb | 2 +-
|
||||
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 = File.join RbConfig::CONFIG['ridir'], version
|
||||
|
||||
diff --git a/tool/rbinstall.rb b/tool/rbinstall.rb
|
||||
index d4c110e..d39c9a6 100755
|
||||
--- a/tool/rbinstall.rb
|
||||
+++ b/tool/rbinstall.rb
|
||||
@@ -453,7 +453,7 @@ def CONFIG.[](name, mandatory = false)
|
||||
|
||||
install?(:doc, :rdoc) do
|
||||
if $rdocdir
|
||||
- ridatadir = File.join(CONFIG['ridir'], CONFIG['ruby_version'], "system")
|
||||
+ ridatadir = File.join(CONFIG['ridir'], CONFIG['ruby_version_dir_name'] || CONFIG['ruby_version'], "system")
|
||||
prepare "rdoc", ridatadir
|
||||
install_recursive($rdocdir, ridatadir, :no_install => rdoc_noinst, :mode => $data_mode)
|
||||
end
|
||||
|
||||
From 9f0ec0233f618cbb862629816b22491c3df79578 Mon Sep 17 00:00:00 2001
|
||||
From: =?UTF-8?q?V=C3=ADt=20Ondruch?= <vondruch@redhat.com>
|
||||
Date: Tue, 31 Mar 2015 16:37:44 +0200
|
||||
Subject: [PATCH 3/4] Add ruby_version_dir_name support for RubyGems.
|
||||
|
||||
---
|
||||
lib/rubygems/defaults.rb | 7 ++++---
|
||||
test/rubygems/test_gem.rb | 5 +++--
|
||||
2 files changed, 7 insertions(+), 5 deletions(-)
|
||||
|
||||
diff --git a/lib/rubygems/defaults.rb b/lib/rubygems/defaults.rb
|
||||
index d4ff4a262c..3f9a5bf590 100644
|
||||
--- a/lib/rubygems/defaults.rb
|
||||
+++ b/lib/rubygems/defaults.rb
|
||||
@@ -35,7 +35,7 @@ def self.default_spec_cache_dir
|
||||
# specified in the environment
|
||||
|
||||
def self.default_dir
|
||||
- @default_dir ||= File.join(RbConfig::CONFIG["rubylibprefix"], "gems", RbConfig::CONFIG["ruby_version"])
|
||||
+ @default_dir ||= File.join(RbConfig::CONFIG["rubylibprefix"], "gems", RbConfig::CONFIG["ruby_version_dir_name"] || RbConfig::CONFIG["ruby_version"])
|
||||
end
|
||||
|
||||
##
|
||||
@@ -104,7 +104,8 @@ def self.user_dir
|
||||
gem_dir = File.join(Gem.user_home, ".gem")
|
||||
gem_dir = File.join(Gem.data_home, "gem") unless File.exist?(gem_dir)
|
||||
parts = [gem_dir, ruby_engine]
|
||||
- parts << RbConfig::CONFIG["ruby_version"] unless RbConfig::CONFIG["ruby_version"].empty?
|
||||
+ ruby_version_dir_name = RbConfig::CONFIG["ruby_version_dir_name"] || RbConfig::CONFIG["ruby_version"]
|
||||
+ parts << ruby_version_dir_name unless ruby_version_dir_name.empty?
|
||||
File.join parts
|
||||
end
|
||||
|
||||
@@ -265,7 +266,7 @@ def self.vendor_dir # :nodoc:
|
||||
return nil unless RbConfig::CONFIG.key? "vendordir"
|
||||
|
||||
File.join RbConfig::CONFIG["vendordir"], "gems",
|
||||
- RbConfig::CONFIG["ruby_version"]
|
||||
+ RbConfig::CONFIG["ruby_version_dir_name"] || RbConfig::CONFIG["ruby_version"]
|
||||
end
|
||||
|
||||
##
|
||||
diff --git a/test/rubygems/test_gem.rb b/test/rubygems/test_gem.rb
|
||||
index b25068405d..e9fef4a311 100644
|
||||
--- a/test/rubygems/test_gem.rb
|
||||
+++ b/test/rubygems/test_gem.rb
|
||||
@@ -1351,7 +1351,8 @@ def test_self_use_paths
|
||||
|
||||
def test_self_user_dir
|
||||
parts = [@userhome, ".gem", Gem.ruby_engine]
|
||||
- parts << RbConfig::CONFIG["ruby_version"] unless RbConfig::CONFIG["ruby_version"].empty?
|
||||
+ ruby_version_dir_name = RbConfig::CONFIG["ruby_version_dir_name"] || RbConfig::CONFIG["ruby_version"]
|
||||
+ parts << ruby_version_dir_name unless ruby_version_dir_name.empty?
|
||||
|
||||
FileUtils.mkdir_p File.join(parts)
|
||||
|
||||
@@ -1427,7 +1428,7 @@ def test_self_vendor_dir
|
||||
vendordir(File.join(@tempdir, "vendor")) do
|
||||
expected =
|
||||
File.join RbConfig::CONFIG["vendordir"], "gems",
|
||||
- RbConfig::CONFIG["ruby_version"]
|
||||
+ RbConfig::CONFIG["ruby_version_dir_name"] || RbConfig::CONFIG["ruby_version"]
|
||||
|
||||
assert_equal expected, Gem.vendor_dir
|
||||
end
|
||||
|
||||
|
||||
From 88c38a030c22dbf9422ece847bdfbf87d6659313 Mon Sep 17 00:00:00 2001
|
||||
From: =?UTF-8?q?V=C3=ADt=20Ondruch?= <vondruch@redhat.com>
|
||||
Date: Wed, 1 Apr 2015 14:55:37 +0200
|
||||
Subject: [PATCH 4/4] Let headers directories follow the configured version
|
||||
name.
|
||||
|
||||
---
|
||||
configure.ac | 2 +-
|
||||
1 file changed, 1 insertion(+), 1 deletion(-)
|
||||
|
||||
diff --git a/configure.ac b/configure.ac
|
||||
index a00f2b6776..999e2d6d5d 100644
|
||||
--- a/configure.ac
|
||||
+++ b/configure.ac
|
||||
@@ -135,7 +135,7 @@ RUBY_BASE_NAME=`echo ruby | sed "$program_transform_name"`
|
||||
RUBYW_BASE_NAME=`echo rubyw | sed "$program_transform_name"`
|
||||
AC_SUBST(RUBY_BASE_NAME)
|
||||
AC_SUBST(RUBYW_BASE_NAME)
|
||||
-AC_SUBST(RUBY_VERSION_NAME, '${RUBY_BASE_NAME}-${ruby_version}')
|
||||
+AC_SUBST(RUBY_VERSION_NAME, '${RUBY_BASE_NAME}-${ruby_version_dir_name}')
|
||||
|
||||
dnl checks for alternative programs
|
||||
AC_CANONICAL_BUILD
|
@ -0,0 +1,88 @@
|
||||
From eca084e4079c77c061045df9c21b219175b05228 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 | 3 ++-
|
||||
ruby.c | 4 ++++
|
||||
spec/ruby/core/kernel/require_spec.rb | 2 ++
|
||||
4 files changed, 20 insertions(+), 1 deletion(-)
|
||||
create mode 100644 abrt.c
|
||||
|
||||
diff --git a/abrt.c b/abrt.c
|
||||
new file mode 100644
|
||||
index 0000000000..74b0bd5c0f
|
||||
--- /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 b2e5b2b6d0..f39f81da5c 100644
|
||||
--- a/common.mk
|
||||
+++ b/common.mk
|
||||
@@ -111,7 +111,8 @@ PRISM_FILES = prism/api_node.$(OBJEXT) \
|
||||
prism/prism.$(OBJEXT) \
|
||||
prism_init.$(OBJEXT)
|
||||
|
||||
-COMMONOBJS = array.$(OBJEXT) \
|
||||
+COMMONOBJS = abrt.$(OBJEXT) \
|
||||
+ array.$(OBJEXT) \
|
||||
ast.$(OBJEXT) \
|
||||
bignum.$(OBJEXT) \
|
||||
class.$(OBJEXT) \
|
||||
diff --git a/ruby.c b/ruby.c
|
||||
index 60c57d6259..1eec16f2c8 100644
|
||||
--- a/ruby.c
|
||||
+++ b/ruby.c
|
||||
@@ -1724,10 +1724,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();
|
||||
rb_const_remove(rb_cObject, rb_intern_const("TMP_RUBY_PREFIX"));
|
||||
}
|
||||
|
||||
diff --git a/spec/ruby/core/kernel/require_spec.rb b/spec/ruby/core/kernel/require_spec.rb
|
||||
index 60c57d6259..1eec16f2c8 100644
|
||||
--- a/spec/ruby/core/kernel/require_spec.rb
|
||||
+++ b/spec/ruby/core/kernel/require_spec.rb
|
||||
@@ -25,6 +25,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]
|
||||
features.reject! { |feature| feature.end_with?('-fake') }
|
@ -0,0 +1,23 @@
|
||||
From 6365d1b79e10330fced83d00d4cb950380a3b0fe 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 d55d1788aa..73755f6ccd 100644
|
||||
--- a/common.mk
|
||||
+++ b/common.mk
|
||||
@@ -1601,8 +1601,6 @@ yes-test-syntax-suggest: $(PREPARE_SYNTAX_SUGGEST)
|
||||
$(ACTIONS_ENDGROUP)
|
||||
no-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,92 @@
|
||||
From 8944a064d0fd7947b8c2b6c761be3e3a0c9073af Mon Sep 17 00:00:00 2001
|
||||
From: =?UTF-8?q?V=C3=ADt=20Ondruch?= <vondruch@redhat.com>
|
||||
Date: Fri, 22 Dec 2023 14:16:48 +0100
|
||||
Subject: [PATCH 1/2] Revert "compare_by_identity: remove alloc for non-empty
|
||||
Hash"
|
||||
|
||||
This reverts commit 11fa76b1b521072c200c78ea023960221ff426d6.
|
||||
---
|
||||
hash.c | 13 ++++---------
|
||||
1 file changed, 4 insertions(+), 9 deletions(-)
|
||||
|
||||
diff --git a/hash.c b/hash.c
|
||||
index 78e9d9a2d6..f6525ba4a5 100644
|
||||
--- a/hash.c
|
||||
+++ b/hash.c
|
||||
@@ -4377,16 +4377,13 @@ rb_hash_compare_by_id(VALUE hash)
|
||||
if (hash_iterating_p(hash)) {
|
||||
rb_raise(rb_eRuntimeError, "compare_by_identity during iteration");
|
||||
}
|
||||
+ ar_force_convert_table(hash, __FILE__, __LINE__);
|
||||
+ HASH_ASSERT(RHASH_ST_TABLE_P(hash));
|
||||
|
||||
if (RHASH_TABLE_EMPTY_P(hash)) {
|
||||
// Fast path: There's nothing to rehash, so we don't need a `tmp` table.
|
||||
- // We're most likely an AR table, so this will need an allocation.
|
||||
- ar_force_convert_table(hash, __FILE__, __LINE__);
|
||||
- HASH_ASSERT(RHASH_ST_TABLE_P(hash));
|
||||
-
|
||||
RHASH_ST_TABLE(hash)->type = &identhash;
|
||||
- }
|
||||
- else {
|
||||
+ } else {
|
||||
// Slow path: Need to rehash the members of `self` into a new
|
||||
// `tmp` table using the new `identhash` compare/hash functions.
|
||||
tmp = hash_alloc(0);
|
||||
@@ -4394,10 +4391,8 @@ rb_hash_compare_by_id(VALUE hash)
|
||||
identtable = RHASH_ST_TABLE(tmp);
|
||||
|
||||
rb_hash_foreach(hash, rb_hash_rehash_i, (VALUE)tmp);
|
||||
- rb_hash_free(hash);
|
||||
|
||||
- // We know for sure `identtable` is an st table,
|
||||
- // so we can skip `ar_force_convert_table` here.
|
||||
+ rb_hash_free(hash);
|
||||
RHASH_ST_TABLE_SET(hash, identtable);
|
||||
RHASH_ST_CLEAR(tmp);
|
||||
}
|
||||
|
||||
From f5c415300ffe63e41e46c6b88b8634a3bad0c7c2 Mon Sep 17 00:00:00 2001
|
||||
From: =?UTF-8?q?V=C3=ADt=20Ondruch?= <vondruch@redhat.com>
|
||||
Date: Fri, 22 Dec 2023 14:17:14 +0100
|
||||
Subject: [PATCH 2/2] Revert "compare_by_identity: remove alloc for empty Hash"
|
||||
|
||||
This reverts commit b5c6c0122f5b010cb5f43e7a236c4ba2b1d56a2a.
|
||||
---
|
||||
hash.c | 21 +++++++--------------
|
||||
1 file changed, 7 insertions(+), 14 deletions(-)
|
||||
|
||||
diff --git a/hash.c b/hash.c
|
||||
index f6525ba4a5..cf83675c70 100644
|
||||
--- a/hash.c
|
||||
+++ b/hash.c
|
||||
@@ -4380,22 +4380,15 @@ rb_hash_compare_by_id(VALUE hash)
|
||||
ar_force_convert_table(hash, __FILE__, __LINE__);
|
||||
HASH_ASSERT(RHASH_ST_TABLE_P(hash));
|
||||
|
||||
- if (RHASH_TABLE_EMPTY_P(hash)) {
|
||||
- // Fast path: There's nothing to rehash, so we don't need a `tmp` table.
|
||||
- RHASH_ST_TABLE(hash)->type = &identhash;
|
||||
- } else {
|
||||
- // Slow path: Need to rehash the members of `self` into a new
|
||||
- // `tmp` table using the new `identhash` compare/hash functions.
|
||||
- tmp = hash_alloc(0);
|
||||
- hash_st_table_init(tmp, &identhash, RHASH_SIZE(hash));
|
||||
- identtable = RHASH_ST_TABLE(tmp);
|
||||
+ tmp = hash_alloc(0);
|
||||
+ hash_st_table_init(tmp, &identhash, RHASH_SIZE(hash));
|
||||
+ identtable = RHASH_ST_TABLE(tmp);
|
||||
|
||||
- rb_hash_foreach(hash, rb_hash_rehash_i, (VALUE)tmp);
|
||||
+ rb_hash_foreach(hash, rb_hash_rehash_i, (VALUE)tmp);
|
||||
|
||||
- rb_hash_free(hash);
|
||||
- RHASH_ST_TABLE_SET(hash, identtable);
|
||||
- RHASH_ST_CLEAR(tmp);
|
||||
- }
|
||||
+ rb_hash_free(hash);
|
||||
+ RHASH_ST_TABLE_SET(hash, identtable);
|
||||
+ RHASH_ST_CLEAR(tmp);
|
||||
|
||||
return hash;
|
||||
}
|
@ -0,0 +1,241 @@
|
||||
From c3655b89e7c06555a2e0bf13affb8a63a49f4296 Mon Sep 17 00:00:00 2001
|
||||
From: Jarek Prokop <jprokop@redhat.com>
|
||||
Date: Fri, 26 Jan 2024 11:19:48 +0100
|
||||
Subject: [PATCH] Revert "Set AI_ADDRCONFIG when making getaddrinfo(3) calls
|
||||
for outgoing conns (#7295)"
|
||||
|
||||
This reverts commit d2ba8ea54a4089959afdeecdd963e3c4ff391748.
|
||||
|
||||
The purpose of the commit is to workaround a GLIBC bug [0] still present
|
||||
in older Ubuntu [1]. C8S/RHEL 8 has the fix for some time [2] and the
|
||||
Ruby workaround is causing problems for us [3]. Therefore we can
|
||||
revert it for EL8, EL9, and Fedora distros.
|
||||
|
||||
[0] https://sourceware.org/bugzilla/show_bug.cgi?id=26600
|
||||
[1] https://bugs.launchpad.net/ubuntu/+source/glibc/+bug/1961697
|
||||
[2] https://bugzilla.redhat.com/show_bug.cgi?id=1868106
|
||||
[3] https://bugs.ruby-lang.org/issues/20208
|
||||
---
|
||||
ext/socket/extconf.rb | 2 -
|
||||
ext/socket/ipsocket.c | 11 +--
|
||||
test/socket/test_tcp.rb | 164 ----------------------------------------
|
||||
3 files changed, 2 insertions(+), 175 deletions(-)
|
||||
|
||||
diff --git a/ext/socket/extconf.rb b/ext/socket/extconf.rb
|
||||
index 544bed5298..1ca52da366 100644
|
||||
--- a/ext/socket/extconf.rb
|
||||
+++ b/ext/socket/extconf.rb
|
||||
@@ -607,8 +607,6 @@ def %(s) s || self end
|
||||
EOS
|
||||
end
|
||||
|
||||
- have_const('AI_ADDRCONFIG', headers)
|
||||
-
|
||||
case with_config("lookup-order-hack", "UNSPEC")
|
||||
when "INET"
|
||||
$defs << "-DLOOKUP_ORDER_HACK_INET"
|
||||
diff --git a/ext/socket/ipsocket.c b/ext/socket/ipsocket.c
|
||||
index 0a693655b4..0c13620258 100644
|
||||
--- a/ext/socket/ipsocket.c
|
||||
+++ b/ext/socket/ipsocket.c
|
||||
@@ -54,22 +54,15 @@ init_inetsock_internal(VALUE v)
|
||||
VALUE connect_timeout = arg->connect_timeout;
|
||||
struct timeval tv_storage;
|
||||
struct timeval *tv = NULL;
|
||||
- int remote_addrinfo_hints = 0;
|
||||
|
||||
if (!NIL_P(connect_timeout)) {
|
||||
tv_storage = rb_time_interval(connect_timeout);
|
||||
tv = &tv_storage;
|
||||
}
|
||||
|
||||
- if (type == INET_SERVER) {
|
||||
- remote_addrinfo_hints |= AI_PASSIVE;
|
||||
- }
|
||||
-#ifdef HAVE_CONST_AI_ADDRCONFIG
|
||||
- remote_addrinfo_hints |= AI_ADDRCONFIG;
|
||||
-#endif
|
||||
-
|
||||
arg->remote.res = rsock_addrinfo(arg->remote.host, arg->remote.serv,
|
||||
- family, SOCK_STREAM, remote_addrinfo_hints);
|
||||
+ family, SOCK_STREAM,
|
||||
+ (type == INET_SERVER) ? AI_PASSIVE : 0);
|
||||
|
||||
|
||||
/*
|
||||
diff --git a/test/socket/test_tcp.rb b/test/socket/test_tcp.rb
|
||||
index 35d361f060..7f9dc53cae 100644
|
||||
--- a/test/socket/test_tcp.rb
|
||||
+++ b/test/socket/test_tcp.rb
|
||||
@@ -140,168 +140,4 @@ def test_accept_multithread
|
||||
server_threads.each(&:join)
|
||||
end
|
||||
end
|
||||
-
|
||||
- def test_ai_addrconfig
|
||||
- # This test verifies that we pass AI_ADDRCONFIG to the DNS resolver when making
|
||||
- # an outgoing connection.
|
||||
- # The verification of this is unfortunately incredibly convoluted. We perform the
|
||||
- # test by setting up a fake DNS server to receive queries. Then, we construct
|
||||
- # an environment which has only IPv4 addresses and uses that fake DNS server. We
|
||||
- # then attempt to make an outgoing TCP connection. Finally, we verify that we
|
||||
- # only received A and not AAAA queries on our fake resolver.
|
||||
- # This test can only possibly work on Linux, and only when run as root. If either
|
||||
- # of these conditions aren't met, the test will be skipped.
|
||||
-
|
||||
- # The construction of our IPv6-free environment must happen in a child process,
|
||||
- # which we can put in its own network & mount namespaces.
|
||||
-
|
||||
- omit "This test is disabled. It is retained to show the original intent of [ruby-core:110870]"
|
||||
-
|
||||
- IO.popen("-") do |test_io|
|
||||
- if test_io.nil?
|
||||
- begin
|
||||
- # Child program
|
||||
- require 'fiddle'
|
||||
- require 'resolv'
|
||||
- require 'open3'
|
||||
-
|
||||
- libc = Fiddle.dlopen(nil)
|
||||
- begin
|
||||
- unshare = Fiddle::Function.new(libc['unshare'], [Fiddle::TYPE_INT], Fiddle::TYPE_INT)
|
||||
- rescue Fiddle::DLError
|
||||
- # Test can't run because we don't have unshare(2) in libc
|
||||
- # This will be the case on not-linux, and also on very old glibc versions (or
|
||||
- # possibly other libc's that don't expose this syscall wrapper)
|
||||
- $stdout.write(Marshal.dump({result: :skip, reason: "unshare(2) or mount(2) not in libc"}))
|
||||
- exit
|
||||
- end
|
||||
-
|
||||
- # Move our test process into a new network & mount namespace.
|
||||
- # This environment will be configured to be IPv6 free and point DNS resolution
|
||||
- # at a fake DNS server.
|
||||
- # (n.b. these flags are CLONE_NEWNS | CLONE_NEWNET)
|
||||
- ret = unshare.call(0x00020000 | 0x40000000)
|
||||
- errno = Fiddle.last_error
|
||||
- if ret == -1 && errno == Errno::EPERM::Errno
|
||||
- # Test can't run because we're not root.
|
||||
- $stdout.write(Marshal.dump({result: :skip, reason: "insufficient permissions to unshare namespaces"}))
|
||||
- exit
|
||||
- elsif ret == -1 && (errno == Errno::ENOSYS::Errno || errno == Errno::EINVAL::Errno)
|
||||
- # No unshare(2) in the kernel (or kernel too old to know about this namespace type)
|
||||
- $stdout.write(Marshal.dump({result: :skip, reason: "errno #{errno} calling unshare(2)"}))
|
||||
- exit
|
||||
- elsif ret == -1
|
||||
- # Unexpected failure
|
||||
- raise "errno #{errno} calling unshare(2)"
|
||||
- end
|
||||
-
|
||||
- # Set up our fake DNS environment. Clean out /etc/hosts...
|
||||
- fake_hosts_file = Tempfile.new('ruby_test_hosts')
|
||||
- fake_hosts_file.write <<~HOSTS
|
||||
- 127.0.0.1 localhost
|
||||
- ::1 localhost
|
||||
- HOSTS
|
||||
- fake_hosts_file.flush
|
||||
-
|
||||
- # Have /etc/resolv.conf point to 127.0.0.1...
|
||||
- fake_resolv_conf = Tempfile.new('ruby_test_resolv')
|
||||
- fake_resolv_conf.write <<~RESOLV
|
||||
- nameserver 127.0.0.1
|
||||
- RESOLV
|
||||
- fake_resolv_conf.flush
|
||||
-
|
||||
- # Also stub out /etc/nsswitch.conf; glibc can have other resolver modules
|
||||
- # (like systemd-resolved) configured in there other than just using dns,
|
||||
- # so rewrite it to remove any `hosts:` lines and add one which just uses
|
||||
- # dns.
|
||||
- real_nsswitch_conf = File.read('/etc/nsswitch.conf') rescue ""
|
||||
- fake_nsswitch_conf = Tempfile.new('ruby_test_nsswitch')
|
||||
- real_nsswitch_conf.lines.reject { _1 =~ /^\s*hosts:/ }.each do |ln|
|
||||
- fake_nsswitch_conf.puts ln
|
||||
- end
|
||||
- fake_nsswitch_conf.puts "hosts: files myhostname dns"
|
||||
- fake_nsswitch_conf.flush
|
||||
-
|
||||
- # This is needed to make sure our bind-mounds aren't visible outside this process.
|
||||
- system 'mount', '--make-rprivate', '/', exception: true
|
||||
- # Bind-mount the fake files over the top of the real files.
|
||||
- system 'mount', '--bind', '--make-private', fake_hosts_file.path, '/etc/hosts', exception: true
|
||||
- system 'mount', '--bind', '--make-private', fake_resolv_conf.path, '/etc/resolv.conf', exception: true
|
||||
- system 'mount', '--bind', '--make-private', fake_nsswitch_conf.path, '/etc/nsswitch.conf', exception: true
|
||||
-
|
||||
- # Create a dummy interface with only an IPv4 address
|
||||
- system 'ip', 'link', 'add', 'dummy0', 'type', 'dummy', exception: true
|
||||
- system 'ip', 'addr', 'add', '192.168.1.2/24', 'dev', 'dummy0', exception: true
|
||||
- system 'ip', 'link', 'set', 'dummy0', 'up', exception: true
|
||||
- system 'ip', 'link', 'set', 'lo', 'up', exception: true
|
||||
-
|
||||
- # Disable IPv6 on this interface (this is needed to disable the link-local
|
||||
- # IPv6 address)
|
||||
- File.open('/proc/sys/net/ipv6/conf/dummy0/disable_ipv6', 'w') do |f|
|
||||
- f.puts "1"
|
||||
- end
|
||||
-
|
||||
- # Create a fake DNS server which will receive the DNS queries triggered by TCPSocket.new
|
||||
- fake_dns_server_socket = UDPSocket.new
|
||||
- fake_dns_server_socket.bind('127.0.0.1', 53)
|
||||
- received_dns_queries = []
|
||||
- fake_dns_server_thread = Thread.new do
|
||||
- Socket.udp_server_loop_on([fake_dns_server_socket]) do |msg, msg_src|
|
||||
- request = Resolv::DNS::Message.decode(msg)
|
||||
- received_dns_queries << request
|
||||
- response = request.dup.tap do |r|
|
||||
- r.qr = 0
|
||||
- r.rcode = 3 # NXDOMAIN
|
||||
- end
|
||||
- msg_src.reply response.encode
|
||||
- end
|
||||
- end
|
||||
-
|
||||
- # Make a request which will hit our fake DNS swerver - this needs to be in _another_
|
||||
- # process because glibc will cache resolver info across the fork otherwise.
|
||||
- load_path_args = $LOAD_PATH.flat_map { ['-I', _1] }
|
||||
- Open3.capture3('/proc/self/exe', *load_path_args, '-rsocket', '-e', <<~RUBY)
|
||||
- TCPSocket.open('www.example.com', 4444)
|
||||
- RUBY
|
||||
-
|
||||
- fake_dns_server_thread.kill
|
||||
- fake_dns_server_thread.join
|
||||
-
|
||||
- have_aaaa_qs = received_dns_queries.any? do |query|
|
||||
- query.question.any? do |question|
|
||||
- question[1] == Resolv::DNS::Resource::IN::AAAA
|
||||
- end
|
||||
- end
|
||||
-
|
||||
- have_a_q = received_dns_queries.any? do |query|
|
||||
- query.question.any? do |question|
|
||||
- question[0].to_s == "www.example.com"
|
||||
- end
|
||||
- end
|
||||
-
|
||||
- if have_aaaa_qs
|
||||
- $stdout.write(Marshal.dump({result: :fail, reason: "got AAAA queries, expected none"}))
|
||||
- elsif !have_a_q
|
||||
- $stdout.write(Marshal.dump({result: :fail, reason: "got no A query for example.com"}))
|
||||
- else
|
||||
- $stdout.write(Marshal.dump({result: :success}))
|
||||
- end
|
||||
- rescue => ex
|
||||
- $stdout.write(Marshal.dump({result: :fail, reason: ex.full_message}))
|
||||
- ensure
|
||||
- # Make sure the child process does not transfer control back into the test runner.
|
||||
- exit!
|
||||
- end
|
||||
- else
|
||||
- test_result = Marshal.load(test_io.read)
|
||||
-
|
||||
- case test_result[:result]
|
||||
- when :skip
|
||||
- omit test_result[:reason]
|
||||
- when :fail
|
||||
- fail test_result[:reason]
|
||||
- end
|
||||
- end
|
||||
- end
|
||||
- end
|
||||
end if defined?(TCPSocket)
|
||||
--
|
||||
2.43.0
|
||||
|
@ -0,0 +1,59 @@
|
||||
From 8af8f327457738620d2c85bd65db8cc5594585db Mon Sep 17 00:00:00 2001
|
||||
From: Yuta Saito <kateinoigakukun@gmail.com>
|
||||
Date: Wed, 27 Dec 2023 06:22:45 +0000
|
||||
Subject: [PATCH 1/2] [Bug #20085] Use consistent default options for
|
||||
`-mbranch-protection`
|
||||
|
||||
We need to use the same options for both C compiler and assembler
|
||||
when `-mbranch-protection` is guessed by configure. Otherwise,
|
||||
`coroutine/arm64/Context.{h,S}` will use incompatible PAC strategies.
|
||||
---
|
||||
configure.ac | 3 +++
|
||||
1 file changed, 3 insertions(+)
|
||||
|
||||
diff --git a/configure.ac b/configure.ac
|
||||
index 9286946fc1..18b4247991 100644
|
||||
--- a/configure.ac
|
||||
+++ b/configure.ac
|
||||
@@ -830,7 +830,10 @@ AS_IF([test "$GCC" = yes], [
|
||||
AS_FOR(option, opt, [-mbranch-protection=pac-ret -msign-return-address=all], [
|
||||
RUBY_TRY_CFLAGS(option, [branch_protection=yes], [branch_protection=no])
|
||||
AS_IF([test "x$branch_protection" = xyes], [
|
||||
+ # C compiler and assembler must be consistent for -mbranch-protection
|
||||
+ # since they both check `__ARM_FEATURE_PAC_DEFAULT` definition.
|
||||
RUBY_APPEND_OPTION(XCFLAGS, option)
|
||||
+ RUBY_APPEND_OPTION(ASFLAGS, option)
|
||||
break
|
||||
])
|
||||
])
|
||||
--
|
||||
2.43.0
|
||||
|
||||
|
||||
From 80281e14e411e8e5fe4955effbb2c650a2f52667 Mon Sep 17 00:00:00 2001
|
||||
From: Jarek Prokop <jprokop@redhat.com>
|
||||
Date: Fri, 12 Jan 2024 18:33:34 +0100
|
||||
Subject: [PATCH 2/2] aarch64: Prepend -mbranch-protection=standard option when
|
||||
checking branch protection.
|
||||
|
||||
Related Upstream issue: https://bugs.ruby-lang.org/issues/20154
|
||||
---
|
||||
configure.ac | 2 +-
|
||||
1 file changed, 1 insertion(+), 1 deletion(-)
|
||||
|
||||
diff --git a/configure.ac b/configure.ac
|
||||
index 18b4247991..5ea8ada8f7 100644
|
||||
--- a/configure.ac
|
||||
+++ b/configure.ac
|
||||
@@ -827,7 +827,7 @@ AS_IF([test "$GCC" = yes], [
|
||||
|
||||
# aarch64 branch protection
|
||||
AS_CASE(["$target_cpu"], [aarch64], [
|
||||
- AS_FOR(option, opt, [-mbranch-protection=pac-ret -msign-return-address=all], [
|
||||
+ AS_FOR(option, opt, [-mbranch-protection=standard -mbranch-protection=pac-ret -msign-return-address=all], [
|
||||
RUBY_TRY_CFLAGS(option, [branch_protection=yes], [branch_protection=no])
|
||||
AS_IF([test "x$branch_protection" = xyes], [
|
||||
# C compiler and assembler must be consistent for -mbranch-protection
|
||||
--
|
||||
2.43.0
|
||||
|
@ -0,0 +1,256 @@
|
||||
From d3933fc753187a055a4904af82f5f3794c88c416 Mon Sep 17 00:00:00 2001
|
||||
From: Sorah Fukumori <her@sorah.jp>
|
||||
Date: Mon, 1 Jan 2024 20:45:54 +0900
|
||||
Subject: [PATCH] [ruby/net-http] Renew test certificates
|
||||
|
||||
The private key is replaced with a public known test key published at
|
||||
[RFC 9500].
|
||||
|
||||
Also lifetime has been extended to 10 years from 4 years.
|
||||
|
||||
[RFC 9500]: https://www.rfc-editor.org/rfc/rfc9500.html
|
||||
|
||||
https://github.com/ruby/net-http/commit/4ab6c4a500
|
||||
---
|
||||
test/net/fixtures/Makefile | 6 +--
|
||||
test/net/fixtures/cacert.pem | 44 ++++++++--------
|
||||
test/net/fixtures/server.crt | 99 +++++++-----------------------------
|
||||
test/net/fixtures/server.key | 55 ++++++++++----------
|
||||
4 files changed, 71 insertions(+), 133 deletions(-)
|
||||
|
||||
diff --git a/test/net/fixtures/Makefile b/test/net/fixtures/Makefile
|
||||
index b2bc9c7368ee2..88c232e3b6c16 100644
|
||||
--- a/test/net/fixtures/Makefile
|
||||
+++ b/test/net/fixtures/Makefile
|
||||
@@ -5,11 +5,11 @@ regen_certs:
|
||||
make server.crt
|
||||
|
||||
cacert.pem: server.key
|
||||
- openssl req -new -x509 -days 1825 -key server.key -out cacert.pem -text -subj "/C=JP/ST=Shimane/L=Matz-e city/O=Ruby Core Team/CN=Ruby Test CA/emailAddress=security@ruby-lang.org"
|
||||
+ openssl req -new -x509 -days 3650 -key server.key -out cacert.pem -subj "/C=JP/ST=Shimane/L=Matz-e city/O=Ruby Core Team/CN=Ruby Test CA/emailAddress=security@ruby-lang.org"
|
||||
|
||||
server.csr:
|
||||
- openssl req -new -key server.key -out server.csr -text -subj "/C=JP/ST=Shimane/O=Ruby Core Team/OU=Ruby Test/CN=localhost"
|
||||
+ openssl req -new -key server.key -out server.csr -subj "/C=JP/ST=Shimane/O=Ruby Core Team/OU=Ruby Test/CN=localhost"
|
||||
|
||||
server.crt: server.csr cacert.pem
|
||||
- openssl x509 -days 1825 -CA cacert.pem -CAkey server.key -set_serial 00 -in server.csr -req -text -out server.crt
|
||||
+ openssl x509 -days 3650 -CA cacert.pem -CAkey server.key -set_serial 00 -in server.csr -req -out server.crt
|
||||
rm server.csr
|
||||
diff --git a/test/net/fixtures/cacert.pem b/test/net/fixtures/cacert.pem
|
||||
index f623bd62ed375..24c83f1c65225 100644
|
||||
--- a/test/net/fixtures/cacert.pem
|
||||
+++ b/test/net/fixtures/cacert.pem
|
||||
@@ -1,24 +1,24 @@
|
||||
-----BEGIN CERTIFICATE-----
|
||||
-MIID7TCCAtWgAwIBAgIJAIltvxrFAuSnMA0GCSqGSIb3DQEBCwUAMIGMMQswCQYD
|
||||
-VQQGEwJKUDEQMA4GA1UECAwHU2hpbWFuZTEUMBIGA1UEBwwLTWF0ei1lIGNpdHkx
|
||||
-FzAVBgNVBAoMDlJ1YnkgQ29yZSBUZWFtMRUwEwYDVQQDDAxSdWJ5IFRlc3QgQ0Ex
|
||||
-JTAjBgkqhkiG9w0BCQEWFnNlY3VyaXR5QHJ1YnktbGFuZy5vcmcwHhcNMTkwMTAy
|
||||
-MDI1ODI4WhcNMjQwMTAxMDI1ODI4WjCBjDELMAkGA1UEBhMCSlAxEDAOBgNVBAgM
|
||||
-B1NoaW1hbmUxFDASBgNVBAcMC01hdHotZSBjaXR5MRcwFQYDVQQKDA5SdWJ5IENv
|
||||
-cmUgVGVhbTEVMBMGA1UEAwwMUnVieSBUZXN0IENBMSUwIwYJKoZIhvcNAQkBFhZz
|
||||
-ZWN1cml0eUBydWJ5LWxhbmcub3JnMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIB
|
||||
-CgKCAQEAznlbjRVhz1NlutHVrhcGnK8W0qug2ujKXv1njSC4U6nJF6py7I9EeehV
|
||||
-SaKePyv+I9z3K1LnfUHOtUbdwdKC77yN66A6q2aqzu5q09/NSykcZGOIF0GuItYI
|
||||
-3nvW3IqBddff2ffsyR+9pBjfb5AIPP08WowF9q4s1eGULwZc4w2B8PFhtxYANd7d
|
||||
-BvGLXFlcufv9tDtzyRi4t7eqxCRJkZQIZNZ6DHHIJrNxejOILfHLarI12yk8VK6L
|
||||
-2LG4WgGqyeePiRyd1o1MbuiAFYqAwpXNUbRKg5NaZGwBHZk8UZ+uFKt1QMBURO5R
|
||||
-WFy1c349jbWszTqFyL4Lnbg9HhAowQIDAQABo1AwTjAdBgNVHQ4EFgQU9tEiKdU9
|
||||
-I9derQyc5nWPnc34nVMwHwYDVR0jBBgwFoAU9tEiKdU9I9derQyc5nWPnc34nVMw
|
||||
-DAYDVR0TBAUwAwEB/zANBgkqhkiG9w0BAQsFAAOCAQEAxj7F/u3C3fgq24N7hGRA
|
||||
-of7ClFQxGmo/IGT0AISzW3HiVYiFaikKhbO1NwD9aBpD8Zwe62sCqMh8jGV/b0+q
|
||||
-aOORnWYNy2R6r9FkASAglmdF6xn3bhgGD5ls4pCvcG9FynGnGc24g6MrjFNrBYUS
|
||||
-2iIZsg36i0IJswo/Dy6HLphCms2BMCD3DeWtfjePUiTmQHJo6HsQIKP/u4N4Fvee
|
||||
-uMBInei2M4VU74fLXbmKl1F9AEX7JDP3BKSZG19Ch5pnUo4uXM1uNTGsi07P4Y0s
|
||||
-K44+SKBC0bYEFbDK0eQWMrX3kIhkPxyIWhxdq9/NqPYjShuSEAhA6CSpmRg0pqc+
|
||||
-mA==
|
||||
+MIID+zCCAuOgAwIBAgIUGMvHl3EhtKPKcgc3NQSAYfFuC+8wDQYJKoZIhvcNAQEL
|
||||
+BQAwgYwxCzAJBgNVBAYTAkpQMRAwDgYDVQQIDAdTaGltYW5lMRQwEgYDVQQHDAtN
|
||||
+YXR6LWUgY2l0eTEXMBUGA1UECgwOUnVieSBDb3JlIFRlYW0xFTATBgNVBAMMDFJ1
|
||||
+YnkgVGVzdCBDQTElMCMGCSqGSIb3DQEJARYWc2VjdXJpdHlAcnVieS1sYW5nLm9y
|
||||
+ZzAeFw0yNDAxMDExMTQ3MjNaFw0zMzEyMjkxMTQ3MjNaMIGMMQswCQYDVQQGEwJK
|
||||
+UDEQMA4GA1UECAwHU2hpbWFuZTEUMBIGA1UEBwwLTWF0ei1lIGNpdHkxFzAVBgNV
|
||||
+BAoMDlJ1YnkgQ29yZSBUZWFtMRUwEwYDVQQDDAxSdWJ5IFRlc3QgQ0ExJTAjBgkq
|
||||
+hkiG9w0BCQEWFnNlY3VyaXR5QHJ1YnktbGFuZy5vcmcwggEiMA0GCSqGSIb3DQEB
|
||||
+AQUAA4IBDwAwggEKAoIBAQCw+egZQ6eumJKq3hfKfED4dE/tL4FI5sjqont9ABVI
|
||||
++1GSqyi1bFBgsRjM0THllIdMbKmJtWwnKW8J+5OgNN8y6Xxv8JmM/Y5vQt2lis0f
|
||||
+qXmG8UTz0VTWdlAXXmhUs6lSADvAaIe4RVrCsZ97L3ZQTryY7JRVcbB4khUN3Gp0
|
||||
+yg+801SXzoFTTa+UGIRLE66jH51aa5VXu99hnv1OiH8tQrjdi8mH6uG/icq4XuIe
|
||||
+NWMF32wHqIOOPvQcWV3M5D2vxJEj702Ku6k9OQXkAo17qRSEonWW4HtLbtmS8He1
|
||||
+JNPc/n3dVUm+fM6NoDXPoLP7j55G9zKyqGtGAWXAj1MTAgMBAAGjUzBRMB0GA1Ud
|
||||
+DgQWBBSJGVleDvFp9cu9R+E0/OKYzGkwkTAfBgNVHSMEGDAWgBSJGVleDvFp9cu9
|
||||
+R+E0/OKYzGkwkTAPBgNVHRMBAf8EBTADAQH/MA0GCSqGSIb3DQEBCwUAA4IBAQBl
|
||||
+8GLB8skAWlkSw/FwbUmEV3zyqu+p7PNP5YIYoZs0D74e7yVulGQ6PKMZH5hrZmHo
|
||||
+orFSQU+VUUirG8nDGj7Rzce8WeWBxsaDGC8CE2dq6nC6LuUwtbdMnBrH0LRWAz48
|
||||
+jGFF3jHtVz8VsGfoZTZCjukWqNXvU6hETT9GsfU+PZqbqcTVRPH52+XgYayKdIbD
|
||||
+r97RM4X3+aXBHcUW0b76eyyi65RR/Xtvn8ioZt2AdX7T2tZzJyXJN3Hupp77s6Ui
|
||||
+AZR35SToHCZeTZD12YBvLBdaTPLZN7O/Q/aAO9ZiJaZ7SbFOjz813B2hxXab4Fob
|
||||
+2uJX6eMWTVxYK5D4M9lm
|
||||
-----END CERTIFICATE-----
|
||||
diff --git a/test/net/fixtures/server.crt b/test/net/fixtures/server.crt
|
||||
index 5ca78a6d146a0..5d2923795dabc 100644
|
||||
--- a/test/net/fixtures/server.crt
|
||||
+++ b/test/net/fixtures/server.crt
|
||||
@@ -1,82 +1,21 @@
|
||||
-Certificate:
|
||||
- Data:
|
||||
- Version: 3 (0x2)
|
||||
- Serial Number: 2 (0x2)
|
||||
- Signature Algorithm: sha256WithRSAEncryption
|
||||
- Issuer: C=JP, ST=Shimane, L=Matz-e city, O=Ruby Core Team, CN=Ruby Test CA/emailAddress=security@ruby-lang.org
|
||||
- Validity
|
||||
- Not Before: Jan 2 03:27:13 2019 GMT
|
||||
- Not After : Jan 1 03:27:13 2024 GMT
|
||||
- Subject: C=JP, ST=Shimane, O=Ruby Core Team, OU=Ruby Test, CN=localhost
|
||||
- Subject Public Key Info:
|
||||
- Public Key Algorithm: rsaEncryption
|
||||
- Public-Key: (2048 bit)
|
||||
- Modulus:
|
||||
- 00:e8:da:9c:01:2e:2b:10:ec:49:cd:5e:07:13:07:
|
||||
- 9c:70:9e:c6:74:bc:13:c2:e1:6f:c6:82:fd:e3:48:
|
||||
- e0:2c:a5:68:c7:9e:42:de:60:54:65:e6:6a:14:57:
|
||||
- 7a:30:d0:cc:b5:b6:d9:c3:d2:df:c9:25:97:54:67:
|
||||
- cf:f6:be:5e:cb:8b:ee:03:c5:e1:e2:f9:e7:f7:d1:
|
||||
- 0c:47:f0:b8:da:33:5a:ad:41:ad:e7:b5:a2:7b:b7:
|
||||
- bf:30:da:60:f8:e3:54:a2:bc:3a:fd:1b:74:d9:dc:
|
||||
- 74:42:e9:29:be:df:ac:b4:4f:eb:32:f4:06:f1:e1:
|
||||
- 8c:4b:a8:8b:fb:29:e7:b1:bf:1d:01:ee:73:0f:f9:
|
||||
- 40:dc:d5:15:79:d9:c6:73:d0:c0:dd:cb:e4:da:19:
|
||||
- 47:80:c6:14:04:72:fd:9a:7c:8f:11:82:76:49:04:
|
||||
- 79:cc:f2:5c:31:22:95:13:3e:5d:40:a6:4d:e0:a3:
|
||||
- 02:26:7d:52:3b:bb:ed:65:a1:0f:ed:6b:b0:3c:d4:
|
||||
- de:61:15:5e:d3:dd:68:09:9f:4a:57:a5:c2:a9:6d:
|
||||
- 86:92:c5:f4:a4:d4:b7:13:3b:52:63:24:05:e2:cc:
|
||||
- e3:8a:3c:d4:35:34:2b:10:bb:58:72:e7:e1:8d:1d:
|
||||
- 74:8c:61:16:20:3d:d0:1c:4e:8f:6e:fd:fe:64:10:
|
||||
- 4f:41
|
||||
- Exponent: 65537 (0x10001)
|
||||
- X509v3 extensions:
|
||||
- X509v3 Basic Constraints:
|
||||
- CA:FALSE
|
||||
- Netscape Comment:
|
||||
- OpenSSL Generated Certificate
|
||||
- X509v3 Subject Key Identifier:
|
||||
- ED:28:C2:7E:AB:4B:C8:E8:FE:55:6D:66:95:31:1C:2D:60:F9:02:36
|
||||
- X509v3 Authority Key Identifier:
|
||||
- keyid:F6:D1:22:29:D5:3D:23:D7:5E:AD:0C:9C:E6:75:8F:9D:CD:F8:9D:53
|
||||
-
|
||||
- Signature Algorithm: sha256WithRSAEncryption
|
||||
- 1d:b8:c5:8b:72:41:20:65:ad:27:6f:15:63:06:26:12:8d:9c:
|
||||
- ad:ca:f4:db:97:b4:90:cb:ff:35:94:bb:2a:a7:a1:ab:1e:35:
|
||||
- 2d:a5:3f:c9:24:b0:1a:58:89:75:3e:81:0a:2c:4f:98:f9:51:
|
||||
- fb:c0:a3:09:d0:0a:9b:e7:a2:b7:c3:60:40:c8:f4:6d:b2:6a:
|
||||
- 56:12:17:4c:00:24:31:df:9c:60:ae:b1:68:54:a9:e6:b5:4a:
|
||||
- 04:e6:92:05:86:d9:5a:dc:96:30:a5:58:de:14:99:0f:e5:15:
|
||||
- 89:3e:9b:eb:80:e3:bd:83:c3:ea:33:35:4b:3e:2f:d3:0d:64:
|
||||
- 93:67:7f:8d:f5:3f:0c:27:bc:37:5a:cc:d6:47:16:af:5a:62:
|
||||
- d2:da:51:f8:74:06:6b:24:ad:28:68:08:98:37:7d:ed:0e:ab:
|
||||
- 1e:82:61:05:d0:ba:75:a0:ab:21:b0:9a:fd:2b:54:86:1d:0d:
|
||||
- 1f:c2:d4:77:1f:72:26:5e:ad:8a:9f:09:36:6d:44:be:74:c2:
|
||||
- 5a:3e:ff:5c:9d:75:d6:38:7b:c5:39:f9:44:6e:a1:d1:8e:ff:
|
||||
- 63:db:c4:bb:c6:91:92:ca:5c:60:9b:1d:eb:0a:de:08:ee:bf:
|
||||
- da:76:03:65:62:29:8b:f8:7f:c7:86:73:1e:f6:1f:2d:89:69:
|
||||
- fd:be:bd:6e
|
||||
-----BEGIN CERTIFICATE-----
|
||||
-MIID4zCCAsugAwIBAgIBAjANBgkqhkiG9w0BAQsFADCBjDELMAkGA1UEBhMCSlAx
|
||||
-EDAOBgNVBAgMB1NoaW1hbmUxFDASBgNVBAcMC01hdHotZSBjaXR5MRcwFQYDVQQK
|
||||
-DA5SdWJ5IENvcmUgVGVhbTEVMBMGA1UEAwwMUnVieSBUZXN0IENBMSUwIwYJKoZI
|
||||
-hvcNAQkBFhZzZWN1cml0eUBydWJ5LWxhbmcub3JnMB4XDTE5MDEwMjAzMjcxM1oX
|
||||
-DTI0MDEwMTAzMjcxM1owYDELMAkGA1UEBhMCSlAxEDAOBgNVBAgMB1NoaW1hbmUx
|
||||
-FzAVBgNVBAoMDlJ1YnkgQ29yZSBUZWFtMRIwEAYDVQQLDAlSdWJ5IFRlc3QxEjAQ
|
||||
-BgNVBAMMCWxvY2FsaG9zdDCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEB
|
||||
-AOjanAEuKxDsSc1eBxMHnHCexnS8E8Lhb8aC/eNI4CylaMeeQt5gVGXmahRXejDQ
|
||||
-zLW22cPS38kll1Rnz/a+XsuL7gPF4eL55/fRDEfwuNozWq1Bree1onu3vzDaYPjj
|
||||
-VKK8Ov0bdNncdELpKb7frLRP6zL0BvHhjEuoi/sp57G/HQHucw/5QNzVFXnZxnPQ
|
||||
-wN3L5NoZR4DGFARy/Zp8jxGCdkkEeczyXDEilRM+XUCmTeCjAiZ9Uju77WWhD+1r
|
||||
-sDzU3mEVXtPdaAmfSlelwqlthpLF9KTUtxM7UmMkBeLM44o81DU0KxC7WHLn4Y0d
|
||||
-dIxhFiA90BxOj279/mQQT0ECAwEAAaN7MHkwCQYDVR0TBAIwADAsBglghkgBhvhC
|
||||
-AQ0EHxYdT3BlblNTTCBHZW5lcmF0ZWQgQ2VydGlmaWNhdGUwHQYDVR0OBBYEFO0o
|
||||
-wn6rS8jo/lVtZpUxHC1g+QI2MB8GA1UdIwQYMBaAFPbRIinVPSPXXq0MnOZ1j53N
|
||||
-+J1TMA0GCSqGSIb3DQEBCwUAA4IBAQAduMWLckEgZa0nbxVjBiYSjZytyvTbl7SQ
|
||||
-y/81lLsqp6GrHjUtpT/JJLAaWIl1PoEKLE+Y+VH7wKMJ0Aqb56K3w2BAyPRtsmpW
|
||||
-EhdMACQx35xgrrFoVKnmtUoE5pIFhtla3JYwpVjeFJkP5RWJPpvrgOO9g8PqMzVL
|
||||
-Pi/TDWSTZ3+N9T8MJ7w3WszWRxavWmLS2lH4dAZrJK0oaAiYN33tDqsegmEF0Lp1
|
||||
-oKshsJr9K1SGHQ0fwtR3H3ImXq2Knwk2bUS+dMJaPv9cnXXWOHvFOflEbqHRjv9j
|
||||
-28S7xpGSylxgmx3rCt4I7r/adgNlYimL+H/HhnMe9h8tiWn9vr1u
|
||||
+MIIDYTCCAkkCAQAwDQYJKoZIhvcNAQELBQAwgYwxCzAJBgNVBAYTAkpQMRAwDgYD
|
||||
+VQQIDAdTaGltYW5lMRQwEgYDVQQHDAtNYXR6LWUgY2l0eTEXMBUGA1UECgwOUnVi
|
||||
+eSBDb3JlIFRlYW0xFTATBgNVBAMMDFJ1YnkgVGVzdCBDQTElMCMGCSqGSIb3DQEJ
|
||||
+ARYWc2VjdXJpdHlAcnVieS1sYW5nLm9yZzAeFw0yNDAxMDExMTQ3MjNaFw0zMzEy
|
||||
+MjkxMTQ3MjNaMGAxCzAJBgNVBAYTAkpQMRAwDgYDVQQIDAdTaGltYW5lMRcwFQYD
|
||||
+VQQKDA5SdWJ5IENvcmUgVGVhbTESMBAGA1UECwwJUnVieSBUZXN0MRIwEAYDVQQD
|
||||
+DAlsb2NhbGhvc3QwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQCw+egZ
|
||||
+Q6eumJKq3hfKfED4dE/tL4FI5sjqont9ABVI+1GSqyi1bFBgsRjM0THllIdMbKmJ
|
||||
+tWwnKW8J+5OgNN8y6Xxv8JmM/Y5vQt2lis0fqXmG8UTz0VTWdlAXXmhUs6lSADvA
|
||||
+aIe4RVrCsZ97L3ZQTryY7JRVcbB4khUN3Gp0yg+801SXzoFTTa+UGIRLE66jH51a
|
||||
+a5VXu99hnv1OiH8tQrjdi8mH6uG/icq4XuIeNWMF32wHqIOOPvQcWV3M5D2vxJEj
|
||||
+702Ku6k9OQXkAo17qRSEonWW4HtLbtmS8He1JNPc/n3dVUm+fM6NoDXPoLP7j55G
|
||||
+9zKyqGtGAWXAj1MTAgMBAAEwDQYJKoZIhvcNAQELBQADggEBACtGNdj5TEtnJBYp
|
||||
+M+LhBeU3oNteldfycEm993gJp6ghWZFg23oX8fVmyEeJr/3Ca9bAgDqg0t9a0npN
|
||||
+oWKEY6wVKqcHgu3gSvThF5c9KhGbeDDmlTSVVNQmXWX0K2d4lS2cwZHH8mCm2mrY
|
||||
+PDqlEkSc7k4qSiqigdS8i80Yk+lDXWsm8CjsiC93qaRM7DnS0WPQR0c16S95oM6G
|
||||
+VklFKUSDAuFjw9aVWA/nahOucjn0w5fVW6lyIlkBslC1ChlaDgJmvhz+Ol3iMsE0
|
||||
+kAmFNu2KKPVrpMWaBID49QwQTDyhetNLaVVFM88iUdA9JDoVMEuP1mm39JqyzHTu
|
||||
+uBrdP4Q=
|
||||
-----END CERTIFICATE-----
|
||||
diff --git a/test/net/fixtures/server.key b/test/net/fixtures/server.key
|
||||
index 7f2380e71e637..6a83d5bcf4a52 100644
|
||||
--- a/test/net/fixtures/server.key
|
||||
+++ b/test/net/fixtures/server.key
|
||||
@@ -1,28 +1,27 @@
|
||||
------BEGIN PRIVATE KEY-----
|
||||
-MIIEvwIBADANBgkqhkiG9w0BAQEFAASCBKkwggSlAgEAAoIBAQDo2pwBLisQ7EnN
|
||||
-XgcTB5xwnsZ0vBPC4W/Ggv3jSOAspWjHnkLeYFRl5moUV3ow0My1ttnD0t/JJZdU
|
||||
-Z8/2vl7Li+4DxeHi+ef30QxH8LjaM1qtQa3ntaJ7t78w2mD441SivDr9G3TZ3HRC
|
||||
-6Sm+36y0T+sy9Abx4YxLqIv7Keexvx0B7nMP+UDc1RV52cZz0MDdy+TaGUeAxhQE
|
||||
-cv2afI8RgnZJBHnM8lwxIpUTPl1Apk3gowImfVI7u+1loQ/ta7A81N5hFV7T3WgJ
|
||||
-n0pXpcKpbYaSxfSk1LcTO1JjJAXizOOKPNQ1NCsQu1hy5+GNHXSMYRYgPdAcTo9u
|
||||
-/f5kEE9BAgMBAAECggEBAOHkwhc7DLh8IhTDNSW26oMu5OP2WU1jmiYAigDmf+OQ
|
||||
-DBgrZj+JQBci8qINQxL8XLukSZn5hvQCLc7Kbyu1/wyEEUFDxSGGwwzclodr9kho
|
||||
-LX2LDASPZrOSzD2+fPi2wTKmXKuS6Uc44OjQfZkYMNkz9r4Vkm8xGgOD3VipjIYX
|
||||
-QXlhhdqkXZcNABsihCV52GKkDFSVm8jv95YJc5xhoYCy/3a4/qPdF0aT2R7oYUej
|
||||
-hKrxVDskyooe8Zg/JTydZNV5GQEDmW01/K3r6XGT26oPi1AqMU1gtv/jkW56CRQQ
|
||||
-1got8smnqM+AV7Slf9R6DauIPdQJ2S8wsr/o8ISBsOECgYEA9YrqEP2gAYSGFXRt
|
||||
-liw0WI2Ant8BqXS6yvq1jLo/qWhLw/ph4Di73OQ2mpycVTpgfGr2wFPQR1XJ+0Fd
|
||||
-U+Ir/C3Q7FK4VIGHK7B0zNvZr5tEjlFfeRezo2JMVw5YWeSagIFcSwK+KqCTH9qc
|
||||
-pw/Eb8nB/4XNcpTZu7Fg0Wc+ooUCgYEA8sVaicn1Wxkpb45a4qfrA6wOr5xdJ4cC
|
||||
-A5qs7vjX2OdPIQOmoQhdI7bCWFXZzF33wA4YCws6j5wRaySLIJqdms8Gl9QnODy1
|
||||
-ZlA5gwKToBC/jqPmWAXSKb8EH7cHilaxU9OKnQ7CfwlGLHqjMtjrhR7KHlt3CVRs
|
||||
-oRmvsjZVXI0CgYAmPedslAO6mMhFSSfULrhMXmV82OCqYrrA6EEkVNGbcdnzAOkD
|
||||
-gfKIWabDd8bFY10po4Mguy0CHzNhBXIioWQWV5BlbhC1YKMLw+S9DzSdLAKGY9gJ
|
||||
-xQ4+UQ3wtRQ/k+IYR413RUsW2oFvgZ3KSyNeAb9MK6uuv84VdG/OzVSs/QKBgQDn
|
||||
-kap//l2EbObiWyaERunckdVcW0lcN+KK75J/TGwPoOwQsLvTpPe65kxRGGrtDsEQ
|
||||
-uCDk/+v3KkZPLgdrrTAih9FhJ+PVN8tMcb+6IM4SA4fFFr/UPJEwct0LJ3oQ0grJ
|
||||
-y+HPWFHb/Uurh7t99/4H98uR02sjQh1wOeEmm78mzQKBgQDm+LzGH0se6CXQ6cdZ
|
||||
-g1JRZeXkDEsrW3hfAsW62xJQmXcWxBoblP9OamMY+A06rM5og3JbDk5Zm6JsOaA8
|
||||
-wS2gw4ilp46jors4eQey8ux7kB9LzdBoDBBElnsbjLO8oBNZlVcYXg+6BOl/CUi7
|
||||
-2whRF0FEjKA8ehrNhAq+VFfFNw==
|
||||
------END PRIVATE KEY-----
|
||||
+-----BEGIN RSA PRIVATE KEY-----
|
||||
+MIIEowIBAAKCAQEAsPnoGUOnrpiSqt4XynxA+HRP7S+BSObI6qJ7fQAVSPtRkqso
|
||||
+tWxQYLEYzNEx5ZSHTGypibVsJylvCfuToDTfMul8b/CZjP2Ob0LdpYrNH6l5hvFE
|
||||
+89FU1nZQF15oVLOpUgA7wGiHuEVawrGfey92UE68mOyUVXGweJIVDdxqdMoPvNNU
|
||||
+l86BU02vlBiESxOuox+dWmuVV7vfYZ79Toh/LUK43YvJh+rhv4nKuF7iHjVjBd9s
|
||||
+B6iDjj70HFldzOQ9r8SRI+9NirupPTkF5AKNe6kUhKJ1luB7S27ZkvB3tSTT3P59
|
||||
+3VVJvnzOjaA1z6Cz+4+eRvcysqhrRgFlwI9TEwIDAQABAoIBAEEYiyDP29vCzx/+
|
||||
+dS3LqnI5BjUuJhXUnc6AWX/PCgVAO+8A+gZRgvct7PtZb0sM6P9ZcLrweomlGezI
|
||||
+FrL0/6xQaa8bBr/ve/a8155OgcjFo6fZEw3Dz7ra5fbSiPmu4/b/kvrg+Br1l77J
|
||||
+aun6uUAs1f5B9wW+vbR7tzbT/mxaUeDiBzKpe15GwcvbJtdIVMa2YErtRjc1/5B2
|
||||
+BGVXyvlJv0SIlcIEMsHgnAFOp1ZgQ08aDzvilLq8XVMOahAhP1O2A3X8hKdXPyrx
|
||||
+IVWE9bS9ptTo+eF6eNl+d7htpKGEZHUxinoQpWEBTv+iOoHsVunkEJ3vjLP3lyI/
|
||||
+fY0NQ1ECgYEA3RBXAjgvIys2gfU3keImF8e/TprLge1I2vbWmV2j6rZCg5r/AS0u
|
||||
+pii5CvJ5/T5vfJPNgPBy8B/yRDs+6PJO1GmnlhOkG9JAIPkv0RBZvR0PMBtbp6nT
|
||||
+Y3yo1lwamBVBfY6rc0sLTzosZh2aGoLzrHNMQFMGaauORzBFpY5lU50CgYEAzPHl
|
||||
+u5DI6Xgep1vr8QvCUuEesCOgJg8Yh1UqVoY/SmQh6MYAv1I9bLGwrb3WW/7kqIoD
|
||||
+fj0aQV5buVZI2loMomtU9KY5SFIsPV+JuUpy7/+VE01ZQM5FdY8wiYCQiVZYju9X
|
||||
+Wz5LxMNoz+gT7pwlLCsC4N+R8aoBk404aF1gum8CgYAJ7VTq7Zj4TFV7Soa/T1eE
|
||||
+k9y8a+kdoYk3BASpCHJ29M5R2KEA7YV9wrBklHTz8VzSTFTbKHEQ5W5csAhoL5Fo
|
||||
+qoHzFFi3Qx7MHESQb9qHyolHEMNx6QdsHUn7rlEnaTTyrXh3ifQtD6C0yTmFXUIS
|
||||
+CW9wKApOrnyKJ9nI0HcuZQKBgQCMtoV6e9VGX4AEfpuHvAAnMYQFgeBiYTkBKltQ
|
||||
+XwozhH63uMMomUmtSG87Sz1TmrXadjAhy8gsG6I0pWaN7QgBuFnzQ/HOkwTm+qKw
|
||||
+AsrZt4zeXNwsH7QXHEJCFnCmqw9QzEoZTrNtHJHpNboBuVnYcoueZEJrP8OnUG3r
|
||||
+UjmopwKBgAqB2KYYMUqAOvYcBnEfLDmyZv9BTVNHbR2lKkMYqv5LlvDaBxVfilE0
|
||||
+2riO4p6BaAdvzXjKeRrGNEKoHNBpOSfYCOM16NjL8hIZB1CaV3WbT5oY+jp7Mzd5
|
||||
+7d56RZOE+ERK2uz/7JX9VSsM/LbH9pJibd4e8mikDS9ntciqOH/3
|
||||
+-----END RSA PRIVATE KEY-----
|
@ -0,0 +1,39 @@
|
||||
/* Example tapset file.
|
||||
*
|
||||
* You can execute the tapset using following command (please adjust the path
|
||||
* prior running the command, if needed):
|
||||
*
|
||||
* stap /usr/share/doc/ruby-2.0.0.0/ruby-exercise.stp -c "ruby -e \"puts 'test'\""
|
||||
*/
|
||||
|
||||
probe ruby.cmethod.entry {
|
||||
printf("%d -> %s::%s %s:%d\n", tid(), classname, methodname, file, line);
|
||||
}
|
||||
|
||||
probe ruby.cmethod.return {
|
||||
printf("%d <- %s::%s %s:%d\n", tid(), classname, methodname, file, line);
|
||||
}
|
||||
|
||||
probe ruby.method.entry {
|
||||
printf("%d -> %s::%s %s:%d\n", tid(), classname, methodname, file, line);
|
||||
}
|
||||
|
||||
probe ruby.method.return {
|
||||
printf("%d <- %s::%s %s:%d\n", tid(), classname, methodname, file, line);
|
||||
}
|
||||
|
||||
probe ruby.gc.mark.begin { printf("%d gc.mark.begin\n", tid()); }
|
||||
|
||||
probe ruby.gc.mark.end { printf("%d gc.mark.end\n", tid()); }
|
||||
|
||||
probe ruby.gc.sweep.begin { printf("%d gc.sweep.begin\n", tid()); }
|
||||
|
||||
probe ruby.gc.sweep.end { printf("%d gc.sweep.end\n", tid()); }
|
||||
|
||||
probe ruby.object.create{
|
||||
printf("%d obj.create %s %s:%d\n", tid(), classname, file, line);
|
||||
}
|
||||
|
||||
probe ruby.raise {
|
||||
printf("%d raise %s %s:%d\n", tid(), classname, file, line);
|
||||
}
|
@ -0,0 +1,6 @@
|
||||
%__rubygems_requires %{_rpmconfigdir}/rubygems.req
|
||||
%__rubygems_provides %{_rpmconfigdir}/rubygems.prov
|
||||
%__rubygems_conflicts %{_rpmconfigdir}/rubygems.con
|
||||
# In non-gem packages, the %%{gem_name} macro is not available and the macro
|
||||
# stays unexpanded which leads to "invalid regex" error (rhbz#1154067).
|
||||
%__rubygems_path ^%{?gem_name:%{gem_spec}}%{!?gem_name:this_should_never_match_anything}$
|
@ -0,0 +1,52 @@
|
||||
#!/usr/bin/ruby
|
||||
|
||||
require 'rubygems/package'
|
||||
|
||||
module RubyGemsReq
|
||||
module Helpers
|
||||
# Keep only '!=' requirements.
|
||||
def self.conflicts(requirements)
|
||||
conflicts = requirements.select {|r| r.first == '!='}
|
||||
end
|
||||
|
||||
# Converts Gem::Requirement into array of requirements strings compatible
|
||||
# with RPM .spec file.
|
||||
def self.requirement_versions_to_rpm(requirement)
|
||||
self.conflicts(requirement.requirements).map do |op, version|
|
||||
version == Gem::Version.new(0) ? "" : "= #{version}"
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
# Report conflicting gem dependencies including their version.
|
||||
def self.gem_depenencies(specification)
|
||||
specification.runtime_dependencies.each do |dependency|
|
||||
conflict_strings = Helpers::requirement_versions_to_rpm(dependency.requirement).map do |requirement|
|
||||
requirement_string = "rubygem(#{dependency.name}) #{requirement}"
|
||||
end
|
||||
if conflict_strings.length > 0
|
||||
conflict_string = conflict_strings.join(' with ')
|
||||
conflict_string.prepend('(').concat(')') if conflict_strings.length > 1
|
||||
puts conflict_string
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
# Reports all conflicts specified by all provided .gemspec files.
|
||||
def self.conflicts
|
||||
while filename = gets
|
||||
filename.strip!
|
||||
begin
|
||||
specification = Gem::Specification.load filename
|
||||
|
||||
gem_depenencies(specification)
|
||||
rescue => e
|
||||
# Ignore all errors.
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
if __FILE__ == $0
|
||||
RubyGemsReq::conflicts
|
||||
end
|
@ -0,0 +1,36 @@
|
||||
#!/usr/bin/ruby
|
||||
|
||||
require 'rubygems/package'
|
||||
|
||||
module RubyGemsProv
|
||||
module Helpers
|
||||
# If there is some prelease version files, such as rc1 (i.e. non-numeric
|
||||
# field), prepend this field by tilde instead of dot.
|
||||
def self.normalize_prerelease(version)
|
||||
if version.prerelease?
|
||||
prerelease = version.version.sub /^#{version.release}\./, ''
|
||||
"#{version.release}~#{prerelease}"
|
||||
else
|
||||
version.release
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
# Reports all functionality gem provides.
|
||||
def self.provides
|
||||
while filename = gets
|
||||
filename.strip!
|
||||
begin
|
||||
specification = Gem::Specification.load filename
|
||||
|
||||
puts "rubygem(#{specification.name}) = #{Helpers::normalize_prerelease(specification.version)}"
|
||||
rescue => e
|
||||
# Ignore all errors.
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
if __FILE__ == $0
|
||||
RubyGemsProv::provides
|
||||
end
|
@ -0,0 +1,88 @@
|
||||
#!/usr/bin/ruby
|
||||
|
||||
require 'rubygems/package'
|
||||
|
||||
module RubyGemsReq
|
||||
module Helpers
|
||||
# Expands '~>' and '!=' gem requirements.
|
||||
def self.expand_requirement(requirements)
|
||||
requirements.inject([]) do |output, r|
|
||||
output.concat case r.first
|
||||
when '~>'
|
||||
expand_pessimistic_requirement(r)
|
||||
when '!='
|
||||
# If there is only the conflict requirement, we still need to depend
|
||||
# on the specified gem.
|
||||
if requirements.size == 1
|
||||
Gem::Requirement.default.requirements
|
||||
else
|
||||
[]
|
||||
end
|
||||
else
|
||||
[r]
|
||||
end
|
||||
end.reject {|r| r.empty? }
|
||||
end
|
||||
|
||||
# Expands the pessimistic version operator '~>' into equivalent '>=' and
|
||||
# '<' pair.
|
||||
def self.expand_pessimistic_requirement(requirement)
|
||||
next_version = Gem::Version.create(requirement.last).bump
|
||||
return ['>=', requirement.last], ['<', next_version]
|
||||
end
|
||||
|
||||
# Converts Gem::Requirement into array of requirements strings compatible
|
||||
# with RPM .spec file.
|
||||
def self.requirement_versions_to_rpm(requirement)
|
||||
self.expand_requirement(requirement.requirements).map do |op, version|
|
||||
version == Gem::Version.new(0) ? "" : " #{op} #{version}"
|
||||
end
|
||||
end
|
||||
|
||||
# Compose dependency together with its requirements in RPM rich dependency
|
||||
# string.
|
||||
def self.compose_dependency_string(name, requirements)
|
||||
dependency_strings = requirements.map { |requirement| name + requirement }
|
||||
dependency_string = dependency_strings.join(' with ')
|
||||
dependency_string.prepend('(').concat(')') if dependency_strings.length > 1
|
||||
dependency_string
|
||||
end
|
||||
end
|
||||
|
||||
# Report RubyGems dependency, versioned if required.
|
||||
def self.rubygems_dependency(specification)
|
||||
dependency_name = "ruby(rubygems)"
|
||||
requirements = Helpers::requirement_versions_to_rpm(specification.required_rubygems_version)
|
||||
|
||||
puts Helpers::compose_dependency_string(dependency_name, requirements)
|
||||
end
|
||||
|
||||
# Report all gem dependencies including their version.
|
||||
def self.gem_depenencies(specification)
|
||||
specification.runtime_dependencies.each do |dependency|
|
||||
dependency_name = "rubygem(#{dependency.name})"
|
||||
requirements = Helpers::requirement_versions_to_rpm(dependency.requirement)
|
||||
|
||||
puts Helpers::compose_dependency_string(dependency_name, requirements)
|
||||
end
|
||||
end
|
||||
|
||||
# Reports all requirements specified by all provided .gemspec files.
|
||||
def self.requires
|
||||
while filename = gets
|
||||
filename.strip!
|
||||
begin
|
||||
specification = Gem::Specification.load filename
|
||||
|
||||
rubygems_dependency(specification)
|
||||
gem_depenencies(specification)
|
||||
rescue => e
|
||||
# Ignore all errors.
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
if __FILE__ == $0
|
||||
RubyGemsReq::requires
|
||||
end
|
@ -0,0 +1,7 @@
|
||||
if !!$LOADED_FEATURES.detect { |f| f =~ /abrt\.rb/ }
|
||||
exit true
|
||||
else
|
||||
puts 'ERROR: ABRT hook was not loaded.'
|
||||
|
||||
exit false
|
||||
end
|
@ -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
|
@ -0,0 +1,65 @@
|
||||
require 'set'
|
||||
|
||||
LIBRUBY_SO = 'libruby.so'
|
||||
PROBES_D = 'probes.d'
|
||||
|
||||
# These probes are excluded by VM_COLLECT_USAGE_DETAILS ifdef.
|
||||
EXCLUDE_PROBES = Set.new %w(insn insn__operand)
|
||||
|
||||
## Detect SystemTap section headers presence
|
||||
|
||||
stap_headers = [
|
||||
'\.stapsdt\.base',
|
||||
'\.note\.stapsdt'
|
||||
]
|
||||
|
||||
header_regexp = %r{ (#{stap_headers.join('|')}) }
|
||||
|
||||
section_headers = `readelf -S "#{LIBRUBY_SO}"`
|
||||
detected_stap_headers = section_headers.scan(header_regexp).flatten
|
||||
|
||||
# Assume there are both headers until this is proven wrong ;)
|
||||
unless detected_stap_headers.size == 2
|
||||
puts 'ERROR: SystemTap (DTrace) headers were not detected in resulting library.'
|
||||
exit false
|
||||
end
|
||||
|
||||
## Find if every declared probe is propagated to resulting library
|
||||
|
||||
# Colect probes specified in probes.d file.
|
||||
probes_declared = []
|
||||
|
||||
File.open(PROBES_D) do |file|
|
||||
file.each_line do |line|
|
||||
if probe = line[/probe (\S+)\(.*\);/, 1]
|
||||
probes_declared << probe
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
probes_declared = Set.new probes_declared
|
||||
|
||||
unless EXCLUDE_PROBES.subset? probes_declared
|
||||
puts 'ERROR: Change in SystemTap (DTrace) probes definition file detected.'
|
||||
exit false
|
||||
end
|
||||
|
||||
probes_declared -= EXCLUDE_PROBES
|
||||
|
||||
# Detect probes in resulting library.
|
||||
get_probes_detected = %r{
|
||||
^\s*Provider:\s+ruby,\s+Name:\s+(\S+),\s+.*$
|
||||
}
|
||||
|
||||
probes_detected = `eu-readelf -n "#{LIBRUBY_SO}"`
|
||||
|
||||
probes_detected = Set.new probes_detected.scan(get_probes_detected).flatten
|
||||
|
||||
# Both sets must be equal, otherwise something is wrong.
|
||||
unless probes_declared == probes_detected
|
||||
puts 'ERROR: SystemTap (DTrace) probes were not correctly propagated into resulting library.'
|
||||
puts " Undetected probes: #{(probes_declared - probes_detected).sort.join(', ')}\n",
|
||||
" Additional detected probes: #{(probes_detected - probes_declared).sort.join(', ')}"
|
||||
|
||||
exit false
|
||||
end
|
File diff suppressed because it is too large
Load Diff
Loading…
Reference in new issue