Parent

Class/Module Index [+]

Quicksearch

Gem::Ext::Builder

Constants

CHDIR_MUTEX

The builder shells-out to run various commands after changing the directory. This means multiple installations cannot be allowed to build extensions in parallel as they may change each other's directories leading to broken extensions or failed installations.

Public Class Methods

class_name() click to toggle source
# File lib/rubygems/ext/builder.rb, line 19
def self.class_name
  name =~ /Ext::(.*)Builder/
  $1.downcase
end
make(dest_path, results) click to toggle source
# File lib/rubygems/ext/builder.rb, line 24
def self.make(dest_path, results)
  unless File.exist? 'Makefile' then
    raise Gem::InstallError, "Makefile not found:\n\n#{results.join "\n"}"
  end

  # try to find make program from Ruby configure arguments first
  RbConfig::CONFIG['configure_args'] =~ /with-make-prog\=(\w+)/
  make_program = $1 || ENV['make']
  unless make_program then
    make_program = (/mswin/ =~ RUBY_PLATFORM) ? 'nmake' : 'make'
  end

  destdir = '"DESTDIR=%s"' % ENV['DESTDIR'] if RUBY_VERSION > '2.0'

  ['', 'install'].each do |target|
    # Pass DESTDIR via command line to override what's in MAKEFLAGS
    cmd = [
      make_program,
      destdir,
      target
    ].join(' ').rstrip
    run(cmd, results, "make #{target}".rstrip)
  end
end
redirector() click to toggle source
# File lib/rubygems/ext/builder.rb, line 49
def self.redirector
  '2>&1'
end
run(command, results, command_name = nil) click to toggle source
# File lib/rubygems/ext/builder.rb, line 53
def self.run(command, results, command_name = nil)
  results << command
  results << `#{command} #{redirector}`

  unless $?.success? then
    raise Gem::InstallError, "#{command_name || class_name} failed:\n\n#{results.join "\n"}"
  end
end

[Validate]

Generated with the Darkfish Rdoc Generator 2.