PageRenderTime 47ms CodeModel.GetById 19ms RepoModel.GetById 1ms app.codeStats 0ms

/Rakefile

https://github.com/Yuichirou/hatena-bookmark-xul
Rakefile | 160 lines | 129 code | 26 blank | 5 comment | 7 complexity | 87a0fb5749f3486502f5c2171a8bb229 MD5 | raw file
  1. # based on: http://gravelog.blogspot.com/2007/03/using-rake-to-build-firefox-extensions_04.html
  2. require 'rexml/document'
  3. require 'digest/sha1'
  4. require 'pathname'
  5. include REXML
  6. include FileUtils::Verbose
  7. EXTENSION_NAME="hatenabookmark"
  8. BUILD_DIR="build/#{EXTENSION_NAME}"
  9. UPDATE_LINK="" # URL for updated xpi
  10. directory "#{BUILD_DIR}/chrome"
  11. task :create_buildchrome_dir => ["#{BUILD_DIR}/chrome"]
  12. desc "prepare the chrome.manifest file"
  13. file "#{BUILD_DIR}/chrome.manifest" => [:create_buildchrome_dir] do
  14. open("#{BUILD_DIR}/chrome.manifest",'w') do |infile|
  15. open("chrome.manifest", "r") do |outfile|
  16. while line = outfile.gets
  17. #infile.puts line.gsub(/chrome\//, "jar:chrome/#{EXTENSION_NAME}.jar!/")
  18. infile.puts line
  19. end
  20. end
  21. end
  22. end
  23. task :create_chrome_manifest => ["#{BUILD_DIR}/chrome.manifest"]
  24. desc "prepare the install.rdf file"
  25. file "#{BUILD_DIR}/install.rdf" => [:create_buildchrome_dir] do
  26. cp 'install.rdf', "#{BUILD_DIR}/install.rdf"
  27. end
  28. task :create_install_rdf => ["#{BUILD_DIR}/install.rdf"]
  29. task :create_extra_directories => []
  30. %w(defaults components modules resources searchplugins).each do |dir|
  31. if File.directory?(dir)
  32. dst_dir = "#{BUILD_DIR}/#{dir}"
  33. desc "prepare the #{dir} directory"
  34. file "#{BUILD_DIR}/#{dir}" => [:create_buildchrome_dir] do
  35. cp_r dir, dst_dir
  36. end
  37. task :create_extra_directories => dst_dir
  38. end
  39. end
  40. desc "create the chrome jar file"
  41. task :create_chrome_jar => [:create_buildchrome_dir] do
  42. cp_r 'chrome', "#{BUILD_DIR}/"
  43. #sh "cd chrome && zip -qr -0 ../#{BUILD_DIR}/chrome/#{EXTENSION_NAME}.jar * -x \*.svn\*"
  44. end
  45. desc "create the xpi file and use the version number in the file name"
  46. task :create_extension_xpi => [
  47. :create_install_rdf,
  48. :create_chrome_manifest,
  49. :create_extra_directories,
  50. :create_chrome_jar
  51. ] do
  52. install_rdf_file = File.new('install.rdf','r')
  53. install_rdf_xmldoc = Document.new(install_rdf_file)
  54. version_number = ""
  55. install_rdf_xmldoc.elements.each('RDF/Description/em:version') do |element|
  56. version_number = element.text
  57. end
  58. xpi = Pathname.new 'xpi'
  59. xpi.mkdir unless xpi.exist?
  60. #sh "cd #{BUILD_DIR} && zip -qr -9 ../../xpi/#{EXTENSION_NAME}-#{version_number}-#{Time.now.strftime('%Y%m%d')}-fx.xpi *"
  61. find = 'find -type f -regex \'.+\.sw[po]$\' -exec rm {} \\;'
  62. sh "cd #{BUILD_DIR} && (#{find}) ; zip -qr -9 ../../xpi/#{EXTENSION_NAME}-#{version_number}.xpi *"
  63. rm_rf "build"
  64. end
  65. desc "update update.rdf"
  66. task :update_update_manifest => [:create_extension_xpi] do
  67. update_rdf_xmldoc = nil
  68. File.open('update.rdf','r') do |f|
  69. update_rdf_xmldoc = Document.new(f.read)
  70. update_rdf_xmldoc.elements.each('//RDF:Description') do |element|
  71. if element.attributes['em:version']
  72. element.attributes['em:version'] = version_number
  73. end
  74. if element.attributes['em:updateHash']
  75. element.attributes['em:updateHash'] = 'sha1:' + Digest::SHA1.hexdigest(open(xpi_filename).read)
  76. end
  77. if element.attributes['em:updateLink']
  78. element.attributes['em:updateLink'] = UPDATE_LINK
  79. end
  80. end
  81. File.open('update.rdf','w') do |f|
  82. update_rdf_xmldoc.write(f)
  83. end
  84. end
  85. end
  86. desc "install to local profile directory"
  87. task :install do
  88. File.open("#{firefox_profile_dir(ENV['NAME'])}/extensions/#{extension_id}", 'w') do |f|
  89. f.puts(Dir.pwd)
  90. end
  91. end
  92. desc "uninstall from local profile directory"
  93. task :uninstall do
  94. File.unlink("#{firefox_profile_dir}/extensions/#{extension_id}")
  95. end
  96. task :default => :create_extension_xpi
  97. def firefox_profile_dir(name = nil)
  98. name ||= 'default'
  99. base =
  100. case RUBY_PLATFORM
  101. when /darwin/
  102. '~/Library/Application Support/Firefox/profiles'
  103. when /win/
  104. '~/Application Data/Mozilla/Firefox/Profiles'
  105. else
  106. '~/.mozilla/firefox'
  107. end
  108. path = Dir.glob("#{File.expand_path(base)}/*.#{name}")
  109. if path.length == 1
  110. path.first
  111. else
  112. raise
  113. end
  114. end
  115. def extension_id
  116. open('install.rdf','r') do |file|
  117. install_rdf_xmldoc = Document.new(file)
  118. install_rdf_xmldoc.elements.each('RDF/Description/em:id') do |element|
  119. return element.text
  120. end
  121. end
  122. end
  123. def version_number
  124. open('install.rdf') do |f|
  125. install_rdf_xmldoc = Document.new(f.read)
  126. install_rdf_xmldoc.elements.each('RDF/Description/em:version') do |element|
  127. return element.text
  128. end
  129. end
  130. end
  131. def xpi_filename
  132. #"#{EXTENSION_NAME}-#{version_number}-fx.xpi"
  133. "#{EXTENSION_NAME}-#{version_number}.xpi"
  134. end