Class: Requirement
- Inherits:
-
Object
- Object
- Requirement
- Extended by:
- BuildEnvironment::DSL
- Includes:
- Dependable
- Defined in:
- Library/Homebrew/requirement.rb
Overview
A base class for non-formula requirements needed by formulae. A “fatal” requirement is one that will fail the build if it is not present. By default, Requirements are non-fatal.
Direct Known Subclasses
ArchRequirement, JavaRequirement, LinuxRequirement, MacOSRequirement, MaximumMacOSRequirement, NonBinaryOsxfuseRequirement, OsxfuseRequirement, TuntapRequirement, UnsignedKextRequirement, X11Requirement, XcodeRequirement
Defined Under Namespace
Classes: Satisfier
Constant Summary
Constants included from Dependable
Class Attribute Summary collapse
-
.build ⇒ Object
readonly
Returns the value of attribute build.
-
.env_proc ⇒ Object
readonly
Returns the value of attribute env_proc.
Instance Attribute Summary collapse
-
#cask ⇒ Object
readonly
Returns the value of attribute cask.
-
#download ⇒ Object
readonly
Returns the value of attribute download.
-
#name ⇒ Object
readonly
Returns the value of attribute name.
-
#tags ⇒ Object
readonly
Returns the value of attribute tags.
Class Method Summary collapse
- .default_formula(_val = nil) ⇒ Object
- .env(*settings, &block) ⇒ Object
-
.expand(dependent, &block) ⇒ Object
Expand the requirements of dependent recursively, optionally yielding [dependent, req] pairs to allow callers to apply arbitrary filters to the list.
-
.prune ⇒ Object
Used to prune requirements when calling expand with a block.
- .prune?(dependent, req, &_block) ⇒ Boolean
- .satisfy(options = nil, &block) ⇒ Object
Instance Method Summary collapse
- #==(other) ⇒ Object (also: #eql?)
- #display_s ⇒ Object
- #env ⇒ Object
- #env_proc ⇒ Object
-
#fatal? ⇒ Boolean
Overriding #fatal? is unsupported.
- #hash ⇒ Object
-
#initialize(tags = []) ⇒ Requirement
constructor
A new instance of Requirement.
- #inspect ⇒ Object
-
#message ⇒ Object
The message to show when the requirement is not met.
-
#modify_build_environment ⇒ Object
Overriding #modify_build_environment is unsupported.
- #option_names ⇒ Object
-
#satisfied? ⇒ Boolean
Overriding #satisfied? is unsupported.
- #satisfied_result_parent ⇒ Object
Methods included from Dependable
#build?, #option_tags, #optional?, #options, #recommended?, #required?, #run?
Constructor Details
#initialize(tags = []) ⇒ Requirement
14 15 16 17 18 19 20 21 22 23 24 25 |
# File 'Library/Homebrew/requirement.rb', line 14 def initialize( = []) @cask ||= self.class.cask @download ||= self.class.download .each do |tag| next unless tag.is_a? Hash @cask ||= tag[:cask] @download ||= tag[:download] end = << :build if self.class.build @name ||= infer_name end |
Class Attribute Details
.build ⇒ Object (readonly)
Returns the value of attribute build
139 140 141 |
# File 'Library/Homebrew/requirement.rb', line 139 def build @build end |
.env_proc ⇒ Object (readonly)
Returns the value of attribute env_proc
139 140 141 |
# File 'Library/Homebrew/requirement.rb', line 139 def env_proc @env_proc end |
Instance Attribute Details
#cask ⇒ Object (readonly)
Returns the value of attribute cask
12 13 14 |
# File 'Library/Homebrew/requirement.rb', line 12 def cask @cask end |
#download ⇒ Object (readonly)
Returns the value of attribute download
12 13 14 |
# File 'Library/Homebrew/requirement.rb', line 12 def download @download end |
#name ⇒ Object (readonly)
Returns the value of attribute name
12 13 14 |
# File 'Library/Homebrew/requirement.rb', line 12 def name @name end |
#tags ⇒ Object (readonly)
Returns the value of attribute tags
12 13 14 |
# File 'Library/Homebrew/requirement.rb', line 12 def end |
Class Method Details
.default_formula(_val = nil) ⇒ Object
142 143 144 |
# File 'Library/Homebrew/requirement.rb', line 142 def default_formula(_val = nil) odeprecated "Requirement.default_formula" end |
.env(*settings, &block) ⇒ Object
152 153 154 155 156 157 158 |
# File 'Library/Homebrew/requirement.rb', line 152 def env(*settings, &block) if block_given? @env_proc = block else super end end |
.expand(dependent, &block) ⇒ Object
Expand the requirements of dependent recursively, optionally yielding
- dependent, req
-
pairs to allow callers to apply arbitrary filters to
the list. The default filter, which is applied when a block is not given, omits optionals and recommendeds based on what the dependent has asked for.
191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 |
# File 'Library/Homebrew/requirement.rb', line 191 def (dependent, &block) reqs = Requirements.new formulae = dependent.recursive_dependencies.map(&:to_formula) formulae.unshift(dependent) formulae.each do |f| f.requirements.each do |req| next if prune?(f, req, &block) reqs << req end end reqs end |
.prune ⇒ Object
Used to prune requirements when calling expand with a block.
218 219 220 |
# File 'Library/Homebrew/requirement.rb', line 218 def prune throw(:prune, true) end |
.prune?(dependent, req, &_block) ⇒ Boolean
207 208 209 210 211 212 213 214 215 |
# File 'Library/Homebrew/requirement.rb', line 207 def prune?(dependent, req, &_block) catch(:prune) do if block_given? yield dependent, req elsif req.optional? || req.recommended? prune unless dependent.build.with?(req) end end end |
.satisfy(options = nil, &block) ⇒ Object
146 147 148 149 150 |
# File 'Library/Homebrew/requirement.rb', line 146 def satisfy( = nil, &block) return @satisfied if .nil? && !block_given? = {} if .nil? @satisfied = Requirement::Satisfier.new(, &block) end |
Instance Method Details
#==(other) ⇒ Object Also known as: eql?
102 103 104 |
# File 'Library/Homebrew/requirement.rb', line 102 def ==(other) instance_of?(other.class) && name == other.name && == other. end |
#display_s ⇒ Object
115 116 117 |
# File 'Library/Homebrew/requirement.rb', line 115 def display_s name end |
#env ⇒ Object
94 95 96 |
# File 'Library/Homebrew/requirement.rb', line 94 def env self.class.env end |
#env_proc ⇒ Object
98 99 100 |
# File 'Library/Homebrew/requirement.rb', line 98 def env_proc self.class.env_proc end |
#fatal? ⇒ Boolean
Overriding #fatal? is unsupported. Pass a boolean to the fatal DSL method instead.
63 64 65 |
# File 'Library/Homebrew/requirement.rb', line 63 def fatal? self.class.fatal || false end |
#hash ⇒ Object
107 108 109 |
# File 'Library/Homebrew/requirement.rb', line 107 def hash name.hash ^ .hash end |
#inspect ⇒ Object
111 112 113 |
# File 'Library/Homebrew/requirement.rb', line 111 def inspect "#<#{self.class.name}: #{name.inspect} #{tags.inspect}>" end |
#message ⇒ Object
The message to show when the requirement is not met.
32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 |
# File 'Library/Homebrew/requirement.rb', line 32 def _, _, class_name = self.class.to_s.rpartition "::" s = "#{class_name} unsatisfied!\n" if cask s += <<~EOS You can install with Homebrew-Cask: brew cask install #{cask} EOS end if download s += <<~EOS You can download from: #{download} EOS end s end |
#modify_build_environment ⇒ Object
Overriding #modify_build_environment is unsupported. Pass a block to the env DSL method instead.
78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 |
# File 'Library/Homebrew/requirement.rb', line 78 def modify_build_environment satisfied? instance_eval(&env_proc) if env_proc # XXX If the satisfy block returns a Pathname, then make sure that it # remains available on the PATH. This makes requirements like # satisfy { which("executable") } # work, even under superenv where "executable" wouldn't normally be on the # PATH. parent = satisfied_result_parent return unless parent return if ["#{HOMEBREW_PREFIX}/bin", "#{HOMEBREW_PREFIX}/bin"].include?(parent.to_s) return if PATH.new(ENV["PATH"]).include?(parent.to_s) ENV.prepend_path("PATH", parent) end |
#option_names ⇒ Object
27 28 29 |
# File 'Library/Homebrew/requirement.rb', line 27 def option_names [name] end |
#satisfied? ⇒ Boolean
Overriding #satisfied? is unsupported. Pass a block or boolean to the satisfy DSL method instead.
53 54 55 56 57 58 59 |
# File 'Library/Homebrew/requirement.rb', line 53 def satisfied? satisfy = self.class.satisfy return true unless satisfy @satisfied_result = satisfy.yielder { |p| instance_eval(&p) } return false unless @satisfied_result true end |
#satisfied_result_parent ⇒ Object
67 68 69 70 71 72 73 74 |
# File 'Library/Homebrew/requirement.rb', line 67 def satisfied_result_parent return unless @satisfied_result.is_a?(Pathname) parent = @satisfied_result.resolved_path.parent if parent.to_s =~ %r{^#{Regexp.escape(HOMEBREW_CELLAR)}/([\[email protected]]+)/[^/]+/(s?bin)/?$} parent = HOMEBREW_PREFIX/"opt/#{Regexp.last_match(1)}/#{Regexp.last_match(2)}" end parent end |