Sha256: 0364d16e61f43318bd70aafe1d628169d22e0489d823e7f8f67baf83c8721d67

Contents?: true

Size: 1.84 KB

Versions: 6

Compression:

Stored size: 1.84 KB

Contents

# -*- mode: ruby; coding: utf-8 -*-


require 'rbconfig'


task :ext => 'ext:build'

%w[clean].each do |t|
  task t.intern => "ext:#{t}"
end


namespace :ext do


  rbconf = RbConfig::CONFIG

  mod      = MODULE
  mods     = env :MODULES,  [], :array
  modname  = env :MODNAME,  mod.name.downcase
  dlname   = env :DLNAME,   'native'
  dlext    = env :DLEXT,    rbconf['DLEXT'] || 'so'
  extdir   = env :EXTDIR,   "ext/#{modname}"
  libdir   = env :LIBDIR,   "lib/#{modname}"
  ruby     = env :RUBY,     'ruby'
  make     = env :MAKE,     'make'
  cxx      = env :CXX,      rbconf['CXX'] || 'g++'
  cppflags = env :CPPFLAGS, rbconf['CPPFLAGS']
  cxxflags = env :CXXFLAGS, rbconf['CXXFLAGS']
  defs     = env :DEFS,     [], :array
  incdirs  = env(:INCDIRS,  [], :array) + mods.reverse.map {|m| m.include_dir}

  cppflags = cppflags cppflags, defs, incdirs
  cxxflags = cflags   cxxflags

  outname = "#{dlname}.#{dlext}"
  extout  = File.join extdir, outname
  libout  = File.join libdir, outname

  srcs = FileList["#{extdir}/**/*.cpp"]
  libs = FileList["#{libdir}/../lib*.a"]

  extconf  = File.join extdir, 'extconf.rb'
  makefile = File.join extdir, 'Makefile'
  depend   = File.join extdir, 'depend.mf'


  task :build => libout

  task :clean do
    sh %( cd #{extdir} && #{make} clean ) if File.exist? makefile
    sh %( rm -rf #{makefile} #{depend} #{libout} )
  end

  file libout => extout do
    sh %( cp #{extout} #{libout} )
  end

  file extout => [:lib, makefile] do
    sh %( cd #{extdir} && #{make} )
  end

  file makefile => [extconf, depend] + libs do
    sh %( cd #{extdir} && #{ruby} #{File.basename extconf} )
  end

  file depend => srcs do
    inc = incdirs.map {|s| " -I#{s}"}.join
    src = srcs.map {|cpp| File.basename cpp}.join ' '
    dep = File.basename depend
    sh %( cd #{extdir} && #{cxx} -M #{cppflags} #{inc} #{src} > #{dep} )
  end


end# :ext

Version data entries

6 entries across 6 versions & 1 rubygems

Version Path
xot-0.1.12 task/ext.rake
xot-0.1.11 task/ext.rake
xot-0.1.10 task/ext.rake
xot-0.1.9 task/ext.rake
xot-0.1.8 task/ext.rake
xot-0.1.7 task/ext.rake