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 = {}) ⇒ String? private
- #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
included, #on_arch_conditional, #on_macos, #on_system_conditional
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.
37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 |
# File 'software_spec.rb', line 37 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.
28 29 30 |
# File 'software_spec.rb', line 28 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.
28 29 30 |
# File 'software_spec.rb', line 28 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.
28 29 30 |
# File 'software_spec.rb', line 28 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.
28 29 30 |
# File 'software_spec.rb', line 28 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.
28 29 30 |
# File 'software_spec.rb', line 28 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.
28 29 30 |
# File 'software_spec.rb', line 28 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.
28 29 30 |
# File 'software_spec.rb', line 28 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.
28 29 30 |
# File 'software_spec.rb', line 28 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.
28 29 30 |
# File 'software_spec.rb', line 28 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.
28 29 30 |
# File 'software_spec.rb', line 28 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.
28 29 30 |
# File 'software_spec.rb', line 28 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.
28 29 30 |
# File 'software_spec.rb', line 28 def resources @resources end |
Instance Method Details
#add_dep_option(dep) ⇒ Object
278 279 280 281 282 283 284 285 286 |
# File 'software_spec.rb', line 278 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
127 128 129 |
# File 'software_spec.rb', line 127 def bottle(&block) bottle_specification.instance_eval(&block) end |
#bottle_defined? ⇒ Boolean
114 115 116 |
# File 'software_spec.rb', line 114 def bottle_defined? !bottle_specification.collector..empty? end |
#bottle_tag?(tag = nil) ⇒ Boolean
118 119 120 |
# File 'software_spec.rb', line 118 def bottle_tag?(tag = nil) bottle_specification.tag?(Utils::Bottles.tag(tag)) end |
#bottled?(tag = nil) ⇒ Boolean
122 123 124 125 |
# File 'software_spec.rb', line 122 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
231 232 233 |
# File 'software_spec.rb', line 231 def declared_deps dependency_collector.deps end |
#depends_on(spec) ⇒ Object
202 203 204 205 |
# File 'software_spec.rb', line 202 def depends_on(spec) dep = dependency_collector.add(spec) add_dep_option(dep) if dep end |
#deprecated_option(hash) ⇒ Object
180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 |
# File 'software_spec.rb', line 180 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
227 228 229 |
# File 'software_spec.rb', line 227 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.
85 86 87 |
# File 'software_spec.rb', line 85 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
268 269 270 |
# File 'software_spec.rb', line 268 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
69 70 71 72 73 74 75 76 77 78 79 80 81 82 |
# File 'software_spec.rb', line 69 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
157 158 159 160 |
# File 'software_spec.rb', line 157 def go_resource(name, &block) odisabled "`SoftwareSpec#go_resource`", "Go modules" resource name, Resource::Go, &block end |
#initialize_dup(other) ⇒ Object
54 55 56 57 58 59 60 61 62 63 64 65 66 67 |
# File 'software_spec.rb', line 54 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
272 273 274 275 276 |
# File 'software_spec.rb', line 272 def needs(*standards) standards.each do |standard| compiler_failures.concat CompilerFailure.for_standard(standard) end end |
#option(name, description = "") ⇒ Object
166 167 168 169 170 171 172 173 174 175 176 177 178 |
# File 'software_spec.rb', line 166 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
162 163 164 |
# File 'software_spec.rb', line 162 def option_defined?(name) .include?(name) end |
#patch(strip = :p1, src = nil, &block) ⇒ Object
260 261 262 263 264 265 266 |
# File 'software_spec.rb', line 260 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
235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 |
# File 'software_spec.rb', line 235 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
256 257 258 |
# File 'software_spec.rb', line 256 def recursive_requirements Requirement.(self) end |
#requirements ⇒ Object
252 253 254 |
# File 'software_spec.rb', line 252 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.
139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 |
# File 'software_spec.rb', line 139 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
131 132 133 |
# File 'software_spec.rb', line 131 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 = {}) ⇒ 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.
106 107 108 109 110 111 112 |
# File 'software_spec.rb', line 106 def url(val = nil, specs = {}) if val @resource.url(val, **specs) dependency_collector.add(@resource) end @resource.url 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.
213 214 215 216 217 218 219 220 221 222 223 224 225 |
# File 'software_spec.rb', line 213 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 |