# File lib/gnome2-win32-binary-download-task.rb, line 13 def initialize(configuration) @configuration = configuration define end
# File lib/gnome2-win32-binary-download-task.rb, line 155 def agent @agent ||= Mechanize.new end
# File lib/gnome2-win32-binary-download-task.rb, line 159 def click_zip_link(link) zip = link.click Dir.chdir(dist_dir) do open(zip.filename, "wb") do |file| file.print(zip.body) end system("unzip", "-o", zip.filename) Dir.glob("lib/pkgconfig/*.pc") do |pc_path| pc = File.read(pc_path) pc = pc.gsub(/\Aprefix=.+$/) {"prefix=#{dist_dir}"} File.open(pc_path, "w") do |pc_file| pc_file.print(pc) end end end end
# File lib/gnome2-win32-binary-download-task.rb, line 19 def define namespace :win32 do namespace :downloader do task :before download_tasks = [] namespace :download do directory dist_dir task :prepare => [dist_dir] packages.each do |package| desc "download #{package}" task package => [:prepare] do download_package(package) end download_tasks << package end dependencies.each do |dependency| name, version = dependency desc "download #{name}" task name => [:prepare] do download_dependency(dependency) end download_tasks << name end end download_tasks = download_tasks.collect do |task| "win32:downloader:download:#{task}" end desc "download Windows binaries into #{dist_dir}" task :download => download_tasks task :after end desc "download Windows binaries" task :download => ["win32:downloader:before", "win32:downloader:download", "win32:downloader:after"] end end
# File lib/gnome2-win32-binary-download-task.rb, line 70 def dependencies @configuration.dependencies end
# File lib/gnome2-win32-binary-download-task.rb, line 62 def dist_dir @configuration.absolute_binary_dir end
# File lib/gnome2-win32-binary-download-task.rb, line 118 def download_dependency(dependency) dependency_version = "any" dependency_version_re = /[\d\.\-]+/ if dependency.is_a?(Array) dependency, dependency_version = dependency dependency_version_re = /#{Regexp.escape(dependency_version)}/ end escaped_dependency = Regexp.escape(dependency) dependencies_url = "#{URL_BASE}/dependencies" dependencies_page = agent.get(dependencies_url) latest_version = dependencies_page.links.collect do |link| case link.href when /\A#{escaped_dependency}_(#{dependency_version_re})_win32\.zip\z/ version = $1 [version.split(/[\.\-]/).collect {|component| component.to_i}, version] else [[-1], nil] end end.sort_by do |normalized_version, version| normalized_version end.last[1] if latest_version.nil? message = "can't find dependency package: " + "<#{dependency}>(#{dependency_version}):<#{dependencies_url}>" raise message end escaped_latest_version = Regexp.escape(latest_version) dependencies_page.links.each do |link| case link.href when /\A#{escaped_dependency}(?:-dev)?_#{escaped_latest_version}_win32\.zip\z/ click_zip_link(link) end end end
# File lib/gnome2-win32-binary-download-task.rb, line 74 def download_package(package) version_page_url = "#{URL_BASE}/#{package}" version_page = agent.get(version_page_url) latest_version_link = version_page.links.sort_by do |link| if /\A(\d+\.\d+)\/\z/ =~ link.href $1.split(/\./).collect {|component| component.to_i} else [-1] end end.last escaped_package = Regexp.escape(package) latest_version_page = latest_version_link.click latest_version = latest_version_page.links.collect do |link| case link.href when /#{escaped_package}_([\d\.\-]+)_win32\.zip\z/, /#{escaped_package}-([\d\.\-]+)-win32\.zip\z/, # old /#{escaped_package}-([\d\.\-]+)\.zip\z/ # old version = $1 normalized_version = version.split(/[\.\-]/).collect do |component| component.to_i end [normalized_version, version] else [[-1], nil] end end.sort_by do |normalized_version, version| normalized_version end.last[1] if latest_version.nil? raise "can't find package: <#{package}>:<#{version_page_url}>" end escaped_latest_version = Regexp.escape(latest_version) latest_version_page.links.each do |link| case link.href when /#{escaped_package}(?:-dev)?_#{escaped_latest_version}_win32\.zip\z/, /#{escaped_package}(?:-dev)?-#{escaped_latest_version}-win32\.zip\z/, # old /#{escaped_package}(?:-dev)?-#{escaped_latest_version}\.zip\z/ # old click_zip_link(link) end end end
# File lib/gnome2-win32-binary-download-task.rb, line 66 def packages @configuration.packages end