gem2rpm 0.8.1 → 0.8.2

Sign up to get free protection for your applications and to get access to all the features.
data/README CHANGED
@@ -48,7 +48,7 @@ Now, edit the template and then run gem2rpm to generate the spec file
48
48
  using the edited template:
49
49
  gem2rpm -t rubygem-GEM.spec.template > rubygem-GEM.spec
50
50
 
51
- With that, you can now build your RPM as ususal. When a new version of the
51
+ With that, you can now build your RPM as usual. When a new version of the
52
52
  gem becomes available, you should edit the saved template and rerun
53
53
  gem2rpm over it.
54
54
 
data/lib/gem2rpm.rb CHANGED
@@ -15,7 +15,7 @@ if HAS_REMOTE_INSTALLER
15
15
  end
16
16
 
17
17
  module Gem2Rpm
18
- Gem2Rpm::VERSION = "0.8.1"
18
+ Gem2Rpm::VERSION = "0.8.2"
19
19
 
20
20
  if HAS_REMOTE_INSTALLER
21
21
  def self.find_download_url(name, version)
@@ -58,14 +58,15 @@ module Gem2Rpm
58
58
  # gem2spec). Taken from RPM macros if present, constructed from system
59
59
  # username and hostname otherwise.
60
60
  def Gem2Rpm.packager()
61
- packager = `rpmdev-packager`.chomp
61
+ packager = `rpmdev-packager`.chomp rescue ''
62
62
 
63
63
  if packager.empty?
64
- packager = `rpm --eval '%{packager}'`.chomp
64
+ packager = `rpm --eval '%{packager}'`.chomp rescue ''
65
65
  end
66
66
 
67
67
  if packager.empty? or packager == '%{packager}'
68
- packager = "#{Etc::getpwnam(Etc::getlogin).gecos} <#{Etc::getlogin}@#{Socket::gethostname}>"
68
+ passwd_entry = Etc::getpwnam(Etc::getlogin)
69
+ packager = "#{(passwd_entry && passwd_entry.gecos) || Etc::getlogin } <#{Etc::getlogin}@#{Socket::gethostname}>"
69
70
  end
70
71
 
71
72
  packager
@@ -10,7 +10,7 @@ module Gem2Rpm
10
10
 
11
11
  release_files.each do |file|
12
12
  /\d+/ =~ File.open(file).readline
13
- versions << Regexp.last_match.to_s.to_i if Regexp.last_match
13
+ versions << Regexp.last_match.to_s if Regexp.last_match
14
14
  end
15
15
 
16
16
  versions.uniq!
@@ -20,7 +20,10 @@ module Gem2Rpm
20
20
  else # no version or more versions (=> don't know what to do)
21
21
  FEDORA
22
22
  end
23
- elsif !release_files.grep(/SuSe/).empty?
23
+ elsif !release_files.grep(/redhat/).empty?
24
+ # Use Fedora's template for RHEL ATM.
25
+ FEDORA
26
+ elsif !release_files.grep(/SuSE/).empty?
24
27
  OPENSUSE
25
28
  else
26
29
  DEFAULT
@@ -34,6 +37,7 @@ module Gem2Rpm
34
37
 
35
38
  def self.template_by_os_version(os, version)
36
39
  Dir.new(Gem2Rpm::template_dir).each do |file|
40
+ next if file =~ /^\./
37
41
  /#{os}-([\w-]+).spec.erb/ =~ file
38
42
  return file.gsub('.spec.erb', '') if Regexp.last_match and in_range?(version, Regexp.last_match[1].to_s.split('-'))
39
43
  end
@@ -45,10 +49,10 @@ module Gem2Rpm
45
49
  return nil unless range
46
50
 
47
51
  if range.length == 1
48
- return true if range.first.to_i == version
52
+ return true if range.first.to_s == version.to_s
49
53
  else # range: [xx, yy]
50
- if range[0].to_i <= version
51
- return true if range[1] == 'rawhide' or version <= range[1].to_i
54
+ if range[0].to_s <= version.to_s
55
+ return true if range[1] == 'rawhide' or version.to_s <= range[1].to_s
52
56
  end
53
57
  end
54
58
 
@@ -6,24 +6,37 @@ module Gem2Rpm
6
6
  text.gsub(/\n/, "\n\n").gsub(/(.{1,#{line_width}})(\s+|$)/, "\\1\n").strip
7
7
  end
8
8
 
9
- # Expands the pesimistic version operator '~>' into equivalent '>=' and
10
- # '<' pair.
11
- def self.expand_pessimistic_requirement(requirements)
9
+ # Expands '~>' and '!=' gem requirements.
10
+ def self.expand_requirement(requirements)
12
11
  requirements.inject([]) do |output, r|
13
- if r.first == '~>'
14
- next_version = Gem::Version.create(r.last).bump
15
- output << ['=>', r.last]
16
- output << ['<', next_version]
17
- else
18
- output << r
19
- end
12
+ output.concat case r.first
13
+ when '~>'
14
+ expand_pessimistic_requirement(r)
15
+ when '!='
16
+ expand_not_equal_requirement(r)
17
+ else
18
+ [r]
19
+ end
20
20
  end
21
21
  end
22
22
 
23
+ # Expands the pessimistic version operator '~>' into equivalent '>=' and
24
+ # '<' pair.
25
+ def self.expand_pessimistic_requirement(requirement)
26
+ next_version = Gem::Version.create(requirement.last).bump
27
+ return ['=>', requirement.last], ['<', next_version]
28
+ end
29
+
30
+ # Expands the not equal version operator '!=' into equivalent '<' and
31
+ # '>' pair.
32
+ def self.expand_not_equal_requirement(requirement)
33
+ return ['<', requirement.last], ['>', requirement.last]
34
+ end
35
+
23
36
  # Converts Gem::Requirement into array of requirements strings compatible
24
37
  # with RPM .spec file.
25
38
  def self.requirement_versions_to_rpm(requirement)
26
- self.expand_pessimistic_requirement(requirement.requirements).map do |op, version|
39
+ self.expand_requirement(requirement.requirements).map do |op, version|
27
40
  version == Gem::Version.new(0) ? "" : "#{op} #{version}"
28
41
  end
29
42
  end
@@ -1,13 +1,14 @@
1
1
  # Generated from <%= File::basename(format.gem_path) %> by gem2rpm -*- rpm-spec -*-
2
2
  %global gem_name <%= spec.name %>
3
+ <%# TODO: Try to check against spec.required_ruby_version -%>
3
4
  %global rubyabi 1.9.1
4
5
 
5
- Summary: <%= spec.summary.gsub(/\.$/, "") %>
6
6
  Name: rubygem-%{gem_name}
7
7
  Version: <%= spec.version %>
8
8
  Release: 1%{?dist}
9
+ Summary: <%= spec.summary.gsub(/\.$/, "") %>
9
10
  Group: Development/Languages
10
- License: <%= spec.licenses.empty? ? "GPLv2+ or Ruby" : spec.licenses.join(" and ") %>
11
+ License: <%= spec.licenses.join(" and ") %>
11
12
  <% if spec.homepage -%>
12
13
  URL: <%= spec.homepage %>
13
14
  <% end -%>
@@ -16,10 +17,6 @@ Requires: ruby(abi) = %{rubyabi}
16
17
  <% for req in spec.required_rubygems_version -%>
17
18
  Requires: ruby(rubygems) <%= req %>
18
19
  <% end -%>
19
- <%# TODO: Unfortunatelly this do not match with ruby(abi) yet -%>
20
- <% for req in spec.required_ruby_version -%>
21
- Requires: ruby <%= req %>
22
- <% end -%>
23
20
  <% for d in spec.runtime_dependencies -%>
24
21
  <% for req in d.requirement -%>
25
22
  Requires: rubygem(<%= d.name %>) <%= req %>
@@ -31,7 +28,7 @@ BuildRequires: rubygems-devel <%= req %>
31
28
  <% end -%>
32
29
  <%# TODO: Unfortunatelly this do not match with ruby(abi) yet -%>
33
30
  <% for req in spec.required_ruby_version -%>
34
- BuildRequires: ruby <%= req %>
31
+ BuildRequires: ruby<%= "-devel" unless spec.extensions.empty? %> <%= req %>
35
32
  <% end -%>
36
33
  <% if spec.extensions.empty? -%>
37
34
  BuildArch: noarch
@@ -53,36 +50,47 @@ Documentation for %{name}
53
50
  <% end # if doc_subpackage -%>
54
51
 
55
52
  %prep
56
- %setup -q -c -T
53
+ gem unpack %{SOURCE0}
54
+
55
+ %setup -q -D -T -n %{gem_name}-%{version}
56
+
57
+ gem spec %{SOURCE0} -l --ruby > %{gem_name}.gemspec
58
+
59
+ %build
57
60
  mkdir -p .%{gem_dir}
61
+
62
+ # Create the gem as gem install only works on a gem file
63
+ gem build %{gem_name}.gemspec
64
+
58
65
  <% unless spec.extensions.empty? -%>
66
+ # gem install compiles any C extensions
59
67
  export CONFIGURE_ARGS="--with-cflags='%{optflags}'"
60
68
  <% end -%>
61
- gem install --local --install-dir .%{gem_dir} \
69
+
70
+ # gem install installs into a directory. We set that to be a local
71
+ # directory so that we can move it into the buildroot in %%install
72
+ gem install --local --install-dir ./%{gem_dir} \
62
73
  <% unless spec.executables.nil? or spec.executables.empty? -%>
63
- --bindir .%{_bindir} \
74
+ --bindir ./%{_bindir} \
64
75
  <% end -%>
65
76
  <% unless spec.extensions.empty? -%>
66
77
  -V \
67
78
  <% end -%>
68
- --force %{SOURCE0}
69
-
70
- %build
79
+ --force --rdoc %{gem_name}-%{version}.gem
71
80
 
72
81
  %install
73
82
  mkdir -p %{buildroot}%{gem_dir}
74
- cp -a .%{gem_dir}/* \
83
+ cp -pa .%{gem_dir}/* \
75
84
  %{buildroot}%{gem_dir}/
76
85
 
77
86
  <% unless spec.extensions.empty? -%>
78
87
  mkdir -p %{buildroot}%{gem_extdir}/<%= spec.require_paths.first %>
79
- # TODO: move the extensions
80
- ##mv %{buildroot}%{gem_instdir}/<%= spec.require_paths.first %>/shared_object.so %{buildroot}%{gem_extdir}/<%= spec.require_paths.first %>/
88
+ mv %{buildroot}%{gem_instdir}/<%= spec.require_paths.first %>/shared_object.so %{buildroot}%{gem_extdir}/<%= spec.require_paths.first %>/
81
89
  <% end -%>
82
90
 
83
91
  <% unless spec.executables.nil? or spec.executables.empty? -%>
84
92
  mkdir -p %{buildroot}%{_bindir}
85
- cp -a .%{_bindir}/* \
93
+ cp -pa .%{_bindir}/* \
86
94
  %{buildroot}%{_bindir}/
87
95
  <% end -%>
88
96
 
@@ -90,12 +98,6 @@ cp -a .%{_bindir}/* \
90
98
  find %{buildroot}%{gem_instdir}/bin -type f | xargs chmod a+x
91
99
  <% end -%>
92
100
 
93
- <% unless spec.extensions.empty? -%>
94
- <%# TODO: Is it possible to delete the folder specified by the spec.extensions? -%>
95
- # Remove the binary extension sources and build leftovers.
96
- rm -rf %{buildroot}%{geminstdir}/ext
97
- <% end -%>
98
-
99
101
  %files
100
102
  %dir %{gem_instdir}
101
103
  <% unless spec.executables.nil? or spec.executables.empty? -%>
@@ -106,6 +108,7 @@ rm -rf %{buildroot}%{geminstdir}/ext
106
108
  <% end -%>
107
109
  %{gem_libdir}
108
110
  <% unless spec.extensions.empty? -%>
111
+ %exclude %{gem_instdir}/ext
109
112
  %{gem_extdir}
110
113
  <% end -%>
111
114
  <% unless doc_subpackage -%>
@@ -0,0 +1,118 @@
1
+ # Generated from <%= File::basename(format.gem_path) %> by gem2rpm -*- rpm-spec -*-
2
+ %global gem_name <%= spec.name %>
3
+
4
+ Name: rubygem-%{gem_name}
5
+ Version: <%= spec.version %>
6
+ Release: 1%{?dist}
7
+ Summary: <%= spec.summary.gsub(/\.$/, "") %>
8
+ Group: Development/Languages
9
+ License: <%= spec.licenses.join(" and ") %>
10
+ <% if spec.homepage -%>
11
+ URL: <%= spec.homepage %>
12
+ <% end -%>
13
+ Source0: <%= download_path %>%{gem_name}-%{version}.gem
14
+ Requires: ruby(release)
15
+ <% for req in spec.required_rubygems_version -%>
16
+ Requires: ruby(rubygems) <%= req %>
17
+ <% end -%>
18
+ <% for d in spec.runtime_dependencies -%>
19
+ <% for req in d.requirement -%>
20
+ Requires: rubygem(<%= d.name %>) <%= req %>
21
+ <% end -%>
22
+ <% end -%>
23
+ BuildRequires: ruby(abi) = %{rubyabi}
24
+ <% for req in spec.required_rubygems_version -%>
25
+ BuildRequires: rubygems-devel <%= req %>
26
+ <% end -%>
27
+ <%# TODO: Unfortunatelly this do not match with ruby(abi) yet -%>
28
+ <% for req in spec.required_ruby_version -%>
29
+ BuildRequires: ruby<%= "-devel" unless spec.extensions.empty? %> <%= req %>
30
+ <% end -%>
31
+ <% if spec.extensions.empty? -%>
32
+ BuildArch: noarch
33
+ <% end -%>
34
+ Provides: rubygem(%{gem_name}) = %{version}
35
+
36
+ %description
37
+ <%= spec.description %>
38
+
39
+ <% if doc_subpackage -%>
40
+ %package doc
41
+ Summary: Documentation for %{name}
42
+ Group: Documentation
43
+ Requires: %{name} = %{version}-%{release}
44
+ BuildArch: noarch
45
+
46
+ %description doc
47
+ Documentation for %{name}
48
+ <% end # if doc_subpackage -%>
49
+
50
+ %prep
51
+ gem unpack %{SOURCE0}
52
+
53
+ %setup -q -D -T -n %{gem_name}-%{version}
54
+
55
+ gem spec %{SOURCE0} -l --ruby > %{gem_name}.gemspec
56
+
57
+ %build
58
+ # Create the gem as gem install only works on a gem file
59
+ gem build %{gem_name}.gemspec
60
+
61
+ # %%gem_install compiles any C extensions and installs the gem into ./%gem_dir
62
+ # by default, so that we can move it into the buildroot in %%install
63
+ %gem_install
64
+
65
+ %install
66
+ mkdir -p %{buildroot}%{gem_dir}
67
+ cp -pa .%{gem_dir}/* \
68
+ %{buildroot}%{gem_dir}/
69
+
70
+ <% unless spec.extensions.empty? -%>
71
+ mkdir -p %{buildroot}%{gem_extdir}/<%= spec.require_paths.first %>
72
+ # TODO: move the extensions
73
+ mv %{buildroot}%{gem_instdir}/<%= spec.require_paths.first %>/shared_object.so %{buildroot}%{gem_extdir}/<%= spec.require_paths.first %>/
74
+ <% end -%>
75
+
76
+ <% unless spec.executables.nil? or spec.executables.empty? -%>
77
+ mkdir -p %{buildroot}%{_bindir}
78
+ cp -pa .%{_bindir}/* \
79
+ %{buildroot}%{_bindir}/
80
+ <% end -%>
81
+
82
+ <% unless spec.executables.empty? -%>
83
+ find %{buildroot}%{gem_instdir}/bin -type f | xargs chmod a+x
84
+ <% end -%>
85
+
86
+ %files
87
+ %dir %{gem_instdir}
88
+ <% unless spec.executables.nil? or spec.executables.empty? -%>
89
+ <% for f in spec.executables -%>
90
+ %{_bindir}/<%= f %>
91
+ <% end -%>
92
+ %{gem_instdir}/bin
93
+ <% end -%>
94
+ %{gem_libdir}
95
+ <% unless spec.extensions.empty? -%>
96
+ %exclude %{gem_instdir}/ext
97
+ %{gem_extdir}
98
+ <% end -%>
99
+ <% unless doc_subpackage -%>
100
+ %doc %{gem_docdir}
101
+ <% for f in spec.extra_rdoc_files -%>
102
+ %doc %{gem_instdir}/<%= f %>
103
+ <% end -%>
104
+ <% end -%>
105
+ %exclude %{gem_cache}
106
+ %{gem_spec}
107
+
108
+ <% if doc_subpackage -%>
109
+ %files doc
110
+ %doc %{gem_docdir}
111
+ <% for f in spec.extra_rdoc_files -%>
112
+ %doc %{gem_instdir}/<%= f %>
113
+ <% end -%>
114
+ <% end # if doc_subpackage -%>
115
+
116
+ %changelog
117
+ * <%= Time.now.strftime("%a %b %d %Y") %> <%= packager %> - <%= spec.version %>-1
118
+ - Initial package
@@ -6,6 +6,7 @@
6
6
  <% end -%>
7
7
  %global gemdir %(ruby -rubygems -e 'puts Gem::dir' 2>/dev/null)
8
8
  %global geminstdir %{gemdir}/gems/%{gemname}-%{version}
9
+ <%# TODO: Try to check against spec.required_ruby_version -%>
9
10
  %global rubyabi 1.8
10
11
 
11
12
  Summary: <%= spec.summary.gsub(/\.$/, "") %>
@@ -13,7 +14,7 @@ Name: rubygem-%{gemname}
13
14
  Version: <%= spec.version %>
14
15
  Release: 1%{?dist}
15
16
  Group: Development/Languages
16
- License: <%= spec.licenses.empty? ? "GPLv2+ or Ruby" : spec.licenses.join(" and ") %>
17
+ License: <%= spec.licenses.join(" and ") %>
17
18
  <% if spec.homepage -%>
18
19
  URL: <%= spec.homepage %>
19
20
  <% end -%>
@@ -22,10 +23,6 @@ Requires: ruby(abi) = %{rubyabi}
22
23
  <% for req in spec.required_rubygems_version -%>
23
24
  Requires: ruby(rubygems) <%= req %>
24
25
  <% end -%>
25
- <%# TODO: Unfortunatelly this do not match with ruby(abi) yet -%>
26
- <% for req in spec.required_ruby_version -%>
27
- Requires: ruby <%= req %>
28
- <% end -%>
29
26
  <% for d in spec.runtime_dependencies -%>
30
27
  <% for req in d.requirement -%>
31
28
  Requires: rubygem(<%= d.name %>) <%= req %>
@@ -37,7 +34,7 @@ BuildRequires: ruby(rubygems) <%= req %>
37
34
  <% end -%>
38
35
  <%# TODO: Unfortunatelly this do not match with ruby(abi) yet -%>
39
36
  <% for req in spec.required_ruby_version -%>
40
- BuildRequires: ruby <%= req %>
37
+ BuildRequires: ruby<%= "-devel" unless spec.extensions.empty? %> <%= req %>
41
38
  <% end -%>
42
39
  <% if spec.extensions.empty? -%>
43
40
  BuildArch: noarch
@@ -89,12 +86,12 @@ gem install --local --install-dir .%{gemdir} \
89
86
 
90
87
  %install
91
88
  mkdir -p %{buildroot}%{gemdir}
92
- cp -a .%{gemdir}/* \
89
+ cp -pa .%{gemdir}/* \
93
90
  %{buildroot}%{gemdir}/
94
91
  <% unless spec.executables.nil? or spec.executables.empty? -%>
95
92
 
96
93
  mkdir -p %{buildroot}%{_bindir}
97
- cp -a .%{_bindir}/* \
94
+ cp -pa .%{_bindir}/* \
98
95
  %{buildroot}%{_bindir}/
99
96
  <% end -%>
100
97
 
@@ -107,11 +104,6 @@ mkdir -p %{buildroot}%{ruby_sitelib}
107
104
  ln -s %{gemdir}/gems/%{gemname}-%{version}/<%= p %> %{buildroot}%{ruby_sitelib}
108
105
  <% end -%>
109
106
  <% end # if nongem -%>
110
- <% unless spec.extensions.empty? -%>
111
- <%# TODO: Is it possible to delete the folder specified by the spec.extensions? -%>
112
- # Remove the binary extension sources and build leftovers.
113
- rm -rf %{buildroot}%{geminstdir}/ext
114
- <% end -%>
115
107
 
116
108
  %files
117
109
  %dir %{geminstdir}
@@ -122,6 +114,10 @@ rm -rf %{buildroot}%{geminstdir}/ext
122
114
  %{geminstdir}/bin
123
115
  <% end -%>
124
116
  %{geminstdir}/lib
117
+ <% unless spec.extensions.empty? -%>
118
+ <%# TODO: Is it possible to delete the folder specified by the spec.extensions? -%>
119
+ %exclude %{geminstdir}/ext
120
+ <% end -%>
125
121
  <% unless doc_subpackage -%>
126
122
  %doc %{gemdir}/doc/%{gemname}-%{version}
127
123
  <% for f in spec.extra_rdoc_files -%>
metadata CHANGED
@@ -1,80 +1,64 @@
1
- --- !ruby/object:Gem::Specification
1
+ --- !ruby/object:Gem::Specification
2
2
  name: gem2rpm
3
- version: !ruby/object:Gem::Version
4
- hash: 61
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.8.2
5
5
  prerelease:
6
- segments:
7
- - 0
8
- - 8
9
- - 1
10
- version: 0.8.1
11
6
  platform: ruby
12
- authors:
7
+ authors:
13
8
  - David Lutterkort
14
9
  - Vit Ondruch
15
10
  autorequire:
16
11
  bindir: bin
17
12
  cert_chain: []
18
-
19
- date: 2012-02-09 00:00:00 Z
13
+ date: 2013-02-21 00:00:00.000000000 Z
20
14
  dependencies: []
21
-
22
- description: " Generate source rpms and rpm spec files from a Ruby Gem. \n The spec file tries to follow the gem as closely as possible\n"
15
+ description: ! " Generate source rpms and rpm spec files from a Ruby Gem. \n The
16
+ spec file tries to follow the gem as closely as possible\n"
23
17
  email: gem2rpm-devel@rubyforge.org
24
- executables:
18
+ executables:
25
19
  - gem2rpm
26
20
  extensions: []
27
-
28
- extra_rdoc_files:
21
+ extra_rdoc_files:
29
22
  - AUTHORS
30
23
  - README
31
24
  - LICENSE
32
- files:
25
+ files:
33
26
  - bin/gem2rpm
34
- - lib/gem2rpm/specification.rb
35
- - lib/gem2rpm/helpers.rb
27
+ - lib/gem2rpm.rb
36
28
  - lib/gem2rpm/dependency.rb
37
29
  - lib/gem2rpm/distro.rb
38
- - lib/gem2rpm.rb
30
+ - lib/gem2rpm/helpers.rb
31
+ - lib/gem2rpm/specification.rb
32
+ - templates/default.spec.erb
33
+ - templates/fedora-17-18.spec.erb
34
+ - templates/fedora-19-rawhide.spec.erb
39
35
  - templates/fedora.spec.erb
40
36
  - templates/opensuse.spec.erb
41
- - templates/default.spec.erb
42
- - templates/fedora-17-rawhide.spec.erb
43
37
  - LICENSE
44
38
  - README
45
39
  - AUTHORS
46
40
  homepage: https://github.com/lutter/gem2rpm/
47
41
  licenses: []
48
-
49
42
  post_install_message:
50
43
  rdoc_options: []
51
-
52
- require_paths:
44
+ require_paths:
53
45
  - lib
54
- required_ruby_version: !ruby/object:Gem::Requirement
46
+ required_ruby_version: !ruby/object:Gem::Requirement
55
47
  none: false
56
- requirements:
57
- - - ">="
58
- - !ruby/object:Gem::Version
59
- hash: 3
60
- segments:
61
- - 0
62
- version: "0"
63
- required_rubygems_version: !ruby/object:Gem::Requirement
48
+ requirements:
49
+ - - ! '>='
50
+ - !ruby/object:Gem::Version
51
+ version: '0'
52
+ required_rubygems_version: !ruby/object:Gem::Requirement
64
53
  none: false
65
- requirements:
66
- - - ">="
67
- - !ruby/object:Gem::Version
68
- hash: 3
69
- segments:
70
- - 0
71
- version: "0"
54
+ requirements:
55
+ - - ! '>='
56
+ - !ruby/object:Gem::Version
57
+ version: '0'
72
58
  requirements: []
73
-
74
59
  rubyforge_project:
75
- rubygems_version: 1.8.11
60
+ rubygems_version: 1.8.25
76
61
  signing_key:
77
62
  specification_version: 3
78
63
  summary: Generate rpm specfiles from gems
79
64
  test_files: []
80
-