require "rubygems/package_task"
require "rake/extensiontask"
require "rake/testtask"
require "date"
require "rake/clean"
begin
  require "bundler/setup"
  Bundler::GemHelper.install_tasks
rescue LoadError
  warn "Install bundler to get support for simplified gem publishing"
end

GEM_NAME = "blackfire".freeze
SO_NAME = "blackfire".freeze

default_spec = Gem::Specification.load("#{GEM_NAME}.gemspec")

# configure files to be cleaned
Dir["pkg/**"].each { |file| CLEAN.include file }
Dir["lib/**/*.{o,so,bundle}"].each { |file| CLEAN.include file }
Dir["doc/**/*.{txt,dat,png,html}"].each { |file| CLEAN.include file }
Dir["tmp/**"].each { |file| CLEAN.include file }
Dir["./profile.*"].each { |file| CLEAN.include file }
CLEAN.select! { |f| File.exist?(f) }

# specify which versions/builds to cross compile
Rake::ExtensionTask.new do |ext|
  puts "Rake::ExtensionTask. Ruby: #{RUBY_VERSION}"
  ext.gem_spec = default_spec
  ext.name = SO_NAME
  ext.ext_dir = "ext/#{SO_NAME}"
  ext.lib_dir = "lib/#{RUBY_VERSION}"
  ext.cross_compile = true
  ext.cross_platform = %w[x86-mingw32 x64-mingw32]
end

# Rake task to build the default package
Gem::PackageTask.new(default_spec) do |pkg|
  pkg.need_tar = true
end

# Setup Windows Gem
if RUBY_PLATFORM.match(/win32|mingw32/)
  # Windows specification
  win_spec = default_spec.clone
  win_spec.platform = Gem::Platform::CURRENT
  win_spec.files += Dir.glob("lib/**/*.so")
  win_spec.instance_variable_set(:@cache_file, nil) # Hack to work around gem issue

  # Unset extensions
  win_spec.extensions = nil

  # Rake task to build the windows package
  Gem::PackageTask.new(win_spec) do |pkg|
    pkg.need_tar = false
  end
end

task default: :test

desc "Run the blackfire test suite"
Rake::TestTask.new do |t|
  t.libs += %w[lib ext test]
  t.test_files = Dir["test/ruby-prof-tests/**_test.rb",
                     "test/sinatra-integration-tests/**_test.rb",
                     "test/blackfire-tests/**_test.rb"
                    ]
  t.verbose = true
  t.warning = true
end
