You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
105 lines
2.9 KiB
105 lines
2.9 KiB
require 'erb'
|
|
require 'open3'
|
|
require 'rake/clean'
|
|
require 'rake/testtask'
|
|
require 'rubygems/package'
|
|
|
|
CLEAN.include '**/*.o'
|
|
CLEAN.include "**/*.#{(defined?(RbConfig) ? RbConfig : Config)::MAKEFILE_CONFIG['DLEXT']}"
|
|
CLOBBER.include 'doc'
|
|
CLOBBER.include '**/*.log'
|
|
CLOBBER.include '**/Makefile'
|
|
CLOBBER.include '**/extconf.h'
|
|
CLOBBER.include '**/extconf.h'
|
|
CLOBBER.include '**/whisper.*'
|
|
CLOBBER.include '**/ggml.*'
|
|
CLOBBER.include '**/dr_wav.h'
|
|
|
|
BUILD_VERSION=2
|
|
# Determine the current version of the software
|
|
if File.read('../../CMakeLists.txt') =~ /project.*\s*VERSION\s*(\d.+)\)/
|
|
CURRENT_VERSION = "#{$1}.#{BUILD_VERSION}"
|
|
else
|
|
CURRENT_VERSION = "0.0.0.#{BUILD_VERSION}"
|
|
end
|
|
|
|
def shell(args, opts = {})
|
|
puts "> #{args.join(' ')}"
|
|
cmd, live_stream, cwd = args, opts[:live_stdout], opts[:cwd]
|
|
Dir.chdir(cwd) {
|
|
wait_thr = nil
|
|
|
|
Open3.popen3(*cmd) do |stdin, stdout, stderr, thr|
|
|
stdin.close
|
|
wait_thr = thr # Ruby 1.8 will not yield thr, this will be nil
|
|
|
|
while line = stdout.gets do
|
|
live_stream.puts(line) if live_stream
|
|
end
|
|
|
|
while line = stderr.gets do
|
|
puts line
|
|
end
|
|
end
|
|
|
|
# prefer process handle directly from popen3, but if not available
|
|
# fallback to global.
|
|
p_status = wait_thr ? wait_thr.value : $?
|
|
exit_code = p_status.exitstatus
|
|
error = (exit_code != 0)
|
|
}
|
|
end
|
|
|
|
make_program = (/mswin/ =~ RUBY_PLATFORM) ? 'nmake' : 'make'
|
|
MAKECMD = ENV['MAKE_CMD'] || make_program
|
|
MAKEOPTS = ENV['MAKE_OPTS'] || ''
|
|
WHISPER_SO = "ext/whisper.#{(defined?(RbConfig) ? RbConfig : Config)::MAKEFILE_CONFIG['DLEXT']}"
|
|
|
|
file 'ext/Makefile' => 'ext/extconf.rb' do
|
|
shell(['ruby', 'extconf.rb', ENV['EXTCONF_OPTS'].to_s],
|
|
{ live_stdout: STDOUT, cwd: "#{Dir.pwd}/ext" }
|
|
)
|
|
end
|
|
|
|
def make(target = '')
|
|
shell(["#{MAKECMD}", "#{MAKEOPTS}", "#{target}"].reject(&:empty?),
|
|
{ live_stdout: STDOUT, cwd: "#{Dir.pwd}/ext" }
|
|
)
|
|
end
|
|
|
|
# Let make handle dependencies between c/o/so - we'll just run it.
|
|
file WHISPER_SO => (['ext/Makefile'] + Dir['ext/*.cpp'] + Dir['ext/*.c'] + Dir['ext/*.h']) do
|
|
make
|
|
end
|
|
|
|
desc "Compile the shared object"
|
|
task :compile => [WHISPER_SO]
|
|
|
|
desc "Default Task (Test project)"
|
|
task :default => :test
|
|
|
|
Rake::TestTask.new(:test) do |t|
|
|
t.test_files = FileList['tests/test_*.rb']
|
|
t.verbose = false
|
|
end
|
|
|
|
desc 'Generate gem specification'
|
|
task :gemspec do
|
|
system("cp ../../LICENSE .")
|
|
system("cp ../../README.md .")
|
|
tspec = ERB.new(File.read(File.join(File.dirname(__FILE__),'lib','whispercpp.gemspec.erb')))
|
|
File.open(File.join(File.dirname(__FILE__),'whispercpp.gemspec'),'wb') do|f|
|
|
f << tspec.result
|
|
end
|
|
end
|
|
|
|
desc 'Build gem'
|
|
task :package => :gemspec do
|
|
spec_source = File.read File.join(File.dirname(__FILE__),'whispercpp.gemspec')
|
|
spec = nil
|
|
# see: http://gist.github.com/16215
|
|
Thread.new { spec = eval("#{spec_source}") }.join
|
|
spec.validate
|
|
Gem::Package.build(spec)
|
|
end
|