Compare commits
31 Commits
Author | SHA1 | Date | |
---|---|---|---|
|
7c1d86b93e | ||
|
b1f489610b | ||
|
a20c473b1b | ||
|
aa2899b823 | ||
|
bef5dc7bd3 | ||
|
556d824d52 | ||
|
198404c010 | ||
|
55c456f0e6 | ||
|
effa5c1162 | ||
|
9c8430ad61 | ||
|
a2e4876d29 | ||
|
88d0fa1e95 | ||
|
6375743887 | ||
|
34d2b6588a | ||
|
44d26c808a | ||
|
c933d86054 | ||
|
d48fbe996c | ||
|
ad3ca0cdd5 | ||
|
bc964685c1 | ||
|
b842da0db3 | ||
|
24c71d8fed | ||
|
60a4adff46 | ||
|
f8554ed4bd | ||
|
0de5456c86 | ||
|
f4336c3927 | ||
|
9ac6f1286a | ||
|
a74e6a62d0 | ||
|
267fbc6cd1 | ||
|
e170316f1b | ||
|
a9b40195d0 | ||
|
a942830f25 |
25
.gitignore
vendored
25
.gitignore
vendored
@ -1,4 +1,21 @@
|
||||
/*/
|
||||
/ruby-2.*.tar.bz2
|
||||
/ruby-2.*.tar.xz
|
||||
/*.rpm
|
||||
ruby-1.8.7-p299.tar.bz2
|
||||
ruby-rev415a3ef9ab82c65a7abc-ext_tk.tar.gz
|
||||
/ruby-1.8.7-p302.tar.bz2
|
||||
/ruby-rev54f344095916f83a2755a177f94e65a1c390a612-ext_tk.tar.gz
|
||||
/ruby-1.8.7-p330.tar.bz2
|
||||
/ruby-revf30eca26639ce538339bc488c7ed1fd397b0c13f-ext_tk.tar.gz
|
||||
/ruby-1.8.7-p334.tar.bz2
|
||||
/ruby-1.8.7-p352.tar.bz2
|
||||
/ruby-revc2dfaa7d40531aef3706bcc16f38178b0c6633ee-ext_tk.tar.gz
|
||||
/ruby-1.8.7-p357.tar.bz2
|
||||
/ruby-1.9.3-p0.tar.gz
|
||||
/ruby-1.9.3-p125.tar.gz
|
||||
/ruby-1.9.3-p194.tar.gz
|
||||
/ruby-1.9.3-p286.tar.gz
|
||||
/ruby-1.9.3-p327.tar.gz
|
||||
/ruby-1.9.3-p362.tar.gz
|
||||
/ruby-1.9.3-p374.tar.gz
|
||||
/ruby-1.9.3-p385.tar.gz
|
||||
/ruby-1.9.3-p392.tar.gz
|
||||
/ruby-1.9.3-p429.tar.gz
|
||||
/ruby-1.9.3-p448.tar.gz
|
||||
|
303
libruby.stp
303
libruby.stp
@ -1,303 +0,0 @@
|
||||
/* 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
|
||||
}
|
22
macros.ruby
22
macros.ruby
@ -1,22 +0,0 @@
|
||||
%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$ \
|
||||
}
|
185
macros.rubygems
185
macros.rubygems
@ -1,185 +0,0 @@
|
||||
# The RubyGems root folder.
|
||||
%gem_dir %{_datadir}/gems
|
||||
%gem_archdir %{_libdir}/gems
|
||||
|
||||
# Common gem locations and files.
|
||||
%gem_instdir %{gem_dir}/gems/%{gem_name}-%{version}%{?prerelease}
|
||||
%gem_extdir_mri %{gem_archdir}/%{name}/%{gem_name}-%{version}%{?prerelease}
|
||||
%gem_libdir %{gem_instdir}/lib
|
||||
%gem_cache %{gem_dir}/cache/%{gem_name}-%{version}%{?prerelease}.gem
|
||||
%gem_spec %{gem_dir}/specifications/%{gem_name}-%{version}%{?prerelease}.gemspec
|
||||
%gem_docdir %{gem_dir}/doc/%{gem_name}-%{version}%{?prerelease}
|
||||
|
||||
|
||||
# %gem_install - Install gem into appropriate directory.
|
||||
#
|
||||
# Usage: %gem_install [options]
|
||||
#
|
||||
# -n <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}' $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}
|
@ -2,41 +2,15 @@ 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'
|
||||
# Returns a string representing that part or the directory tree that is
|
||||
# common to all specified directories.
|
||||
|
||||
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])
|
||||
def common_path(dirs)
|
||||
paths = dirs.collect {|dir| dir.split(File::SEPARATOR)}
|
||||
uncommon_idx = paths.transpose.each_with_index.find {|dirnames, idx| dirnames.uniq.length > 1}.last
|
||||
paths[0][0 ... uncommon_idx].join(File::SEPARATOR)
|
||||
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?
|
||||
private :common_path
|
||||
|
||||
##
|
||||
# Default gems locations allowed on FHS system (/usr, /usr/share).
|
||||
@ -45,8 +19,8 @@ module Gem
|
||||
|
||||
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'])
|
||||
:system => common_path([ConfigMap[:vendorlibdir], ConfigMap[:vendorarchdir]]),
|
||||
:local => common_path([ConfigMap[:sitelibdir], ConfigMap[:sitearchdir]])
|
||||
}
|
||||
end
|
||||
|
||||
@ -55,94 +29,42 @@ module Gem
|
||||
# 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 :operating_system_defaults if method_defined? :operating_system_defaults
|
||||
remove_method :default_dir if method_defined? :default_dir
|
||||
remove_method :default_path if method_defined? :default_path
|
||||
remove_method :default_ext_dir_for if method_defined? :default_ext_dir_for
|
||||
|
||||
##
|
||||
# Regular user installs into user directory, root manages /usr/local.
|
||||
|
||||
def operating_system_defaults
|
||||
unless opt_build_root?
|
||||
options = if Process.uid == 0
|
||||
"--install-dir=#{Gem.default_dirs[:local][:gem_dir]} --bindir #{Gem.default_dirs[:local][:bin_dir]}"
|
||||
else
|
||||
"--user-install --bindir #{File.join [Dir.home, 'bin']}"
|
||||
end
|
||||
|
||||
{"gem" => options}
|
||||
else
|
||||
{}
|
||||
end
|
||||
@default_dirs ||= Hash[default_locations.collect do |destination, path|
|
||||
[destination, {
|
||||
:bin_dir => File.join(path, ConfigMap[:bindir].split(File::SEPARATOR).last),
|
||||
:gem_dir => File.join(path, ConfigMap[:datadir].split(File::SEPARATOR).last, 'gems'),
|
||||
:ext_dir => File.join(path, ConfigMap[:libdir].split(File::SEPARATOR).last, 'gems')
|
||||
}]
|
||||
end]
|
||||
end
|
||||
|
||||
##
|
||||
# RubyGems default overrides.
|
||||
|
||||
def default_dir
|
||||
Gem.default_dirs[:system][:gem_dir]
|
||||
if Process.uid == 0
|
||||
Gem.default_dirs[:local][:gem_dir]
|
||||
else
|
||||
Gem.user_dir
|
||||
end
|
||||
end
|
||||
|
||||
def default_path
|
||||
path = default_dirs.collect {|location, paths| paths[:gem_dir]}
|
||||
path.unshift Gem.user_dir if File.exist? Gem.user_home
|
||||
path
|
||||
end
|
||||
|
||||
def default_bindir
|
||||
if Process.uid == 0
|
||||
Gem.default_dirs[:local][:bin_dir]
|
||||
else
|
||||
File.join [Dir.home, 'bin']
|
||||
end
|
||||
end
|
||||
|
||||
def default_ext_dir_for base_dir
|
||||
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
|
||||
dirs = Gem.default_dirs.detect {|location, paths| paths[:gem_dir] == base_dir}
|
||||
dirs && File.join(dirs.last[:ext_dir], 'exts')
|
||||
end
|
||||
end
|
||||
end
|
||||
|
188
ruby-1.9.3-added-site-and-vendor-arch-flags.patch
Normal file
188
ruby-1.9.3-added-site-and-vendor-arch-flags.patch
Normal file
@ -0,0 +1,188 @@
|
||||
From b0a875862d14244ca41cd1e1e9090f87757aaeb9 Mon Sep 17 00:00:00 2001
|
||||
From: =?UTF-8?q?V=C3=ADt=20Ondruch?= <vondruch@redhat.com>
|
||||
Date: Mon, 5 Sep 2011 13:10:47 +0200
|
||||
Subject: [PATCH] Added configuration flags for site and vendor architecture
|
||||
specific directories.
|
||||
|
||||
---
|
||||
Makefile.in | 3 +++
|
||||
configure.in | 40 ++++++++++++++++++++++++++++++++++++++++
|
||||
tool/mkconfig.rb | 8 ++++++--
|
||||
version.c | 4 ++++
|
||||
4 files changed, 53 insertions(+), 2 deletions(-)
|
||||
|
||||
diff --git a/Makefile.in b/Makefile.in
|
||||
index bcdaf5f..f57e4c4 100644
|
||||
--- a/Makefile.in
|
||||
+++ b/Makefile.in
|
||||
@@ -34,6 +34,9 @@ datadir = @datadir@
|
||||
archdir = @archdir@
|
||||
sitearch = @sitearch@
|
||||
sitedir = @sitedir@
|
||||
+sitearchdir= @sitearchdir@
|
||||
+vendordir = @vendordir@
|
||||
+vendorarchdir = @vendorarchdir@
|
||||
ruby_version = @ruby_version@
|
||||
|
||||
TESTUI = console
|
||||
diff --git a/configure.in b/configure.in
|
||||
index 83e5d76..31532bd 100644
|
||||
--- a/configure.in
|
||||
+++ b/configure.in
|
||||
@@ -2811,6 +2811,15 @@ until SITE_DIR=`eval echo \\"${dir}\\"`; test "x${dir}" = "x${SITE_DIR}"; do
|
||||
dir="${SITE_DIR}"
|
||||
done
|
||||
|
||||
+AC_ARG_WITH(sitearchdir,
|
||||
+ AS_HELP_STRING([--with-sitearchdir=DIR], [site libraries in DIR [[RUBY_LIB_PREFIX/site_ruby]]]),
|
||||
+ [sitearchdir=$withval],
|
||||
+ [sitearchdir='${rubylibprefix}/site_ruby/${arch}'])
|
||||
+dir="${sitearchdir}"
|
||||
+until SITEARCH_DIR=`eval echo \\"${dir}\\"`; test "x${dir}" = "x${SITEARCH_DIR}"; do
|
||||
+ dir="${SITEARCH_DIR}"
|
||||
+done
|
||||
+
|
||||
AC_ARG_WITH(vendordir,
|
||||
AS_HELP_STRING([--with-vendordir=DIR], [vendor libraries in DIR [[RUBY_LIB_PREFIX/vendor_ruby]]]),
|
||||
[vendordir=$withval],
|
||||
@@ -2820,19 +2829,32 @@ until VENDOR_DIR=`eval echo \\"${dir}\\"`; test "x${dir}" = "x${VENDOR_DIR}"; do
|
||||
dir="${VENDOR_DIR}"
|
||||
done
|
||||
|
||||
+AC_ARG_WITH(vendorarchdir,
|
||||
+ AS_HELP_STRING([--with-vendorarchdir=DIR], [vendor libraries in DIR [[RUBY_LIB_PREFIX/vendor_ruby]]]),
|
||||
+ [vendorarchdir=$withval],
|
||||
+ [vendorarchdir='${rubylibprefix}/vendor_ruby/${arch}'])
|
||||
+dir="${vendorarchdir}"
|
||||
+until VENDORARCH_DIR=`eval echo \\"${dir}\\"`; test "x${dir}" = "x${VENDORARCH_DIR}"; do
|
||||
+ dir="${VENDORARCH_DIR}"
|
||||
+done
|
||||
+
|
||||
if test "${LOAD_RELATIVE+set}"; then
|
||||
AC_DEFINE_UNQUOTED(LOAD_RELATIVE, $LOAD_RELATIVE)
|
||||
RUBY_EXEC_PREFIX=""
|
||||
RUBY_LIB_PREFIX="`eval echo "$RUBY_LIB_PREFIX" | sed 's|^NONE/|/|;s|^'"$prefix"'/|/|'`"
|
||||
RUBY_ARCH_LIB_PATH="`eval echo "$ARCH_DIR" | sed 's|^NONE/|/|;s|^'"$prefix"'/|/|'`"
|
||||
RUBY_SITE_LIB_PATH="`eval echo "$SITE_DIR" | sed 's|^NONE/|/|;s|^'"$prefix"'/|/|'`"
|
||||
+ RUBY_SITE_ARCHLIB_PATH="`eval echo "$SITEARCH_DIR" | sed 's|^NONE/|/|;s|^'"$prefix"'/|/|'`"
|
||||
RUBY_VENDOR_LIB_PATH="`eval echo "$VENDOR_DIR" | sed 's|^NONE/|/|;s|^'"$prefix"'/|/|'`"
|
||||
+ RUBY_VENDOR_ARCHLIB_PATH="`eval echo "$VENDORARCH_DIR" | sed 's|^NONE/|/|;s|^'"$prefix"'/|/|'`"
|
||||
else
|
||||
RUBY_EXEC_PREFIX="`eval echo \\"$exec_prefix/\\" | sed 's|^NONE/|'"$prefix"'/|;s|/$||'`"
|
||||
RUBY_LIB_PREFIX="`eval echo \\"$RUBY_LIB_PREFIX\\" | sed 's|^NONE/|'"$prefix"'/|'`"
|
||||
RUBY_ARCH_LIB_PATH="`eval echo \\"$ARCH_DIR\\" | sed 's|^NONE/|'"$prefix"'/|'`"
|
||||
RUBY_SITE_LIB_PATH="`eval echo \\"$SITE_DIR\\" | sed 's|^NONE/|'"$prefix"'/|'`"
|
||||
+ RUBY_SITE_ARCHLIB_PATH="`eval echo \\"$SITEARCH_DIR\\" | sed 's|^NONE/|'"$prefix"'/|'`"
|
||||
RUBY_VENDOR_LIB_PATH="`eval echo \\"$VENDOR_DIR\\" | sed 's|^NONE/|'"$prefix"'/|'`"
|
||||
+ RUBY_VENDOR_ARCHLIB_PATH="`eval echo \\"$VENDORARCH_DIR\\" | sed 's|^NONE/|'"$prefix"'/|'`"
|
||||
fi
|
||||
|
||||
pat=`echo "$RUBY_LIB_PREFIX/" | tr -c '\012' .`'\(.*\)'
|
||||
@@ -2850,6 +2872,13 @@ AS_CASE(["$RUBY_SITE_LIB_PATH"],
|
||||
[
|
||||
RUBY_SITE_LIB_PATH="\"${RUBY_SITE_LIB_PATH}\""
|
||||
])
|
||||
+AS_CASE(["$RUBY_SITE_ARCHLIB_PATH"],
|
||||
+ ["$RUBY_LIB_PREFIX/"*], [
|
||||
+ RUBY_SITE_ARCHLIB_PATH='RUBY_LIB_PREFIX"/'"`expr \"$RUBY_SITE_ARCHLIB_PATH\" : \"$pat\"`"'"'
|
||||
+ ],
|
||||
+ [
|
||||
+ RUBY_SITE_ARCHLIB_PATH="\"${RUBY_SITE_ARCHLIB_PATH}\""
|
||||
+ ])
|
||||
AS_CASE(["$RUBY_VENDOR_LIB_PATH"],
|
||||
["$RUBY_LIB_PREFIX/"*], [
|
||||
RUBY_VENDOR_LIB_PATH='RUBY_LIB_PREFIX"/'"`expr \"$RUBY_VENDOR_LIB_PATH\" : \"$pat\"`"'"'
|
||||
@@ -2857,6 +2886,13 @@ AS_CASE(["$RUBY_VENDOR_LIB_PATH"],
|
||||
[
|
||||
RUBY_VENDOR_LIB_PATH="\"${RUBY_VENDOR_LIB_PATH}\""
|
||||
])
|
||||
+AS_CASE(["$RUBY_VENDOR_ARCHLIB_PATH"],
|
||||
+ ["$RUBY_LIB_PREFIX/"*], [
|
||||
+ RUBY_VENDOR_ARCHLIB_PATH='RUBY_LIB_PREFIX"/'"`expr \"$RUBY_VENDOR_ARCHLIB_PATH\" : \"$pat\"`"'"'
|
||||
+ ],
|
||||
+ [
|
||||
+ RUBY_VENDOR_ARCHLIB_PATH="\"${RUBY_VENDOR_ARCHLIB_PATH}\""
|
||||
+ ])
|
||||
pat=`echo "$RUBY_EXEC_PREFIX/" | tr -c '\012' .`'\(.*\)'
|
||||
AS_CASE(["$RUBY_LIB_PREFIX"],
|
||||
["$RUBY_EXEC_PREFIX/"*], [
|
||||
@@ -2878,19 +2914,23 @@ if test "x$SITE_DIR" = xno; then
|
||||
AC_DEFINE(NO_RUBY_SITE_LIB)
|
||||
else
|
||||
AC_DEFINE_UNQUOTED(RUBY_SITE_LIB, ${RUBY_SITE_LIB_PATH})
|
||||
+ AC_DEFINE_UNQUOTED(RUBY_SITE_ARCHLIB, ${RUBY_SITE_ARCHLIB_PATH})
|
||||
fi
|
||||
if test "x$VENDOR_DIR" = xno; then
|
||||
AC_DEFINE(NO_RUBY_VENDOR_LIB)
|
||||
else
|
||||
AC_DEFINE_UNQUOTED(RUBY_VENDOR_LIB, ${RUBY_VENDOR_LIB_PATH})
|
||||
+ AC_DEFINE_UNQUOTED(RUBY_VENDOR_ARCHLIB, ${RUBY_VENDOR_ARCHLIB_PATH})
|
||||
fi
|
||||
|
||||
AC_SUBST(arch)dnl
|
||||
AC_SUBST(sitearch)dnl
|
||||
AC_SUBST(ruby_version)dnl
|
||||
AC_SUBST(archdir)dnl
|
||||
AC_SUBST(sitedir)dnl
|
||||
+AC_SUBST(sitearchdir)dnl
|
||||
AC_SUBST(vendordir)dnl
|
||||
+AC_SUBST(vendorarchdir)dnl
|
||||
|
||||
configure_args=$ac_configure_args
|
||||
AC_SUBST(configure_args)dnl
|
||||
diff --git a/tool/mkconfig.rb b/tool/mkconfig.rb
|
||||
index b707c4b..6230720 100755
|
||||
--- a/tool/mkconfig.rb
|
||||
+++ b/tool/mkconfig.rb
|
||||
@@ -44,6 +44,8 @@ v_others = []
|
||||
continued_line = nil
|
||||
path_version = "/$(ruby_version)"
|
||||
archdir_override = "$(vendorlibdir)/$(sitearch)"
|
||||
+sitearchdir_override = "$(sitelibdir)/$(sitearch)"
|
||||
+vendorarchdir_override = "$(vendorlibdir)/$(sitearch)"
|
||||
File.foreach "config.status" do |line|
|
||||
next if /^#/ =~ line
|
||||
name = nil
|
||||
@@ -79,6 +81,8 @@ File.foreach "config.status" do |line|
|
||||
when /^RUBY_SO_NAME$/; next if $so_name
|
||||
when /^arch$/; if val.empty? then val = arch else arch = val end
|
||||
when /^archdir$/; archdir_override = val; next
|
||||
+ when /^sitearchdir$/; sitearchdir_override = val; next
|
||||
+ when /^vendorarchdir$/; vendorarchdir_override = val; next
|
||||
when /^sitearch/; val = '$(arch)' if val.empty?
|
||||
end
|
||||
case val
|
||||
@@ -213,11 +217,11 @@ print <<EOS
|
||||
EOS
|
||||
print <<EOS unless v_disabled["sitedir"]
|
||||
CONFIG["sitelibdir"] = "$(sitedir)#{path_version}"
|
||||
- CONFIG["sitearchdir"] = "$(sitelibdir)/$(sitearch)"
|
||||
+ CONFIG["sitearchdir"] = "#{sitearchdir_override}"
|
||||
EOS
|
||||
print <<EOS unless v_disabled["vendordir"]
|
||||
CONFIG["vendorlibdir"] = "$(vendordir)#{path_version}"
|
||||
- CONFIG["vendorarchdir"] = "$(vendorlibdir)/$(sitearch)"
|
||||
+ CONFIG["vendorarchdir"] = "#{vendorarchdir_override}"
|
||||
EOS
|
||||
print <<EOS
|
||||
CONFIG["topdir"] = File.dirname(__FILE__)
|
||||
diff --git a/version.c b/version.c
|
||||
index 59d4e5e..2558aa0 100644
|
||||
--- a/version.c
|
||||
+++ b/version.c
|
||||
@@ -50,8 +50,12 @@
|
||||
#ifndef RUBY_ARCHLIB
|
||||
#define RUBY_ARCHLIB RUBY_LIB "/"RUBY_ARCH
|
||||
#endif
|
||||
+#ifndef RUBY_SITE_ARCHLIB
|
||||
#define RUBY_SITE_ARCHLIB RUBY_SITE_LIB2 "/"RUBY_SITEARCH
|
||||
+#endif
|
||||
+#ifndef RUBY_VENDOR_ARCHLIB
|
||||
#define RUBY_VENDOR_ARCHLIB RUBY_VENDOR_LIB2 "/"RUBY_SITEARCH
|
||||
+#endif
|
||||
#ifdef RUBY_THINARCH
|
||||
#define RUBY_THIN_ARCHLIB RUBY_LIB "/"RUBY_THINARCH
|
||||
#define RUBY_SITE_THIN_ARCHLIB RUBY_SITE_LIB2 "/"RUBY_THINARCH
|
||||
--
|
||||
1.7.6.1
|
||||
|
11
ruby-1.9.3-always-use-i386.patch
Normal file
11
ruby-1.9.3-always-use-i386.patch
Normal file
@ -0,0 +1,11 @@
|
||||
--- a/configure.in.orig 2011-10-18 08:56:21.587594685 +0200
|
||||
+++ b/configure.in 2011-10-18 08:56:59.751593321 +0200
|
||||
@@ -2935,6 +2935,8 @@
|
||||
configure_args=$ac_configure_args
|
||||
AC_SUBST(configure_args)dnl
|
||||
|
||||
+target_cpu=`echo $target_cpu | sed s/i.86/i386/`
|
||||
+
|
||||
if test "${universal_binary-no}" = yes ; then
|
||||
arch="universal-${target_os}"
|
||||
AC_CACHE_CHECK(whether __ARCHITECTURE__ is available, rb_cv_architecture_available,
|
132
ruby-1.9.3-arch-specific-dir.patch
Normal file
132
ruby-1.9.3-arch-specific-dir.patch
Normal file
@ -0,0 +1,132 @@
|
||||
From df4253a5b79b63f16f215f2c19f1b9666c4ca01e Mon Sep 17 00:00:00 2001
|
||||
From: =?UTF-8?q?V=C3=ADt=20Ondruch?= <vondruch@redhat.com>
|
||||
Date: Thu, 8 Sep 2011 15:30:05 +0200
|
||||
Subject: [PATCH] Add configuration arch specific dir flag.
|
||||
|
||||
---
|
||||
Makefile.in | 1 +
|
||||
configure.in | 20 ++++++++++++++++++++
|
||||
tool/mkconfig.rb | 4 +++-
|
||||
version.c | 2 ++
|
||||
4 files changed, 26 insertions(+), 1 deletions(-)
|
||||
|
||||
diff --git a/Makefile.in b/Makefile.in
|
||||
index bcdaf5f..d61b2ee 100644
|
||||
--- a/Makefile.in
|
||||
+++ b/Makefile.in
|
||||
@@ -31,6 +31,7 @@ libexecdir = @libexecdir@
|
||||
datarootdir = @datarootdir@
|
||||
datadir = @datadir@
|
||||
arch = @arch@
|
||||
+archdir = @archdir@
|
||||
sitearch = @sitearch@
|
||||
sitedir = @sitedir@
|
||||
ruby_version = @ruby_version@
|
||||
diff --git a/configure.in b/configure.in
|
||||
index 83e5d76..e6dc38c 100644
|
||||
--- a/configure.in
|
||||
+++ b/configure.in
|
||||
@@ -2793,6 +2793,15 @@ else
|
||||
RUBY_LIB_VERSION="\"${ruby_version}\""
|
||||
fi
|
||||
|
||||
+AC_ARG_WITH(archdir,
|
||||
+ AS_HELP_STRING([--with-archdir=DIR], [architecture specific ruby libraries [[LIBDIR/RUBY_BASE_NAME/ARCH]]]),
|
||||
+ [archdir=$withval],
|
||||
+ [archdir='${rubylibprefix}/${arch}'])
|
||||
+dir="${archdir}"
|
||||
+until ARCH_DIR=`eval echo \\"${dir}\\"`; test "x${dir}" = "x${ARCH_DIR}"; do
|
||||
+ dir="${ARCH_DIR}"
|
||||
+done
|
||||
+
|
||||
AC_ARG_WITH(sitedir,
|
||||
AS_HELP_STRING([--with-sitedir=DIR], [site libraries in DIR [[RUBY_LIB_PREFIX/site_ruby]]]),
|
||||
[sitedir=$withval],
|
||||
@@ -2815,16 +2824,25 @@ if test "${LOAD_RELATIVE+set}"; then
|
||||
AC_DEFINE_UNQUOTED(LOAD_RELATIVE, $LOAD_RELATIVE)
|
||||
RUBY_EXEC_PREFIX=""
|
||||
RUBY_LIB_PREFIX="`eval echo "$RUBY_LIB_PREFIX" | sed 's|^NONE/|/|;s|^'"$prefix"'/|/|'`"
|
||||
+ RUBY_ARCH_LIB_PATH="`eval echo "$ARCH_DIR" | sed 's|^NONE/|/|;s|^'"$prefix"'/|/|'`"
|
||||
RUBY_SITE_LIB_PATH="`eval echo "$SITE_DIR" | sed 's|^NONE/|/|;s|^'"$prefix"'/|/|'`"
|
||||
RUBY_VENDOR_LIB_PATH="`eval echo "$VENDOR_DIR" | sed 's|^NONE/|/|;s|^'"$prefix"'/|/|'`"
|
||||
else
|
||||
RUBY_EXEC_PREFIX="`eval echo \\"$exec_prefix/\\" | sed 's|^NONE/|'"$prefix"'/|;s|/$||'`"
|
||||
RUBY_LIB_PREFIX="`eval echo \\"$RUBY_LIB_PREFIX\\" | sed 's|^NONE/|'"$prefix"'/|'`"
|
||||
+ RUBY_ARCH_LIB_PATH="`eval echo \\"$ARCH_DIR\\" | sed 's|^NONE/|'"$prefix"'/|'`"
|
||||
RUBY_SITE_LIB_PATH="`eval echo \\"$SITE_DIR\\" | sed 's|^NONE/|'"$prefix"'/|'`"
|
||||
RUBY_VENDOR_LIB_PATH="`eval echo \\"$VENDOR_DIR\\" | sed 's|^NONE/|'"$prefix"'/|'`"
|
||||
fi
|
||||
|
||||
pat=`echo "$RUBY_LIB_PREFIX/" | tr -c '\012' .`'\(.*\)'
|
||||
+AS_CASE(["$RUBY_ARCH_LIB_PATH"],
|
||||
+ ["$RUBY_LIB_PREFIX/"*], [
|
||||
+ RUBY_ARCH_LIB_PATH='RUBY_LIB_PREFIX"/'"`expr \"$RUBY_ARCH_LIB_PATH\" : \"$pat\"`"'"'
|
||||
+ ],
|
||||
+ [
|
||||
+ RUBY_ARCH_LIB_PATH="\"${RUBY_ARCH_LIB_PATH}\""
|
||||
+ ])
|
||||
AS_CASE(["$RUBY_SITE_LIB_PATH"],
|
||||
["$RUBY_LIB_PREFIX/"*], [
|
||||
RUBY_SITE_LIB_PATH='RUBY_LIB_PREFIX"/'"`expr \"$RUBY_SITE_LIB_PATH\" : \"$pat\"`"'"'
|
||||
@@ -2855,6 +2873,7 @@ else
|
||||
fi
|
||||
AC_DEFINE_UNQUOTED(RUBY_EXEC_PREFIX, "${RUBY_EXEC_PREFIX}")
|
||||
AC_DEFINE_UNQUOTED(RUBY_LIB_PREFIX, ${RUBY_LIB_PREFIX})
|
||||
+AC_DEFINE_UNQUOTED(RUBY_ARCHLIB, ${RUBY_ARCH_LIB_PATH})
|
||||
if test "x$SITE_DIR" = xno; then
|
||||
AC_DEFINE(NO_RUBY_SITE_LIB)
|
||||
else
|
||||
@@ -2869,6 +2888,7 @@ fi
|
||||
AC_SUBST(arch)dnl
|
||||
AC_SUBST(sitearch)dnl
|
||||
AC_SUBST(ruby_version)dnl
|
||||
+AC_SUBST(archdir)dnl
|
||||
AC_SUBST(sitedir)dnl
|
||||
AC_SUBST(vendordir)dnl
|
||||
|
||||
diff --git a/tool/mkconfig.rb b/tool/mkconfig.rb
|
||||
index b707c4b..9780ef2 100755
|
||||
--- a/tool/mkconfig.rb
|
||||
+++ b/tool/mkconfig.rb
|
||||
@@ -43,6 +43,7 @@ v_others = []
|
||||
continued_name = nil
|
||||
continued_line = nil
|
||||
path_version = "/$(ruby_version)"
|
||||
+archdir_override = "$(vendorlibdir)/$(sitearch)"
|
||||
File.foreach "config.status" do |line|
|
||||
next if /^#/ =~ line
|
||||
name = nil
|
||||
@@ -77,6 +78,7 @@ File.foreach "config.status" do |line|
|
||||
when /^RUBY_INSTALL_NAME$/; next if $install_name
|
||||
when /^RUBY_SO_NAME$/; next if $so_name
|
||||
when /^arch$/; if val.empty? then val = arch else arch = val end
|
||||
+ when /^archdir$/; archdir_override = val; next
|
||||
when /^sitearch/; val = '$(arch)' if val.empty?
|
||||
end
|
||||
case val
|
||||
@@ -207,7 +209,7 @@ print(*v_fast)
|
||||
print(*v_others)
|
||||
print <<EOS
|
||||
CONFIG["rubylibdir"] = "$(rubylibprefix)#{path_version}"
|
||||
- CONFIG["archdir"] = "$(rubylibdir)/$(arch)"
|
||||
+ CONFIG["archdir"] = "#{archdir_override}"
|
||||
EOS
|
||||
print <<EOS unless v_disabled["sitedir"]
|
||||
CONFIG["sitelibdir"] = "$(sitedir)#{path_version}"
|
||||
diff --git a/version.c b/version.c
|
||||
index 59d4e5e..915a0a2 100644
|
||||
--- a/version.c
|
||||
+++ b/version.c
|
||||
@@ -47,7 +47,9 @@
|
||||
#define RUBY_SITE_LIB2 RUBY_SITE_LIB "/"RUBY_LIB_VERSION
|
||||
#define RUBY_VENDOR_LIB2 RUBY_VENDOR_LIB "/"RUBY_LIB_VERSION
|
||||
#endif
|
||||
+#ifndef RUBY_ARCHLIB
|
||||
#define RUBY_ARCHLIB RUBY_LIB "/"RUBY_ARCH
|
||||
+#endif
|
||||
#define RUBY_SITE_ARCHLIB RUBY_SITE_LIB2 "/"RUBY_SITEARCH
|
||||
#define RUBY_VENDOR_ARCHLIB RUBY_VENDOR_LIB2 "/"RUBY_SITEARCH
|
||||
#ifdef RUBY_THINARCH
|
||||
--
|
||||
1.7.6.1
|
||||
|
31
ruby-1.9.3-bignum-test-fix.patch
Normal file
31
ruby-1.9.3-bignum-test-fix.patch
Normal file
@ -0,0 +1,31 @@
|
||||
--- ruby-1.9.3-p0/test/ruby/test_bignum.rb.orig 2011-11-10 09:52:59.101925465 +0100
|
||||
+++ ruby-1.9.3-p0/test/ruby/test_bignum.rb 2011-11-10 09:54:14.580798826 +0100
|
||||
@@ -378,7 +378,7 @@
|
||||
assert_equal(true, (2**32).even?)
|
||||
end
|
||||
|
||||
- def interrupt
|
||||
+ def assert_interrupt
|
||||
time = Time.now
|
||||
start_flag = false
|
||||
end_flag = false
|
||||
@@ -387,14 +387,16 @@
|
||||
yield
|
||||
end_flag = true
|
||||
end
|
||||
- sleep 1
|
||||
+ Thread.pass until start_flag
|
||||
thread.raise
|
||||
thread.join rescue nil
|
||||
- start_flag && !end_flag && Time.now - time < 10
|
||||
+ time = Time.now - time
|
||||
+ assert_equal([true, false], [start_flag, end_flag])
|
||||
+ assert_operator(time, :<, 10)
|
||||
end
|
||||
|
||||
def test_interrupt
|
||||
- assert(interrupt { (65536 ** 65536).to_s })
|
||||
+ assert_interrupt {(65536 ** 65536).to_s}
|
||||
end
|
||||
|
||||
def test_too_big_to_s
|
97
ruby-1.9.3-custom-rubygems-location.patch
Normal file
97
ruby-1.9.3-custom-rubygems-location.patch
Normal file
@ -0,0 +1,97 @@
|
||||
From 279a693ce4ef3a887ce8d4fa59e0f2616a14d91a 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.in | 8 ++++++++
|
||||
tool/mkconfig.rb | 1 +
|
||||
tool/rbinstall.rb | 9 +++++++++
|
||||
version.c | 4 ++++
|
||||
4 files changed, 22 insertions(+), 0 deletions(-)
|
||||
|
||||
diff --git a/configure.in b/configure.in
|
||||
index b1bc951..91c5d0d 100644
|
||||
--- a/configure.in
|
||||
+++ b/configure.in
|
||||
@@ -2838,6 +2838,13 @@ until VENDOR_DIR=`eval echo \\"${dir}\\"`; test "x${dir}" = "x${VENDOR_DIR}"; do
|
||||
dir="${VENDORARCH_DIR}"
|
||||
done
|
||||
|
||||
+AC_ARG_WITH(rubygemsdir,
|
||||
+ AS_HELP_STRING([--with-rubygemsdir=DIR], [custom rubygems directory]),
|
||||
+ [rubygemsdir=$withval])
|
||||
+if test "$rubygemsdir" != ""; then
|
||||
+ AC_DEFINE_UNQUOTED(RUBYGEMS_DIR,"$rubygemsdir")
|
||||
+fi
|
||||
+
|
||||
if test "${LOAD_RELATIVE+set}"; then
|
||||
AC_DEFINE_UNQUOTED(LOAD_RELATIVE, $LOAD_RELATIVE)
|
||||
RUBY_EXEC_PREFIX=""
|
||||
@@ -2931,6 +2938,7 @@ AC_SUBST(sitearch)dnl
|
||||
AC_SUBST(sitearchdir)dnl
|
||||
AC_SUBST(vendordir)dnl
|
||||
AC_SUBST(vendorarchdir)dnl
|
||||
+AC_SUBST(rubygemsdir)dnl
|
||||
|
||||
configure_args=$ac_configure_args
|
||||
AC_SUBST(configure_args)dnl
|
||||
diff --git a/tool/mkconfig.rb b/tool/mkconfig.rb
|
||||
index b707c4b..9fecbfb 100755
|
||||
--- a/tool/mkconfig.rb
|
||||
+++ b/tool/mkconfig.rb
|
||||
@@ -84,6 +84,7 @@ File.foreach "config.status" do |line|
|
||||
when /^sitearchdir$/; sitearchdir_override = val; next
|
||||
when /^vendorarchdir$/; vendorarchdir_override = val; next
|
||||
when /^sitearch/; val = '$(arch)' if val.empty?
|
||||
+ when /^rubygemsdir/; next if val.empty?
|
||||
end
|
||||
case val
|
||||
when /^\$\(ac_\w+\)$/; next
|
||||
diff --git a/tool/rbinstall.rb b/tool/rbinstall.rb
|
||||
index 6bfc73e..31dc446 100755
|
||||
--- a/tool/rbinstall.rb
|
||||
+++ b/tool/rbinstall.rb
|
||||
@@ -300,6 +300,7 @@ sitelibdir = CONFIG["sitelibdir"]
|
||||
sitearchlibdir = CONFIG["sitearchdir"]
|
||||
vendorlibdir = CONFIG["vendorlibdir"]
|
||||
vendorarchlibdir = CONFIG["vendorarchdir"]
|
||||
+rubygemsdir = CONFIG["rubygemsdir"]
|
||||
mandir = CONFIG["mandir"]
|
||||
capidir = CONFIG["docdir"]
|
||||
configure_args = Shellwords.shellwords(CONFIG["configure_args"])
|
||||
@@ -487,7 +488,15 @@ end
|
||||
install?(:local, :comm, :lib) do
|
||||
prepare "library scripts", rubylibdir
|
||||
noinst = %w[README* *.txt *.rdoc]
|
||||
+ noinst += %w[*ubygems.rb rubygems/ datadir.rb] if rubygemsdir
|
||||
install_recursive(File.join(srcdir, "lib"), rubylibdir, :no_install => noinst, :mode => $data_mode)
|
||||
+ if rubygemsdir
|
||||
+ noinst = %w[obsolete.rb]
|
||||
+ install_recursive(File.join(srcdir, "lib", "rubygems"), File.join(rubygemsdir, "rubygems"), :mode => $data_mode)
|
||||
+ install_recursive(File.join(srcdir, "lib", "rbconfig"), File.join(rubygemsdir, "rbconfig"), :no_install => noinst, :mode => $data_mode)
|
||||
+ install(File.join(srcdir, "lib", "ubygems.rb"), File.join(rubygemsdir, "ubygems.rb"), :mode => $data_mode)
|
||||
+ install(File.join(srcdir, "lib", "rubygems.rb"), File.join(rubygemsdir, "rubygems.rb"), :mode => $data_mode)
|
||||
+ end
|
||||
end
|
||||
|
||||
install?(:local, :arch, :lib) do
|
||||
diff --git a/version.c b/version.c
|
||||
index 59d4e5e..12ba7e9 100644
|
||||
--- a/version.c
|
||||
+++ b/version.c
|
||||
@@ -103,6 +103,10 @@ const char ruby_initial_load_paths[] =
|
||||
#endif
|
||||
#endif
|
||||
|
||||
+#ifdef RUBYGEMS_DIR
|
||||
+ RUBYGEMS_DIR "\0"
|
||||
+#endif
|
||||
+
|
||||
RUBY_LIB "\0"
|
||||
#ifdef RUBY_THIN_ARCHLIB
|
||||
RUBY_THIN_ARCHLIB "\0"
|
||||
--
|
||||
1.7.7
|
||||
|
149
ruby-1.9.3-disable-versioned-paths.patch
Normal file
149
ruby-1.9.3-disable-versioned-paths.patch
Normal file
@ -0,0 +1,149 @@
|
||||
From fa1a50ad10814f724b8713865dc222724cb955ab Mon Sep 17 00:00:00 2001
|
||||
From: =?UTF-8?q?V=C3=ADt=20Ondruch?= <vondruch@redhat.com>
|
||||
Date: Thu, 25 Aug 2011 14:33:51 +0200
|
||||
Subject: [PATCH] Allow to disable versioned paths.
|
||||
|
||||
---
|
||||
configure.in | 11 +++++++++++
|
||||
tool/mkconfig.rb | 9 ++++++---
|
||||
version.c | 10 ++++++++++
|
||||
3 files changed, 27 insertions(+), 3 deletions(-)
|
||||
|
||||
diff --git a/configure.in b/configure.in
|
||||
index e742e74..86cb68f 100644
|
||||
--- a/configure.in
|
||||
+++ b/configure.in
|
||||
@@ -2963,6 +2963,17 @@ else
|
||||
fi
|
||||
AC_SUBST(USE_RUBYGEMS)
|
||||
|
||||
+AC_ARG_ENABLE(versioned-paths,
|
||||
+ AS_HELP_STRING([--disable-versioned-paths], [disable paths with version number]),
|
||||
+ [enable_versioned_paths="$enableval"], [enable_versioned_paths=yes])
|
||||
+if test x"$enable_versioned_paths" = xno; then
|
||||
+ AC_DEFINE(DISABLE_VERSIONED_PATHS, 1)
|
||||
+ USE_VERSIONED_PATHS=NO
|
||||
+else
|
||||
+ USE_VERSIONED_PATHS=YES
|
||||
+fi
|
||||
+AC_SUBST(USE_VERSIONED_PATHS)
|
||||
+
|
||||
arch_hdrdir="${EXTOUT}/include/${arch}/ruby"
|
||||
AS_MKDIR_P("${arch_hdrdir}")
|
||||
config_h="${arch_hdrdir}/config.h"
|
||||
diff --git a/tool/mkconfig.rb b/tool/mkconfig.rb
|
||||
index a2221f0..47d8c8f 100755
|
||||
--- a/tool/mkconfig.rb
|
||||
+++ b/tool/mkconfig.rb
|
||||
@@ -42,6 +42,7 @@ v_others = []
|
||||
vars = {}
|
||||
continued_name = nil
|
||||
continued_line = nil
|
||||
+path_version = "/$(ruby_version)"
|
||||
File.foreach "config.status" do |line|
|
||||
next if /^#/ =~ line
|
||||
name = nil
|
||||
@@ -138,6 +139,8 @@ File.foreach "config.status" do |line|
|
||||
case name
|
||||
when "ruby_version"
|
||||
version = val[/\A"(.*)"\z/, 1]
|
||||
+ when /^USE_VERSIONED_PATHS$/
|
||||
+ path_version = nil if /NO/ =~ val
|
||||
end
|
||||
end
|
||||
# break if /^CEOF/
|
||||
@@ -203,15 +206,15 @@ end
|
||||
print(*v_fast)
|
||||
print(*v_others)
|
||||
print <<EOS
|
||||
- CONFIG["rubylibdir"] = "$(rubylibprefix)/$(ruby_version)"
|
||||
+ CONFIG["rubylibdir"] = "$(rubylibprefix)#{path_version}"
|
||||
CONFIG["archdir"] = "$(rubylibdir)/$(arch)"
|
||||
EOS
|
||||
print <<EOS unless v_disabled["sitedir"]
|
||||
- CONFIG["sitelibdir"] = "$(sitedir)/$(ruby_version)"
|
||||
+ CONFIG["sitelibdir"] = "$(sitedir)#{path_version}"
|
||||
CONFIG["sitearchdir"] = "$(sitelibdir)/$(sitearch)"
|
||||
EOS
|
||||
print <<EOS unless v_disabled["vendordir"]
|
||||
- CONFIG["vendorlibdir"] = "$(vendordir)/$(ruby_version)"
|
||||
+ CONFIG["vendorlibdir"] = "$(vendordir)#{path_version}"
|
||||
CONFIG["vendorarchdir"] = "$(vendorlibdir)/$(sitearch)"
|
||||
EOS
|
||||
print <<EOS
|
||||
diff --git a/version.c b/version.c
|
||||
index 59d4e5e..641dc33 100644
|
||||
--- a/version.c
|
||||
+++ b/version.c
|
||||
@@ -38,9 +38,15 @@
|
||||
#define RUBY_VENDOR_LIB RUBY_LIB_PREFIX"/vendor_ruby"
|
||||
#endif
|
||||
|
||||
+#ifdef DISABLE_VERSIONED_PATHS
|
||||
+#define RUBY_LIB RUBY_LIB_PREFIX
|
||||
+#define RUBY_SITE_LIB2 RUBY_SITE_LIB
|
||||
+#define RUBY_VENDOR_LIB2 RUBY_VENDOR_LIB
|
||||
+#else
|
||||
#define RUBY_LIB RUBY_LIB_PREFIX "/"RUBY_LIB_VERSION
|
||||
#define RUBY_SITE_LIB2 RUBY_SITE_LIB "/"RUBY_LIB_VERSION
|
||||
#define RUBY_VENDOR_LIB2 RUBY_VENDOR_LIB "/"RUBY_LIB_VERSION
|
||||
+#endif
|
||||
#define RUBY_ARCHLIB RUBY_LIB "/"RUBY_ARCH
|
||||
#define RUBY_SITE_ARCHLIB RUBY_SITE_LIB2 "/"RUBY_SITEARCH
|
||||
#define RUBY_VENDOR_ARCHLIB RUBY_VENDOR_LIB2 "/"RUBY_SITEARCH
|
||||
@@ -75,8 +81,10 @@ const char ruby_initial_load_paths[] =
|
||||
RUBY_SITE_THIN_ARCHLIB "\0"
|
||||
#endif
|
||||
RUBY_SITE_ARCHLIB "\0"
|
||||
+#ifndef DISABLE_VERSIONED_PATHS
|
||||
RUBY_SITE_LIB "\0"
|
||||
#endif
|
||||
+#endif
|
||||
|
||||
#ifndef NO_RUBY_VENDOR_LIB
|
||||
RUBY_VENDOR_LIB2 "\0"
|
||||
@@ -84,8 +92,10 @@ const char ruby_initial_load_paths[] =
|
||||
RUBY_VENDOR_THIN_ARCHLIB "\0"
|
||||
#endif
|
||||
RUBY_VENDOR_ARCHLIB "\0"
|
||||
+#ifndef DISABLE_VERSIONED_PATHS
|
||||
RUBY_VENDOR_LIB "\0"
|
||||
#endif
|
||||
+#endif
|
||||
|
||||
RUBY_LIB "\0"
|
||||
#ifdef RUBY_THIN_ARCHLIB
|
||||
--
|
||||
1.7.7.3
|
||||
diff --git a/lib/rdoc/ri/paths.rb b/lib/rdoc/ri/paths.rb
|
||||
index a3c65bf..0575730 100644
|
||||
--- a/lib/rdoc/ri/paths.rb
|
||||
+++ b/lib/rdoc/ri/paths.rb
|
||||
@@ -11,9 +11,9 @@ module RDoc::RI::Paths
|
||||
version = RbConfig::CONFIG['ruby_version']
|
||||
|
||||
base = if RbConfig::CONFIG.key? 'ridir' then
|
||||
- File.join RbConfig::CONFIG['ridir'], version
|
||||
+ File.join [RbConfig::CONFIG['ridir'], RbConfig::CONFIG['USE_VERSIONED_PATHS'] == 'YES' ? version : nil].compact
|
||||
else
|
||||
- File.join RbConfig::CONFIG['datadir'], 'ri', version
|
||||
+ File.join [RbConfig::CONFIG['datadir'], 'ri', RbConfig::CONFIG['USE_VERSIONED_PATHS'] == 'YES' ? version : nil].compact
|
||||
end
|
||||
|
||||
SYSDIR = File.join base, "system"
|
||||
diff --git a/tool/rbinstall.rb b/tool/rbinstall.rb
|
||||
index cec8c9f..fed14d2 100755
|
||||
--- a/tool/rbinstall.rb
|
||||
+++ b/tool/rbinstall.rb
|
||||
@@ -379,7 +379,7 @@ end
|
||||
|
||||
install?(:doc, :rdoc) do
|
||||
if $rdocdir
|
||||
- ridatadir = File.join(CONFIG['ridir'], CONFIG['ruby_version'], "system")
|
||||
+ ridatadir = File.join([CONFIG['ridir'], RbConfig::CONFIG['USE_VERSIONED_PATHS'] == 'YES' ? version : nil, "system"].compact)
|
||||
prepare "rdoc", ridatadir
|
||||
install_recursive($rdocdir, ridatadir, :mode => $data_mode)
|
||||
end
|
||||
--
|
||||
1.7.6
|
||||
|
@ -1,17 +1,6 @@
|
||||
From 28cc0749d6729aa2444661ee7b411e183fe220b0 Mon Sep 17 00:00:00 2001
|
||||
From: =?UTF-8?q?V=C3=ADt=20Ondruch?= <vondruch@redhat.com>
|
||||
Date: Mon, 19 Nov 2012 15:14:51 +0100
|
||||
Subject: [PATCH] Verbose mkmf.
|
||||
|
||||
---
|
||||
lib/mkmf.rb | 2 +-
|
||||
1 file changed, 1 insertion(+), 1 deletion(-)
|
||||
|
||||
diff --git a/lib/mkmf.rb b/lib/mkmf.rb
|
||||
index 682eb46..e6b1445 100644
|
||||
--- a/lib/mkmf.rb
|
||||
+++ b/lib/mkmf.rb
|
||||
@@ -1930,7 +1930,7 @@ def configuration(srcdir)
|
||||
--- ruby-1.9.3-p0/lib/mkmf.rb.debug 2011-08-11 15:07:37.000000000 +0900
|
||||
+++ ruby-1.9.3-p0/lib/mkmf.rb 2012-01-29 21:34:17.000000000 +0900
|
||||
@@ -1638,7 +1638,7 @@
|
||||
SHELL = /bin/sh
|
||||
|
||||
# V=0 quiet, V=1 verbose. other values don't work.
|
||||
@ -19,7 +8,4 @@ index 682eb46..e6b1445 100644
|
||||
+V = 1
|
||||
Q1 = $(V:1=)
|
||||
Q = $(Q1:0=@)
|
||||
ECHO1 = $(V:1=@ #{CONFIG['NULLCMD']})
|
||||
--
|
||||
1.8.3.1
|
||||
|
||||
n=$(NULLCMD)
|
||||
|
14
ruby-1.9.3-p286-open-devtty-on-koji.patch
Normal file
14
ruby-1.9.3-p286-open-devtty-on-koji.patch
Normal file
@ -0,0 +1,14 @@
|
||||
--- ruby-1.9.3-p286/test/ruby/test_io.rb.devtty 2012-10-12 17:37:54.000000000 +0900
|
||||
+++ ruby-1.9.3-p286/test/ruby/test_io.rb 2012-10-13 14:00:24.000000000 +0900
|
||||
@@ -2068,6 +2068,11 @@
|
||||
return if /linux/ !~ RUBY_PLATFORM
|
||||
return if /^i.?86|^x86_64/ !~ RUBY_PLATFORM
|
||||
return unless File.exist?('/dev/tty')
|
||||
+ begin
|
||||
+ File.open('/dev/tty') {|f|}
|
||||
+ rescue Errno::ENXIO
|
||||
+ return
|
||||
+ end
|
||||
|
||||
File.open('/dev/tty') { |f|
|
||||
tiocgwinsz=0x5413
|
49
ruby-1.9.3-p327-ignore-internal-server-error-on-test.patch
Normal file
49
ruby-1.9.3-p327-ignore-internal-server-error-on-test.patch
Normal file
@ -0,0 +1,49 @@
|
||||
--- ruby-1.9.3-p327/test/webrick/test_cgi.rb.koji 2012-08-28 00:40:30.000000000 +0900
|
||||
+++ ruby-1.9.3-p327/test/webrick/test_cgi.rb 2012-11-10 16:33:36.000000000 +0900
|
||||
@@ -28,6 +28,15 @@
|
||||
end
|
||||
|
||||
def test_cgi
|
||||
+'''
|
||||
+On koji:
|
||||
+test_cgi(TestWEBrickCGI) [/builddir/build/BUILD/ruby-1.9.3-p327/test/webrick/test_cgi.rb:34]:
|
||||
+....
|
||||
+....
|
||||
+<"/webrick.cgi"> expected but was
|
||||
+<"<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.0//EN\">\n<HTML>\n <HEAD><TITLE>Internal Server Error</TITLE></HEAD>\n <BODY>\n <H1>Internal Server Error</H1>\n Broken pipe\n <HR>\n <ADDRESS>\n WEBrick/1.3.1 (Ruby/1.9.3/2012-11-10) OpenSSL/1.0.1c at\n 127.0.0.1:58617\n </ADDRESS>\n </BODY>\n</HTML>\n">.
|
||||
+'''
|
||||
+ return # Skip on koji
|
||||
start_cgi_server{|server, addr, port, log|
|
||||
http = Net::HTTP.new(addr, port)
|
||||
req = Net::HTTP::Get.new("/webrick.cgi")
|
||||
@@ -84,6 +93,13 @@
|
||||
end
|
||||
|
||||
def test_bad_request
|
||||
+'''
|
||||
+On koji:
|
||||
+test_bad_request(TestWEBrickCGI) [/builddir/build/BUILD/ruby-1.9.3-p327/test/webrick/test_cgi.rb:96]:
|
||||
+....
|
||||
+Expected /\AHTTP\/\d.\d 400 Bad Request/ to match "HTTP/1.1 500 Internal Server Error \r\nContent-Type: text/html; charset=ISO-8859-1\r\nServer: WEBrick/1.3.1 (Ruby/1.9.3/2012-11-10) OpenSSL/1.0.1c\r\nDate: Sat, 10 Nov 2012 07:17:08 GMT\r\nContent-Length: 307\r\nConnection: close\r\n\r\n<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.0//EN\">\n<HTML>\n <HEAD><TITLE>Internal Server Error</TITLE></HEAD>\n <BODY>\n <H1>Internal Server Error</H1>\n Broken pipe\n <HR>\n <ADDRESS>\n WEBrick/1.3.1 (Ruby/1.9.3/2012-11-10) OpenSSL/1.0.1c at\n localhost:41188\n </ADDRESS>\n </BODY>\n</HTML>\n".
|
||||
+'''
|
||||
+ return # Skip on koji
|
||||
start_cgi_server{|server, addr, port, log|
|
||||
sock = TCPSocket.new(addr, port)
|
||||
begin
|
||||
--- ruby-1.9.3-p327/test/webrick/test_filehandler.rb.koji 2012-08-28 00:40:30.000000000 +0900
|
||||
+++ ruby-1.9.3-p327/test/webrick/test_filehandler.rb 2012-11-10 16:33:02.000000000 +0900
|
||||
@@ -244,6 +244,14 @@
|
||||
end
|
||||
|
||||
def test_script_disclosure
|
||||
+'''
|
||||
+On koji:
|
||||
+test_script_disclosure(WEBrick::TestFileHandler) [/builddir/build/BUILD/ruby-1.9.3-p327/test/webrick/test_filehandler.rb:265]:
|
||||
+....
|
||||
+<"200"> expected but was
|
||||
+<"500">.
|
||||
+'''
|
||||
+ return # Skip on koji
|
||||
config = {
|
||||
:CGIInterpreter => TestWEBrick::RubyBin,
|
||||
:DocumentRoot => File.dirname(__FILE__),
|
76
ruby-1.9.3-rubygems-1.8.11-uninstaller.patch
Normal file
76
ruby-1.9.3-rubygems-1.8.11-uninstaller.patch
Normal file
@ -0,0 +1,76 @@
|
||||
--- ruby-1.9.3-p0/lib/rubygems/uninstaller.rb.orig 2011-10-31 10:22:36.321579483 +0100
|
||||
+++ ruby-1.9.3-p0/lib/rubygems/uninstaller.rb 2011-10-31 10:34:25.563626119 +0100
|
||||
@@ -51,15 +51,14 @@
|
||||
@bin_dir = options[:bin_dir]
|
||||
@format_executable = options[:format_executable]
|
||||
|
||||
+ if options[:force]
|
||||
+ @force_all = true
|
||||
+ @force_ignore = true
|
||||
+ end
|
||||
+
|
||||
# only add user directory if install_dir is not set
|
||||
@user_install = false
|
||||
@user_install = options[:user_install] unless options[:install_dir]
|
||||
-
|
||||
- if @user_install then
|
||||
- Gem.use_paths Gem.user_dir, @gem_home
|
||||
- else
|
||||
- Gem.use_paths @gem_home
|
||||
- end
|
||||
end
|
||||
|
||||
##
|
||||
@@ -69,10 +68,24 @@
|
||||
def uninstall
|
||||
list = Gem::Specification.find_all_by_name(@gem, @version)
|
||||
|
||||
+ list, other_repo_specs = list.partition do |spec|
|
||||
+ @gem_home == spec.base_dir or
|
||||
+ (@user_install and spec.base_dir == Gem.user_dir)
|
||||
+ end
|
||||
+
|
||||
if list.empty? then
|
||||
- raise Gem::InstallError, "gem #{@gem.inspect} is not installed"
|
||||
+ raise Gem::InstallError, "gem #{@gem.inspect} is not installed" if
|
||||
+ other_repo_specs.empty?
|
||||
+
|
||||
+ other_repos = other_repo_specs.map { |spec| spec.base_dir }.uniq
|
||||
+
|
||||
+ message = ["#{@gem} is not installed in GEM_HOME, try:"]
|
||||
+ message.concat other_repos.map { |repo|
|
||||
+ "\tgem uninstall -i #{repo} #{@gem}"
|
||||
+ }
|
||||
|
||||
- elsif list.size > 1 and @force_all then
|
||||
+ raise Gem::InstallError, message.join("\n")
|
||||
+ elsif @force_all then
|
||||
remove_all list
|
||||
|
||||
elsif list.size > 1 then
|
||||
@@ -250,12 +263,10 @@
|
||||
msg << "\t#{spec.full_name}"
|
||||
|
||||
spec.dependent_gems.each do |dep_spec, dep, satlist|
|
||||
- msg <<
|
||||
- ("#{dep_spec.name}-#{dep_spec.version} depends on " +
|
||||
- "[#{dep.name} (#{dep.requirement})]")
|
||||
+ msg << "#{dep_spec.name}-#{dep_spec.version} depends on #{dep}"
|
||||
end
|
||||
|
||||
- msg << 'If you remove this gems, one or more dependencies will not be met.'
|
||||
+ msg << 'If you remove this gem, one or more dependencies will not be met.'
|
||||
msg << 'Continue with Uninstall?'
|
||||
return ask_yes_no(msg.join("\n"), true)
|
||||
end
|
||||
|
||||
--- ruby-1.9.3-p0/test/rubygems/test_gem_uninstaller.rb.orig 2011-11-03 08:58:31.411272176 +0100
|
||||
+++ ruby-1.9.3-p0/test/rubygems/test_gem_uninstaller.rb 2011-11-03 08:58:43.010272351 +0100
|
||||
@@ -225,7 +225,7 @@
|
||||
|
||||
uninstaller = Gem::Uninstaller.new('a')
|
||||
|
||||
- use_ui Gem::MockGemUi.new("2\n") do
|
||||
+ use_ui Gem::MockGemUi.new("2\ny\n") do
|
||||
uninstaller.uninstall
|
||||
end
|
24
ruby-1.9.3-webrick-test-fix.patch
Normal file
24
ruby-1.9.3-webrick-test-fix.patch
Normal file
@ -0,0 +1,24 @@
|
||||
diff --git a/test/webrick/test_cgi.rb b/test/webrick/test_cgi.rb
|
||||
index 1185316..0ef1b37 100644
|
||||
--- a/test/webrick/test_cgi.rb
|
||||
+++ b/test/webrick/test_cgi.rb
|
||||
@@ -14,6 +14,7 @@ class TestWEBrickCGI < Test::Unit::TestCase
|
||||
def req.meta_vars
|
||||
meta = super
|
||||
meta["RUBYLIB"] = $:.join(File::PATH_SEPARATOR)
|
||||
+ meta[RbConfig::CONFIG['LIBPATHENV']] = ENV[RbConfig::CONFIG['LIBPATHENV']]
|
||||
return meta
|
||||
end
|
||||
},
|
||||
diff --git a/test/webrick/test_filehandler.rb b/test/webrick/test_filehandler.rb
|
||||
index bcdb3df..f78ba5c 100644
|
||||
--- a/test/webrick/test_filehandler.rb
|
||||
+++ b/test/webrick/test_filehandler.rb
|
||||
@@ -252,6 +252,7 @@ class WEBrick::TestFileHandler < Test::Unit::TestCase
|
||||
def req.meta_vars
|
||||
meta = super
|
||||
meta["RUBYLIB"] = $:.join(File::PATH_SEPARATOR)
|
||||
+ meta[RbConfig::CONFIG['LIBPATHENV']] = ENV[RbConfig::CONFIG['LIBPATHENV']]
|
||||
return meta
|
||||
end
|
||||
},
|
@ -0,0 +1,35 @@
|
||||
From bf4959bc763167b2245a5f4c699fcb72afead5a5 Mon Sep 17 00:00:00 2001
|
||||
From: =?UTF-8?q?V=C3=ADt=20Ondruch?= <vondruch@redhat.com>
|
||||
Date: Fri, 18 Jan 2013 15:51:49 +0100
|
||||
Subject: [PATCH] Expand ruby.pc variable by configuration process.
|
||||
|
||||
---
|
||||
template/ruby.pc.in | 12 ++++++------
|
||||
1 file changed, 6 insertions(+), 6 deletions(-)
|
||||
|
||||
diff --git a/template/ruby.pc.in b/template/ruby.pc.in
|
||||
index 2d6716c..25e42f3 100644
|
||||
--- a/template/ruby.pc.in
|
||||
+++ b/template/ruby.pc.in
|
||||
@@ -25,12 +25,12 @@ LIBS=@LIBS@
|
||||
DLDFLAGS=@DLDFLAGS@
|
||||
ruby=${bindir}/${RUBY_INSTALL_NAME}@EXEEXT@
|
||||
rubylibprefix=@rubylibprefix@
|
||||
-rubylibdir=${rubylibprefix}/${ruby_version}
|
||||
-vendordir=${rubylibprefix}/vendor_ruby
|
||||
-sitedir=${rubylibprefix}/site_ruby
|
||||
-rubyarchdir=${rubylibdir}/${arch}
|
||||
-vendorarchdir=${vendordir}/${sitearch}
|
||||
-sitearchdir=${sitedir}/${sitearch}
|
||||
+rubylibdir=@rubylibprefix@
|
||||
+vendordir=@vendordir@
|
||||
+sitedir=@sitedir@
|
||||
+rubyarchdir=@archdir@
|
||||
+vendorarchdir=@vendorarchdir@
|
||||
+sitearchdir=@sitearchdir@
|
||||
rubyhdrdir=@rubyhdrdir@
|
||||
vendorhdrdir=@vendorhdrdir@
|
||||
sitehdrdir=@sitehdrdir@
|
||||
--
|
||||
1.8.0.2
|
||||
|
@ -1,28 +0,0 @@
|
||||
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
|
||||
@@ -3105,6 +3105,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}'
|
||||
--
|
||||
2.22.0
|
||||
|
@ -1,80 +0,0 @@
|
||||
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
|
||||
@@ -3743,7 +3743,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
|
||||
@@ -114,7 +114,7 @@
|
||||
val = val.gsub(/\$(?:\$|\{?(\w+)\}?)/) {$1 ? "$(#{$1})" : $&}.dump
|
||||
case name
|
||||
when /^prefix$/
|
||||
- val = "(TOPDIR || DESTDIR + #{val})"
|
||||
+ val = "(((TOPDIR && TOPDIR.empty?) ? nil : TOPDIR) || DESTDIR + #{val})"
|
||||
when /^ARCH_FLAG$/
|
||||
val = "arch_flag || #{val}" if universal
|
||||
when /^UNIVERSAL_ARCHNAMES$/
|
||||
--
|
||||
1.9.0
|
||||
|
@ -1,25 +0,0 @@
|
||||
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
|
||||
@@ -3807,6 +3807,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], [
|
||||
--
|
||||
1.8.3.1
|
||||
|
@ -1,97 +0,0 @@
|
||||
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
|
||||
@@ -3779,6 +3779,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=''
|
||||
@@ -3803,6 +3807,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 b47b6e1..0b99408 100755
|
||||
--- a/tool/rbinstall.rb
|
||||
+++ b/tool/rbinstall.rb
|
||||
@@ -343,6 +343,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'
|
||||
@@ -570,7 +571,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
|
||||
--
|
||||
1.8.3.1
|
||||
|
@ -1,288 +0,0 @@
|
||||
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 | 64 ++++++++++++++++++++++++---------------------
|
||||
template/ruby.pc.in | 1 +
|
||||
2 files changed, 35 insertions(+), 30 deletions(-)
|
||||
|
||||
diff --git a/configure.ac b/configure.ac
|
||||
index 80b137e380..63cd3b4f8b 100644
|
||||
--- a/configure.ac
|
||||
+++ b/configure.ac
|
||||
@@ -3694,9 +3694,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],
|
||||
@@ -3719,56 +3716,62 @@ 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 '#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 '#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)
|
||||
@@ -3785,6 +3788,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
|
||||
@@ -9,6 +9,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@
|
||||
RUBY_BASE_NAME=@RUBY_BASE_NAME@
|
||||
--
|
||||
2.1.0
|
||||
|
||||
|
||||
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 = if RbConfig::CONFIG.key? 'ridir' then
|
||||
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
|
||||
@@ -433,7 +433,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
|
||||
--
|
||||
2.23.0
|
||||
|
||||
|
||||
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 | 9 +++++----
|
||||
test/rubygems/test_gem.rb | 5 +++--
|
||||
2 files changed, 8 insertions(+), 6 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
|
||||
@@ -32,13 +32,13 @@ def self.default_dir
|
||||
[
|
||||
File.dirname(RbConfig::CONFIG['sitedir']),
|
||||
'Gems',
|
||||
- RbConfig::CONFIG['ruby_version']
|
||||
+ RbConfig::CONFIG['ruby_version_dir_name'] || RbConfig::CONFIG['ruby_version']
|
||||
]
|
||||
else
|
||||
[
|
||||
RbConfig::CONFIG['rubylibprefix'],
|
||||
'gems',
|
||||
- RbConfig::CONFIG['ruby_version']
|
||||
+ RbConfig::CONFIG['ruby_version_dir_name'] || RbConfig::CONFIG['ruby_version']
|
||||
]
|
||||
end
|
||||
|
||||
@@ -75,7 +75,8 @@ def self.default_specifications_dir
|
||||
|
||||
def self.user_dir
|
||||
parts = [Gem.user_home, '.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?
|
||||
File.join parts
|
||||
end
|
||||
|
||||
@@ -158,7 +159,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
|
||||
@@ -1378,7 +1378,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?
|
||||
|
||||
assert_equal File.join(parts), Gem.user_dir
|
||||
end
|
||||
@@ -1454,7 +1455,7 @@ def test_self_vendor_dir
|
||||
vendordir(File.join(@tempdir, 'vendor')) do
|
||||
expected =
|
||||
File.join RbConfig::CONFIG['vendordir'], 'gems',
|
||||
- RbConfig::CONFIG['ruby_version']
|
||||
+ RbConfig::CONFIG['ruby_version_dir_name'] || RbConfig::CONFIG['ruby_version']
|
||||
|
||||
assert_equal expected, Gem.vendor_dir
|
||||
end
|
||||
--
|
||||
2.1.0
|
||||
|
||||
|
||||
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
|
||||
@@ -98,7 +98,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}')
|
||||
|
||||
AC_CANONICAL_TARGET
|
||||
test x"$target_alias" = x &&
|
||||
--
|
||||
2.1.0
|
||||
|
@ -1,136 +0,0 @@
|
||||
From 346e147ba6480839b87046e9a9efab0bf6ed3660 Mon Sep 17 00:00:00 2001
|
||||
From: =?UTF-8?q?V=C3=ADt=20Ondruch?= <vondruch@redhat.com>
|
||||
Date: Wed, 10 Aug 2016 17:35:48 +0200
|
||||
Subject: [PATCH] Rely on ldd to detect glibc.
|
||||
|
||||
This is just workaround, since we know we are quite sure this will be successful
|
||||
on Red Hat platforms.
|
||||
|
||||
This workaround rhbz#1361037
|
||||
---
|
||||
test/fiddle/helper.rb | 111 ------------------------------------------
|
||||
1 file changed, 111 deletions(-)
|
||||
|
||||
diff --git a/test/fiddle/helper.rb b/test/fiddle/helper.rb
|
||||
index 1da3d93..65148a1 100644
|
||||
--- a/test/fiddle/helper.rb
|
||||
+++ b/test/fiddle/helper.rb
|
||||
@@ -6,115 +6,6 @@
|
||||
|
||||
libc_so = libm_so = nil
|
||||
|
||||
-case RUBY_PLATFORM
|
||||
-when /cygwin/
|
||||
- libc_so = "cygwin1.dll"
|
||||
- libm_so = "cygwin1.dll"
|
||||
-when /android/
|
||||
- libdir = '/system/lib'
|
||||
- if [0].pack('L!').size == 8
|
||||
- libdir = '/system/lib64'
|
||||
- end
|
||||
- libc_so = File.join(libdir, "libc.so")
|
||||
- libm_so = File.join(libdir, "libm.so")
|
||||
-when /linux/
|
||||
- libdir = '/lib'
|
||||
- case RbConfig::SIZEOF['void*']
|
||||
- when 4
|
||||
- # 32-bit ruby
|
||||
- case RUBY_PLATFORM
|
||||
- when /armv\w+-linux/
|
||||
- # In the ARM 32-bit libc package such as libc6:armhf libc6:armel,
|
||||
- # libc.so and libm.so are installed to /lib/arm-linux-gnu*.
|
||||
- # It's not installed to /lib32.
|
||||
- dirs = Dir.glob('/lib/arm-linux-gnu*')
|
||||
- libdir = dirs[0] if dirs && File.directory?(dirs[0])
|
||||
- else
|
||||
- libdir = '/lib32' if File.directory? '/lib32'
|
||||
- end
|
||||
- when 8
|
||||
- # 64-bit ruby
|
||||
- libdir = '/lib64' if File.directory? '/lib64'
|
||||
- end
|
||||
- libc_so = File.join(libdir, "libc.so.6")
|
||||
- libm_so = File.join(libdir, "libm.so.6")
|
||||
-when /mingw/, /mswin/
|
||||
- require "rbconfig"
|
||||
- crtname = RbConfig::CONFIG["RUBY_SO_NAME"][/msvc\w+/] || 'ucrtbase'
|
||||
- libc_so = libm_so = "#{crtname}.dll"
|
||||
-when /darwin/
|
||||
- libc_so = libm_so = "/usr/lib/libSystem.B.dylib"
|
||||
-when /kfreebsd/
|
||||
- libc_so = "/lib/libc.so.0.1"
|
||||
- libm_so = "/lib/libm.so.1"
|
||||
-when /gnu/ #GNU/Hurd
|
||||
- libc_so = "/lib/libc.so.0.3"
|
||||
- libm_so = "/lib/libm.so.6"
|
||||
-when /mirbsd/
|
||||
- libc_so = "/usr/lib/libc.so.41.10"
|
||||
- libm_so = "/usr/lib/libm.so.7.0"
|
||||
-when /freebsd/
|
||||
- libc_so = "/lib/libc.so.7"
|
||||
- libm_so = "/lib/libm.so.5"
|
||||
-when /bsd|dragonfly/
|
||||
- libc_so = "/usr/lib/libc.so"
|
||||
- libm_so = "/usr/lib/libm.so"
|
||||
-when /solaris/
|
||||
- libdir = '/lib'
|
||||
- case RbConfig::SIZEOF['void*']
|
||||
- when 4
|
||||
- # 32-bit ruby
|
||||
- libdir = '/lib' if File.directory? '/lib'
|
||||
- when 8
|
||||
- # 64-bit ruby
|
||||
- libdir = '/lib/64' if File.directory? '/lib/64'
|
||||
- end
|
||||
- libc_so = File.join(libdir, "libc.so")
|
||||
- libm_so = File.join(libdir, "libm.so")
|
||||
-when /aix/
|
||||
- pwd=Dir.pwd
|
||||
- libc_so = libm_so = "#{pwd}/libaixdltest.so"
|
||||
- unless File.exist? libc_so
|
||||
- cobjs=%w!strcpy.o!
|
||||
- mobjs=%w!floats.o sin.o!
|
||||
- funcs=%w!sin sinf strcpy strncpy!
|
||||
- expfile='dltest.exp'
|
||||
- require 'tmpdir'
|
||||
- Dir.mktmpdir do |dir|
|
||||
- begin
|
||||
- Dir.chdir dir
|
||||
- %x!/usr/bin/ar x /usr/lib/libc.a #{cobjs.join(' ')}!
|
||||
- %x!/usr/bin/ar x /usr/lib/libm.a #{mobjs.join(' ')}!
|
||||
- %x!echo "#{funcs.join("\n")}\n" > #{expfile}!
|
||||
- require 'rbconfig'
|
||||
- if RbConfig::CONFIG["GCC"] = 'yes'
|
||||
- lflag='-Wl,'
|
||||
- else
|
||||
- lflag=''
|
||||
- end
|
||||
- flags="#{lflag}-bE:#{expfile} #{lflag}-bnoentry -lm"
|
||||
- %x!#{RbConfig::CONFIG["LDSHARED"]} -o #{libc_so} #{(cobjs+mobjs).join(' ')} #{flags}!
|
||||
- ensure
|
||||
- Dir.chdir pwd
|
||||
- end
|
||||
- end
|
||||
- end
|
||||
-else
|
||||
- libc_so = ARGV[0] if ARGV[0] && ARGV[0][0] == ?/
|
||||
- libm_so = ARGV[1] if ARGV[1] && ARGV[1][0] == ?/
|
||||
- if( !(libc_so && libm_so) )
|
||||
- $stderr.puts("libc and libm not found: #{$0} <libc> <libm>")
|
||||
- end
|
||||
-end
|
||||
-
|
||||
-libc_so = nil if !libc_so || (libc_so[0] == ?/ && !File.file?(libc_so))
|
||||
-libm_so = nil if !libm_so || (libm_so[0] == ?/ && !File.file?(libm_so))
|
||||
-
|
||||
-# macOS 11.0+ removed libSystem.B.dylib from /usr/lib. But It works with dlopen.
|
||||
-if RUBY_PLATFORM =~ /darwin/
|
||||
- libc_so = libm_so = "/usr/lib/libSystem.B.dylib"
|
||||
-end
|
||||
-
|
||||
if !libc_so || !libm_so
|
||||
ruby = EnvUtil.rubybin
|
||||
# When the ruby binary is 32-bit and the host is 64-bit,
|
||||
--
|
||||
2.9.2
|
||||
|
@ -1,77 +0,0 @@
|
||||
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 ++++
|
||||
3 files changed, 18 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
|
||||
@@ -81,7 +81,8 @@ ENC_MK = enc.mk
|
||||
MAKE_ENC = -f $(ENC_MK) V="$(V)" UNICODE_HDR_DIR="$(UNICODE_HDR_DIR)" \
|
||||
RUBY="$(MINIRUBY)" MINIRUBY="$(MINIRUBY)" $(mflags)
|
||||
|
||||
-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
|
||||
@@ -1451,10 +1451,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"));
|
||||
}
|
||||
|
||||
--
|
||||
2.24.1
|
||||
|
@ -1,32 +0,0 @@
|
||||
From 6532dbecf36d1f24dab1f2143afd171e0b7699eb Mon Sep 17 00:00:00 2001
|
||||
From: =?UTF-8?q?V=C3=ADt=20Ondruch?= <vondruch@redhat.com>
|
||||
Date: Wed, 4 Sep 2019 15:07:07 +0200
|
||||
Subject: [PATCH] Remove RubyGems dependency.
|
||||
|
||||
Since `Process::RLIMIT_NOFILE` is platform specific, better to use Ruby
|
||||
introspection than detecting platform.
|
||||
---
|
||||
.../vendor/net-http-persistent/lib/net/http/persistent.rb | 6 +++---
|
||||
1 file changed, 3 insertions(+), 3 deletions(-)
|
||||
|
||||
diff --git a/lib/bundler/vendor/net-http-persistent/lib/net/http/persistent.rb b/lib/bundler/vendor/net-http-persistent/lib/net/http/persistent.rb
|
||||
index a54be2a..06739f1 100644
|
||||
--- a/lib/bundler/vendor/net-http-persistent/lib/net/http/persistent.rb
|
||||
+++ b/lib/bundler/vendor/net-http-persistent/lib/net/http/persistent.rb
|
||||
@@ -197,10 +197,10 @@ class Bundler::Persistent::Net::HTTP::Persistent
|
||||
##
|
||||
# The default connection pool size is 1/4 the allowed open files.
|
||||
|
||||
- if Gem.win_platform? then
|
||||
- DEFAULT_POOL_SIZE = 256
|
||||
- else
|
||||
+ if Process.const_defined? :RLIMIT_NOFILE
|
||||
DEFAULT_POOL_SIZE = Process.getrlimit(Process::RLIMIT_NOFILE).first / 4
|
||||
+ else
|
||||
+ DEFAULT_POOL_SIZE = 256
|
||||
end
|
||||
|
||||
##
|
||||
--
|
||||
2.23.0
|
||||
|
@ -1,34 +0,0 @@
|
||||
From 9b42fce32bff25e0569581f76f532b9d57865aef Mon Sep 17 00:00:00 2001
|
||||
From: =?UTF-8?q?V=C3=ADt=20Ondruch?= <vondruch@redhat.com>
|
||||
Date: Mon, 27 Jul 2020 14:56:05 +0200
|
||||
Subject: [PATCH] Timeout the test_bug_reporter_add witout raising error.
|
||||
|
||||
While timeouting the threads might be still good idea, it does not seems
|
||||
the timeout impacts the TestBugReporter#test_bug_reporter_add result,
|
||||
because the output of the child process has been already collected
|
||||
earlier.
|
||||
|
||||
It seems that when the system is under heavy load, the thread might not
|
||||
be sheduled to finish its processing. Even finishing the child process
|
||||
might take tens of seconds and therefore the test case finish might take
|
||||
a while.
|
||||
---
|
||||
test/-ext-/bug_reporter/test_bug_reporter.rb | 2 +-
|
||||
1 file changed, 1 insertion(+), 1 deletion(-)
|
||||
|
||||
diff --git a/test/-ext-/bug_reporter/test_bug_reporter.rb b/test/-ext-/bug_reporter/test_bug_reporter.rb
|
||||
index 628fcd0340..2c677cc8a7 100644
|
||||
--- a/test/-ext-/bug_reporter/test_bug_reporter.rb
|
||||
+++ b/test/-ext-/bug_reporter/test_bug_reporter.rb
|
||||
@@ -19,7 +19,7 @@ def test_bug_reporter_add
|
||||
args = ["--disable-gems", "-r-test-/bug_reporter",
|
||||
"-C", tmpdir]
|
||||
stdin = "register_sample_bug_reporter(12345); Process.kill :SEGV, $$"
|
||||
- assert_in_out_err(args, stdin, [], expected_stderr, encoding: "ASCII-8BIT")
|
||||
+ assert_in_out_err(args, stdin, [], expected_stderr, encoding: "ASCII-8BIT", timeout_error: nil)
|
||||
ensure
|
||||
FileUtils.rm_rf(tmpdir) if tmpdir
|
||||
end
|
||||
--
|
||||
2.27.0
|
||||
|
@ -1,22 +0,0 @@
|
||||
From 0689147586c6cb56b91bf0f368890f19d630ece1 Mon Sep 17 00:00:00 2001
|
||||
From: nobletrout <nobletrout@gmail.com>
|
||||
Date: Tue, 5 Feb 2019 08:14:02 -0500
|
||||
Subject: [PATCH] remove unneeded gem require for ipaddr
|
||||
|
||||
ipaddr is a builtin class for ruby, that is occasionally merged. If the version isn't specified by the runtime dependency, then it will default to needing the latest gem rather than the version that ships with that version of ruby. That will lead to all kinds of potential dependency fails that are most likely unneeded since this gem already requires ruby > 2.3.0
|
||||
---
|
||||
ext/openssl/openssl.gemspec | 1 -
|
||||
1 file changed, 1 deletion(-)
|
||||
|
||||
diff --git a/ext/openssl/openssl.gemspec b/ext/openssl/openssl.gemspec
|
||||
index 7c17cd54..f721f247 100644
|
||||
--- a/ext/openssl/openssl.gemspec
|
||||
+++ b/ext/openssl/openssl.gemspec
|
||||
@@ -21,7 +21,6 @@ Gem::Specification.new do |spec|
|
||||
s.rubygems_version = "3.0.0.beta1"
|
||||
s.summary = "OpenSSL provides SSL, TLS and general purpose cryptography."
|
||||
|
||||
- s.add_runtime_dependency("ipaddr", [">= 0"])
|
||||
s.add_development_dependency("rake", [">= 0"])
|
||||
s.add_development_dependency("rake-compiler", [">= 0"])
|
||||
s.add_development_dependency("test-unit", ["~> 3.0"])
|
@ -1,178 +0,0 @@
|
||||
From c5806d668f84a86e9e6a522f84b8aa6cb4cdaae9 Mon Sep 17 00:00:00 2001
|
||||
From: Ali Saidi <alisaidi@amazon.com>
|
||||
Date: Wed, 5 Aug 2020 20:46:28 -0500
|
||||
Subject: [PATCH 1/3] Enable unaligned accesses on arm64
|
||||
|
||||
64-bit Arm platforms support unaligned accesses.
|
||||
|
||||
Running the string benchmarks this change improves performance
|
||||
by an average of 1.04x, min .96x, max 1.21x, median 1.01x
|
||||
---
|
||||
include/ruby/defines.h | 2 +-
|
||||
regint.h | 2 +-
|
||||
siphash.c | 2 +-
|
||||
st.c | 2 +-
|
||||
4 files changed, 4 insertions(+), 4 deletions(-)
|
||||
|
||||
diff --git a/include/ruby/defines.h b/include/ruby/defines.h
|
||||
index 49f673ef936a..0193275e8b78 100644
|
||||
--- a/include/ruby/defines.h
|
||||
+++ b/include/ruby/defines.h
|
||||
@@ -485,7 +485,7 @@
|
||||
#ifndef UNALIGNED_WORD_ACCESS
|
||||
# if defined(__i386) || defined(__i386__) || defined(_M_IX86) || \
|
||||
defined(__x86_64) || defined(__x86_64__) || defined(_M_AMD64) || \
|
||||
- defined(__powerpc64__) || \
|
||||
+ defined(__powerpc64__) || defined(__aarch64__) || \
|
||||
defined(__mc68020__)
|
||||
# define UNALIGNED_WORD_ACCESS 1
|
||||
# else
|
||||
diff --git a/regint.h b/regint.h
|
||||
index a2f5bbba1d1f..0740429688bc 100644
|
||||
--- a/regint.h
|
||||
+++ b/regint.h
|
||||
@@ -52,7 +52,7 @@
|
||||
#ifndef UNALIGNED_WORD_ACCESS
|
||||
# if defined(__i386) || defined(__i386__) || defined(_M_IX86) || \
|
||||
defined(__x86_64) || defined(__x86_64__) || defined(_M_AMD64) || \
|
||||
- defined(__powerpc64__) || \
|
||||
+ defined(__powerpc64__) || defined(__aarch64__) || \
|
||||
defined(__mc68020__)
|
||||
# define UNALIGNED_WORD_ACCESS 1
|
||||
# else
|
||||
diff --git a/siphash.c b/siphash.c
|
||||
index 153d2c690ab9..ddf8ee245d81 100644
|
||||
--- a/siphash.c
|
||||
+++ b/siphash.c
|
||||
@@ -30,7 +30,7 @@
|
||||
#ifndef UNALIGNED_WORD_ACCESS
|
||||
# if defined(__i386) || defined(__i386__) || defined(_M_IX86) || \
|
||||
defined(__x86_64) || defined(__x86_64__) || defined(_M_AMD64) || \
|
||||
- defined(__powerpc64__) || \
|
||||
+ defined(__powerpc64__) || defined(__aarch64__) || \
|
||||
defined(__mc68020__)
|
||||
# define UNALIGNED_WORD_ACCESS 1
|
||||
# endif
|
||||
diff --git a/st.c b/st.c
|
||||
index c11535ef9779..8be466bf733f 100644
|
||||
--- a/st.c
|
||||
+++ b/st.c
|
||||
@@ -1815,7 +1815,7 @@ st_values_check(st_table *tab, st_data_t *values, st_index_t size,
|
||||
#ifndef UNALIGNED_WORD_ACCESS
|
||||
# if defined(__i386) || defined(__i386__) || defined(_M_IX86) || \
|
||||
defined(__x86_64) || defined(__x86_64__) || defined(_M_AMD64) || \
|
||||
- defined(__powerpc64__) || \
|
||||
+ defined(__powerpc64__) || defined(__aarch64__) || \
|
||||
defined(__mc68020__)
|
||||
# define UNALIGNED_WORD_ACCESS 1
|
||||
# endif
|
||||
|
||||
From 79b7b9143fda0f33fc9375980cecc61eb42c6f66 Mon Sep 17 00:00:00 2001
|
||||
From: Ali Saidi <alisaidi@amazon.com>
|
||||
Date: Wed, 5 Aug 2020 21:04:37 -0500
|
||||
Subject: [PATCH 2/3] arm64 enable gc optimizations
|
||||
|
||||
Similar to x86 and powerpc optimizations.
|
||||
|
||||
| |compare-ruby|built-ruby|
|
||||
|:------|-----------:|---------:|
|
||||
|hash1 | 0.225| 0.237|
|
||||
| | -| 1.05x|
|
||||
|hash2 | 0.110| 0.110|
|
||||
| | 1.00x| -|
|
||||
---
|
||||
gc.c | 13 +++++++++++++
|
||||
gc.h | 2 ++
|
||||
2 files changed, 15 insertions(+)
|
||||
|
||||
diff --git a/gc.c b/gc.c
|
||||
index 22972dfc806c..788f06f1586e 100644
|
||||
--- a/gc.c
|
||||
+++ b/gc.c
|
||||
@@ -1153,6 +1153,19 @@ tick(void)
|
||||
return val;
|
||||
}
|
||||
|
||||
+#elif defined(__aarch64__) && defined(__GNUC__)
|
||||
+typedef unsigned long tick_t;
|
||||
+#define PRItick "lu"
|
||||
+
|
||||
+static __inline__ tick_t
|
||||
+tick(void)
|
||||
+{
|
||||
+ unsigned long val;
|
||||
+ __asm__ __volatile__ ("mrs %0, cntvct_el0", : "=r" (val));
|
||||
+ return val;
|
||||
+}
|
||||
+
|
||||
+
|
||||
#elif defined(_WIN32) && defined(_MSC_VER)
|
||||
#include <intrin.h>
|
||||
typedef unsigned __int64 tick_t;
|
||||
diff --git a/gc.h b/gc.h
|
||||
index 6568079c54e5..47a4ca19a0c5 100644
|
||||
--- a/gc.h
|
||||
+++ b/gc.h
|
||||
@@ -8,6 +8,8 @@
|
||||
#define SET_MACHINE_STACK_END(p) __asm__ __volatile__ ("movl\t%%esp, %0" : "=r" (*(p)))
|
||||
#elif defined(__powerpc64__) && defined(__GNUC__)
|
||||
#define SET_MACHINE_STACK_END(p) __asm__ __volatile__ ("mr\t%0, %%r1" : "=r" (*(p)))
|
||||
+#elif defined(__aarch64__) && defined(__GNUC__)
|
||||
+#define SET_MACHINE_STACK_END(p) __asm__ __volatile__ ("mov\t%0, sp" : "=r" (*(p)))
|
||||
#else
|
||||
NOINLINE(void rb_gc_set_stack_end(VALUE **stack_end_p));
|
||||
#define SET_MACHINE_STACK_END(p) rb_gc_set_stack_end(p)
|
||||
|
||||
From c985b8c6868a380e44e285368af4a4f414ce3309 Mon Sep 17 00:00:00 2001
|
||||
From: Ali Saidi <alisaidi@amazon.com>
|
||||
Date: Wed, 5 Aug 2020 21:15:55 -0500
|
||||
Subject: [PATCH 3/3] vm_exec.c: improve performance for arm64
|
||||
|
||||
| |compare-ruby|built-ruby|
|
||||
|:------------------------------|-----------:|---------:|
|
||||
|vm_array | 26.501M| 27.959M|
|
||||
| | -| 1.06x|
|
||||
|vm_attr_ivar | 21.606M| 31.429M|
|
||||
| | -| 1.45x|
|
||||
|vm_attr_ivar_set | 21.178M| 26.113M|
|
||||
| | -| 1.23x|
|
||||
|vm_backtrace | 6.621| 6.668|
|
||||
| | -| 1.01x|
|
||||
|vm_bigarray | 26.205M| 29.958M|
|
||||
| | -| 1.14x|
|
||||
|vm_bighash | 504.155k| 479.306k|
|
||||
| | 1.05x| -|
|
||||
|vm_block | 16.692M| 21.315M|
|
||||
| | -| 1.28x|
|
||||
|block_handler_type_iseq | 5.083| 7.004|
|
||||
| | -| 1.38x|
|
||||
---
|
||||
vm_exec.c | 8 ++++++++
|
||||
1 file changed, 8 insertions(+)
|
||||
|
||||
diff --git a/vm_exec.c b/vm_exec.c
|
||||
index ce2e053ee745..7aa56f6ad620 100644
|
||||
--- a/vm_exec.c
|
||||
+++ b/vm_exec.c
|
||||
@@ -27,6 +27,9 @@ static void vm_insns_counter_count_insn(int insn) {}
|
||||
#elif defined(__GNUC__) && defined(__powerpc64__)
|
||||
#define DECL_SC_REG(type, r, reg) register type reg_##r __asm__("r" reg)
|
||||
|
||||
+#elif defined(__GNUC__) && defined(__aarch64__)
|
||||
+#define DECL_SC_REG(type, r, reg) register type reg_##r __asm__("x" reg)
|
||||
+
|
||||
#else
|
||||
#define DECL_SC_REG(type, r, reg) register type reg_##r
|
||||
#endif
|
||||
@@ -74,6 +77,11 @@ vm_exec_core(rb_execution_context_t *ec, VALUE initial)
|
||||
DECL_SC_REG(rb_control_frame_t *, cfp, "15");
|
||||
#define USE_MACHINE_REGS 1
|
||||
|
||||
+#elif defined(__GNUC__) && defined(__aarch64__)
|
||||
+ DECL_SC_REG(const VALUE *, pc, "19");
|
||||
+ DECL_SC_REG(rb_control_frame_t *, cfp, "20");
|
||||
+#define USE_MACHINE_REGS 1
|
||||
+
|
||||
#else
|
||||
register rb_control_frame_t *reg_cfp;
|
||||
const VALUE *reg_pc;
|
@ -1,39 +0,0 @@
|
||||
/* 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);
|
||||
}
|
296
rubygems-1.8.11-binary-extensions.patch
Normal file
296
rubygems-1.8.11-binary-extensions.patch
Normal file
@ -0,0 +1,296 @@
|
||||
From 5a37a3489491a33f2e7011043fbbcd9a765e1777 Mon Sep 17 00:00:00 2001
|
||||
From: =?UTF-8?q?V=C3=ADt=20Ondruch?= <vondruch@redhat.com>
|
||||
Date: Thu, 3 Nov 2011 16:43:05 +0100
|
||||
Subject: [PATCH 1/6] Add dedicate extensions folder into $LOAD_PATH.
|
||||
|
||||
---
|
||||
lib/rubygems/specification.rb | 37 ++++++++++++++++++++++++++++++-------
|
||||
1 files changed, 30 insertions(+), 7 deletions(-)
|
||||
|
||||
diff --git a/lib/rubygems/specification.rb b/lib/rubygems/specification.rb
|
||||
index 97db19e..263e7d3 100644
|
||||
--- a/lib/rubygems/specification.rb
|
||||
+++ b/lib/rubygems/specification.rb
|
||||
@@ -843,6 +843,12 @@ class Gem::Specification
|
||||
File.join full_gem_path, path
|
||||
end
|
||||
|
||||
+ unless extensions.empty?
|
||||
+ paths += require_paths.map do |path|
|
||||
+ File.join ext_dir, path
|
||||
+ end
|
||||
+ end
|
||||
+
|
||||
# gem directories must come after -I and ENV['RUBYLIB']
|
||||
insert_index = Gem.load_path_insert_index
|
||||
|
||||
@@ -954,16 +960,16 @@ class Gem::Specification
|
||||
|
||||
def contains_requirable_file? file
|
||||
root = full_gem_path
|
||||
+ ext = ext_dir
|
||||
+
|
||||
+ require_paths.any? do |lib|
|
||||
+ base = ["#{root}/#{lib}/#{file}"]
|
||||
+ base << "#{ext}/#{lib}/#{file}" unless extensions.empty?
|
||||
|
||||
- require_paths.each do |lib|
|
||||
- base = "#{root}/#{lib}/#{file}"
|
||||
- Gem.suffixes.each do |suf|
|
||||
- path = "#{base}#{suf}"
|
||||
- return true if File.file? path
|
||||
+ base.any? do |path|
|
||||
+ Gem.suffixes.any? { |suf| File.file? "#{path}#{suf}" }
|
||||
end
|
||||
end
|
||||
-
|
||||
- return false
|
||||
end
|
||||
|
||||
##
|
||||
@@ -1273,6 +1279,23 @@ class Gem::Specification
|
||||
end
|
||||
|
||||
##
|
||||
+ # Returns the full path to this spec's ext directory.
|
||||
+ # eg: /usr/local/lib/ruby/1.8/exts/mygem-1.0
|
||||
+
|
||||
+ def ext_dir
|
||||
+ @gem_dir ||= File.expand_path File.join(exts_dir, full_name)
|
||||
+ end
|
||||
+
|
||||
+ ##
|
||||
+ # Returns the full path to the exts directory containing this spec's
|
||||
+ # gem directory. eg: /usr/local/lib/ruby/1.8/exts
|
||||
+
|
||||
+ def exts_dir
|
||||
+ # TODO: this logic seems terribly broken, but tests fail if just base_dir
|
||||
+ @exts_dir ||= File.join(loaded_from && base_dir || Gem.dir, "exts")
|
||||
+ end
|
||||
+
|
||||
+ ##
|
||||
# Deprecated and ignored, defaults to true.
|
||||
#
|
||||
# Formerly used to indicate this gem was RDoc-capable.
|
||||
--
|
||||
1.7.7.3
|
||||
|
||||
|
||||
From 671e4285bf9db948bc5f054d7d3d931cdd7a17f8 Mon Sep 17 00:00:00 2001
|
||||
From: =?UTF-8?q?V=C3=ADt=20Ondruch?= <vondruch@redhat.com>
|
||||
Date: Wed, 16 Nov 2011 13:26:48 +0100
|
||||
Subject: [PATCH 2/6] Use spec's ext dir for extension installation.
|
||||
|
||||
---
|
||||
lib/rubygems/installer.rb | 2 +-
|
||||
lib/rubygems/specification.rb | 7 +++----
|
||||
2 files changed, 4 insertions(+), 5 deletions(-)
|
||||
|
||||
diff --git a/lib/rubygems/installer.rb b/lib/rubygems/installer.rb
|
||||
index 74d803d..0063c7f 100644
|
||||
--- a/lib/rubygems/installer.rb
|
||||
+++ b/lib/rubygems/installer.rb
|
||||
@@ -499,7 +499,7 @@ TEXT
|
||||
def build_extensions
|
||||
return if spec.extensions.empty?
|
||||
say "Building native extensions. This could take a while..."
|
||||
- dest_path = File.join gem_dir, spec.require_paths.first
|
||||
+ dest_path = spec.ext_dir
|
||||
ran_rake = false # only run rake once
|
||||
|
||||
spec.extensions.each do |extension|
|
||||
diff --git a/lib/rubygems/specification.rb b/lib/rubygems/specification.rb
|
||||
index 263e7d3..d31b93b 100644
|
||||
--- a/lib/rubygems/specification.rb
|
||||
+++ b/lib/rubygems/specification.rb
|
||||
@@ -1283,16 +1283,15 @@ class Gem::Specification
|
||||
# eg: /usr/local/lib/ruby/1.8/exts/mygem-1.0
|
||||
|
||||
def ext_dir
|
||||
- @gem_dir ||= File.expand_path File.join(exts_dir, full_name)
|
||||
+ @ext_dir ||= File.join exts_dir, full_name, require_paths.first
|
||||
end
|
||||
|
||||
##
|
||||
# Returns the full path to the exts directory containing this spec's
|
||||
- # gem directory. eg: /usr/local/lib/ruby/1.8/exts
|
||||
+ # gem directory. eg: /usr/local/lib/ruby/1.8/gems
|
||||
|
||||
def exts_dir
|
||||
- # TODO: this logic seems terribly broken, but tests fail if just base_dir
|
||||
- @exts_dir ||= File.join(loaded_from && base_dir || Gem.dir, "exts")
|
||||
+ @exts_dir ||= gems_dir
|
||||
end
|
||||
|
||||
##
|
||||
--
|
||||
1.7.7.3
|
||||
|
||||
|
||||
From 11b4a0cbadd8b1d3320f838881aa60feb6f848e7 Mon Sep 17 00:00:00 2001
|
||||
From: =?UTF-8?q?V=C3=ADt=20Ondruch?= <vondruch@redhat.com>
|
||||
Date: Wed, 16 Nov 2011 14:52:16 +0100
|
||||
Subject: [PATCH 3/6] Simplify the extending of $LOAD_PATH for binary gems.
|
||||
|
||||
---
|
||||
lib/rubygems/specification.rb | 11 +++++------
|
||||
1 files changed, 5 insertions(+), 6 deletions(-)
|
||||
|
||||
diff --git a/lib/rubygems/specification.rb b/lib/rubygems/specification.rb
|
||||
index d31b93b..e65ea2d 100644
|
||||
--- a/lib/rubygems/specification.rb
|
||||
+++ b/lib/rubygems/specification.rb
|
||||
@@ -843,11 +843,7 @@ class Gem::Specification
|
||||
File.join full_gem_path, path
|
||||
end
|
||||
|
||||
- unless extensions.empty?
|
||||
- paths += require_paths.map do |path|
|
||||
- File.join ext_dir, path
|
||||
- end
|
||||
- end
|
||||
+ paths << ext_dir unless extensions.empty? || paths.include?(ext_dir)
|
||||
|
||||
# gem directories must come after -I and ENV['RUBYLIB']
|
||||
insert_index = Gem.load_path_insert_index
|
||||
@@ -1291,7 +1287,10 @@ class Gem::Specification
|
||||
# gem directory. eg: /usr/local/lib/ruby/1.8/gems
|
||||
|
||||
def exts_dir
|
||||
- @exts_dir ||= gems_dir
|
||||
+ @exts_dir ||= begin
|
||||
+ dirs = Gem.default_dirs.detect {|location, paths| paths[:gem_dir] == base_dir}
|
||||
+ dirs ? File.join(dirs.last[:ext_dir], 'exts') : gems_dir
|
||||
+ end
|
||||
end
|
||||
|
||||
##
|
||||
--
|
||||
1.7.7.3
|
||||
|
||||
|
||||
From 5d46cd2b1ac9517a9cbcfa430261e62bb3a376b8 Mon Sep 17 00:00:00 2001
|
||||
From: =?UTF-8?q?V=C3=ADt=20Ondruch?= <vondruch@redhat.com>
|
||||
Date: Fri, 9 Dec 2011 16:31:04 +0100
|
||||
Subject: [PATCH 4/6] Fix the binary extension search path construction.
|
||||
|
||||
---
|
||||
lib/rubygems/installer.rb | 2 +-
|
||||
lib/rubygems/specification.rb | 4 ++--
|
||||
2 files changed, 3 insertions(+), 3 deletions(-)
|
||||
|
||||
diff --git a/lib/rubygems/installer.rb b/lib/rubygems/installer.rb
|
||||
index 0063c7f..83b8fd5 100644
|
||||
--- a/lib/rubygems/installer.rb
|
||||
+++ b/lib/rubygems/installer.rb
|
||||
@@ -499,7 +499,7 @@ TEXT
|
||||
def build_extensions
|
||||
return if spec.extensions.empty?
|
||||
say "Building native extensions. This could take a while..."
|
||||
- dest_path = spec.ext_dir
|
||||
+ dest_path = File.join spec.ext_dir, spec.require_paths.first
|
||||
ran_rake = false # only run rake once
|
||||
|
||||
spec.extensions.each do |extension|
|
||||
diff --git a/lib/rubygems/specification.rb b/lib/rubygems/specification.rb
|
||||
index e65ea2d..8be2ade 100644
|
||||
--- a/lib/rubygems/specification.rb
|
||||
+++ b/lib/rubygems/specification.rb
|
||||
@@ -843,7 +843,7 @@ class Gem::Specification
|
||||
File.join full_gem_path, path
|
||||
end
|
||||
|
||||
- paths << ext_dir unless extensions.empty? || paths.include?(ext_dir)
|
||||
+ paths << File.join(ext_dir, require_paths.first) unless extensions.empty? || (ext_dir == full_gem_path)
|
||||
|
||||
# gem directories must come after -I and ENV['RUBYLIB']
|
||||
insert_index = Gem.load_path_insert_index
|
||||
@@ -1279,7 +1279,7 @@ class Gem::Specification
|
||||
# eg: /usr/local/lib/ruby/1.8/exts/mygem-1.0
|
||||
|
||||
def ext_dir
|
||||
- @ext_dir ||= File.join exts_dir, full_name, require_paths.first
|
||||
+ @ext_dir ||= File.join exts_dir, full_name
|
||||
end
|
||||
|
||||
##
|
||||
--
|
||||
1.7.7.3
|
||||
|
||||
|
||||
From 6229583633802b45e5a3e5689ab9077347cd9ef7 Mon Sep 17 00:00:00 2001
|
||||
From: =?UTF-8?q?V=C3=ADt=20Ondruch?= <vondruch@redhat.com>
|
||||
Date: Tue, 13 Dec 2011 12:14:54 +0100
|
||||
Subject: [PATCH 5/6] Remove binary extensions during uninstall.
|
||||
|
||||
---
|
||||
lib/rubygems/uninstaller.rb | 1 +
|
||||
1 files changed, 1 insertions(+), 0 deletions(-)
|
||||
|
||||
diff --git a/lib/rubygems/uninstaller.rb b/lib/rubygems/uninstaller.rb
|
||||
index cc32ea4..94d78e0 100644
|
||||
--- a/lib/rubygems/uninstaller.rb
|
||||
+++ b/lib/rubygems/uninstaller.rb
|
||||
@@ -213,6 +213,7 @@ class Gem::Uninstaller
|
||||
File.writable?(spec.base_dir)
|
||||
|
||||
FileUtils.rm_rf spec.full_gem_path
|
||||
+ FileUtils.rm_rf spec.ext_dir
|
||||
|
||||
# TODO: should this be moved to spec?... I vote eww (also exists in docmgr)
|
||||
old_platform_name = [spec.name,
|
||||
--
|
||||
1.7.7.3
|
||||
|
||||
|
||||
From bc40e1b9f60a9a04456e3504ffe6ee600b6da269 Mon Sep 17 00:00:00 2001
|
||||
From: =?UTF-8?q?V=C3=ADt=20Ondruch?= <vondruch@redhat.com>
|
||||
Date: Tue, 13 Dec 2011 14:27:14 +0100
|
||||
Subject: [PATCH 6/6] Avoid dependency on customized operating_system.rb.
|
||||
|
||||
---
|
||||
lib/rubygems/defaults.rb | 11 +++++++++++
|
||||
lib/rubygems/specification.rb | 5 +----
|
||||
2 files changed, 12 insertions(+), 4 deletions(-)
|
||||
|
||||
diff --git a/lib/rubygems/defaults.rb b/lib/rubygems/defaults.rb
|
||||
index 20b4198..6d8711f 100644
|
||||
--- a/lib/rubygems/defaults.rb
|
||||
+++ b/lib/rubygems/defaults.rb
|
||||
@@ -87,6 +87,17 @@ module Gem
|
||||
end
|
||||
|
||||
##
|
||||
+ # Returns binary extensions dir for specified RubyGems base dir or nil
|
||||
+ # if such directory cannot be determined.
|
||||
+ #
|
||||
+ # By default, the binary extensions are located side by side with their
|
||||
+ # Ruby counterparts, therefore nil is returned
|
||||
+
|
||||
+ def self.default_ext_dir_for base_dir
|
||||
+ nil
|
||||
+ end
|
||||
+
|
||||
+ ##
|
||||
# The default system-wide source info cache directory
|
||||
|
||||
def self.default_system_source_cache_dir
|
||||
diff --git a/lib/rubygems/specification.rb b/lib/rubygems/specification.rb
|
||||
index 8be2ade..f54210a 100644
|
||||
--- a/lib/rubygems/specification.rb
|
||||
+++ b/lib/rubygems/specification.rb
|
||||
@@ -1287,10 +1287,7 @@ class Gem::Specification
|
||||
# gem directory. eg: /usr/local/lib/ruby/1.8/gems
|
||||
|
||||
def exts_dir
|
||||
- @exts_dir ||= begin
|
||||
- dirs = Gem.default_dirs.detect {|location, paths| paths[:gem_dir] == base_dir}
|
||||
- dirs ? File.join(dirs.last[:ext_dir], 'exts') : gems_dir
|
||||
- end
|
||||
+ @exts_dir ||= Gem.default_ext_dir_for(base_dir) || gems_dir
|
||||
end
|
||||
|
||||
##
|
||||
--
|
||||
1.7.7.3
|
||||
|
@ -1,167 +0,0 @@
|
||||
From 912d141a351053d0f6d915b5e7807f6a8f4c0631 Mon Sep 17 00:00:00 2001
|
||||
From: =?UTF-8?q?David=20Rodr=C3=ADguez?= <deivid.rodriguez@riseup.net>
|
||||
Date: Tue, 4 Feb 2020 17:25:56 +0100
|
||||
Subject: [PATCH 1/2] Make non "test_" method private
|
||||
|
||||
---
|
||||
test/rubygems/test_require.rb | 2 ++
|
||||
1 file changed, 2 insertions(+)
|
||||
|
||||
diff --git a/test/rubygems/test_require.rb b/test/rubygems/test_require.rb
|
||||
index aa2675af5d..d618a93473 100644
|
||||
--- a/test/rubygems/test_require.rb
|
||||
+++ b/test/rubygems/test_require.rb
|
||||
@@ -532,6 +532,8 @@ def test_require_bundler_with_bundler_version
|
||||
end
|
||||
end
|
||||
|
||||
+ private
|
||||
+
|
||||
def silence_warnings
|
||||
old_verbose, $VERBOSE = $VERBOSE, false
|
||||
yield
|
||||
|
||||
From b3944384f44b869985051863d8b05b545d09a585 Mon Sep 17 00:00:00 2001
|
||||
From: =?UTF-8?q?David=20Rodr=C3=ADguez?= <deivid.rodriguez@riseup.net>
|
||||
Date: Tue, 4 Feb 2020 17:26:28 +0100
|
||||
Subject: [PATCH 2/2] Fix require issue with file extension priority
|
||||
|
||||
If `require "a"` is run when two folders have been specified in the -I
|
||||
option including a "a.rb" file and a "a.so" file respectively, the ruby
|
||||
spec says that the ".rb" file should always be preferred. However, the
|
||||
logic we added in https://github.com/rubygems/rubygems/commit/6b81076d9
|
||||
to make the -I option always beat default gems does not respect this
|
||||
spec, creating a difference from the original ruby-core's require.
|
||||
|
||||
[the ruby spec says]: https://github.com/ruby/spec/blob/d80a6e2b221d4f17a8cadcac75ef950c59cba901/core/kernel/shared/require.rb#L234-L246
|
||||
---
|
||||
lib/rubygems/core_ext/kernel_require.rb | 28 +++++------
|
||||
test/rubygems/test_require.rb | 62 +++++++++++++++++++++++++
|
||||
2 files changed, 74 insertions(+), 16 deletions(-)
|
||||
|
||||
diff --git a/lib/rubygems/core_ext/kernel_require.rb b/lib/rubygems/core_ext/kernel_require.rb
|
||||
index 60f4d18712..369f2c743e 100644
|
||||
--- a/lib/rubygems/core_ext/kernel_require.rb
|
||||
+++ b/lib/rubygems/core_ext/kernel_require.rb
|
||||
@@ -43,18 +43,18 @@ def require(path)
|
||||
# https://github.com/rubygems/rubygems/pull/1868
|
||||
resolved_path = begin
|
||||
rp = nil
|
||||
- $LOAD_PATH[0...Gem.load_path_insert_index || -1].each do |lp|
|
||||
- safe_lp = lp.dup.tap(&Gem::UNTAINT)
|
||||
- begin
|
||||
- if File.symlink? safe_lp # for backward compatibility
|
||||
- next
|
||||
+ Gem.suffixes.each do |s|
|
||||
+ $LOAD_PATH[0...Gem.load_path_insert_index || -1].each do |lp|
|
||||
+ safe_lp = lp.dup.tap(&Gem::UNTAINT)
|
||||
+ begin
|
||||
+ if File.symlink? safe_lp # for backward compatibility
|
||||
+ next
|
||||
+ end
|
||||
+ rescue SecurityError
|
||||
+ RUBYGEMS_ACTIVATION_MONITOR.exit
|
||||
+ raise
|
||||
end
|
||||
- rescue SecurityError
|
||||
- RUBYGEMS_ACTIVATION_MONITOR.exit
|
||||
- raise
|
||||
- end
|
||||
|
||||
- Gem.suffixes.each do |s|
|
||||
full_path = File.expand_path(File.join(safe_lp, "#{path}#{s}"))
|
||||
if File.file?(full_path)
|
||||
rp = full_path
|
||||
@@ -67,12 +67,8 @@ def require(path)
|
||||
end
|
||||
|
||||
if resolved_path
|
||||
- begin
|
||||
- RUBYGEMS_ACTIVATION_MONITOR.exit
|
||||
- return gem_original_require(resolved_path)
|
||||
- rescue LoadError
|
||||
- RUBYGEMS_ACTIVATION_MONITOR.enter
|
||||
- end
|
||||
+ RUBYGEMS_ACTIVATION_MONITOR.exit
|
||||
+ return gem_original_require(resolved_path)
|
||||
end
|
||||
|
||||
if spec = Gem.find_unresolved_default_spec(path)
|
||||
diff --git a/test/rubygems/test_require.rb b/test/rubygems/test_require.rb
|
||||
index d618a93473..7cffbfa7fe 100644
|
||||
--- a/test/rubygems/test_require.rb
|
||||
+++ b/test/rubygems/test_require.rb
|
||||
@@ -120,6 +120,24 @@ def test_dash_i_beats_default_gems
|
||||
Object.send :remove_const, :HELLO if Object.const_defined? :HELLO
|
||||
end
|
||||
|
||||
+ def test_dash_i_respects_default_library_extension_priority
|
||||
+ skip "extensions don't quite work on jruby" if Gem.java_platform?
|
||||
+
|
||||
+ dash_i_ext_arg = util_install_extension_file('a')
|
||||
+ dash_i_lib_arg = util_install_ruby_file('a')
|
||||
+
|
||||
+ lp = $LOAD_PATH.dup
|
||||
+
|
||||
+ begin
|
||||
+ $LOAD_PATH.unshift dash_i_lib_arg
|
||||
+ $LOAD_PATH.unshift dash_i_ext_arg
|
||||
+ assert_require 'a'
|
||||
+ assert_match(/a\.rb$/, $LOADED_FEATURES.last)
|
||||
+ ensure
|
||||
+ $LOAD_PATH.replace lp
|
||||
+ end
|
||||
+ end
|
||||
+
|
||||
def test_concurrent_require
|
||||
Object.const_set :FILE_ENTERED_LATCH, Latch.new(2)
|
||||
Object.const_set :FILE_EXIT_LATCH, Latch.new(1)
|
||||
@@ -541,4 +559,48 @@ def silence_warnings
|
||||
$VERBOSE = old_verbose
|
||||
end
|
||||
|
||||
+ def util_install_extension_file(name)
|
||||
+ spec = quick_gem name
|
||||
+ util_build_gem spec
|
||||
+
|
||||
+ spec.extensions << "extconf.rb"
|
||||
+ write_file File.join(@tempdir, "extconf.rb") do |io|
|
||||
+ io.write <<-RUBY
|
||||
+ require "mkmf"
|
||||
+ create_makefile("#{name}")
|
||||
+ RUBY
|
||||
+ end
|
||||
+
|
||||
+ write_file File.join(@tempdir, "#{name}.c") do |io|
|
||||
+ io.write <<-C
|
||||
+ #include <ruby.h>
|
||||
+ void Init_#{name}() { }
|
||||
+ C
|
||||
+ end
|
||||
+
|
||||
+ spec.files += ["extconf.rb", "#{name}.c"]
|
||||
+
|
||||
+ so = File.join(spec.gem_dir, "#{name}.#{RbConfig::CONFIG["DLEXT"]}")
|
||||
+ refute_path_exists so
|
||||
+
|
||||
+ path = Gem::Package.build spec
|
||||
+ installer = Gem::Installer.at path
|
||||
+ installer.install
|
||||
+ assert_path_exists so
|
||||
+
|
||||
+ spec.gem_dir
|
||||
+ end
|
||||
+
|
||||
+ def util_install_ruby_file(name)
|
||||
+ dir_lib = Dir.mktmpdir("test_require_lib", @tempdir)
|
||||
+ dash_i_lib_arg = File.join dir_lib
|
||||
+
|
||||
+ a_rb = File.join dash_i_lib_arg, "#{name}.rb"
|
||||
+
|
||||
+ FileUtils.mkdir_p File.dirname a_rb
|
||||
+ File.open(a_rb, 'w') { |f| f.write "# #{name}.rb" }
|
||||
+
|
||||
+ dash_i_lib_arg
|
||||
+ end
|
||||
+
|
||||
end
|
@ -1,324 +0,0 @@
|
||||
From 00d98eb8a3245fb93a475ecbbbc4c7ec7e6704cd Mon Sep 17 00:00:00 2001
|
||||
From: =?UTF-8?q?David=20Rodr=C3=ADguez?= <deivid.rodriguez@riseup.net>
|
||||
Date: Tue, 19 May 2020 14:00:00 +0200
|
||||
Subject: [PATCH 1/5] Fix performance regression in `require`
|
||||
|
||||
Our check for `-I` paths should not go through all activated gems.
|
||||
---
|
||||
lib/rubygems.rb | 10 ++++++++++
|
||||
lib/rubygems/core_ext/kernel_require.rb | 2 +-
|
||||
lib/rubygems/test_case.rb | 1 +
|
||||
test/rubygems/test_require.rb | 11 +++++++++++
|
||||
4 files changed, 23 insertions(+), 1 deletion(-)
|
||||
|
||||
diff --git a/lib/rubygems.rb b/lib/rubygems.rb
|
||||
index 843cb49e4a..d1a9a1c7e1 100644
|
||||
--- a/lib/rubygems.rb
|
||||
+++ b/lib/rubygems.rb
|
||||
@@ -662,10 +662,20 @@ def self.load_path_insert_index
|
||||
index
|
||||
end
|
||||
|
||||
+ ##
|
||||
+ # The number of paths in the `$LOAD_PATH` from activated gems. Used to
|
||||
+ # prioritize `-I` and `ENV['RUBYLIB`]` entries during `require`.
|
||||
+
|
||||
+ def self.activated_gem_paths
|
||||
+ @activated_gem_paths ||= 0
|
||||
+ end
|
||||
+
|
||||
##
|
||||
# Add a list of paths to the $LOAD_PATH at the proper place.
|
||||
|
||||
def self.add_to_load_path(*paths)
|
||||
+ @activated_gem_paths = activated_gem_paths + paths.size
|
||||
+
|
||||
insert_index = load_path_insert_index
|
||||
|
||||
if insert_index
|
||||
diff --git a/lib/rubygems/core_ext/kernel_require.rb b/lib/rubygems/core_ext/kernel_require.rb
|
||||
index ed24111bd5..7625ce1bee 100644
|
||||
--- a/lib/rubygems/core_ext/kernel_require.rb
|
||||
+++ b/lib/rubygems/core_ext/kernel_require.rb
|
||||
@@ -47,7 +47,7 @@ def require(path)
|
||||
load_path_insert_index = Gem.load_path_insert_index
|
||||
break unless load_path_insert_index
|
||||
|
||||
- $LOAD_PATH[0...load_path_insert_index].each do |lp|
|
||||
+ $LOAD_PATH[0...load_path_insert_index - Gem.activated_gem_paths].each do |lp|
|
||||
safe_lp = lp.dup.tap(&Gem::UNTAINT)
|
||||
begin
|
||||
if File.symlink? safe_lp # for backward compatibility
|
||||
diff --git a/lib/rubygems/test_case.rb b/lib/rubygems/test_case.rb
|
||||
index a05a2898d1..53dd495aef 100644
|
||||
--- a/lib/rubygems/test_case.rb
|
||||
+++ b/lib/rubygems/test_case.rb
|
||||
@@ -385,6 +385,7 @@ def setup
|
||||
Gem::Security.reset
|
||||
|
||||
Gem.loaded_specs.clear
|
||||
+ Gem.instance_variable_set(:@activated_gem_paths, 0)
|
||||
Gem.clear_default_specs
|
||||
Bundler.reset!
|
||||
|
||||
diff --git a/test/rubygems/test_require.rb b/test/rubygems/test_require.rb
|
||||
index f36892f8cc..9f2fe3439a 100644
|
||||
--- a/test/rubygems/test_require.rb
|
||||
+++ b/test/rubygems/test_require.rb
|
||||
@@ -382,6 +382,17 @@ def test_default_gem_require_activates_just_once
|
||||
assert_equal 0, times_called
|
||||
end
|
||||
|
||||
+ def test_second_gem_require_does_not_resolve_path_manually_before_going_through_standard_require
|
||||
+ a1 = util_spec "a", "1", nil, "lib/test_gem_require_a.rb"
|
||||
+ install_gem a1
|
||||
+
|
||||
+ assert_require "test_gem_require_a"
|
||||
+
|
||||
+ stub(:gem_original_require, ->(path) { assert_equal "test_gem_require_a", path }) do
|
||||
+ require "test_gem_require_a"
|
||||
+ end
|
||||
+ end
|
||||
+
|
||||
def test_realworld_default_gem
|
||||
testing_ruby_repo = !ENV["GEM_COMMAND"].nil?
|
||||
skip "this test can't work under ruby-core setup" if testing_ruby_repo || java_platform?
|
||||
|
||||
From ae95885dff6189c5ac59bbdf685cb4ec4751fdef Mon Sep 17 00:00:00 2001
|
||||
From: =?UTF-8?q?David=20Rodr=C3=ADguez?= <deivid.rodriguez@riseup.net>
|
||||
Date: Tue, 19 May 2020 14:08:19 +0200
|
||||
Subject: [PATCH 2/5] Refactor `Gem.load_path_insert_index`
|
||||
|
||||
---
|
||||
lib/rubygems.rb | 13 +++----------
|
||||
lib/rubygems/core_ext/kernel_require.rb | 5 +----
|
||||
2 files changed, 4 insertions(+), 14 deletions(-)
|
||||
|
||||
diff --git a/lib/rubygems.rb b/lib/rubygems.rb
|
||||
index d1a9a1c7e1..ca80326459 100644
|
||||
--- a/lib/rubygems.rb
|
||||
+++ b/lib/rubygems.rb
|
||||
@@ -659,7 +659,7 @@ def self.load_path_insert_index
|
||||
|
||||
index = $LOAD_PATH.index RbConfig::CONFIG['sitelibdir']
|
||||
|
||||
- index
|
||||
+ index || 0
|
||||
end
|
||||
|
||||
##
|
||||
@@ -676,15 +676,8 @@ def self.activated_gem_paths
|
||||
def self.add_to_load_path(*paths)
|
||||
@activated_gem_paths = activated_gem_paths + paths.size
|
||||
|
||||
- insert_index = load_path_insert_index
|
||||
-
|
||||
- if insert_index
|
||||
- # gem directories must come after -I and ENV['RUBYLIB']
|
||||
- $LOAD_PATH.insert(insert_index, *paths)
|
||||
- else
|
||||
- # we are probably testing in core, -I and RUBYLIB don't apply
|
||||
- $LOAD_PATH.unshift(*paths)
|
||||
- end
|
||||
+ # gem directories must come after -I and ENV['RUBYLIB']
|
||||
+ $LOAD_PATH.insert(Gem.load_path_insert_index, *paths)
|
||||
end
|
||||
|
||||
@yaml_loaded = false
|
||||
diff --git a/lib/rubygems/core_ext/kernel_require.rb b/lib/rubygems/core_ext/kernel_require.rb
|
||||
index 7625ce1bee..decf4829f1 100644
|
||||
--- a/lib/rubygems/core_ext/kernel_require.rb
|
||||
+++ b/lib/rubygems/core_ext/kernel_require.rb
|
||||
@@ -44,10 +44,7 @@ def require(path)
|
||||
resolved_path = begin
|
||||
rp = nil
|
||||
Gem.suffixes.each do |s|
|
||||
- load_path_insert_index = Gem.load_path_insert_index
|
||||
- break unless load_path_insert_index
|
||||
-
|
||||
- $LOAD_PATH[0...load_path_insert_index - Gem.activated_gem_paths].each do |lp|
|
||||
+ $LOAD_PATH[0...Gem.load_path_insert_index - Gem.activated_gem_paths].each do |lp|
|
||||
safe_lp = lp.dup.tap(&Gem::UNTAINT)
|
||||
begin
|
||||
if File.symlink? safe_lp # for backward compatibility
|
||||
|
||||
From da1492e9d7b28d068fbfbb0ba1cafcc516681567 Mon Sep 17 00:00:00 2001
|
||||
From: =?UTF-8?q?David=20Rodr=C3=ADguez?= <deivid.rodriguez@riseup.net>
|
||||
Date: Tue, 19 May 2020 14:32:12 +0200
|
||||
Subject: [PATCH 3/5] Extract a local outside the loop
|
||||
|
||||
---
|
||||
lib/rubygems/core_ext/kernel_require.rb | 3 ++-
|
||||
1 file changed, 2 insertions(+), 1 deletion(-)
|
||||
|
||||
diff --git a/lib/rubygems/core_ext/kernel_require.rb b/lib/rubygems/core_ext/kernel_require.rb
|
||||
index decf4829f1..6a7faaf2d1 100644
|
||||
--- a/lib/rubygems/core_ext/kernel_require.rb
|
||||
+++ b/lib/rubygems/core_ext/kernel_require.rb
|
||||
@@ -43,8 +43,9 @@ def require(path)
|
||||
# https://github.com/rubygems/rubygems/pull/1868
|
||||
resolved_path = begin
|
||||
rp = nil
|
||||
+ load_path_check_index = Gem.load_path_insert_index - Gem.activated_gem_paths
|
||||
Gem.suffixes.each do |s|
|
||||
- $LOAD_PATH[0...Gem.load_path_insert_index - Gem.activated_gem_paths].each do |lp|
|
||||
+ $LOAD_PATH[0...load_path_check_index].each do |lp|
|
||||
safe_lp = lp.dup.tap(&Gem::UNTAINT)
|
||||
begin
|
||||
if File.symlink? safe_lp # for backward compatibility
|
||||
|
||||
From 22ad5717c38feda2375b53628d15ae3db2195684 Mon Sep 17 00:00:00 2001
|
||||
From: =?UTF-8?q?David=20Rodr=C3=ADguez?= <deivid.rodriguez@riseup.net>
|
||||
Date: Thu, 21 May 2020 15:20:57 +0200
|
||||
Subject: [PATCH 4/5] Fix `$LOADED_FEATURES` cache sometimes not respected
|
||||
|
||||
In the cases where the initial manually `-I` path resolution succeeded,
|
||||
we were passing a full path to the original require effectively skipping
|
||||
the `$LOADED_FEATURES` cache. With this change, we _only_ do the
|
||||
resolution when a matching requirable path is found in a default gem. In
|
||||
that case, we skip activation of the default gem if we detect that the
|
||||
required file will be picked up for a `-I` path.
|
||||
---
|
||||
lib/rubygems/core_ext/kernel_require.rb | 53 +++++++++++--------------
|
||||
test/rubygems/test_require.rb | 29 ++++++++++++++
|
||||
2 files changed, 53 insertions(+), 29 deletions(-)
|
||||
|
||||
diff --git a/lib/rubygems/core_ext/kernel_require.rb b/lib/rubygems/core_ext/kernel_require.rb
|
||||
index 6a7faaf2d1..81e37b98bf 100644
|
||||
--- a/lib/rubygems/core_ext/kernel_require.rb
|
||||
+++ b/lib/rubygems/core_ext/kernel_require.rb
|
||||
@@ -39,46 +39,41 @@ def require(path)
|
||||
|
||||
path = path.to_path if path.respond_to? :to_path
|
||||
|
||||
- # Ensure -I beats a default gem
|
||||
- # https://github.com/rubygems/rubygems/pull/1868
|
||||
- resolved_path = begin
|
||||
- rp = nil
|
||||
- load_path_check_index = Gem.load_path_insert_index - Gem.activated_gem_paths
|
||||
- Gem.suffixes.each do |s|
|
||||
- $LOAD_PATH[0...load_path_check_index].each do |lp|
|
||||
- safe_lp = lp.dup.tap(&Gem::UNTAINT)
|
||||
- begin
|
||||
- if File.symlink? safe_lp # for backward compatibility
|
||||
- next
|
||||
+ if spec = Gem.find_unresolved_default_spec(path)
|
||||
+ # Ensure -I beats a default gem
|
||||
+ # https://github.com/rubygems/rubygems/pull/1868
|
||||
+ resolved_path = begin
|
||||
+ rp = nil
|
||||
+ load_path_check_index = Gem.load_path_insert_index - Gem.activated_gem_paths
|
||||
+ Gem.suffixes.each do |s|
|
||||
+ $LOAD_PATH[0...load_path_check_index].each do |lp|
|
||||
+ safe_lp = lp.dup.tap(&Gem::UNTAINT)
|
||||
+ begin
|
||||
+ if File.symlink? safe_lp # for backward compatibility
|
||||
+ next
|
||||
+ end
|
||||
+ rescue SecurityError
|
||||
+ RUBYGEMS_ACTIVATION_MONITOR.exit
|
||||
+ raise
|
||||
end
|
||||
- rescue SecurityError
|
||||
- RUBYGEMS_ACTIVATION_MONITOR.exit
|
||||
- raise
|
||||
- end
|
||||
|
||||
- full_path = File.expand_path(File.join(safe_lp, "#{path}#{s}"))
|
||||
- if File.file?(full_path)
|
||||
- rp = full_path
|
||||
- break
|
||||
+ full_path = File.expand_path(File.join(safe_lp, "#{path}#{s}"))
|
||||
+ if File.file?(full_path)
|
||||
+ rp = full_path
|
||||
+ break
|
||||
+ end
|
||||
end
|
||||
+ break if rp
|
||||
end
|
||||
- break if rp
|
||||
+ rp
|
||||
end
|
||||
- rp
|
||||
- end
|
||||
|
||||
- if resolved_path
|
||||
- RUBYGEMS_ACTIVATION_MONITOR.exit
|
||||
- return gem_original_require(resolved_path)
|
||||
- end
|
||||
-
|
||||
- if spec = Gem.find_unresolved_default_spec(path)
|
||||
begin
|
||||
Kernel.send(:gem, spec.name, Gem::Requirement.default_prerelease)
|
||||
rescue Exception
|
||||
RUBYGEMS_ACTIVATION_MONITOR.exit
|
||||
raise
|
||||
- end
|
||||
+ end unless resolved_path
|
||||
end
|
||||
|
||||
# If there are no unresolved deps, then we can use just try
|
||||
diff --git a/test/rubygems/test_require.rb b/test/rubygems/test_require.rb
|
||||
index 9f2fe3439a..2b11e26dfe 100644
|
||||
--- a/test/rubygems/test_require.rb
|
||||
+++ b/test/rubygems/test_require.rb
|
||||
@@ -45,6 +45,35 @@ def refute_require(path)
|
||||
refute require(path), "'#{path}' was not yet required"
|
||||
end
|
||||
|
||||
+ def test_respect_loaded_features_caching_like_standard_require
|
||||
+ dir = Dir.mktmpdir("test_require", @tempdir)
|
||||
+
|
||||
+ lp1 = File.join dir, 'foo1'
|
||||
+ foo1 = File.join lp1, 'foo.rb'
|
||||
+
|
||||
+ FileUtils.mkdir_p lp1
|
||||
+ File.open(foo1, 'w') { |f| f.write "class Object; HELLO = 'foo1' end" }
|
||||
+
|
||||
+ lp = $LOAD_PATH.dup
|
||||
+
|
||||
+ $LOAD_PATH.unshift lp1
|
||||
+ assert_require 'foo'
|
||||
+ assert_equal "foo1", ::Object::HELLO
|
||||
+
|
||||
+ lp2 = File.join dir, 'foo2'
|
||||
+ foo2 = File.join lp2, 'foo.rb'
|
||||
+
|
||||
+ FileUtils.mkdir_p lp2
|
||||
+ File.open(foo2, 'w') { |f| f.write "class Object; HELLO = 'foo2' end" }
|
||||
+
|
||||
+ $LOAD_PATH.unshift lp2
|
||||
+ refute_require 'foo'
|
||||
+ assert_equal "foo1", ::Object::HELLO
|
||||
+ ensure
|
||||
+ $LOAD_PATH.replace lp
|
||||
+ Object.send :remove_const, :HELLO if Object.const_defined? :HELLO
|
||||
+ end
|
||||
+
|
||||
# Providing -I on the commandline should always beat gems
|
||||
def test_dash_i_beats_gems
|
||||
a1 = util_spec "a", "1", {"b" => "= 1"}, "lib/test_gem_require_a.rb"
|
||||
|
||||
From db872c7a18d616f4447bdcca3130be6db9e5cb03 Mon Sep 17 00:00:00 2001
|
||||
From: =?UTF-8?q?David=20Rodr=C3=ADguez?= <deivid.rodriguez@riseup.net>
|
||||
Date: Sat, 23 May 2020 20:18:41 +0200
|
||||
Subject: [PATCH 5/5] Remove direct reference to PR
|
||||
|
||||
The code is quite different now, so I think the link might be even
|
||||
confusing. If you want to know more, use git history.
|
||||
---
|
||||
lib/rubygems/core_ext/kernel_require.rb | 1 -
|
||||
1 file changed, 1 deletion(-)
|
||||
|
||||
diff --git a/lib/rubygems/core_ext/kernel_require.rb b/lib/rubygems/core_ext/kernel_require.rb
|
||||
index 81e37b98bf..115ae0cb50 100644
|
||||
--- a/lib/rubygems/core_ext/kernel_require.rb
|
||||
+++ b/lib/rubygems/core_ext/kernel_require.rb
|
||||
@@ -41,7 +41,6 @@ def require(path)
|
||||
|
||||
if spec = Gem.find_unresolved_default_spec(path)
|
||||
# Ensure -I beats a default gem
|
||||
- # https://github.com/rubygems/rubygems/pull/1868
|
||||
resolved_path = begin
|
||||
rp = nil
|
||||
load_path_check_index = Gem.load_path_insert_index - Gem.activated_gem_paths
|
@ -1,92 +0,0 @@
|
||||
From c5197b2ab35ba389f48918e0c773b43b6dca2fa5 Mon Sep 17 00:00:00 2001
|
||||
From: =?UTF-8?q?David=20Rodr=C3=ADguez?= <deivid.rodriguez@riseup.net>
|
||||
Date: Fri, 7 Feb 2020 17:16:05 +0100
|
||||
Subject: [PATCH 1/3] Tweaks to get test passing more reliably
|
||||
|
||||
---
|
||||
test/rubygems/test_require.rb | 6 ++++--
|
||||
1 file changed, 4 insertions(+), 2 deletions(-)
|
||||
|
||||
diff --git a/test/rubygems/test_require.rb b/test/rubygems/test_require.rb
|
||||
index 7cffbfa7fe..67c55416d4 100644
|
||||
--- a/test/rubygems/test_require.rb
|
||||
+++ b/test/rubygems/test_require.rb
|
||||
@@ -567,18 +567,20 @@ def util_install_extension_file(name)
|
||||
write_file File.join(@tempdir, "extconf.rb") do |io|
|
||||
io.write <<-RUBY
|
||||
require "mkmf"
|
||||
+ CONFIG['LDSHARED'] = '$(TOUCH) $@ ||'
|
||||
create_makefile("#{name}")
|
||||
RUBY
|
||||
end
|
||||
|
||||
write_file File.join(@tempdir, "#{name}.c") do |io|
|
||||
io.write <<-C
|
||||
- #include <ruby.h>
|
||||
void Init_#{name}() { }
|
||||
C
|
||||
end
|
||||
|
||||
- spec.files += ["extconf.rb", "#{name}.c"]
|
||||
+ write_file File.join(@tempdir, "depend")
|
||||
+
|
||||
+ spec.files += ["extconf.rb", "depend", "#{name}.c"]
|
||||
|
||||
so = File.join(spec.gem_dir, "#{name}.#{RbConfig::CONFIG["DLEXT"]}")
|
||||
refute_path_exists so
|
||||
|
||||
From 7bfd7319cd751837c3ccaf1d97b02846eaaf39d5 Mon Sep 17 00:00:00 2001
|
||||
From: =?UTF-8?q?David=20Rodr=C3=ADguez?= <deivid.rodriguez@riseup.net>
|
||||
Date: Tue, 11 Feb 2020 11:56:06 +0100
|
||||
Subject: [PATCH 2/3] Fix bug bug calculating $LOAD_PATH's to check in
|
||||
`require`
|
||||
|
||||
In `Gem.load_path_insert_index` is not set, we end up having
|
||||
`$LOAD_PATH[0...-1]`, unintentionally skipping the last $LOAD_PATH entry
|
||||
from the check.
|
||||
|
||||
The correct thing to do in that case is to not even try since we have no
|
||||
way of distinguisng default LOAD_PATH entries from those added with -I.
|
||||
---
|
||||
lib/rubygems/core_ext/kernel_require.rb | 5 ++++-
|
||||
1 file changed, 4 insertions(+), 1 deletion(-)
|
||||
|
||||
diff --git a/lib/rubygems/core_ext/kernel_require.rb b/lib/rubygems/core_ext/kernel_require.rb
|
||||
index 369f2c743e..a8d170f13a 100644
|
||||
--- a/lib/rubygems/core_ext/kernel_require.rb
|
||||
+++ b/lib/rubygems/core_ext/kernel_require.rb
|
||||
@@ -44,7 +44,10 @@ def require(path)
|
||||
resolved_path = begin
|
||||
rp = nil
|
||||
Gem.suffixes.each do |s|
|
||||
- $LOAD_PATH[0...Gem.load_path_insert_index || -1].each do |lp|
|
||||
+ load_path_insert_index = Gem.load_path_insert_index
|
||||
+ break unless load_path_insert_index
|
||||
+
|
||||
+ $LOAD_PATH[0...load_path_insert_index].each do |lp|
|
||||
safe_lp = lp.dup.tap(&Gem::UNTAINT)
|
||||
begin
|
||||
if File.symlink? safe_lp # for backward compatibility
|
||||
|
||||
From 4fc0ab21c0f7713829abb522ce3b6d8e24c126b3 Mon Sep 17 00:00:00 2001
|
||||
From: =?UTF-8?q?David=20Rodr=C3=ADguez?= <deivid.rodriguez@riseup.net>
|
||||
Date: Fri, 14 Feb 2020 02:03:04 +0100
|
||||
Subject: [PATCH 3/3] Exclude empty suffix from `-I` require loop
|
||||
|
||||
---
|
||||
lib/rubygems/core_ext/kernel_require.rb | 2 +-
|
||||
1 file changed, 1 insertion(+), 1 deletion(-)
|
||||
|
||||
diff --git a/lib/rubygems/core_ext/kernel_require.rb b/lib/rubygems/core_ext/kernel_require.rb
|
||||
index a8d170f13a..9712fb6ac0 100644
|
||||
--- a/lib/rubygems/core_ext/kernel_require.rb
|
||||
+++ b/lib/rubygems/core_ext/kernel_require.rb
|
||||
@@ -43,7 +43,7 @@ def require(path)
|
||||
# https://github.com/rubygems/rubygems/pull/1868
|
||||
resolved_path = begin
|
||||
rp = nil
|
||||
- Gem.suffixes.each do |s|
|
||||
+ Gem.suffixes[1..-1].each do |s|
|
||||
load_path_insert_index = Gem.load_path_insert_index
|
||||
break unless load_path_insert_index
|
||||
|
@ -1,29 +0,0 @@
|
||||
From 301e30bf97dd603ca81d52b90186908575c4ddf8 Mon Sep 17 00:00:00 2001
|
||||
From: =?UTF-8?q?David=20Rodr=C3=ADguez?= <deivid.rodriguez@riseup.net>
|
||||
Date: Tue, 25 Feb 2020 15:01:44 +0100
|
||||
Subject: [PATCH] Revert "Exclude empty suffix from `-I` require loop"
|
||||
|
||||
This reverts commit 4fc0ab21c0f7713829abb522ce3b6d8e24c126b3.
|
||||
|
||||
Technically, extensionless ruby files are valid ruby files that can be
|
||||
required. For example, `bin/bundle` is sometimes required from other
|
||||
binstubs even if it's also runnable directly.
|
||||
|
||||
So, we should technically consider this kind of files too.
|
||||
---
|
||||
lib/rubygems/core_ext/kernel_require.rb | 2 +-
|
||||
1 file changed, 1 insertion(+), 1 deletion(-)
|
||||
|
||||
diff --git a/lib/rubygems/core_ext/kernel_require.rb b/lib/rubygems/core_ext/kernel_require.rb
|
||||
index 9712fb6ac0..a8d170f13a 100644
|
||||
--- a/lib/rubygems/core_ext/kernel_require.rb
|
||||
+++ b/lib/rubygems/core_ext/kernel_require.rb
|
||||
@@ -43,7 +43,7 @@ def require(path)
|
||||
# https://github.com/rubygems/rubygems/pull/1868
|
||||
resolved_path = begin
|
||||
rp = nil
|
||||
- Gem.suffixes[1..-1].each do |s|
|
||||
+ Gem.suffixes.each do |s|
|
||||
load_path_insert_index = Gem.load_path_insert_index
|
||||
break unless load_path_insert_index
|
||||
|
@ -1,6 +0,0 @@
|
||||
%__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}$
|
52
rubygems.con
52
rubygems.con
@ -1,52 +0,0 @@
|
||||
#!/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
|
@ -1,36 +0,0 @@
|
||||
#!/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
|
88
rubygems.req
88
rubygems.req
@ -1,88 +0,0 @@
|
||||
#!/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
|
2
sources
2
sources
@ -1 +1 @@
|
||||
SHA512 (ruby-2.7.2.tar.xz) = 7972278b096aa768c7adf2befd26003e18781a29ca317640317d30d93d6e963ded197724c8e2f1dfe1e838c5647176d414a74732a62e931fb50d6f2e0f777349
|
||||
a893cff26bcf351b8975ebf2a63b1023 ruby-1.9.3-p448.tar.gz
|
||||
|
@ -1,7 +0,0 @@
|
||||
if !!$LOADED_FEATURES.detect { |f| f =~ /abrt\.rb/ }
|
||||
exit true
|
||||
else
|
||||
puts 'ERROR: ABRT hook was not loaded.'
|
||||
|
||||
exit false
|
||||
end
|
@ -1,65 +0,0 @@
|
||||
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
|
Loading…
Reference in New Issue
Block a user