2010-09-11 20:22:54 +01:00
|
|
|
require 'formula_installer'
|
|
|
|
require 'hardware'
|
2010-11-14 03:52:59 +00:00
|
|
|
require 'blacklist'
|
2010-09-11 20:22:54 +01:00
|
|
|
|
2012-08-10 07:23:48 -07:00
|
|
|
module Homebrew extend self
|
2010-09-11 20:22:54 +01:00
|
|
|
def install
|
2012-02-04 00:01:29 -06:00
|
|
|
raise FormulaUnspecifiedError if ARGV.named.empty?
|
|
|
|
|
2013-12-02 01:17:25 -06:00
|
|
|
{
|
|
|
|
'gcc' => 'gcc-4.2',
|
|
|
|
'llvm' => 'llvm-gcc',
|
|
|
|
'clang' => 'clang'
|
|
|
|
}.each_pair do |old, new|
|
|
|
|
opt = "--use-#{old}"
|
|
|
|
if ARGV.include? opt then opoo <<-EOS.undent
|
|
|
|
#{opt.inspect} is deprecated and will be removed in a future version.
|
|
|
|
Please use "--cc=#{new}" instead.
|
|
|
|
EOS
|
|
|
|
end
|
|
|
|
end
|
|
|
|
|
2010-11-14 03:52:59 +00:00
|
|
|
ARGV.named.each do |name|
|
2012-08-06 14:18:03 -04:00
|
|
|
# if a formula has been tapped ignore the blacklisting
|
|
|
|
if not File.file? HOMEBREW_REPOSITORY/"Library/Formula/#{name}.rb"
|
|
|
|
msg = blacklisted? name
|
|
|
|
raise "No available formula for #{name}\n#{msg}" if msg
|
|
|
|
end
|
2013-10-22 11:58:33 +01:00
|
|
|
if not File.exist? name and name =~ HOMEBREW_TAP_FORMULA_REGEX then
|
2013-10-21 04:25:24 +01:00
|
|
|
require 'cmd/tap'
|
2014-01-03 21:51:42 +00:00
|
|
|
install_tap $1, $2
|
2013-10-21 04:25:24 +01:00
|
|
|
end
|
2010-11-09 12:57:41 +00:00
|
|
|
end unless ARGV.force?
|
|
|
|
|
2013-06-12 09:02:20 -05:00
|
|
|
perform_preinstall_checks
|
2013-10-30 12:33:20 -07:00
|
|
|
begin
|
|
|
|
ARGV.formulae.each do |f|
|
|
|
|
begin
|
|
|
|
install_formula(f)
|
|
|
|
rescue CannotInstallFormulaError => e
|
|
|
|
ofail e.message
|
|
|
|
end
|
2013-09-05 12:24:21 -07:00
|
|
|
end
|
2013-10-30 12:33:20 -07:00
|
|
|
rescue FormulaUnavailableError => e
|
|
|
|
ofail e.message
|
|
|
|
require 'cmd/search'
|
|
|
|
puts 'Searching taps...'
|
|
|
|
puts_columns(search_taps(query_regexp(e.name)))
|
2013-09-05 12:24:21 -07:00
|
|
|
end
|
2010-09-11 20:22:54 +01:00
|
|
|
end
|
|
|
|
|
2010-11-09 12:57:41 +00:00
|
|
|
def check_ppc
|
2013-06-13 12:04:58 -05:00
|
|
|
case Hardware::CPU.type when :ppc, :dunno
|
2010-11-09 13:00:33 +00:00
|
|
|
abort <<-EOS.undent
|
|
|
|
Sorry, Homebrew does not support your computer's CPU architecture.
|
2012-12-27 21:54:54 -04:00
|
|
|
For PPC support, see: https://github.com/mistydemeo/tigerbrew
|
2010-11-09 13:00:33 +00:00
|
|
|
EOS
|
|
|
|
end
|
2010-11-09 12:57:41 +00:00
|
|
|
end
|
2010-09-11 20:22:54 +01:00
|
|
|
|
2010-11-09 12:57:41 +00:00
|
|
|
def check_writable_install_location
|
2012-07-28 11:36:08 -07:00
|
|
|
raise "Cannot write to #{HOMEBREW_CELLAR}" if HOMEBREW_CELLAR.exist? and not HOMEBREW_CELLAR.writable_real?
|
|
|
|
raise "Cannot write to #{HOMEBREW_PREFIX}" unless HOMEBREW_PREFIX.writable_real? or HOMEBREW_PREFIX.to_s == '/usr/local'
|
2010-11-09 12:57:41 +00:00
|
|
|
end
|
2010-09-11 20:22:54 +01:00
|
|
|
|
2012-03-19 11:26:39 -05:00
|
|
|
def check_xcode
|
|
|
|
require 'cmd/doctor'
|
2012-08-31 10:20:20 -04:00
|
|
|
checks = Checks.new
|
2013-10-29 16:22:46 -04:00
|
|
|
doctor_methods = ['check_xcode_clt', 'check_xcode_license_approved',
|
|
|
|
'check_for_osx_gcc_installer']
|
|
|
|
doctor_methods.each do |check|
|
2012-08-31 10:20:20 -04:00
|
|
|
out = checks.send(check)
|
|
|
|
opoo out unless out.nil?
|
|
|
|
end
|
2010-09-11 20:22:54 +01:00
|
|
|
end
|
|
|
|
|
2010-11-09 12:57:41 +00:00
|
|
|
def check_macports
|
2012-12-17 17:05:53 -06:00
|
|
|
unless MacOS.macports_or_fink.empty?
|
2011-09-01 10:14:26 -07:00
|
|
|
opoo "It appears you have MacPorts or Fink installed."
|
2010-11-09 12:57:41 +00:00
|
|
|
puts "Software installed with other package managers causes known problems for"
|
2011-09-01 10:14:26 -07:00
|
|
|
puts "Homebrew. If a formula fails to build, uninstall MacPorts/Fink and try again."
|
2010-11-09 12:57:41 +00:00
|
|
|
end
|
2010-09-11 20:22:54 +01:00
|
|
|
end
|
|
|
|
|
2011-09-15 10:57:03 +01:00
|
|
|
def check_cellar
|
|
|
|
FileUtils.mkdir_p HOMEBREW_CELLAR if not File.exist? HOMEBREW_CELLAR
|
|
|
|
rescue
|
|
|
|
raise <<-EOS.undent
|
|
|
|
Could not create #{HOMEBREW_CELLAR}
|
|
|
|
Check you have permission to write to #{HOMEBREW_CELLAR.parent}
|
|
|
|
EOS
|
|
|
|
end
|
|
|
|
|
2011-08-23 23:30:52 +01:00
|
|
|
def perform_preinstall_checks
|
2010-11-09 12:57:41 +00:00
|
|
|
check_ppc
|
|
|
|
check_writable_install_location
|
2012-03-19 11:26:39 -05:00
|
|
|
check_xcode
|
2010-11-09 12:57:41 +00:00
|
|
|
check_macports
|
2011-09-15 10:57:03 +01:00
|
|
|
check_cellar
|
2011-08-23 23:30:52 +01:00
|
|
|
end
|
2010-11-09 12:57:41 +00:00
|
|
|
|
2013-01-08 19:54:32 -06:00
|
|
|
def install_formula f
|
|
|
|
fi = FormulaInstaller.new(f)
|
|
|
|
fi.install
|
|
|
|
fi.caveats
|
|
|
|
fi.finish
|
|
|
|
rescue FormulaInstallationAlreadyAttemptedError
|
|
|
|
# We already attempted to install f as part of the dependency tree of
|
|
|
|
# another formula. In that case, don't generate an error, just move on.
|
2013-04-03 18:26:40 -05:00
|
|
|
rescue FormulaAlreadyInstalledError => e
|
|
|
|
opoo e.message
|
2013-09-05 12:24:21 -07:00
|
|
|
# Ignore CannotInstallFormulaError and let caller handle it.
|
2013-01-08 19:54:32 -06:00
|
|
|
end
|
2010-09-11 20:22:54 +01:00
|
|
|
end
|