Use SimulateSystem
for uses_from_macos
deps
This commit is contained in:
parent
34a1bc6618
commit
91cf9f2ad8
@ -1,27 +0,0 @@
|
|||||||
# typed: true
|
|
||||||
# frozen_string_literal: true
|
|
||||||
|
|
||||||
# The Library/Homebrew/extend/os/software_spec.rb conditional logic will need to be more nuanced
|
|
||||||
# if this file ever includes more than `uses_from_macos`.
|
|
||||||
class SoftwareSpec
|
|
||||||
undef uses_from_macos
|
|
||||||
|
|
||||||
def uses_from_macos(deps, bounds = {})
|
|
||||||
if deps.is_a?(Hash)
|
|
||||||
bounds = deps.dup
|
|
||||||
deps = [bounds.shift].to_h
|
|
||||||
end
|
|
||||||
|
|
||||||
@uses_from_macos_elements << deps
|
|
||||||
|
|
||||||
bounds = bounds.transform_values { |v| MacOS::Version.from_symbol(v) }
|
|
||||||
|
|
||||||
# Linux simulating macOS. Assume oldest macOS version.
|
|
||||||
return if Homebrew::EnvConfig.simulate_macos_on_linux? && !bounds.key?(:since)
|
|
||||||
|
|
||||||
# macOS new enough for dependency to not be required.
|
|
||||||
return if MacOS.version >= bounds[:since]
|
|
||||||
|
|
||||||
depends_on deps
|
|
||||||
end
|
|
||||||
end
|
|
@ -1,9 +1,4 @@
|
|||||||
# typed: strict
|
# typed: strict
|
||||||
# frozen_string_literal: true
|
# frozen_string_literal: true
|
||||||
|
|
||||||
# This logic will need to be more nuanced if this file includes more than `uses_from_macos`.
|
require "extend/os/linux/software_spec" if OS.linux?
|
||||||
if OS.mac? || Homebrew::EnvConfig.simulate_macos_on_linux?
|
|
||||||
require "extend/os/mac/software_spec"
|
|
||||||
elsif OS.linux?
|
|
||||||
require "extend/os/linux/software_spec"
|
|
||||||
end
|
|
||||||
|
@ -162,12 +162,25 @@ class SoftwareSpec
|
|||||||
add_dep_option(dep) if dep
|
add_dep_option(dep) if dep
|
||||||
end
|
end
|
||||||
|
|
||||||
def uses_from_macos(spec, _bounds = {})
|
def uses_from_macos(deps, bounds = {})
|
||||||
spec = [spec.dup.shift].to_h if spec.is_a?(Hash)
|
if deps.is_a?(Hash)
|
||||||
|
bounds = deps.dup
|
||||||
|
deps = [bounds.shift].to_h
|
||||||
|
end
|
||||||
|
|
||||||
@uses_from_macos_elements << spec
|
@uses_from_macos_elements << deps
|
||||||
|
|
||||||
depends_on(spec)
|
# Linux simulating macOS. Assume oldest macOS version.
|
||||||
|
return if Homebrew::EnvConfig.simulate_macos_on_linux? && !bounds.key?(:since)
|
||||||
|
|
||||||
|
# macOS new enough for dependency to not be required.
|
||||||
|
if Homebrew::SimulateSystem.treat_as_macos?
|
||||||
|
current_os = MacOS::Version.from_symbol(Homebrew::SimulateSystem.current_os)
|
||||||
|
since_os = MacOS::Version.from_symbol(bounds[:since]) if bounds.key?(:since)
|
||||||
|
return if current_os >= since_os
|
||||||
|
end
|
||||||
|
|
||||||
|
depends_on deps
|
||||||
end
|
end
|
||||||
|
|
||||||
def uses_from_macos_names
|
def uses_from_macos_names
|
||||||
|
@ -1,51 +0,0 @@
|
|||||||
# typed: false
|
|
||||||
# frozen_string_literal: true
|
|
||||||
|
|
||||||
require "software_spec"
|
|
||||||
|
|
||||||
describe SoftwareSpec do
|
|
||||||
subject(:spec) { described_class.new }
|
|
||||||
|
|
||||||
describe "#uses_from_macos" do
|
|
||||||
before do
|
|
||||||
allow(OS).to receive(:mac?).and_return(true)
|
|
||||||
allow(OS::Mac).to receive(:version).and_return(OS::Mac::Version.from_symbol(:sierra))
|
|
||||||
end
|
|
||||||
|
|
||||||
it "adds a macOS dependency if the OS version meets requirements" do
|
|
||||||
spec.uses_from_macos("foo", since: :el_capitan)
|
|
||||||
|
|
||||||
expect(spec.deps).to be_empty
|
|
||||||
expect(spec.uses_from_macos_elements.first).to eq("foo")
|
|
||||||
end
|
|
||||||
|
|
||||||
it "doesn't add a macOS dependency if the OS version doesn't meet requirements" do
|
|
||||||
spec.uses_from_macos("foo", since: :high_sierra)
|
|
||||||
|
|
||||||
expect(spec.deps.first.name).to eq("foo")
|
|
||||||
expect(spec.uses_from_macos_elements).to eq(["foo"])
|
|
||||||
end
|
|
||||||
|
|
||||||
it "works with tags" do
|
|
||||||
spec.uses_from_macos("foo" => :build, :since => :high_sierra)
|
|
||||||
|
|
||||||
dep = spec.deps.first
|
|
||||||
|
|
||||||
expect(dep.name).to eq("foo")
|
|
||||||
expect(dep.tags).to include(:build)
|
|
||||||
end
|
|
||||||
|
|
||||||
it "doesn't add a dependency if no OS version is specified" do
|
|
||||||
spec.uses_from_macos("foo")
|
|
||||||
spec.uses_from_macos("bar" => :build)
|
|
||||||
|
|
||||||
expect(spec.deps).to be_empty
|
|
||||||
end
|
|
||||||
|
|
||||||
it "raises an error if passing invalid OS versions" do
|
|
||||||
expect {
|
|
||||||
spec.uses_from_macos("foo", since: :bar)
|
|
||||||
}.to raise_error(MacOSVersionError, "unknown or unsupported macOS version: :bar")
|
|
||||||
end
|
|
||||||
end
|
|
||||||
end
|
|
@ -135,21 +135,22 @@ describe SoftwareSpec do
|
|||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
describe "#uses_from_macos" do
|
describe "#uses_from_macos", :needs_linux do
|
||||||
it "allows specifying dependencies", :needs_linux do
|
context "when running on Linux", :needs_linux do
|
||||||
|
it "allows specifying dependencies" do
|
||||||
spec.uses_from_macos("foo")
|
spec.uses_from_macos("foo")
|
||||||
|
|
||||||
expect(spec.deps.first.name).to eq("foo")
|
expect(spec.deps.first.name).to eq("foo")
|
||||||
end
|
end
|
||||||
|
|
||||||
it "works with tags", :needs_linux do
|
it "works with tags" do
|
||||||
spec.uses_from_macos("foo" => :build)
|
spec.uses_from_macos("foo" => :build)
|
||||||
|
|
||||||
expect(spec.deps.first.name).to eq("foo")
|
expect(spec.deps.first.name).to eq("foo")
|
||||||
expect(spec.deps.first.tags).to include(:build)
|
expect(spec.deps.first.tags).to include(:build)
|
||||||
end
|
end
|
||||||
|
|
||||||
it "ignores OS version specifications", :needs_linux do
|
it "ignores OS version specifications" do
|
||||||
spec.uses_from_macos("foo", since: :mojave)
|
spec.uses_from_macos("foo", since: :mojave)
|
||||||
spec.uses_from_macos("bar" => :build, :since => :mojave)
|
spec.uses_from_macos("bar" => :build, :since => :mojave)
|
||||||
|
|
||||||
@ -159,6 +160,50 @@ describe SoftwareSpec do
|
|||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
|
context "when running on macOS", :needs_macos do
|
||||||
|
before do
|
||||||
|
allow(OS).to receive(:mac?).and_return(true)
|
||||||
|
allow(OS::Mac).to receive(:version).and_return(OS::Mac::Version.from_symbol(:sierra))
|
||||||
|
end
|
||||||
|
|
||||||
|
it "adds a macOS dependency if the OS version meets requirements" do
|
||||||
|
spec.uses_from_macos("foo", since: :el_capitan)
|
||||||
|
|
||||||
|
expect(spec.deps).to be_empty
|
||||||
|
expect(spec.uses_from_macos_elements.first).to eq("foo")
|
||||||
|
end
|
||||||
|
|
||||||
|
it "doesn't add a macOS dependency if the OS version doesn't meet requirements" do
|
||||||
|
spec.uses_from_macos("foo", since: :high_sierra)
|
||||||
|
|
||||||
|
expect(spec.deps.first.name).to eq("foo")
|
||||||
|
expect(spec.uses_from_macos_elements).to eq(["foo"])
|
||||||
|
end
|
||||||
|
|
||||||
|
it "works with tags" do
|
||||||
|
spec.uses_from_macos("foo" => :build, :since => :high_sierra)
|
||||||
|
|
||||||
|
dep = spec.deps.first
|
||||||
|
|
||||||
|
expect(dep.name).to eq("foo")
|
||||||
|
expect(dep.tags).to include(:build)
|
||||||
|
end
|
||||||
|
|
||||||
|
it "doesn't add a dependency if no OS version is specified" do
|
||||||
|
spec.uses_from_macos("foo")
|
||||||
|
spec.uses_from_macos("bar" => :build)
|
||||||
|
|
||||||
|
expect(spec.deps).to be_empty
|
||||||
|
end
|
||||||
|
|
||||||
|
it "raises an error if passing invalid OS versions" do
|
||||||
|
expect {
|
||||||
|
spec.uses_from_macos("foo", since: :bar)
|
||||||
|
}.to raise_error(MacOSVersionError, "unknown or unsupported macOS version: :bar")
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
specify "explicit options override defaupt depends_on option description" do
|
specify "explicit options override defaupt depends_on option description" do
|
||||||
spec.option("with-foo", "blah")
|
spec.option("with-foo", "blah")
|
||||||
spec.depends_on("foo" => :optional)
|
spec.depends_on("foo" => :optional)
|
||||||
|
Loading…
x
Reference in New Issue
Block a user