brew/Library/Homebrew/build.rb

93 lines
2.6 KiB
Ruby
Raw Normal View History

#!/usr/bin/ruby
# This script is called by formula_installer as a separate instance.
# Rationale: Formula can use __END__, Formula can change ENV
# Thrown exceptions are propogated back to the parent process over a pipe
2011-03-15 22:02:14 -07:00
ORIGINAL_PATHS = ENV['PATH'].split(':').map{ |p| File.expand_path p }
2011-03-15 22:02:14 -07:00
require 'global'
at_exit do
# the whole of everything must be run in at_exit because the formula has to
# be the run script as __END__ must work for *that* formula.
begin
raise $! if $! # an exception was already thrown when parsing the formula
require 'extend/ENV'
require 'hardware'
require 'keg'
ENV.extend(HomebrewEnvExtension)
ENV.setup_build_environment
# we must do this or tools like pkg-config won't get found by configure scripts etc.
ENV.prepend 'PATH', "#{HOMEBREW_PREFIX}/bin", ':' unless ORIGINAL_PATHS.include? "#{HOMEBREW_PREFIX}/bin"
install(Formula.factory($0))
rescue Exception => e
if ENV['HOMEBREW_ERROR_PIPE']
pipe = IO.new(ENV['HOMEBREW_ERROR_PIPE'].to_i, 'w')
Marshal.dump(e, pipe)
pipe.close
exit! 1
else
onoe e
puts e.backtrace
exit! 2
end
end
end
def install f
f.recursive_deps.uniq.each do |dep|
dep = Formula.factory dep
if dep.keg_only?
ENV.prepend 'LDFLAGS', "-L#{dep.lib}"
ENV.prepend 'CPPFLAGS', "-I#{dep.include}"
ENV.prepend 'PATH', "#{dep.bin}", ':'
ENV.prepend 'PKG_CONFIG_PATH', dep.lib+'pkgconfig', ':'
end
end
f.brew do
if ARGV.flag? '--interactive'
ohai "Entering interactive mode"
puts "Type `exit' to return and finalize the installation"
puts "Install to this prefix: #{f.prefix}"
if ARGV.flag? '--git'
system "git init"
system "git add -A"
puts "This folder is now a git repo. Make your changes and then use:"
puts " git diff | pbcopy"
puts "to copy the diff to the clipboard."
end
interactive_shell f
nil
elsif ARGV.include? '--help'
system './configure --help'
exit $?
else
f.prefix.mkpath
f.install
FORMULA_META_FILES.each do |filename|
next if File.directory? filename
target_file = filename
target_file = "#{filename}.txt" if File.exists? "#{filename}.txt"
# Some software symlinks these files (see help2man.rb)
target_file = Pathname.new(target_file).resolved_path
f.prefix.install target_file => filename rescue nil
(f.prefix+file).chmod 0644 rescue nil
2010-08-21 14:11:55 -07:00
end
end
end
rescue Exception
if f.prefix.directory?
f.prefix.rmtree
f.prefix.parent.rmdir_if_possible
end
raise
end