From 95bf529ad2bb6626ff4f5e8e084622e22a779a89 Mon Sep 17 00:00:00 2001 From: Michka Popoff Date: Thu, 26 Nov 2020 14:29:42 +0100 Subject: [PATCH] bottle merge: add support for linux cellar The first attempt to build and pull a formula (hello) for linux in homebrew-core resulted in a wrong cellar line being added to the formula's bottle block. How to test/debug this, using the 4 bottles that where built for hello: brew bottle --merge --debug hello--2.10_1.mojave.bottle.json hello--2.10_1.x86_64_linux.bottle.json hello--2.10_1.big_sur.bottle.json hello--2.10_1.catalina.bottle.json This command would add create the following bottle block: bottle do cellar "/home/linuxbrew/.linuxbrew/Cellar" sha256 "a0af7dcbb5c83f6f3f7ecd507c2d352c1a018f894d51ad241ce8492fa598010f" => :big_sur sha256 "5334dd344986e46b2aa4f0471cac7b0914bd7de7cb890a34415771788d03f2ac" => :catalina sha256 "22948764d8f8d7be4870ff92dae64d986eb63a9150b219c20fff87d1a6aa93d6" => :mojave sha256 "702dc7f78444d2f4f1c19324be654bcbb8b99dd0e9ce26c3e2fbc3b6464a189f" => :x86_64_linux end After the change in this PR, the result is the following: bottle do sha256 "a0af7dcbb5c83f6f3f7ecd507c2d352c1a018f894d51ad241ce8492fa598010f" => :big_sur sha256 "5334dd344986e46b2aa4f0471cac7b0914bd7de7cb890a34415771788d03f2ac" => :catalina sha256 "22948764d8f8d7be4870ff92dae64d986eb63a9150b219c20fff87d1a6aa93d6" => :mojave sha256 "702dc7f78444d2f4f1c19324be654bcbb8b99dd0e9ce26c3e2fbc3b6464a189f" => :x86_64_linux end The brew bottle --merge code will pick the most common cellar line between the 4 bottles, by order of priority: - non-relocatable (fixed cellar path) - cellar :any - cellar :any_skip_relocation In the case of the hello bottle, the 3 mac bottles are "cellar :any_skip_relocation", and the linux bottle is non-relocatable. So the linux bottle wins and the code correctly determines that the 4 bottles should be non-relocatable. In that case, the /home/linuxbrew/.linuxbrew/Cellar path is defined as cellar, and by convention we do not write that out to the formula file, hence the cellar path check that needs to be modified in this PR. This PR also fixes the same situation for mac ARM cellar paths --- Library/Homebrew/dev-cmd/bottle.rb | 4 +++- Library/Homebrew/global.rb | 3 +++ 2 files changed, 6 insertions(+), 1 deletion(-) diff --git a/Library/Homebrew/dev-cmd/bottle.rb b/Library/Homebrew/dev-cmd/bottle.rb index 946d0a912af32..7bb127367f2e7 100644 --- a/Library/Homebrew/dev-cmd/bottle.rb +++ b/Library/Homebrew/dev-cmd/bottle.rb @@ -22,7 +22,9 @@ <% end %> <% if cellar.is_a? Symbol %> cellar :<%= cellar %> - <% elsif ![Homebrew::DEFAULT_CELLAR, "/usr/local/Cellar"].include?(cellar) %> + <% elsif ![Homebrew::DEFAULT_MACOS_CELLAR, + Homebrew::DEFAULT_MACOS_ARM_CELLAR, + Homebrew::DEFAULT_LINUX_CELLAR].include?(cellar) %> cellar "<%= cellar %>" <% end %> <% if rebuild.positive? %> diff --git a/Library/Homebrew/global.rb b/Library/Homebrew/global.rb index 2cc272a7f5ef7..4554ac7c62b0a 100644 --- a/Library/Homebrew/global.rb +++ b/Library/Homebrew/global.rb @@ -80,6 +80,9 @@ module Homebrew DEFAULT_PREFIX ||= HOMEBREW_DEFAULT_PREFIX DEFAULT_CELLAR = "#{DEFAULT_PREFIX}/Cellar" + DEFAULT_MACOS_CELLAR = "#{HOMEBREW_DEFAULT_PREFIX}/Cellar" + DEFAULT_MACOS_ARM_CELLAR = "#{HOMEBREW_MACOS_ARM_DEFAULT_PREFIX}/Cellar" + DEFAULT_LINUX_CELLAR = "#{HOMEBREW_LINUX_DEFAULT_PREFIX}/Cellar" DEFAULT_REPOSITORY = "#{DEFAULT_PREFIX}/Homebrew" class << self