module Ruby::Builder::RubyBuilder

Public Class Methods

build(revision, source_dir:, build_dir:, install_dir:) click to toggle source

@param [Ruby::Builder::Revision] revision @param [String] source_dir @param [String] build_dir @param [String] install_dir

# File lib/ruby/builder/ruby_builder.rb, line 14
def build(revision, source_dir:, build_dir:, install_dir:)
  execute('git', '-C', source_dir, 'checkout', revision.git)
  unless File.executable?(File.join(source_dir, 'configure'))
    execute('autoreconf', dir: source_dir)
  end

  # Workaround to force updating revision in RUBY_DESCRIPTION
  timestamp_file = File.join(build_dir, '.revision.time')
  if File.exist?(timestamp_file)
    execute('rm', timestamp_file)
  end

  execute(File.join(source_dir, 'configure'), '--disable-install-doc', "--prefix=#{install_dir}", dir: build_dir)
  execute('make', "-j#{Etc.nprocessors}", dir: build_dir)
  execute('make', 'install', dir: build_dir)
end

Private Class Methods

assert_execute(*command, dir:) click to toggle source

@param [Array<String>] command

# File lib/ruby/builder/ruby_builder.rb, line 46
def assert_execute(*command, dir:)
  logger.info("+ #{command.shelljoin}")
  unless system(command.shelljoin)
    dir_info = "at '#{dir}' " if dir
    raise BuildFailure.new("Failed to execute '#{command.shelljoin}' #{dir_info}(exit status: #{$?.exitstatus})")
  end
end
execute(*command, dir: nil) click to toggle source

@param [Array<String>] command @param [String] dir

# File lib/ruby/builder/ruby_builder.rb, line 35
def execute(*command, dir: nil)
  if dir
    Dir.chdir(dir) do
      assert_execute(*command, dir: dir)
    end
  else
    assert_execute(*command, dir: dir)
  end
end
logger() click to toggle source
# File lib/ruby/builder/ruby_builder.rb, line 54
def logger
  @logger ||= Logger.new(STDOUT)
end