2012-05-19 19:57:56 -05:00
|
|
|
#!/System/Library/Frameworks/Ruby.framework/Versions/1.8/usr/bin/ruby
|
2009-09-17 21:10:39 +01:00
|
|
|
|
2011-08-23 23:30:52 +01:00
|
|
|
# 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
|
|
|
|
2011-08-23 23:30:52 +01:00
|
|
|
require 'global'
|
2009-09-17 21:10:39 +01:00
|
|
|
|
2009-10-26 18:13:38 +00:00
|
|
|
at_exit do
|
2011-08-23 23:30:52 +01:00
|
|
|
# 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.
|
|
|
|
|
2009-10-26 18:13:38 +00:00
|
|
|
begin
|
2009-11-12 01:34:48 +00:00
|
|
|
raise $! if $! # an exception was already thrown when parsing the formula
|
|
|
|
|
2009-10-26 18:13:38 +00:00
|
|
|
require 'extend/ENV'
|
|
|
|
require 'hardware'
|
|
|
|
require 'keg'
|
|
|
|
|
|
|
|
ENV.extend(HomebrewEnvExtension)
|
|
|
|
ENV.setup_build_environment
|
2011-08-23 23:30:52 +01:00
|
|
|
# we must do this or tools like pkg-config won't get found by configure scripts etc.
|
2012-06-29 00:38:00 -05:00
|
|
|
ENV.prepend 'PATH', "#{HOMEBREW_PREFIX}/bin", ':' unless ORIGINAL_PATHS.include? HOMEBREW_PREFIX/'bin'
|
2009-10-26 18:13:38 +00:00
|
|
|
|
2012-05-15 01:56:33 -04:00
|
|
|
# Force any future invocations of sudo to require the user's password to be
|
|
|
|
# re-entered. This is in-case any build script call sudo. Certainly this is
|
|
|
|
# can be inconvenient for the user. But we need to be safe.
|
|
|
|
system "/usr/bin/sudo -k"
|
|
|
|
|
2012-06-15 14:45:57 -05:00
|
|
|
# The main Homebrew process expects to eventually see EOF on the error
|
|
|
|
# pipe in FormulaInstaller#build. However, if any child process fails to
|
|
|
|
# terminate (i.e, fails to close the descriptor), this won't happen, and
|
|
|
|
# the installer will hang. Set close-on-exec to prevent this.
|
|
|
|
# Whether it is *wise* to launch daemons from formulae is a separate
|
|
|
|
# question altogether.
|
2012-05-08 21:40:55 -05:00
|
|
|
if ENV['HOMEBREW_ERROR_PIPE']
|
|
|
|
require 'fcntl'
|
|
|
|
IO.new(ENV['HOMEBREW_ERROR_PIPE'].to_i, 'w').fcntl(Fcntl::F_SETFD, Fcntl::FD_CLOEXEC)
|
|
|
|
end
|
|
|
|
|
2009-10-26 18:13:38 +00:00
|
|
|
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
|
2009-09-04 15:28:18 +01:00
|
|
|
|
2009-09-21 20:22:09 +01:00
|
|
|
def install f
|
2012-06-08 04:09:29 +02:00
|
|
|
ENV.x11 if f.external_deps.any? { |dep| dep.is_a? X11Dependency }
|
|
|
|
|
2011-08-05 13:19:10 +01:00
|
|
|
f.recursive_deps.uniq.each do |dep|
|
2009-09-21 20:22:09 +01:00
|
|
|
dep = Formula.factory dep
|
|
|
|
if dep.keg_only?
|
2009-10-15 12:36:09 +01:00
|
|
|
ENV.prepend 'LDFLAGS', "-L#{dep.lib}"
|
|
|
|
ENV.prepend 'CPPFLAGS', "-I#{dep.include}"
|
|
|
|
ENV.prepend 'PATH', "#{dep.bin}", ':'
|
2012-02-27 04:06:13 +00:00
|
|
|
|
|
|
|
pcdir = dep.lib/'pkgconfig'
|
|
|
|
ENV.prepend 'PKG_CONFIG_PATH', pcdir, ':' if pcdir.directory?
|
|
|
|
|
|
|
|
acdir = dep.share/'aclocal'
|
|
|
|
ENV.prepend 'ACLOCAL_PATH', acdir, ':' if acdir.directory?
|
2009-09-21 20:22:09 +01:00
|
|
|
end
|
|
|
|
end
|
|
|
|
|
2012-03-18 13:58:13 -05:00
|
|
|
if f.fails_with? ENV.compiler
|
|
|
|
cs = CompilerSelector.new f
|
|
|
|
cs.select_compiler
|
|
|
|
cs.advise
|
|
|
|
end
|
|
|
|
|
2011-08-23 23:30:52 +01:00
|
|
|
f.brew do
|
2012-06-13 23:01:20 -07:00
|
|
|
if ARGV.flag? '--git'
|
|
|
|
system "git init"
|
|
|
|
system "git add -A"
|
|
|
|
end
|
2011-08-23 23:30:52 +01:00
|
|
|
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'
|
2011-12-10 17:14:38 -06:00
|
|
|
puts "This directory is now a git repo. Make your changes and then use:"
|
2011-08-23 23:30:52 +01:00
|
|
|
puts " git diff | pbcopy"
|
|
|
|
puts "to copy the diff to the clipboard."
|
2009-09-04 15:28:18 +01:00
|
|
|
end
|
|
|
|
|
2011-08-23 23:30:52 +01:00
|
|
|
interactive_shell f
|
|
|
|
nil
|
|
|
|
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
|
2010-08-21 12:18:17 -07:00
|
|
|
end
|
2011-07-04 09:31:29 +01:00
|
|
|
end
|
2011-08-23 23:30:52 +01:00
|
|
|
rescue Exception
|
|
|
|
if f.prefix.directory?
|
|
|
|
f.prefix.rmtree
|
2011-09-11 12:57:53 -07:00
|
|
|
f.rack.rmdir_if_possible
|
2009-09-04 15:28:18 +01:00
|
|
|
end
|
2011-08-23 23:30:52 +01:00
|
|
|
raise
|
2009-09-04 15:28:18 +01:00
|
|
|
end
|