115 lines
4.1 KiB
Plaintext
115 lines
4.1 KiB
Plaintext
# 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}
|
|
%gem_extdir_mri %{gem_archdir}/%{name}/%{gem_name}-%{version}
|
|
%gem_libdir %{gem_instdir}/lib
|
|
%gem_cache %{gem_dir}/cache/%{gem_name}-%{version}.gem
|
|
%gem_spec %{gem_dir}/specifications/%{gem_name}-%{version}.gemspec
|
|
%gem_docdir %{gem_dir}/doc/%{gem_name}-%{version}
|
|
|
|
# Install gem into appropriate directory.
|
|
# -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}' $CONFIGURE_ARGS" \\\
|
|
gem install \\\
|
|
-V \\\
|
|
--local \\\
|
|
--build-root %{-d*}%{!?-d:.} \\\
|
|
--force \\\
|
|
--document=ri,rdoc \\\
|
|
%{-n*}%{!?-n:%{gem_name}-%{version}.gem} \
|
|
%{nil}
|
|
|
|
# For rubygems packages we want to filter out any provides caused by private
|
|
# libs in %%{gem_archdir}.
|
|
#
|
|
# Note that this must be invoked in the spec file, preferably as
|
|
# "%{?rubygems_default_filter}", before any %description block.
|
|
%rubygems_default_filter %{expand: \
|
|
%global __provides_exclude_from %{?__provides_exclude_from:%{__provides_exclude_from}|}^%{gem_extdir_mri}/.*\\\\.so$ \
|
|
}
|
|
|
|
# The 'read' command in gemspec_add _depand gemspec_remove_dep macros is not
|
|
# essential, but it is usefull to make the sript appear in build log.
|
|
|
|
# Add dependency named gem with version requirements to .gemspec. It adds
|
|
# runtime dependency by default.
|
|
# -g<gem> Specifies name of the gem dependency.
|
|
# -s<gemspec_file> Overrides the default .gemspec location.
|
|
# -d Add development dependecy.
|
|
#
|
|
# The remaining arguments are expected to be version requirements and should
|
|
# be valid Ruby code.
|
|
%gemspec_add_dep(g:s:d) \
|
|
read -d '' gemspec_add_dep_script << 'EOR' || : \
|
|
gemspec_file = '%{-s*}%{!?-s:./%{gem_name}.gemspec}' \
|
|
\
|
|
name = '%{-g*}' \
|
|
requirements = %{*}%{!?1:nil} \
|
|
\
|
|
type = :%{!?-d:runtime}%{?-d:development} \
|
|
\
|
|
spec = Gem::Specification.load(gemspec_file) \
|
|
abort("#{gemspec_file} is not accessible.") unless spec \
|
|
\
|
|
dep = spec.dependencies.detect { |d| d.type == type && d.name == name } \
|
|
if dep \
|
|
dep.requirement.concat requirements \
|
|
else \
|
|
spec.public_send "add_#{type}_dependency", name, requirements \
|
|
end \
|
|
File.write gemspec_file, spec.to_ruby \
|
|
EOR\
|
|
echo "$gemspec_add_dep_script" | ruby \
|
|
unset -v gemspec_add_dep_script \
|
|
%{nil}
|
|
|
|
# Remove dependency named gem with version requirements to .gemspec. It
|
|
# removes runtime dependency by default.
|
|
# -g<gem> Specifies name of the gem dependency.
|
|
# -s<gemspec_file> Overrides the default .gemspec location.
|
|
# -d Remove development dependecy.
|
|
#
|
|
# The remaining arguments are expected to be version requirements and should
|
|
# be valid Ruby code. The macro fails if these specific requirements can't be
|
|
# removed.
|
|
%gemspec_remove_dep(g:s:d) \
|
|
read -d '' gemspec_remove_dep_script << 'EOR' || : \
|
|
gemspec_file = '%{-s*}%{!?-s:./%{gem_name}.gemspec}' \
|
|
\
|
|
name = '%{-g*}' \
|
|
requirements = %{*}%{!?1:nil} \
|
|
\
|
|
type = :%{!?-d:runtime}%{?-d:development} \
|
|
\
|
|
spec = Gem::Specification.load(gemspec_file) \
|
|
abort("#{gemspec_file} is not accessible.") unless spec \
|
|
\
|
|
dep = spec.dependencies.detect { |d| d.type == type && d.name == name } \
|
|
if dep \
|
|
if requirements \
|
|
requirements = Gem::Requirement.create(requirements).requirements \
|
|
requirements.each do |r| \
|
|
unless dep.requirement.requirements.reject! { |dependency_requirements| dependency_requirements == r } \
|
|
abort("Requirement '#{r.first} #{r.last}' was not possible to remove for dependency '#{dep}'!") \
|
|
end \
|
|
end \
|
|
spec.dependencies.delete dep if dep.requirement.requirements.empty? \
|
|
else \
|
|
spec.dependencies.delete dep \
|
|
end \
|
|
else \
|
|
abort("Dependency '#{name}' was not found!") \
|
|
end \
|
|
File.write gemspec_file, spec.to_ruby \
|
|
EOR\
|
|
echo "$gemspec_remove_dep_script" | ruby \
|
|
unset -v gemspec_remove_dep_script \
|
|
%{nil}
|