diff --git a/Gemfile b/Gemfile index 350d22f..85b30c0 100644 --- a/Gemfile +++ b/Gemfile @@ -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 diff --git a/lib/gem2rpm/distro.rb b/lib/gem2rpm/distro.rb index c50dafc..16a9e10 100644 --- a/lib/gem2rpm/distro.rb +++ b/lib/gem2rpm/distro.rb @@ -4,6 +4,7 @@ class Distro PLD = :pld OPENSUSE = :opensuse DEFAULT = :default + REDHAT = :redhat ROLLING_RELEASES = ['rawhide', 'factory', 'tumbleweed'] @@ -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'] @@ -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 diff --git a/templates/redhat-7.spec.erb b/templates/redhat-7.spec.erb new file mode 100644 index 0000000..aa2b9b5 --- /dev/null +++ b/templates/redhat-7.spec.erb @@ -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 diff --git a/test/templates/fake_files/redhat-7.spec.erb b/test/templates/fake_files/redhat-7.spec.erb new file mode 100644 index 0000000..e69de29 diff --git a/test/test_distro.rb b/test/test_distro.rb index 9b11ded..c9519b8 100644 --- a/test/test_distro.rb +++ b/test/test_distro.rb @@ -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 diff --git a/test/test_gem2rpm.rb b/test/test_gem2rpm.rb index 1df9779..dc11b3b 100644 --- a/test/test_gem2rpm.rb +++ b/test/test_gem2rpm.rb @@ -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 diff --git a/test/test_template.rb b/test/test_template.rb index b9e5a29..ed3994a 100644 --- a/test/test_template.rb +++ b/test/test_template.rb @@ -16,6 +16,7 @@ def test_list fedora.spec.erb opensuse.spec.erb pld.spec.erb + redhat-7.spec.erb ), Gem2Rpm::Template.list end