From 20c0ddc40100b08f26d274c550ab0051d9831d21 Mon Sep 17 00:00:00 2001 From: Mike McQuaid Date: Thu, 28 Feb 2013 22:14:59 +0000 Subject: [PATCH] Add non-/usr/local bottles support. Signed-off-by: Mike McQuaid --- Library/Homebrew/bottles.rb | 2 +- Library/Homebrew/cmd/bottle.rb | 10 ++++++++++ Library/Homebrew/formula_support.rb | 7 ++++++- Library/Homebrew/macos.rb | 10 ---------- Library/Homebrew/test/testball.rb | 3 +++ 5 files changed, 20 insertions(+), 12 deletions(-) diff --git a/Library/Homebrew/bottles.rb b/Library/Homebrew/bottles.rb index 7962a50e1a..07eb2c5f3c 100644 --- a/Library/Homebrew/bottles.rb +++ b/Library/Homebrew/bottles.rb @@ -10,7 +10,6 @@ def bottle_filename f, bottle_revision=nil end def install_bottle? f - return true if ARGV.include? '--install-bottle' and MacOS.bottles_supported?(true) return true if f.downloader and defined? f.downloader.local_bottle_path \ and f.downloader.local_bottle_path @@ -19,6 +18,7 @@ def install_bottle? f return false unless f.pour_bottle? return false unless f.build.used_options.empty? return false unless bottle_current?(f) + return false if f.bottle.cellar != :any && f.bottle.cellar != HOMEBREW_CELLAR.to_s true end diff --git a/Library/Homebrew/cmd/bottle.rb b/Library/Homebrew/cmd/bottle.rb index 87b380aa6c..cda1d776d9 100644 --- a/Library/Homebrew/cmd/bottle.rb +++ b/Library/Homebrew/cmd/bottle.rb @@ -20,12 +20,22 @@ module Homebrew extend self HOMEBREW_CELLAR.cd do ohai "Bottling #{f.name} #{f.version}..." + bottle_relocatable = !quiet_system( + 'grep', '--recursive', '--quiet', '--max-count=1', + HOMEBREW_CELLAR, "#{f.name}/#{f.version}") + cellar = nil + if bottle_relocatable + cellar = ':any' + elsif HOMEBREW_CELLAR.to_s != '/usr/local/Cellar' + cellar = "'#{HOMEBREW_CELLAR}'" + end # Use gzip, faster to compress than bzip2, faster to uncompress than bzip2 # or an uncompressed tarball (and more bandwidth friendly). safe_system 'tar', 'czf', bottle_path, "#{f.name}/#{f.version}" sha1 = bottle_path.sha1 puts "./#{filename}" puts "bottle do" + puts " cellar #{cellar}" if cellar puts " revision #{bottle_revision}" if bottle_revision > 0 puts " sha1 '#{sha1}' => :#{MacOS.cat}" puts "end" diff --git a/Library/Homebrew/formula_support.rb b/Library/Homebrew/formula_support.rb index c9355d6412..3cd221129c 100644 --- a/Library/Homebrew/formula_support.rb +++ b/Library/Homebrew/formula_support.rb @@ -79,13 +79,14 @@ end class Bottle < SoftwareSpec attr_writer :url - attr_reader :revision, :root_url + attr_reader :revision, :root_url, :cellar # TODO: Can be removed when all bottles migrated to underscored cat symbols. attr_reader :cat_without_underscores def initialize super @revision = 0 + @cellar = '/usr/local/Cellar' @cat_without_underscores = false end @@ -117,6 +118,10 @@ class Bottle < SoftwareSpec val.nil? ? @root_url : @root_url = val end + def cellar val=nil + val.nil? ? @cellar : @cellar = val + end + def revision val=nil val.nil? ? @revision : @revision = val end diff --git a/Library/Homebrew/macos.rb b/Library/Homebrew/macos.rb index 14715499f8..bc886ce4b7 100644 --- a/Library/Homebrew/macos.rb +++ b/Library/Homebrew/macos.rb @@ -242,16 +242,6 @@ module MacOS extend self raise "Bottles are not supported on 32-bit Snow Leopard." end - unless HOMEBREW_PREFIX.to_s == '/usr/local' - return false unless raise_if_failed - raise "Bottles are only supported with a /usr/local prefix." - end - - unless HOMEBREW_CELLAR.to_s == '/usr/local/Cellar' - return false unless raise_if_failed - raise "Bottles are only supported with a /usr/local/Cellar cellar." - end - true end end diff --git a/Library/Homebrew/test/testball.rb b/Library/Homebrew/test/testball.rb index f01d14a831..858f1d6474 100644 --- a/Library/Homebrew/test/testball.rb +++ b/Library/Homebrew/test/testball.rb @@ -190,6 +190,7 @@ class SnowLeopardBottleSpecTestBall < Formula sha1 '482e737739d946b7c8cbaf127d9ee9c148b999f5' bottle do + cellar :any sha1 'deadbeefdeadbeefdeadbeefdeadbeefdeadbeef' => :snow_leopard end @@ -204,6 +205,7 @@ class LionBottleSpecTestBall < Formula sha1 '482e737739d946b7c8cbaf127d9ee9c148b999f5' bottle do + cellar :any sha1 'deadbeefdeadbeefdeadbeefdeadbeefdeadbeef' => :lion end @@ -218,6 +220,7 @@ class AllCatsBottleSpecTestBall < Formula sha1 '482e737739d946b7c8cbaf127d9ee9c148b999f5' bottle do + cellar '/private/tmp/testbrew/cellar' sha1 'deadbeefdeadbeefdeadbeefdeadbeefdeadbeef' => :snow_leopard sha1 'baadf00dbaadf00dbaadf00dbaadf00dbaadf00d' => :lion sha1 '8badf00d8badf00d8badf00d8badf00d8badf00d' => :mountain_lion