Drop Mavericks support.

Companion to https://github.com/Homebrew/brew/pull/7698.

Provide better, `odeprecated` messaging for
`depends_on :macos => :mavericks` and otherwise just fix up the code
that relied on `:mavericks`.
This commit is contained in:
Mike McQuaid 2020-06-10 10:06:46 +01:00
parent 266b051344
commit b58fa4ebb1
No known key found for this signature in database
GPG Key ID: 48A898132FD8EE70
18 changed files with 91 additions and 83 deletions

View File

@ -612,3 +612,12 @@ class ChildProcessError < RuntimeError
set_backtrace inner["b"]
end
end
class MacOSVersionError < RuntimeError
attr_reader :version
def initialize(version)
@version = version
super "unknown or unsupported macOS version: #{version.inspect}"
end
end

View File

@ -10,10 +10,6 @@ module FormulaCellarChecks
end
return if formula.name&.match?(Version.formula_optionally_versioned_regex(:php))
return if MacOS.version < :mavericks && formula.name.start_with?("postgresql")
return if MacOS.version < :yosemite && formula.name.start_with?("memcached")
return if formula.keg_only? || !formula.include.directory?
files = relative_glob(formula.include, "**/*.h")

View File

@ -30,13 +30,13 @@ module Utils
def find_older_compatible_tag(tag)
tag_version = begin
MacOS::Version.from_symbol(tag)
rescue ArgumentError
rescue MacOSVersionError
return
end
keys.find do |key|
MacOS::Version.from_symbol(key) <= tag_version
rescue ArgumentError
rescue MacOSVersionError
false
end
end

View File

@ -2327,9 +2327,9 @@ class Formula
# prefix "/opt/homebrew" # Optional HOMEBREW_PREFIX in which the bottles were built.
# cellar "/opt/homebrew/Cellar" # Optional HOMEBREW_CELLAR in which the bottles were built.
# rebuild 1 # Making the old bottle outdated without bumping the version/revision of the formula.
# sha256 "4355a46b19d348dc2f57c046f8ef63d4538ebb936000f3c9ee954a27460dd865" => :el_capitan
# sha256 "53c234e5e8472b6ac51c1ae1cab3fe06fad053beb8ebfd8977b010655bfdd3c3" => :yosemite
# sha256 "1121cfccd5913f0a63fec40a6ffd44ea64f9dc135c66634ba001d10bcf4302a2" => :mavericks
# sha256 "ef65c759c5097a36323fa9c77756468649e8d1980a3a4e05695c05e39568967c" => :catalina
# sha256 "28f4090610946a4eb207df102d841de23ced0d06ba31cb79e040d883906dcd4f" => :mojave
# sha256 "91dd0caca9bd3f38c439d5a7b6f68440c4274945615fae035ff0a369264b8a2f" => :high_sierra
# end</pre>
#
# Only formulae where the upstream URL breaks or moves frequently, require compiling
@ -2452,7 +2452,7 @@ class Formula
# <pre># Optional and enforce that boost is built with `--with-c++11`.
# depends_on "boost" => [:optional, "with-c++11"]</pre>
# <pre># If a dependency is only needed in certain cases:
# depends_on "sqlite" if MacOS.version == :mavericks
# depends_on "sqlite" if MacOS.version == :catalina
# depends_on :xcode # If the formula really needs full Xcode.
# depends_on :macos => :mojave # Needs at least macOS Mojave (10.14).
# depends_on :x11 => :optional # X11/XQuartz components.

View File

@ -12,13 +12,10 @@ module OS
sierra: "10.12",
el_capitan: "10.11",
yosemite: "10.10",
mavericks: "10.9",
}.freeze
def self.from_symbol(sym)
str = SYMBOLS.fetch(sym) do
raise ArgumentError, "unknown version #{sym.inspect}"
end
str = SYMBOLS.fetch(sym) { raise MacOSVersionError, sym }
new(str)
end

View File

@ -287,13 +287,7 @@ module OS
end
def detect_clang_version
path = if MacOS.version >= :mavericks
"#{PKG_PATH}/usr/bin/clang"
else
"/usr/bin/clang"
end
version_output = Utils.popen_read("#{path} --version")
version_output = Utils.popen_read("#{PKG_PATH}/usr/bin/clang --version")
version_output[/clang-(\d+\.\d+\.\d+(\.\d+)?)/, 1]
end

View File

@ -8,10 +8,16 @@ class MacOSRequirement < Requirement
attr_reader :comparator, :version
def initialize(tags = [], comparator: ">=")
if comparator == "==" && tags.first.respond_to?(:map)
@version = tags.shift.map { |s| MacOS::Version.from_symbol(s) }
else
@version = MacOS::Version.from_symbol(tags.shift) unless tags.empty?
begin
@version = if comparator == "==" && tags.first.respond_to?(:map)
tags.shift.map { |s| MacOS::Version.from_symbol(s) }
else
MacOS::Version.from_symbol(tags.shift) unless tags.empty?
end
rescue MacOSVersionError => e
raise if e.version != :mavericks
odeprecated "depends_on :macos => :mavericks"
end
@comparator = comparator

View File

@ -386,7 +386,7 @@ class BottleSpecification
# Sort non-MacOS tags below MacOS tags.
OS::Mac::Version.from_symbol tag
rescue ArgumentError
rescue MacOSVersionError
"0.#{tag}"
end
checksums = {}

View File

@ -46,7 +46,7 @@ describe SoftwareSpec do
it "raises an error if passing invalid OS versions" do
expect {
spec.uses_from_macos("foo", since: :bar)
}.to raise_error(ArgumentError, "unknown version :bar")
}.to raise_error(MacOSVersionError, "unknown or unsupported macOS version: :bar")
end
end
end

View File

@ -4,13 +4,13 @@ require "version"
require "os/mac/version"
describe OS::Mac::Version do
subject { described_class.new("10.10") }
subject { described_class.new("10.14") }
specify "comparison with Symbol" do
expect(subject).to be > :mavericks
expect(subject).to be == :yosemite
expect(subject).to be === :yosemite # rubocop:disable Style/CaseEquality
expect(subject).to be < :el_capitan
expect(subject).to be > :high_sierra
expect(subject).to be == :mojave
expect(subject).to be === :mojave # rubocop:disable Style/CaseEquality
expect(subject).to be < :catalina
end
specify "comparison with Fixnum" do
@ -19,28 +19,28 @@ describe OS::Mac::Version do
end
specify "comparison with Float" do
expect(subject).to be > 10.9
expect(subject).to be < 10.11
expect(subject).to be > 10.13
expect(subject).to be < 10.15
end
specify "comparison with String" do
expect(subject).to be > "10.9"
expect(subject).to be == "10.10"
expect(subject).to be === "10.10" # rubocop:disable Style/CaseEquality
expect(subject).to be < "10.11"
expect(subject).to be > "10.3"
expect(subject).to be == "10.14"
expect(subject).to be === "10.14" # rubocop:disable Style/CaseEquality
expect(subject).to be < "10.15"
end
specify "comparison with Version" do
expect(subject).to be > Version.create("10.9")
expect(subject).to be == Version.create("10.10")
expect(subject).to be === Version.create("10.10") # rubocop:disable Style/CaseEquality
expect(subject).to be < Version.create("10.11")
expect(subject).to be > Version.create("10.3")
expect(subject).to be == Version.create("10.14")
expect(subject).to be === Version.create("10.14") # rubocop:disable Style/CaseEquality
expect(subject).to be < Version.create("10.15")
end
specify "#from_symbol" do
expect(described_class.from_symbol(:yosemite)).to eq(subject)
expect(described_class.from_symbol(:mojave)).to eq(subject)
expect { described_class.from_symbol(:foo) }
.to raise_error(ArgumentError)
.to raise_error(MacOSVersionError, "unknown or unsupported macOS version: :foo")
end
specify "#pretty_name" do

View File

@ -16,8 +16,8 @@ describe MacOSRequirement do
end
it "supports maximum versions", :needs_macos do
requirement = described_class.new([:mavericks], comparator: "<=")
expect(requirement.satisfied?).to eq MacOS.version <= :mavericks
requirement = described_class.new([:catalina], comparator: "<=")
expect(requirement.satisfied?).to eq MacOS.version <= :catalina
end
end
end

View File

@ -1,12 +1,14 @@
cask 'invalid-depends-on-macos-conflicting-forms' do
version '1.2.3'
sha256 '67cdb8a02803ef37fdbf7e0be205863172e41a561ca446cd84f0d7ab35a99d94'
# frozen_string_literal: true
cask "invalid-depends-on-macos-conflicting-forms" do
version "1.2.3"
sha256 "67cdb8a02803ef37fdbf7e0be205863172e41a561ca446cd84f0d7ab35a99d94"
url "file://#{TEST_FIXTURE_DIR}/cask/caffeine.zip"
homepage 'https://brew.sh/invalid-depends-on-macos-conflicting-forms'
homepage "https://brew.sh/invalid-depends-on-macos-conflicting-forms"
depends_on macos: :yosemite
depends_on macos: '>= :mavericks'
depends_on macos: :catalina
depends_on macos: ">= :mojave"
app 'Caffeine.app'
app "Caffeine.app"
end

View File

@ -1,12 +1,14 @@
cask 'with-depends-on-macos-array' do
version '1.2.3'
sha256 '67cdb8a02803ef37fdbf7e0be205863172e41a561ca446cd84f0d7ab35a99d94'
# frozen_string_literal: true
cask "with-depends-on-macos-array" do
version "1.2.3"
sha256 "67cdb8a02803ef37fdbf7e0be205863172e41a561ca446cd84f0d7ab35a99d94"
url "file://#{TEST_FIXTURE_DIR}/cask/caffeine.zip"
homepage 'https://brew.sh/with-depends-on-macos-array'
homepage "https://brew.sh/with-depends-on-macos-array"
# since all OS releases are included, this should always pass
depends_on macos: [:mavericks, :sierra, MacOS.version.to_sym]
depends_on macos: [:catalina, MacOS.version.to_sym]
app 'Caffeine.app'
app "Caffeine.app"
end

View File

@ -1,11 +1,13 @@
cask 'with-depends-on-macos-comparison' do
version '1.2.3'
sha256 '67cdb8a02803ef37fdbf7e0be205863172e41a561ca446cd84f0d7ab35a99d94'
# frozen_string_literal: true
cask "with-depends-on-macos-comparison" do
version "1.2.3"
sha256 "67cdb8a02803ef37fdbf7e0be205863172e41a561ca446cd84f0d7ab35a99d94"
url "file://#{TEST_FIXTURE_DIR}/cask/caffeine.zip"
homepage 'https://brew.sh/with-depends-on-macos-comparison'
homepage "https://brew.sh/with-depends-on-macos-comparison"
depends_on macos: '>= :mavericks'
depends_on macos: ">= :catalina"
app 'Caffeine.app'
app "Caffeine.app"
end

View File

@ -6,7 +6,7 @@ cask 'with-depends-on-macos-failure' do
homepage 'https://brew.sh/with-depends-on-macos-failure'
# guarantee a mismatched release
depends_on macos: MacOS.version == :mavericks ? :sierra : :mavericks
depends_on macos: MacOS.version == :catalina ? :mojave : :catalina
app 'Caffeine.app'
end

View File

@ -4,9 +4,9 @@ require "utils/bottles"
describe Utils::Bottles do
describe "#tag", :needs_macos do
it "returns :mavericks on Mavericks" do
allow(MacOS).to receive(:version).and_return(MacOS::Version.new("10.9"))
expect(described_class.tag).to eq(:mavericks)
it "returns :catalina on Catalina" do
allow(MacOS).to receive(:version).and_return(MacOS::Version.new("10.15"))
expect(described_class.tag).to eq(:catalina)
end
end
end

View File

@ -5,9 +5,9 @@ require "utils/bottles"
describe Utils::Bottles::Collector do
describe "#fetch_checksum_for" do
it "returns passed tags" do
subject[:yosemite] = "foo"
subject[:el_captain] = "bar"
expect(subject.fetch_checksum_for(:el_captain)).to eq(["bar", :el_captain])
subject[:mojave] = "foo"
subject[:catalina] = "bar"
expect(subject.fetch_checksum_for(:catalina)).to eq(["bar", :catalina])
end
it "returns nil if empty" do
@ -15,31 +15,31 @@ describe Utils::Bottles::Collector do
end
it "returns nil when there is no match" do
subject[:yosemite] = "foo"
subject[:catalina] = "foo"
expect(subject.fetch_checksum_for(:foo)).to be nil
end
it "uses older tags when needed", :needs_macos do
subject[:mavericks] = "foo"
expect(subject.send(:find_matching_tag, :mavericks)).to eq(:mavericks)
expect(subject.send(:find_matching_tag, :yosemite)).to eq(:mavericks)
subject[:mojave] = "foo"
expect(subject.send(:find_matching_tag, :mojave)).to eq(:mojave)
expect(subject.send(:find_matching_tag, :catalina)).to eq(:mojave)
end
it "does not use older tags when requested not to", :needs_macos do
allow(Homebrew::EnvConfig).to receive(:developer?).and_return(true)
allow(Homebrew::EnvConfig).to receive(:skip_or_later_bottles?).and_return(true)
allow(OS::Mac).to receive(:prerelease?).and_return(true)
subject[:mavericks] = "foo"
expect(subject.send(:find_matching_tag, :mavericks)).to eq(:mavericks)
expect(subject.send(:find_matching_tag, :yosemite)).to be_nil
subject[:mojave] = "foo"
expect(subject.send(:find_matching_tag, :mojave)).to eq(:mojave)
expect(subject.send(:find_matching_tag, :catalina)).to be_nil
end
it "ignores HOMEBREW_SKIP_OR_LATER_BOTTLES on release versions", :needs_macos do
allow(Homebrew::EnvConfig).to receive(:skip_or_later_bottles?).and_return(true)
allow(OS::Mac).to receive(:prerelease?).and_return(false)
subject[:mavericks] = "foo"
expect(subject.send(:find_matching_tag, :mavericks)).to eq(:mavericks)
expect(subject.send(:find_matching_tag, :yosemite)).to eq(:mavericks)
subject[:mojave] = "foo"
expect(subject.send(:find_matching_tag, :mojave)).to eq(:mojave)
expect(subject.send(:find_matching_tag, :catalina)).to eq(:mojave)
end
end
end

View File

@ -11,7 +11,7 @@ A *formula* is a package definition written in Ruby. It can be created with `bre
| **opt prefix** | A symlink to the active version of a **Keg** | `/usr/local/opt/foo ` |
| **Cellar** | All **Kegs** are installed here | `/usr/local/Cellar` |
| **Tap** | A Git repository of **Formulae** and/or commands | `/usr/local/Homebrew/Library/Taps/homebrew/homebrew-core` |
| **Bottle** | Pre-built **Keg** used instead of building from source | `qt-4.8.4.mavericks.bottle.tar.gz` |
| **Bottle** | Pre-built **Keg** used instead of building from source | `qt-4.8.4.catalina.bottle.tar.gz` |
| **Cask** | An [extension of Homebrew](https://github.com/Homebrew/homebrew-cask) to install macOS native apps | `/Applications/MacDown.app/Contents/SharedSupport/bin/macdown` |
| **Brew Bundle**| An [extension of Homebrew](https://github.com/Homebrew/homebrew-bundle) to describe dependencies | `brew 'myservice', restart_service: true` |