brew/Library/Homebrew/cmd/install.rb
Max Howell 13918ff6d9 Record which keg is linked
Will be useful for a variety of reasons, but for now, I'm just using it to ensure install won't install again if something is already installed (use brew upgrade instead).

But means that brew switch and that can work properly etc.
2011-08-24 22:30:44 +01:00

90 lines
2.6 KiB
Ruby

require 'formula_installer'
require 'hardware'
require 'blacklist'
module Homebrew extend self
def install
ARGV.named.each do |name|
msg = blacklisted? name
raise "No available formula for #{name}\n#{msg}" if msg
end unless ARGV.force?
ARGV.formulae.each do |f|
if File.directory? HOMEBREW_REPOSITORY/"Library/LinkedKegs/#{f.name}"
raise "#{f} already installed\nTry: brew upgrade #{f}"
end
end
if Process.uid.zero? and not File.stat(HOMEBREW_BREW_FILE).uid.zero?
# note we only abort if Homebrew is *not* installed as sudo and the user
# calls brew as root. The fix is to chown brew to root.
abort "Cowardly refusing to `sudo brew install'"
end
install_formulae ARGV.formulae
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: http://github.com/sceaga/homebrew/tree/powerpc
EOS
end
end
def check_writable_install_location
raise "Cannot write to #{HOMEBREW_CELLAR}" if HOMEBREW_CELLAR.exist? and not HOMEBREW_CELLAR.writable?
raise "Cannot write to #{HOMEBREW_PREFIX}" unless HOMEBREW_PREFIX.writable? or HOMEBREW_PREFIX.to_s == '/usr/local'
end
def check_cc
if MacOS.snow_leopard?
if MacOS.llvm_build_version < RECOMMENDED_LLVM
opoo "You should upgrade to Xcode 3.2.6"
end
else
if (MacOS.gcc_40_build_version < RECOMMENDED_GCC_40) or (MacOS.gcc_42_build_version < RECOMMENDED_GCC_42)
opoo "You should upgrade to Xcode 3.1.4"
end
end
rescue
# the reason we don't abort is some formula don't require Xcode
# TODO allow formula to declare themselves as "not needing Xcode"
opoo "Xcode is not installed! Builds may fail!"
end
def check_macports
if MacOS.macports_or_fink_installed?
opoo "It appears you have Macports or Fink installed"
puts "Software installed with other package managers causes known problems for"
puts "Homebrew. If formula fail to build uninstall Macports/Fink and reinstall any"
puts "affected formula."
end
end
def perform_preinstall_checks
check_ppc
check_writable_install_location
check_cc
check_macports
end
def install_formulae formulae
formulae = [formulae].flatten.compact
unless formulae.empty?
perform_preinstall_checks
formulae.each do |f|
begin
fi = FormulaInstaller.new(f)
fi.install
fi.caveats
fi.finish
rescue FormulaAlreadyInstalledError => e
opoo e.message
end
end
end
end
end