
The MacOS.version? family of methods (other than "leopard?") are poorly defined and lead to confusing code. Replace them in formulae with more explicit comparisons. "MacOS.version" is a special version object that can be compared to numerics, symbols, and strings using the standard Ruby comparison methods. The old methods were moved to compat when the version comparison code was merged, and they must remain there "forever", but they should not be used in new code. Signed-off-by: Jack Nagel <jacknagel@gmail.com>
229 lines
4.6 KiB
Ruby
229 lines
4.6 KiB
Ruby
## 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
|
|
|
|
# TODO eventually some of these should print deprecation warnings
|
|
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
|