Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 1 addition & 0 deletions Gemfile
Original file line number Diff line number Diff line change
Expand Up @@ -3,4 +3,5 @@ source "https://www.rubygems.org"
group :development do
# Needed by Travis so we can run `bundle exec rake`
gem 'minitest', '~> 5.0'
gem 'rake'
end
13 changes: 8 additions & 5 deletions lib/gem2rpm/distro.rb
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,7 @@ class Distro
PLD = :pld
OPENSUSE = :opensuse
DEFAULT = :default
REDHAT = :redhat

ROLLING_RELEASES = ['rawhide', 'factory', 'tumbleweed']

Expand Down Expand Up @@ -51,8 +52,7 @@ def self.os_release

os_release.version = versions.first if versions.length == 1
elsif grouped_release_files['redhat']
# Use Fedora's template for RHEL ATM.
os_release.os = FEDORA
os_release.os = REDHAT
elsif grouped_release_files['SuSE']
os_release.os = OPENSUSE
elsif grouped_release_files['pld']
Expand Down Expand Up @@ -83,13 +83,16 @@ def self.release_files=(files)
# Tries to find best suitable template for specified os and version.
def self.template_by_os_version(os, version)
os_templates = Template.list.grep(/#{os}.*\.spec\.erb/)

os_templates.each do |file|
# We want only distro RubyGems templates to get the right versions
next unless file =~ /^#{os}((-([0-9]+\.{0,1}[0-9]+){0,}){0,}(-(#{ROLLING_RELEASES.join('|')})){0,1}).spec.erb/
unless file =~ /^#{os}((-([0-9]+\.{0,1}[0-9]+){0,}){0,}(-(#{ROLLING_RELEASES.join('|')})){0,1}).spec.erb/
# the above regexp matches "redhat-77-77.spec.erb" but not "redhat-7.spec.erb"
# not quite sure how to fix that regexp without breaking something, so add another check here
next unless file =~ /^#{os}-([0-9]+).spec.erb/
end

if (match = Regexp.last_match)
return file.gsub('.spec.erb', '') if in_range?(version, match[1].to_s.split('-').drop(1)) || match[1].empty?
return file.gsub('.spec.erb', '') if in_range?(version, match[1].to_s.split('-').drop(1)) || (version.to_s == match[1]) || match[1].empty?
end
end

Expand Down
127 changes: 127 additions & 0 deletions templates/redhat-7.spec.erb
Original file line number Diff line number Diff line change
@@ -0,0 +1,127 @@
# Generated from <%= package.spec.file_name %> by gem2rpm -*- rpm-spec -*-
%global gem_name <%= spec.name %>

Name: rubygem-%{gem_name}
Version: <%= spec.version %>
Release: 1%{?dist}
Summary: <%= spec.summary.gsub(/\.$/, "") %>
Group: Development/Languages
License: <%= spec.licenses.join(" and ") %>
<% if spec.homepage -%>
URL: <%= spec.homepage %>
<% end -%>
Source0: <%= download_path %>%{gem_name}-%{version}.gem
BuildRequires: ruby(release)
<% for req in spec.required_rubygems_version -%>
BuildRequires: <%= requirement 'rubygems-devel', req %>
<% end -%>
<% for req in spec.required_ruby_version -%>
BuildRequires: <%= requirement "ruby#{'-devel' unless spec.extensions.empty?}", req %>
<% end -%>
<% for d in spec.runtime_dependencies.sort -%>
<% for req in d.requirement -%>
Requires: <%= requirement "rubygem(#{d.name})", req %>
<% end -%>
<% end -%>
<% if spec.development_dependencies -%>
# the following BuildRequires are development dependencies
<% end -%>
<% for d in spec.development_dependencies -%>
<% unless ["rdoc", "rake", "bundler"].include? d.name -%>
<% for req in d.requirement -%>
# BuildRequires: <%= requirement "rubygem(#{d.name})", req %>
<% end -%>
<% end -%>
<% end -%>
<% if spec.extensions.empty? -%>
BuildArch: noarch
<% end -%>
Provides: rubygem(%{gem_name}) = %{version}

%description
<%= spec.description %>

<% if doc_subpackage -%>
%package doc
Summary: Documentation for %{name}
Group: Documentation
Requires: %{name} = %{version}-%{release}
BuildArch: noarch

%description doc
Documentation for %{name}.
<% end # if doc_subpackage -%>

%prep
gem unpack %{SOURCE0}

%setup -q -D -T -n %{gem_name}-%{version}

gem spec %{SOURCE0} -l --ruby > %{gem_name}.gemspec

%build
# Create the gem as gem install only works on a gem file
gem build %{gem_name}.gemspec

# %%gem_install compiles any C extensions and installs the gem into ./%%gem_dir
# by default, so that we can move it into the buildroot in %%install
%gem_install

%install
mkdir -p %{buildroot}%{gem_dir}
cp -a .%{gem_dir}/* \
%{buildroot}%{gem_dir}/

<% unless spec.extensions.empty? -%>
mkdir -p %{buildroot}%{gem_extdir_mri}
cp -a .%{gem_extdir_mri}/{gem.build_complete,*.so} %{buildroot}%{gem_extdir_mri}/

<% for ext in spec.extensions -%>
# Prevent dangling symlink in -debuginfo (rhbz#878863).
rm -rf %{buildroot}%{gem_instdir}/<%= ext.split(File::SEPARATOR).first %>/
<% end -%>
<% end -%>

<% unless spec.executables.nil? or spec.executables.empty? -%>
mkdir -p %{buildroot}%{_bindir}
cp -pa .%{_bindir}/* \
%{buildroot}%{_bindir}/
<% end -%>

<% unless spec.executables.empty? -%>
find %{buildroot}%{gem_instdir}/bin -type f | xargs chmod a+x
<% end -%>

# Run the test suite
%check
pushd .%{gem_instdir}

popd

%files
%dir %{gem_instdir}
<% unless spec.executables.nil? or spec.executables.empty? -%>
<% for f in spec.executables -%>
%{_bindir}/<%= f %>
<% end -%>
<% end -%>
<% unless spec.extensions.empty? -%>
%{gem_extdir_mri}
<% end -%>
<%= main_file_entries(spec) %>
<% unless doc_subpackage -%>
%doc %{gem_docdir}
<%= doc_file_entries(spec) -%>
<% end -%>
%exclude %{gem_cache}
%{gem_spec}

<% if doc_subpackage -%>
%files doc
%doc %{gem_docdir}
<%= doc_file_entries(spec) %>
<% end # if doc_subpackage -%>

%changelog
* <%= Time.now.strftime("%a %b %d %Y") %> <%= packager %> - <%= spec.version %>-1
- Initial package
Empty file.
1 change: 1 addition & 0 deletions test/test_distro.rb
Original file line number Diff line number Diff line change
Expand Up @@ -23,6 +23,7 @@ def test_get_template_for_available_version
assert_equal "fedora-17-rawhide", Gem2Rpm::Distro.template_by_os_version(Gem2Rpm::Distro::FEDORA, 177)
assert_equal "fedora", Gem2Rpm::Distro.template_by_os_version(Gem2Rpm::Distro::FEDORA, 0)
assert_equal "opensuse", Gem2Rpm::Distro.template_by_os_version(Gem2Rpm::Distro::OPENSUSE, 11)
assert_equal "redhat-7", Gem2Rpm::Distro.template_by_os_version(Gem2Rpm::Distro::REDHAT, 7)
end

def test_nature_for_unavailable_template
Expand Down
2 changes: 1 addition & 1 deletion test/test_gem2rpm.rb
Original file line number Diff line number Diff line change
Expand Up @@ -39,7 +39,7 @@ def test_show_message_for_obj
def test_show_templates
Gem2Rpm.show_templates(@out)
assert_match(/^Available templates/, @out.string)
assert_match(/\AAvailable templates.*\npld\n\Z/m, @out.string)
assert_match(/\AAvailable templates.*\nredhat-7\n\Z/m, @out.string)
end

def test_show_version
Expand Down
1 change: 1 addition & 0 deletions test/test_template.rb
Original file line number Diff line number Diff line change
Expand Up @@ -16,6 +16,7 @@ def test_list
fedora.spec.erb
opensuse.spec.erb
pld.spec.erb
redhat-7.spec.erb
), Gem2Rpm::Template.list
end

Expand Down