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
|
||||
# frozen_string_literal: true
|
||||
|
||||
# This logic will need to be more nuanced if this file includes more than `uses_from_macos`.
|
||||
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
|
||||
require "extend/os/linux/software_spec" if OS.linux?
|
||||
|
@ -162,12 +162,25 @@ class SoftwareSpec
|
||||
add_dep_option(dep) if dep
|
||||
end
|
||||
|
||||
def uses_from_macos(spec, _bounds = {})
|
||||
spec = [spec.dup.shift].to_h if spec.is_a?(Hash)
|
||||
def uses_from_macos(deps, bounds = {})
|
||||
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
|
||||
|
||||
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
|
||||
|
||||
describe "#uses_from_macos" do
|
||||
it "allows specifying dependencies", :needs_linux do
|
||||
describe "#uses_from_macos", :needs_linux do
|
||||
context "when running on Linux", :needs_linux do
|
||||
it "allows specifying dependencies" do
|
||||
spec.uses_from_macos("foo")
|
||||
|
||||
expect(spec.deps.first.name).to eq("foo")
|
||||
end
|
||||
|
||||
it "works with tags", :needs_linux do
|
||||
it "works with tags" do
|
||||
spec.uses_from_macos("foo" => :build)
|
||||
|
||||
expect(spec.deps.first.name).to eq("foo")
|
||||
expect(spec.deps.first.tags).to include(:build)
|
||||
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("bar" => :build, :since => :mojave)
|
||||
|
||||
@ -159,6 +160,50 @@ describe SoftwareSpec do
|
||||
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
|
||||
spec.option("with-foo", "blah")
|
||||
spec.depends_on("foo" => :optional)
|
||||
|
Loading…
x
Reference in New Issue
Block a user