# -*- ruby -*-

task :default => [:test]


$objDir = 'obj'

lib = '../libhouken.a'
$inc = '-I../src'
exeext = (/cygwin/ =~ RUBY_PLATFORM) ? '.exe' : ''
testerBin = 'tester' + exeext
tabcpp = 'errortest.tab.cpp'
houken = '../houken/houken' + exeext


file tabcpp => ['errortest.peg'] do
  sh houken, 'errortest.peg'
end

desc "create parser"
task :tab do
  sh houken, 'errortest.peg'
end


srcs = FileList['*.cpp'].include('../etc/printSyntaxTree.cpp')
srcs.include(tabcpp) unless srcs.include?(tabcpp)

desc "create tester"
task :makeTester => [tabcpp, testerBin]

file testerBin => srcs + [lib] do
  inp = srcs + [lib]
  sh 'g++', $inc, '-g', '-o', testerBin, *inp
end

file lib => :libhouken

task :libhouken do
  sh "(cd ..; rake)"
end

task :test => [testerBin] do
  sh './'+testerBin
end

desc "cleanup"
task :clean do
  FileUtils.rm_f(Dir["errortest.tab.*"], :verbose => true)
  FileUtils.rm_f(testerBin, :verbose => true)
  FileUtils.rm_f(testerBin+'.stackdump', :verbose => true)
end
