X-Git-Url: http://git.code-monkey.de/?p=ruby-esmart.git;a=blobdiff_plain;f=Rakefile;h=b9b41adb5929ba09346a4f22d5888bb37caa5b98;hp=9f3a1b39bccaa4337a3146de1af5a95d7de2535e;hb=HEAD;hpb=1969f6740e354d24f5a05436d0d3ffa63f9dbae9 diff --git a/Rakefile b/Rakefile index 9f3a1b3..b9b41ad 100644 --- a/Rakefile +++ b/Rakefile @@ -1,4 +1,3 @@ -require "library" require "rake/clean" require "rake/testtask" require "rake/rdoctask" @@ -6,35 +5,91 @@ require "rake/packagetask" require "rake/contrib/compositepublisher" require "rake/contrib/sshpublisher" -CLOBBER.include("src/**/*.{s,}o") +require "rake/configuretask" +require "rake/extensiontask" -ext_libs = ["container", "draggies", "trans_x11", "file_dialog"].map do |lib| - lib = "esmart_" + lib - Library.new(lib, ENV["ESMART_PREFIX"] || "/usr/local", "src/#{lib}") +PKG_NAME = "ruby-esmart" + +modules = [:esmart, :esmart_container, :esmart_draggies, + #:esmart_file_dialog, + :esmart_trans_x11] +module_objects = { + :esmart => [:rb_esmart], + :esmart_container => [:rb_esmart_container], + :esmart_draggies => [:rb_esmart_draggies], + :esmart_file_dialog => [:rb_esmart_file_dialog], + :esmart_trans_x11 => [:rb_esmart_trans_x11] +} + +module_tasks = modules.map { |mod| "ext_#{mod}".to_sym } + +task :default => module_tasks + +config = Rake::ConfigureTask.new do |t| + modules[1..-1].each do |mod| + t.tests << Rake::ConfigureTask::PkgConfigTest.new(mod.to_s) + end +end + +module_tasks.each do |mt| + task mt => [:pre_ext] end -l = Library.new("esmart", ENV["ESMART_PREFIX"] || "/usr/local", "src", nil) -ext_libs.unshift(l) +exts = {} -task :default => ext_libs.map { |l| l.so } +modules.each_with_index do |mod, i| + name = module_tasks[i] -ext_libs.each do |lib| - file lib.so => lib.objects do |t| - sh "cc #{lib.ldflags} #{t.prerequisites.join(" ")} -o #{t.name}" + exts[mod] = Rake::ExtensionTask.new name => module_objects[mod] do |t| + t.dir = i.zero? ? "src" : "src/#{mod}" + t.lib_name = "#{t.dir}/#{mod}.so" end +end - lib.objects.each do |object| - file object => object.sub(/\.[^.]+$/, ".c") do |t| - sh "cc #{lib.cflags} #{t.prerequisites.first} " + - "-c -o #{t.name}" - end +task :pre_ext => [:configure] do + exts.each do |(key, e)| + next if key == :esmart + + e.link_libs << config[key.to_s].libs + + cflags = [ + e.env[:cflags], + config[key.to_s].cflags + ] + + e.env.update(:cflags => cflags) end end -task :install => ext_libs.map { |l| l.so } do |t| +task :install => module_tasks do |t| destdir = "#{ENV["DESTDIR"]}" sitearchdir = ENV["RUBYARCHDIR"] || Config::CONFIG['sitearchdir'] - FileUtils::Verbose.install(t.prerequisites.to_a, destdir + sitearchdir, - :mode => 0755) + ddir = destdir + sitearchdir + FileUtils::Verbose.mkdir_p(ddir) unless File.directory?(ddir) + + sos = exts.values.map { |e| e.lib_name } + FileUtils::Verbose.install(sos, ddir, :mode => 0755) +end + +Rake::RDocTask.new do |t| + t.rdoc_dir = "doc" + t.title = "ruby-esmart -- Ruby bindings for Esmart" + t.options = ["--line-numbers", "--inline-source", "--main", "README"] + t.rdoc_files = FileList[ + "AUTHORS", "COPYING", "README", + "src/rb_esmart.c", + "src/esmart_container/rb_esmart_container.c", + "src/esmart_draggies/rb_esmart_draggies.c", + "src/esmart_file_dialog/rb_esmart_file_dialog.c", + "src/esmart_trans_x11/rb_esmart_trans_x11.c" + ] +end + +task :publish => [:rdoc] do + p = Rake::CompositePublisher.new + p.add(Rake::SshFreshDirPublisher.new("code-monkey.de", + "public_docs/" + + PKG_NAME, "doc")) + p.upload end