| 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
 | 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
    ARGV.named.each do |name|
      # 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
      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.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
 |