# -*- ruby -*-

require 'fileutils'
module FileUtils
  def chdir(dir, options = {}, &block) # :yield: dir
    dir = File.expand_path(dir)
    fu_output_message "Entering directory `#{dir}'" if options[:verbose]
    Dir.chdir(dir, &block)
    fu_output_message "Leaving directory `#{dir}'" if options[:verbose] and block
  end
  module_function :chdir
end



task :default => :calculator

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


houken = '../houken/houken' + exeext

peg = 'calc.peg'
tab_cpp = 'calc.tab.cpp'
srcs = FileList["../src/*.cpp"]
srcs += ['calc.cpp', '../machdep/unix/sysDep.cpp', '../etc/printSyntaxTree.cpp', tab_cpp]
bin = 'calc' + exeext


task :calculator => bin

file bin => srcs do
  sh 'g++', '-Wall', '-g', '-I../src', '-I../machdep/unix', '-I.', '-o', bin, *srcs
end


file tab_cpp => [peg, houken] do
  sh houken, peg
end

task :tab do
  sh houken, peg
end
  

file houken => :houken

task :houken do
  chdir '../houken', :verbose=>true do
    sh 'rake'
  end
end


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

task :allclean => :clean do
  chdir '..', :verbose=>true do
    sh 'rake', 'clean'
  end
end
