]> git.netwichtig.de Git - user/henk/code/ruby/rbot.git/blobdiff - Rakefile
plugin(points): strip/ignore some terms closes #34
[user/henk/code/ruby/rbot.git] / Rakefile
index 62661bdd35cf46341d0db3bf42742ffddf9bd18d..1bd782eab2fe61a751779bea05815ccf3526cc2f 100644 (file)
--- a/Rakefile
+++ b/Rakefile
@@ -1,52 +1,30 @@
-require 'rubygems'
 require 'rake'
-require 'rake/gempackagetask'
+require 'rubygems/package_task'
 
 task :default => [:buildext]
 
-spec = Gem::Specification.new do |s|
-  s.name = 'rbot'
-  s.version = '0.9.11'
-  s.summary = <<-EOF
-    A modular ruby IRC bot.
-  EOF
-  s.description = <<-EOF
-    A modular ruby IRC bot specifically designed for ease of extension via plugins.
-  EOF
-  s.requirements << 'Ruby, version 1.8.0 (or newer)'
-
-  #  s.files = Dir.glob("**/*").delete_if { |item| item.include?(".svn") }
-  s.files = FileList['lib/**/*.rb', 'bin/*', 'data/rbot/**/*', 'AUTHORS', 'COPYING', 'README', 'REQUIREMENTS', 'TODO', 'ChangeLog', 'INSTALL',  'Usage_en.txt', 'setup.rb', 'po/*.pot', 'po/**/*.po'].to_a.delete_if {|item| item == ".svn"}
-  s.bindir = 'bin'
-  s.executables = ['rbot', 'rbot-remote']
-  s.default_executable = 'rbot'
-  s.extensions = 'Rakefile'
-
-#  s.autorequire = 'rbot/ircbot'
-  s.has_rdoc = true
-  s.rdoc_options = ['--exclude', 'post-install.rb',
-  '--title', 'rbot API Documentation', '--main', 'README', 'README']
-
-  s.author = 'Tom Gilbert'
-  s.email = 'tom@linuxbrit.co.uk'
-  s.homepage = 'http://ruby-rbot.org'
-  s.rubyforge_project = 'rbot'
+rule '.1' => ['.xml'] do |t|
+  sh "xsltproc -nonet -o #{t.name} /usr/share/sgml/docbook/stylesheet/xsl/nwalsh/manpages/docbook.xsl #{t.source}"
 end
 
-Rake::GemPackageTask.new(spec) do |pkg|
-  pkg.need_zip = true
-  pkg.need_tar = true
+task :manpages => ['man/rbot.1']
+
+SPECFILE = 'rbot.gemspec'
+# The Rakefile is also used after installing the gem, to build
+# the .mo files. Since in this case the SPECFILE is not available,
+# we must (and can) skip defining the gem packaging tasks.
+if File.exist? SPECFILE
+  spec = eval(File.read(SPECFILE), nil, SPECFILE)
+  Gem::PackageTask.new(spec) do |pkg|
+    pkg.need_zip = true
+    pkg.need_tar = true
+  end
 end
 
 # normalize a po/pot file
 def normalize_po(fn)
   content = File.read(fn)
 
-  # replace project-id-version placholder
-  modified = content.sub!(/^("Project-Id-Version: )PACKAGE VERSION(\\n")$/) {
-    "#{$1}rbot#{$2}"
-  }
-
   # sort the messages by file location
   if MSGCAT
     sorted = `#{MSGCAT} --width=79 --sort-by-file #{fn}`
@@ -56,6 +34,11 @@ def normalize_po(fn)
     end
   end
 
+  # replace project-id-version placholder
+  modified |= content.sub!(/^("Project-Id-Version: )PACKAGE VERSION(\\n")$/) {
+    "#{$1}rbot#{$2}"
+  }
+
   if modified
     File.open(fn, 'w') {|f| f.write content}
   end
@@ -77,7 +60,7 @@ task :define_po_rules do
     GetText.rgettext(source_files, new_pot_file)
 
     # only use the new pot file if it contains unique messages
-    if MSGCOMM && `#{MSGCOMM} --unique #{pot_file} #{new_pot_file}`.empty?
+    if File.exists?(pot_file) && MSGCOMM && `#{MSGCOMM} --unique #{pot_file} #{new_pot_file}`.empty?
       rm new_pot_file
     else
       mv new_pot_file, pot_file
@@ -105,13 +88,21 @@ task :define_po_rules do
     require 'gettext/utils'
     po_file, pot_file = t.name, t.source
     puts "#{pot_file} => #{po_file}"
-    sh "#{MSGMERGE} --backup=off --update #{po_file} #{pot_file}"
+    if File.exists? po_file
+      sh "#{MSGMERGE} --backup=off --update #{po_file} #{pot_file}"
+    elsif MSGINIT
+      locale = po_file[%r'^po/(.+)/.+\.po$', 1]
+      sh "#{MSGINIT} --locale=#{locale} --no-translator --input=#{pot_file} --output-file=#{po_file}"
+    else
+      warn "#{po_file} is missing and cannot be generated without msginit"
+      next
+    end
     normalize_po(po_file)
     touch po_file
   end
 
   # generate English po files
-  file(%r'^po/en_US/.+\.po$' => pot_for_po) do |t|
+  file(%r'^po/en/.+\.po$' => pot_for_po) do |t|
     po_file, pot_file = t.name, t.source
     if MSGEN
       sh "#{MSGEN} --output-file=#{po_file} #{pot_file}"
@@ -145,6 +136,9 @@ task :check_po_tools do
     'msgmerge' => {
       :options => %w[--backup= --update],
       :message => 'Cannot update po files' },
+    'msginit' => {
+      :options => %w[--locale= --no-translator --input= --output-file=],
+      :message => 'Cannot generate missing po files' },
     'msgcomm' => {
       :options => %w[--unique],
       :message => 'Pot files may be modified even without message change' },
@@ -198,8 +192,7 @@ task :buildext do
 end
 
 desc 'Generate mo files'
-task :makemo => LOCALES.map {|l|
-  ["data/locale/#{l}/LC_MESSAGES/rbot.mo"] +
-  PLUGIN_BASENAMES.map {|n| "data/locale/#{l}/LC_MESSAGES/rbot-#{n}.mo"}
-}.flatten
+task :makemo =>
+  FileList['po/*/*.po'].pathmap('%{^po,data/locale}d/LC_MESSAGES/%n.mo')
 
+Dir['tasks/**/*.rake'].each { |t| load t }