pvalena / rpms / ruby

Forked from rpms/ruby 6 years ago
Clone
893a03a
# The RubyGems root folder.
893a03a
%gem_dir %{_datadir}/gems
56d430e
%gem_archdir %{_libdir}/gems
893a03a
893a03a
# Common gem locations and files.
893a03a
%gem_instdir %{gem_dir}/gems/%{gem_name}-%{version}
56d430e
%gem_extdir_mri %{gem_archdir}/%{name}/%{gem_name}-%{version}
893a03a
%gem_libdir %{gem_instdir}/lib
893a03a
%gem_cache %{gem_dir}/cache/%{gem_name}-%{version}.gem
893a03a
%gem_spec %{gem_dir}/specifications/%{gem_name}-%{version}.gemspec
893a03a
%gem_docdir %{gem_dir}/doc/%{gem_name}-%{version}
893a03a
3716851
3716851
# %gem_install - Install gem into appropriate directory.
3716851
#
3716851
# Usage: %gem_install [options]
3716851
#
3716851
# -n <gem_file>      Overrides gem file name for installation.
3716851
# -d <install_dir>   Set installation directory.
3716851
#
893a03a
%gem_install(d:n:) \
893a03a
mkdir -p %{-d*}%{!?-d:.%{gem_dir}} \
893a03a
\
893a03a
CONFIGURE_ARGS="--with-cflags='%{optflags}' $CONFIGURE_ARGS" \\\
893a03a
gem install \\\
893a03a
        -V \\\
893a03a
        --local \\\
893a03a
        --install-dir %{-d*}%{!?-d:.%{gem_dir}} \\\
893a03a
        --bindir .%{_bindir} \\\
893a03a
        --force \\\
893a03a
        --document=ri,rdoc \\\
893a03a
        %{-n*}%{!?-n:%{gem_name}-%{version}.gem} \
893a03a
%{nil}
ec04753
3716851
ec04753
# For rubygems packages we want to filter out any provides caused by private
ec04753
# libs in %%{gem_archdir}.
ec04753
#
ec04753
# Note that this must be invoked in the spec file, preferably as
ec04753
# "%{?rubygems_default_filter}", before any %description block.
ec04753
%rubygems_default_filter %{expand: \
ec04753
%global __provides_exclude_from %{?__provides_exclude_from:%{__provides_exclude_from}|}^%{gem_extdir_mri}/.*\\\\.so$ \
ec04753
}
f2f4043
3716851
f2f4043
# The 'read' command in gemspec_add _depand gemspec_remove_dep macros is not
f2f4043
# essential, but it is usefull to make the sript appear in build log.
f2f4043
3716851
3716851
# %gemspec_add_dep - Add dependency into .gemspec.
3716851
#
3716851
# Usage: %gemspec_add_dep -g <gem> [options] [requirements]
3716851
#
3716851
# Add dependency named <gem> to .gemspec file. The macro adds runtime
3716851
# dependency by default. The [requirements] argument can be used to specify
3716851
# the dependency constraints more precisely. It is expected to be valid Ruby
3716851
# code.
3716851
#
3716851
# -s <gemspec_file>   Overrides the default .gemspec location.
3716851
# -d                  Add development dependecy.
f2f4043
#
f2f4043
%gemspec_add_dep(g:s:d) \
f2f4043
read -d '' gemspec_add_dep_script << 'EOR' || : \
f2f4043
  gemspec_file = '%{-s*}%{!?-s:./%{gem_name}.gemspec}' \
f2f4043
  \
f2f4043
  name = '%{-g*}' \
f2f4043
  requirements = %{*}%{!?1:nil} \
f2f4043
  \
f2f4043
  type = :%{!?-d:runtime}%{?-d:development} \
f2f4043
  \
f2f4043
  spec = Gem::Specification.load(gemspec_file) \
f2f4043
  abort("#{gemspec_file} is not accessible.") unless spec \
f2f4043
  \
f2f4043
  dep = spec.dependencies.detect { |d| d.type == type && d.name == name } \
f2f4043
  if dep \
f2f4043
    dep.requirement.concat requirements \
f2f4043
  else \
f2f4043
    spec.public_send "add_#{type}_dependency", name, requirements \
f2f4043
  end \
f2f4043
  File.write gemspec_file, spec.to_ruby \
f2f4043
EOR\
f2f4043
echo "$gemspec_add_dep_script" | ruby \
f2f4043
unset -v gemspec_add_dep_script \
f2f4043
%{nil}
f2f4043
3716851
3716851
# %gemspec_remove_dep - Remove dependency from .gemspec.
3716851
#
3716851
# Usage: %gemspec_remove_dep -g <gem> [options] [requirements]
3716851
#
3716851
# Remove dependency named <gem> from .gemspec file. The macro removes runtime
3716851
# dependency by default. The [requirements] argument can be used to specify
3716851
# the dependency constraints more precisely. It is expected to be valid Ruby
3716851
# code. The macro fails if these specific requirements can't be removed.
3716851
#
3716851
# -s <gemspec_file>   Overrides the default .gemspec location.
3716851
# -d                  Remove development dependecy.
f2f4043
#
f2f4043
%gemspec_remove_dep(g:s:d) \
f2f4043
read -d '' gemspec_remove_dep_script << 'EOR' || : \
f2f4043
  gemspec_file = '%{-s*}%{!?-s:./%{gem_name}.gemspec}' \
f2f4043
  \
f2f4043
  name = '%{-g*}' \
f2f4043
  requirements = %{*}%{!?1:nil} \
f2f4043
  \
f2f4043
  type = :%{!?-d:runtime}%{?-d:development} \
f2f4043
  \
f2f4043
  spec = Gem::Specification.load(gemspec_file) \
f2f4043
  abort("#{gemspec_file} is not accessible.") unless spec \
f2f4043
  \
f2f4043
  dep = spec.dependencies.detect { |d| d.type == type && d.name == name } \
f2f4043
  if dep \
f2f4043
    if requirements \
f2f4043
      requirements = Gem::Requirement.create(requirements).requirements \
f2f4043
      requirements.each do |r| \
f2f4043
        unless dep.requirement.requirements.reject! { |dependency_requirements| dependency_requirements == r } \
f2f4043
          abort("Requirement '#{r.first} #{r.last}' was not possible to remove for dependency '#{dep}'!") \
f2f4043
        end \
f2f4043
      end \
f2f4043
      spec.dependencies.delete dep if dep.requirement.requirements.empty? \
f2f4043
    else \
f2f4043
      spec.dependencies.delete dep \
f2f4043
    end \
f2f4043
  else \
f2f4043
    abort("Dependency '#{name}' was not found!") \
f2f4043
  end \
f2f4043
  File.write gemspec_file, spec.to_ruby \
f2f4043
EOR\
f2f4043
echo "$gemspec_remove_dep_script" | ruby \
f2f4043
unset -v gemspec_remove_dep_script \
f2f4043
%{nil}