Use ConfigureTask and ExtensionTask for the build.
[ruby-eet.git] / Rakefile
1 require "rbconfig"
2 require "rake/clean"
3 require "rake/testtask"
4 require "rake/rdoctask"
5 require "rake/packagetask"
6 require "rake/contrib/compositepublisher"
7 require "rake/contrib/sshpublisher"
8
9 require "rake/configuretask"
10 require "rake/extensiontask"
11
12 # make sure we run at least Rake 0.5.0
13 if (RAKEVERSION.split(".").map { |p| p.to_i } <=> [0, 5, 0]) < 0
14         raise("Rake 0.5.0 or greater required")
15 end
16
17 PKG_NAME = "ruby-eet"
18 PKG_VERSION = File.read("lib/eet.rb").
19               match(/^\s*VERSION = \"(.*)\"\s$/).captures.first
20
21 CLOBBER.include("test/*.eet")
22
23 task :default => [:ext]
24
25 config = Rake::ConfigureTask.new do |t|
26         t.tests << Rake::ConfigureTask::
27                    PkgConfigTest.new("eet", :is_critical => true)
28 end
29
30 task :ext => [:pre_ext]
31
32 ext = Rake::ExtensionTask.new :ext => [:ext] do |t|
33         t.dir = "ext"
34         t.lib_name = "#{t.dir}/eet_ext.so"
35 end
36
37 task :pre_ext => [:configure] do
38         ext.link_libs << config.eet.libs
39
40         cflags = [
41                 ext.env[:cflags],
42                 config.eet.cflags
43         ]
44
45         ext.env.update(:cflags => cflags)
46 end
47
48 task :install => [:ext] do |t|
49         destdir = ENV["DESTDIR"] || ""
50
51         ddir = destdir + Config::CONFIG["sitearchdir"]
52         FileUtils::Verbose.mkdir_p(ddir) unless File.directory?(ddir)
53         FileUtils::Verbose.install(ext.lib_name, ddir, :mode => 0755)
54
55         ddir = destdir + Config::CONFIG["sitelibdir"]
56         FileUtils::Verbose.mkdir_p(ddir) unless File.directory?(ddir)
57         FileUtils::Verbose.install("lib/eet.rb", ddir, :mode => 0644)
58 end
59
60 task :test => [:ext]
61
62 Rake::TestTask.new do |t|
63         t.libs = ["lib", "ext", "test"]
64         t.test_files = FileList["test/test_*.rb"]
65         t.verbose = true
66 end
67
68 Rake::RDocTask.new do |t|
69         t.rdoc_dir = "doc"
70         t.title = "Ruby-EET - EET bindings for Ruby"
71         t.options = ["--line-numbers", "--inline-source", "--main", "README"]
72         t.rdoc_files.include("README", "COPYING", "AUTHORS",
73                              "NEWS", "ext/ext.c", "lib/eet.rb")
74 end
75
76 CLOBBER.include("ChangeLog")
77
78 file "ChangeLog" do
79         `git log > ChangeLog`
80 end
81
82 Rake::PackageTask.new(PKG_NAME, PKG_VERSION) do |t|
83         t.need_tar_gz = true
84         t.package_files.include("AUTHORS", "ChangeLog", "COPYING", "NEWS",
85                                 "README", "Rakefile",
86                                 "ext/*.c", "lib/*.rb", "test/*.rb")
87 end
88
89 task :publish => [:rdoc, :package] do
90         p = Rake::CompositePublisher.new
91         p.add(Rake::SshFreshDirPublisher.new("code-monkey.de",
92                                              "public_docs/" +
93                                              PKG_NAME, "doc"))
94         p.add(Rake::SshFilePublisher.new("code-monkey.de",
95                                          ".", "pkg",
96                                          "#{PKG_NAME}-#{PKG_VERSION}.tar.gz"))
97         p.upload
98 end