Rakefile in pycall-1.3.1 vs Rakefile in pycall-1.4.0

- old
+ new

@@ -1,31 +1,93 @@ -require "bundler" -Bundler::GemHelper.install_tasks +require "bundler/gem_helper" +require "rake/clean" -require "rake" -require "rake/extensiontask" -require "rspec/core/rake_task" +base_dir = File.join(File.dirname(__FILE__)) +helper = Bundler::GemHelper.new(base_dir) +helper.install +spec = helper.gemspec + +def run_extconf(build_dir, extension_dir, *arguments) + cd(build_dir) do + ruby(File.join(extension_dir, "extconf.rb"), *arguments) + end +end + +def make_command + if RUBY_PLATFORM =~ /mswin/ + "nmake" + else + ENV["MAKE"] || find_make + end +end + +def find_make + candidates = ["gmake", "make"] + paths = ENV.fetch("PATH", "").split(File::PATH_SEPARATOR) + exeext = RbConfig::CONFIG["EXEEXT"] + candidates.each do |candidate| + paths.each do |path| + cmd = File.join(path, "#{candidate}#{exeext}") + return cmd if File.executable?(cmd) + end + end +end + Dir[File.expand_path('../tasks/**/*.rake', __FILE__)].each {|f| load f } -gem_spec = eval(File.read('pycall.gemspec')) -Rake::ExtensionTask.new('pycall', gem_spec) do |ext| - ext.lib_dir = File.join(*['lib', ENV['FAT_DIR']].compact) - ext.cross_compile = true - ext.cross_platform = %w[x86-mingw32 x64-mingw32] - ext.cross_compiling do |s| - s.files.concat %w[lib/2.2/pycall.so lib/2.3/pycall.so lib/2.4/pycall.so] +spec.extensions.each do |extension| + extension_dir = File.join(base_dir, File.dirname(extension)) + build_dir = ENV["BUILD_DIR"] + if build_dir + build_dir = File.join(build_dir, "pycall") + directory build_dir + else + build_dir = extension_dir end + + makefile = File.join(build_dir, "Makefile") + file makefile => build_dir do + run_extconf(build_dir, extension_dir) + end + + CLOBBER << makefile + CLOBBER << File.join(build_dir, "mkmf.log") + + desc "Configure" + task configure: makefile + + desc "Compile" + task compile: makefile do + cd(build_dir) do + sh(make_command) + end + end + + task :clean do + cd(build_dir) do + sh(make_command, "clean") if File.exist?("Makefile") + end + end end -Rake::ExtensionTask.new('pycall/spec_helper') +require "rake/extensiontask" +Rake::ExtensionTask.new("pycall/spec_helper") -desc "Compile binaries for mingw platform using rake-compiler-dock" -task 'build:mingw' do - require 'rake_compiler_dock' - RakeCompilerDock.sh "bundle && rake cross native gem RUBY_CC_VERSION=2.1.6:2.2.2:2.3.0:2.4.0" +desc "Run tests" +task :test do + cd(base_dir) do + ruby("test/run-test.rb") + end end -RSpec::Core::RakeTask.new(:spec) +task default: :test -task :default => :spec +require "rspec/core/rake_task" +RSpec::Core::RakeTask.new(:spec) do |t| + ext_dir = File.join(base_dir, "ext/pycall") + t.ruby_opts = "-I#{ext_dir}" + t.verbose = true +end + +task default: :spec task spec: :compile