X-Git-Url: http://git.code-monkey.de/?p=ruby-ecore.git;a=blobdiff_plain;f=Rakefile;h=a6a28509f8aa4f0929e0f7a53c33ce09f8927edc;hp=94fcedac6249cffe7259e655059ee09e17526083;hb=f8c0f815b18adf3d1ea53bd177df636ffd532b08;hpb=f0bcf481dab32d304c34d50dc82298d4ae11414b diff --git a/Rakefile b/Rakefile index 94fceda..a6a2850 100644 --- a/Rakefile +++ b/Rakefile @@ -1,4 +1,3 @@ -require "library" require "rake/clean" require "rake/testtask" require "rake/rdoctask" @@ -6,35 +5,75 @@ require "rake/packagetask" require "rake/contrib/compositepublisher" require "rake/contrib/sshpublisher" -CLOBBER.include("src/*/*.{s,}o") +require "rake/configuretask" +require "rake/extensiontask" -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}") +PKG_NAME = "ruby-ecore" + +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 + +module_tasks.each do |mt| + task mt => ["pre_#{mt}".to_sym] end -task :default => ext_libs.map { |l| l.so } +exts = {} -ext_libs.each do |lib| - file lib.so => lib.objects do |t| - sh "cc #{lib.ldflags} #{t.prerequisites.join(" ")} -o #{t.name}" +modules.each_with_index do |mod, i| + name = module_tasks[i] + + 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) @@ -65,3 +104,11 @@ Rake::RDocTask.new do |t| "src/ecore_evas/rb_xrender_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