From 99447bb1c02110782ae2f2beaa4122a9de2649dc Mon Sep 17 00:00:00 2001 From: Rylan Polster Date: Wed, 29 Jun 2022 17:48:21 -0400 Subject: [PATCH] `OnSystem`: provide `::MacOSAndLinux` and `::MacOSOnly` --- Library/Homebrew/cask/dsl.rb | 2 +- Library/Homebrew/extend/on_system.rb | 34 +++++++++++++++++++++++++++- Library/Homebrew/formula.rb | 4 ++-- Library/Homebrew/resource.rb | 2 +- Library/Homebrew/software_spec.rb | 4 ++-- 5 files changed, 39 insertions(+), 7 deletions(-) diff --git a/Library/Homebrew/cask/dsl.rb b/Library/Homebrew/cask/dsl.rb index 6367141d8c..d4d06da622 100644 --- a/Library/Homebrew/cask/dsl.rb +++ b/Library/Homebrew/cask/dsl.rb @@ -92,7 +92,7 @@ module Cask ]).freeze extend Predicable - include OnSystem + include OnSystem::MacOSOnly attr_reader :cask, :token diff --git a/Library/Homebrew/extend/on_system.rb b/Library/Homebrew/extend/on_system.rb index 01e489b0f4..ac8e10a7b1 100644 --- a/Library/Homebrew/extend/on_system.rb +++ b/Library/Homebrew/extend/on_system.rb @@ -56,7 +56,7 @@ module OnSystem end sig { params(base: Class).void } - def self.included(base) + def setup_arch_methods(base) ARCH_OPTIONS.each do |arch| base.define_method("on_#{arch}") do |&block| @on_system_blocks_exist = true @@ -70,7 +70,10 @@ module OnSystem result end end + end + sig { params(base: Class).void } + def setup_base_os_methods(base) BASE_OS_OPTIONS.each do |base_os| base.define_method("on_#{base_os}") do |&block| @on_system_blocks_exist = true @@ -84,7 +87,10 @@ module OnSystem result end end + end + sig { params(base: Class).void } + def setup_macos_methods(base) MacOSVersions::SYMBOLS.each_key do |os_name| base.define_method("on_#{os_name}") do |or_condition = nil, &block| @on_system_blocks_exist = true @@ -100,4 +106,30 @@ module OnSystem end end end + + sig { params(_base: Class).void } + def self.included(_base) + raise "Do not include `OnSystem` directly. Instead, include `OnSystem::MacOSAndLinux` or `OnSystem::MacOSOnly`" + end + + module MacOSAndLinux + extend T::Sig + + sig { params(base: Class).void } + def self.included(base) + OnSystem.setup_arch_methods(base) + OnSystem.setup_base_os_methods(base) + OnSystem.setup_macos_methods(base) + end + end + + module MacOSOnly + extend T::Sig + + sig { params(base: Class).void } + def self.included(base) + OnSystem.setup_arch_methods(base) + OnSystem.setup_macos_methods(base) + end + end end diff --git a/Library/Homebrew/formula.rb b/Library/Homebrew/formula.rb index 09ede72647..17488e0ed1 100644 --- a/Library/Homebrew/formula.rb +++ b/Library/Homebrew/formula.rb @@ -64,7 +64,7 @@ class Formula include Utils::Shebang include Utils::Shell include Context - include OnSystem + include OnSystem::MacOSAndLinux extend Forwardable extend Cachable extend Predicable @@ -2470,7 +2470,7 @@ class Formula # The methods below define the formula DSL. class << self include BuildEnvironment::DSL - include OnSystem + include OnSystem::MacOSAndLinux def method_added(method) super diff --git a/Library/Homebrew/resource.rb b/Library/Homebrew/resource.rb index 9d407c5aab..cc1fbb6539 100644 --- a/Library/Homebrew/resource.rb +++ b/Library/Homebrew/resource.rb @@ -17,7 +17,7 @@ class Resource include Context include FileUtils - include OnSystem + include OnSystem::MacOSAndLinux attr_reader :mirrors, :specs, :using, :source_modified_time, :patches, :owner attr_writer :version diff --git a/Library/Homebrew/software_spec.rb b/Library/Homebrew/software_spec.rb index 2e01b28115..dc7fdfbfa4 100644 --- a/Library/Homebrew/software_spec.rb +++ b/Library/Homebrew/software_spec.rb @@ -18,7 +18,7 @@ class SoftwareSpec extend T::Sig extend Forwardable - include OnSystem + include OnSystem::MacOSAndLinux PREDEFINED_OPTIONS = { universal: Option.new("universal", "Build a universal binary"), @@ -583,7 +583,7 @@ class BottleSpecification end class PourBottleCheck - include OnSystem + include OnSystem::MacOSAndLinux def initialize(formula) @formula = formula