formula: add linux and macos only function blocks

This commit is contained in:
Michka Popoff 2020-04-07 21:23:12 +02:00
parent 850a84ea1c
commit c7927f5af5
6 changed files with 207 additions and 0 deletions

View File

@ -0,0 +1,7 @@
# frozen_string_literal: true
if OS.mac?
require "extend/os/mac/formula"
elsif OS.linux?
require "extend/os/linux/formula"
end

View File

@ -0,0 +1,11 @@
# frozen_string_literal: true
class Formula
class << self
undef on_linux
def on_linux(&_block)
yield
end
end
end

View File

@ -0,0 +1,11 @@
# frozen_string_literal: true
class Formula
class << self
undef on_macos
def on_macos(&_block)
yield
end
end
end

View File

@ -2423,10 +2423,25 @@ class Formula
specs.each { |spec| spec.depends_on(dep) } specs.each { |spec| spec.depends_on(dep) }
end end
# Indicates use of dependencies provided by macOS.
# On macOS this is a no-op (as we use the system libraries there).
# On Linux this will act as `depends_on`.
def uses_from_macos(dep) def uses_from_macos(dep)
specs.each { |spec| spec.uses_from_macos(dep) } specs.each { |spec| spec.uses_from_macos(dep) }
end end
# Block executed only executed on macOS. No-op on Linux.
# <pre>on_macos do
# depends_on "mac_only_dep"
# end</pre>
def on_macos(&_block); end
# Block executed only executed on Linux. No-op on macOS.
# <pre>on_linux do
# depends_on "linux_only_dep"
# end</pre>
def on_linux(&_block); end
# @!attribute [w] option # @!attribute [w] option
# Options can be used as arguments to `brew install`. # Options can be used as arguments to `brew install`.
# To switch features on/off: `"with-something"` or `"with-otherthing"`. # To switch features on/off: `"with-something"` or `"with-otherthing"`.
@ -2657,3 +2672,5 @@ class Formula
end end
end end
end end
require "extend/os/formula"

View File

@ -20,4 +20,82 @@ describe Formula do
expect(f.class.head.deps.first.name).to eq("foo") expect(f.class.head.deps.first.name).to eq("foo")
end end
end end
describe "#on_linux" do
it "defines an url on Linux only" do
f = formula do
homepage "https://brew.sh"
on_macos do
url "https://brew.sh/test-macos-0.1.tbz"
sha256 TEST_SHA256
end
on_linux do
url "https://brew.sh/test-linux-0.1.tbz"
sha256 TEST_SHA256
end
end
expect(f.stable.url).to eq("https://brew.sh/test-linux-0.1.tbz")
end
end
describe "#on_linux" do
it "adds a dependency on Linux only" do
f = formula do
homepage "https://brew.sh"
url "https://brew.sh/test-0.1.tbz"
sha256 TEST_SHA256
depends_on "hello_both"
on_macos do
depends_on "hello_macos"
end
on_linux do
depends_on "hello_linux"
end
end
expect(f.class.stable.deps[0].name).to eq("hello_both")
expect(f.class.stable.deps[1].name).to eq("hello_linux")
expect(f.class.stable.deps[2]).to eq(nil)
end
end
describe "#on_linux" do
it "adds a patch on Linux only" do
f = formula do
homepage "https://brew.sh"
url "https://brew.sh/test-0.1.tbz"
sha256 TEST_SHA256
patch do
url "patch_both"
end
on_macos do
patch do
url "patch_macos"
end
end
on_linux do
patch do
url "patch_linux"
end
end
end
expect(f.patchlist.length).to eq(2)
expect(f.patchlist.first.strip).to eq(:p1)
expect(f.patchlist.first.url).to eq("patch_both")
expect(f.patchlist.second.strip).to eq(:p1)
expect(f.patchlist.second.url).to eq("patch_linux")
end
end
end end

View File

@ -0,0 +1,83 @@
# frozen_string_literal: true
require "formula"
describe Formula do
describe "#on_macos" do
it "defines an url on macos only" do
f = formula do
homepage "https://brew.sh"
on_macos do
url "https://brew.sh/test-macos-0.1.tbz"
sha256 TEST_SHA256
end
on_linux do
url "https://brew.sh/test-linux-0.1.tbz"
sha256 TEST_SHA256
end
end
expect(f.stable.url).to eq("https://brew.sh/test-macos-0.1.tbz")
end
end
describe "#on_macos" do
it "adds a dependency on macos only" do
f = formula do
homepage "https://brew.sh"
url "https://brew.sh/test-0.1.tbz"
sha256 TEST_SHA256
depends_on "hello_both"
on_macos do
depends_on "hello_macos"
end
on_linux do
depends_on "hello_linux"
end
end
expect(f.class.stable.deps[0].name).to eq("hello_both")
expect(f.class.stable.deps[1].name).to eq("hello_macos")
expect(f.class.stable.deps[2]).to eq(nil)
end
end
describe "#on_macos" do
it "adds a patch on macos only" do
f = formula do
homepage "https://brew.sh"
url "https://brew.sh/test-0.1.tbz"
sha256 TEST_SHA256
patch do
url "patch_both"
end
on_macos do
patch do
url "patch_macos"
end
end
on_linux do
patch do
url "patch_linux"
end
end
end
expect(f.patchlist.length).to eq(2)
expect(f.patchlist.first.strip).to eq(:p1)
expect(f.patchlist.first.url).to eq("patch_both")
expect(f.patchlist.second.strip).to eq(:p1)
expect(f.patchlist.second.url).to eq("patch_macos")
end
end
end