Spaces:
Running
Running
| require 'rake/clean' | |
| require "bundler/gem_tasks" | |
| require "rake/testtask" | |
| require_relative "extsources" | |
| SOURCES_DIR = "ext/sources" | |
| SOURCES = FileList[] | |
| EXTSOURCES.each do |src| | |
| basename = src.pathmap("%f") | |
| dest = basename == "LICENSE" ? basename | |
| : src.pathmap("%{\\.\\./\\.\\.,#{SOURCES_DIR}}p") | |
| .pathmap("%{\\.\\./javascript,#{SOURCES_DIR}/bindings/javascript}p") | |
| dir = dest.pathmap("%d") | |
| file src | |
| directory dir | |
| file dest => [src, dir] do |t| | |
| cp t.source, t.name | |
| end | |
| SOURCES.include dest | |
| end | |
| CLEAN.include SOURCES | |
| SRC = FileList["ext/*.{c,cpp,h}"] | |
| task build: SOURCES | |
| directory "pkg" | |
| CLOBBER.include "pkg" | |
| LIB_NAME = "whisper".ext(RbConfig::CONFIG["DLEXT"]) | |
| SO_FILE = File.join("ext", LIB_NAME) | |
| LIB_FILE = File.join("lib", LIB_NAME) | |
| file "ext/Makefile" => SRC + ["ext/extconf.rb"] + SOURCES do |t| | |
| chdir "ext" do | |
| ruby "extconf.rb" | |
| end | |
| end | |
| if File.exist? "ext/Makefile" | |
| task :make_clean do | |
| cd "ext" do | |
| sh "make", "clean" | |
| end | |
| end | |
| task clean: :make_clean | |
| task :make_distclean do | |
| cd "ext" do | |
| sh "make", "distclean" | |
| end | |
| end | |
| task clobber: :make_distclean | |
| end | |
| file SO_FILE => "ext/Makefile" do |t| | |
| chdir "ext" do | |
| sh "make" | |
| end | |
| end | |
| CLEAN.include SO_FILE | |
| directory "lib" | |
| file LIB_FILE => [SO_FILE, "lib"] do |t| | |
| copy t.source, t.name | |
| end | |
| CLEAN.include LIB_FILE | |
| Rake::TestTask.new | |
| TEST_FIXTURE_AUDIO = "test/fixtures/jfk.wav" | |
| TEST_FIXTURE_AUDIO_SRC = File.expand_path(File.join(__dir__, "..", "..", "samples", "jfk.wav")) | |
| TEST_FIXTURE_AUDIO_DIR = TEST_FIXTURE_AUDIO.pathmap("%d") | |
| directory TEST_FIXTURE_AUDIO_DIR | |
| if File.exist? TEST_FIXTURE_AUDIO_SRC | |
| file TEST_FIXTURE_AUDIO => [TEST_FIXTURE_AUDIO_SRC, TEST_FIXTURE_AUDIO_DIR] do |t| | |
| symlink t.source, t.name | |
| end | |
| else | |
| require "open-uri" | |
| file TEST_FIXTURE_AUDIO => TEST_FIXTURE_AUDIO_DIR do |t| | |
| File.write t.name, URI("https://github.com/ggml-org/whisper.cpp/raw/refs/heads/master/samples/jfk.wav").read | |
| end | |
| end | |
| TEST_MEMORY_VIEW = "test/jfk_reader/jfk_reader.#{RbConfig::CONFIG['DLEXT']}" | |
| file TEST_MEMORY_VIEW => "test/jfk_reader/jfk_reader.c" do |t| | |
| chdir "test/jfk_reader" do | |
| ruby "extconf.rb" | |
| sh "make" | |
| end | |
| end | |
| CLEAN.include TEST_MEMORY_VIEW | |
| task test: [LIB_FILE, TEST_MEMORY_VIEW, TEST_FIXTURE_AUDIO] | |