task/ext.rake in rucy-0.1.2 vs task/ext.rake in rucy-0.1.3
- old
+ new
@@ -1,37 +1,96 @@
# -*- mode: ruby; coding: utf-8 -*-
+require 'rbconfig'
+require 'rucy/module'
+
+
namespace :ext do
- dir = "#{EXTDIR}/#{NAME}"
- name = "#{NAME}/tester"
- outname = "#{name}.#{EXTEXT}"
- out = File.join EXTDIR, outname
+ rbconf = RbConfig::CONFIG
+
+ mod = MODULE
+ name = env :NAME, MODULE.name.downcase
+ extdir = env :EXTDIR, 'ext'
+ docdir = env :DOCDIR, 'doc'
+ dlext = env :DLEXT, rbconf['DLEXT'] || 'so'
+ ruby = env :RUBY, 'ruby'
+ make = env :MAKE, 'make'
+ cc = env :CC, rbconf['CC'] || 'g++'
+ rdoc = env :RDOC, 'rdoc'# 'yardoc'
+ rucy2rdoc = env :RUCY2RDOC, 'rucy2rdoc'
+ defs = env :DEFS, []
+ incdirs = env(:INCDIRS) ? env(:INCDIRS) : []
+ cflags = env(:CFLAGS, '-Wall -O -g').dup
+
+ dir = "#{extdir}/#{name}"
+ modname = "#{name}/native"
+ outname = "#{name}.#{dlext}"
+ out = File.join extdir, outname
+
+ srcs = FileList["#{dir}/**/*.cpp"]
+
+ incroot = rbconf['rubyhdrdir']
+ incdirs.concat mod.include_dirs + Rucy.include_dirs + [
+ incroot,
+ "#{incroot}/#{RUBY_PLATFORM}",
+ '/opt/local/include',
+ '/opt/include'
+ ]
+ incdirs.uniq!
+
+ defs << 'WIN32' if win32?
+ defs << 'COCOA' if cocoa?
+ cflags << defs.map{|s| " -D#{s}"}.join
+ cflags << incdirs.map{|s| " -I#{s}"}.join
+
extconf = File.join dir, "extconf.rb"
makefile = File.join dir, "Makefile"
depend = File.join dir, "depend"
- cpps = Dir.glob("#{dir}/**/*.cpp")
+ rdocdir = ".doc/#{dir}"
+ rdocs = Hash[srcs.map{|path| [path, "#{rdocdir}/#{File.basename path}"]}]
+ docindex = "#{docdir}/index.html"
- task :build => makefile do
- sh %( cd #{dir} && #{MAKE} )
- end
+ task :build => out
+
+ task :rdoc => rdocs.values
+
+ task :doc => docindex
+
task :clean do
- sh %( cd #{dir} && #{MAKE} clean ) if File.exist? makefile
- sh %( rm -f #{makefile} #{depend} )
+ sh %( cd #{dir} && #{make} clean ) if File.exist? makefile
+ sh %( rm -rf #{makefile} #{depend} #{docdir} #{rdocs.values.join ' '} )
end
+ file out => makefile do
+ sh %( cd #{dir} && #{make} )
+ end
+
file makefile => [extconf, depend] do
- sh %( cd #{dir} && #{RUBY} #{File.basename extconf} )
+ sh %( cd #{dir} && #{ruby} #{File.basename extconf} )
end
- file depend => ["lib:build"] + cpps do
- incdirs = INCDIRS.map{|s| " -I#{s}"}.join
- srcs = cpps.map{|cpp| File.basename cpp}.join ' '
+ file depend => ["lib:build"] + srcs do
+ inc = incdirs.map{|s| " -I#{s}"}.join
+ src = srcs.map{|cpp| File.basename cpp}.join ' '
dep = File.basename depend
- sh %( cd #{dir} && #{CC} -M #{CFLAGS} #{incdirs} #{srcs} > #{dep} )
+ sh %( cd #{dir} && #{cc} -M #{cflags} #{inc} #{src} > #{dep} )
end
+
+ file docindex => "ext:rdoc" do
+ sh %( #{rdoc} #{rdocs.values.join ' '} )
+ end
+
+ rdocs.each do |(cpp, rdoc)|
+ file rdoc => [cpp, rdocdir] do
+ sh %( #{rucy2rdoc} #{cpp} > #{rdoc} )
+ end
+ end
+
+ directory rdocdir
+
end# :ext