X-Git-Url: https://git.netwichtig.de/gitweb/?a=blobdiff_plain;f=Rakefile;h=8e8d9d68cf991fb1042f9d5de76353edf8a4668b;hb=744be8fffda676653475d3034786e8ee246de609;hp=be00f4ed61b726f73f23ddb972cf76ff641915f8;hpb=f517d2c537ab9fb749caa06df07f124922725954;p=user%2Fhenk%2Fcode%2Fruby%2Frbot.git diff --git a/Rakefile b/Rakefile index be00f4ed..8e8d9d68 100644 --- a/Rakefile +++ b/Rakefile @@ -1,49 +1,30 @@ -require 'rubygems' require 'rake' -require 'rake/gempackagetask' - -task :default => [:repackage] - -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/**/*', '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.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' +require 'rubygems/package_task' + +task :default => [:buildext] + +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', 'man/rbot-remote.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}` @@ -53,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 @@ -74,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 @@ -102,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}" @@ -142,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' }, @@ -177,9 +174,25 @@ task :updatepo => [:define_po_rules, :check_po_tools] + LOCALES.map {|l| PLUGIN_BASENAMES.map {|n| "po/#{l}/rbot-#{n}.po"} }.flatten +desc 'Normalize po files' +task :normalizepo => :check_po_tools do + FileList['po/*/*.po'].each {|fn| normalize_po(fn)} +end + +# this task invokes makemo if ruby-gettext is available, but otherwise succeeds +# with a warning instead of failing. it is to be used by Gem's extension builder +# to make installation not fail because of lack of ruby-gettext +task :buildext do + begin + require 'gettext/utils' + Rake::Task[:makemo].invoke + rescue LoadError + warn 'Ruby-gettext cannot be located, so mo files cannot be built and installed' + end +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 }