# Rakefile for gem2rpm
# vim: syntax=ruby ai et sts=2 sw=2

require 'rubygems'
require 'rake/rdoctask'
require 'rake/gempackagetask'

RPM_ARCH = 'noarch'
RPM_RELEASE = 1

PKG_FILES = FileList[
  'Rakefile',
  'bin/**/*',
  'lib/**/*'
]

task :default => :package

def read_package_version(pkg_name)
  if `ruby -Ilib bin/#{pkg_name} --version` =~ /\w+ ([\d\.]+)/
    return $1
  else
    $stderr.puts("failed to read version information from bin/#{pkg_name}")
    return '0.0'
  end
end

# build a source package for distribution
spec = Gem::Specification.new do |s|
  s.name = 'gem2rpm'
  s.version = read_package_version(s.name)
  s.summary = 'GEM to RPM Converter'
  s.description = <<EOF
gem2rpm creates rpms from existing gem files.  It allows system
administrators who manage systems software as rpms to manage gems just like
any other software.
EOF

  s.files = PKG_FILES.to_a

  s.require_path = 'lib'
  s.bindir = 'bin'
  s.executables = ['gem2rpm']

# s.has_rdoc = true
# s.extra_rdoc_files = rd.rdoc_files.reject { |fn| fn =~ /\.rb$/ }.to_a
# s.rdoc_options <<
#   '--title' <<  'Rake -- Ruby Make' <<
#   '--main' << 'README' <<
#   '--line-numbers'

  s.author = 'Marek Gilbert'
  s.email = 'gil@fooplanet.com'
  s.homepage = "http://fooplanet.com/projects/#{s.name}/"
end

# build documentation from source
rd = Rake::RDocTask.new("rdoc") do |rd|
  rd.rdoc_dir = 'rdoc'
  rd.title    = "#{spec.name} -- #{spec.summary}"
  rd.options.push('--line-numbers', '--inline-source')
  rd.rdoc_files.include('bin/gem2rpm', 'README', 'lib/**/*.rb', 'doc/**/*.rdoc')
end

pkg = Rake::GemPackageTask.new(spec) do |pkg|
  pkg.need_zip = true
  pkg.need_tar_bz2 = true
end
built_gem_file = "#{pkg.package_dir}/#{pkg.gem_file}"
built_rpm_file = "#{pkg.package_dir}/" +
  "#{pkg.gem_file.sub(/\.gem$/, '')}-#{RPM_RELEASE}.#{RPM_ARCH}.rpm"
built_gz_file  = "#{pkg.package_dir}/#{spec.name}-#{spec.version}.gz"

task :package => [:rpm, :gz]

task :rpm => built_rpm_file
file built_rpm_file => built_gem_file do |t|
  sh "bin/gem2rpm -a #{RPM_ARCH} -r #{RPM_RELEASE} " +
    "-O #{pkg.package_dir} #{t.prerequisites[0]}"
end

task :gz => built_gz_file
file built_gz_file => [pkg.package_dir, "bin/gem2rpm"] do |t|
  sh "gzip -9 -c #{t.prerequisites[1]} > #{t.name}"
end

task :gem_install => built_gem_file do |t|
  sh "sudo gem install #{built_gem_file}"
end

task :rpm_install => built_rpm_file do |t|
  sh "sudo rpm -Uvh --force #{built_rpm_file}"
end

task :install => :rpm_install

task :release do
  sh "hg tag RELEASE-#{spec.version}"
end

task :publish => :package do
  sh "scp #{pkg.package_dir}/*.{gz,bz2,gem,rpm} www.fooplanet.com:/export/www/www.fooplanet.com/htdocs/projects/gem2rpm/files"
  sh "ssh www.fooplanet.com sh -c \"'cd /export/www/www.fooplanet.com/htdocs/projects/gem2rpm; ln -sf files/gem2rpm-#{spec.version}.gz gem2rpm.gz'\""
end

