updated on Thu Jan 26 12:02:26 UTC 2012
[aur-mirror.git] / gem2arch-ruby-enterprise / gem2arch-enterprise.rb
blob701cb393d030d6963bd0d48d29678c03a22845a8
1 #!/opt/ruby-enterprise/bin/ruby
3 require 'date'
4 require 'digest/md5'
5 require 'erb'
6 require 'fileutils'
7 require 'rubygems'
8 require 'tmpdir'
10 PKGBUILD = %{# Generated by gem2arch-ruby-enterprise
12 _gemname=<%= gem_name %>
13 pkgname=ruby-enterprise-$_gemname
14 pkgver=<%= gem_ver %>
15 pkgrel=0
16 pkgdesc="<%= description %>"
17 arch=('i686' 'x86_64')
18 url="<%= website %>"
19 license=('')
20 depends=('ruby-enterprise'<%= depends %>)
21 makedepends=('ruby-enterprise')
22 source=(http://gems.rubyforge.org/gems/$_gemname-$pkgver.gem)
23 noextract=($_gemname-$pkgver.gem)
24 md5sums=('<%= md5sum %>')
26 build() {
27   cd $srcdir
28   local _gemdir=`/opt/ruby-enterprise/bin/ruby -rubygems -e'puts Gem.default_dir'`
29   /opt/ruby-enterprise/bin/gem install --ignore-dependencies --no-rdoc --no-ri  -i "$pkgdir$_gemdir" $_gemname-$pkgver.gem
33 def download(gem_name, gem_ver = nil)
34   version = gem_ver || Gem::Requirement.default
36   all = Gem::Requirement.default
37   dep = Gem::Dependency.new gem_name, version
39   puts "Fetch #{gem_name} spec"
41   specs_and_sources = Gem::SpecFetcher.fetcher.fetch dep, all
42   specs_and_sources.sort_by { |spec,| spec.version }
43   spec, source_uri = specs_and_sources.last
45   if spec.nil? then
46     $stderr.puts "Could not find #{gem_name} in any repository"
47     exit 1
48   end
50   puts "Downloaded #{spec.full_name}"
52   path = Gem::RemoteFetcher.fetcher.download spec, source_uri
53   FileUtils.mv path, "#{spec.full_name}.gem"
55   return spec
56 end
58 def calc_digest(file_name)
59   md5sum = Digest::MD5.new
60   file_size = File.size file_name
62   File.open(file_name) do |f|
63     while buf = f.read(1024)
64       md5sum << buf
65     end
66   end
68   return md5sum.to_s
69 end
71 def gen_pkgbuild(spec)
72   gem_name = spec.name
73   gem_ver = spec.version
75   contact = ENV['ARCH_RUBY'] || ''
77   website = spec.homepage
78   description = spec.summary
80   md5sum = calc_digest(spec.full_name + '.gem')
82   depends = spec.runtime_dependencies
83   depends = if depends.empty? then ""
84   else
85     ' ' + depends.map do |d|
86       d.requirement.requirements.map do |comp, ver|
87         comp = '>=' if comp == '~>'
88         "'ruby-enterprise-#{d.name}#{comp}#{ver}'"
89       end
90     end.join(" ")
91   end
93   return ERB.new(PKGBUILD).result(binding)
94 end
96 if $0 == __FILE__
97   if ARGV.length < 1
98     puts "Usage: #{$0} GEM_NAME [GEM_VER]"
99     exit
100   end
102   Dir.mktmpdir do |tmp_dir|
103     base_dir = Dir.pwd
104     Dir.chdir tmp_dir
106     spec = download *ARGV.take(2)
108     target_dir = "#{base_dir}/ruby-enterprise-#{spec.name}"
109     Dir.mkdir target_dir unless File.exist? target_dir
111     {
112       'PKGBUILD' => lambda {|s| gen_pkgbuild s }
113     }.each do |file, gen_file|
114       puts "Generated #{file} for ruby-enterprise-#{spec.full_name}"
115       File.open(file, 'w') {|f| f.write gen_file.call(spec) }
117       FileUtils.mv file, target_dir
118     end
120     Dir.chdir base_dir
121   end