module Debase::RubyCoreSource

Constants

REVISION_MAP
VERSION

Public Class Methods

create_makefile_with_core(hdrs, name) click to toggle source
# File lib/debase/ruby_core_source.rb, line 13
def self.create_makefile_with_core(hdrs, name)
  # First, see if the gem already has the needed headers
  if hdrs.call
    create_makefile(name)
    return true
  end

  ruby_dir = if RUBY_PATCHLEVEL < 0
    REVISION_MAP[RUBY_REVISION] or "ruby-#{RUBY_VERSION}"
  else
    "ruby-#{RUBY_VERSION}-p#{RUBY_PATCHLEVEL}"
  end

  # Check if core headers were already downloaded; if so, use them
  if RbConfig::CONFIG["rubyhdrdir"]
    dest_dir = RbConfig::CONFIG["rubyhdrdir"] + "/" + ruby_dir
    with_cppflags("-I" + dest_dir) {
      if hdrs.call
        create_makefile(name)
        return true
      end
    }
  end

  # Look for sources that ship with gem
  dest_dir = deduce_packaged_source_dir(ruby_dir)
  no_source_abort(ruby_dir) unless File.directory?(dest_dir)

  with_cppflags("-I" + dest_dir) {
    if hdrs.call
      create_makefile(name)
      return true
    end
  }
  return false
end
deduce_packaged_source_dir(ruby_dir) click to toggle source
# File lib/debase/ruby_core_source.rb, line 50
def self.deduce_packaged_source_dir(ruby_dir)
  prefix = File.dirname(__FILE__) + '/ruby_core_source/'
  expected_directory = prefix + ruby_dir
  if (RUBY_REVISION.is_a? String or RUBY_REVISION > 0) and File.directory?(expected_directory)
    expected_directory
  else
    # Fallback to an older version.
    ruby_version = Gem::Version.new(RUBY_VERSION)
    path, = Dir.glob(prefix + 'ruby-*').
      select { |d| File.directory?(d) }.
      map { |d| [d, ruby_source_dir_version(d)] }.
      sort { |(_, v1), (_, v2)| -(v1 <=> v2) }.
      find { |(_, v)| v <= ruby_version }

    version = File.basename(path)
    fallback_source_warning(ruby_dir, version)
    path
  end
end
fallback_source_warning(ruby_version, fallback_version) click to toggle source
# File lib/debase/ruby_core_source.rb, line 75
    def self.fallback_source_warning(ruby_version, fallback_version)
      warn <<-STR
**************************************************************************
No source for #{ruby_version} (revision #{RUBY_REVISION}) provided with
debase-ruby_core_source gem. Falling back to #{fallback_version}.
**************************************************************************
STR
    end
no_source_abort(ruby_version) click to toggle source
# File lib/debase/ruby_core_source.rb, line 84
    def self.no_source_abort(ruby_version)
      abort <<-STR
Makefile creation failed
**************************************************************************
No source for #{ruby_version} provided with debase-ruby_core_source gem.
**************************************************************************
STR
    end
ruby_source_dir_version(dir) click to toggle source
# File lib/debase/ruby_core_source.rb, line 70
def self.ruby_source_dir_version(dir)
  match = /ruby-([0-9\.]+)-((p|rc|preview)[0-9]+)\z/.match(dir)
  Gem::Version.new("#{match[1]}.#{match[2]}")
end