require 'rake'
require 'rake/gempackagetask'
-task :default => [:package]
+task :default => [:repackage]
spec = Gem::Specification.new do |s|
s.name = 'rbot'
- s.version = '0.9.9'
+ s.version = '0.9.11'
s.summary = <<-EOF
A modular ruby IRC bot.
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/**/*', 'AUTHORS', 'COPYING', 'README', 'REQUIREMENTS', 'TODO', 'ChangeLog', 'INSTALL', 'rbot.gemspec', 'Usage_en.txt', 'setup.rb'].to_a
+ s.files = FileList['lib/**/*.rb', 'bin/*', 'data/**/*', 'AUTHORS', 'COPYING', 'README', 'REQUIREMENTS', 'TODO', 'ChangeLog', 'INSTALL', 'Usage_en.txt', 'setup.rb'].to_a.delete_if {|item| item == ".svn"}
s.executables << 'rbot'
- s.autorequire = 'rbot/ircbot'
+# 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://linuxbrit.co.uk/rbot/'
+ s.homepage = 'http://ruby-rbot.org'
s.rubyforge_project = 'rbot'
end
pkg.need_tar = true
end
+PLUGIN_FILES = FileList['data/rbot/plugins/**/*.rb']
+NON_PLUGIN_FILES = FileList["{lib,bin,data}/**/*.{rb,rhtml}"] - PLUGIN_FILES
+rgettext_proc = proc do |t|
+ require 'gettext/utils'
+ source_files, pot_file = t.prerequisites, t.name
+ puts "#{source_files.join(', ')} => #{pot_file}"
+ GetText.rgettext(source_files, pot_file)
+end
+
+# generate pot file for non-plugin files
+file('po/rbot.pot' => NON_PLUGIN_FILES, &rgettext_proc)
+
+# generate pot files for plugin files
+rule(%r'^po/.+\.pot$' => proc {|fn|
+ PLUGIN_FILES.select {|f| f.pathmap('rbot-%n') == fn.pathmap('%n')}
+}, &rgettext_proc)
+
+# update po files
+# ruby-gettext treats empty output from msgmerge as error, causing this task to
+# fail. we provide a wrapper to work around it. see bin/msgmerge-wrapper.rb for
+# details
+ENV['REAL_MSGMERGE_PATH'] = ENV['MSGMERGE_PATH']
+ENV['MSGMERGE_PATH'] = ENV['MSGMERGE_WRAPPER_PATH'] || 'ruby msgmerge-wrapper.rb'
+rule(%r'^po/.+/.+\.po$' => proc {|fn| fn.pathmap '%{^po/.+/,po/}X.pot'}) do |t|
+ require 'gettext/utils'
+ po_file, pot_file = t.name, t.source
+ puts "#{pot_file} => #{po_file}"
+ GetText.msgmerge po_file, pot_file, 'rbot'
+end
+
+# generate mo files
+rule(%r'^data/locale/.+/LC_MESSAGES/.+\.mo$' => proc {|fn|
+ [ fn.pathmap('%{^data/locale,po;LC_MESSAGES/,}X.po'),
+ # the directory is created if not existing
+ fn.pathmap('%d') ]
+}) do |t|
+ po_file, mo_file = t.source, t.name
+ puts "#{po_file} => #{mo_file}"
+ require 'gettext/utils'
+ GetText.rmsgfmt po_file, mo_file
+end
+
+PLUGIN_BASENAMES = PLUGIN_FILES.map {|f| f.pathmap('%n')}
+LOCALES = FileList['po/*/'].map {|d| d.pathmap('%n')}
+
+LOCALES.each do |l|
+ directory "data/locale/#{l}/LC_MESSAGES"
+end
+
+desc 'Update po files'
+task :updatepo => LOCALES.map {|l|
+ ["po/#{l}/rbot.po"] +
+ PLUGIN_BASENAMES.map {|n| "po/#{l}/rbot-#{n}.po"}
+}.flatten
+
+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
+