From 9b6e7da47e8a648ea39281a2f7b037c69f1befbc Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Per=20=C3=98yvind=20Karlsen?= Date: Sun, 21 Mar 2010 03:41:53 +0000 Subject: add rubygem(...) dependency extractor (disabled for now) --- rubygems.rb | 84 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 84 insertions(+) create mode 100755 rubygems.rb (limited to 'rubygems.rb') diff --git a/rubygems.rb b/rubygems.rb new file mode 100755 index 0000000..51044b3 --- /dev/null +++ b/rubygems.rb @@ -0,0 +1,84 @@ +#!/usr/bin/env ruby +#-- +# Copyright 2010 Per Øyvind Karlsen +# 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.version_requirements.to_rpm(d.name) + end + for d in spec.required_rubygems_version.to_rpm("rubygems") + print d.gsub(/(rubygem\()|(\))/, "") + end + end + end +end -- cgit v1.2.1