Rakefile in congruence_solver-0.3.0 vs Rakefile in congruence_solver-0.3.1
- old
+ new
@@ -1,53 +1,87 @@
#require "bundler/gem_tasks"
require "rspec/core/rake_task"
-require 'rake/extensiontask'
+require "rake/extensiontask"
+require "os"
-
-
-=begin
-namespace :test do
- desc "Compile and unit test C extensions"
- Rspec::Core::RakeTask.new :c => :compile_c do |t|
- t.rspec_opts = C_SPEC_FILE
- end
-end
-=end
-
#exe runs the csolve binary
task :exe do
- $LOAD_PATH << "#{Dir.pwd}/lib/"
- require_relative "bin/csolve.rb"
+ $LOAD_PATH << "#{Dir.pwd}/lib/"
+ require_relative "bin/csolve.rb"
end
#spec runs all RSpec examples
RSpec::Core::RakeTask.new :spec
#uses task template provided by rake-compiler to run the extension compilation
#workflow. Task name: compile (do not use task name: ext)
Rake::ExtensionTask.new 'congruence_solver' do |ext|
- ext.lib_dir = "lib/congruence_solver"
+ ext.lib_dir = "lib/congruence_solver"
end
task :bench do
- $LOAD_PATH << "#{Dir.pwd}/lib/"
- Dir.foreach("bench") do |bm_file|
- path = "bench/#{bm_file}"
- if File.file? path and path =~ "_bm.rb^"
- require_relative path
- end
- end
+ $LOAD_PATH << "#{Dir.pwd}/lib/"
+ Dir.foreach("bench") do |bm_file|
+ path = "bench/#{bm_file}"
+ if File.file? path and path =~ "_bm.rb^"
+ require_relative path
+ end
+ end
end
+#update submodule containing extension.
+
+task :fetch_ext do
+ EXT_DIR = "ext/congruence_solver"
+ `git submodule update --init --remote #{EXT_DIR}`
+end
+
+
#executes compile task defined above, then cleans up the tmp directory that
#rake-compiler leaves behind for some reason
-task :compile_c => :compile do
- CLEAN_CMD = "rmdir /s /q tmp"
- system CLEAN_CMD
+task :compile_ext => :compile do
+ if OS.windows? then
+ `rmdir /s /q tmp`
+ else
+ `rm -rf tmp`
+ end
end
+task :update_ext => [:fetch_ext, :compile_ext]
+
+
+task :clean do
+ FILES_TO_RM_ARY = %w[congruence_solver-*.gem
+ lib/congruence_solver/congruence_solver.so]
+
+ file_to_rm_str = FILES_TO_RM_ARY.inject("") {|file_list, file| file_list += file + " "}
+
+ if OS.windows?
+ `rm -f #{file_to_rm_str}`
+ else
+ `rm -f #{file_to_rm_str}`
+ end
+end
+
+
+task :build => [:compile_ext] do
+ GEMSPEC = "congruence_solver.gemspec"
+ `gem build #{GEMSPEC}`
+end
+
+
+task :install => [:clean, :build] do
+ dot_gem_files = Dir.entries(Dir.pwd).select {|f| f =~ /congruence_solver\-.*\.gem/}
+ if dot_gem_files.empty?
+ STDERR.puts "Failed to build gem. Exiting."
+ elsif dot_gem_files.length > 1
+ STDERR.puts "Error: conflicting .gem files in directory. Exiting."
+ else
+ `gem install #{dot_gem_files.first}`
+ end
+end