From 5027a9d2f264a0bfb76003b806f3ff7c2a950bdd Mon Sep 17 00:00:00 2001 From: Eric Knibbe Date: Tue, 20 May 2025 16:09:23 -0400 Subject: [PATCH] cask/audit: skip audit_rosetta on Intel-only casks & OSes --- Library/Homebrew/cask/audit.rb | 7 +++++-- Library/Homebrew/requirements/macos_requirement.rb | 7 +++++++ .../test/requirements/macos_requirement_spec.rb | 14 ++++++++++++++ 3 files changed, 26 insertions(+), 2 deletions(-) diff --git a/Library/Homebrew/cask/audit.rb b/Library/Homebrew/cask/audit.rb index 0dbd453b93..4f8bae5c14 100644 --- a/Library/Homebrew/cask/audit.rb +++ b/Library/Homebrew/cask/audit.rb @@ -606,7 +606,10 @@ module Cask def audit_rosetta return if (url = cask.url).nil? return unless online? + # Rosetta 2 is only for ARM-capable macOS versions, which are Big Sur (11.x) and later return if Homebrew::SimulateSystem.current_arch != :arm + return if MacOSVersion::SYMBOLS.fetch(Homebrew::SimulateSystem.current_os, "10") < "11" + return if cask.depends_on.macos&.maximum_version.to_s < "11" odebug "Auditing Rosetta 2 requirement" @@ -640,7 +643,7 @@ module Cask # binary stanza can contain shell scripts, so we just continue if lipo fails. next unless result.success? - odebug result.merged_output + odebug "Architectures: #{result.merged_output}" unless /arm64|x86_64/.match?(result.merged_output) add_error "Artifacts architecture is no longer supported by macOS!", @@ -652,7 +655,7 @@ module Cask mentions_rosetta = cask.caveats.include?("requires Rosetta 2") if supports_arm && mentions_rosetta - add_error "Artifacts does not require Rosetta 2 but the caveats say otherwise!", + add_error "Artifacts do not require Rosetta 2 but the caveats say otherwise!", location: url.location elsif !supports_arm && !mentions_rosetta add_error "Artifacts require Rosetta 2 but this is not indicated by the caveats!", diff --git a/Library/Homebrew/requirements/macos_requirement.rb b/Library/Homebrew/requirements/macos_requirement.rb index 3189259b8a..366348b893 100644 --- a/Library/Homebrew/requirements/macos_requirement.rb +++ b/Library/Homebrew/requirements/macos_requirement.rb @@ -68,6 +68,13 @@ class MacOSRequirement < Requirement @version end + def maximum_version + return MacOSVersion.new(HOMEBREW_MACOS_NEWEST_UNSUPPORTED) if @comparator == ">=" || !version_specified? + return @version.max if @version.respond_to?(:to_ary) + + @version + end + def allows?(other) return true unless version_specified? diff --git a/Library/Homebrew/test/requirements/macos_requirement_spec.rb b/Library/Homebrew/test/requirements/macos_requirement_spec.rb index ad15adc0c5..f983abd279 100644 --- a/Library/Homebrew/test/requirements/macos_requirement_spec.rb +++ b/Library/Homebrew/test/requirements/macos_requirement_spec.rb @@ -6,6 +6,7 @@ RSpec.describe MacOSRequirement do subject(:requirement) { described_class.new } let(:macos_oldest_allowed) { MacOSVersion.new(HOMEBREW_MACOS_OLDEST_ALLOWED) } + let(:macos_newest_allowed) { MacOSVersion.new(HOMEBREW_MACOS_NEWEST_UNSUPPORTED) } let(:big_sur_major) { MacOSVersion.new("11.0") } describe "#satisfied?" do @@ -37,6 +38,19 @@ RSpec.describe MacOSRequirement do expect(range_requirement.minimum_version).to eq big_sur_major end + specify "#maximum_version" do + no_requirement = described_class.new + max_requirement = described_class.new([:big_sur], comparator: "<=") + min_requirement = described_class.new([:big_sur], comparator: ">=") + exact_requirement = described_class.new([:big_sur], comparator: "==") + range_requirement = described_class.new([[:catalina, :big_sur]], comparator: "==") + expect(no_requirement.maximum_version).to eq macos_newest_allowed + expect(max_requirement.maximum_version).to eq big_sur_major + expect(min_requirement.maximum_version).to eq macos_newest_allowed + expect(exact_requirement.maximum_version).to eq big_sur_major + expect(range_requirement.maximum_version).to eq big_sur_major + end + specify "#allows?" do no_requirement = described_class.new max_requirement = described_class.new([:mojave], comparator: "<=")