# -*- ruby -*-


task :default => :parsergen

exeext = (RUBY_PLATFORM =~ /cygwin/) ? '.exe' : ''

lib = '../libhouken.a'
srcs = FileList["*.cpp"].exclude("*.tab.cpp").include("../etc/printSyntaxTree.cpp")
bin = 'houken' + exeext



task :parsergen => bin

file bin => srcs + [lib] do
  files = srcs + [lib]
  sh 'g++', '-Wall', '-g', '-I../src', '-o', bin, *files
end

file lib => :lib

task :lib do
  sh '(cd ..; rake)'
end


task :tab => bin do
  sh "./#{bin}", 'peg.peg'
end


task :clean do
  FileUtils.rm_f(bin, :verbose => true)
  FileUtils.rm_f(bin + '.stackdump', :verbose => true)
  FileUtils.rm_f(Dir['peg.tab.*'], :verbose => true)
  FileUtils.rm_f(Dir['*.bak'], :verbose => true)
end

task :allclean => :clean do
  sh '(cd ..; rake clean)'
end

task :diff do
  sh 'diff PegParser.h peg.tab.h || true'
  sh 'diff PegParser.cpp peg.tab.cpp || true'
end

task :install_tab do
  sh 'mv', '-f', 'PegParser.h', 'PegParser.h.bak'
  sh 'mv', '-f', 'PegParser.cpp', 'PegParser.cpp.bak'
  sh 'mv', '-f', bin, bin + '.bak'
  sh %q(sed 's/_PEG_TAB_H_/_PEGPARSER_H_/' < peg.tab.h > PegParser.h)
  sh %q(sed 's/include "peg.tab.h"/include "PegParser.h"/' < peg.tab.cpp > PegParser.cpp)
end
