diff --git a/Library/Homebrew/extend/os/linux/formula.rb b/Library/Homebrew/extend/os/linux/formula.rb index 6b96d548c0..fdcecb20d2 100644 --- a/Library/Homebrew/extend/os/linux/formula.rb +++ b/Library/Homebrew/extend/os/linux/formula.rb @@ -2,6 +2,14 @@ # frozen_string_literal: true class Formula + undef on_linux + + def on_linux(&_block) + raise "No block content defined for on_linux block" unless block_given? + + yield + end + undef shared_library def shared_library(name, version = nil) @@ -12,6 +20,8 @@ class Formula undef on_linux def on_linux(&_block) + raise "No block content defined for on_linux block" unless block_given? + yield end diff --git a/Library/Homebrew/extend/os/mac/formula.rb b/Library/Homebrew/extend/os/mac/formula.rb index b9fbaf8242..3834f8c040 100644 --- a/Library/Homebrew/extend/os/mac/formula.rb +++ b/Library/Homebrew/extend/os/mac/formula.rb @@ -2,10 +2,20 @@ # frozen_string_literal: true class Formula + undef on_macos + + def on_macos(&_block) + raise "No block content defined for on_macos block" unless block_given? + + yield + end + class << self undef on_macos def on_macos(&_block) + raise "No block content defined for on_macos block" unless block_given? + yield end end diff --git a/Library/Homebrew/formula.rb b/Library/Homebrew/formula.rb index 6812b905f4..e23d649c81 100644 --- a/Library/Homebrew/formula.rb +++ b/Library/Homebrew/formula.rb @@ -1366,6 +1366,22 @@ class Formula "#" end + # Block only executed on macOS. No-op on Linux. + #
on_macos do
+  #   Do something mac specific
+  # end
+ def on_macos(&_block) + raise "No block content defined for on_macos block" unless block_given? + end + + # Block only executed on Linux. No-op on macOS. + #
on_linux do
+  #   Do something linux specific
+  # end
+ def on_linux(&_block) + raise "No block content defined for on_linux block" unless block_given? + end + # Standard parameters for cargo builds. def std_cargo_args ["--locked", "--root", prefix, "--path", "."] @@ -2512,13 +2528,17 @@ class Formula #
on_macos do
     #   depends_on "mac_only_dep"
     # end
- def on_macos(&_block); end + def on_macos(&_block) + raise "No block content defined for on_macos block" unless block_given? + end # Block only executed on Linux. No-op on macOS. #
on_linux do
     #   depends_on "linux_only_dep"
     # end
- def on_linux(&_block); end + def on_linux(&_block) + raise "No block content defined for on_linux block" unless block_given? + end # @!attribute [w] option # Options can be used as arguments to `brew install`. diff --git a/Library/Homebrew/test/formula_spec.rb b/Library/Homebrew/test/formula_spec.rb index 453fb312d2..9d9997dbd2 100644 --- a/Library/Homebrew/test/formula_spec.rb +++ b/Library/Homebrew/test/formula_spec.rb @@ -1363,4 +1363,50 @@ describe Formula do expect(f.any_installed_version).to eq(PkgVersion.parse("1.0_1")) end end + + describe "#on_macos", :needs_macos do + let(:f) do + Class.new(Testball) do + @test = 0 + attr_reader :test + + def install + on_macos do + @test = 1 + end + on_linux do + @test = 2 + end + end + end.new + end + + it "only calls code within on_macos" do + f.brew { f.install } + expect(f.test).to eq(1) + end + end + + describe "#on_linux", :needs_linux do + let(:f) do + Class.new(Testball) do + @test = 0 + attr_reader :test + + def install + on_macos do + @test = 1 + end + on_linux do + @test = 2 + end + end + end.new + end + + it "only calls code within on_linux" do + f.brew { f.install } + expect(f.test).to eq(2) + end + end end