lib/gem2rpm.rb in gem2rpm-0.6.0 vs lib/gem2rpm.rb in gem2rpm-0.7.0
- old
+ new
@@ -1,8 +1,10 @@
require 'erb'
require 'socket'
require 'rubygems/format'
+require 'gem2rpm/distro'
+require 'gem2rpm/specification'
# Adapt to the differences between rubygems < 1.0.0 and after
# Once we can be reasonably certain that everybody has version >= 1.0.0
# all this logic should be killed
GEM_VERSION = Gem::Version.create(Gem::RubyGemsVersion)
@@ -10,38 +12,12 @@
if HAS_REMOTE_INSTALLER
require 'rubygems/remote_installer'
end
-# Extend String with a word_wrap method, which we use in the ERB template
-# below. Taken with modification from the word_wrap method in ActionPack.
-# Text::Format does the smae thing better.
-class String
- def word_wrap(line_width = 80)
- gsub(/\n/, "\n\n").gsub(/(.{1,#{line_width}})(\s+|$)/, "\\1\n").strip
- end
-end
-
-module Gem
- class Requirement
- def rpm_version_transform(version)
- if version == "> 0.0.0"
- version = ""
- end
- version
- end
-
- def to_rpm
- result = as_list
- return result.map { |version| rpm_version_transform(version) }
- end
-
- end
-end
-
module Gem2Rpm
- Gem2Rpm::VERSION = "0.6.0"
+ Gem2Rpm::VERSION = "0.7.0"
if HAS_REMOTE_INSTALLER
def self.find_download_url(name, version)
installer = Gem::RemoteInstaller.new
dummy, download_path = installer.find_gem_to_install(name, "=#{version}")
@@ -57,131 +33,44 @@
return download_path
end
end
def Gem2Rpm.convert(fname, template=TEMPLATE, out=$stdout,
- nongem=true, local=false)
+ nongem=true, local=false, doc_subpackage = true)
format = Gem::Format.from_file_by_path(fname)
- spec = format.spec
+ spec = Gem2Rpm::Specification.new(format.spec)
spec.description ||= spec.summary
download_path = ""
unless local
begin
download_path = find_download_url(spec.name, spec.version)
rescue Gem::Exception => e
$stderr.puts "Warning: Could not retrieve full URL for #{spec.name}\nWarning: Edit the specfile and enter the full download URL as 'Source0' manually"
$stderr.puts "#{e.inspect}"
end
end
- template = ERB.new(template, 0, '<>')
+ template = ERB.new(template, 0, '-')
out.puts template.result(binding)
end
# Returns the email address of the packager (i.e., the person running
# gem2spec). Taken from RPM macros if present, constructed from system
# username and hostname otherwise.
def Gem2Rpm.packager()
- packager = `rpm --eval '%{packager}'`.chomp
- if packager == '' or packager == '%{packager}'
+ packager = `rpmdev-packager`.chomp
+
+ if packager.empty?
+ packager = `rpm --eval '%{packager}'`.chomp
+ end
+
+ if packager.empty? or packager == '%{packager}'
packager = "#{Etc::getpwnam(Etc::getlogin).gecos} <#{Etc::getlogin}@#{Socket::gethostname}>"
end
+
packager
end
- TEMPLATE =
-%q{# Generated from <%= File::basename(format.gem_path) %> by gem2rpm -*- rpm-spec -*-
-%define ruby_sitelib %(ruby -rrbconfig -e "puts Config::CONFIG['sitelibdir']")
-%define gemdir %(ruby -rubygems -e 'puts Gem::dir' 2>/dev/null)
-%define gemname <%= spec.name %>
-%define geminstdir %{gemdir}/gems/%{gemname}-%{version}
-
-Summary: <%= spec.summary.gsub(/\.$/, "") %>
-Name: rubygem-%{gemname}
-Version: <%= spec.version %>
-Release: 1%{?dist}
-Group: Development/Languages
-License: GPLv2+ or Ruby
-URL: <%= spec.homepage %>
-Source0: <%= download_path %>%{gemname}-%{version}.gem
-BuildRoot: %{_tmppath}/%{name}-%{version}-%{release}-root-%(%{__id_u} -n)
-Requires: rubygems
-<% for d in spec.dependencies %>
-<% for req in d.version_requirements.to_rpm %>
-Requires: rubygem(<%= d.name %>) <%= req %>
-<% end %>
-<% end %>
-BuildRequires: rubygems
-<% if spec.extensions.empty? %>
-BuildArch: noarch
-<% end %>
-Provides: rubygem(%{gemname}) = %{version}
-
-%description
-<%= spec.description.to_s.chomp.word_wrap(78) + "\n" %>
-
-<% if nongem %>
-%package -n ruby-%{gemname}
-Summary: <%= spec.summary.gsub(/\.$/, "") %>
-Group: Development/Languages
-Requires: rubygem(%{gemname}) = %{version}
-<% spec.files.select{ |f| spec.require_paths.include?(File::dirname(f)) }.reject { |f| f =~ /\.rb$/ }.collect { |f| File::basename(f) }.each do |p| %>
-Provides: ruby(<%= p %>) = %{version}
-<% end %>
-%description -n ruby-%{gemname}
-<%= spec.description.to_s.chomp.word_wrap(78) + "\n" %>
-<% end # if nongem %>
-
-%prep
-
-%build
-
-%install
-rm -rf %{buildroot}
-mkdir -p %{buildroot}%{gemdir}
-<% rdoc_opt = spec.has_rdoc ? "--rdoc " : "" %>
-gem install --local --install-dir %{buildroot}%{gemdir} \
- --force <%= rdoc_opt %>%{SOURCE0}
-<% unless spec.executables.empty? %>
-mkdir -p %{buildroot}/%{_bindir}
-mv %{buildroot}%{gemdir}/bin/* %{buildroot}/%{_bindir}
-rmdir %{buildroot}%{gemdir}/bin
-find %{buildroot}%{geminstdir}/bin -type f | xargs chmod a+x
-<% end %>
-<% if nongem %>
-mkdir -p %{buildroot}%{ruby_sitelib}
-<% spec.files.select{ |f| spec.require_paths.include?(File::dirname(f)) }.each do |p| %>
-ln -s %{gemdir}/gems/%{gemname}-%{version}/<%= p %> %{buildroot}%{ruby_sitelib}
-<% end %>
-<% end # if nongem %>
-
-%clean
-rm -rf %{buildroot}
-
-%files
-%defattr(-, root, root, -)
-<% for f in spec.executables %>
-%{_bindir}/<%= f %>
-<% end %>
-%{gemdir}/gems/%{gemname}-%{version}/
-<% if spec.has_rdoc %>
-%doc %{gemdir}/doc/%{gemname}-%{version}
-<% end %>
-<% for f in spec.extra_rdoc_files %>
-%doc %{geminstdir}/<%= f %>
-<% end %>
-%{gemdir}/cache/%{gemname}-%{version}.gem
-%{gemdir}/specifications/%{gemname}-%{version}.gemspec
-
-<% if nongem %>
-%files -n ruby-%{gemname}
-%defattr(-, root, root, -)
-%{ruby_sitelib}/*
-<% end # if nongem %>
-
-%changelog
-* <%= Time.now.strftime("%a %b %d %Y") %> <%= packager %> - <%= spec.version %>-1
-- Initial package
-}
+ TEMPLATE = File.read File.join(File.dirname(__FILE__), '..', 'templates', "#{Distro.nature.to_s}.spec.erb")
end
# Local Variables:
# ruby-indent-level: 2
# End: