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..1bb963731b 100644 --- a/Library/Homebrew/test/os/linux/formula_spec.rb +++ b/Library/Homebrew/test/os/linux/formula_spec.rb @@ -110,4 +110,23 @@ describe Formula do expect(f.patchlist.second.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..c885e916a7 100644 --- a/Library/Homebrew/test/os/mac/formula_spec.rb +++ b/Library/Homebrew/test/os/mac/formula_spec.rb @@ -117,4 +117,23 @@ describe Formula do expect(f.patchlist.second.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