require 'rake/clean'
require "bundler/gem_tasks"
require "pathname"
require "yaml"
require "rake/testtask"

extsources = YAML.load_file("extsources.yaml")
SOURCES = FileList[]
extsources.each do |src|
  basename = src.pathmap("%f")
  dest = basename == "LICENSE" ? basename : basename.pathmap("ext/%f")
  file src
  file dest => src do |t|
    cp t.source, t.name
  end
  SOURCES.include dest
end
CLEAN.include SOURCES
CLEAN.include FileList[
                "ext/*.o",
                "ext/*.metal",
                "ext/whisper.{so,bundle,dll}",
                "ext/depend"
              ]

task build: SOURCES + FileList[
                        "ext/extconf.rb",
                        "ext/ruby_whisper.h",
                        "ext/ruby_whisper.cpp",
                        "whispercpp.gemspec",
                      ]

directory "pkg"
CLOBBER.include "pkg"

TEST_MODEL = "../../models/ggml-base.en.bin"
LIB_NAME = "whisper".ext(RbConfig::CONFIG["DLEXT"])
LIB_FILE = File.join("lib", LIB_NAME)

directory "lib"
task LIB_FILE => SOURCES + ["lib"] do |t|
  Dir.chdir "ext" do
    sh "ruby extconf.rb"
    sh "make"
  end
  mv "ext/#{LIB_NAME}", t.name
end
CLEAN.include LIB_FILE

Rake::TestTask.new do |t|
  t.test_files = FileList["tests/test_*.rb"]
end
task test: [TEST_MODEL, LIB_FILE]

file TEST_MODEL do
  Dir.chdir "../.." do
    sh "./models/download-ggml-model.sh base.en"
  end
end
