434 lines
12 KiB
Ruby
434 lines
12 KiB
Ruby
|
# -*- ruby -*-
|
||
|
|
||
|
require "pathname"
|
||
|
require "tmpdir"
|
||
|
require "open-uri"
|
||
|
|
||
|
repository_base_url = "https://ruby-gnome2.svn.sourceforge.net/svnroot/ruby-gnome2/ruby-gnome2"
|
||
|
|
||
|
task :default => :test
|
||
|
|
||
|
def version
|
||
|
@version ||= ENV["VERSION"] || guess_version
|
||
|
end
|
||
|
|
||
|
def guess_version
|
||
|
versions = {}
|
||
|
File.open("glib2/ext/glib2/rbglib.h") do |rbglib_h|
|
||
|
rbglib_h.each_line do |line|
|
||
|
if /#define\s+RBGLIB_([A-Z]+)_VERSION\s+(\d+)/ =~ line
|
||
|
versions[$1.downcase] = $2.to_i
|
||
|
end
|
||
|
end
|
||
|
end
|
||
|
["major", "minor", "micro"].collect {|type| versions[type]}.compact.join(".")
|
||
|
end
|
||
|
|
||
|
def dist_dir(base_name, _version=nil)
|
||
|
_version ||= version
|
||
|
"#{base_name}-#{_version}"
|
||
|
end
|
||
|
|
||
|
def archive_name(base_name, _version=nil)
|
||
|
dist_dir(base_name, _version) + ".tar.gz"
|
||
|
end
|
||
|
|
||
|
@needless_paths = [".svn", ".test-result", ".gdb_history", "mkmf.log",
|
||
|
"*.o", "*.so", "pkg", "vendor", "tmp"]
|
||
|
def package(base_name, paths, needless_paths=nil)
|
||
|
_dist_dir = dist_dir(base_name)
|
||
|
|
||
|
rm_rf(_dist_dir)
|
||
|
mkdir_p(_dist_dir)
|
||
|
cp_r(paths, _dist_dir, :preserve => true)
|
||
|
|
||
|
needless_paths ||= @needless_paths
|
||
|
Dir.glob("#{_dist_dir}/**/{#{needless_paths.join(',')}}") do |needless_path|
|
||
|
rm_rf(needless_path)
|
||
|
end
|
||
|
sh("tar", "cvfz", archive_name(base_name), _dist_dir)
|
||
|
ensure
|
||
|
rm_rf(_dist_dir) if _dist_dir
|
||
|
end
|
||
|
|
||
|
def download(url, local_path=nil)
|
||
|
local_path ||= File.basename(url)
|
||
|
open(url) do |remote_file|
|
||
|
File.open(local_path, "wb") do |local_file|
|
||
|
local_file.print(remote_file.read)
|
||
|
end
|
||
|
end
|
||
|
local_path
|
||
|
end
|
||
|
|
||
|
def change_environment_variable(variables)
|
||
|
original_variables = {}
|
||
|
variables.each do |key, value|
|
||
|
next if ENV[key]
|
||
|
original_variables[key] = ENV[key]
|
||
|
ENV[key] = value
|
||
|
end
|
||
|
|
||
|
begin
|
||
|
yield
|
||
|
ensure
|
||
|
original_variables.each do |key, value|
|
||
|
ENV[key] = value
|
||
|
end
|
||
|
end
|
||
|
end
|
||
|
|
||
|
desc "configure all packages"
|
||
|
task :configure do
|
||
|
ruby("extconf.rb")
|
||
|
end
|
||
|
|
||
|
file "Makefile" do
|
||
|
task(:configure).invoke
|
||
|
end
|
||
|
|
||
|
desc "build all packages"
|
||
|
task :build => ["Makefile"] do
|
||
|
sh("make")
|
||
|
end
|
||
|
|
||
|
desc "clean all packages"
|
||
|
task :clean do
|
||
|
sh("make", "clean") if File.exist?("Makefile")
|
||
|
end
|
||
|
|
||
|
desc "more clean all packages"
|
||
|
task :distclean do
|
||
|
sh("make", "distclean") if File.exist?("Makefile")
|
||
|
end
|
||
|
|
||
|
desc "run tests for all packages"
|
||
|
task :test => [:build] do
|
||
|
ruby("run-test.rb")
|
||
|
end
|
||
|
|
||
|
gtk2_base_name = "ruby-gtk2"
|
||
|
gtk3_base_name = "ruby-gtk3"
|
||
|
gnome2_base_name = "ruby-gnome2-all"
|
||
|
|
||
|
gtk2_packages = [
|
||
|
"glib2",
|
||
|
"gobject-introspection",
|
||
|
"gio2",
|
||
|
"atk",
|
||
|
"pango",
|
||
|
"gdk_pixbuf2",
|
||
|
"gtk2",
|
||
|
]
|
||
|
gtk3_packages = gtk2_packages - ["gtk2"] + ["gdk3", "gtk3"]
|
||
|
gnome2_packages = gtk2_packages + gtk3_packages + [
|
||
|
"goocanvas",
|
||
|
"gstreamer",
|
||
|
"gtksourceview2",
|
||
|
"poppler",
|
||
|
"rsvg2",
|
||
|
"vte",
|
||
|
"vte3",
|
||
|
"cairo-gobject",
|
||
|
"gtksourceview3",
|
||
|
"clutter",
|
||
|
"clutter-gtk",
|
||
|
"clutter-gstreamer",
|
||
|
"webkit-gtk",
|
||
|
"webkit-gtk2",
|
||
|
]
|
||
|
gnome2_packages = gnome2_packages.uniq
|
||
|
|
||
|
namespace :dist do
|
||
|
base_files = ["AUTHORS", "COPYING.LIB", "NEWS",
|
||
|
"README", "Rakefile",
|
||
|
"exec_make.rb", "extconf.rb", "run-test.rb"]
|
||
|
desc "make Ruby/GTK2 package"
|
||
|
task :gtk2 do
|
||
|
package(gtk2_base_name, base_files + gtk2_packages)
|
||
|
end
|
||
|
|
||
|
desc "make Ruby/GTK3 package"
|
||
|
task :gtk3 do
|
||
|
package(gtk3_base_name, base_files + gtk3_packages)
|
||
|
end
|
||
|
|
||
|
desc "make Ruby/GNOME2 package"
|
||
|
task :gnome2 do
|
||
|
package(gnome2_base_name, base_files + gnome2_packages)
|
||
|
end
|
||
|
|
||
|
ruby_versions = ["1.9.3-p392", "2.0.0-p0"]
|
||
|
namespace :test do
|
||
|
ruby_base_url = "ftp://ftp.ruby-lang.org/pub/ruby"
|
||
|
ruby_versions.each do |ruby_version|
|
||
|
base_dir = "tmp/dist-test-#{version}/#{ruby_version}"
|
||
|
directory base_dir
|
||
|
|
||
|
prefix = Pathname.new(base_dir) + "local"
|
||
|
ruby_tar_bz2_base = "ruby-#{ruby_version}.tar.bz2"
|
||
|
file "#{base_dir}/#{ruby_tar_bz2_base}" => base_dir do
|
||
|
generation = ruby_version.scan(/\A\d\.\d/)[0]
|
||
|
ruby_tar_bz2_url = "#{ruby_base_url}/#{generation}/#{ruby_tar_bz2_base}"
|
||
|
Dir.chdir(base_dir) do
|
||
|
download(ruby_tar_bz2_url)
|
||
|
end
|
||
|
end
|
||
|
|
||
|
ruby_path = "#{prefix}/bin/ruby"
|
||
|
expanded_ruby_path = File.expand_path(ruby_path)
|
||
|
file ruby_path => "#{base_dir}/#{ruby_tar_bz2_base}" do
|
||
|
expanded_prefix = prefix.expand_path
|
||
|
Dir.chdir(base_dir) do
|
||
|
sh("tar", "xvf", ruby_tar_bz2_base)
|
||
|
Dir.chdir(File.basename(ruby_tar_bz2_base, ".tar.bz2")) do
|
||
|
sh("./configure", "--prefix=#{expanded_prefix}")
|
||
|
sh("make", "-j8")
|
||
|
sh("make", "install-nodoc")
|
||
|
end
|
||
|
end
|
||
|
end
|
||
|
|
||
|
rubygems_tgz_base = "rubygems-1.8.24.tgz"
|
||
|
rubygems_tgz = "#{base_dir}/#{rubygems_tgz_base}"
|
||
|
file rubygems_tgz => base_dir do
|
||
|
rubygems_url_base = "http://production.cf.rubygems.org/rubygems"
|
||
|
Dir.chdir(base_dir) do
|
||
|
download("#{rubygems_url_base}/#{rubygems_tgz_base}")
|
||
|
end
|
||
|
end
|
||
|
|
||
|
gem_path = "#{prefix}/bin/gem"
|
||
|
expanded_gem_path = File.expand_path(gem_path)
|
||
|
file gem_path => [ruby_path, rubygems_tgz] do
|
||
|
Dir.chdir(base_dir) do
|
||
|
sh("tar", "xvf", rubygems_tgz_base)
|
||
|
Dir.chdir(File.basename(rubygems_tgz_base, ".tgz")) do
|
||
|
sh(expanded_ruby_path, "setup.rb")
|
||
|
end
|
||
|
end
|
||
|
end
|
||
|
|
||
|
packages = {
|
||
|
"gtk2" => {
|
||
|
:archive_name => archive_name(gtk2_base_name),
|
||
|
:packages => gtk2_packages,
|
||
|
},
|
||
|
"gtk3" => {
|
||
|
:archive_name => archive_name(gtk3_base_name),
|
||
|
:packages => gtk3_packages,
|
||
|
},
|
||
|
"gnome2" => {
|
||
|
:archive_name => archive_name(gnome2_base_name),
|
||
|
:packages => gnome2_packages,
|
||
|
},
|
||
|
}
|
||
|
namespace "ruby-#{ruby_version}" do
|
||
|
packages.each do |name, attributes|
|
||
|
namespace name do
|
||
|
tar_gz = File.expand_path(attributes[:archive_name])
|
||
|
task :prepare => ["dist:#{name}", gem_path] do
|
||
|
Dir.chdir(base_dir) do
|
||
|
sh("tar", "xvf", tar_gz)
|
||
|
end
|
||
|
if /cairo/ !~ `#{expanded_gem_path} list cairo`
|
||
|
sh(expanded_gem_path, "install", "cairo")
|
||
|
end
|
||
|
end
|
||
|
|
||
|
attributes[:packages].each do |sub_package_name|
|
||
|
task sub_package_name => :prepare do
|
||
|
Dir.chdir(base_dir) do
|
||
|
package_base_dir = File.basename(tar_gz, ".tar.gz")
|
||
|
rm_rf(sub_package_name)
|
||
|
sh("cp", "-a",
|
||
|
"#{package_base_dir}/#{sub_package_name}", sub_package_name)
|
||
|
Dir.chdir(sub_package_name) do
|
||
|
if File.exist?("extconf.rb")
|
||
|
sh(expanded_ruby_path, "extconf.rb")
|
||
|
sh("make", "-j8")
|
||
|
sh("make", "install")
|
||
|
end
|
||
|
end
|
||
|
rm_rf(sub_package_name)
|
||
|
end
|
||
|
end
|
||
|
end
|
||
|
end
|
||
|
end
|
||
|
|
||
|
packages.each do |name, attributes|
|
||
|
test_tasks = attributes[:packages].collect do |sub_package_name|
|
||
|
"dist:test:ruby-#{ruby_version}:#{name}:#{sub_package_name}"
|
||
|
end
|
||
|
task name => test_tasks
|
||
|
end
|
||
|
end
|
||
|
|
||
|
test_tasks = packages.collect do |name, attributes|
|
||
|
"dist:test:ruby-#{ruby_version}:#{name}"
|
||
|
end
|
||
|
task "ruby-#{ruby_version}" => test_tasks
|
||
|
end
|
||
|
end
|
||
|
|
||
|
test_tasks = ruby_versions.collect do |ruby_version|
|
||
|
"dist:test:ruby-#{ruby_version}"
|
||
|
end
|
||
|
desc "run packages test"
|
||
|
task :test => test_tasks
|
||
|
end
|
||
|
desc "make all packages"
|
||
|
task :dist => ["dist:gtk2", "dist:gtk3", "dist:gnome2"]
|
||
|
|
||
|
directory "misc"
|
||
|
file "misc/release.rb" => "misc" do |task|
|
||
|
release_rb = "https://raw.github.com/clear-code/cutter/master/misc/release.rb"
|
||
|
open(release_rb) do |remote_release_rb|
|
||
|
File.open(task.name, "w") do |local_release_rb|
|
||
|
local_release_rb.print(remote_release_rb.read)
|
||
|
end
|
||
|
end
|
||
|
end
|
||
|
|
||
|
desc "release Ruby-GNOME2 packages"
|
||
|
task :release => ["misc/release.rb", :dist] do
|
||
|
sf_user_name = ENV["SF_USER"] || ENV["USER"]
|
||
|
project_id = "ruby-gnome2"
|
||
|
project_name = "Ruby-GNOME 2"
|
||
|
package_name = "ruby-gnome2"
|
||
|
release_name = "ruby-gnome2-#{version}"
|
||
|
package_base_names = [gtk2_base_name, gtk3_base_name, gnome2_base_name]
|
||
|
archive_names = package_base_names.collect do |base_name|
|
||
|
archive_name(base_name)
|
||
|
end
|
||
|
ruby("misc/release.rb", sf_user_name, project_id, project_name,
|
||
|
package_name, release_name, "README:1", "NEWS",
|
||
|
*archive_names)
|
||
|
end
|
||
|
|
||
|
namespace :gem do
|
||
|
desc "build all gems"
|
||
|
task :build do
|
||
|
gnome2_packages.each do |package|
|
||
|
Dir.chdir(package) do
|
||
|
ruby("-S", "rake", "gem")
|
||
|
end
|
||
|
end
|
||
|
end
|
||
|
|
||
|
desc "push all gems"
|
||
|
task :push do
|
||
|
gnome2_packages.each do |package|
|
||
|
ruby("-S", "gem", "push",
|
||
|
*Dir.glob(File.join(package, "pkg", "*-#{version}.gem")))
|
||
|
end
|
||
|
end
|
||
|
|
||
|
desc "install all gems"
|
||
|
task :install do
|
||
|
gnome2_packages.each do |package|
|
||
|
ruby("-S", "gem", "install", "--user-install",
|
||
|
*Dir.glob(File.join(package, "pkg", "*-#{version}.gem")))
|
||
|
end
|
||
|
end
|
||
|
|
||
|
desc "uninstall all gems"
|
||
|
task :uninstall do
|
||
|
gnome2_packages.each do |package|
|
||
|
ruby("-S", "gem", "uninstall", "--version", version, package)
|
||
|
end
|
||
|
end
|
||
|
|
||
|
namespace :win32 do
|
||
|
win32_unsupported_packages = [
|
||
|
"goocanvas",
|
||
|
"vte",
|
||
|
"vte3",
|
||
|
"webkit-gtk",
|
||
|
"webkit-gtk2",
|
||
|
]
|
||
|
win32_gnome2_packages = gnome2_packages - win32_unsupported_packages
|
||
|
|
||
|
namespace :build do
|
||
|
desc "build all Windows binaries"
|
||
|
task :vendor do
|
||
|
win32_gnome2_packages.each do |package|
|
||
|
Dir.chdir(package) do
|
||
|
ruby("-S", "rake", "native:build", "win32:build")
|
||
|
end
|
||
|
end
|
||
|
end
|
||
|
|
||
|
desc "build all Windows bindings"
|
||
|
task :ext do
|
||
|
change_environment_variable("MAKE" => "make debugflags=") do
|
||
|
win32_gnome2_packages.each do |package|
|
||
|
Dir.chdir(package) do
|
||
|
tasks = [
|
||
|
"cross",
|
||
|
"win32:builder:build:prepare:pkg_config",
|
||
|
"native",
|
||
|
"gem",
|
||
|
]
|
||
|
ruby("-S", "rake", "RUBY_CC_VERSION=1.9.3:2.0.0", *tasks)
|
||
|
end
|
||
|
end
|
||
|
end
|
||
|
end
|
||
|
|
||
|
desc "build GSettings schemas for all Windows binaries"
|
||
|
task :schema do
|
||
|
Dir.mktmpdir do |dir|
|
||
|
win32_gnome2_packages.each do |package|
|
||
|
gschema_xml_glob = File.join(package, "vendor", "local", "share",
|
||
|
"glib-2.0", "schemas", "*.gschema.xml")
|
||
|
Dir.glob(gschema_xml_glob).each do |schema|
|
||
|
cp(schema, dir)
|
||
|
end
|
||
|
end
|
||
|
sh("glib-compile-schemas",
|
||
|
"--targetdir", "glib2/vendor/local/share/glib-2.0/schemas",
|
||
|
dir)
|
||
|
end
|
||
|
end
|
||
|
end
|
||
|
|
||
|
desc "build all Windows gems"
|
||
|
task :build => [
|
||
|
"gem:win32:build:vendor",
|
||
|
"gem:win32:build:schema",
|
||
|
"gem:win32:build:ext",
|
||
|
]
|
||
|
|
||
|
desc "clean all Windows gems build"
|
||
|
task :clean do
|
||
|
win32_gnome2_packages.each do |package|
|
||
|
rm_rf(File.join(package, "tmp"))
|
||
|
end
|
||
|
end
|
||
|
|
||
|
desc "download DLL for Windows all gems"
|
||
|
task :download do
|
||
|
win32_gnome2_packages.each do |package|
|
||
|
Dir.chdir(package) do
|
||
|
ruby("-S", "rake", "win32:download")
|
||
|
end
|
||
|
end
|
||
|
end
|
||
|
|
||
|
desc "push all Windows gems"
|
||
|
task :push do
|
||
|
win32_gnome2_packages.each do |package|
|
||
|
ruby("-S", "gem", "push",
|
||
|
*Dir.glob(File.join(package, "pkg", "*-#{version}-x86-mingw32.gem")))
|
||
|
end
|
||
|
end
|
||
|
end
|
||
|
end
|
||
|
|
||
|
desc "tag the current release"
|
||
|
task :tag do
|
||
|
sh("git", "tag", "-a", version, "-m", "release #{version}!!!")
|
||
|
end
|