diff --git a/Library/Homebrew/dependency_collector.rb b/Library/Homebrew/dependency_collector.rb index 3d02c484f3..5fc7d90888 100644 --- a/Library/Homebrew/dependency_collector.rb +++ b/Library/Homebrew/dependency_collector.rb @@ -125,7 +125,7 @@ class DependencyCollector when :java then java_dep_if_needed(tags) when :linux then LinuxRequirement.new(tags) when :macos then MacOSRequirement.new(tags) - when :maximum_macos then MaximumMacOSRequirement.new(tags) + when :maximum_macos then MacOSRequirement.new(tags, comparator: "<=") when :osxfuse then OsxfuseRequirement.new(tags) when :tuntap then TuntapRequirement.new(tags) when :x11 then X11Requirement.new(tags) diff --git a/Library/Homebrew/requirements.rb b/Library/Homebrew/requirements.rb index cf7cf6be80..4358f1f2b6 100644 --- a/Library/Homebrew/requirements.rb +++ b/Library/Homebrew/requirements.rb @@ -6,7 +6,6 @@ require "requirements/codesign_requirement" require "requirements/java_requirement" require "requirements/linux_requirement" require "requirements/macos_requirement" -require "requirements/maximum_macos_requirement" require "requirements/osxfuse_requirement" require "requirements/tuntap_requirement" require "requirements/x11_requirement" diff --git a/Library/Homebrew/requirements/macos_requirement.rb b/Library/Homebrew/requirements/macos_requirement.rb index d984efc6ef..35655ce9f8 100644 --- a/Library/Homebrew/requirements/macos_requirement.rb +++ b/Library/Homebrew/requirements/macos_requirement.rb @@ -5,17 +5,18 @@ require "requirement" class MacOSRequirement < Requirement fatal true - def initialize(tags = []) + def initialize(tags = [], comparator: ">=") @version = MacOS::Version.from_symbol(tags.shift) unless tags.empty? + @comparator = comparator super(tags) end - def minimum_version_specified? + def version_specified? OS.mac? && @version end satisfy(build_env: false) do - next MacOS.version >= @version if minimum_version_specified? + next MacOS.version.public_send(@comparator, @version) if version_specified? next true if OS.mac? next true if @version @@ -23,14 +24,24 @@ class MacOSRequirement < Requirement end def message - return "macOS is required." unless minimum_version_specified? + return "macOS is required." unless version_specified? - "macOS #{@version.pretty_name} or newer is required." + case @comparator + when ">=" + "macOS #{@version.pretty_name} or newer is required." + when "<=" + <<~EOS + This formula either does not compile or function as expected on macOS + versions newer than #{@version.pretty_name} due to an upstream incompatibility. + EOS + else + "macOS #{@version.pretty_name} is required." + end end def display_s - return "macOS is required" unless minimum_version_specified? + return "macOS is required" unless version_specified? - "macOS >= #{@version}" + "macOS #{@comparator} #{@version}" end end diff --git a/Library/Homebrew/requirements/maximum_macos_requirement.rb b/Library/Homebrew/requirements/maximum_macos_requirement.rb deleted file mode 100644 index 415f862ed7..0000000000 --- a/Library/Homebrew/requirements/maximum_macos_requirement.rb +++ /dev/null @@ -1,25 +0,0 @@ -# frozen_string_literal: true - -require "requirement" - -class MaximumMacOSRequirement < Requirement - fatal true - - def initialize(tags) - @version = MacOS::Version.from_symbol(tags.shift) - super(tags) - end - - satisfy(build_env: false) { MacOS.version <= @version } - - def message - <<~EOS - This formula either does not compile or function as expected on macOS - versions newer than #{@version.pretty_name} due to an upstream incompatibility. - EOS - end - - def display_s - "macOS <= #{@version}" - end -end diff --git a/Library/Homebrew/test/requirements/macos_requirement_spec.rb b/Library/Homebrew/test/requirements/macos_requirement_spec.rb index 71d080e557..0e48a62f47 100644 --- a/Library/Homebrew/test/requirements/macos_requirement_spec.rb +++ b/Library/Homebrew/test/requirements/macos_requirement_spec.rb @@ -7,7 +7,17 @@ describe MacOSRequirement do describe "#satisfied?" do it "returns true on macOS" do - expect(requirement.satisfied?).to eq(OS.mac?) + expect(requirement.satisfied?).to eq OS.mac? + end + + it "supports version symbols", :needs_macos do + requirement = described_class.new([MacOS.version.to_sym]) + expect(requirement).to be_satisfied + end + + it "supports maximum versions", :needs_macos do + requirement = described_class.new([:mavericks], comparator: "<=") + expect(requirement.satisfied?).to eq MacOS.version <= :mavericks end end end