Project

General

Profile

« Previous | Next » 

Revision 26985ee0

Added by Ewoud Kohl van Wijngaarden about 4 years ago

Fixes #29424 - %check section for gems with native libs

Since we manually move file to their correct locations, it happens that
they end up in the wrong place. The RPM build then passes but the
resulting package is broken. By adding a %check section that requires
the gem, this should be prevented in most cases.

The EL8 check fails for some unknown reason and needs to be looked into.

View differences:

gem2rpm/nonscl.spec.erb
LICENSES = JSON.load(File.read(File.join(root, 'licenses.json')))
-%>
%global gem_name <%= spec.name %>
%global gem_require_name %{gem_name}
Name: rubygem-%{gem_name}
Version: <%= spec.version %>
......
<% end -%>
<% if spec.extensions.empty? -%>
BuildArch: noarch
<% else -%>
<% for d in spec.runtime_dependencies -%>
<% for req in d.requirement -%>
Requires: rubygem(<%= d.name %>) <%= req %>
<% end -%>
<% end -%>
<% end -%>
Provides: rubygem(%{gem_name}) = %{version}
# end specfile generated dependencies
......
%{buildroot}%{_bindir}/
find %{buildroot}%{gem_instdir}/<%= spec.bindir %> -type f | xargs chmod a+x
<% end -%>
<% unless spec.extensions.empty? -%>
%check
# Ideally, this would be something like this:
# GEM_PATH="%{buildroot}%{gem_dir}:$GEM_PATH" ruby -e "require '%{gem_require_name}'"
# But that fails to find native extensions on EL8, so we fake the structure that ruby expects
mkdir gem_ext_test
cp -a %{buildroot}%{gem_dir} gem_ext_test/
mkdir -p gem_ext_test/gems/extensions/%{_arch}-%{_target_os}/$(ruby -r rbconfig -e 'print RbConfig::CONFIG["ruby_version"]')/
cp -a %{buildroot}%{gem_extdir_mri} gem_ext_test/gems/extensions/%{_arch}-%{_target_os}/$(ruby -r rbconfig -e 'print RbConfig::CONFIG["ruby_version"]')/
GEM_PATH="./gem_ext_test/gems:$GEM_PATH" ruby -e "require '%{gem_require_name}'"
rm -rf gem_ext_test
<% end -%>
%files
%dir %{gem_instdir}
gem2rpm/scl.spec.erb
%{!?scl:%global pkg_name %{name}}
%global gem_name <%= spec.name %>
%global gem_require_name %{gem_name}
Name: %{?scl_prefix}rubygem-%{gem_name}
Version: <%= spec.version %>
......
<% end -%>
<% if spec.extensions.empty? -%>
BuildArch: noarch
<% else -%>
<% for d in spec.runtime_dependencies -%>
<% for req in d.requirement -%>
BuildRequires: %{?scl_prefix<%= SCL_PREFIXES[d.name] %>}rubygem(<%= d.name %>) <%= req %>
<% end -%>
<% end -%>
<% end -%>
Provides: %{?scl_prefix}rubygem(%{gem_name}) = %{version}
# end specfile generated dependencies
......
%{buildroot}%{_bindir}/
find %{buildroot}%{gem_instdir}/<%= spec.bindir %> -type f | xargs chmod a+x
<% end -%>
<% unless spec.extensions.empty? -%>
%check
%{?scl:scl enable %{scl} - << \EOF}
# Ideally, this would be something like this:
# GEM_PATH="%{buildroot}%{gem_dir}:$GEM_PATH" ruby -e "require '%{gem_require_name}'"
# But that fails to find native extensions on EL8, so we fake the structure that ruby expects
mkdir gem_ext_test
cp -a %{buildroot}%{gem_dir} gem_ext_test/
mkdir -p gem_ext_test/gems/extensions/%{_arch}-%{_target_os}/$(ruby -r rbconfig -e 'print RbConfig::CONFIG["ruby_version"]')/
cp -a %{buildroot}%{gem_extdir_mri} gem_ext_test/gems/extensions/%{_arch}-%{_target_os}/$(ruby -r rbconfig -e 'print RbConfig::CONFIG["ruby_version"]')/
GEM_PATH="./gem_ext_test/gems:$GEM_PATH" ruby -e "require '%{gem_require_name}'"
rm -rf gem_ext_test
%{?scl:EOF}
<% end -%>
%files
%dir %{gem_instdir}

Also available in: Unified diff