## Compatibility layer introduced in 0.8 (refactor) # maybe never used by anyone, but alas it must continue to exist def versions_of(keg_name) `/bin/ls #{HOMEBREW_CELLAR}/#{keg_name}`.collect { |version| version.strip }.reverse end def dump_config require 'cmd/--config' Homebrew.__config end def dump_build_env env require 'cmd/--env' Homebrew.dump_build_env env end def default_cc MacOS.default_cc end def gcc_42_build MacOS.gcc_42_build_version end alias :gcc_build :gcc_42_build def gcc_40_build MacOS.gcc_40_build_version end def llvm_build MacOS.llvm_build_version end def x11_installed? MacOS::X11.installed? end def macports_or_fink_installed? MacOS.macports_or_fink_installed? end def outdated_brews require 'cmd/outdated' Homebrew.outdated_brews end def search_brews text require 'cmd/search' Homebrew.search_brews text end def snow_leopard_64? MacOS.prefer_64_bit? end class Formula # in compatability because the naming is somewhat confusing def self.resolve_alias name opoo 'Formula.resolve_alias is deprecated and will eventually be removed' opoo 'Use Formula.canonical_name instead.' # Don't resolve paths or URLs return name if name.include?("/") aka = HOMEBREW_REPOSITORY+"Library/Aliases"+name if aka.file? aka.realpath.basename('.rb').to_s else name end end # This used to be called in "def install", but should now be used # up in the DSL section. def fails_with_llvm msg=nil, data=nil FailsWithLLVM.new(msg, data).handle_failure end def fails_with_llvm? fails_with? :llvm end def self.fails_with_llvm msg=nil, data=nil fails_with_llvm_reason = FailsWithLLVM.new(msg, data) @cc_failures ||= CompilerFailures.new @cc_failures << fails_with_llvm_reason end def std_cmake_parameters "-DCMAKE_INSTALL_PREFIX='#{prefix}' -DCMAKE_BUILD_TYPE=None -DCMAKE_FIND_FRAMEWORK=LAST -Wno-dev" end class << self def bottle_sha1 val=nil val.nil? ? @bottle_sha1 : @bottle_sha1 = val end end end class UnidentifiedFormula < Formula end module HomebrewEnvExtension extend self def use_clang? compiler == :clang end def use_gcc? compiler == :gcc end def use_llvm? compiler == :llvm end end class FailsWithLLVM attr_reader :compiler, :build, :cause def initialize msg=nil, data=nil if msg.nil? or msg.kind_of? Hash @cause = "(No specific reason was given)" data = msg else @cause = msg end @build = (data.delete :build rescue nil).to_i @compiler = :llvm end def handle_failure return unless ENV.compiler == :llvm # version 2336 is the latest version as of Xcode 4.2, so it is the # latest version we have tested against so we will switch to GCC and # bump this integer when Xcode 4.3 is released. TODO do that! if build.to_i >= 2336 if MacOS::Xcode.version < "4.2" opoo "Formula will not build with LLVM, using GCC" ENV.gcc else opoo "Formula will not build with LLVM, trying Clang" ENV.clang end return end opoo "Building with LLVM, but this formula is reported to not work with LLVM:" puts puts cause puts puts <<-EOS.undent We are continuing anyway so if the build succeeds, please open a ticket with the following information: #{MacOS.llvm_build_version}-#{MACOS_VERSION}. So that we can update the formula accordingly. Thanks! EOS puts if MacOS::Xcode.version < "4.2" puts "If it doesn't work you can: brew install --use-gcc" else puts "If it doesn't work you can try: brew install --use-clang" end puts end end module MacOS extend self def xcode_folder Xcode.folder end def xcode_prefix Xcode.prefix end def xcode_installed? Xcode.installed? end def xcode_version Xcode.version end def clt_installed? CLT.installed? end def clt_version? CLT.version end def x11_installed? X11.installed? end def x11_prefix X11.prefix end def leopard? 10.5 == MACOS_VERSION end def snow_leopard? 10.6 <= MACOS_VERSION # Actually Snow Leopard or newer end alias_method :snow_leopard_or_newer?, :snow_leopard? def lion? 10.7 <= MACOS_VERSION # Actually Lion or newer end alias_method :lion_or_newer?, :lion? def mountain_lion? 10.8 <= MACOS_VERSION # Actually Mountain Lion or newer end alias_method :mountain_lion_or_newer?, :mountain_lion? end class Version def slice *args opoo "Calling slice on versions is deprecated, use: to_s.slice" to_s.slice *args end end