Class: SoftwareSpec
- Extended by:
- Forwardable
- Includes:
- Downloadable, OnSystem::MacOSAndLinux
- Defined in:
- software_spec.rb,
sorbet/rbi/dsl/software_spec.rbi
Direct Known Subclasses
Constant Summary collapse
- PREDEFINED_OPTIONS =
{ universal: Option.new("universal", "Build a universal binary"), cxx11: Option.new("c++11", "Build using C++11 mode"), }.freeze
Instance Attribute Summary collapse
-
#bottle_specification ⇒ Object
readonly
private
Returns the value of attribute bottle_specification.
-
#build ⇒ Object
readonly
private
Returns the value of attribute build.
-
#compiler_failures ⇒ Object
readonly
private
Returns the value of attribute compiler_failures.
-
#dependency_collector ⇒ Object
readonly
private
Returns the value of attribute dependency_collector.
-
#deprecated_flags ⇒ Object
readonly
private
Returns the value of attribute deprecated_flags.
-
#deprecated_options ⇒ Object
readonly
private
Returns the value of attribute deprecated_options.
-
#full_name ⇒ Object
readonly
private
Returns the value of attribute full_name.
-
#name ⇒ Object
readonly
private
Returns the value of attribute name.
-
#options ⇒ Object
readonly
private
Returns the value of attribute options.
-
#owner ⇒ Object
private
Returns the value of attribute owner.
-
#patches ⇒ Object
readonly
private
Returns the value of attribute patches.
-
#resources ⇒ Object
readonly
private
Returns the value of attribute resources.
Instance Method Summary collapse
- #add_dep_option(dep) ⇒ Object
- #bottle(&block) ⇒ Object
- #bottle_defined? ⇒ Boolean
- #bottle_tag?(tag = nil) ⇒ Boolean
- #bottled?(tag = nil) ⇒ Boolean
- #cached_download(*args, &block) ⇒ T.untyped private
- #checksum(*args, &block) ⇒ T.untyped private
- #clear_cache(*args, &block) ⇒ T.untyped private
- #declared_deps ⇒ Object
- #depends_on(spec) ⇒ Object
- #deprecated_option(hash) ⇒ Object
- #deps ⇒ Object
- #download_name(*args, &block) ⇒ T.untyped private
- #download_type ⇒ String private
- #downloader(*args, &block) ⇒ T.untyped private
- #fails_with(compiler, &block) ⇒ Object
- #fetch(*args, &block) ⇒ T.untyped private
- #freeze ⇒ Object
- #go_resource(name, &block) ⇒ Object
-
#initialize(flags: []) ⇒ SoftwareSpec
constructor
A new instance of SoftwareSpec.
- #initialize_dup(other) ⇒ Object
- #mirror(*args, &block) ⇒ T.untyped private
- #mirrors(*args, &block) ⇒ T.untyped private
- #needs(*standards) ⇒ Object
- #option(name, description = "") ⇒ Object
- #option_defined?(name) ⇒ Boolean
- #patch(strip = :p1, src = nil, &block) ⇒ Object
- #recursive_dependencies ⇒ Object
- #recursive_requirements ⇒ Object
- #requirements ⇒ Object
- #resource(name = T.unsafe(nil), klass = Resource, &block) ⇒ Resource? private
- #resource_defined?(name) ⇒ Boolean
- #sha256(*args, &block) ⇒ T.untyped private
- #source_modified_time(*args, &block) ⇒ T.untyped private
- #specs(*args, &block) ⇒ T.untyped private
- #stage(*args, &block) ⇒ T.untyped private
- #url(val = nil, specs = {}) ⇒ Object
- #uses_from_macos(dep, bounds = {}) ⇒ void private
- #using(*args, &block) ⇒ T.untyped private
- #verify_download_integrity(*args, &block) ⇒ T.untyped private
- #version(*args, &block) ⇒ T.untyped private
Methods included from OnSystem::MacOSAndLinux
Methods included from Downloadable
#download_strategy, #downloaded?
Methods included from Context
current, current=, #debug?, #quiet?, #verbose?, #with_context
Constructor Details
#initialize(flags: []) ⇒ SoftwareSpec
Returns a new instance of SoftwareSpec.
38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 |
# File 'software_spec.rb', line 38 def initialize(flags: []) super() # Ensure this is synced with `initialize_dup` and `freeze` (excluding simple objects like integers and booleans) @resource = Resource::Formula.new @resources = {} @dependency_collector = DependencyCollector.new @bottle_specification = BottleSpecification.new @patches = [] @options = Options.new @flags = flags @deprecated_flags = [] @deprecated_options = [] @build = BuildOptions.new(Options.create(@flags), ) @compiler_failures = [] end |
Instance Attribute Details
#bottle_specification ⇒ Object (readonly)
This method is part of a private API. This method may only be used in the Homebrew/brew repository. Third parties should avoid using this method if possible, as it may be removed or changed without warning.
Returns the value of attribute bottle_specification.
29 30 31 |
# File 'software_spec.rb', line 29 def bottle_specification @bottle_specification end |
#build ⇒ Object (readonly)
This method is part of a private API. This method may only be used in the Homebrew/brew repository. Third parties should avoid using this method if possible, as it may be removed or changed without warning.
Returns the value of attribute build.
29 30 31 |
# File 'software_spec.rb', line 29 def build @build end |
#compiler_failures ⇒ Object (readonly)
This method is part of a private API. This method may only be used in the Homebrew/brew repository. Third parties should avoid using this method if possible, as it may be removed or changed without warning.
Returns the value of attribute compiler_failures.
29 30 31 |
# File 'software_spec.rb', line 29 def compiler_failures @compiler_failures end |
#dependency_collector ⇒ Object (readonly)
This method is part of a private API. This method may only be used in the Homebrew/brew repository. Third parties should avoid using this method if possible, as it may be removed or changed without warning.
Returns the value of attribute dependency_collector.
29 30 31 |
# File 'software_spec.rb', line 29 def dependency_collector @dependency_collector end |
#deprecated_flags ⇒ Object (readonly)
This method is part of a private API. This method may only be used in the Homebrew/brew repository. Third parties should avoid using this method if possible, as it may be removed or changed without warning.
Returns the value of attribute deprecated_flags.
29 30 31 |
# File 'software_spec.rb', line 29 def deprecated_flags @deprecated_flags end |
#deprecated_options ⇒ Object (readonly)
This method is part of a private API. This method may only be used in the Homebrew/brew repository. Third parties should avoid using this method if possible, as it may be removed or changed without warning.
Returns the value of attribute deprecated_options.
29 30 31 |
# File 'software_spec.rb', line 29 def @deprecated_options end |
#full_name ⇒ Object (readonly)
This method is part of a private API. This method may only be used in the Homebrew/brew repository. Third parties should avoid using this method if possible, as it may be removed or changed without warning.
Returns the value of attribute full_name.
29 30 31 |
# File 'software_spec.rb', line 29 def full_name @full_name end |
#name ⇒ Object (readonly)
This method is part of a private API. This method may only be used in the Homebrew/brew repository. Third parties should avoid using this method if possible, as it may be removed or changed without warning.
Returns the value of attribute name.
29 30 31 |
# File 'software_spec.rb', line 29 def name @name end |
#options ⇒ Object (readonly)
This method is part of a private API. This method may only be used in the Homebrew/brew repository. Third parties should avoid using this method if possible, as it may be removed or changed without warning.
Returns the value of attribute options.
29 30 31 |
# File 'software_spec.rb', line 29 def @options end |
#owner ⇒ Object
This method is part of a private API. This method may only be used in the Homebrew/brew repository. Third parties should avoid using this method if possible, as it may be removed or changed without warning.
Returns the value of attribute owner.
29 30 31 |
# File 'software_spec.rb', line 29 def owner @owner end |
#patches ⇒ Object (readonly)
This method is part of a private API. This method may only be used in the Homebrew/brew repository. Third parties should avoid using this method if possible, as it may be removed or changed without warning.
Returns the value of attribute patches.
29 30 31 |
# File 'software_spec.rb', line 29 def patches @patches end |
#resources ⇒ Object (readonly)
This method is part of a private API. This method may only be used in the Homebrew/brew repository. Third parties should avoid using this method if possible, as it may be removed or changed without warning.
Returns the value of attribute resources.
29 30 31 |
# File 'software_spec.rb', line 29 def resources @resources end |
Instance Method Details
#add_dep_option(dep) ⇒ Object
277 278 279 280 281 282 283 284 285 |
# File 'software_spec.rb', line 277 def add_dep_option(dep) dep.option_names.each do |name| if dep.optional? && !option_defined?("with-#{name}") << Option.new("with-#{name}", "Build with #{name} support") elsif dep.recommended? && !option_defined?("without-#{name}") << Option.new("without-#{name}", "Build without #{name} support") end end end |
#bottle(&block) ⇒ Object
126 127 128 |
# File 'software_spec.rb', line 126 def bottle(&block) bottle_specification.instance_eval(&block) end |
#bottle_defined? ⇒ Boolean
113 114 115 |
# File 'software_spec.rb', line 113 def bottle_defined? !bottle_specification.collector..empty? end |
#bottle_tag?(tag = nil) ⇒ Boolean
117 118 119 |
# File 'software_spec.rb', line 117 def bottle_tag?(tag = nil) bottle_specification.tag?(Utils::Bottles.tag(tag)) end |
#bottled?(tag = nil) ⇒ Boolean
121 122 123 124 |
# File 'software_spec.rb', line 121 def bottled?(tag = nil) bottle_tag?(tag) && (tag.present? || bottle_specification.compatible_locations? || owner.force_bottle) end |
#cached_download(*args, &block) ⇒ T.untyped
This method is part of a private API. This method may only be used in the Homebrew/brew repository. Third parties should avoid using this method if possible, as it may be removed or changed without warning.
10 |
# File 'sorbet/rbi/dsl/software_spec.rbi', line 10 def cached_download(*args, &block); end |
#checksum(*args, &block) ⇒ T.untyped
This method is part of a private API. This method may only be used in the Homebrew/brew repository. Third parties should avoid using this method if possible, as it may be removed or changed without warning.
13 |
# File 'sorbet/rbi/dsl/software_spec.rbi', line 13 def checksum(*args, &block); end |
#clear_cache(*args, &block) ⇒ T.untyped
This method is part of a private API. This method may only be used in the Homebrew/brew repository. Third parties should avoid using this method if possible, as it may be removed or changed without warning.
16 |
# File 'sorbet/rbi/dsl/software_spec.rbi', line 16 def clear_cache(*args, &block); end |
#declared_deps ⇒ Object
230 231 232 |
# File 'software_spec.rb', line 230 def declared_deps dependency_collector.deps end |
#depends_on(spec) ⇒ Object
201 202 203 204 |
# File 'software_spec.rb', line 201 def depends_on(spec) dep = dependency_collector.add(spec) add_dep_option(dep) if dep end |
#deprecated_option(hash) ⇒ Object
179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 |
# File 'software_spec.rb', line 179 def deprecated_option(hash) raise ArgumentError, "deprecated_option hash must not be empty" if hash.empty? hash.each do |, | Array().each do |old_option| Array().each do |new_option| deprecated_option = DeprecatedOption.new(old_option, new_option) << deprecated_option old_flag = deprecated_option.old_flag new_flag = deprecated_option.current_flag next unless @flags.include? old_flag @flags -= [old_flag] @flags |= [new_flag] @deprecated_flags << deprecated_option end end end @build = BuildOptions.new(Options.create(@flags), ) end |
#deps ⇒ Object
226 227 228 |
# File 'software_spec.rb', line 226 def deps dependency_collector.deps.dup_without_system_deps end |
#download_name(*args, &block) ⇒ T.untyped
This method is part of a private API. This method may only be used in the Homebrew/brew repository. Third parties should avoid using this method if possible, as it may be removed or changed without warning.
19 |
# File 'sorbet/rbi/dsl/software_spec.rbi', line 19 def download_name(*args, &block); end |
#download_type ⇒ String
This method is part of a private API. This method may only be used in the Homebrew/brew repository. Third parties should avoid using this method if possible, as it may be removed or changed without warning.
86 87 88 |
# File 'software_spec.rb', line 86 def download_type "formula" end |
#downloader(*args, &block) ⇒ T.untyped
This method is part of a private API. This method may only be used in the Homebrew/brew repository. Third parties should avoid using this method if possible, as it may be removed or changed without warning.
22 |
# File 'sorbet/rbi/dsl/software_spec.rbi', line 22 def downloader(*args, &block); end |
#fails_with(compiler, &block) ⇒ Object
267 268 269 |
# File 'software_spec.rb', line 267 def fails_with(compiler, &block) compiler_failures << CompilerFailure.create(compiler, &block) end |
#fetch(*args, &block) ⇒ T.untyped
This method is part of a private API. This method may only be used in the Homebrew/brew repository. Third parties should avoid using this method if possible, as it may be removed or changed without warning.
25 |
# File 'sorbet/rbi/dsl/software_spec.rbi', line 25 def fetch(*args, &block); end |
#freeze ⇒ Object
70 71 72 73 74 75 76 77 78 79 80 81 82 83 |
# File 'software_spec.rb', line 70 def freeze @resource.freeze @resources.freeze @dependency_collector.freeze @bottle_specification.freeze @patches.freeze @options.freeze @flags.freeze @deprecated_flags.freeze @deprecated_options.freeze @build.freeze @compiler_failures.freeze super end |
#go_resource(name, &block) ⇒ Object
156 157 158 159 |
# File 'software_spec.rb', line 156 def go_resource(name, &block) odisabled "`SoftwareSpec#go_resource`", "Go modules" resource name, Resource::Go, &block end |
#initialize_dup(other) ⇒ Object
55 56 57 58 59 60 61 62 63 64 65 66 67 68 |
# File 'software_spec.rb', line 55 def initialize_dup(other) super @resource = @resource.dup @resources = @resources.dup @dependency_collector = @dependency_collector.dup @bottle_specification = @bottle_specification.dup @patches = @patches.dup @options = @options.dup @flags = @flags.dup @deprecated_flags = @deprecated_flags.dup @deprecated_options = @deprecated_options.dup @build = @build.dup @compiler_failures = @compiler_failures.dup end |
#mirror(*args, &block) ⇒ T.untyped
This method is part of a private API. This method may only be used in the Homebrew/brew repository. Third parties should avoid using this method if possible, as it may be removed or changed without warning.
28 |
# File 'sorbet/rbi/dsl/software_spec.rbi', line 28 def mirror(*args, &block); end |
#mirrors(*args, &block) ⇒ T.untyped
This method is part of a private API. This method may only be used in the Homebrew/brew repository. Third parties should avoid using this method if possible, as it may be removed or changed without warning.
31 |
# File 'sorbet/rbi/dsl/software_spec.rbi', line 31 def mirrors(*args, &block); end |
#needs(*standards) ⇒ Object
271 272 273 274 275 |
# File 'software_spec.rb', line 271 def needs(*standards) standards.each do |standard| compiler_failures.concat CompilerFailure.for_standard(standard) end end |
#option(name, description = "") ⇒ Object
165 166 167 168 169 170 171 172 173 174 175 176 177 |
# File 'software_spec.rb', line 165 def option(name, description = "") opt = PREDEFINED_OPTIONS.fetch(name) do unless name.is_a?(String) raise ArgumentError, "option name must be string or symbol; got a #{name.class}: #{name}" end raise ArgumentError, "option name is required" if name.empty? raise ArgumentError, "option name must be longer than one character: #{name}" if name.length <= 1 raise ArgumentError, "option name must not start with dashes: #{name}" if name.start_with?("-") Option.new(name, description) end << opt end |
#option_defined?(name) ⇒ Boolean
161 162 163 |
# File 'software_spec.rb', line 161 def option_defined?(name) .include?(name) end |
#patch(strip = :p1, src = nil, &block) ⇒ Object
259 260 261 262 263 264 265 |
# File 'software_spec.rb', line 259 def patch(strip = :p1, src = nil, &block) p = Patch.create(strip, src, &block) return if p.is_a?(ExternalPatch) && p.url.blank? dependency_collector.add(p.resource) if p.is_a? ExternalPatch patches << p end |
#recursive_dependencies ⇒ Object
234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 |
# File 'software_spec.rb', line 234 def recursive_dependencies deps_f = [] recursive_dependencies = deps.filter_map do |dep| deps_f << dep.to_formula dep rescue TapFormulaUnavailableError # Don't complain about missing cross-tap dependencies next end.uniq deps_f.compact.each do |f| f.recursive_dependencies.each do |dep| recursive_dependencies << dep unless recursive_dependencies.include?(dep) end end recursive_dependencies end |
#recursive_requirements ⇒ Object
255 256 257 |
# File 'software_spec.rb', line 255 def recursive_requirements Requirement.(self) end |
#requirements ⇒ Object
251 252 253 |
# File 'software_spec.rb', line 251 def requirements dependency_collector.requirements end |
#resource(name = T.unsafe(nil), klass = Resource, &block) ⇒ Resource?
This method is part of a private API. This method may only be used in the Homebrew/brew repository. Third parties should avoid using this method if possible, as it may be removed or changed without warning.
138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 |
# File 'software_spec.rb', line 138 def resource(name = T.unsafe(nil), klass = Resource, &block) if block raise ArgumentError, "Resource must have a name." if name.nil? raise DuplicateResourceError, name if resource_defined?(name) res = klass.new(name, &block) return unless res.url resources[name] = res dependency_collector.add(res) res else return @resource if name.nil? resources.fetch(name) { raise ResourceMissingError.new(owner, name) } end end |
#resource_defined?(name) ⇒ Boolean
130 131 132 |
# File 'software_spec.rb', line 130 def resource_defined?(name) resources.key?(name) end |
#sha256(*args, &block) ⇒ T.untyped
This method is part of a private API. This method may only be used in the Homebrew/brew repository. Third parties should avoid using this method if possible, as it may be removed or changed without warning.
34 |
# File 'sorbet/rbi/dsl/software_spec.rbi', line 34 def sha256(*args, &block); end |
#source_modified_time(*args, &block) ⇒ T.untyped
This method is part of a private API. This method may only be used in the Homebrew/brew repository. Third parties should avoid using this method if possible, as it may be removed or changed without warning.
37 |
# File 'sorbet/rbi/dsl/software_spec.rbi', line 37 def source_modified_time(*args, &block); end |
#specs(*args, &block) ⇒ T.untyped
This method is part of a private API. This method may only be used in the Homebrew/brew repository. Third parties should avoid using this method if possible, as it may be removed or changed without warning.
40 |
# File 'sorbet/rbi/dsl/software_spec.rbi', line 40 def specs(*args, &block); end |
#stage(*args, &block) ⇒ T.untyped
This method is part of a private API. This method may only be used in the Homebrew/brew repository. Third parties should avoid using this method if possible, as it may be removed or changed without warning.
43 |
# File 'sorbet/rbi/dsl/software_spec.rbi', line 43 def stage(*args, &block); end |
#url(val = nil, specs = {}) ⇒ Object
106 107 108 109 110 111 |
# File 'software_spec.rb', line 106 def url(val = nil, specs = {}) return @resource.url if val.nil? @resource.url(val, **specs) dependency_collector.add(@resource) end |
#uses_from_macos(dep, bounds = {}) ⇒ void
This method is part of a private API. This method may only be used in the Homebrew/brew repository. Third parties should avoid using this method if possible, as it may be removed or changed without warning.
This method returns an undefined value.
212 213 214 215 216 217 218 219 220 221 222 223 224 |
# File 'software_spec.rb', line 212 def uses_from_macos(dep, bounds = {}) if dep.is_a?(Hash) bounds = dep.dup dep, = bounds.shift dep = T.cast(dep, String) = [*] bounds = T.cast(bounds, T::Hash[Symbol, Symbol]) else = [] end depends_on UsesFromMacOSDependency.new(dep, , bounds:) end |
#using(*args, &block) ⇒ T.untyped
This method is part of a private API. This method may only be used in the Homebrew/brew repository. Third parties should avoid using this method if possible, as it may be removed or changed without warning.
46 |
# File 'sorbet/rbi/dsl/software_spec.rbi', line 46 def using(*args, &block); end |
#verify_download_integrity(*args, &block) ⇒ T.untyped
This method is part of a private API. This method may only be used in the Homebrew/brew repository. Third parties should avoid using this method if possible, as it may be removed or changed without warning.
49 |
# File 'sorbet/rbi/dsl/software_spec.rbi', line 49 def verify_download_integrity(*args, &block); end |
#version(*args, &block) ⇒ T.untyped
This method is part of a private API. This method may only be used in the Homebrew/brew repository. Third parties should avoid using this method if possible, as it may be removed or changed without warning.
52 |
# File 'sorbet/rbi/dsl/software_spec.rbi', line 52 def version(*args, &block); end |