Merge pull request #9439 from SeekingMeaning/os-specifiable

extend: add on_os (for on_macos/on_linux)
This commit is contained in:
Seeker 2020-12-08 08:38:03 -08:00 committed by GitHub
commit a0c0c4ea2a
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
12 changed files with 55 additions and 111 deletions

View File

@ -0,0 +1,22 @@
# typed: true
# frozen_string_literal: true
module OnOS
# Block only executed on macOS. No-op on Linux.
# <pre>on_macos do
# # Do something Mac-specific
# end</pre>
def on_macos(&block)
raise "No block content defined for on_macos block" unless block
end
# Block only executed on Linux. No-op on macOS.
# <pre>on_linux do
# # Do something Linux-specific
# end</pre>
def on_linux(&block)
raise "No block content defined for on_linux block" unless block
end
end
require "extend/os/on_os"

View File

@ -0,0 +1,5 @@
# typed: strict
module OnOS
include Kernel
end

View File

@ -1,8 +1,4 @@
# typed: strict
# frozen_string_literal: true
if OS.mac?
require "extend/os/mac/formula"
elsif OS.linux?
require "extend/os/linux/formula"
end
require "extend/os/linux/formula" if OS.linux?

View File

@ -2,14 +2,6 @@
# frozen_string_literal: true
class Formula
undef on_linux
def on_linux(&block)
raise "No block content defined for on_linux block" unless block
yield
end
undef shared_library
def shared_library(name, version = nil)
@ -17,14 +9,6 @@ class Formula
end
class << self
undef on_linux
def on_linux(&block)
raise "No block content defined for on_linux block" unless block
yield
end
undef ignore_missing_libraries
def ignore_missing_libraries(*libs)

View File

@ -0,0 +1,10 @@
# typed: true
# frozen_string_literal: true
module OnOS
def on_linux(&block)
raise "No block content defined for on_linux block" unless block
yield
end
end

View File

@ -1,10 +0,0 @@
# typed: true
# frozen_string_literal: true
class Resource
undef on_linux
def on_linux(&_block)
yield
end
end

View File

@ -1,22 +0,0 @@
# typed: true
# frozen_string_literal: true
class Formula
undef on_macos
def on_macos(&block)
raise "No block content defined for on_macos block" unless block
yield
end
class << self
undef on_macos
def on_macos(&block)
raise "No block content defined for on_macos block" unless block
yield
end
end
end

View File

@ -0,0 +1,10 @@
# typed: true
# frozen_string_literal: true
module OnOS
def on_macos(&block)
raise "No block content defined for on_macos block" unless block
yield
end
end

View File

@ -1,10 +0,0 @@
# typed: true
# frozen_string_literal: true
class Resource
undef on_macos
def on_macos(&_block)
yield
end
end

View File

@ -2,7 +2,7 @@
# frozen_string_literal: true
if OS.mac?
require "extend/os/mac/resource"
require "extend/os/mac/on_os"
elsif OS.linux?
require "extend/os/linux/resource"
require "extend/os/linux/on_os"
end

View File

@ -25,6 +25,7 @@ require "tab"
require "mktemp"
require "find"
require "utils/spdx"
require "extend/on_os"
# A formula provides instructions and metadata for Homebrew to install a piece
# of software. Every Homebrew formula is a {Formula}.
@ -59,6 +60,7 @@ class Formula
include Utils::Shebang
include Utils::Shell
include Context
include OnOS
extend Enumerable
extend Forwardable
extend Cachable
@ -1389,22 +1391,6 @@ class Formula
"#<Formula #{name} (#{active_spec_sym}) #{path}>"
end
# Block only executed on macOS. No-op on Linux.
# <pre>on_macos do
# # Do something Mac-specific
# end</pre>
def on_macos(&block)
raise "No block content defined for on_macos block" unless block
end
# Block only executed on Linux. No-op on macOS.
# <pre>on_linux do
# # Do something Linux-specific
# end</pre>
def on_linux(&block)
raise "No block content defined for on_linux block" unless block
end
# Standard parameters for cargo builds.
def std_cargo_args
["--locked", "--root", prefix, "--path", "."]
@ -2238,6 +2224,7 @@ class Formula
# The methods below define the formula DSL.
class << self
include BuildEnvironment::DSL
include OnOS
def method_added(method)
super
@ -2557,22 +2544,6 @@ class Formula
specs.each { |spec| spec.uses_from_macos(dep, bounds) }
end
# Block only executed on macOS. No-op on Linux.
# <pre>on_macos do
# depends_on "mac_only_dep"
# end</pre>
def on_macos(&block)
raise "No block content defined for on_macos block" unless block
end
# Block only executed on Linux. No-op on macOS.
# <pre>on_linux do
# depends_on "linux_only_dep"
# end</pre>
def on_linux(&block)
raise "No block content defined for on_linux block" unless block
end
# @!attribute [w] option
# Options can be used as arguments to `brew install`.
# To switch features on/off: `"with-something"` or `"with-otherthing"`.

View File

@ -5,6 +5,7 @@ require "download_strategy"
require "checksum"
require "version"
require "mktemp"
require "extend/on_os"
# Resource is the fundamental representation of an external resource. The
# primary formula download, along with other declared resources, are instances
@ -16,6 +17,7 @@ class Resource
include Context
include FileUtils
include OnOS
attr_reader :mirrors, :specs, :using, :source_modified_time, :patches, :owner
attr_writer :version
@ -189,18 +191,6 @@ class Resource
patches << p
end
# Block only executed on macOS. No-op on Linux.
# <pre>on_macos do
# url "mac_only_url"
# end</pre>
def on_macos(&_block); end
# Block only executed on Linux. No-op on macOS.
# <pre>on_linux do
# url "linux_only_url"
# end</pre>
def on_linux(&_block); end
protected
def mktemp(prefix, &block)
@ -280,5 +270,3 @@ class ResourceStageContext
"<#{self.class}: resource=#{resource} staging=#{staging}>"
end
end
require "extend/os/resource"