require 'rubygems'
require 'rake'
require 'rake/clean'
require 'rake/testtask'
require 'rake/packagetask'
require 'rake/gempackagetask'
require 'rake/rdoctask'
require 'rake/contrib/rubyforgepublisher'
require 'fileutils'
require 'hoe'
include FileUtils
require File.join(File.dirname(__FILE__), 'lib', 'rbus', 'etc', 'version')

AUTHOR = "Kristoffer Lundén"  # can also be an array of Authors
EMAIL = "kristoffer.lunden@gmail.com"
DESCRIPTION = "A native implementation of the D-Bus protocol."
GEM_NAME = "rbus" # what ppl will type to install your gem
RUBYFORGE_PROJECT = "rbus" # The unix name for your project
HOMEPATH = "http://#{RUBYFORGE_PROJECT}.rubyforge.org"


NAME = "rbus"
REV = nil # UNCOMMENT IF REQUIRED: File.read(".svn/entries")[/committed-rev="(d+)"/, 1] rescue nil
VERS = ENV['VERSION'] || (RBus::VERSION::STRING + (REV ? ".#{REV}" : ""))
                          CLEAN.include ['**/.*.sw?', '*.gem', '.config']
RDOC_OPTS = ['--quiet', '--title', "R-Bus documentation",
    "--opname", "index.html",
    "--line-numbers",
    "--main", "README.txt",
    "--charset", "utf-8",
    "--inline-source"]

class Hoe
  def extra_deps 
    @extra_deps.reject { |x| Array(x).first == 'hoe' } 
  end 
end

# Generate all the Rake tasks
# Run 'rake -T' to see list of generated tasks (from gem root directory)
hoe = Hoe.new(GEM_NAME, VERS) do |p|
  p.author = AUTHOR 
  p.description = DESCRIPTION
  p.email = EMAIL
  p.summary = DESCRIPTION
  p.url = HOMEPATH
  p.rubyforge_name = RUBYFORGE_PROJECT if RUBYFORGE_PROJECT
  p.test_globs = ["test/**/*_test.rb"]
  p.clean_globs = CLEAN  #An array of file patterns to delete on clean.
  p.spec_extras = {
    :rdoc_options => RDOC_OPTS,
    :extra_rdoc_files => ['README.txt','TUTORIAL.txt','HACKING.txt','COPYING.txt','CHANGELOG.txt','bin/rbus-send']
  }
  # == Optional
  #p.changes        - A description of the release's latest changes.
  #p.extra_deps     - An array of rubygem dependencies.
  #p.spec_extras    - A hash of extra values to set in the gemspec.
end

desc "Find all TODO's"
task :todo do
  FileList['**/*.rb'].egrep(/TODO/)
end

desc "Insert GPL into all source files"
task :GPL do
  gpl = File.readlines('GPL_header.txt')
  FileList['**/*.rb'].each do |filename|
    File.open(filename, 'r+') do |file|
      lines = file.readlines      
      # Skip shebang line
      i = (lines[0].index('#!') == 0) ? 1 : 0
      # Already have header?
      next if lines[i].index('#--') == 0
      
      puts "Liberating #{filename}"
      
      file.pos = 0
      file.print lines.insert(i, gpl).flatten
      file.truncate(file.pos)
    end
  end
end

require 'spec/rake/spectask'

desc "Run all specs"
Spec::Rake::SpecTask.new('spec') do |t|
  t.spec_files = FileList['spec/**/*.rb']
end

desc "Run all specs with RCov"
Spec::Rake::SpecTask.new('rcov') do |t|
  t.spec_files = FileList['spec/**/*.rb']
  t.rcov_dir = 'spec/coverage'
  t.rcov = true
end
