# -*- mode: ruby; coding: utf-8 -*- require 'rubygems' require "rubygems/ext" require "rubygems/installer" require 'hoe' require 'rake/extensiontask' require 'fileutils' require './lib/opencv/psyched_yaml' SO_FILE = 'opencv.so' Hoe.plugin :gemspec hoespec = Hoe.spec 'ruby-opencv' do |s| s.summary = 'OpenCV wrapper for Ruby' s.description = 'ruby-opencv is a wrapper of OpenCV for Ruby. It helps you to write computer vision programs (e.g. detecting faces from pictures) with Ruby.' s.licenses = ['The BSD License'] s.developer('lsxi', 'masakazu.yonekura@gmail.com') s.developer('ser1zw', 'azariahsawtikes@gmail.com') s.developer('pcting', 'pcting@gmail.com') s.readme_file = 'README.md' s.history_file = 'History.txt' s.spec_extras = { :extensions => ['ext/opencv/extconf.rb'] } s.test_globs = ['test/test_*.rb'] s.urls = ['https://github.com/ruby-opencv/ruby-opencv/'] s.extra_dev_deps << ['rake-compiler', '>= 0'] << ['hoe-gemspec'] Rake::ExtensionTask.new('opencv', spec) do |ext| ext.lib_dir = 'lib' end end hoespec.spec.files.delete('.gemtest') Rake::Task[:test].prerequisites << :compile desc 'Create a pre-compiled gem' task 'gem:precompile' => ['gem'] do tmp_dir = Dir.mktmpdir('tmp', '.') gemfile = Dir.glob("pkg/*.gem")[0] target_dir = File.join(tmp_dir, File.basename(gemfile, '.gem')) installer = Gem::Installer.new(gemfile) installer.unpack(target_dir) rubies = ENV['RUBIES'] ? ENV['RUBIES'].split(',') : [Gem.ruby] args = ENV['EXT_OPTS'] ? ENV['EXT_OPTS'].split(',') : [] gemspec = installer.spec extension = gemspec.extensions[0] gemspec.extensions.clear gemspec.platform = ENV['PLATFORM'] || Gem::Platform::CURRENT multi = rubies.size > 1 rubies.each { |ruby| results = [] # Convert MinGW's drive letters to Windows' ones # e.g. /c/ruby/bin/ruby.exe => c:/ruby/bin/ruby.exe ruby.gsub!(/^\/([a-zA-Z])\//, '\1:/') lib_dir = 'lib' if multi major, minor, _ = `#{ruby} -e "print RUBY_VERSION"`.chomp.split('.') lib_dir = File.join(lib_dir, [major, minor].join('.')) end target_platform = `#{ruby} -e "print RUBY_PLATFORM"` # Convert MinGW's drive letters to Windows' ones # e.g. --with-opencv-dir=/c/path/to/opencv => --with-opencv-dir=c:/path/to/opencv args.map! { |a| a.gsub(/=\/([a-zA-Z])\//, '=\1:/') } if target_platform =~ /mingw/ make_cmd = (target_platform =~ /mswin/) ? 'nmake' : 'make' Dir.chdir(target_dir) { cmd = [ruby, extension, *args].join(' ') Gem::Ext::ExtConfBuilder.run(cmd, results) Gem::Ext::ExtConfBuilder.make('', results) FileUtils.mkdir_p lib_dir FileUtils.mv SO_FILE, lib_dir sh "#{make_cmd} clean" } gemspec.files << File.join(lib_dir, SO_FILE) } Dir.chdir(target_dir) { gemfile = Gem::Package.build(gemspec) FileUtils.mv gemfile, File.dirname(__FILE__) } FileUtils.rm_rf tmp_dir end # vim: syntax=ruby