require 'rake'
require 'rake/testtask'
require 'rake/clean'
require 'rake/rdoctask'
require 'tools/rakehelp'
require 'fileutils'
include FileUtils

BUILD = "build"


SARRAY_EXT = 'ext/sarray'
SARRAY_EXT_SO = "#{SARRAY_EXT}/suffix_array.#{Config::CONFIG['DLEXT']}"
SARRAY_EXT_FILES = FileList[
"#{SARRAY_EXT}/*.c",
"#{SARRAY_EXT}/*.h",
"#{SARRAY_EXT}/extconf.rb",
"#{SARRAY_EXT}/Makefile",
] 

setup_tests
setup_clean ["#{SARRAY_EXT}/Makefile", 'build/fcst.rb', 'build/**/*', 
             'test/test.out', 'test/test.nstd', 'doc/rdoc', 
             'software/rubymail-0.17', 'software/PluginFactory-1.0.1',
             'software/ruby-guid-0.0.1']
setup_rdoc ['README', 'LICENSE', 'COPYING', 'lib/**/*.rb', 
            'doc/**/*.rdoc', 'test/*.rb', 'ext/sarray/suffix_array.c']

desc "Does a full compile, test, tar2rubyscript run"
task :default => [:compile, :test, :tar]

desc "Compiles all extensions"
task :compile => [:sarray]

desc "Builds just the suffix array extension"
task :sarray => ["#{SARRAY_EXT}/Makefile", SARRAY_EXT_SO]

desc "Extracts required software from the software directory"
task :extract_software do
    `tar -C software -xzf software/rubymail-0.17.tar.gz`
    `tar -C software -xzf software/ruby-guid-0.0.1.tar.gz ruby-guid-0.0.1/lib/guid.rb`
    `tar -C software -xzf software/PluginFactory-1.0.1.tar.gz PluginFactory-1.0.1/lib/pluginfactory.rb`
end

desc "Packages all files into one single ruby script in build/fcst.rb"
task :tar => [:extract_software, :compile] do
    rm_rf "build/fcst"
    cp_r "software/rubymail-0.17/lib/rmail", "build"
    cp_r "software/rubymail-0.17/lib/rmail.rb", "build"
    cp_r "lib/fastcst", "build"
    cp "software/PluginFactory-1.0.1/lib/pluginfactory.rb", "build"
    cp "software/ruby-guid-0.0.1/lib/guid.rb", "build"
    cp "lib/sadelta.rb", "build"
    cp "lib/suffix_array.#{Config::CONFIG['DLEXT']}", "build"
    cp "app/init.rb", "build"
    `ruby tools/tar2rubyscript.rb build build/fcst LICENSE`
    # need to fix up the script so it runs with the right header
    file = File.read("build/fcst")
    File.open("build/fcst", "w") do |f|
        f.write("#!/usr/bin/env ruby\n")
        f.write(file)
    end
    File.chmod(0755, "build/fcst")
end

file "#{SARRAY_EXT}/Makefile" => ["#{SARRAY_EXT}/extconf.rb"] do
    extconf "#{SARRAY_EXT}"
end


file SARRAY_EXT_SO => SARRAY_EXT_FILES do
    make "#{SARRAY_EXT}"
    cp SARRAY_EXT_SO, "lib"
end


