diff --git a/Library/Homebrew/extend/os/linux/resource.rb b/Library/Homebrew/extend/os/linux/resource.rb new file mode 100644 index 0000000000..a5af426c05 --- /dev/null +++ b/Library/Homebrew/extend/os/linux/resource.rb @@ -0,0 +1,9 @@ +# frozen_string_literal: true + +class Resource + undef on_linux + + def on_linux(&_block) + yield + end +end diff --git a/Library/Homebrew/extend/os/mac/resource.rb b/Library/Homebrew/extend/os/mac/resource.rb new file mode 100644 index 0000000000..2c53218564 --- /dev/null +++ b/Library/Homebrew/extend/os/mac/resource.rb @@ -0,0 +1,9 @@ +# frozen_string_literal: true + +class Resource + undef on_macos + + def on_macos(&_block) + yield + end +end diff --git a/Library/Homebrew/extend/os/resource.rb b/Library/Homebrew/extend/os/resource.rb new file mode 100644 index 0000000000..9ad337890c --- /dev/null +++ b/Library/Homebrew/extend/os/resource.rb @@ -0,0 +1,7 @@ +# frozen_string_literal: true + +if OS.mac? + require "extend/os/mac/resource" +elsif OS.linux? + require "extend/os/linux/resource" +end diff --git a/Library/Homebrew/formula.rb b/Library/Homebrew/formula.rb index 2a37b445dc..90448c1549 100644 --- a/Library/Homebrew/formula.rb +++ b/Library/Homebrew/formula.rb @@ -2474,13 +2474,13 @@ class Formula specs.each { |spec| spec.uses_from_macos(dep, bounds) } end - # Block executed only executed on macOS. No-op on Linux. + # Block only executed on macOS. No-op on Linux. #
on_macos do
     #   depends_on "mac_only_dep"
     # end
def on_macos(&_block); end - # Block executed only executed on Linux. No-op on macOS. + # Block only executed on Linux. No-op on macOS. #
on_linux do
     #   depends_on "linux_only_dep"
     # end
diff --git a/Library/Homebrew/resource.rb b/Library/Homebrew/resource.rb index 9053ac8b4d..4b00e4ea3a 100644 --- a/Library/Homebrew/resource.rb +++ b/Library/Homebrew/resource.rb @@ -178,6 +178,18 @@ class Resource patches << p end + # Block only executed on macOS. No-op on Linux. + #
on_macos do
+  #   url "mac_only_url"
+  # end
+ def on_macos(&_block); end + + # Block only executed on Linux. No-op on macOS. + #
on_linux do
+  #   url "linux_only_url"
+  # end
+ def on_linux(&_block); end + protected def mktemp(prefix) @@ -252,3 +264,5 @@ class ResourceStageContext "<#{self.class}: resource=#{resource} staging=#{staging}>" end end + +require "extend/os/resource" diff --git a/Library/Homebrew/test/os/linux/formula_spec.rb b/Library/Homebrew/test/os/linux/formula_spec.rb index cd79ce48ba..159a0838ba 100644 --- a/Library/Homebrew/test/os/linux/formula_spec.rb +++ b/Library/Homebrew/test/os/linux/formula_spec.rb @@ -33,26 +33,6 @@ describe Formula do 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 @@ -87,27 +67,38 @@ describe Formula do sha256 TEST_SHA256 patch do - url "patch_both" - end - - on_macos do - patch do + on_macos do url "patch_macos" end - end - on_linux do - patch do + on_linux do url "patch_linux" end end end - expect(f.patchlist.length).to eq(2) + expect(f.patchlist.length).to eq(1) 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") + expect(f.patchlist.first.url).to eq("patch_linux") + end + end + + describe "#on_linux" do + it "uses on_linux within a resource block" do + f = formula do + homepage "https://brew.sh" + + url "https://brew.sh/test-0.1.tbz" + sha256 TEST_SHA256 + + resource "test_resource" do + on_linux do + url "on_linux" + end + end + end + expect(f.resources.length).to eq(1) + expect(f.resources.first.url).to eq("on_linux") end end end diff --git a/Library/Homebrew/test/os/mac/formula_spec.rb b/Library/Homebrew/test/os/mac/formula_spec.rb index c966aef3d0..4fb4400c7f 100644 --- a/Library/Homebrew/test/os/mac/formula_spec.rb +++ b/Library/Homebrew/test/os/mac/formula_spec.rb @@ -40,26 +40,6 @@ describe Formula do end end - 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 @@ -86,7 +66,7 @@ describe Formula do end describe "#on_macos" do - it "adds a patch on macos only" do + it "adds a patch on Mac only" do f = formula do homepage "https://brew.sh" @@ -94,27 +74,38 @@ describe Formula do sha256 TEST_SHA256 patch do - url "patch_both" - end - - on_macos do - patch do + on_macos do url "patch_macos" end - end - on_linux do - patch do + on_linux do url "patch_linux" end end end - expect(f.patchlist.length).to eq(2) + expect(f.patchlist.length).to eq(1) 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") + expect(f.patchlist.first.url).to eq("patch_macos") + end + end + + describe "#on_macos" do + it "uses on_macos within a resource block" do + f = formula do + homepage "https://brew.sh" + + url "https://brew.sh/test-0.1.tbz" + sha256 TEST_SHA256 + + resource "test_resource" do + on_macos do + url "resource_macos" + end + end + end + expect(f.resources.length).to eq(1) + expect(f.resources.first.url).to eq("resource_macos") end end end