require 'rake'

windows = false
processor, platform, *rest = RUBY_PLATFORM.split("-")
windows = true if platform =~ /mswin32/ or platform =~ /mingw32/

if windows
  MAKE = 'mingw32-make'
  SLASH = '\\'
  COPY = 'copy'
  DEL = 'del'
else
  MAKE = 'make'
  SLASH = '/'
  COPY = 'cp'
  DEL = 'rm'
end

def warn_version
  puts 'Warning: VERSION not specified' unless ENV['VERSION']
end

def set_version
  if ENV['VERSION']
    File.open('lib/qtbindings_version.rb', 'w') do |file|
      file.write("QTBINDINGS_VERSION = '#{ENV['VERSION']}'\n")
      file.write("QTBINDINGS_RELEASE_DATE = '#{Time.now}'\n")
    end
    File.open('qtlib/qtbindings_qt_version.rb', 'w') do |file|
      file.write("QTBINDINGS_QT_VERSION = '#{ENV['VERSION']}'\n")
      file.write("QTBINDINGS_QT_RELEASE_DATE = '#{Time.now}'\n")
    end
  end
end

def clear_version
  if ENV['VERSION']
    File.open('lib/qtbindings_version.rb', 'w') do |file|
      file.write("QTBINDINGS_VERSION = '0.0.0.0'\n")
      file.write("QTBINDINGS_RELEASE_DATE = ''\n")
    end
    File.open('qtlib/qtbindings_qt_version.rb', 'w') do |file|
      file.write("QTBINDINGS_QT_VERSION = '0.0.0.0'\n")
      file.write("QTBINDINGS_QT_RELEASE_DATE = ''\n")
    end
  end
end

task :build_examples do
  # Go into the examples directory and look for all the makefiles and build them
  Dir['examples/**/makefile'].each do |file|
    if windows
      system("cd #{File.dirname(file).gsub('/', '\\')} && #{MAKE}")
    else
      system("cd #{File.dirname(file)} && #{MAKE}")
    end
  end
end

task :examples => [:build_examples] do
  system('cd examples && ruby run_all.rb')
end

task :default => [:all]

task :extconf do
  system('ruby extconf.rb')
end

# All calls 'make clean' and 'make build'
task :all => [:extconf] do
  system("#{MAKE} all")
end

task :clean => [:extconf] do
  system("#{MAKE} clean")
end

task :distclean => [:extconf] do
  system("#{MAKE} distclean")
end

task :make_build => [:extconf] do
  system("#{MAKE} build")
end

task :install => [:extconf] do
  system("#{MAKE} install")
end

task :gem => [:distclean] do
  warn_version()
  set_version()
  system("gem build qtbindings.gemspec")
  clear_version()
end

task :gemnative do
  warn_version()
  set_version()
  system("#{COPY} gemspecs#{SLASH}qtbindingsnative.gemspec .")
  system("gem build qtbindingsnative.gemspec")
  system("#{DEL} qtbindingsnative.gemspec")
  clear_version()
end

task :gemqt do
  warn_version()
  set_version()
  system("#{MAKE} installqt")
  system("#{COPY} gemspecs#{SLASH}qtbindings-qt.gemspec .")
  system("gem build qtbindings-qt.gemspec")
  system("#{DEL} qtbindings-qt.gemspec")
  clear_version()
end

task :build do
  Rake::Task[:extconf].execute
  Rake::Task[:all].execute
  Rake::Task[:install].execute
end
