diff --git a/Library/Homebrew/global.rb b/Library/Homebrew/global.rb index 757fb8d74b..07c5f315c9 100644 --- a/Library/Homebrew/global.rb +++ b/Library/Homebrew/global.rb @@ -28,6 +28,8 @@ require 'hardware' ARGV.extend(HomebrewArgvExtension) +HOMEBREW_VERSION = 0.4 +HOMEBREW_WWW = 'http://bit.ly/Homebrew' if Process.uid == 0 # technically this is not the correct place, this cache is for *all users* @@ -37,14 +39,9 @@ else HOMEBREW_CACHE=Pathname.new("~/Library/Caches/Homebrew").expand_path end -HOMEBREW_PREFIX = (Pathname.getwd+__FILE__).dirname.parent.parent.cleanpath -HOMEBREW_CELLAR = HOMEBREW_PREFIX+'Cellar' -HOMEBREW_VERSION = 0.4 -HOMEBREW_WWW = 'http://bit.ly/Homebrew' - -# we use Library as we allow people to symlink their Homebrew into another -# directory so they can hack in one place and use it in another -HOMEBREW_REPOSITORY = (HOMEBREW_PREFIX+'Library').realpath.parent +HOMEBREW_PREFIX = Pathname.new(BREW_FILE).dirname.parent # Where we link under +HOMEBREW_REPOSITORY = Pathname.new(BREW_FILE).realpath.dirname.parent # Where .git is found +HOMEBREW_CELLAR = HOMEBREW_REPOSITORY+'Cellar' # Where we build into MACOS_FULL_VERSION = `/usr/bin/sw_vers -productVersion`.chomp MACOS_VERSION = /(10\.\d+)(\.\d+)?/.match(MACOS_FULL_VERSION).captures.first.to_f diff --git a/Library/Homebrew/install.rb b/Library/Homebrew/install.rb index 927e976bc0..a27cd2e4f2 100755 --- a/Library/Homebrew/install.rb +++ b/Library/Homebrew/install.rb @@ -1,4 +1,6 @@ #!/usr/bin/ruby +BREW_FILE = `which brew`.strip + require 'global' require 'brew.h' @@ -8,6 +10,7 @@ require 'formula' require 'hardware' require 'keg' + show_summary_heading = false def text_for_keg_only_formula f diff --git a/bin/brew b/bin/brew index 2195e3a20e..3ffed4210d 100755 --- a/bin/brew +++ b/bin/brew @@ -5,16 +5,14 @@ # odd exceptions. Reduce our support burden by showing a user-friendly error. Dir.getwd rescue abort "The current working directory doesn't exist, cannot proceed." +BREW_FILE = __FILE__ + def homebrew_rubylib_path lib_path = "/../../Library/Homebrew" - # we resolve off of Dir.getwd as otherwise the symlink gets resolved! - brew_path = if not File.symlink? __FILE__ or File.exist? Dir.getwd+'/'+__FILE__+lib_path - # standard 100% symlinked or non-symlinked installation - __FILE__ - else - # non-standard installation -- just this script is symlinked - File.readlink(__FILE__) - end + + # Library/Homebrew is relative to the real path of brew + brew_path = __FILE__ + brew_path = File.readlink(brew_path) if File.symlink? brew_path return File.expand_path(brew_path+lib_path) end @@ -53,12 +51,36 @@ case Hardware.cpu_type when :ppc, :dunno abort "Sorry, Homebrew does not support your computer's CPU architecture." end +def dump_config + puts <<-EOS +HOMEBREW_VERSION: #{HOMEBREW_VERSION} + +HOMEBREW_PREFIX: #{HOMEBREW_PREFIX} +\tWhere do we symlink installs to? + +HOMEBREW_CELLAR: #{HOMEBREW_CELLAR} +\tWhere do we store our built products? + +HOMEBREW_CACHE: #{HOMEBREW_CACHE} +\tWhere do we cache our downloads? + +HOMEBREW_REPOSITORY: #{HOMEBREW_REPOSITORY} +\tWhere is our .git? + +library path: #{homebrew_rubylib_path} +\tWhat do we put on the ruby path? +EOS +end + + begin require 'brew.h' case ARGV.shift when '--prefix' puts HOMEBREW_PREFIX + when '--config' + dump_config when 'home', 'homepage' if ARGV.named_empty? @@ -83,7 +105,7 @@ begin end when 'search', '-S' - formulae = (HOMEBREW_PREFIX+'Library'+'Formula').children.sort.map{|f| f.basename('.rb') } + formulae = (HOMEBREW_REPOSITORY+'Library/Formula').children.sort.map{|f| f.basename('.rb') } if ARGV.first =~ /^\/(.*)\/$/ puts_columns formulae.grep(Regexp.new($1)) else @@ -95,9 +117,9 @@ begin # EDITOR isn't a good fit here, we need a GUI client that actually has # a UI for projects, so apologies if this wasn't what you expected, # please improve it! :) - exec 'mate', *Dir["#{HOMEBREW_PREFIX}/Library/*"]<< - "#{HOMEBREW_PREFIX}/bin/brew"<< - "#{HOMEBREW_PREFIX}/README.md" + exec 'mate', *Dir["#{HOMEBREW_REPOSITORY}/Library/*"]<< + "#{HOMEBREW_REPOSITORY}/bin/brew"<< + "#{HOMEBREW_REPOSITORY}/README.md" else exec_editor *ARGV.formulae.collect {|f| f.path} end @@ -108,6 +130,9 @@ begin exit 0 end + # The Cellar lives under the repository + raise "Cannot write to #{HOMEBREW_REPOSITORY}" unless HOMEBREW_REPOSITORY.writable? + # The Prefix is where we symlink under raise "Cannot write to #{HOMEBREW_PREFIX}" unless HOMEBREW_PREFIX.writable? if ARGV.interactive? and ARGV.formulae.length > 1