Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

formula: add on_macos and on_linux #7257

Merged
merged 1 commit into from
Apr 13, 2020
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
7 changes: 7 additions & 0 deletions Library/Homebrew/extend/os/formula.rb
Original file line number Diff line number Diff line change
@@ -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
11 changes: 11 additions & 0 deletions Library/Homebrew/extend/os/linux/formula.rb
Original file line number Diff line number Diff line change
@@ -0,0 +1,11 @@
# frozen_string_literal: true

class Formula
class << self
undef on_linux

def on_linux(&_block)
yield
end
end
end
11 changes: 11 additions & 0 deletions Library/Homebrew/extend/os/mac/formula.rb
Original file line number Diff line number Diff line change
@@ -0,0 +1,11 @@
# frozen_string_literal: true

class Formula
class << self
undef on_macos

def on_macos(&_block)
yield
end
end
end
17 changes: 17 additions & 0 deletions Library/Homebrew/formula.rb
Original file line number Diff line number Diff line change
Expand Up @@ -2423,10 +2423,25 @@ def depends_on(dep)
specs.each { |spec| spec.depends_on(dep) }
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)
specs.each { |spec| spec.uses_from_macos(dep) }
end

iMichka marked this conversation as resolved.
Show resolved Hide resolved
# 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
# Options can be used as arguments to `brew install`.
# To switch features on/off: `"with-something"` or `"with-otherthing"`.
Expand Down Expand Up @@ -2657,3 +2672,5 @@ def link_overwrite_paths
end
end
end

require "extend/os/formula"
78 changes: 78 additions & 0 deletions Library/Homebrew/test/os/linux/formula_spec.rb
Original file line number Diff line number Diff line change
Expand Up @@ -20,4 +20,82 @@
expect(f.class.head.deps.first.name).to eq("foo")
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
83 changes: 83 additions & 0 deletions Library/Homebrew/test/os/mac/formula_spec.rb
Original file line number Diff line number Diff line change
@@ -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