# 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}/ruby/%{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} %gem_name %{?oname}%{!?oname:%(echo %{name}|cut -d\- -f2-)} %gem_setup %setup -q -n %{gem_name}-%{version} %gem_build %{_bindir}/gem build ../%{gem_name}-%{version}.gemspec \ %{_bindir}/gem install %{gem_name}-%{version}.gem -V --local \\\ --env-shebang --rdoc --ri --force --ignore-dependencies \\\ --install-dir %{gem_dir} \\\ --bindir %{_bindir} \\\ --build-root . %gem_install(d) \ mkdir -p %{buildroot}%{gem_dir} \ cp -a .%{gem_dir}/* %{buildroot}%{gem_dir}/ \ if [ -d .%{gem_extdir_mri} ]; then mkdir -p %{buildroot}%{gem_extdir_mri}; cp -pa .%{gem_extdir_mri}/* %{buildroot}%{gem_extdir_mri}; fi \ if [ -d .%{_bindir} ] ; then mkdir -p %{buildroot}%{_bindir} ; cp -pa .%{_bindir}/* %{buildroot}%{_bindir}/; fi \ %{-d: \ mkdir -p %{buildroot}%{ruby_vendorarchdir} \ mv -f %{buildroot}%{gem_extdir_mri}/*.h %{buildroot}%{ruby_vendorarchdir} \ } \ rm -fr %{buildroot}%{gem_dir}/{cache,extensions,gems/%{gem_name}-%{version}/ext,gems/%{gem_name}-%{version}/%{gem_name}.gemspec} \ rm -f %{buildroot}%{gem_extdir_mri}/{gem_make.out,mkmf.log} # Following macros are stolen from Fedora # 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. # %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:../%{gem_name}-%{version}.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:../%{gem_name}-%{version}.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}