Using GGem#ebuild_name to standardize gem names
[g-gem.git] / ebuild.rb
blob1dae935e95e32457544677fe6d245bfcebb7eb06
1 require 'portage'
2 require 'depatom'
3 require 'rubygems'
5 class Ebuild
7   EXTENSION = ".ebuild"
9   require 'forwardable'
10   extend Forwardable
12   def_delegators :@spec, :name, :version, :date, :summary, :email,
13                  :rubyforge_project, :description, :local?, :remote?
15   attr_reader :spec
17   def initialize(spec)
18     @spec = spec
19   end
21   def ebuild_name
22     GGem.ebuild_name(spec.name)
23   end
25   def file_path
26     File.expand_path(File.join(Portage.rubydev_overlay, ebuild_name, "#{ebuild_name}-#{spec.version}#{EXTENSION}"))
27   end
29   def dirname
30     File.dirname(file_path)
31   end
33   def basename(include_extension=true)
34     File.basename(file_path, (EXTENSION unless include_extension) )
35   end
37   def exists?
38     File.exists? file_path
39   end
41   def write
42     require 'fileutils'
43     dir = File.dirname(file_path)
44     FileUtils.mkdir_p(dir) unless File.directory?(dir)
45     File.open(file_path, 'w') { |f| f.write(content) }
46   end
48   def src_uri
49     uri = spec.fetched_from if spec.respond_to? :fetched_from
50     (spec.local? ? "#{uri}/" : "#{uri}/gems/") + (ebuild_name == spec.name ? "${P}.gem" : "${MY_P}.gem")
51   end
53   def license
54     "Unknown"
55   end
57   def keywords
58     Portage.env('ARCH')
59   end
61   def homepage
62     @spec.homepage || "http://rubyforge.org/projects/#{@spec.rubyforge_project or @spec.name}"
63   end
65   def iuse
66     "#{'doc' if spec.has_rdoc}"
67   end
69   def depend
70     category = Portage.category
71     required_ruby = DependencyAtom.from_required_ruby_version(spec)
72     spec.dependencies.inject(required_ruby) do |s,d|
73       s + "\n" + DependencyAtom.from_gem_dependency(d, category).to_s
74     end
75   end
77   def content
78     require 'date'
79     <<-EBUILD
80 # Copyright 1999-#{Date.today.year} Gentoo Foundation
81 # Distributed under the terms of the GNU General Public License v2
82 # $Header: $
84 inherit ruby gems
86 USE_RUBY="ruby18"
87 MY_P="#{spec.name}-${PV}"
88 DESCRIPTION=#{(summary.capitalize.chomp('.')+'.').inspect}
89 HOMEPAGE=#{homepage.inspect}
90 SRC_URI=#{src_uri.inspect}
92 LICENSE=#{license.inspect}
93 SLOT="0"
94 KEYWORDS=#{keywords.inspect}
96 IUSE=#{iuse.inspect}
97 DEPEND=#{depend.inspect.gsub('\n', "\n\t")}
98     EBUILD
99   end
101   def execute(*commands)
102     callcc do |c|
103       if spec.local?
104         ENV.with(:GENTOO_MIRRORS => local_gentoo_mirror) do
105           c.call
106         end
107       end
108     end
109     generate if commands.delete('generate')
110     raise "Missing #{file_path}" unless exists?
111     system("ebuild #{file_path} #{commands.join(' ')}") unless commands.empty?
112   end