Skip to content

Commit

Permalink
Implement rich RPM dependencies
Browse files Browse the repository at this point in the history
This implements rich RPM dependencies, which are available with RPM
4.14+ (introduced in Fedora 27[1]). This means only a single line for a
dependency is used. That doesn't play well with the
.with_requires.commented_out approach that was implemented. This instead
uses parameters.

An alternative approach could be to move this to the template.

[1]: https://fedoraproject.org/wiki/Changes/RPM-4.14
  • Loading branch information
ekohl committed Nov 24, 2023
1 parent 919653d commit 7777818
Show file tree
Hide file tree
Showing 3 changed files with 30 additions and 2 deletions.
18 changes: 18 additions & 0 deletions lib/gem2rpm/rpm_dependency.rb
Original file line number Diff line number Diff line change
Expand Up @@ -47,5 +47,23 @@ def to_rpm
end
rpm_dependencies.join("\n")
end

# Returns string with entry suitable for RPM .spec file with RPM 4.14+.
def to_rich_rpm(with_requires: false, commented_out: false)
rpm_dependencies = requirement.map do |version|
version.to_s.empty? ? name : "#{name} #{version}"
end
result = rpm_dependencies.size == 1 ? reqs.first : "(#{reqs.join(' with ')})"

if with_requires
result.prepend(dep.type == :development ? 'BuildRequires: ' : 'Requires: ')
end

if commented_out
result.prepend('# ')
end

result
end
end
end
12 changes: 11 additions & 1 deletion lib/gem2rpm/rpm_dependency_list.rb
Original file line number Diff line number Diff line change
Expand Up @@ -50,11 +50,21 @@ def comment_out
end

# Returns string with all dependencies from the list converted into entries
# suitable for RPM .spec file. Thise entries should include all necessary
# suitable for RPM .spec file. These entries should include all necessary
# macros depending on file categorization.
def to_rpm
s = entries.map(&:to_rpm).join("\n")
s += "\n" unless s.empty?
end

# Returns a string with all dependencies from the list converted into entries
# suitable for RPM .spec file with RPM 4.14+. Thise entries should include
# all necessary macros depending on file categorization.
def to_rich_rpm(with_requires: false, commented_out: false)
s = entries.map do |entry|
entry.to_rich_rpm(with_requires: with_requires, comment_out: comment_out)
end.join("\n")
s += "\n" unless s.empty?
end
end
end
2 changes: 1 addition & 1 deletion templates/fedora-27-rawhide.spec.erb
Original file line number Diff line number Diff line change
Expand Up @@ -24,7 +24,7 @@ BuildRequires: gcc
<% end -%>
<%= development_dependencies.reject do |d|
["rdoc", "rake", "bundler"].include? d.name
end.virtualize.with_requires.comment_out.to_rpm -%>
end.virtualize.to_rich_rpm(with_requires: true, comment_out: true) -%>
<% if spec.extensions.empty? -%>
BuildArch: noarch
<% end -%>
Expand Down

0 comments on commit 7777818

Please sign in to comment.