class GNOME2::Rake::PackageTask

Attributes

author[RW]
description[RW]
email[RW]
homepage[RW]
name[RW]
post_install_message[RW]
required_ruby_version[RW]
root_dir[R]
summary[RW]

Public Class Methods

new() { |self| ... } click to toggle source
# File lib/gnome2/rake/package-task.rb, line 26
def initialize
  initialize_variables
  initialize_configurations
  file, line, method = caller[1].scan(/^(.*):(\d+)(?::.*`(.*)')?\Z/).first
  @package = Package.new(File.dirname(file))
  @packages = FileList["#{@package.root_dir.parent}/*"].map{|f| File.directory?(f) ? File.basename(f) : nil}.compact
  @name = @package.name
  @cross_compiling_hooks = []
  yield(self) if block_given?
end

Public Instance Methods

cross_compiling(&block) click to toggle source
# File lib/gnome2/rake/package-task.rb, line 37
def cross_compiling(&block)
  @cross_compiling_hooks << block
end
define() click to toggle source
# File lib/gnome2/rake/package-task.rb, line 41
def define
  task :default => :build
  define_spec
  define_source_tasks
  define_native_tasks
  define_windows_tasks
  define_package_tasks
end
define_tasks() click to toggle source

Deprecated. Use define instead.

# File lib/gnome2/rake/package-task.rb, line 51
def define_tasks
  define
end
dependency() click to toggle source
# File lib/gnome2/rake/package-task.rb, line 59
def dependency
  @dependency_configuration
end
external_packages() click to toggle source
# File lib/gnome2/rake/package-task.rb, line 91
def external_packages
  @package.external_packages
end
external_packages=(packages) click to toggle source
# File lib/gnome2/rake/package-task.rb, line 95
def external_packages=(packages)
  @package.external_packages = packages
end
guess_version() click to toggle source
# File lib/gnome2/rake/package-task.rb, line 79
def guess_version
  versions = {}
  File.open("#{@package.glib2_root_dir}/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
native() click to toggle source
# File lib/gnome2/rake/package-task.rb, line 71
def native
  @package.native
end
package() click to toggle source
# File lib/gnome2/rake/package-task.rb, line 63
def package
  @package
end
ruby_gnome2_package?(name) click to toggle source
# File lib/gnome2/rake/package-task.rb, line 55
def ruby_gnome2_package?(name)
  @packages.include?(name)
end
version() click to toggle source
# File lib/gnome2/rake/package-task.rb, line 75
def version
  ENV["VERSION"] || guess_version
end
windows() click to toggle source
# File lib/gnome2/rake/package-task.rb, line 67
def windows
  @package.windows
end
windows_binary_build_task() click to toggle source
# File lib/gnome2/rake/package-task.rb, line 99
def windows_binary_build_task
  @windows_binary_build_task ||= WindowsBinaryBuildTask.new(@package)
end

Private Instance Methods

cross_platform() click to toggle source
# File lib/gnome2/rake/package-task.rb, line 117
def cross_platform
  "#{windows.build_architecture}-mingw32"
end
define_native_build_tasks() click to toggle source
# File lib/gnome2/rake/package-task.rb, line 164
def define_native_build_tasks
  task = NativeBinaryBuildTask.new(@package)
  task.define
end
define_native_tasks() click to toggle source
# File lib/gnome2/rake/package-task.rb, line 160
def define_native_tasks
  define_native_build_tasks
end
define_package_tasks() click to toggle source
# File lib/gnome2/rake/package-task.rb, line 289
def define_package_tasks
  Gem::PackageTask.new(@spec) do |pkg|
  end
end
define_source_download_tasks() click to toggle source
# File lib/gnome2/rake/package-task.rb, line 155
def define_source_download_tasks
  task = SourceDownloadTask.new(@package)
  task.define
end
define_source_tasks() click to toggle source
# File lib/gnome2/rake/package-task.rb, line 151
def define_source_tasks
  define_source_download_tasks
end
define_spec() click to toggle source
# File lib/gnome2/rake/package-task.rb, line 121
def define_spec
  @spec = Gem::Specification.new do |s|
    s.name                  = @name
    s.summary               = @summary
    s.description           = @description
    s.author                = @author
    s.email                 = @email
    s.homepage              = @homepage
    s.licenses              = ["LGPL-2.1+"]
    s.version               = version
    extensions              = FileList["ext/#{@name}/extconf.rb",
                                       "dependency-check/Rakefile"]
    extensions.existing!
    s.extensions            = extensions
    s.require_paths         = ["lib"]
    files                   = FileList["ChangeLog", "README",
                                       "Rakefile", "extconf.rb",
                                       "dependency-check/Rakefile",
                                       "lib/**/*.rb",
                                       "ext/**/depend",
                                       "ext/**/*.{c,h,def,rb}",
                                       "{sample,test}/**/*"]
    files.existing!
    s.files                 = files
    s.required_ruby_version = @required_ruby_version || ">= 2.1.0"
    s.post_install_message  = @post_install_message
    @dependency_configuration.apply(s)
  end
end
define_windows_build_task() click to toggle source
# File lib/gnome2/rake/package-task.rb, line 231
def define_windows_build_task
  windows_binary_build_task.define
end
define_windows_download_task() click to toggle source
# File lib/gnome2/rake/package-task.rb, line 226
def define_windows_download_task
  task = WindowsBinaryDownloadTask.new(@package)
  task.define
end
define_windows_extension_task() click to toggle source
# File lib/gnome2/rake/package-task.rb, line 180
def define_windows_extension_task
  ::Rake::ExtensionTask.new(so_base_name, @spec) do |ext|
    ext.cross_platform = cross_platform
    ext.ext_dir = "ext/#{@name}"
    ext.cross_compile = true
    ext.cross_compiling do |spec|
      if /mingw|mswin/ =~ spec.platform.to_s
        windows_binary_dir = @package.windows.relative_binary_dir
        windows_files = []
        if windows_binary_dir.exist?
          Find.find(windows_binary_dir.to_s) do |path|
            next unless File.file?(path)
            next if /\.zip\z/ =~ path
            windows_files << path
          end
        end
        spec.files += windows_files
        stage_path = "#{ext.tmp_dir}/#{ext.cross_platform}/stage"
        windows_files.each do |windows_file|
          stage_windows_file = "#{stage_path}/#{windows_file}"
          stage_windows_binary_dir = File.dirname(stage_windows_file)
          directory stage_windows_binary_dir
          stage_windows_file_dependencies = [
            stage_windows_binary_dir,
            windows_file,
          ]
          file stage_windows_file => stage_windows_file_dependencies do
            cp windows_file, stage_windows_file
          end
        end
      end
      @cross_compiling_hooks.each do |hook|
        hook.call(spec)
      end
    end
  end

  extconf_rb = "ext/#{@name}/extconf.rb"
  unless File.exist?(extconf_rb)
    native_task_name = "native:#{@name}:#{cross_platform}"
    if ::Rake::Task.task_defined?(native_task_name)
      ::Rake::Task[native_task_name].prerequisites.clear
    end
  end
end
define_windows_tasks() click to toggle source
# File lib/gnome2/rake/package-task.rb, line 169
def define_windows_tasks
  define_windows_extension_task
  define_windows_download_task
  define_windows_build_task
  define_windows_version_update_task
end
define_windows_version_update_task() click to toggle source
# File lib/gnome2/rake/package-task.rb, line 235
def define_windows_version_update_task
  namespace :windows do
    namespace :version do
      task_names = []
      namespace :update do
        @package.external_packages.each do |package|
          task_names << package.name
          task package.name do
            latest_version = package.latest_version || package.version
            if package.version != latest_version
              update_package_version(package, latest_version)
            end
          end
        end
      end

      full_task_names = task_names.collect do |name|
        "windows:version:update:#{name}"
      end
      desc "Update Windows package versions"
      task :update => full_task_names
    end
  end
end
initialize_configurations() click to toggle source
# File lib/gnome2/rake/package-task.rb, line 113
def initialize_configurations
  @dependency_configuration = DependencyConfiguration.new(self)
end
initialize_variables() click to toggle source
# File lib/gnome2/rake/package-task.rb, line 104
def initialize_variables
  @summary = ""
  @description = ""
  @author = "The Ruby-GNOME2 Project Team"
  @email = "ruby-gnome2-devel-en@lists.sourceforge.net"
  @homepage = "http://ruby-gnome2.sourceforge.jp/"
  @external_packages = []
end
so_base_name() click to toggle source
# File lib/gnome2/rake/package-task.rb, line 176
def so_base_name
  @name.gsub(/-/, "_")
end
update_package_version(package, latest_version) click to toggle source
# File lib/gnome2/rake/package-task.rb, line 260
def update_package_version(package, latest_version)
  rakefile_path = ::Rake.application.rakefile
  rakefile_content = File.read(rakefile_path)
  updated_rakefile_content = ""
  in_package = false
  escaped_name = Regexp.escape(package.name)
  escaped_version = Regexp.escape(package.version)
  rakefile_content.each_line do |line|
    case line
    when /:name => "#{escaped_name}",/
      in_package = true
      updated_rakefile_content << line
    when /:version => "#{escaped_version}",/
      if in_package
        updated_rakefile_content << line.gsub(/#{escaped_version}/,
                                              latest_version)
        in_package = false
      else
        updated_rakefile_content << line
      end
    else
      updated_rakefile_content << line
    end
  end
  File.open(rakefile_path, "w") do |rakefile|
    rakefile.write(updated_rakefile_content)
  end
end