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