mirror of
https://github.com/Homebrew/brew.git
synced 2025-07-14 16:09:03 +08:00

Not thread safe! But I don't think we care. We want to evaluate the env DSL block in the context of ENV for asthetic reasons, but we also want access to methods on the requirement instance. We can use #instance_exec to pass the requirement itself into the block: class Foo < Requirement env do |req| append 'PATH', req.some_path end def some_path which 'something' end end Also add a simplified version of Object#instance_exec for Ruby 1.8.6.
99 lines
2.9 KiB
Ruby
99 lines
2.9 KiB
Ruby
require 'extend/fileutils'
|
|
require 'extend/pathname'
|
|
require 'extend/ARGV'
|
|
require 'extend/string'
|
|
require 'extend/symbol'
|
|
require 'extend/object'
|
|
require 'utils'
|
|
require 'exceptions'
|
|
require 'set'
|
|
|
|
ARGV.extend(HomebrewArgvExtension)
|
|
|
|
HOMEBREW_VERSION = '0.9.3'
|
|
HOMEBREW_WWW = 'http://mxcl.github.com/homebrew/'
|
|
|
|
def cache
|
|
if ENV['HOMEBREW_CACHE']
|
|
Pathname.new(ENV['HOMEBREW_CACHE'])
|
|
else
|
|
# we do this for historic reasons, however the cache *should* be the same
|
|
# directory whichever user is used and whatever instance of brew is executed
|
|
home_cache = Pathname.new("~/Library/Caches/Homebrew").expand_path
|
|
if home_cache.directory? and home_cache.writable_real?
|
|
home_cache
|
|
else
|
|
root_cache = Pathname.new("/Library/Caches/Homebrew")
|
|
class << root_cache
|
|
alias :oldmkpath :mkpath
|
|
def mkpath
|
|
unless exist?
|
|
oldmkpath
|
|
chmod 0777
|
|
end
|
|
end
|
|
end
|
|
root_cache
|
|
end
|
|
end
|
|
end
|
|
|
|
HOMEBREW_CACHE = cache
|
|
undef cache # we use a function to prevent adding home_cache to the global scope
|
|
|
|
# Where brews installed via URL are cached
|
|
HOMEBREW_CACHE_FORMULA = HOMEBREW_CACHE+"Formula"
|
|
|
|
if not defined? HOMEBREW_BREW_FILE
|
|
HOMEBREW_BREW_FILE = ENV['HOMEBREW_BREW_FILE'] || `which brew`.chomp
|
|
end
|
|
|
|
HOMEBREW_PREFIX = Pathname.new(HOMEBREW_BREW_FILE).dirname.parent # Where we link under
|
|
HOMEBREW_REPOSITORY = Pathname.new(HOMEBREW_BREW_FILE).realpath.dirname.parent # Where .git is found
|
|
HOMEBREW_LIBRARY = HOMEBREW_REPOSITORY/"Library"
|
|
HOMEBREW_CONTRIB = HOMEBREW_REPOSITORY/"Library/Contributions"
|
|
|
|
# Where we store built products; /usr/local/Cellar if it exists,
|
|
# otherwise a Cellar relative to the Repository.
|
|
HOMEBREW_CELLAR = if (HOMEBREW_PREFIX+"Cellar").exist?
|
|
HOMEBREW_PREFIX+"Cellar"
|
|
else
|
|
HOMEBREW_REPOSITORY+"Cellar"
|
|
end
|
|
|
|
HOMEBREW_LOGS = Pathname.new('~/Library/Logs/Homebrew/').expand_path
|
|
|
|
if RUBY_PLATFORM =~ /darwin/
|
|
MACOS_FULL_VERSION = `/usr/bin/sw_vers -productVersion`.chomp
|
|
MACOS_VERSION = /(10\.\d+)(\.\d+)?/.match(MACOS_FULL_VERSION).captures.first.to_f
|
|
OS_VERSION = "Mac OS X #{MACOS_FULL_VERSION}"
|
|
MACOS = true
|
|
else
|
|
MACOS_FULL_VERSION = MACOS_VERSION = 0
|
|
OS_VERSION = RUBY_PLATFORM
|
|
MACOS = false
|
|
end
|
|
|
|
HOMEBREW_USER_AGENT = "Homebrew #{HOMEBREW_VERSION} (Ruby #{RUBY_VERSION}-#{RUBY_PATCHLEVEL}; #{OS_VERSION})"
|
|
|
|
HOMEBREW_CURL_ARGS = '-f#LA'
|
|
|
|
module Homebrew extend self
|
|
include FileUtils
|
|
|
|
attr_accessor :failed
|
|
alias_method :failed?, :failed
|
|
end
|
|
|
|
require 'metafiles'
|
|
FORMULA_META_FILES = Metafiles.new
|
|
ISSUES_URL = "https://github.com/mxcl/homebrew/wiki/troubleshooting"
|
|
HOMEBREW_PULL_URL_REGEX = 'https:\/\/github.com\/\w+\/homebrew(-\w+)?\/(pull\/(\d+)|commit\/\w{4,40})'
|
|
|
|
unless ARGV.include? "--no-compat" or ENV['HOMEBREW_NO_COMPAT']
|
|
$:.unshift(File.expand_path("#{__FILE__}/../compat"))
|
|
require 'compatibility'
|
|
end
|
|
|
|
ORIGINAL_PATHS = ENV['PATH'].split(':').map{ |p| Pathname.new(p).expand_path rescue nil }.compact.freeze
|