1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
|
#!/usr/bin/env ruby
#--
# Copyright 2010 Per Øyvind Karlsen <peroyvind@mandriva.org>
# This program is free software. It may be redistributed and/or modified under
# the terms of the LGPL version 2.1 (or later).
#++
require 'optparse'
require 'rubygems'
provides = false
requires = false
opts = OptionParser.new("#{$0} <--provides|--requires>")
opts.on("-P", "--provides", "Print provides") do |val|
provides = true
end
opts.on("-R", "--requires", "Print requires") do |val|
requires= true
end
rest = opts.permute(ARGV)
if rest.size != 0 or (!provides and !requires) or (provides and requires)
$stderr.puts "Use either --provides OR --requires"
$stderr.puts opts
exit(1)
end
specpath = "%s/specifications/.*\.gemspec$" % Gem::dir
gems = []
for gemspec in $stdin.readlines
if gemspec.match(specpath)
gems.push(gemspec.chomp)
end
end
if gems.length > 0
if requires
require 'rbconfig'
module Gem
class Requirement
def rpm_dependency_transform(name, version)
pessimistic = ""
if version == "> 0.0.0" or version == ">= 0"
version = ""
else
if version[0..1] == "~>"
pessimistic = "rubygem(%s) < %s\n" % [name, Gem::Version.create(version[3..-1]).bump]
version = version.gsub(/\~>/, '=>')
end
version = version.gsub(/^/, ' ')
end
version = "rubygem(%s)%s\n%s" % [name, version, pessimistic]
end
def to_rpm(name)
result = as_list
return result.map { |version| rpm_dependency_transform(name, version) }
end
end
end
# TODO: Should we add a strict dependency on ruby version here?
#print "ruby < %s%s\n" % [Config::CONFIG["ruby_version"][0..-2], Config::CONFIG["ruby_version"][-1..-1].to_i + 1]
print "ruby >= %s\n" % Config::CONFIG["ruby_version"]
end
for gem in gems
data = File.read(gem)
spec = eval(data)
if provides
print "rubygem(%s) = %s\n" % [spec.name, spec.version]
end
if requires
for d in spec.dependencies
print d.requirement.to_rpm(d.name) unless d.type != "runtime"
end
for d in spec.required_rubygems_version.to_rpm("rubygems")
print d.gsub(/(rubygem\()|(\))/, "")
end
end
end
end
|