X-Git-Url: http://git.code-monkey.de/?p=ruby-ecore.git;a=blobdiff_plain;f=Rakefile;h=a6a28509f8aa4f0929e0f7a53c33ce09f8927edc;hp=c7252ba27ef5a330261b16b5684bb557a4936fbd;hb=087974f38a80e4052d828562c01cdb44eacd3bf5;hpb=35069ec1047caf040c2adc1d39c464cbb6df3ed0 diff --git a/Rakefile b/Rakefile index c7252ba..a6a2850 100644 --- a/Rakefile +++ b/Rakefile @@ -1,4 +1,3 @@ -require "library" require "rake/clean" require "rake/testtask" require "rake/rdoctask" @@ -6,37 +5,75 @@ require "rake/packagetask" require "rake/contrib/compositepublisher" require "rake/contrib/sshpublisher" +require "rake/configuretask" +require "rake/extensiontask" + PKG_NAME = "ruby-ecore" -CLOBBER.include("src/*/*.{s,}o") +modules = [:ecore, :ecore_evas, :ecore_job, :ecore_x, :ecore_con] +module_objects = { + :ecore => [ + :rb_ecore, :rb_animator, :rb_event_handler, :rb_fd_handler, + :rb_idle_enterer, :rb_idler, :rb_timer + ], + :ecore_evas => [ + :rb_ecore_evas_main, :rb_ecore_evas, + :rb_buffer, :rb_fb, :rb_gl_x11, + :rb_software_x11, :rb_xrender_x11 + ], + :ecore_job => [:rb_ecore_job, :rb_job], + :ecore_x => [:rb_ecore_x, :rb_window, :rb_cursor], + :ecore_con => [:rb_ecore_con, :rb_server] +} + +module_tasks = modules.map { |mod| "ext_#{mod}".to_sym } + +task :default => module_tasks + +config = Rake::ConfigureTask.new do |t| + modules.each do |mod| + d = mod.to_s.sub(/ecore_/, "ecore-") + t.tests << Rake::ConfigureTask:: + PkgConfigTest.new(d, :is_critical => true) + end +end -ext_libs = %w{ecore ecore_evas ecore_job ecore_x ecore_con}.map do |lib| - Library.new(lib, ENV["ECORE_PREFIX"] || "/usr/local", "src/#{lib}") +module_tasks.each do |mt| + task mt => ["pre_#{mt}".to_sym] end -task :default => ext_libs.map { |l| l.so } +exts = {} + +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 = "src/#{mod}" + t.lib_name = "#{t.dir}/#{mod}.so" 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_#{name}".to_sym => [:configure] do + d = mod.to_s.sub(/ecore_/, "ecore-") + exts[mod].link_libs << config[d].libs + + cflags = [ + exts[mod].env[:cflags], + config[d].cflags + ] + + exts[mod].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'] ddir = destdir + sitearchdir FileUtils::Verbose.mkdir_p(ddir) unless File.directory?(ddir) - FileUtils::Verbose.install(t.prerequisites.to_a, ddir, - :mode => 0755) + + sos = exts.values.map { |e| e.lib_name } + FileUtils::Verbose.install(sos, ddir, :mode => 0755) ddir = destdir + sitearchdir + "/ecore" FileUtils::Verbose.mkdir_p(ddir) unless File.directory?(ddir)