Relaxed rules for Ogg::Vorbis::Comments#merge!.
[ruby-vorbistagger.git] / Rakefile
1 require "rake/clean"
2 require "rake/testtask"
3 require "rake/rdoctask"
4 require "rake/packagetask"
5 require "rake/contrib/compositepublisher"
6 require "rake/contrib/sshpublisher"
7
8 require "rake/configuretask"
9 require "rake/gcc4test"
10 require "rake/extensiontask"
11
12 begin
13         require "rubygems"
14         require "rake/gempackagetask"
15 rescue LoadError
16 end
17
18 PKG_NAME = "ruby-vorbistagger"
19 PKG_VERSION = File.read("lib/ogg/vorbis/tagger.rb").
20               match(/^\s*VERSION = \"(.*)\"$/).captures.first
21 PKG_FILES = FileList[
22         "AUTHORS", "COPYING", "README", "Rakefile",
23         "gemspec.rb",
24         "rake/{{configure,extension}task,gcc4test}.rb",
25         "ext/comments.[ch]", "ext/ext.c", "ext/vcedit.[ch]",
26         "lib/ogg/vorbis/tagger.rb",
27         "test/test_main.rb"
28 ]
29
30 ext_objs = [:ext, :comments, :vcedit]
31
32 task :default => [:ext]
33 task :extension => [:install, :clobber]
34
35 config = Rake::ConfigureTask.new do |t|
36         t.tests << Rake::ConfigureTask::
37                    PkgConfigTest.new("vorbis", :is_critical => true)
38         t.tests << Rake::ConfigureTask::Gcc4Test.new("gcc4")
39 end
40
41 task :ext => [:pre_ext]
42
43 ext = Rake::ExtensionTask.new :ext => ext_objs do |t|
44         t.dir = "ext"
45         t.lib_name = "#{t.dir}/vorbistagger_ext.so"
46 end
47
48 task :pre_ext => [:configure] do
49         ext.link_libs << config.vorbis.libs
50
51         cflags = [
52                 ext.env[:cflags],
53                 config.vorbis.cflags
54         ]
55
56         unless config.gcc4.result
57                 defines = "EXT_API=\"\""
58         else
59                 cflags << " -fvisibility=hidden"
60                 defines = "EXT_API=\"__attribute__ " +
61                           "((visibility(\\\"default\\\")))\""
62         end
63
64         ext.env.update(
65                 :cflags => cflags,
66                 :defines => defines
67         )
68 end
69
70 task :install => [:ext] do |t|
71         destdir = ENV["DESTDIR"] || ""
72
73         tmp = ENV["RUBYARCHDIR"] || Config::CONFIG["sitearchdir"]
74         ddir = File.join(destdir, tmp)
75
76         unless File.expand_path(ext.lib_name) ==
77                File.join(ddir, File.basename(ext.lib_name))
78                 FileUtils::Verbose.mkdir_p(ddir) unless File.directory?(ddir)
79                 FileUtils::Verbose.install(ext.lib_name, ddir, :mode => 0755)
80         end
81
82         tmp = ENV["RUBYLIBDIR"] || Config::CONFIG["sitelibdir"]
83         ddir = File.join(destdir, tmp)
84
85         PKG_FILES.each do |file|
86                 next unless file.pathmap("%1d") == "lib"
87
88                 dest_file = file.pathmap("%{^lib,#{ddir}}p")
89
90                 next if File.expand_path(file) == dest_file
91
92                 FileUtils::Verbose.mkdir_p(File.dirname(dest_file))
93                 FileUtils::Verbose.install(file, dest_file, :mode => 0644)
94         end
95 end
96
97 task :test => [:ext]
98
99 test = Rake::TestTask.new do |t|
100         t.libs = ["lib", "ext"]
101         t.warning = true
102 end
103
104 rdoc = Rake::RDocTask.new do |t|
105         t.rdoc_dir = "doc"
106         t.title = PKG_NAME
107         t.options = ["--line-numbers", "--inline-source", "--main", "README"]
108         t.rdoc_files = FileList[
109                 "README", "COPYING", "AUTHORS",
110                 "ext/ext.c", "ext/comments.c", "lib/ogg/vorbis/tagger.rb"
111         ]
112 end
113
114 if defined?(Gem)
115         s = Gem::Specification.new
116         eval(File.read("gemspec.rb"))
117
118         Rake::GemPackageTask.new(s) do |t|
119                 t.need_tar_gz = true
120         end
121 else
122         Rake::PackageTask.new(PKG_NAME, PKG_VERSION) do |t|
123                 t.need_tar_gz = true
124                 t.package_files = PKG_FILES
125         end
126 end
127
128 task :publish => [:rdoc, :package] do
129         p = Rake::CompositePublisher.new
130         p.add(Rake::SshFreshDirPublisher.new("code-monkey.de",
131                                              "public_docs/" +
132                                              PKG_NAME, "doc"))
133
134         files = ["tar.gz"]
135         files << "gem" if defined?(Gem)
136
137         files.map! { |f| "#{PKG_NAME}-#{PKG_VERSION}.#{f}" }
138
139         p.add(Rake::SshFilePublisher.new("code-monkey.de", ".", "pkg", *files))
140         p.upload
141 end
142