1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
|
require 'formula_installer'
require 'hardware'
require 'blacklist'
module Homebrew extend self
def install
raise FormulaUnspecifiedError if ARGV.named.empty?
{
'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
if ARGV.include? '--head'
raise "Specify `--HEAD` in uppercase to build from trunk."
end
ARGV.named.each do |name|
# if a formula has been tapped ignore the blacklisting
unless Formula.path(name).file?
msg = blacklisted? name
raise "No available formula for #{name}\n#{msg}" if msg
end
if not File.exist? name and name =~ HOMEBREW_TAP_FORMULA_REGEX then
require 'cmd/tap'
install_tap $1, $2
end
end unless ARGV.force?
perform_preinstall_checks
begin
ARGV.formulae.each do |f|
begin
install_formula(f)
rescue CannotInstallFormulaError => e
ofail e.message
end
end
rescue FormulaUnavailableError => e
ofail e.message
require 'cmd/search'
puts 'Searching taps...'
puts_columns(search_taps(query_regexp(e.name)))
end
end
def check_ppc
case Hardware::CPU.type when :ppc, :dunno
abort <<-EOS.undent
Sorry, Homebrew does not support your computer's CPU architecture.
For PPC support, see: https://github.com/mistydemeo/tigerbrew
EOS
end
end
def check_writable_install_location
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'
end
def check_xcode
require 'cmd/doctor'
checks = Checks.new
doctor_methods = ['check_xcode_clt', 'check_xcode_license_approved',
'check_for_osx_gcc_installer']
doctor_methods.each do |check|
out = checks.send(check)
opoo out unless out.nil?
end
end
def check_macports
unless MacOS.macports_or_fink.empty?
opoo "It appears you have MacPorts or Fink installed."
puts "Software installed with other package managers causes known problems for"
puts "Homebrew. If a formula fails to build, uninstall MacPorts/Fink and try again."
end
end
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
def perform_preinstall_checks
check_ppc
check_writable_install_location
check_xcode
check_macports
check_cellar
end
def install_formula f
fi = FormulaInstaller.new(f)
fi.ignore_deps = ARGV.ignore_deps? || ARGV.interactive?
fi.only_deps = ARGV.only_deps?
fi.build_bottle = ARGV.build_bottle?
fi.prelude
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.
rescue FormulaAlreadyInstalledError => e
opoo e.message
# Ignore CannotInstallFormulaError and let caller handle it.
end
end
|