Class: Formula Abstract Private
- Extended by:
 - APIHashable, BuildEnvironment::DSL, Cachable, Forwardable, OnSystem::MacOSAndLinux, T::Helpers, Utils::Output::Mixin
 
- Includes:
 - Context, FileUtils, Homebrew::Livecheck::Constants, OS::Linux::Formula, OS::Mac::Formula, OnSystem::MacOSAndLinux, Utils::Output::Mixin, Utils::Shebang, Utils::Shell
 
- Defined in:
 - formula.rb,
sorbet/rbi/dsl/formula.rbi 
Overview
This class is part of a private API. This class may only be used in the Homebrew/brew repository. Third parties should avoid using this class if possible, as it may be removed or changed without warning.
A formula provides instructions and metadata for Homebrew to install a piece
of software. Every Homebrew formula is a Formula.
All subclasses of Formula (and all Ruby classes) have to be named
UpperCase and not-use-dashes.
A formula specified in this-formula.rb should have a class named
ThisFormula. Homebrew does enforce that the name of the file and the class
correspond.
Make sure you check with brew search that the name is free!
Example
class Wget < Formula
  homepage "https://www.gnu.org/software/wget/"
  url "https://ftp.gnu.org/gnu/wget/wget-1.15.tar.gz"
  sha256 "52126be8cf1bddd7536886e74c053ad7d0ed2aa89b4b630f76785bac21695fcd"
  def install
    system "./configure", "--prefix=#{prefix}"
    system "make", "install"
  end
end
  Defined Under Namespace
Classes: FormulaConflict
Constant Summary
Constants included from Homebrew::Livecheck::Constants
Homebrew::Livecheck::Constants::LATEST_VERSION
Constants included from Utils::Shell
Utils::Shell::SHELL_PROFILE_MAP, Utils::Shell::UNSAFE_SHELL_CHAR
Class Attribute Summary collapse
- 
  
    
      .api_source  ⇒ Hash{String => T.untyped}? 
    
    
  
  
  
  
    
      readonly
    
    
  
  
  
  
  private
  
    
Whether this formula was loaded using the formulae.brew.sh API.
 - .conflicts ⇒ Array<FormulaConflict>? readonly private
 - 
  
    
      .deprecation_date  ⇒ Date? 
    
    
  
  
  
  
    
      readonly
    
    
  
  
  
  
  private
  
    
The date of deprecation of a Formula.
 - 
  
    
      .deprecation_reason  ⇒ String, ... 
    
    
  
  
  
  
    
      readonly
    
    
  
  
  
  
  private
  
    
The reason for deprecation of a Formula.
 - 
  
    
      .deprecation_replacement_cask  ⇒ String? 
    
    
  
  
  
  
    
      readonly
    
    
  
  
  
  
  private
  
    
The replacement cask for a deprecated Formula.
 - 
  
    
      .deprecation_replacement_formula  ⇒ String? 
    
    
  
  
  
  
    
      readonly
    
    
  
  
  
  
  private
  
    
The replacement formula for a deprecated Formula.
 - 
  
    
      .disable_date  ⇒ Date? 
    
    
  
  
  
  
    
      readonly
    
    
  
  
  
  
  private
  
    
The date that this Formula was or becomes disabled.
 - 
  
    
      .disable_reason  ⇒ String, ... 
    
    
  
  
  
  
    
      readonly
    
    
  
  
  
  
  private
  
    
The reason this Formula is disabled.
 - 
  
    
      .disable_replacement_cask  ⇒ String? 
    
    
  
  
  
  
    
      readonly
    
    
  
  
  
  
  private
  
    
The replacement cask for a disabled Formula.
 - 
  
    
      .disable_replacement_formula  ⇒ String? 
    
    
  
  
  
  
    
      readonly
    
    
  
  
  
  
  private
  
    
The replacement formula for a disabled Formula.
 - 
  
    
      .keg_only_reason  ⇒ KegOnlyReason? 
    
    
  
  
  
  
    
      readonly
    
    
  
  
  
  
  private
  
    
The reason for why this software is not linked (by default) to HOMEBREW_PREFIX.
 - .link_overwrite_paths ⇒ Set<String>? readonly private
 - 
  
    
      .no_autobump_message  ⇒ String, ... 
    
    
  
  
  
  
    
      readonly
    
    
  
  
  
  
  private
  
    
Message that explains why the formula was excluded from the autobump list.
 - 
  
    
      .pour_bottle_check_unsatisfied_reason  ⇒ String? 
    
    
  
  
  
  
    
    
  
  
  
  
  private
  
    
If
pour_bottle?returnsfalse: the user-visible reason to display for why they cannot use the bottle. - .pour_bottle_only_if ⇒ Symbol? readonly private
 - .pypi_packages_info ⇒ PypiPackages? readonly private
 - .skip_clean_paths ⇒ Set<String, Symbol>? readonly private
 
Instance Attribute Summary collapse
- 
  
    
      #active_log_type  ⇒ String? 
    
    
  
  
  
  
    
      readonly
    
    
  
  
  
  
  private
  
    
When performing a build, test, or other loggable action, indicates which log file location to use.
 - #active_spec ⇒ void writeonly private
 - 
  
    
      #active_spec_sym  ⇒ Symbol 
    
    
  
  
  
  
    
      readonly
    
    
  
  
  
  
  private
  
    
A symbol to indicate currently active SoftwareSpec.
 - 
  
    
      #alias_name  ⇒ String? 
    
    
  
  
  
  
    
      readonly
    
    
  
  
  
  
  private
  
    
The name of the alias that was used to identify this Formula.
 - 
  
    
      #alias_path  ⇒ Pathname? 
    
    
  
  
  
  
    
      readonly
    
    
  
  
  
  
  private
  
    
The path to the alias that was used to identify this Formula.
 - 
  
    
      #build  ⇒ BuildOptions, Tab 
    
    
  
  
  
  
    
    
  
  
  
  
  private
  
    
The BuildOptions or Tab for this Formula.
 - 
  
    
      #buildpath  ⇒ Pathname? 
    
    
  
  
  
  
    
      readonly
    
    
  
  
  
  
  private
  
    
The current working directory during builds.
 - 
  
    
      #compatibility_version  ⇒ Integer? 
    
    
  
  
  
  
    
      readonly
    
    
  
  
  
  
  private
  
    
Used to indicate API/ABI compatibility for dependencies.
 - 
  
    
      #follow_installed_alias  ⇒ Boolean 
    
    
      (also: #follow_installed_alias?)
    
  
  
  
  
    
    
  
  
  
  
  private
  
    
Whether this formula should be considered outdated if the target of the alias it was installed with has since changed.
 - 
  
    
      #force_bottle  ⇒ Boolean 
    
    
  
  
  
  
    
    
  
  
  
  
  private
  
    
Whether or not to force the use of a bottle.
 - 
  
    
      #full_alias_name  ⇒ String? 
    
    
  
  
  
  
    
      readonly
    
    
  
  
  
  
  private
  
    
The fully-qualified alias referring to this Formula.
 - 
  
    
      #full_name  ⇒ String 
    
    
  
  
  
  
    
      readonly
    
    
  
  
  
  
  
  
    
The fully-qualified name of this Formula.
 - 
  
    
      #head  ⇒ SoftwareSpec? 
    
    
  
  
  
  
    
      readonly
    
    
  
  
  
  
  private
  
    
The HEAD SoftwareSpec for this Formula.
 - 
  
    
      #local_bottle_path  ⇒ Pathname? 
    
    
  
  
  
  
    
    
  
  
  
  
  private
  
    
When installing a bottle (binary package) from a local path this will be set to the full path to the bottle tarball.
 - 
  
    
      #name  ⇒ String 
    
    
  
  
  
  
    
      readonly
    
    
  
  
  
  
  
  
    
The name of this Formula.
 - 
  
    
      #path  ⇒ Pathname 
    
    
  
  
  
  
    
      readonly
    
    
  
  
  
  
  
  
    
The full path to this Formula.
 - #pinned? ⇒ Boolean readonly private
 - 
  
    
      #pypi_packages_info  ⇒ PypiPackages 
    
    
  
  
  
  
    
      readonly
    
    
  
  
  
  
  private
  
    
Information about PyPI mappings for this Formula is stored as PypiPackages object.
 - 
  
    
      #revision  ⇒ Integer 
    
    
  
  
  
  
    
      readonly
    
    
  
  
  
  
  private
  
    
Used for creating new Homebrew versions of software without new upstream versions.
 - 
  
    
      #source_modified_time  ⇒ Time? 
    
    
  
  
  
  
    
      readonly
    
    
  
  
  
  
  private
  
    
The most recent modified time for source files.
 - 
  
    
      #stable  ⇒ SoftwareSpec? 
    
    
  
  
  
  
    
      readonly
    
    
  
  
  
  
  internal
  
    
The stable (and default) SoftwareSpec for this Formula.
 - #tap ⇒ Tap? readonly internal
 - 
  
    
      #testpath  ⇒ Pathname? 
    
    
  
  
  
  
    
      readonly
    
    
  
  
  
  
  private
  
    
The current working directory during tests.
 - 
  
    
      #version_scheme  ⇒ Integer 
    
    
  
  
  
  
    
      readonly
    
    
  
  
  
  
  private
  
    
Used to change version schemes for packages.
 
Class Method Summary collapse
- .[](name) ⇒ Formula private
 - 
  
    
      .alias_full_names  ⇒ Array<String> 
    
    
  
  
  
  
  
  
  
  private
  
    
An array of all aliases as fully-qualified names.
 - 
  
    
      .aliases  ⇒ Array<String> 
    
    
  
  
  
  
  
  
  
  private
  
    
An array of all aliases.
 - 
  
    
      .all(eval_all: false)  ⇒ Array<Formula> 
    
    
  
  
  
  
  
  
  
  private
  
    
An array of each known Formula.
 - 
  
    
      .allow_network_access!(phases = [])  ⇒ void 
    
    
  
  
  
  
  
  
  
  private
  
    
The phases for which network access is allowed.
 - 
  
    
      .autobump?  ⇒ Boolean 
    
    
  
  
  
  
  
  
  
  private
  
    
Is the formula in the autobump list?.
 - 
  
    
      .bottle(&block)  ⇒ void 
    
    
  
  
  
  
  
  
  
  
  
    
Adds a Formula.bottle SoftwareSpec.
 - .build ⇒ BuildOptions private
 - 
  
    
      .build_flags  ⇒ Array<String> 
    
    
  
  
  
  
  
  
  
  private
  
    
Get the
BUILD_FLAGSfrom the formula's namespace set inFormulary::load_formula. - 
  
    
      .compatibility_version(val = T.unsafe(nil))  ⇒ Integer? 
    
    
  
  
  
  
  
  
  
  
  
    
Used to indicate API/ABI compatibility for dependencies.
 - 
  
    
      .conflicts_with(*names)  ⇒ void 
    
    
  
  
  
  
  
  
  
  
  
    
One or more formulae that conflict with this one and why.
 - 
  
    
      .core_alias_files  ⇒ Array<Pathname> 
    
    
  
  
  
  
  
  
  
  private
  
    
An array of all alias files of core Formulae.
 - 
  
    
      .core_aliases  ⇒ Array<String> 
    
    
  
  
  
  
  
  
  
  private
  
    
An array of all core aliases.
 - 
  
    
      .core_names  ⇒ Array<String> 
    
    
  
  
  
  
  
  
  
  private
  
    
An array of all core Formula names.
 - 
  
    
      .cxxstdlib_check(check_type)  ⇒ void 
    
    
  
  
  
  
  
  
  
  
  
    
Pass
:skipto this method to disable post-install stdlib checking. - 
  
    
      .deny_network_access!(phases = [])  ⇒ void 
    
    
  
  
  
  
  
  
  
  private
  
    
The phases for which network access is denied.
 - 
  
    
      .depends_on(dep)  ⇒ void 
    
    
  
  
  
  
  
  
  
  
  
    
The dependencies for this formula.
 - 
  
    
      .deprecate!(date:, because:, replacement: nil, replacement_formula: nil, replacement_cask: nil)  ⇒ void 
    
    
  
  
  
  
  
  
  
  
  
    
Deprecates a Formula (on the given date) so a warning is shown on each installation.
 - 
  
    
      .deprecated?  ⇒ Boolean 
    
    
  
  
  
  
  
  
  
  private
  
    
Whether this Formula is deprecated (i.e. warns on installation).
 - 
  
    
      .deprecated_option(hash)  ⇒ void 
    
    
  
  
  
  
  
  
  
  
  
    
Deprecated options are used to rename options and migrate users who used them to newer ones.
 - 
  
    
      .desc(val = T.unsafe(nil))  ⇒ String? 
    
    
  
  
  
  
  
  
  
  
  
    
A one-line description of the software.
 - 
  
    
      .disable!(date:, because:, replacement: nil, replacement_formula: nil, replacement_cask: nil)  ⇒ void 
    
    
  
  
  
  
  
  
  
  
  
    
Disables a Formula (on the given date) so it cannot be installed.
 - 
  
    
      .disabled?  ⇒ Boolean 
    
    
  
  
  
  
  
  
  
  private
  
    
Whether this Formula is disabled (i.e. cannot be installed).
 - 
  
    
      .fails_with(compiler, &block)  ⇒ void 
    
    
  
  
  
  
  
  
  
  
  
    
Marks the Formula as failing with a particular compiler so it will fall back to others.
 - .freeze ⇒ T.self_type private
 - 
  
    
      .full_names  ⇒ Array<String> 
    
    
  
  
  
  
  
  
  
  private
  
    
An array of all Formula names, which the tap formulae have as the fully-qualified name.
 - 
  
    
      .fuzzy_search(name)  ⇒ Array<String> 
    
    
  
  
  
  
  
  
  
  private
  
    
Returns a list of approximately matching formula names, but not the complete match.
 - 
  
    
      .head(val = nil, specs = {}, &block)  ⇒ T.untyped 
    
    
  
  
  
  
  
  
  
  private
  
    
Adds a Formula.head SoftwareSpec.
 - 
  
    
      .homepage(val = T.unsafe(nil))  ⇒ String? 
    
    
  
  
  
  
  
  
  
  
  
    
The homepage for the software.
 - 
  
    
      .inherited(child)  ⇒ void 
    
    
  
  
  
  
  
  
  
  private
  
    
Initialise instance variables for each subclass.
 - 
  
    
      .installed  ⇒ Array<Formula> 
    
    
  
  
  
  
  
  
  
  private
  
    
An array of all installed Formulae.
 - 
  
    
      .installed_formula_names  ⇒ Array<String> 
    
    
  
  
  
  
  
  
  
  private
  
    
An array of all currently installed formula names.
 - .installed_with_alias_path(alias_path) ⇒ Array<Formula> private
 - 
  
    
      .keg_only(reason, explanation = "")  ⇒ void 
    
    
  
  
  
  
  
  
  
  
  
    
Software that will not be symlinked into the
brew --prefixand will only live in its Cellar. - 
  
    
      .license(args = nil)  ⇒ String, ... 
    
    
  
  
  
  
  
  
  
  
  
    
The SPDX ID of the open-source license that the formula uses.
 - 
  
    
      .link_overwrite(*paths)  ⇒ Set<String> 
    
    
  
  
  
  
  
  
  
  private
  
    
Permit overwriting certain files while linking.
 - 
  
    
      .livecheck(&block)  ⇒ T.untyped 
    
    
  
  
  
  
  
  
  
  
  
    
Livecheck can be used to check for newer versions of the software.
 - 
  
    
      .livecheck_defined?  ⇒ Boolean 
    
    
  
  
  
  
  
  
  
  private
  
    
Checks whether a
livecheckspecification is defined or not. - 
  
    
      .livecheckable?  ⇒ Boolean 
    
    
  
  
  
  
  
  
  deprecated
  private
  
    Deprecated. 
Use Formula.livecheck_defined? instead.
 - 
  
    
      .loaded_from_api?  ⇒ Boolean 
    
    
  
  
  
  
  
  
  
  private
  
    
Whether this formula was loaded using the formulae.brew.sh API.
 - 
  
    
      .loaded_from_stub?  ⇒ Boolean 
    
    
  
  
  
  
  
  
  
  private
  
    
Whether this formula was loaded using the internal formulae.brew.sh API.
 - 
  
    
      .mirror(val)  ⇒ void 
    
    
  
  
  
  
  
  
  
  
  
    
Additional URLs for the Formula.stable version of the formula.
 - 
  
    
      .names  ⇒ Array<String> 
    
    
  
  
  
  
  
  
  
  private
  
    
An array of all Formula names.
 - 
  
    
      .needs(*standards)  ⇒ void 
    
    
  
  
  
  
  
  
  
  
  
    
Marks the Formula as needing a certain standard, so Homebrew will fall back to other compilers if the default compiler does not implement that standard.
 - .network_access_allowed ⇒ Hash{Symbol => Boolean} private
 - 
  
    
      .network_access_allowed?(phase)  ⇒ Boolean 
    
    
  
  
  
  
  
  
  
  private
  
    
Whether the specified phase should be forced offline.
 - 
  
    
      .no_autobump!(because:)  ⇒ void 
    
    
  
  
  
  
  
  
  
  
  
    
Exclude the formula from the autobump list.
 - 
  
    
      .no_autobump_defined?  ⇒ Boolean 
    
    
  
  
  
  
  
  
  
  private
  
    
Is a
no_autobump!method defined?. - 
  
    
      .on_system_blocks_exist?  ⇒ Boolean 
    
    
  
  
  
  
  
  
  
  private
  
    
Whether this formula contains OS/arch-specific blocks (e.g.
on_macos,on_arm,on_monterey :or_older,on_system :linux, macos: :big_sur_or_newer). - 
  
    
      .option(name, description = "")  ⇒ void 
    
    
  
  
  
  
  
  
  
  
  
    
Options can be used as arguments to
brew install. - 
  
    
      .patch(strip = :p1, src = nil, &block)  ⇒ void 
    
    
  
  
  
  
  
  
  
  
  
    
External patches can be declared using resource-style blocks.
 - 
  
    
      .pour_bottle?(only_if: nil, &block)  ⇒ void 
    
    
  
  
  
  
  
  
  
  
  
    
Defines whether the Formula's bottle can be used on the given Homebrew installation.
 - 
  
    
      .preserve_rpath(value: true)  ⇒ Boolean 
    
    
  
  
  
  
  
  
  
  
  
    
Preserve
@rpathinstall names when fixing dynamic linkage on macOS. - 
  
    
      .preserve_rpath?  ⇒ Boolean 
    
    
  
  
  
  
  
  
  
  internal
  
    
Check if
@rpathinstall names should be preserved. - 
  
    
      .pypi_packages(package_name: nil, extra_packages: nil, exclude_packages: nil, dependencies: nil, needs_manual_update: false)  ⇒ void 
    
    
  
  
  
  
  
  
  
  private
  
    
Adds information about PyPI formula mapping as PypiPackages object.
 - 
  
    
      .racks  ⇒ Array<Pathname> 
    
    
  
  
  
  
  
  
  
  private
  
    
An array of all racks currently installed.
 - 
  
    
      .resource(name, klass = Resource, &block)  ⇒ void 
    
    
  
  
  
  
  
  
  
  
  
    
Additional downloads can be defined as Formula.resources and accessed in the install method.
 - 
  
    
      .revision(val = T.unsafe(nil))  ⇒ Integer? 
    
    
  
  
  
  
  
  
  
  
  
    
Used for creating new Homebrew versions of software without new upstream versions.
 - 
  
    
      .service(&block)  ⇒ T.proc.returns(T.untyped)? 
    
    
  
  
  
  
  
  
  
  
  
    
Service can be used to define services.
 - 
  
    
      .service?  ⇒ Boolean 
    
    
  
  
  
  
  
  
  
  private
  
    
Checks whether a service specification is defined or not.
 - 
  
    
      .sha256(val)  ⇒ void 
    
    
  
  
  
  
  
  
  
  
  
    
To verify the cached download's integrity and security we verify the SHA-256 hash matches what we've declared in the Formula.
 - 
  
    
      .skip_clean(*paths)  ⇒ Set<String, Symbol> 
    
    
  
  
  
  
  
  
  
  
  
    
Skip cleaning paths in a formula.
 - .spec_syms ⇒ Array<Symbol> private
 - 
  
    
      .specs  ⇒ Array<SoftwareSpec> 
    
    
  
  
  
  
  
  
  
  private
  
    
A list of the Formula.stable and Formula.head SoftwareSpecs.
 - 
  
    
      .stable(&block)  ⇒ T.untyped 
    
    
  
  
  
  
  
  
  
  
  
    
Allows adding Formula.depends_on and Patches just to the Formula.stable SoftwareSpec.
 - 
  
    
      .tap_aliases  ⇒ Array<String> 
    
    
  
  
  
  
  
  
  
  private
  
    
An array of all tap aliases.
 - 
  
    
      .tap_files  ⇒ Array<Pathname> 
    
    
  
  
  
  
  
  
  
  private
  
    
An array of all tap Formula files.
 - 
  
    
      .tap_names  ⇒ Array<String> 
    
    
  
  
  
  
  
  
  
  private
  
    
An array of all tap Formula names.
 - 
  
    
      .test(&block)  ⇒ T.untyped 
    
    
  
  
  
  
  
  
  
  
  
    
A test is required for new formulae and makes us happy.
 - 
  
    
      .url(val = T.unsafe(nil), specs = {})  ⇒ String 
    
    
  
  
  
  
  
  
  
  
  
    
The URL used to download the source for the Formula.stable version of the formula.
 - 
  
    
      .uses_from_macos(dep, bounds = {})  ⇒ void 
    
    
  
  
  
  
  
  
  
  
  
    
Indicates use of dependencies provided by macOS.
 - 
  
    
      .version(val = nil)  ⇒ Version? 
    
    
  
  
  
  
  
  
  
  
  
    
The version string for the Formula.stable version of the formula.
 - 
  
    
      .version_scheme(val = T.unsafe(nil))  ⇒ Integer? 
    
    
  
  
  
  
  
  
  
  
  
    
Used for creating new Homebrew version schemes.
 
Instance Method Summary collapse
- 
  
    
      #active_log_prefix  ⇒ String 
    
    
  
  
  
  
  
  
  
  private
  
    
The prefix, if any, to use in filenames for logging current activity.
 - 
  
    
      #alias_changed?  ⇒ Boolean 
    
    
  
  
  
  
  
  
  
  private
  
    
Has the alias used to install the formula changed, or are different formulae already installed with this alias?.
 - 
  
    
      #aliases  ⇒ Array<String> 
    
    
  
  
  
  
  
  
  
  internal
  
    
All aliases for the formula.
 - #allow_network_access!(*args, &block) ⇒ T.untyped private
 - 
  
    
      #any_installed_keg  ⇒ Keg? 
    
    
  
  
  
  
  
  
  
  private
  
    
Returns a Keg for the
opt_prefixorinstalled_prefixif they exist. - 
  
    
      #any_installed_prefix  ⇒ Pathname? 
    
    
  
  
  
  
  
  
  
  internal
  
    
Get the path of any installed prefix.
 - 
  
    
      #any_installed_version  ⇒ PkgVersion? 
    
    
  
  
  
  
  
  
  
  private
  
    
Returns the PkgVersion for this formula if it is installed.
 - 
  
    
      #any_version_installed?  ⇒ Boolean 
    
    
  
  
  
  
  
  
  
  
  
    
If at least one version of Formula is installed.
 - 
  
    
      #api_source  ⇒ T.untyped 
    
    
  
  
  
  
  
  
  
  private
  
    
The API source data used to load this formula.
 - 
  
    
      #autobump?  ⇒ Boolean 
    
    
  
  
  
  
  
  
  
  private
  
    
Is the formula in the autobump list?.
 - 
  
    
      #bash_completion  ⇒ Pathname 
    
    
  
  
  
  
  
  
  
  
  
    
The directory where the formula's
bashcompletion files should be installed. - 
  
    
      #bin  ⇒ Pathname 
    
    
  
  
  
  
  
  
  
  
  
    
The directory where the formula's binaries should be installed.
 - 
  
    
      #bottle  ⇒ Bottle? 
    
    
  
  
  
  
  
  
  
  private
  
    
The Bottle object for the currently active SoftwareSpec.
 - #bottle_defined?(*args, &block) ⇒ Boolean private
 - 
  
    
      #bottle_for_tag(tag = nil)  ⇒ Bottle? 
    
    
  
  
  
  
  
  
  
  private
  
    
The Bottle object for given tag.
 - 
  
    
      #bottle_hash  ⇒ Hash{String => T.untyped} 
    
    
  
  
  
  
  
  
  
  private
  
    
Returns the bottle information for a formula.
 - #bottle_prefix ⇒ Pathname private
 - #bottle_specification(*args, &block) ⇒ T.untyped private
 - #bottle_tab_attributes ⇒ Hash{String => T.untyped} private
 - #bottle_tag?(*args, &block) ⇒ Boolean private
 - #bottled?(*args, &block) ⇒ Boolean private
 - 
  
    
      #brew(fetch: true, keep_tmp: false, debug_symbols: false, interactive: false, &_blk)  ⇒ void 
    
    
  
  
  
  
  
  
  
  private
  
    
Yields
|self,staging|with current working directory set to the uncompressed tarball where staging is a Mktemp staging context. - #cached_download(*args, &block) ⇒ T.untyped private
 - 
  
    
      #caveats  ⇒ String? 
    
    
  
  
  
  
  
  
  
  private
  
    
Warn the user about any Homebrew-specific issues or quirks for this package.
 - #caveats_with_placeholders ⇒ String? private
 - #clear_cache(*args, &block) ⇒ T.untyped private
 - #compiler_failures(*args, &block) ⇒ T.untyped private
 - 
  
    
      #conflicts  ⇒ Array<FormulaConflict> 
    
    
  
  
  
  
  
  
  
  internal
  
    
Returns a list of FormulaConflict objects indicating any formulae that conflict with this one and why.
 - 
  
    
      #core_formula?  ⇒ Boolean 
    
    
  
  
  
  
  
  
  
  private
  
    
True if this formula is provided by Homebrew itself.
 - #current_installed_alias_target ⇒ Formula? private
 - #declared_deps(*args, &block) ⇒ T.untyped private
 - #deny_network_access!(*args, &block) ⇒ T.untyped private
 - #dependencies_hash ⇒ Hash{String => T.untyped} private
 - 
  
    
      #deprecated?  ⇒ Boolean 
    
    
  
  
  
  
  
  
  
  private
  
    
Whether this Formula is deprecated (i.e. warns on installation).
 - #deprecated_flags(*args, &block) ⇒ T.untyped private
 - #deprecated_options(*args, &block) ⇒ T.untyped private
 - 
  
    
      #deprecation_date  ⇒ T.untyped 
    
    
  
  
  
  
  
  
  
  private
  
    
The date that this Formula was or becomes deprecated.
 - 
  
    
      #deprecation_reason  ⇒ T.untyped 
    
    
  
  
  
  
  
  
  
  private
  
    
The reason this Formula is deprecated.
 - 
  
    
      #deprecation_replacement_cask  ⇒ T.untyped 
    
    
  
  
  
  
  
  
  
  private
  
    
The replacement cask for this deprecated Formula.
 - 
  
    
      #deprecation_replacement_formula  ⇒ T.untyped 
    
    
  
  
  
  
  
  
  
  private
  
    
The replacement formula for this deprecated Formula.
 - #deps(*args, &block) ⇒ T.untyped private
 - 
  
    
      #desc  ⇒ T.untyped 
    
    
  
  
  
  
  
  
  
  private
  
    
The description of the software.
 - 
  
    
      #deuniversalize_machos(*targets)  ⇒ void 
    
    
  
  
  
  
  
  
  
  
  
    
Replaces a universal binary with its native slice.
 - 
  
    
      #disable_date  ⇒ T.untyped 
    
    
  
  
  
  
  
  
  
  private
  
    
The date that this Formula was or becomes disabled.
 - 
  
    
      #disable_reason  ⇒ T.untyped 
    
    
  
  
  
  
  
  
  
  private
  
    
The reason this Formula is disabled.
 - 
  
    
      #disable_replacement_cask  ⇒ T.untyped 
    
    
  
  
  
  
  
  
  
  private
  
    
The replacement cask for this disabled Formula.
 - 
  
    
      #disable_replacement_formula  ⇒ T.untyped 
    
    
  
  
  
  
  
  
  
  private
  
    
The replacement formula for this disabled Formula.
 - 
  
    
      #disabled?  ⇒ Boolean 
    
    
  
  
  
  
  
  
  
  private
  
    
Whether this Formula is disabled (i.e. cannot be installed).
 - 
  
    
      #doc  ⇒ Pathname 
    
    
  
  
  
  
  
  
  
  
  
    
The directory where the formula's documentation should be installed.
 - #downloader(*args, &block) ⇒ T.untyped private
 - #eligible_kegs_for_cleanup(quiet: false) ⇒ Array<Keg> private
 - 
  
    
      #elisp  ⇒ Pathname 
    
    
  
  
  
  
  
  
  
  
  
    
The directory where Emacs Lisp files should be installed, with the formula name appended to avoid linking conflicts.
 - #enqueue_resources_and_patches(download_queue:) ⇒ void private
 - 
  
    
      #ensure_installed!(reason: "", latest: false, output_to_stderr: true, quiet: false)  ⇒ T.self_type 
    
    
  
  
  
  
  
  
  
  private
  
    
Ensure the given formula is installed.
 - #env(*args, &block) ⇒ T.untyped private
 - 
  
    
      #etc  ⇒ Pathname 
    
    
  
  
  
  
  
  
  
  
  
    
The directory where the formula's configuration files should be installed.
 - #fetch_bottle_tab(quiet: false) ⇒ void private
 - #fetch_fully_loaded_formula!(download_queue: nil) ⇒ void private
 - #fetch_patches ⇒ void private
 - 
  
    
      #fish_completion  ⇒ Pathname 
    
    
  
  
  
  
  
  
  
  
  
    
The directory where the formula's
fishcompletion files should be installed. - 
  
    
      #fish_function  ⇒ Pathname 
    
    
  
  
  
  
  
  
  
  
  
    
The directory where the formula's
fishfunction files should be installed. - 
  
    
      #frameworks  ⇒ Pathname 
    
    
  
  
  
  
  
  
  
  
  
    
The directory where the formula's Frameworks should be installed.
 - #full_installed_alias_name ⇒ String? private
 - 
  
    
      #full_installed_specified_name  ⇒ String 
    
    
  
  
  
  
  
  
  
  private
  
    
The name (including tap) specified to install this formula.
 - 
  
    
      #full_specified_name  ⇒ String 
    
    
  
  
  
  
  
  
  
  private
  
    
The name (including tap) specified to find this formula.
 - #fully_loaded_formula ⇒ Formula private
 - 
  
    
      #generate_completions_from_executable(*commands, base_name: nil, shells: [:bash, :zsh, :fish], shell_parameter_format: nil)  ⇒ void 
    
    
  
  
  
  
  
  
  
  
  
    
Generate shell completions for a formula for
bash,zsh,fish, and optionallypwshusing the formula's executable. - 
  
    
      #head?  ⇒ Boolean 
    
    
  
  
  
  
  
  
  
  private
  
    
Is the currently active SoftwareSpec a #head build?.
 - 
  
    
      #head_only?  ⇒ Boolean 
    
    
  
  
  
  
  
  
  
  private
  
    
Is this formula HEAD-only?.
 - #head_version_outdated?(version, fetch_head: false) ⇒ Boolean private
 - 
  
    
      #homepage  ⇒ T.untyped 
    
    
  
  
  
  
  
  
  
  private
  
    
The homepage for the software.
 - 
  
    
      #include  ⇒ Pathname 
    
    
  
  
  
  
  
  
  
  
  
    
The directory where the formula's headers should be installed.
 - 
  
    
      #info  ⇒ Pathname 
    
    
  
  
  
  
  
  
  
  
  
    
The directory where the formula's info files should be installed.
 - #initialize(name, path, spec, alias_path: nil, tap: nil, force_bottle: false) ⇒ void constructor private
 - 
  
    
      #inreplace(paths, before = nil, after = nil, audit_result: true, global: true, &block)  ⇒ void 
    
    
  
  
  
  
  
  
  
  
  
    
Sometimes we have to change a bit before we install.
 - 
  
    
      #install  ⇒ void 
    
    
  
  
  
  
  
  
  
  private
  
    
This method is overridden in Formula subclasses to provide the installation instructions.
 - #install_etc_var ⇒ void private
 - #installed_alias_name ⇒ String? private
 - 
  
    
      #installed_alias_path  ⇒ Pathname? 
    
    
  
  
  
  
  
  
  
  private
  
    
The alias path that was used to install this formula, if it exists.
 - 
  
    
      #installed_alias_target_changed?  ⇒ Boolean 
    
    
  
  
  
  
  
  
  
  private
  
    
Has the target of the alias used to install this formula changed? Returns false if the formula wasn't installed with an alias.
 - 
  
    
      #installed_kegs  ⇒ Array<Keg> 
    
    
  
  
  
  
  
  
  
  private
  
    
All currently installed kegs.
 - 
  
    
      #installed_prefixes  ⇒ Array<Pathname> 
    
    
  
  
  
  
  
  
  
  private
  
    
All currently installed prefix directories.
 - 
  
    
      #installed_runtime_formula_dependencies(read_from_tab: true, undeclared: true)  ⇒ Array<Formula> 
    
    
  
  
  
  
  
  
  
  private
  
    
Returns a list of installed Formula objects that are required at runtime.
 - 
  
    
      #installed_specified_name  ⇒ String 
    
    
  
  
  
  
  
  
  
  private
  
    
The name specified to install this formula.
 - #internal_dependencies_hash(spec_symbol) ⇒ Hash{String => T.untyped}? private
 - 
  
    
      #keg_only?  ⇒ Boolean 
    
    
  
  
  
  
  
  
  
  internal
  
    
Rarely, you don't want your library symlinked into the main prefix.
 - #keg_only_reason(*args, &block) ⇒ T.untyped private
 - 
  
    
      #kext_prefix  ⇒ Pathname 
    
    
  
  
  
  
  
  
  
  
  
    
The directory where the formula's kernel extensions should be installed.
 - 
  
    
      #latest_formula  ⇒ Formula 
    
    
  
  
  
  
  
  
  
  private
  
    
If the alias has changed value, return the new formula.
 - #latest_head_pkg_version(fetch_head: false) ⇒ PkgVersion private
 - #latest_head_prefix ⇒ Pathname? private
 - #latest_head_version ⇒ PkgVersion? private
 - 
  
    
      #latest_installed_prefix  ⇒ Pathname 
    
    
  
  
  
  
  
  
  
  private
  
    
The latest prefix for this formula.
 - 
  
    
      #latest_version_installed?  ⇒ Boolean 
    
    
  
  
  
  
  
  
  
  private
  
    
If this Formula is installed.
 - 
  
    
      #launchd_service_path  ⇒ Pathname 
    
    
  
  
  
  
  
  
  
  private
  
    
The generated launchd Formula.service file path.
 - 
  
    
      #lib  ⇒ Pathname 
    
    
  
  
  
  
  
  
  
  
  
    
The directory where the formula's libraries should be installed.
 - 
  
    
      #libexec  ⇒ Pathname 
    
    
  
  
  
  
  
  
  
  
  
    
The directory where the formula's binaries should be installed.
 - 
  
    
      #license  ⇒ T.untyped 
    
    
  
  
  
  
  
  
  
  private
  
    
The SPDX ID of the software license.
 - #link_overwrite?(path) ⇒ Boolean private
 - 
  
    
      #linked?  ⇒ Boolean 
    
    
  
  
  
  
  
  
  
  internal
  
    
Is the formula linked?.
 - 
  
    
      #linked_keg  ⇒ Pathname 
    
    
  
  
  
  
  
  
  
  internal
  
    
The link status symlink directory for this Formula.
 - 
  
    
      #linked_version  ⇒ PkgVersion? 
    
    
  
  
  
  
  
  
  
  private
  
    
PkgVersion of the linked keg for the formula.
 - 
  
    
      #livecheck  ⇒ T.untyped 
    
    
  
  
  
  
  
  
  
  private
  
    
The
livecheckspecification for the software. - 
  
    
      #livecheck_defined?  ⇒ Boolean 
    
    
  
  
  
  
  
  
  
  private
  
    
Is a
livecheckspecification defined for the software?. - 
  
    
      #livecheckable?  ⇒ Boolean 
    
    
  
  
  
  
  
  
  
  private
  
    
This is a legacy alias for
#livecheck_defined?. - 
  
    
      #loaded_from_api?  ⇒ Boolean 
    
    
  
  
  
  
  
  
  
  private
  
    
Whether this formula was loaded using the formulae.brew.sh API.
 - 
  
    
      #loaded_from_stub?  ⇒ Boolean 
    
    
  
  
  
  
  
  
  
  private
  
    
Whether this formula was loaded using the formulae.brew.sh API.
 - 
  
    
      #loader_path  ⇒ String 
    
    
  
  
  
  
  
  
  
  
  
    
Linker variable for the directory containing the program or shared object.
 - #lock ⇒ Array<String> private
 - 
  
    
      #logs  ⇒ Pathname 
    
    
  
  
  
  
  
  
  
  private
  
    
The directory where the formula's installation or test logs will be written.
 - 
  
    
      #man  ⇒ Pathname 
    
    
  
  
  
  
  
  
  
  
  
    
The root directory where the formula's manual pages should be installed.
 - 
  
    
      #man1  ⇒ Pathname 
    
    
  
  
  
  
  
  
  
  
  
    
The directory where the formula's man1 pages should be installed.
 - 
  
    
      #man2  ⇒ Pathname 
    
    
  
  
  
  
  
  
  
  
  
    
The directory where the formula's man2 pages should be installed.
 - 
  
    
      #man3  ⇒ Pathname 
    
    
  
  
  
  
  
  
  
  
  
    
The directory where the formula's man3 pages should be installed.
 - 
  
    
      #man4  ⇒ Pathname 
    
    
  
  
  
  
  
  
  
  
  
    
The directory where the formula's man4 pages should be installed.
 - 
  
    
      #man5  ⇒ Pathname 
    
    
  
  
  
  
  
  
  
  
  
    
The directory where the formula's man5 pages should be installed.
 - 
  
    
      #man6  ⇒ Pathname 
    
    
  
  
  
  
  
  
  
  
  
    
The directory where the formula's man6 pages should be installed.
 - 
  
    
      #man7  ⇒ Pathname 
    
    
  
  
  
  
  
  
  
  
  
    
The directory where the formula's man7 pages should be installed.
 - 
  
    
      #man8  ⇒ Pathname 
    
    
  
  
  
  
  
  
  
  
  
    
The directory where the formula's man8 pages should be installed.
 - #migration_needed? ⇒ Boolean private
 - 
  
    
      #missing_dependencies(hide: [])  ⇒ Array<Dependency> 
    
    
  
  
  
  
  
  
  
  private
  
    
Returns a list of formulae depended on by this formula that aren't installed.
 - 
  
    
      #mkdir(name, &block)  ⇒ T.untyped 
    
    
  
  
  
  
  
  
  
  private
  
    
A version of
FileUtils.mkdirthat also changes to that folder in a block. - 
  
    
      #mktemp(prefix = name, retain: false, retain_in_cache: false, &block)  ⇒ void 
    
    
  
  
  
  
  
  
  
  private
  
    
Create a temporary directory then yield.
 - #network_access_allowed?(*args, &block) ⇒ Boolean private
 - #new_formula_available? ⇒ Boolean private
 - 
  
    
      #no_autobump!  ⇒ T.untyped 
    
    
  
  
  
  
  
  
  
  private
  
    
Exclude the formula from the autobump list.
 - 
  
    
      #no_autobump_defined?  ⇒ Boolean 
    
    
  
  
  
  
  
  
  
  private
  
    
Is a
no_autobump!method defined?. - #no_autobump_message(*args, &block) ⇒ T.untyped private
 - #old_installed_formulae ⇒ Array<Formula> private
 - 
  
    
      #oldnames  ⇒ Array<String> 
    
    
  
  
  
  
  
  
  
  internal
  
    
Old names for the formula.
 - #oldnames_to_migrate ⇒ Array<String> private
 - #on_system_blocks_exist? ⇒ Boolean? private
 - 
  
    
      #opt_bin  ⇒ Pathname 
    
    
  
  
  
  
  
  
  
  
  
    
Same as #bin, but relative to #opt_prefix instead of #prefix.
 - 
  
    
      #opt_elisp  ⇒ Pathname 
    
    
  
  
  
  
  
  
  
  
  
    
Same as #elisp, but relative to #opt_prefix instead of #prefix.
 - 
  
    
      #opt_frameworks  ⇒ Pathname 
    
    
  
  
  
  
  
  
  
  
  
    
Same as #frameworks, but relative to #opt_prefix instead of #prefix.
 - 
  
    
      #opt_include  ⇒ Pathname 
    
    
  
  
  
  
  
  
  
  
  
    
Same as #include, but relative to #opt_prefix instead of #prefix.
 - 
  
    
      #opt_lib  ⇒ Pathname 
    
    
  
  
  
  
  
  
  
  
  
    
Same as #lib, but relative to #opt_prefix instead of #prefix.
 - 
  
    
      #opt_libexec  ⇒ Pathname 
    
    
  
  
  
  
  
  
  
  
  
    
Same as #libexec, but relative to #opt_prefix instead of #prefix.
 - 
  
    
      #opt_pkgshare  ⇒ Pathname 
    
    
  
  
  
  
  
  
  
  
  
    
Same as #pkgshare, but relative to #opt_prefix instead of #prefix.
 - 
  
    
      #opt_prefix  ⇒ Pathname 
    
    
  
  
  
  
  
  
  
  
  
    
A stable path for this formula, when installed.
 - 
  
    
      #opt_sbin  ⇒ Pathname 
    
    
  
  
  
  
  
  
  
  
  
    
Same as #sbin, but relative to #opt_prefix instead of #prefix.
 - 
  
    
      #opt_share  ⇒ Pathname 
    
    
  
  
  
  
  
  
  
  
  
    
Same as #share, but relative to #opt_prefix instead of #prefix.
 - 
  
    
      #option_defined?  ⇒ Boolean 
    
    
  
  
  
  
  
  
  
  private
  
    
If a named option is defined for the currently active SoftwareSpec.
 - #options(*args, &block) ⇒ T.untyped private
 - 
  
    
      #optlinked?  ⇒ Boolean 
    
    
  
  
  
  
  
  
  
  private
  
    
Is the formula linked to
opt?. - 
  
    
      #outdated?(fetch_head: false)  ⇒ Boolean 
    
    
  
  
  
  
  
  
  
  internal
  
    
Check whether the installed formula is outdated.
 - #outdated_kegs(fetch_head: false) ⇒ Array<Keg> private
 - #patch ⇒ void private
 - #patchlist(*args, &block) ⇒ T.untyped private
 - #pin(*args, &block) ⇒ T.untyped private
 - #pinnable?(*args, &block) ⇒ Boolean private
 - #pinned_version(*args, &block) ⇒ T.untyped private
 - 
  
    
      #pkg_version  ⇒ PkgVersion 
    
    
  
  
  
  
  
  
  
  private
  
    
The PkgVersion for this formula with Formula.version and #revision information.
 - 
  
    
      #pkgetc  ⇒ Pathname 
    
    
  
  
  
  
  
  
  
  
  
    
A subdirectory of
etcwith the formula name suffixed, e.g. - 
  
    
      #pkgshare  ⇒ Pathname 
    
    
  
  
  
  
  
  
  
  
  
    
The directory where the formula's shared files should be installed, with the name of the formula appended to avoid linking conflicts.
 - 
  
    
      #plist_name  ⇒ String 
    
    
  
  
  
  
  
  
  
  private
  
    
The generated launchd plist service name.
 - #possible_names ⇒ Array<String> private
 - 
  
    
      #post_install  ⇒ void 
    
    
  
  
  
  
  
  
  
  private
  
    
Can be overridden to run commands on both source and bottle installation.
 - #post_install_defined? ⇒ Boolean private
 - 
  
    
      #pour_bottle?  ⇒ Boolean 
    
    
  
  
  
  
  
  
  
  private
  
    
Indicates that this formula supports bottles.
 - #pour_bottle_check_unsatisfied_reason(*args, &block) ⇒ T.untyped private
 - 
  
    
      #prefix(version = pkg_version)  ⇒ Pathname 
    
    
  
  
  
  
  
  
  
  
  
    
The directory in the Cellar that the formula is installed to.
 - 
  
    
      #prefix_linked?(version = pkg_version)  ⇒ Boolean 
    
    
  
  
  
  
  
  
  
  private
  
    
If a formula's linked keg points to the prefix.
 - #preserve_rpath? ⇒ Boolean private
 - #print_tap_action(options = {}) ⇒ void private
 - 
  
    
      #pwsh_completion  ⇒ Pathname 
    
    
  
  
  
  
  
  
  
  
  
    
The directory where the formula's PowerShell completion files should be installed.
 - 
  
    
      #rack  ⇒ Pathname 
    
    
  
  
  
  
  
  
  
  private
  
    
The parent of the prefix; the named directory in the Cellar containing all installed versions of this software.
 - 
  
    
      #recursive_dependencies(&block)  ⇒ Array<Dependency> 
    
    
  
  
  
  
  
  
  
  internal
  
    
Returns a list of Dependency objects in an installable order, which means if
adepends onbthenbwill be ordered beforeain this list. - 
  
    
      #recursive_requirements(&block)  ⇒ Requirements 
    
    
  
  
  
  
  
  
  
  internal
  
    
The full set of Requirements for this formula's dependency tree.
 - #require_universal_deps? ⇒ Boolean private
 - #requirements(*args, &block) ⇒ T.untyped private
 - 
  
    
      #resource(name = T.unsafe(nil), klass = T.unsafe(nil), &block)  ⇒ Resource? 
    
    
  
  
  
  
  
  
  
  
  
    
A named Resource for the currently active SoftwareSpec.
 - 
  
    
      #resources  ⇒ T.untyped 
    
    
  
  
  
  
  
  
  
  private
  
    
The Resources for the currently active SoftwareSpec.
 - 
  
    
      #rpath(source: bin, target: lib)  ⇒ String 
    
    
  
  
  
  
  
  
  
  
  
    
Executable/Library RPATH according to platform conventions.
 - #ruby_source_checksum ⇒ Checksum? private
 - #ruby_source_path ⇒ String? private
 - #run_post_install ⇒ void private
 - #run_test(keep_tmp: false) ⇒ T.untyped private
 - 
  
    
      #runtime_dependencies(read_from_tab: true, undeclared: true)  ⇒ Array<Dependency> 
    
    
  
  
  
  
  
  
  
  internal
  
    
Returns a list of Dependency objects that are required at runtime.
 - 
  
    
      #runtime_formula_dependencies(read_from_tab: true, undeclared: true)  ⇒ Array<Formula> 
    
    
  
  
  
  
  
  
  
  private
  
    
Returns a list of Formula objects that are required at runtime.
 - #runtime_installed_formula_dependents ⇒ Array<Formula> private
 - 
  
    
      #sbin  ⇒ Pathname 
    
    
  
  
  
  
  
  
  
  
  
    
The directory where the formula's
sbinbinaries should be installed. - #selective_patch(is_data: false) ⇒ void private
 - #serialized_requirements ⇒ Array<Hash{String => T.untyped}> private
 - 
  
    
      #service  ⇒ Homebrew::Service 
    
    
  
  
  
  
  
  
  
  private
  
    
The service specification for the software.
 - 
  
    
      #service?  ⇒ Boolean 
    
    
  
  
  
  
  
  
  
  private
  
    
Is a service specification defined for the software?.
 - 
  
    
      #service_name  ⇒ String 
    
    
  
  
  
  
  
  
  
  private
  
    
The generated service name.
 - 
  
    
      #share  ⇒ Pathname 
    
    
  
  
  
  
  
  
  
  
  
    
The directory where the formula's shared files should be installed.
 - 
  
    
      #shared_library(name, version = nil)  ⇒ String 
    
    
  
  
  
  
  
  
  
  
  
    
Shared library names according to platform conventions.
 - #skip_clean?(path) ⇒ Boolean private
 - #skip_cxxstdlib_check? ⇒ Boolean private
 - 
  
    
      #specified_name  ⇒ String 
    
    
  
  
  
  
  
  
  
  private
  
    
The name specified to find this formula.
 - 
  
    
      #specified_path  ⇒ Pathname? 
    
    
  
  
  
  
  
  
  
  private
  
    
The path that was specified to find this formula.
 - 
  
    
      #stable?  ⇒ Boolean 
    
    
  
  
  
  
  
  
  
  private
  
    
Is the currently active SoftwareSpec a #stable build?.
 - 
  
    
      #std_cabal_v2_args  ⇒ Array<String> 
    
    
  
  
  
  
  
  
  
  
  
    
Standard parameters for Cabal-v2 builds.
 - 
  
    
      #std_cargo_args(root: prefix, path: ".")  ⇒ Array<String> 
    
    
  
  
  
  
  
  
  
  
  
    
Standard parameters for Cargo builds.
 - 
  
    
      #std_cmake_args(install_prefix: prefix, install_libdir: "lib", find_framework: "LAST")  ⇒ Array<String> 
    
    
  
  
  
  
  
  
  
  
  
    
Standard parameters for CMake builds.
 - 
  
    
      #std_configure_args(prefix: self.prefix, libdir: "lib")  ⇒ Array<String> 
    
    
  
  
  
  
  
  
  
  
  
    
Standard parameters for configure builds.
 - 
  
    
      #std_go_args(output: bin/name, ldflags: nil, gcflags: nil, tags: nil)  ⇒ Array<String> 
    
    
  
  
  
  
  
  
  
  
  
    
Standard parameters for Go builds.
 - 
  
    
      #std_meson_args  ⇒ Array<String> 
    
    
  
  
  
  
  
  
  
  
  
    
Standard parameters for Meson builds.
 - 
  
    
      #std_npm_args(prefix: libexec)  ⇒ Array<String> 
    
    
  
  
  
  
  
  
  
  
  
    
Standard parameters for npm builds.
 - 
  
    
      #std_pip_args(prefix: self.prefix, build_isolation: false)  ⇒ Array<String> 
    
    
  
  
  
  
  
  
  
  
  
    
Standard parameters for pip builds.
 - 
  
    
      #std_zig_args(prefix: self.prefix, release_mode: :fast)  ⇒ Array<String> 
    
    
  
  
  
  
  
  
  
  
  
    
Standard parameters for Zig builds.
 - 
  
    
      #supersedes_an_installed_formula?  ⇒ Boolean 
    
    
  
  
  
  
  
  
  
  private
  
    
Is this formula the target of an alias used to install an old formula?.
 - 
  
    
      #synced_with_other_formulae?  ⇒ Boolean 
    
    
  
  
  
  
  
  
  
  private
  
    
Whether this Formula is version-synced with other formulae.
 - 
  
    
      #system(cmd, *args)  ⇒ void 
    
    
  
  
  
  
  
  
  
  
  
    
To call out to the system, we use the
systemmethod and we prefer you give the args separately as in the line below, otherwise a subshell has to be opened first. - 
  
    
      #systemd_service_path  ⇒ Pathname 
    
    
  
  
  
  
  
  
  
  private
  
    
The generated systemd Formula.service file path.
 - 
  
    
      #systemd_timer_path  ⇒ Pathname 
    
    
  
  
  
  
  
  
  
  private
  
    
The generated systemd timer file path.
 - 
  
    
      #tap?  ⇒ Boolean 
    
    
  
  
  
  
  
  
  
  private
  
    
True if this formula is provided by an external Tap.
 - #tap_git_head ⇒ String? private
 - #tap_path ⇒ Pathname private
 - #test ⇒ Boolean? private
 - #test_defined? ⇒ Boolean private
 - #test_fixtures(file) ⇒ Pathname private
 - 
  
    
      #time  ⇒ Time 
    
    
  
  
  
  
  
  
  
  private
  
    
Creates a new
Timeobject for use in the formula as the build time. - #to_hash ⇒ Hash{String => T.untyped} private
 - #to_hash_with_variations ⇒ Hash{String => T.untyped} private
 - #unlock ⇒ Array<FormulaLock> private
 - #unpin(*args, &block) ⇒ T.untyped private
 - #update_head_version ⇒ void private
 - #urls_hash ⇒ Hash{String => Hash{String => T.untyped}} private
 - 
  
    
      #valid_platform?  ⇒ Boolean 
    
    
  
  
  
  
  
  
  
  private
  
    
True if this formula can be installed on this platform.
 - 
  
    
      #var  ⇒ Pathname 
    
    
  
  
  
  
  
  
  
  
  
    
The directory where the formula's variable files should be installed.
 - 
  
    
      #version  ⇒ T.untyped 
    
    
  
  
  
  
  
  
  
  private
  
    
The version for the currently active SoftwareSpec.
 - 
  
    
      #versioned_formula?  ⇒ Boolean 
    
    
  
  
  
  
  
  
  
  private
  
    
If this is a
@-versioned formula. - 
  
    
      #versioned_formulae  ⇒ Array<Formula> 
    
    
  
  
  
  
  
  
  
  private
  
    
Returns any
@-versioned Formula objects for any Formula (including versioned formulae). - 
  
    
      #versioned_formulae_names  ⇒ Array<String> 
    
    
  
  
  
  
  
  
  
  private
  
    
Returns any other
@-versioned formulae names for any Formula (including versioned formulae). - 
  
    
      #with_logging(log_type, &_block)  ⇒ void 
    
    
  
  
  
  
  
  
  
  private
  
    
Runs a block with the given log type in effect for its duration.
 - 
  
    
      #xcodebuild(*args)  ⇒ void 
    
    
  
  
  
  
  
  
  
  private
  
    
Runs
xcodebuildwithout Homebrew's compiler environment variables set. - 
  
    
      #zsh_completion  ⇒ Pathname 
    
    
  
  
  
  
  
  
  
  
  
    
The directory where the formula's
zshcompletion files should be installed. - 
  
    
      #zsh_function  ⇒ Pathname 
    
    
  
  
  
  
  
  
  
  
  
    
The directory where the formula's
zshfunction files should be installed. 
Methods included from OnSystem::MacOSAndLinux
included, on_arch_conditional, on_macos, on_system_conditional
Methods included from BuildEnvironment::DSL
Methods included from Cachable
Methods included from APIHashable
generated_hash!, generating_hash!, generating_hash?
Methods included from Utils::Output::Mixin
odebug, odeprecated, odie, odisabled, ofail, oh1, oh1_title, ohai, ohai_title, onoe, opoo, opoo_outside_github_actions, pretty_duration, pretty_installed, pretty_outdated, pretty_uninstalled
Methods included from Context
current, current=, #debug?, #quiet?, #verbose?, #with_context
Methods included from Utils::Shell
csh_quote, export_value, from_path, parent, preferred, preferred_path, prepend_path_in_profile, profile, set_variable_in_profile, sh_quote, shell_with_prompt
Methods included from Utils::Shebang
Constructor Details
#initialize(name, path, spec, alias_path: nil, tap: nil, force_bottle: false) ⇒ 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.
      244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 270 271 272 273 274 275 276 277 278 279 280 281 282 283 284 285 286 287 288 289 290 291 292 293 294 295 296  | 
    
      # File 'formula.rb', line 244 def initialize(name, path, spec, alias_path: nil, tap: nil, force_bottle: false) # Only allow instances of subclasses. The base class does not hold any spec information (URLs etc). raise "Do not call `Formula.new' directly without a subclass." unless self.class < Formula # Stop any subsequent modification of a formula's definition. # Changes do not propagate to existing instances of formulae. # Now that we have an instance, it's too late to make any changes to the class-level definition. self.class.freeze @name = T.let(name, String) @unresolved_path = T.let(path, Pathname) @path = T.let(path.resolved_path, Pathname) @alias_path = T.let(alias_path, T.nilable(Pathname)) @alias_name = T.let((File.basename(alias_path) if alias_path), T.nilable(String)) @revision = T.let(self.class.revision || 0, Integer) @version_scheme = T.let(self.class.version_scheme || 0, Integer) @compatibility_version = T.let(self.class.compatibility_version, T.nilable(Integer)) @head = T.let(nil, T.nilable(SoftwareSpec)) @stable = T.let(nil, T.nilable(SoftwareSpec)) @autobump = T.let(true, T::Boolean) @no_autobump_message = T.let(nil, T.nilable(T.any(String, Symbol))) @force_bottle = T.let(force_bottle, T::Boolean) @tap = T.let(tap, T.nilable(Tap)) @tap ||= if path == Formulary.core_path(name) CoreTap.instance else Tap.from_path(path) end @pypi_packages_info = T.let(self.class.pypi_packages_info || PypiPackages.from_json_file(@tap, @name), PypiPackages) @full_name = T.let(T.must(full_name_with_optional_tap(name)), String) @full_alias_name = T.let(full_name_with_optional_tap(@alias_name), T.nilable(String)) self.class.spec_syms.each do |sym| spec_eval sym end @active_spec = T.let(determine_active_spec(spec), SoftwareSpec) @active_spec_sym = T.let(head? ? :head : :stable, Symbol) validate_attributes! @build = T.let(active_spec.build, T.any(BuildOptions, Tab)) @pin = T.let(FormulaPin.new(self), FormulaPin) @follow_installed_alias = T.let(true, T::Boolean) @prefix_returns_versioned_prefix = T.let(false, T.nilable(T::Boolean)) @oldname_locks = T.let([], T::Array[FormulaLock]) @on_system_blocks_exist = T.let(false, T::Boolean) @fully_loaded_formula = T.let(nil, T.nilable(Formula)) end  | 
  
Class Attribute Details
.api_source ⇒ Hash{String => T.untyped}? (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.
Whether this formula was loaded using the formulae.brew.sh API.
      3518 3519 3520  | 
    
      # File 'formula.rb', line 3518 def api_source @api_source end  | 
  
.conflicts ⇒ Array<FormulaConflict>? (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.
      3729 3730 3731  | 
    
      # File 'formula.rb', line 3729 def conflicts @conflicts end  | 
  
.deprecation_date ⇒ Date? (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.
The date of deprecation of a Formula.
      4663 4664 4665  | 
    
      # File 'formula.rb', line 4663 def deprecation_date @deprecation_date end  | 
  
.deprecation_reason ⇒ String, ... (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.
The reason for deprecation of a Formula.
      4670 4671 4672  | 
    
      # File 'formula.rb', line 4670 def deprecation_reason @deprecation_reason end  | 
  
.deprecation_replacement_cask ⇒ String? (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.
The replacement cask for a deprecated Formula.
      4684 4685 4686  | 
    
      # File 'formula.rb', line 4684 def deprecation_replacement_cask @deprecation_replacement_cask end  | 
  
.deprecation_replacement_formula ⇒ String? (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.
The replacement formula for a deprecated Formula.
      4677 4678 4679  | 
    
      # File 'formula.rb', line 4677 def deprecation_replacement_formula @deprecation_replacement_formula end  | 
  
.disable_date ⇒ Date? (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.
The date that this Formula was or becomes disabled.
Returns nil if no date is specified.
      4762 4763 4764  | 
    
      # File 'formula.rb', line 4762 def disable_date @disable_date end  | 
  
.disable_reason ⇒ String, ... (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.
The reason this Formula is disabled.
Returns nil if no reason was provided or the formula is not disabled.
      4769 4770 4771  | 
    
      # File 'formula.rb', line 4769 def disable_reason @disable_reason end  | 
  
.disable_replacement_cask ⇒ String? (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.
The replacement cask for a disabled Formula.
Returns nil if no reason was provided or the formula is not disabled.
      4783 4784 4785  | 
    
      # File 'formula.rb', line 4783 def disable_replacement_cask @disable_replacement_cask end  | 
  
.disable_replacement_formula ⇒ String? (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.
The replacement formula for a disabled Formula.
Returns nil if no reason was provided or the formula is not disabled.
      4776 4777 4778  | 
    
      # File 'formula.rb', line 4776 def disable_replacement_formula @disable_replacement_formula end  | 
  
.keg_only_reason ⇒ KegOnlyReason? (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.
The reason for why this software is not linked (by default) to HOMEBREW_PREFIX.
      3527 3528 3529  | 
    
      # File 'formula.rb', line 3527 def keg_only_reason @keg_only_reason end  | 
  
.link_overwrite_paths ⇒ Set<String>? (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.
      3735 3736 3737  | 
    
      # File 'formula.rb', line 3735 def link_overwrite_paths @link_overwrite_paths end  | 
  
.no_autobump_message ⇒ String, ... (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.
Message that explains why the formula was excluded from the autobump list.
Returns nil if no message is specified.
      4502 4503 4504  | 
    
      # File 'formula.rb', line 4502 def @no_autobump_message end  | 
  
.pour_bottle_check_unsatisfied_reason ⇒ 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.
If pour_bottle? returns false: the user-visible reason to display for
why they cannot use the bottle.
      3743 3744 3745  | 
    
      # File 'formula.rb', line 3743 def pour_bottle_check_unsatisfied_reason @pour_bottle_check_unsatisfied_reason end  | 
  
.pour_bottle_only_if ⇒ Symbol? (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.
      3738 3739 3740  | 
    
      # File 'formula.rb', line 3738 def pour_bottle_only_if @pour_bottle_only_if end  | 
  
.pypi_packages_info ⇒ PypiPackages? (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.
      3530 3531 3532  | 
    
      # File 'formula.rb', line 3530 def pypi_packages_info @pypi_packages_info end  | 
  
.skip_clean_paths ⇒ Set<String, Symbol>? (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.
      3732 3733 3734  | 
    
      # File 'formula.rb', line 3732 def skip_clean_paths @skip_clean_paths end  | 
  
Instance Attribute Details
#active_log_type ⇒ String? (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.
When performing a build, test, or other loggable action, indicates which log file location to use.
      214 215 216  | 
    
      # File 'formula.rb', line 214 def active_log_type @active_log_type end  | 
  
#active_spec=(spec_sym) ⇒ 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.
      299 300 301 302 303 304 305 306 307 308 309 310 311 312 313  | 
    
      # File 'formula.rb', line 299 def active_spec=(spec_sym) spec = send(spec_sym) raise FormulaSpecificationError, "#{spec_sym} spec is not available for #{full_name}" unless spec old_spec_sym = @active_spec_sym @active_spec = spec @active_spec_sym = spec_sym validate_attributes! @build = active_spec.build return if spec_sym == old_spec_sym Dependency.clear_cache Requirement.clear_cache end  | 
  
#active_spec_sym ⇒ Symbol (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.
A symbol to indicate currently active SoftwareSpec.
It's either :stable or :head.
      174 175 176  | 
    
      # File 'formula.rb', line 174 def active_spec_sym @active_spec_sym end  | 
  
#alias_name ⇒ String? (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.
The name of the alias that was used to identify this Formula.
e.g. another-name-for-this-formula
      115 116 117  | 
    
      # File 'formula.rb', line 115 def alias_name @alias_name end  | 
  
#alias_path ⇒ Pathname? (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.
The path to the alias that was used to identify this Formula.
e.g. /usr/local/Library/Taps/homebrew/homebrew-core/Aliases/another-name-for-this-formula
      110 111 112  | 
    
      # File 'formula.rb', line 110 def alias_path @alias_path end  | 
  
#build ⇒ BuildOptions, Tab
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.
The BuildOptions or Tab for this Formula. Lists the arguments passed and any options in the Formula. Note that these may differ at different times during the installation of a Formula. This is annoying but is the result of state that we're trying to eliminate.
      221 222 223  | 
    
      # File 'formula.rb', line 221 def build @build end  | 
  
#buildpath ⇒ Pathname? (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.
The current working directory during builds.
Will only be non-nil inside #install.
      199 200 201  | 
    
      # File 'formula.rb', line 199 def buildpath @buildpath end  | 
  
#compatibility_version ⇒ Integer? (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.
Used to indicate API/ABI compatibility for dependencies.
      194 195 196  | 
    
      # File 'formula.rb', line 194 def compatibility_version @compatibility_version end  | 
  
#follow_installed_alias ⇒ Boolean Also known as: follow_installed_alias?
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.
Whether this formula should be considered outdated if the target of the alias it was installed with has since changed. Defaults to true.
      232 233 234  | 
    
      # File 'formula.rb', line 232 def follow_installed_alias @follow_installed_alias end  | 
  
#force_bottle ⇒ Boolean
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.
Whether or not to force the use of a bottle.
      238 239 240  | 
    
      # File 'formula.rb', line 238 def force_bottle @force_bottle end  | 
  
#full_alias_name ⇒ String? (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.
The fully-qualified alias referring to this Formula.
For core formulae it's the same as #alias_name.
e.g. homebrew/tap-name/another-name-for-this-formula
      129 130 131  | 
    
      # File 'formula.rb', line 129 def full_alias_name @full_alias_name end  | 
  
#full_name ⇒ String (readonly)
      123 124 125  | 
    
      # File 'formula.rb', line 123 def full_name @full_name end  | 
  
#head ⇒ SoftwareSpec? (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.
The HEAD SoftwareSpec for this Formula.
Installed when using brew install --HEAD.
This is always installed with the version HEAD and taken from the latest
commit in the version control system.
nil if there is no HEAD version.
      161 162 163  | 
    
      # File 'formula.rb', line 161 def head @head end  | 
  
#local_bottle_path ⇒ Pathname?
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.
When installing a bottle (binary package) from a local path this will be
set to the full path to the bottle tarball. If not, it will be nil.
      209 210 211  | 
    
      # File 'formula.rb', line 209 def local_bottle_path @local_bottle_path end  | 
  
#name ⇒ String (readonly)
The name of this Formula.
e.g. this-formula
      105 106 107  | 
    
      # File 'formula.rb', line 105 def name @name end  | 
  
#path ⇒ Pathname (readonly)
The full path to this Formula.
e.g. /usr/local/Library/Taps/homebrew/homebrew-core/Formula/t/this-formula.rb
      136 137 138  | 
    
      # File 'formula.rb', line 136 def path @path end  | 
  
#pinned? ⇒ Boolean (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.
      1843  | 
    
      # File 'formula.rb', line 1843 delegate pinned?: :@pin  | 
  
#pypi_packages_info ⇒ PypiPackages (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.
Information about PyPI mappings for this Formula is stored as PypiPackages object.
      226 227 228  | 
    
      # File 'formula.rb', line 226 def pypi_packages_info @pypi_packages_info end  | 
  
#revision ⇒ Integer (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.
Used for creating new Homebrew versions of software without new upstream versions.
      184 185 186  | 
    
      # File 'formula.rb', line 184 def revision @revision end  | 
  
#source_modified_time ⇒ Time? (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.
The most recent modified time for source files.
      178 179 180  | 
    
      # File 'formula.rb', line 178 def source_modified_time @source_modified_time end  | 
  
#stable ⇒ SoftwareSpec? (readonly)
This method is part of an internal API. This method may only be used internally in repositories owned by Homebrew, except in casks or formulae. Third parties should avoid using this method if possible, as it may be removed or changed without warning.
The stable (and default) SoftwareSpec for this Formula. This contains all the attributes (e.g. URL, checksum) that apply to the stable version of this formula.
      151 152 153  | 
    
      # File 'formula.rb', line 151 def stable @stable end  | 
  
#tap ⇒ Tap? (readonly)
This method is part of an internal API. This method may only be used internally in repositories owned by Homebrew, except in casks or formulae. Third parties should avoid using this method if possible, as it may be removed or changed without warning.
The Tap instance associated with this Formula.
If it's nil, then this formula is loaded from a path or URL.
      143 144 145  | 
    
      # File 'formula.rb', line 143 def tap @tap end  | 
  
#testpath ⇒ Pathname? (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.
The current working directory during tests.
Will only be non-nil inside test.
      204 205 206  | 
    
      # File 'formula.rb', line 204 def testpath @testpath end  | 
  
#version_scheme ⇒ Integer (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.
Used to change version schemes for packages.
      189 190 191  | 
    
      # File 'formula.rb', line 189 def version_scheme @version_scheme end  | 
  
Class Method Details
.[](name) ⇒ Formula
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.
      2425 2426 2427  | 
    
      # File 'formula.rb', line 2425 def self.[](name) Formulary.factory(name) end  | 
  
.alias_full_names ⇒ Array<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.
An array of all aliases as fully-qualified names.
      2412 2413 2414  | 
    
      # File 'formula.rb', line 2412 def self.alias_full_names @alias_full_names ||= T.let(core_aliases + tap_aliases, T.nilable(T::Array[String])) end  | 
  
.aliases ⇒ Array<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.
An array of all aliases.
      2404 2405 2406 2407 2408  | 
    
      # File 'formula.rb', line 2404 def self.aliases @aliases ||= T.let((core_aliases + tap_aliases.map do |name| name.split("/").fetch(-1) end).uniq.sort, T.nilable(T::Array[String])) end  | 
  
.all(eval_all: false) ⇒ Array<Formula>
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.
An array of each known Formula.
Can only be used when users specify --eval-all with a command or set HOMEBREW_EVAL_ALL=1.
      2333 2334 2335 2336 2337 2338 2339 2340 2341 2342 2343 2344 2345 2346 2347  | 
    
      # File 'formula.rb', line 2333 def self.all(eval_all: false) if !eval_all && !Homebrew::EnvConfig.eval_all? raise ArgumentError, "Formula#all cannot be used without `--eval-all` or `HOMEBREW_EVAL_ALL=1`" end (core_names + tap_files).filter_map do |name_or_file| Formulary.factory(name_or_file) rescue FormulaUnavailableError, FormulaUnreadableError => e # Don't let one broken formula break commands. But do complain. onoe "Failed to import: #{name_or_file}" $stderr.puts e nil end end  | 
  
.allow_network_access!(phases = []) ⇒ 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.
The phases for which network access is allowed. By default, network
access is allowed for all phases. Valid phases are :build, :test,
and :postinstall. When no argument is passed, network access will be
allowed for all phases.
Examples
allow_network_access!
allow_network_access! :build
allow_network_access! [:build, :test]
  
      3628 3629 3630 3631 3632 3633 3634 3635 3636 3637 3638 3639  | 
    
      # File 'formula.rb', line 3628 def allow_network_access!(phases = []) phases_array = Array(phases) if phases_array.empty? network_access_allowed.each_key { |phase| network_access_allowed[phase] = true } else phases_array.each do |phase| raise ArgumentError, "Unknown phase: #{phase}" unless SUPPORTED_NETWORK_ACCESS_PHASES.include?(phase) network_access_allowed[phase] = true end end end  | 
  
.autobump? ⇒ Boolean
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.
Is the formula in the autobump list?
      4489 4490 4491  | 
    
      # File 'formula.rb', line 4489 def autobump? @autobump != false # @autobump may be `nil` end  | 
  
.bottle(&block) ⇒ void
This method returns an undefined value.
Adds a bottle SoftwareSpec. This provides a pre-built binary package built by the Homebrew maintainers for you. It will be installed automatically if there is a binary package for your platform and you haven't passed or previously used any options on this formula.
If you maintain your own repository, you can add your own bottle links. You can ignore this block entirely if submitting to Homebrew/homebrew-core. It'll be handled for you by the Brew Test Bot.
bottle do
  root_url "https://example.com" # Optional root to calculate bottle URLs.
  rebuild 1 # Marks the old bottle as outdated without bumping the version/revision of the formula.
  # Optionally specify the HOMEBREW_CELLAR in which the bottles were built.
  sha256 cellar: "/brew/Cellar", catalina:    "ef65c759c5097a36323fa9c77756468649e8d1980a3a4e05695c05e39568967c"
  sha256 cellar: :any,           mojave:      "28f4090610946a4eb207df102d841de23ced0d06ba31cb79e040d883906dcd4f"
  sha256                         high_sierra: "91dd0caca9bd3f38c439d5a7b6f68440c4274945615fae035ff0a369264b8a2f"
end
Homebrew maintainers aim to bottle all formulae.
      3911  | 
    
      # File 'formula.rb', line 3911 def bottle(&block) = stable.bottle(&block)  | 
  
.build ⇒ BuildOptions
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.
      3914  | 
    
      # File 'formula.rb', line 3914 def build = stable.build  | 
  
.build_flags ⇒ Array<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.
Get the BUILD_FLAGS from the formula's namespace set in Formulary::load_formula.
      3918 3919 3920 3921 3922 3923 3924  | 
    
      # File 'formula.rb', line 3918 def build_flags namespace = T.must(to_s.split("::")[0..-2]).join("::") return [] if namespace.empty? mod = const_get(namespace) mod.const_get(:BUILD_FLAGS) end  | 
  
.compatibility_version(val = T.unsafe(nil)) ⇒ Integer?
Used to indicate API/ABI compatibility for dependencies. If a formula has
a compatibility_version of 1, then it need not be upgraded when
installing or upgrading dependencies as long as dependencies are known to
work with versions of the formula that have compatibility_version 1.
nil if unset.
Example
compatibility_version 1
  
      3797 3798 3799  | 
    
      # File 'formula.rb', line 3797 def compatibility_version(val = T.unsafe(nil)) val.nil? ? @compatibility_version : @compatibility_version = T.let(val, T.nilable(Integer)) end  | 
  
.conflicts_with(*names) ⇒ void
This method returns an undefined value.
One or more formulae that conflict with this one and why.
Example
conflicts_with "imagemagick", because: "both install `convert` binaries"
  
      4257 4258 4259 4260  | 
    
      # File 'formula.rb', line 4257 def conflicts_with(*names) opts = T.let(names.last.is_a?(Hash) ? names.pop : {}, T::Hash[Symbol, T.untyped]) names.each { |name| T.must(conflicts) << FormulaConflict.new(name, opts[:because]) } end  | 
  
.core_alias_files ⇒ Array<Pathname>
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.
An array of all alias files of core Formulae.
      2386 2387 2388  | 
    
      # File 'formula.rb', line 2386 def self.core_alias_files CoreTap.instance.alias_files end  | 
  
.core_aliases ⇒ Array<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.
An array of all core aliases.
      2392 2393 2394  | 
    
      # File 'formula.rb', line 2392 def self.core_aliases CoreTap.instance.aliases end  | 
  
.core_names ⇒ Array<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.
An array of all core Formula names.
      2300 2301 2302  | 
    
      # File 'formula.rb', line 2300 def self.core_names CoreTap.instance.formula_names end  | 
  
.cxxstdlib_check(check_type) ⇒ void
This method returns an undefined value.
Pass :skip to this method to disable post-install stdlib checking.
      4349 4350 4351 4352  | 
    
      # File 'formula.rb', line 4349 def cxxstdlib_check(check_type) # odeprecated "`cxxstdlib_check :skip`" define_method(:skip_cxxstdlib_check?) { true } if check_type == :skip end  | 
  
.deny_network_access!(phases = []) ⇒ 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.
The phases for which network access is denied. By default, network
access is allowed for all phases. Valid phases are :build, :test,
and :postinstall. When no argument is passed, network access will be
denied for all phases.
Examples
deny_network_access!
deny_network_access! :build
deny_network_access! [:build, :test]
  
      3660 3661 3662 3663 3664 3665 3666 3667 3668 3669 3670 3671  | 
    
      # File 'formula.rb', line 3660 def deny_network_access!(phases = []) phases_array = Array(phases) if phases_array.empty? network_access_allowed.each_key { |phase| network_access_allowed[phase] = false } else phases_array.each do |phase| raise ArgumentError, "Unknown phase: #{phase}" unless SUPPORTED_NETWORK_ACCESS_PHASES.include?(phase) network_access_allowed[phase] = false end end end  | 
  
.depends_on(dep) ⇒ void
This method returns an undefined value.
The dependencies for this formula. Use strings for the names of other
formulae. Homebrew provides some :special Requirements for stuff
that needs extra handling (often changing some ENV vars or
deciding whether to use the system provided version).
Examples
:build means this dependency is only needed during build.
depends_on "cmake" => :build
:test means this dependency is only needed during testing.
depends_on "node" => :test
:recommended dependencies are built by default.
But a --without-... option is generated to opt-out.
depends_on "readline" => :recommended
:optional dependencies are NOT built by default unless the
auto-generated --with-... option is passed.
depends_on "glib" => :optional
If you need to specify that another formula has to be built with/out
certain options (note, no -- needed before the option):
depends_on "zeromq" => "with-pgm"
depends_on "qt" => ["with-qtdbus", "developer"] # Multiple options.
Optional and enforce that "boost" is built using --with-c++11.
depends_on "boost" => [:optional, "with-c++11"]
If a dependency is only needed in certain cases:
depends_on "sqlite" if MacOS.version >= :catalina
depends_on xcode: :build # If the formula really needs full Xcode to compile.
depends_on macos: :mojave # Needs at least macOS Mojave (10.14) to run.
It is possible to only depend on something if
build.with? or build.without? "another_formula":
depends_on "postgresql" if build.without? "sqlite"
  
      4123 4124 4125  | 
    
      # File 'formula.rb', line 4123 def depends_on(dep) specs.each { |spec| spec.depends_on(dep) } end  | 
  
.deprecate!(date:, because:, replacement: nil, replacement_formula: nil, replacement_cask: nil) ⇒ void
replace legacy replacement with replacement_formula or replacement_cask
This method returns an undefined value.
Deprecates a Formula (on the given date) so a warning is shown on each installation. If the date has not yet passed the formula will not be deprecated.
Examples
deprecate! date: "2020-08-27", because: :unmaintained
deprecate! date: "2020-08-27", because: "has been replaced by foo"
deprecate! date: "2020-08-27", because: "has been replaced by foo", replacement_formula: "foo"
deprecate! date: "2020-08-27", because: "has been replaced by foo", replacement_cask: "foo"
  
      4628 4629 4630 4631 4632 4633 4634 4635 4636 4637 4638 4639 4640 4641 4642 4643 4644 4645 4646 4647  | 
    
      # File 'formula.rb', line 4628 def deprecate!(date:, because:, replacement: nil, replacement_formula: nil, replacement_cask: nil) if [replacement, replacement_formula, replacement_cask].filter_map(&:presence).length > 1 raise ArgumentError, "more than one of replacement, replacement_formula and/or replacement_cask specified!" end if replacement odeprecated( "deprecate!(:replacement)", "deprecate!(:replacement_formula) or deprecate!(:replacement_cask)", ) end @deprecation_date = T.let(Date.parse(date), T.nilable(Date)) return if T.must(@deprecation_date) > Date.today @deprecation_reason = T.let(because, T.nilable(T.any(String, Symbol))) @deprecation_replacement_formula = T.let(replacement_formula.presence || replacement, T.nilable(String)) @deprecation_replacement_cask = T.let(replacement_cask.presence || replacement, T.nilable(String)) T.must(@deprecated = T.let(true, T.nilable(T::Boolean))) end  | 
  
.deprecated? ⇒ Boolean
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.
Whether this Formula is deprecated (i.e. warns on installation). Defaults to false.
      4654 4655 4656  | 
    
      # File 'formula.rb', line 4654 def deprecated? @deprecated == true end  | 
  
.deprecated_option(hash) ⇒ void
This method returns an undefined value.
Deprecated options are used to rename options and migrate users who used
them to newer ones. They are mostly used for migrating non-with options
(e.g. enable-debug) to with options (e.g. with-debug).
Example
deprecated_option "enable-debug" => "with-debug"
  
      4186 4187 4188  | 
    
      # File 'formula.rb', line 4186 def deprecated_option(hash) specs.each { |spec| spec.deprecated_option(hash) } end  | 
  
.desc(val = T.unsafe(nil)) ⇒ String?
A one-line description of the software. Used by users to get an overview
of the software and Homebrew maintainers.
Shows when running brew info.
Example
desc "Example formula"
  
      3544 3545 3546  | 
    
      # File 'formula.rb', line 3544 def desc(val = T.unsafe(nil)) val.nil? ? @desc : @desc = T.let(val, T.nilable(String)) end  | 
  
.disable!(date:, because:, replacement: nil, replacement_formula: nil, replacement_cask: nil) ⇒ void
replace legacy replacement with replacement_formula or replacement_cask
This method returns an undefined value.
Disables a Formula (on the given date) so it cannot be installed. If the date has not yet passed the formula will be deprecated instead of disabled.
Examples
disable! date: "2020-08-27", because: :does_not_build
disable! date: "2020-08-27", because: "has been replaced by foo"
disable! date: "2020-08-27", because: "has been replaced by foo", replacement_formula: "foo"
disable! date: "2020-08-27", because: "has been replaced by foo", replacement_cask: "foo"
  
      4720 4721 4722 4723 4724 4725 4726 4727 4728 4729 4730 4731 4732 4733 4734 4735 4736 4737 4738 4739 4740 4741 4742 4743 4744 4745 4746  | 
    
      # File 'formula.rb', line 4720 def disable!(date:, because:, replacement: nil, replacement_formula: nil, replacement_cask: nil) if [replacement, replacement_formula, replacement_cask].filter_map(&:presence).length > 1 raise ArgumentError, "more than one of replacement, replacement_formula and/or replacement_cask specified!" end if replacement odeprecated( "disable!(:replacement)", "disable!(:replacement_formula) or deprecate!(:replacement_cask)", ) end @disable_date = T.let(Date.parse(date), T.nilable(Date)) if T.must(@disable_date) > Date.today @deprecation_reason = T.let(because, T.nilable(T.any(String, Symbol))) @deprecation_replacement_formula = T.let(replacement_formula.presence || replacement, T.nilable(String)) @deprecation_replacement_cask = T.let(replacement_cask.presence || replacement, T.nilable(String)) @deprecated = T.let(true, T.nilable(T::Boolean)) return end @disable_reason = T.let(because, T.nilable(T.any(String, Symbol))) @disable_replacement_formula = T.let(replacement_formula.presence || replacement, T.nilable(String)) @disable_replacement_cask = T.let(replacement_cask.presence || replacement, T.nilable(String)) @disabled = T.let(true, T.nilable(T::Boolean)) end  | 
  
.disabled? ⇒ Boolean
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.
Whether this Formula is disabled (i.e. cannot be installed). Defaults to false.
      4753 4754 4755  | 
    
      # File 'formula.rb', line 4753 def disabled? @disabled == true end  | 
  
.fails_with(compiler, &block) ⇒ void
This method returns an undefined value.
Marks the Formula as failing with a particular compiler so it will fall back to others.
Examples
For Apple compilers, this should be in the format:
fails_with :clang do
  build 600
  cause "multiple configure and compile errors"
end
The block may be omitted and if present, the build may be omitted; if so, then the compiler will not be allowed for all versions.
major_version should be the major release number only, for instance
'7' for the GCC 7 series (7.0, 7.1, etc.).
If version or the block is omitted, then the compiler will
not be allowed for all compilers in that series.
For example, if a bug is only triggered on GCC 7.1 but is not encountered on 7.2:
fails_with :gcc => '7' do
  version '7.1'
end
  
      4386 4387 4388  | 
    
      # File 'formula.rb', line 4386 def fails_with(compiler, &block) specs.each { |spec| spec.fails_with(compiler, &block) } end  | 
  
.freeze ⇒ T.self_type
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.
      3495 3496 3497 3498 3499 3500 3501 3502 3503  | 
    
      # File 'formula.rb', line 3495 def freeze specs.each(&:freeze) @livecheck.freeze @conflicts.freeze @skip_clean_paths.freeze @link_overwrite_paths.freeze @preserve_rpath&.freeze super end  | 
  
.full_names ⇒ Array<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.
An array of all Formula names, which the tap formulae have as the fully-qualified name.
      2326 2327 2328  | 
    
      # File 'formula.rb', line 2326 def self.full_names @full_names ||= T.let(core_names + tap_names, T.nilable(T::Array[String])) end  | 
  
.fuzzy_search(name) ⇒ Array<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.
Returns a list of approximately matching formula names, but not the complete match.
      2418 2419 2420 2421 2422  | 
    
      # File 'formula.rb', line 2418 def self.fuzzy_search(name) @spell_checker ||= T.let(DidYouMean::SpellChecker.new(dictionary: Set.new(names + full_names).to_a), T.nilable(DidYouMean::SpellChecker)) T.cast(@spell_checker.correct(name), T::Array[String]) end  | 
  
.head(val = nil, specs = {}, &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.
Adds a head SoftwareSpec.
This can be installed by passing the --HEAD option to allow
installing software directly from a branch of a version-control repository.
If called as a method this provides just the url for the SoftwareSpec.
If a block is provided you can also add depends_on and Patches just to the head SoftwareSpec.
The download strategies (e.g. :using =>) are the same as for url.
Git repositories must always specify branch:.
Example
head "https://we.prefer.https.over.git.example.com/.git", branch: "main"
head "https://example.com/.git", branch: "name_of_branch"
or (if autodetect fails):
head "https://hg.is.awesome.but.git.has.won.example.com/", using: :hg
  
      3977 3978 3979 3980 3981 3982 3983 3984 3985  | 
    
      # File 'formula.rb', line 3977 def head(val = nil, specs = {}, &block) if block T.must(@head).instance_eval(&block) elsif val T.must(@head).url(val, specs) else @head end end  | 
  
.homepage(val = T.unsafe(nil)) ⇒ String?
The homepage for the software. Used by users to get more information
about the software and Homebrew maintainers as a point of contact for
e.g. submitting patches.
Can be opened with running brew home.
Example
homepage "https://www.example.com"
  
      3695 3696 3697  | 
    
      # File 'formula.rb', line 3695 def homepage(val = T.unsafe(nil)) val.nil? ? @homepage : @homepage = T.let(val, T.nilable(String)) end  | 
  
.inherited(child) ⇒ 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.
Initialise instance variables for each subclass. These need to be initialised before the class is frozen, and some DSL may never be called so it can't be done lazily.
      3472 3473 3474 3475 3476 3477 3478 3479 3480 3481 3482 3483 3484 3485 3486 3487 3488 3489 3490 3491 3492  | 
    
      # File 'formula.rb', line 3472 def inherited(child) super child.instance_eval do # Ensure this is synced with `freeze` @stable = T.let(SoftwareSpec.new(flags: build_flags), T.nilable(SoftwareSpec)) @head = T.let(HeadSoftwareSpec.new(flags: build_flags), T.nilable(HeadSoftwareSpec)) @livecheck = T.let(Livecheck.new(self), T.nilable(Livecheck)) @conflicts = T.let([], T.nilable(T::Array[FormulaConflict])) @skip_clean_paths = T.let(Set.new, T.nilable(T::Set[T.any(String, Symbol)])) @link_overwrite_paths = T.let(Set.new, T.nilable(T::Set[String])) @loaded_from_api = T.let(false, T.nilable(T::Boolean)) @loaded_from_stub = T.let(false, T.nilable(T::Boolean)) @api_source = T.let(nil, T.nilable(T::Hash[String, T.untyped])) @on_system_blocks_exist = T.let(false, T.nilable(T::Boolean)) @network_access_allowed = T.let(SUPPORTED_NETWORK_ACCESS_PHASES.to_h do |phase| [phase, DEFAULT_NETWORK_ACCESS_ALLOWED] end, T.nilable(T::Hash[Symbol, T::Boolean])) @preserve_rpath = T.let(false, T.nilable(T::Boolean)) @pypi_packages_info = T.let(nil, T.nilable(PypiPackages)) end end  | 
  
.installed ⇒ Array<Formula>
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.
An array of all installed Formulae.
      2369 2370 2371 2372 2373 2374 2375  | 
    
      # File 'formula.rb', line 2369 def self.installed Formula.cache[:installed] ||= racks.flat_map do |rack| Formulary.from_rack(rack) rescue [] end.uniq(&:name) end  | 
  
.installed_formula_names ⇒ Array<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.
An array of all currently installed formula names.
      2363 2364 2365  | 
    
      # File 'formula.rb', line 2363 def self.installed_formula_names racks.map { |rack| rack.basename.to_s } end  | 
  
.installed_with_alias_path(alias_path) ⇒ Array<Formula>
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.
      2378 2379 2380 2381 2382  | 
    
      # File 'formula.rb', line 2378 def self.installed_with_alias_path(alias_path) return [] if alias_path.nil? installed.select { |f| f.installed_alias_path == alias_path } end  | 
  
.keg_only(reason, explanation = "") ⇒ void
This method returns an undefined value.
Software that will not be symlinked into the brew --prefix and will
only live in its Cellar. Other formulae can depend on it and Homebrew
will add the necessary includes, libraries and other paths while
building that other formula.
Keg-only formulae are not in your PATH and are not seen by compilers if you build your own software outside of Homebrew. This way, we don't shadow software provided by macOS.
Examples
keg_only :provided_by_macos
keg_only :versioned_formulae
keg_only "because I want it so"
  
      4341 4342 4343  | 
    
      # File 'formula.rb', line 4341 def keg_only(reason, explanation = "") @keg_only_reason = T.let(KegOnlyReason.new(reason, explanation), T.nilable(KegOnlyReason)) end  | 
  
.license(args = nil) ⇒ String, ...
The SPDX ID of the open-source license that the formula uses.
Shows when running brew info.
Use :any_of, :all_of or :with to describe complex license expressions.
:any_of should be used when the user can choose which license to use.
:all_of should be used when the user must use all licenses.
:with should be used to specify a valid SPDX exception.
Add + to an identifier to indicate that the formula can be
licensed under later versions of the same license.
Examples
license "BSD-2-Clause"
license "EPL-1.0+"
license any_of: ["MIT", "GPL-2.0-only"]
license all_of: ["MIT", "GPL-2.0-only"]
license "GPL-2.0-only" => { with: "LLVM-exception" }
license :public_domain
license any_of: [
  "MIT",
  :public_domain,
  all_of: ["0BSD", "Zlib", "Artistic-1.0+"],
  "Apache-2.0" => { with: "LLVM-exception" },
]
  
      3601 3602 3603 3604 3605 3606 3607  | 
    
      # File 'formula.rb', line 3601 def license(args = nil) if args.nil? @licenses else @licenses = T.let(args, T.nilable(T.any(String, Symbol, T::Hash[T.any(String, Symbol), T.anything]))) end end  | 
  
.link_overwrite(*paths) ⇒ Set<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.
Permit overwriting certain files while linking.
Examples
Sometimes we accidentally install files outside the prefix. Once we fix that, users will get a link conflict error. Overwrite those files with:
link_overwrite "bin/foo", "lib/bar"
link_overwrite "share/man/man1/baz-*"
  
      4800 4801 4802 4803  | 
    
      # File 'formula.rb', line 4800 def link_overwrite(*paths) paths.flatten! T.must(link_overwrite_paths).merge(paths) end  | 
  
.livecheck(&block) ⇒ T.untyped
Livecheck can be used to check for newer versions of the software.
This method evaluates the DSL specified in the livecheck block of the
Formula (if it exists) and sets the instance variables of a Livecheck
object accordingly. This is used by brew livecheck to check for newer
versions of the software.
Example
livecheck do
  skip "Not maintained"
  url "https://example.com/foo/releases"
  regex /foo-(\d+(?:\.\d+)+)\.tar/
end
  
      4463 4464 4465 4466 4467 4468  | 
    
      # File 'formula.rb', line 4463 def livecheck(&block) return @livecheck unless block @livecheck_defined = T.let(true, T.nilable(T::Boolean)) @livecheck.instance_eval(&block) end  | 
  
.livecheck_defined? ⇒ Boolean
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.
Checks whether a livecheck specification is defined or not.
It returns true when a livecheck block is present in the Formula
and false otherwise.
      3704 3705 3706  | 
    
      # File 'formula.rb', line 3704 def livecheck_defined? @livecheck_defined == true end  | 
  
.livecheckable? ⇒ Boolean
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.
Use livecheck_defined? instead.
Checks whether a livecheck specification is defined or not. This is a
legacy alias for #livecheck_defined?.
It returns true when a livecheck block is present in the Formula
and false otherwise.
      3714 3715 3716 3717  | 
    
      # File 'formula.rb', line 3714 def livecheckable? odisabled "`livecheckable?`", "`livecheck_defined?`" @livecheck_defined == true end  | 
  
.loaded_from_api? ⇒ Boolean
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.
Whether this formula was loaded using the formulae.brew.sh API.
      3510  | 
    
      # File 'formula.rb', line 3510 def loaded_from_api? = !!@loaded_from_api  | 
  
.loaded_from_stub? ⇒ Boolean
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.
Whether this formula was loaded using the internal formulae.brew.sh API.
      3514  | 
    
      # File 'formula.rb', line 3514 def loaded_from_stub? = !!@loaded_from_stub  | 
  
.mirror(val) ⇒ void
This method returns an undefined value.
Additional URLs for the stable version of the formula. These are only used if the url fails to download. It's optional and there can be more than one. Generally we add them when the main url is unreliable. If url is really unreliable then we may swap the mirror and url.
Example
mirror "https://in.case.the.host.is.down.example.com"
mirror "https://in.case.the.mirror.is.down.example.com
  
      3868  | 
    
      # File 'formula.rb', line 3868 def mirror(val) = stable.mirror(val)  | 
  
.names ⇒ Array<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.
An array of all Formula names.
      2318 2319 2320 2321 2322  | 
    
      # File 'formula.rb', line 2318 def self.names @names ||= T.let((core_names + tap_names.map do |name| name.split("/").fetch(-1) end).uniq.sort, T.nilable(T::Array[String])) end  | 
  
.needs(*standards) ⇒ void
This method returns an undefined value.
Marks the Formula as needing a certain standard, so Homebrew will fall back to other compilers if the default compiler does not implement that standard.
We generally prefer to depends_on a desired compiler and to
explicitly use that compiler in a formula's #install block,
rather than implicitly finding a suitable compiler with needs.
      4402 4403 4404  | 
    
      # File 'formula.rb', line 4402 def needs(*standards) specs.each { |spec| spec.needs(*standards) } end  | 
  
.network_access_allowed ⇒ Hash{Symbol => Boolean}
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.
      3506  | 
    
      # File 'formula.rb', line 3506 def network_access_allowed = T.must(@network_access_allowed)  | 
  
.network_access_allowed?(phase) ⇒ Boolean
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.
Whether the specified phase should be forced offline.
      3675 3676 3677 3678 3679 3680  | 
    
      # File 'formula.rb', line 3675 def network_access_allowed?(phase) raise ArgumentError, "Unknown phase: #{phase}" unless SUPPORTED_NETWORK_ACCESS_PHASES.include?(phase) env_var = Homebrew::EnvConfig.send(:"formula_#{phase}_network") env_var.nil? ? network_access_allowed[phase] : env_var == "allow" end  | 
  
.no_autobump!(because:) ⇒ void
limit this method to the official taps only
(e.g. raise an error if !tap.official?)
This method returns an undefined value.
Exclude the formula from the autobump list.
      4477 4478 4479 4480 4481 4482 4483 4484 4485  | 
    
      # File 'formula.rb', line 4477 def no_autobump!(because:) if because.is_a?(Symbol) && !NO_AUTOBUMP_REASONS_LIST.key?(because) raise ArgumentError, "'because' argument should use valid symbol or a string!" end @no_autobump_defined = T.let(true, T.nilable(T::Boolean)) @no_autobump_message = T.let(because, T.nilable(T.any(String, Symbol))) @autobump = T.let(false, T.nilable(T::Boolean)) end  | 
  
.no_autobump_defined? ⇒ Boolean
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.
Is a no_autobump! method defined?
      4495  | 
    
      # File 'formula.rb', line 4495 def no_autobump_defined? = @no_autobump_defined == true  | 
  
.on_system_blocks_exist? ⇒ Boolean
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.
Whether this formula contains OS/arch-specific blocks
(e.g. on_macos, on_arm, on_monterey :or_older, on_system :linux, macos: :big_sur_or_newer).
      3523  | 
    
      # File 'formula.rb', line 3523 def on_system_blocks_exist? = !!@on_system_blocks_exist  | 
  
.option(name, description = "") ⇒ void
This method returns an undefined value.
Options can be used as arguments to brew install.
To switch features on/off: "with-something" or "with-otherthing".
To use other software: "with-other-software" or "without-foo".
Note that for depends_on that are :optional or :recommended, options
are generated automatically.
There are also some special options:
:universal: build a universal binary/library (e.g. on newer Intel Macs this means a combined x86_64/x86 binary/library).
Examples
option "with-spam", "The description goes here without a dot at the end"
option "with-qt", "Text here overwrites what's autogenerated by 'depends_on "qt" => :optional'"
option :universal
  
      4170 4171 4172  | 
    
      # File 'formula.rb', line 4170 def option(name, description = "") specs.each { |spec| spec.option(name, description) } end  | 
  
.patch(strip = :p1, src = nil, &block) ⇒ void
This method returns an undefined value.
External patches can be declared using resource-style blocks.
Examples
patch do
  url "https://example.com/example_patch.diff"
  sha256 "c6bc3f48ce8e797854c4b865f6a8ff969867bbcaebd648ae6fd825683e59fef2"
end
A strip level of -p1 is assumed. It can be overridden using a symbol
argument:
patch :p0 do
  url "https://example.com/example_patch.diff"
  sha256 "c6bc3f48ce8e797854c4b865f6a8ff969867bbcaebd648ae6fd825683e59fef2"
end
Patches can be declared in stable and head blocks. This form is preferred over using conditionals.
stable do
  patch do
    url "https://example.com/example_patch.diff"
    sha256 "c6bc3f48ce8e797854c4b865f6a8ff969867bbcaebd648ae6fd825683e59fef2"
  end
end
Embedded (__END__) patches are declared like so:
patch :DATA
patch :p0, :DATA
Patches can also be embedded by passing a string. This makes it possible to provide multiple embedded patches while making only some of them conditional.
patch :p0, "..."
  
      4243 4244 4245  | 
    
      # File 'formula.rb', line 4243 def patch(strip = :p1, src = nil, &block) specs.each { |spec| spec.patch(strip, src, &block) } end  | 
  
.pour_bottle?(only_if: nil, &block) ⇒ void
This method returns an undefined value.
Defines whether the Formula's bottle can be used on the given Homebrew installation.
Examples
If the bottle requires the Xcode CLT to be installed a Formula would declare:
pour_bottle? do
  reason "The bottle needs the Xcode CLT to be installed."
  satisfy { MacOS::CLT.installed? }
end
If satisfy returns false then a bottle will not be used and instead
the Formula will be built from source and reason will be printed.
Alternatively, a preset reason can be passed as a symbol:
pour_bottle? only_if: :clt_installed
  
      4556 4557 4558 4559 4560 4561 4562 4563 4564 4565 4566 4567 4568 4569 4570 4571 4572 4573 4574 4575 4576 4577 4578 4579 4580 4581 4582 4583 4584 4585 4586 4587 4588 4589 4590 4591 4592  | 
    
      # File 'formula.rb', line 4556 def pour_bottle?(only_if: nil, &block) @pour_bottle_check = T.let(PourBottleCheck.new(self), T.nilable(PourBottleCheck)) @pour_bottle_only_if = T.let(only_if, T.nilable(Symbol)) if only_if.present? && block.present? raise ArgumentError, "Do not pass both a preset condition and a block to `pour_bottle?`" end block ||= case only_if when :clt_installed lambda do |_| on_macos do T.bind(self, PourBottleCheck) reason(+<<~EOS) The bottle needs the Xcode Command Line Tools to be installed at /Library/Developer/CommandLineTools. Development tools provided by Xcode.app are not sufficient. You can install the Xcode Command Line Tools, if desired, with: xcode-select --install EOS satisfy { MacOS::CLT.installed? } end end when :default_prefix lambda do |_| T.bind(self, PourBottleCheck) reason(<<~EOS) The bottle (and many others) needs to be installed into #{Homebrew::DEFAULT_PREFIX}. EOS satisfy { HOMEBREW_PREFIX.to_s == Homebrew::DEFAULT_PREFIX } end else raise ArgumentError, "Invalid preset `pour_bottle?` condition" if only_if.present? end @pour_bottle_check.instance_eval(&T.unsafe(block)) end  | 
  
.preserve_rpath(value: true) ⇒ Boolean
Preserve @rpath install names when fixing dynamic linkage on macOS.
By default, Homebrew rewrites library install names (including those starting
with @rpath) to use absolute paths. This can break tools like macdeployqt
that expect @rpath-based install names to remain unchanged.
Call this method to skip rewriting install names that start with @rpath.
Example
preserve_rpath
  
      4304 4305 4306  | 
    
      # File 'formula.rb', line 4304 def preserve_rpath(value: true) @preserve_rpath = value end  | 
  
.preserve_rpath? ⇒ Boolean
This method is part of an internal API. This method may only be used internally in repositories owned by Homebrew, except in casks or formulae. Third parties should avoid using this method if possible, as it may be removed or changed without warning.
Check if @rpath install names should be preserved.
      4312 4313 4314  | 
    
      # File 'formula.rb', line 4312 def preserve_rpath? @preserve_rpath == true end  | 
  
.pypi_packages(package_name: nil, extra_packages: nil, exclude_packages: nil, dependencies: nil, needs_manual_update: false) ⇒ 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.
Adds information about PyPI formula mapping as PypiPackages object. It provides a way to specify package name in PyPI repository, define extra packages, or remove them (e.g. if formula installs them as a dependency).
Examples of usage:
# It will use information about the PyPI package `foo` to update resources
pypi_packages package_name: "foo"
Add "extra" packages and remove unneeded ones
depends_on "numpy"
pypi_packages extra_packages: "setuptools", exclude_packages: "numpy"
# Special case: empty `package_name` allows to skip resource updates for non-extra packages
pypi_packages package_name: "", extra_packages: "setuptools"
  
      4013 4014 4015 4016 4017 4018 4019 4020 4021 4022 4023 4024 4025 4026 4027 4028 4029 4030 4031 4032 4033 4034 4035 4036  | 
    
      # File 'formula.rb', line 4013 def pypi_packages( package_name: nil, extra_packages: nil, exclude_packages: nil, dependencies: nil, needs_manual_update: false ) if needs_manual_update @pypi_packages_info = PypiPackages.new needs_manual_update: true return end if [package_name, extra_packages, exclude_packages, dependencies].all?(&:nil?) raise ArgumentError, "must provide at least one argument" end # Sadly `v1, v2, v3 = [v1, v2, v3].map { |x| Array(x) }` does not work # for typechecker extra_packages = Array(extra_packages) exclude_packages = Array(exclude_packages) dependencies = Array(dependencies) @pypi_packages_info = PypiPackages.new(package_name:, extra_packages:, exclude_packages:, dependencies:) end  | 
  
.racks ⇒ Array<Pathname>
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.
An array of all racks currently installed.
      2351 2352 2353 2354 2355 2356 2357 2358 2359  | 
    
      # File 'formula.rb', line 2351 def self.racks Formula.cache[:racks] ||= if HOMEBREW_CELLAR.directory? HOMEBREW_CELLAR.subdirs.reject do |rack| rack.symlink? || rack.basename.to_s.start_with?(".") || rack.subdirs.empty? end else [] end end  | 
  
.resource(name, klass = Resource, &block) ⇒ void
This method returns an undefined value.
Additional downloads can be defined as resources and accessed in the install method. Resources can also be defined inside a stable or head block. This mechanism replaces ad-hoc "subformula" classes.
Example
resource "additional_files" do
  url "https://example.com/additional-stuff.tar.gz"
  sha256 "c6bc3f48ce8e797854c4b865f6a8ff969867bbcaebd648ae6fd825683e59fef2"
end
  
      4053 4054 4055 4056 4057  | 
    
      # File 'formula.rb', line 4053 def resource(name, klass = Resource, &block) specs.each do |spec| spec.resource(name, klass, &block) unless spec.resource_defined?(name) end end  | 
  
.revision(val = T.unsafe(nil)) ⇒ Integer?
Used for creating new Homebrew versions of software without new upstream
versions. For example, if we bump the major version of a library that this
Formula depends_on then we may need to update the revision of this
Formula to install a new version linked against the new library version.
0 if unset.
Example
revision 1
  
      3759 3760 3761  | 
    
      # File 'formula.rb', line 3759 def revision(val = T.unsafe(nil)) val.nil? ? @revision : @revision = T.let(val, T.nilable(Integer)) end  | 
  
.service(&block) ⇒ T.proc.returns(T.untyped)?
Service can be used to define services.
This method evaluates the DSL specified in the service block of the
Formula (if it exists) and sets the instance variables of a Service
object accordingly. This is used by brew install to generate a service file.
Example
service do
  run [opt_bin/"foo"]
end
  
      4519 4520 4521 4522 4523  | 
    
      # File 'formula.rb', line 4519 def service(&block) return @service_block unless block @service_block = T.let(block, T.nilable(T.proc.returns(T.untyped))) end  | 
  
.service? ⇒ Boolean
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.
Checks whether a service specification is defined or not.
It returns true when a service block is present in the Formula
and false otherwise.
      3724 3725 3726  | 
    
      # File 'formula.rb', line 3724 def service? @service_block.present? end  | 
  
.sha256(val) ⇒ void
This method returns an undefined value.
To verify the cached download's integrity and security we verify the
SHA-256 hash matches what we've declared in the Formula. To quickly fill
this value you can leave it blank and run brew fetch --force and it'll
tell you the currently valid value.
Example
sha256 "2a2ba417eebaadcb4418ee7b12fe2998f26d6e6f7fda7983412ff66a741ab6f7"
  
      3884  | 
    
      # File 'formula.rb', line 3884 def sha256(val) = stable.sha256(val)  | 
  
.skip_clean(*paths) ⇒ Set<String, Symbol>
Skip cleaning paths in a formula.
Sometimes the formula cleaner breaks things.
Examples
Preserve cleaned paths with:
skip_clean "bin/foo", "lib/bar"
Keep .la files with:
skip_clean :la
  
      4282 4283 4284 4285 4286  | 
    
      # File 'formula.rb', line 4282 def skip_clean(*paths) paths.flatten! # Specifying :all is deprecated and will become an error T.must(skip_clean_paths).merge(paths) end  | 
  
.spec_syms ⇒ Array<Symbol>
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.
      3802  | 
    
      # File 'formula.rb', line 3802 def spec_syms = [:stable, :head].freeze  | 
  
.specs ⇒ Array<SoftwareSpec>
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.
A list of the stable and head SoftwareSpecs.
      3806 3807 3808 3809 3810  | 
    
      # File 'formula.rb', line 3806 def specs spec_syms.map do |sym| send(sym) end.freeze end  | 
  
.stable(&block) ⇒ T.untyped
Allows adding depends_on and Patches just to the stable SoftwareSpec. This is required instead of using a conditional. It is preferable to also pull the url and sha256 into the block if one is added.
Example
stable do
  url "https://example.com/foo-1.0.tar.gz"
  sha256 "2a2ba417eebaadcb4418ee7b12fe2998f26d6e6f7fda7983412ff66a741ab6f7"
  depends_on "libxml2"
  depends_on "libffi"
end
  
      3944 3945 3946 3947 3948  | 
    
      # File 'formula.rb', line 3944 def stable(&block) return T.must(@stable) unless block T.must(@stable).instance_eval(&block) end  | 
  
.tap_aliases ⇒ Array<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.
An array of all tap aliases.
      2398 2399 2400  | 
    
      # File 'formula.rb', line 2398 def self.tap_aliases @tap_aliases ||= T.let(Tap.reject(&:core_tap?).flat_map(&:aliases).sort, T.nilable(T::Array[String])) end  | 
  
.tap_files ⇒ Array<Pathname>
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.
An array of all tap Formula files.
      2312 2313 2314  | 
    
      # File 'formula.rb', line 2312 def self.tap_files @tap_files ||= T.let(Tap.reject(&:core_tap?).flat_map(&:formula_files), T.nilable(T::Array[Pathname])) end  | 
  
.tap_names ⇒ Array<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.
An array of all tap Formula names.
      2306 2307 2308  | 
    
      # File 'formula.rb', line 2306 def self.tap_names @tap_names ||= T.let(Tap.reject(&:core_tap?).flat_map(&:formula_names).sort, T.nilable(T::Array[String])) end  | 
  
.test(&block) ⇒ T.untyped
A test is required for new formulae and makes us happy.
The block will create, run in and delete a temporary directory.
We want tests that don't require any user input
and test the basic functionality of the application.
For example, foo build-foo input.foo is a good test
and foo --version or foo --help are bad tests.
However, a bad test is better than no test at all.
Examples
(testpath/"test.file").write <<~EOS
  writing some test file, if you need to
EOS
assert_equal "OK", shell_output("test_command test.file").strip
Need complete control over stdin, stdout?
require "open3"
Open3.popen3("#{bin}/example", "argument") do |stdin, stdout, _|
  stdin.write("some text")
  stdin.close
  assert_equal "result", stdout.read
end
The test will fail if it returns false, or if an exception is raised.
Failed assertions and failed system commands will raise exceptions.
      4443  | 
    
      # File 'formula.rb', line 4443 def test(&block) = define_method(:test, &block)  | 
  
.url(val = T.unsafe(nil), specs = {}) ⇒ String
The URL used to download the source for the stable version of the formula.
We prefer https for security and proxy reasons.
If not inferable, specify the download strategy with using: ....
:git,:hg,:svn,:bzr,:fossil,:cvs,:curl(normal file download, will also extract):homebrew_curl(use brewedcurl):nounzip(without extracting):post(download via an HTTP POST request)
Examples
url "https://packed.sources.and.we.prefer.https.example.com/archive-1.2.3.tar.bz2"
url "https://some.dont.provide.archives.example.com",
    using:    :git,
    tag:      "1.2.3",
    revision: "db8e4de5b2d6653f66aea53094624468caad15d2"
  
      3837  | 
    
      # File 'formula.rb', line 3837 def url(val = T.unsafe(nil), specs = {}) = stable.url(val, specs)  | 
  
.uses_from_macos(dep, bounds = {}) ⇒ void
This method returns an undefined value.
Indicates use of dependencies provided by macOS.
On macOS this is a no-op (as we use the provided system libraries) unless
:since specifies a minimum macOS version.
On Linux this will act as depends_on.
      4139 4140 4141  | 
    
      # File 'formula.rb', line 4139 def uses_from_macos(dep, bounds = {}) specs.each { |spec| spec.uses_from_macos(dep, bounds) } end  | 
  
.version(val = nil) ⇒ Version?
The version string for the stable version of the formula. The version is autodetected from the URL and/or tag so only needs to be declared if it cannot be autodetected correctly.
Example
version "1.2-final"
  
      3851  | 
    
      # File 'formula.rb', line 3851 def version(val = nil) = stable.version(val)  | 
  
.version_scheme(val = T.unsafe(nil)) ⇒ Integer?
Used for creating new Homebrew version schemes. For example, if we want
to change version scheme from one to another, then we may need to update
version_scheme of this Formula to be able to use new version scheme,
e.g. to move from 20151020 scheme to 1.0.0 we need to increment
version_scheme. Without this, the prior scheme will always equate to a
higher version.
0 if unset.
Example
version_scheme 1
  
      3779 3780 3781  | 
    
      # File 'formula.rb', line 3779 def version_scheme(val = T.unsafe(nil)) val.nil? ? @version_scheme : @version_scheme = T.let(val, T.nilable(Integer)) end  | 
  
Instance Method Details
#active_log_prefix ⇒ 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.
The prefix, if any, to use in filenames for logging current activity.
      1296 1297 1298 1299 1300 1301 1302  | 
    
      # File 'formula.rb', line 1296 def active_log_prefix if active_log_type "#{active_log_type}." else "" end end  | 
  
#alias_changed? ⇒ Boolean
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.
Has the alias used to install the formula changed, or are different formulae already installed with this alias?
      1808 1809 1810  | 
    
      # File 'formula.rb', line 1808 def alias_changed? installed_alias_target_changed? || supersedes_an_installed_formula? end  | 
  
#aliases ⇒ Array<String>
This method is part of an internal API. This method may only be used internally in repositories owned by Homebrew, except in casks or formulae. Third parties should avoid using this method if possible, as it may be removed or changed without warning.
All aliases for the formula.
      731 732 733 734 735 736 737 738 739  | 
    
      # File 'formula.rb', line 731 def aliases @aliases ||= T.let( if (tap = self.tap) tap.alias_reverse_table.fetch(full_name, []).map { _1.split("/").fetch(-1) } else [] end, T.nilable(T::Array[String]) ) end  | 
  
#allow_network_access!(*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/formula.rbi', line 10 def allow_network_access!(*args, &block); end  | 
  
#any_installed_keg ⇒ Keg?
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 a Keg for the opt_prefix or installed_prefix if they exist.
If not, return nil.
      2502 2503 2504 2505 2506 2507  | 
    
      # File 'formula.rb', line 2502 def any_installed_keg Formula.cache[:any_installed_keg] ||= {} Formula.cache[:any_installed_keg][full_name] ||= if (installed_prefix = any_installed_prefix) Keg.new(installed_prefix) end end  | 
  
#any_installed_prefix ⇒ Pathname?
This method is part of an internal API. This method may only be used internally in repositories owned by Homebrew, except in casks or formulae. Third parties should avoid using this method if possible, as it may be removed or changed without warning.
Get the path of any installed prefix.
      2513 2514 2515 2516 2517 2518 2519  | 
    
      # File 'formula.rb', line 2513 def any_installed_prefix if optlinked? && opt_prefix.exist? opt_prefix elsif (latest_installed_prefix = installed_prefixes.last) latest_installed_prefix end end  | 
  
#any_installed_version ⇒ PkgVersion?
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 PkgVersion for this formula if it is installed.
If not, return nil.
      2524 2525 2526  | 
    
      # File 'formula.rb', line 2524 def any_installed_version any_installed_keg&.version end  | 
  
#any_version_installed? ⇒ Boolean
If at least one version of Formula is installed.
      793 794 795  | 
    
      # File 'formula.rb', line 793 def any_version_installed? installed_prefixes.any? { |keg| (keg/AbstractTab::FILENAME).file? } end  | 
  
#api_source ⇒ 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.
The API source data used to load this formula.
Returns nil if the formula was not loaded from the API.
      603  | 
    
      # File 'formula.rb', line 603 delegate api_source: :"self.class"  | 
  
#autobump? ⇒ Boolean
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.
Is the formula in the autobump list?
      561  | 
    
      # File 'formula.rb', line 561 delegate autobump?: :"self.class"  | 
  
#bash_completion ⇒ Pathname
The directory where the formula's bash completion files should be
installed.
This is symlinked into HOMEBREW_PREFIX after installation or with
brew link for formulae that are not keg-only.
      1255  | 
    
      # File 'formula.rb', line 1255 def bash_completion = prefix/"etc/bash_completion.d"  | 
  
#bin ⇒ Pathname
The directory where the formula's binaries should be installed.
This is symlinked into HOMEBREW_PREFIX after installation or with
brew link for formulae that are not keg-only.
Examples
Need to install into the #bin but the makefile doesn't mkdir -p prefix/bin?
bin.mkpath
No make install available?
bin.install "binary1"
  
      953  | 
    
      # File 'formula.rb', line 953 def bin = prefix/"bin"  | 
  
#bottle ⇒ Bottle?
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.
The Bottle object for the currently active SoftwareSpec.
      513 514 515  | 
    
      # File 'formula.rb', line 513 def bottle @bottle ||= T.let(Bottle.new(self, bottle_specification), T.nilable(Bottle)) if bottled? end  | 
  
#bottle_defined?(*args, &block) ⇒ Boolean
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/formula.rbi', line 19 def bottle_defined?(*args, &block); end  | 
  
#bottle_for_tag(tag = nil) ⇒ Bottle?
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.
The Bottle object for given tag.
      519 520 521  | 
    
      # File 'formula.rb', line 519 def bottle_for_tag(tag = nil) Bottle.new(self, bottle_specification, tag) if bottled?(tag) end  | 
  
#bottle_hash ⇒ Hash{String => 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.
Returns the bottle information for a formula.
      2778 2779 2780 2781 2782 2783 2784 2785 2786 2787 2788 2789 2790 2791 2792 2793 2794 2795 2796 2797 2798 2799 2800 2801 2802 2803 2804 2805 2806  | 
    
      # File 'formula.rb', line 2778 def bottle_hash hash = {} stable_spec = stable return hash unless stable_spec return hash unless bottle_defined? bottle_spec = stable_spec.bottle_specification hash["rebuild"] = bottle_spec.rebuild hash["root_url"] = bottle_spec.root_url hash["files"] = {} bottle_spec.collector.each_tag do |tag| tag_spec = bottle_spec.collector.specification_for(tag, no_older_versions: true) os_cellar = tag_spec.cellar os_cellar = os_cellar.inspect if os_cellar.is_a?(Symbol) checksum = tag_spec.checksum.hexdigest file_hash = {} file_hash["cellar"] = os_cellar filename = Bottle::Filename.create(self, tag, bottle_spec.rebuild) path, = Utils::Bottles.path_resolved_basename(bottle_spec.root_url, name, checksum, filename) file_hash["url"] = "#{bottle_spec.root_url}/#{path}" file_hash["sha256"] = checksum hash["files"][tag.to_sym] = file_hash end hash end  | 
  
#bottle_prefix ⇒ Pathname
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.
The directory used for as the prefix for #etc and #var files on
installation so, despite not being in HOMEBREW_CELLAR, they are installed
there after pouring a bottle.
      1288  | 
    
      # File 'formula.rb', line 1288 def bottle_prefix = prefix/".bottle"  | 
  
#bottle_specification(*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/formula.rbi', line 22 def bottle_specification(*args, &block); end  | 
  
#bottle_tab_attributes ⇒ Hash{String => 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.
      3365 3366 3367 3368 3369  | 
    
      # File 'formula.rb', line 3365 def bottle_tab_attributes return {} unless bottled? T.must(bottle).tab_attributes end  | 
  
#bottle_tag?(*args, &block) ⇒ Boolean
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/formula.rbi', line 25 def bottle_tag?(*args, &block); end  | 
  
#bottled?(*args, &block) ⇒ Boolean
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/formula.rbi', line 28 def bottled?(*args, &block); end  | 
  
#brew(fetch: true, keep_tmp: false, debug_symbols: false, interactive: false, &_blk) ⇒ 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.
Yields |self,staging| with current working directory set to the uncompressed tarball
where staging is a Mktemp staging context.
      1667 1668 1669 1670 1671 1672 1673 1674 1675 1676 1677 1678 1679 1680 1681 1682 1683 1684 1685 1686 1687 1688 1689 1690 1691 1692 1693 1694 1695 1696 1697 1698  | 
    
      # File 'formula.rb', line 1667 def brew(fetch: true, keep_tmp: false, debug_symbols: false, interactive: false, &_blk) @prefix_returns_versioned_prefix = T.let(true, T.nilable(T::Boolean)) active_spec.fetch if fetch stage(interactive:, debug_symbols:) do |staging| staging.retain! if keep_tmp || debug_symbols prepare_patches fetch_patches if fetch begin yield self, staging rescue staging.retain! if interactive || debug? raise ensure %w[ config.log CMakeCache.txt CMakeConfigureLog.yaml meson-log.txt ].each do |logfile| Dir["**/#{logfile}"].each do |logpath| destdir = logs/File.dirname(logpath) mkdir_p destdir cp logpath, destdir end end end end ensure @prefix_returns_versioned_prefix = T.let(false, T.nilable(T::Boolean)) 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.
      31  | 
    
      # File 'sorbet/rbi/dsl/formula.rbi', line 31 def cached_download(*args, &block); end  | 
  
#caveats ⇒ 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.
Warn the user about any Homebrew-specific issues or quirks for this package. These should not contain setup instructions that would apply to installation through a different package manager on a different OS.
Example
def caveats
  <<~EOS
    Are optional. Something the user must be warned about?
  EOS
end
def caveats
  s = <<~EOS
    Print some important notice to the user when `brew info [formula]` is
    called or when brewing a formula.
    This is optional. You can use all the vars like #{version} here.
  EOS
  s += "Some issue only on older systems" if MacOS.version < :monterey
  s
end
  
      1499  | 
    
      # File 'formula.rb', line 1499 def caveats = nil  | 
  
#caveats_with_placeholders ⇒ 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.
      2861 2862 2863 2864  | 
    
      # File 'formula.rb', line 2861 def caveats_with_placeholders caveats&.gsub(HOMEBREW_PREFIX, HOMEBREW_PREFIX_PLACEHOLDER) &.gsub(HOMEBREW_CELLAR, HOMEBREW_CELLAR_PLACEHOLDER) 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.
      34  | 
    
      # File 'sorbet/rbi/dsl/formula.rbi', line 34 def clear_cache(*args, &block); end  | 
  
#compiler_failures(*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/formula.rbi', line 37 def compiler_failures(*args, &block); end  | 
  
#conflicts ⇒ Array<FormulaConflict>
This method is part of an internal API. This method may only be used internally in repositories owned by Homebrew, except in casks or formulae. Third parties should avoid using this method if possible, as it may be removed or changed without warning.
Returns a list of FormulaConflict objects indicating any formulae that conflict with this one and why.
      2472  | 
    
      # File 'formula.rb', line 2472 def conflicts = T.must(self.class.conflicts)  | 
  
#core_formula? ⇒ Boolean
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.
True if this formula is provided by Homebrew itself.
      2431 2432 2433  | 
    
      # File 'formula.rb', line 2431 def core_formula? !!tap&.core_tap? end  | 
  
#current_installed_alias_target ⇒ Formula?
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.
      1787 1788 1789  | 
    
      # File 'formula.rb', line 1787 def current_installed_alias_target Formulary.factory(T.must(full_installed_alias_name)) if installed_alias_path end  | 
  
#declared_deps(*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/formula.rbi', line 40 def declared_deps(*args, &block); end  | 
  
#deny_network_access!(*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/formula.rbi', line 43 def deny_network_access!(*args, &block); end  | 
  
#dependencies_hash ⇒ Hash{String => 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.
      2867 2868 2869 2870 2871 2872 2873 2874 2875 2876 2877 2878 2879 2880 2881 2882 2883 2884 2885 2886 2887 2888 2889 2890 2891 2892 2893 2894 2895 2896 2897 2898 2899 2900 2901 2902 2903 2904 2905 2906 2907 2908 2909 2910 2911 2912 2913 2914 2915 2916 2917 2918 2919 2920 2921 2922 2923 2924 2925 2926 2927 2928 2929  | 
    
      # File 'formula.rb', line 2867 def dependencies_hash # Create a hash of spec names (stable/head) to the list of dependencies under each dependencies = self.class.spec_syms.to_h do |sym| [sym, send(sym)&.declared_deps] end # Implicit dependencies are only needed when installing from source # since they are only used to download and unpack source files. # @see DependencyCollector dependencies.transform_values! { |deps| deps&.reject(&:implicit?) } hash = {} dependencies.each do |spec_sym, spec_deps| next if spec_deps.nil? dep_hash = if spec_sym == :stable hash else next if spec_deps == dependencies[:stable] hash["#{spec_sym}_dependencies"] ||= {} end dep_hash["build_dependencies"] = spec_deps.select(&:build?) .reject(&:uses_from_macos?) .map(&:name) .uniq dep_hash["dependencies"] = spec_deps.reject(&:optional?) .reject(&:recommended?) .reject(&:build?) .reject(&:test?) .reject(&:uses_from_macos?) .map(&:name) .uniq dep_hash["test_dependencies"] = spec_deps.select(&:test?) .reject(&:uses_from_macos?) .map(&:name) .uniq dep_hash["recommended_dependencies"] = spec_deps.select(&:recommended?) .reject(&:uses_from_macos?) .map(&:name) .uniq dep_hash["optional_dependencies"] = spec_deps.select(&:optional?) .reject(&:uses_from_macos?) .map(&:name) .uniq uses_from_macos_deps = spec_deps.select(&:uses_from_macos?).uniq dep_hash["uses_from_macos"] = uses_from_macos_deps.map do |dep| if dep..length >= 2 { dep.name => dep. } elsif dep..present? { dep.name => dep..first } else dep.name end end dep_hash["uses_from_macos_bounds"] = uses_from_macos_deps.map(&:bounds) end hash end  | 
  
#deprecated? ⇒ Boolean
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.
Whether this Formula is deprecated (i.e. warns on installation). Defaults to false.
      1565  | 
    
      # File 'formula.rb', line 1565 delegate deprecated?: :"self.class"  | 
  
#deprecated_flags(*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/formula.rbi', line 49 def deprecated_flags(*args, &block); end  | 
  
#deprecated_options(*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/formula.rbi', line 52 def (*args, &block); end  | 
  
#deprecation_date ⇒ 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.
The date that this Formula was or becomes deprecated.
Returns nil if no date is specified.
      1572  | 
    
      # File 'formula.rb', line 1572 delegate deprecation_date: :"self.class"  | 
  
#deprecation_reason ⇒ 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.
The reason this Formula is deprecated.
Returns nil if no reason is specified or the formula is not deprecated.
      1579  | 
    
      # File 'formula.rb', line 1579 delegate deprecation_reason: :"self.class"  | 
  
#deprecation_replacement_cask ⇒ 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.
The replacement cask for this deprecated Formula.
Returns nil if no replacement is specified or the formula is not deprecated.
      1593  | 
    
      # File 'formula.rb', line 1593 delegate deprecation_replacement_cask: :"self.class"  | 
  
#deprecation_replacement_formula ⇒ 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.
The replacement formula for this deprecated Formula.
Returns nil if no replacement is specified or the formula is not deprecated.
      1586  | 
    
      # File 'formula.rb', line 1586 delegate deprecation_replacement_formula: :"self.class"  | 
  
#deps(*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.
      67  | 
    
      # File 'sorbet/rbi/dsl/formula.rbi', line 67 def deps(*args, &block); end  | 
  
#desc ⇒ 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.
The description of the software.
      526  | 
    
      # File 'formula.rb', line 526 delegate desc: :"self.class"  | 
  
#deuniversalize_machos(*targets) ⇒ void
      2097 2098 2099 2100 2101 2102 2103 2104 2105 2106 2107 2108 2109  | 
    
      # File 'formula.rb', line 2097 def deuniversalize_machos(*targets) if targets.none? targets = any_installed_keg&.mach_o_files&.select do |file| file.arch == :universal && file.archs.include?(Hardware::CPU.arch) end end raise "No universal binaries found to deuniversalize" if targets.blank? targets.compact.each do |target| extract_macho_slice_from(Pathname(target), Hardware::CPU.arch) end end  | 
  
#disable_date ⇒ 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.
The date that this Formula was or becomes disabled.
Returns nil if no date is specified.
      1607  | 
    
      # File 'formula.rb', line 1607 delegate disable_date: :"self.class"  | 
  
#disable_reason ⇒ 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.
The reason this Formula is disabled.
Returns nil if no reason is specified or the formula is not disabled.
      1614  | 
    
      # File 'formula.rb', line 1614 delegate disable_reason: :"self.class"  | 
  
#disable_replacement_cask ⇒ 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.
The replacement cask for this disabled Formula.
Returns nil if no replacement is specified or the formula is not disabled.
      1628  | 
    
      # File 'formula.rb', line 1628 delegate disable_replacement_cask: :"self.class"  | 
  
#disable_replacement_formula ⇒ 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.
The replacement formula for this disabled Formula.
Returns nil if no replacement is specified or the formula is not disabled.
      1621  | 
    
      # File 'formula.rb', line 1621 delegate disable_replacement_formula: :"self.class"  | 
  
#disabled? ⇒ Boolean
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.
Whether this Formula is disabled (i.e. cannot be installed). Defaults to false.
      1600  | 
    
      # File 'formula.rb', line 1600 delegate disabled?: :"self.class"  | 
  
#doc ⇒ Pathname
The directory where the formula's documentation should be installed.
This is symlinked into HOMEBREW_PREFIX after installation or with
brew link for formulae that are not keg-only.
      961  | 
    
      # File 'formula.rb', line 961 def doc = share/"doc"/name  | 
  
#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.
      88  | 
    
      # File 'sorbet/rbi/dsl/formula.rbi', line 88 def downloader(*args, &block); end  | 
  
#eligible_kegs_for_cleanup(quiet: false) ⇒ Array<Keg>
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.
      3262 3263 3264 3265 3266 3267 3268 3269 3270 3271 3272 3273 3274 3275 3276 3277 3278 3279 3280 3281 3282 3283 3284 3285 3286 3287 3288 3289 3290 3291 3292 3293 3294 3295 3296 3297 3298 3299 3300 3301 3302 3303  | 
    
      # File 'formula.rb', line 3262 def eligible_kegs_for_cleanup(quiet: false) eligible_for_cleanup = [] if latest_version_installed? eligible_kegs = if head? && (head_prefix = latest_head_prefix) head, stable = installed_kegs.partition { |keg| keg.version.head? } # Remove newest head and stable kegs. head - [Keg.new(head_prefix)] + T.must(stable.sort_by(&:scheme_and_version).slice(0...-1)) else installed_kegs.select do |keg| tab = keg.tab if version_scheme > tab.version_scheme true elsif version_scheme == tab.version_scheme pkg_version > keg.version else false end end end unless eligible_kegs.empty? eligible_kegs.each do |keg| if keg.linked? opoo "Skipping (old) #{keg} due to it being linked" unless quiet elsif pinned? && keg == Keg.new(@pin.path.resolved_path) opoo "Skipping (old) #{keg} due to it being pinned" unless quiet elsif (keepme_refs = keg.keepme_refs.presence) opoo "Skipping #{keg} as it is needed by #{keepme_refs.join(", ")}" unless quiet else eligible_for_cleanup << keg end end end elsif !installed_prefixes.empty? && !pinned? # If the rack only has one version installed, don't complain # that we can't tell which one to keep. Don't complain at all if the # only installed version is a pinned formula. opoo "Skipping #{full_name}: most recent version #{pkg_version} not installed" unless quiet end eligible_for_cleanup end  | 
  
#elisp ⇒ Pathname
The directory where Emacs Lisp files should be installed, with the formula name appended to avoid linking conflicts.
Example
To install an Emacs mode included with a software package:
elisp.install "contrib/emacs/example-mode.el"
  
      1183  | 
    
      # File 'formula.rb', line 1183 def elisp = prefix/"share/emacs/site-lisp"/name  | 
  
#enqueue_resources_and_patches(download_queue:) ⇒ 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.
      3344 3345 3346 3347 3348 3349 3350  | 
    
      # File 'formula.rb', line 3344 def enqueue_resources_and_patches(download_queue:) resources.each do |resource| download_queue.enqueue(resource) resource.patches.select(&:external?).each { |patch| download_queue.enqueue(patch.resource) } end patchlist.select(&:external?).each { |patch| download_queue.enqueue(patch.resource) } end  | 
  
#ensure_installed!(reason: "", latest: false, output_to_stderr: true, quiet: false) ⇒ T.self_type
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.
Ensure the given formula is installed.
This is useful for installing a utility formula (e.g. shellcheck for brew style).
      337 338 339 340 341 342 343 344 345 346 347 348 349 350 351 352 353 354 355 356 357 358 359 360 361 362 363  | 
    
      # File 'formula.rb', line 337 def ensure_installed!(reason: "", latest: false, output_to_stderr: true, quiet: false) if output_to_stderr || quiet file = if quiet File::NULL else $stderr end # Call this method itself with redirected stdout redirect_stdout(file) do return ensure_installed!(latest:, reason:, output_to_stderr: false) end end reason = " for #{reason}" if reason.present? unless any_version_installed? ohai "Installing `#{name}`#{reason}..." safe_system HOMEBREW_BREW_FILE, "install", "--formula", full_name end if latest && !latest_version_installed? ohai "Upgrading `#{name}`#{reason}..." safe_system HOMEBREW_BREW_FILE, "upgrade", "--formula", full_name end self end  | 
  
#env(*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.
      91  | 
    
      # File 'sorbet/rbi/dsl/formula.rbi', line 91 def env(*args, &block); end  | 
  
#etc ⇒ Pathname
The directory where the formula's configuration files should be installed.
Anything using etc.install will not overwrite other files on e.g. upgrades
but will write a new file named *.default.
This directory is not inside the HOMEBREW_CELLAR so it persists
across upgrades.
      1211  | 
    
      # File 'formula.rb', line 1211 def etc = (HOMEBREW_PREFIX/"etc").extend(InstallRenamed)  | 
  
#fetch_bottle_tab(quiet: false) ⇒ 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.
      3358 3359 3360 3361 3362  | 
    
      # File 'formula.rb', line 3358 def fetch_bottle_tab(quiet: false) return unless bottled? T.must(bottle).fetch_tab(quiet: quiet) end  | 
  
#fetch_fully_loaded_formula!(download_queue: nil) ⇒ 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.
      616 617 618 619 620  | 
    
      # File 'formula.rb', line 616 def fetch_fully_loaded_formula!(download_queue: nil) return unless loaded_from_stub? Homebrew::API::Formula.fetch_formula_json!(name, download_queue:) end  | 
  
#fetch_patches ⇒ 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.
      3353 3354 3355  | 
    
      # File 'formula.rb', line 3353 def fetch_patches patchlist.select(&:external?).each(&:fetch) end  | 
  
#fish_completion ⇒ Pathname
The directory where the formula's fish completion files should be
installed.
This is symlinked into HOMEBREW_PREFIX after installation or with
brew link for formulae that are not keg-only.
      1273  | 
    
      # File 'formula.rb', line 1273 def fish_completion = share/"fish/vendor_completions.d"  | 
  
#fish_function ⇒ Pathname
The directory where the formula's fish function files should be
installed.
This is symlinked into HOMEBREW_PREFIX after installation or with
brew link for formulae that are not keg-only.
      1246  | 
    
      # File 'formula.rb', line 1246 def fish_function = share/"fish/vendor_functions.d"  | 
  
#frameworks ⇒ Pathname
The directory where the formula's Frameworks should be installed.
This is symlinked into HOMEBREW_PREFIX after installation or with
brew link for formulae that are not keg-only.
This is not symlinked into HOMEBREW_PREFIX.
      1192  | 
    
      # File 'formula.rb', line 1192 def frameworks = prefix/"Frameworks"  | 
  
#full_installed_alias_name ⇒ 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.
      436  | 
    
      # File 'formula.rb', line 436 def full_installed_alias_name = full_name_with_optional_tap(installed_alias_name)  | 
  
#full_installed_specified_name ⇒ 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.
The name (including tap) specified to install this formula.
      480 481 482  | 
    
      # File 'formula.rb', line 480 def full_installed_specified_name full_installed_alias_name || full_name end  | 
  
#full_specified_name ⇒ 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.
The name (including tap) specified to find this formula.
      468 469 470  | 
    
      # File 'formula.rb', line 468 def full_specified_name full_alias_name || full_name end  | 
  
#fully_loaded_formula ⇒ Formula
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.
      606 607 608 609 610 611 612 613  | 
    
      # File 'formula.rb', line 606 def fully_loaded_formula @fully_loaded_formula ||= if loaded_from_stub? json_contents = Homebrew::API::Formula.formula_json(name) Formulary.from_json_contents(name, json_contents) else self end end  | 
  
#generate_completions_from_executable(*commands, base_name: nil, shells: [:bash, :zsh, :fish], shell_parameter_format: nil) ⇒ void
This method returns an undefined value.
Generate shell completions for a formula for bash, zsh, fish, and
optionally pwsh using the formula's executable.
Examples
Using default values for optional arguments.
generate_completions_from_executable(bin/"foo", "completions")
# translates to
(bash_completion/"foo").write Utils.safe_popen_read({ "SHELL" => "bash" }, bin/"foo", "completions", "bash")
(zsh_completion/"_foo").write Utils.safe_popen_read({ "SHELL" => "zsh" }, bin/"foo", "completions", "zsh")
(fish_completion/"foo.fish").write Utils.safe_popen_read({ "SHELL" => "fish" }, bin/"foo",
                                                         "completions", "fish")
If your executable can generate completions for PowerShell, you must pass ":pwsh" explicitly along with any other supported shells. This will pass "powershell" as the completion argument.
generate_completions_from_executable(bin/"foo", "completions", shells: [:bash, :pwsh])
# translates to
(bash_completion/"foo").write Utils.safe_popen_read({ "SHELL" => "bash" }, bin/"foo", "completions", "bash")
(pwsh_completion/"foo").write Utils.safe_popen_read({ "SHELL" => "pwsh" }, bin/"foo",
                                                          "completions", "powershell")
Selecting shells and using a different base_name.
generate_completions_from_executable(bin/"foo", "completions", shells: [:bash, :zsh], base_name: "bar")
# translates to
(bash_completion/"bar").write Utils.safe_popen_read({ "SHELL" => "bash" }, bin/"foo", "completions", "bash")
(zsh_completion/"_bar").write Utils.safe_popen_read({ "SHELL" => "zsh" }, bin/"foo", "completions", "zsh")
Using predefined shell_parameter_format :flag.
generate_completions_from_executable(bin/"foo", "completions", shell_parameter_format: :flag, shells: [:bash])
# translates to
(bash_completion/"foo").write Utils.safe_popen_read({ "SHELL" => "bash" }, bin/"foo", "completions", "--bash")
Using predefined shell_parameter_format :arg.
generate_completions_from_executable(bin/"foo", "completions", shell_parameter_format: :arg, shells: [:bash])
# translates to
(bash_completion/"foo").write Utils.safe_popen_read({ "SHELL" => "bash" }, bin/"foo",
                                                    "completions", "--shell=bash")
Using predefined shell_parameter_format :none.
generate_completions_from_executable(bin/"foo", "completions", shell_parameter_format: :none, shells: [:bash])
# translates to
(bash_completion/"foo").write Utils.safe_popen_read({ "SHELL" => "bash" }, bin/"foo", "completions")
Using predefined shell_parameter_format :click.
generate_completions_from_executable(bin/"foo", shell_parameter_format: :click, shells: [:zsh])
# translates to
(zsh_completion/"_foo").write Utils.safe_popen_read({ "SHELL" => "zsh", "_FOO_COMPLETE" => "zsh_source" },
                                                    bin/"foo")
Using predefined shell_parameter_format :clap.
generate_completions_from_executable(bin/"foo", shell_parameter_format: :clap, shells: [:zsh])
# translates to
(zsh_completion/"_foo").write Utils.safe_popen_read({ "SHELL" => "zsh", "COMPLETE" => "zsh" }, bin/"foo")
Using custom shell_parameter_format.
generate_completions_from_executable(bin/"foo", "completions", shell_parameter_format: "--selected-shell=",
                                     shells: [:bash])
# translates to
(bash_completion/"foo").write Utils.safe_popen_read({ "SHELL" => "bash" }, bin/"foo",
                                                    "completions", "--selected-shell=bash")
  
      2246 2247 2248 2249 2250 2251 2252 2253 2254 2255 2256 2257 2258 2259 2260 2261 2262 2263 2264 2265 2266 2267 2268 2269 2270 2271 2272 2273 2274 2275 2276 2277 2278 2279 2280 2281 2282 2283 2284 2285 2286 2287 2288 2289 2290 2291 2292 2293 2294 2295 2296  | 
    
      # File 'formula.rb', line 2246 def generate_completions_from_executable(*commands, base_name: nil, shells: [:bash, :zsh, :fish], shell_parameter_format: nil) executable = commands.first.to_s base_name ||= File.basename(executable) if executable.start_with?(bin.to_s, sbin.to_s) base_name ||= name completion_script_path_map = { bash: bash_completion/base_name, zsh: zsh_completion/"_#{base_name}", fish: fish_completion/"#{base_name}.fish", pwsh: pwsh_completion/"_#{base_name}.ps1", } shells.each do |shell| popen_read_env = { "SHELL" => shell.to_s } script_path = completion_script_path_map[shell] # Go's cobra and Rust's clap accept "powershell". shell_argument = (shell == :pwsh) ? "powershell" : shell.to_s shell_parameter = if shell_parameter_format.nil? shell_argument.to_s elsif shell_parameter_format == :flag "--#{shell_argument}" elsif shell_parameter_format == :arg "--shell=#{shell_argument}" elsif shell_parameter_format == :none nil elsif shell_parameter_format == :click prog_name = File.basename(executable).upcase.tr("-", "_") popen_read_env["_#{prog_name}_COMPLETE"] = "#{shell_argument}_source" nil elsif shell_parameter_format == :clap popen_read_env["COMPLETE"] = shell_argument.to_s nil else "#{shell_parameter_format}#{shell_argument}" end popen_read_args = %w[] popen_read_args << commands popen_read_args << shell_parameter if shell_parameter.present? popen_read_args.flatten! = {} [:err] = :err unless ENV["HOMEBREW_STDERR"] script_path.dirname.mkpath script_path.write Utils.safe_popen_read(popen_read_env, *popen_read_args, **) end end  | 
  
#head? ⇒ Boolean
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.
Is the currently active SoftwareSpec a #head build?
      492 493 494  | 
    
      # File 'formula.rb', line 492 def head? active_spec == head end  | 
  
#head_only? ⇒ Boolean
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.
Is this formula HEAD-only?
      498 499 500  | 
    
      # File 'formula.rb', line 498 def head_only? !!head && !stable end  | 
  
#head_version_outdated?(version, fetch_head: false) ⇒ Boolean
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.
      829 830 831 832 833 834 835 836 837 838 839 840 841 842 843 844  | 
    
      # File 'formula.rb', line 829 def head_version_outdated?(version, fetch_head: false) tab = Tab.for_keg(prefix(version)) return true if tab.version_scheme < version_scheme tab_stable_version = tab.stable_version return true if stable && tab_stable_version && tab_stable_version < T.must(stable).version return false unless fetch_head return false unless head&.downloader.is_a?(VCSDownloadStrategy) downloader = T.must(head).downloader with_context quiet: true do downloader.commit_outdated?(version.version.commit) end end  | 
  
#homepage ⇒ 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.
The homepage for the software.
      536  | 
    
      # File 'formula.rb', line 536 delegate homepage: :"self.class"  | 
  
#include ⇒ Pathname
The directory where the formula's headers should be installed.
This is symlinked into HOMEBREW_PREFIX after installation or with
brew link for formulae that are not keg-only.
Example
No make install available?
include.install "example.h"
  
      977  | 
    
      # File 'formula.rb', line 977 def include = prefix/"include"  | 
  
#info ⇒ Pathname
The directory where the formula's info files should be installed.
This is symlinked into HOMEBREW_PREFIX after installation or with
brew link for formulae that are not keg-only.
      985  | 
    
      # File 'formula.rb', line 985 def info = share/"info"  | 
  
#inreplace(paths, before = nil, after = nil, audit_result: true, global: true, &block) ⇒ void
This method returns an undefined value.
Sometimes we have to change a bit before we install. Mostly we
prefer a patch, but if you need the prefix of
this formula in the patch you have to resort to inreplace,
because in the patch you don't have access to any variables
defined by the formula, as only HOMEBREW_PREFIX is available
in the embedded patch.
Examples
inreplace supports regular expressions:
inreplace "somefile.cfg", /look[for]what?/, "replace by #{bin}/tool"
inreplace supports blocks:
inreplace "Makefile" do |s|
  s.gsub! "/usr/local", HOMEBREW_PREFIX.to_s
end
  
      3059 3060 3061 3062 3063 3064  | 
    
      # File 'formula.rb', line 3059 def inreplace(paths, before = nil, after = nil, audit_result: true, global: true, &block) Utils::Inreplace.inreplace(paths, before, after, audit_result:, global:, &block) rescue Utils::Inreplace::Error => e onoe e.to_s raise BuildError.new(self, "inreplace", Array(paths), {}) end  | 
  
#install ⇒ 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.
This method is overridden in Formula subclasses to provide the installation instructions. The sources (from url) are downloaded, hash-checked and then Homebrew changes into a temporary directory where the archive is unpacked or repository cloned.
Example
def install
  system "./configure", "--prefix=#{prefix}"
  system "make", "install"
end
  
      3022  | 
    
      # File 'formula.rb', line 3022 def install; end  | 
  
#install_etc_var ⇒ 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.
      1432 1433 1434 1435 1436 1437 1438 1439 1440  | 
    
      # File 'formula.rb', line 1432 def install_etc_var etc_var_dirs = [bottle_prefix/"etc", bottle_prefix/"var"] Find.find(*etc_var_dirs.select(&:directory?)) do |path| path = Pathname.new(path) path.extend(InstallRenamed) path.cp_path_sub(bottle_prefix, HOMEBREW_PREFIX) path end end  | 
  
#installed_alias_name ⇒ 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.
      433  | 
    
      # File 'formula.rb', line 433 def installed_alias_name = installed_alias_path&.basename&.to_s  | 
  
#installed_alias_path ⇒ Pathname?
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.
The alias path that was used to install this formula, if it exists. Can differ from #alias_path, which is the alias used to find the formula, and is specified to this instance.
      420 421 422 423 424 425 426 427 428 429 430  | 
    
      # File 'formula.rb', line 420 def installed_alias_path build_tab = build path = build_tab.source["path"] if build_tab.is_a?(Tab) return unless path&.match?(%r{#{HOMEBREW_TAP_DIR_REGEX}/Aliases}o) path = Pathname(path) return unless path.symlink? path end  | 
  
#installed_alias_target_changed? ⇒ Boolean
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.
Has the target of the alias used to install this formula changed? Returns false if the formula wasn't installed with an alias.
      1794 1795 1796 1797 1798 1799  | 
    
      # File 'formula.rb', line 1794 def installed_alias_target_changed? target = current_installed_alias_target return false unless target target.name != name end  | 
  
#installed_kegs ⇒ Array<Keg>
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.
All currently installed kegs.
      929 930 931  | 
    
      # File 'formula.rb', line 929 def installed_kegs installed_prefixes.map { |dir| Keg.new(dir) } end  | 
  
#installed_prefixes ⇒ Array<Pathname>
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.
All currently installed prefix directories.
      920 921 922 923 924 925  | 
    
      # File 'formula.rb', line 920 def installed_prefixes possible_names.map { |name| HOMEBREW_CELLAR/name } .select(&:directory?) .flat_map(&:subdirs) .sort_by(&:basename) end  | 
  
#installed_runtime_formula_dependencies(read_from_tab: true, undeclared: true) ⇒ Array<Formula>
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 a list of installed Formula objects that are required at runtime.
      2575 2576 2577 2578 2579 2580 2581 2582 2583 2584 2585 2586 2587  | 
    
      # File 'formula.rb', line 2575 def installed_runtime_formula_dependencies(read_from_tab: true, undeclared: true) cache_key = "#{full_name}-#{read_from_tab}-#{undeclared}" Formula.cache[:installed_runtime_formula_dependencies] ||= {} Formula.cache[:installed_runtime_formula_dependencies][cache_key] ||= runtime_dependencies( read_from_tab:, undeclared:, ).filter_map do |d| d.to_installed_formula rescue FormulaUnavailableError nil end end  | 
  
#installed_specified_name ⇒ 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.
The name specified to install this formula.
      474 475 476  | 
    
      # File 'formula.rb', line 474 def installed_specified_name installed_alias_name || name end  | 
  
#internal_dependencies_hash(spec_symbol) ⇒ Hash{String => 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.
      2932 2933 2934 2935 2936 2937 2938 2939 2940 2941 2942 2943 2944 2945 2946 2947 2948  | 
    
      # File 'formula.rb', line 2932 def internal_dependencies_hash(spec_symbol) raise ArgumentError, "Unsupported spec: #{spec_symbol}" unless [:stable, :head].include?(spec_symbol) return unless (spec = public_send(spec_symbol)) spec.declared_deps.each_with_object({}) do |dep, dep_hash| # Implicit dependencies are only needed when installing from source # since they are only used to download and unpack source files. # @see DependencyCollector next if dep.implicit? = {} [:tags] = dep. if dep..present? [:uses_from_macos] = dep.bounds.presence if dep.uses_from_macos? dep_hash[dep.name] = .presence end end  | 
  
#keg_only? ⇒ Boolean
This method is part of an internal API. This method may only be used internally in repositories owned by Homebrew, except in casks or formulae. Third parties should avoid using this method if possible, as it may be removed or changed without warning.
Rarely, you don't want your library symlinked into the main prefix.
See gettext.rb for an example.
      1507 1508 1509 1510 1511  | 
    
      # File 'formula.rb', line 1507 def keg_only? return false unless keg_only_reason keg_only_reason.applicable? end  | 
  
#keg_only_reason(*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.
      97  | 
    
      # File 'sorbet/rbi/dsl/formula.rbi', line 97 def keg_only_reason(*args, &block); end  | 
  
#kext_prefix ⇒ Pathname
The directory where the formula's kernel extensions should be installed.
This is symlinked into HOMEBREW_PREFIX after installation or with
brew link for formulae that are not keg-only.
This is not symlinked into HOMEBREW_PREFIX.
      1201  | 
    
      # File 'formula.rb', line 1201 def kext_prefix = prefix/"Library/Extensions"  | 
  
#latest_formula ⇒ Formula
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.
If the alias has changed value, return the new formula. Otherwise, return self.
      1815 1816 1817  | 
    
      # File 'formula.rb', line 1815 def latest_formula installed_alias_target_changed? ? T.must(current_installed_alias_target) : Formulary.factory(full_name) end  | 
  
#latest_head_pkg_version(fetch_head: false) ⇒ PkgVersion
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.
      847 848 849 850 851 852 853 854 855  | 
    
      # File 'formula.rb', line 847 def latest_head_pkg_version(fetch_head: false) return pkg_version unless (latest_version = latest_head_version) return latest_version unless head_version_outdated?(latest_version, fetch_head:) downloader = T.must(head).downloader with_context quiet: true do PkgVersion.new(Version.new("HEAD-#{downloader.last_commit}"), revision) end end  | 
  
#latest_head_prefix ⇒ Pathname?
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.
      823 824 825 826  | 
    
      # File 'formula.rb', line 823 def latest_head_prefix head_version = latest_head_version prefix(head_version) if head_version end  | 
  
#latest_head_version ⇒ PkgVersion?
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.
      811 812 813 814 815 816 817 818 819 820  | 
    
      # File 'formula.rb', line 811 def latest_head_version head_versions = installed_prefixes.filter_map do |pn| pn_pkgversion = PkgVersion.parse(pn.basename.to_s) pn_pkgversion if pn_pkgversion.head? end head_versions.max_by do |pn_pkgversion| [Keg.new(prefix(pn_pkgversion)).tab.source_modified_time, pn_pkgversion.revision] end end  | 
  
#latest_installed_prefix ⇒ Pathname
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.
The latest prefix for this formula. Checks for #head and then #stable's #prefix.
      859 860 861 862 863 864 865 866 867  | 
    
      # File 'formula.rb', line 859 def latest_installed_prefix if head && (head_version = latest_head_version) && !head_version_outdated?(head_version) T.must(latest_head_prefix) elsif stable && (stable_prefix = prefix(PkgVersion.new(T.must(stable).version, revision))).directory? stable_prefix else prefix end end  | 
  
#latest_version_installed? ⇒ Boolean
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.
If this Formula is installed. This is actually just a check for if the #latest_installed_prefix directory exists and is not empty.
      785 786 787  | 
    
      # File 'formula.rb', line 785 def latest_version_installed? (dir = latest_installed_prefix).directory? && !dir.children.empty? end  | 
  
#launchd_service_path ⇒ Pathname
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.
The generated launchd service file path.
      1324  | 
    
      # File 'formula.rb', line 1324 def launchd_service_path = (any_installed_prefix || opt_prefix)/"#{plist_name}.plist"  | 
  
#lib ⇒ Pathname
The directory where the formula's libraries should be installed.
This is symlinked into HOMEBREW_PREFIX after installation or with
brew link for formulae that are not keg-only.
Example
No make install available?
lib.install "example.dylib"
  
      1001  | 
    
      # File 'formula.rb', line 1001 def lib = prefix/"lib"  | 
  
#libexec ⇒ Pathname
The directory where the formula's binaries should be installed.
This is not symlinked into HOMEBREW_PREFIX.
It is commonly used to install files that we do not wish to be
symlinked into HOMEBREW_PREFIX from one of the other directories and
instead manually create symlinks or wrapper scripts into e.g. #bin.
Example
libexec.install "foo.jar"
bin.write_jar_script libexec/"foo.jar", "foo"
  
      1018  | 
    
      # File 'formula.rb', line 1018 def libexec = prefix/"libexec"  | 
  
#license ⇒ 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.
The SPDX ID of the software license.
      531  | 
    
      # File 'formula.rb', line 531 delegate license: :"self.class"  | 
  
#link_overwrite?(path) ⇒ Boolean
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.
      1526 1527 1528 1529 1530 1531 1532 1533 1534 1535 1536 1537 1538 1539 1540 1541 1542 1543 1544 1545 1546 1547 1548 1549 1550 1551 1552 1553 1554 1555 1556 1557 1558  | 
    
      # File 'formula.rb', line 1526 def link_overwrite?(path) # Don't overwrite files not created by Homebrew. return false if path.stat.uid != HOMEBREW_ORIGINAL_BREW_FILE.stat.uid # Don't overwrite files belong to other keg except when that # keg's formula is deleted. begin keg = Keg.for(path) rescue NotAKegError, Errno::ENOENT # file doesn't belong to any keg. else tab_tap = keg.tab.tap # this keg doesn't below to any core/tap formula, most likely coming from a DIY install. return false if tab_tap.nil? begin f = Formulary.factory(keg.name) rescue FormulaUnavailableError # formula for this keg is deleted, so defer to allowlist rescue TapFormulaAmbiguityError return false # this keg belongs to another formula else # this keg belongs to another unrelated formula return false unless f.possible_names.include?(keg.name) end end to_check = path.relative_path_from(HOMEBREW_PREFIX).to_s T.must(self.class.link_overwrite_paths).any? do |p| p.to_s == to_check || to_check.start_with?("#{p.to_s.chomp("/")}/") || /^#{Regexp.escape(p.to_s).gsub('\*', ".*?")}$/.match?(to_check) end end  | 
  
#linked? ⇒ Boolean
This method is part of an internal API. This method may only be used internally in repositories owned by Homebrew, except in casks or formulae. Third parties should avoid using this method if possible, as it may be removed or changed without warning.
Is the formula linked?
      891  | 
    
      # File 'formula.rb', line 891 def linked? = linked_keg.symlink?  | 
  
#linked_keg ⇒ Pathname
This method is part of an internal API. This method may only be used internally in repositories owned by Homebrew, except in casks or formulae. Third parties should avoid using this method if possible, as it may be removed or changed without warning.
The link status symlink directory for this Formula. You probably want #opt_prefix instead.
      802 803 804 805 806 807 808  | 
    
      # File 'formula.rb', line 802 def linked_keg linked_keg = possible_names.map { |name| HOMEBREW_LINKED_KEGS/name } .find(&:directory?) return linked_keg if linked_keg.present? HOMEBREW_LINKED_KEGS/name end  | 
  
#linked_version ⇒ PkgVersion?
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.
PkgVersion of the linked keg for the formula.
      907 908 909 910 911  | 
    
      # File 'formula.rb', line 907 def linked_version return unless linked? Keg.for(linked_keg).version end  | 
  
#livecheck ⇒ 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.
The livecheck specification for the software.
      541  | 
    
      # File 'formula.rb', line 541 delegate livecheck: :"self.class"  | 
  
#livecheck_defined? ⇒ Boolean
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.
Is a livecheck specification defined for the software?
      546  | 
    
      # File 'formula.rb', line 546 delegate livecheck_defined?: :"self.class"  | 
  
#livecheckable? ⇒ Boolean
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 is a legacy alias for #livecheck_defined?.
      551  | 
    
      # File 'formula.rb', line 551 delegate livecheckable?: :"self.class"  | 
  
#loaded_from_api? ⇒ Boolean
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.
Whether this formula was loaded using the formulae.brew.sh API.
      592  | 
    
      # File 'formula.rb', line 592 delegate loaded_from_api?: :"self.class"  | 
  
#loaded_from_stub? ⇒ Boolean
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.
Whether this formula was loaded using the formulae.brew.sh API.
      597  | 
    
      # File 'formula.rb', line 597 delegate loaded_from_stub?: :"self.class"  | 
  
#loader_path ⇒ String
Linker variable for the directory containing the program or shared object.
      2074  | 
    
      # File 'formula.rb', line 2074 def loader_path = "@loader_path"  | 
  
#lock ⇒ Array<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.
      1701 1702 1703 1704 1705 1706 1707 1708 1709 1710 1711 1712 1713  | 
    
      # File 'formula.rb', line 1701 def lock @lock = T.let(FormulaLock.new(name), T.nilable(FormulaLock)) T.must(@lock).lock oldnames.each do |oldname| next unless (oldname_rack = HOMEBREW_CELLAR/oldname).exist? next if oldname_rack.resolved_path != rack oldname_lock = FormulaLock.new(oldname) oldname_lock.lock @oldname_locks << oldname_lock end end  | 
  
#logs ⇒ Pathname
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.
The directory where the formula's installation or test logs will be written.
      1292  | 
    
      # File 'formula.rb', line 1292 def logs = HOMEBREW_LOGS + name  | 
  
#man ⇒ Pathname
The root directory where the formula's manual pages should be installed.
This is symlinked into HOMEBREW_PREFIX after installation or with
brew link for formulae that are not keg-only.
Often one of the more specific man functions should be used instead,
e.g. #man1.
      1028  | 
    
      # File 'formula.rb', line 1028 def man = share/"man"  | 
  
#man1 ⇒ Pathname
The directory where the formula's man1 pages should be installed.
This is symlinked into HOMEBREW_PREFIX after installation or with
brew link for formulae that are not keg-only.
Example
No make install available?
man1.install "example.1"
  
      1044  | 
    
      # File 'formula.rb', line 1044 def man1 = man/"man1"  | 
  
#man2 ⇒ Pathname
The directory where the formula's man2 pages should be installed.
This is symlinked into HOMEBREW_PREFIX after installation or with
brew link for formulae that are not keg-only.
      1052  | 
    
      # File 'formula.rb', line 1052 def man2 = man/"man2"  | 
  
#man3 ⇒ Pathname
The directory where the formula's man3 pages should be installed.
This is symlinked into HOMEBREW_PREFIX after installation or with
brew link for formulae that are not keg-only.
Example
No make install available?
man3.install "man.3"
  
      1068  | 
    
      # File 'formula.rb', line 1068 def man3 = man/"man3"  | 
  
#man4 ⇒ Pathname
The directory where the formula's man4 pages should be installed.
This is symlinked into HOMEBREW_PREFIX after installation or with
brew link for formulae that are not keg-only.
      1076  | 
    
      # File 'formula.rb', line 1076 def man4 = man/"man4"  | 
  
#man5 ⇒ Pathname
The directory where the formula's man5 pages should be installed.
This is symlinked into HOMEBREW_PREFIX after installation or with
brew link for formulae that are not keg-only.
      1084  | 
    
      # File 'formula.rb', line 1084 def man5 = man/"man5"  | 
  
#man6 ⇒ Pathname
The directory where the formula's man6 pages should be installed.
This is symlinked into HOMEBREW_PREFIX after installation or with
brew link for formulae that are not keg-only.
      1092  | 
    
      # File 'formula.rb', line 1092 def man6 = man/"man6"  | 
  
#man7 ⇒ Pathname
The directory where the formula's man7 pages should be installed.
This is symlinked into HOMEBREW_PREFIX after installation or with
brew link for formulae that are not keg-only.
      1100  | 
    
      # File 'formula.rb', line 1100 def man7 = man/"man7"  | 
  
#man8 ⇒ Pathname
The directory where the formula's man8 pages should be installed.
This is symlinked into HOMEBREW_PREFIX after installation or with
brew link for formulae that are not keg-only.
      1108  | 
    
      # File 'formula.rb', line 1108 def man8 = man/"man8"  | 
  
#migration_needed? ⇒ Boolean
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.
      1733 1734 1735  | 
    
      # File 'formula.rb', line 1733 def migration_needed? !oldnames_to_migrate.empty? && !rack.exist? end  | 
  
#missing_dependencies(hide: []) ⇒ Array<Dependency>
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 a list of formulae depended on by this formula that aren't installed.
      2610 2611 2612 2613 2614 2615 2616 2617 2618  | 
    
      # File 'formula.rb', line 2610 def missing_dependencies(hide: []) runtime_dependencies(read_from_tab: true, undeclared: true).select do |f| hide.include?(f.name) || f.to_installed_formula.installed_prefixes.none? end # If we're still getting unavailable formulae at this stage the best we can # do is just return no results. rescue FormulaUnavailableError [] end  | 
  
#mkdir(name, &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.
A version of FileUtils.mkdir that also changes to that folder in
a block.
      3324 3325 3326 3327 3328 3329  | 
    
      # File 'formula.rb', line 3324 def mkdir(name, &block) result = FileUtils.mkdir_p(name) return result unless block FileUtils.chdir(name, &block) end  | 
  
#mktemp(prefix = name, retain: false, retain_in_cache: false, &block) ⇒ 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.
Create a temporary directory then yield. When the block returns,
recursively delete the temporary directory. Passing opts[:retain]
or calling do |staging| ... staging.retain! in the block will skip
the deletion and retain the temporary directory's contents.
      3317 3318 3319  | 
    
      # File 'formula.rb', line 3317 def mktemp(prefix = name, retain: false, retain_in_cache: false, &block) Mktemp.new(prefix, retain:, retain_in_cache:).run(&block) end  | 
  
#network_access_allowed?(*args, &block) ⇒ Boolean
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.
      118  | 
    
      # File 'sorbet/rbi/dsl/formula.rbi', line 118 def network_access_allowed?(*args, &block); end  | 
  
#new_formula_available? ⇒ Boolean
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.
      1782 1783 1784  | 
    
      # File 'formula.rb', line 1782 def new_formula_available? installed_alias_target_changed? && !latest_formula.latest_version_installed? end  | 
  
#no_autobump! ⇒ 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.
Exclude the formula from the autobump list.
      556  | 
    
      # File 'formula.rb', line 556 delegate no_autobump!: :"self.class"  | 
  
#no_autobump_defined? ⇒ Boolean
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.
Is a no_autobump! method defined?
      566  | 
    
      # File 'formula.rb', line 566 delegate no_autobump_defined?: :"self.class"  | 
  
#no_autobump_message(*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.
      127  | 
    
      # File 'sorbet/rbi/dsl/formula.rbi', line 127 def (*args, &block); end  | 
  
#old_installed_formulae ⇒ Array<Formula>
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.
      1820 1821 1822 1823 1824 1825 1826 1827  | 
    
      # File 'formula.rb', line 1820 def old_installed_formulae # If this formula isn't the current target of the alias, # it doesn't make sense to say that other formulae are older versions of it # because we don't know which came first. return [] if alias_path.nil? || installed_alias_target_changed? self.class.installed_with_alias_path(alias_path).reject { |f| f.name == name } end  | 
  
#oldnames ⇒ Array<String>
This method is part of an internal API. This method may only be used internally in repositories owned by Homebrew, except in casks or formulae. Third parties should avoid using this method if possible, as it may be removed or changed without warning.
Old names for the formula.
      717 718 719 720 721 722 723 724 725  | 
    
      # File 'formula.rb', line 717 def oldnames @oldnames ||= T.let( if (tap = self.tap) Tap.tap_migration_oldnames(tap, name) + tap.formula_reverse_renames.fetch(name, []) else [] end, T.nilable(T::Array[String]) ) end  | 
  
#oldnames_to_migrate ⇒ Array<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.
      1722 1723 1724 1725 1726 1727 1728 1729 1730  | 
    
      # File 'formula.rb', line 1722 def oldnames_to_migrate oldnames.select do |oldname| old_rack = HOMEBREW_CELLAR/oldname next false unless old_rack.directory? next false if old_rack.subdirs.empty? tap == Tab.for_keg(old_rack.subdirs.min).tap end end  | 
  
#on_system_blocks_exist? ⇒ Boolean?
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.
      2951 2952 2953  | 
    
      # File 'formula.rb', line 2951 def on_system_blocks_exist? self.class.on_system_blocks_exist? || @on_system_blocks_exist end  | 
  
#opt_bin ⇒ Pathname
Same as #bin, but relative to #opt_prefix instead of #prefix.
      1361  | 
    
      # File 'formula.rb', line 1361 def opt_bin = opt_prefix/"bin"  | 
  
#opt_elisp ⇒ Pathname
Same as #elisp, but relative to #opt_prefix instead of #prefix.
      1403  | 
    
      # File 'formula.rb', line 1403 def opt_elisp = opt_prefix/"share/emacs/site-lisp"/name  | 
  
#opt_frameworks ⇒ Pathname
Same as #frameworks, but relative to #opt_prefix instead of #prefix.
      1409  | 
    
      # File 'formula.rb', line 1409 def opt_frameworks = opt_prefix/"Frameworks"  | 
  
#opt_include ⇒ Pathname
Same as #include, but relative to #opt_prefix instead of #prefix.
      1367  | 
    
      # File 'formula.rb', line 1367 def opt_include = opt_prefix/"include"  | 
  
#opt_lib ⇒ Pathname
Same as #lib, but relative to #opt_prefix instead of #prefix.
      1373  | 
    
      # File 'formula.rb', line 1373 def opt_lib = opt_prefix/"lib"  | 
  
#opt_libexec ⇒ Pathname
Same as #libexec, but relative to #opt_prefix instead of #prefix.
      1379  | 
    
      # File 'formula.rb', line 1379 def opt_libexec = opt_prefix/"libexec"  | 
  
#opt_pkgshare ⇒ Pathname
Same as #pkgshare, but relative to #opt_prefix instead of #prefix.
      1397  | 
    
      # File 'formula.rb', line 1397 def opt_pkgshare = opt_prefix/"share"/name  | 
  
#opt_prefix ⇒ Pathname
A stable path for this formula, when installed. Contains the formula name but no version number. Only the active version will be linked here if multiple versions are installed.
This is the preferred way to refer to a formula in plists or from another formula, as the path is stable even when the software is updated.
Example
args << "--with-readline=#{Formula["readline"].opt_prefix}" if build.with? "readline"
  
      1355  | 
    
      # File 'formula.rb', line 1355 def opt_prefix = HOMEBREW_PREFIX/"opt"/name  | 
  
#opt_sbin ⇒ Pathname
Same as #sbin, but relative to #opt_prefix instead of #prefix.
      1385  | 
    
      # File 'formula.rb', line 1385 def opt_sbin = opt_prefix/"sbin"  | 
  
#opt_share ⇒ Pathname
Same as #share, but relative to #opt_prefix instead of #prefix.
      1391  | 
    
      # File 'formula.rb', line 1391 def opt_share = opt_prefix/"share"  | 
  
#option_defined? ⇒ Boolean
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.
If a named option is defined for the currently active SoftwareSpec.
      776  | 
    
      # File 'formula.rb', line 776 delegate option_defined?: :active_spec  | 
  
#options(*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.
      133  | 
    
      # File 'sorbet/rbi/dsl/formula.rbi', line 133 def (*args, &block); end  | 
  
#optlinked? ⇒ Boolean
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.
Is the formula linked to opt?
      895  | 
    
      # File 'formula.rb', line 895 def optlinked? = opt_prefix.symlink?  | 
  
#outdated?(fetch_head: false) ⇒ Boolean
This method is part of an internal API. This method may only be used internally in repositories owned by Homebrew, except in casks or formulae. Third parties should avoid using this method if possible, as it may be removed or changed without warning.
Check whether the installed formula is outdated.
      1833 1834 1835 1836 1837  | 
    
      # File 'formula.rb', line 1833 def outdated?(fetch_head: false) !outdated_kegs(fetch_head:).empty? rescue Migrator::MigrationNeededError true end  | 
  
#outdated_kegs(fetch_head: false) ⇒ Array<Keg>
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.
      1738 1739 1740 1741 1742 1743 1744 1745 1746 1747 1748 1749 1750 1751 1752 1753 1754 1755 1756 1757 1758 1759 1760 1761 1762 1763 1764 1765 1766 1767 1768 1769 1770 1771 1772 1773 1774 1775 1776 1777 1778 1779  | 
    
      # File 'formula.rb', line 1738 def outdated_kegs(fetch_head: false) raise Migrator::MigrationNeededError.new(oldnames_to_migrate.first, name) if migration_needed? cache_key = "#{full_name}-#{fetch_head}" Formula.cache[:outdated_kegs] ||= {} Formula.cache[:outdated_kegs][cache_key] ||= begin all_kegs = [] current_version = T.let(false, T::Boolean) latest = if core_formula? && Homebrew::EnvConfig.use_internal_api? && Homebrew::API.formula_names.include?(full_name) Homebrew::API::Internal.formula_stub(full_name) else latest_formula end installed_kegs.each do |keg| all_kegs << keg version = keg.version next if version.head? next if latest.version_scheme > keg.version_scheme && latest.pkg_version != version next if latest.version_scheme == keg.version_scheme && latest.pkg_version > version # don't consider this keg current if there's a newer formula available next if follow_installed_alias? && new_formula_available? # this keg is the current version of the formula, but only consider it current # if it's actually linked - an unlinked current version means we're outdated next if !keg.optlinked? && !keg.linked? && !pinned? current_version = true break end if current_version || ((head_version = latest_head_version) && !head_version_outdated?(head_version, fetch_head:)) [] else all_kegs += old_installed_formulae.flat_map(&:installed_kegs) all_kegs.sort_by(&:scheme_and_version) end end end  | 
  
#patch ⇒ 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.
      1640 1641 1642 1643 1644 1645  | 
    
      # File 'formula.rb', line 1640 def patch return if patchlist.empty? ohai "Patching" patchlist.each(&:apply) end  | 
  
#patchlist(*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.
      136  | 
    
      # File 'sorbet/rbi/dsl/formula.rbi', line 136 def patchlist(*args, &block); end  | 
  
#pin(*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.
      139  | 
    
      # File 'sorbet/rbi/dsl/formula.rbi', line 139 def pin(*args, &block); end  | 
  
#pinnable?(*args, &block) ⇒ Boolean
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.
      142  | 
    
      # File 'sorbet/rbi/dsl/formula.rbi', line 142 def pinnable?(*args, &block); end  | 
  
#pinned_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.
      148  | 
    
      # File 'sorbet/rbi/dsl/formula.rbi', line 148 def pinned_version(*args, &block); end  | 
  
#pkg_version ⇒ PkgVersion
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.
The PkgVersion for this formula with version and #revision information.
      643  | 
    
      # File 'formula.rb', line 643 def pkg_version = PkgVersion.new(version, revision)  | 
  
#pkgetc ⇒ Pathname
A subdirectory of etc with the formula name suffixed,
e.g. $HOMEBREW_PREFIX/etc/openssl@1.1.
Anything using pkgetc.install will not overwrite other files on
e.g. upgrades but will write a new file named *.default.
      1220  | 
    
      # File 'formula.rb', line 1220 def pkgetc = (HOMEBREW_PREFIX/"etc"/name).extend(InstallRenamed)  | 
  
#pkgshare ⇒ Pathname
The directory where the formula's shared files should be installed,
with the name of the formula appended to avoid linking conflicts.
This is symlinked into HOMEBREW_PREFIX after installation or with
brew link for formulae that are not keg-only.
Example
No make install available?
pkgshare.install "examples"
  
      1168  | 
    
      # File 'formula.rb', line 1168 def pkgshare = prefix/"share"/name  | 
  
#plist_name ⇒ 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.
The generated launchd plist service name.
      1316  | 
    
      # File 'formula.rb', line 1316 def plist_name = service.plist_name  | 
  
#possible_names ⇒ Array<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.
      1864 1865 1866  | 
    
      # File 'formula.rb', line 1864 def possible_names [name, *oldnames, *aliases].compact end  | 
  
#post_install ⇒ 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.
Can be overridden to run commands on both source and bottle installation.
      1424  | 
    
      # File 'formula.rb', line 1424 def post_install; end  | 
  
#post_install_defined? ⇒ Boolean
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.
      1427 1428 1429  | 
    
      # File 'formula.rb', line 1427 def post_install_defined? method(:post_install).owner != Formula end  | 
  
#pour_bottle? ⇒ Boolean
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.
Indicates that this formula supports bottles. (Not necessarily that one
should be used in the current installation run.)
Can be overridden to selectively disable bottles from formulae.
Defaults to true so overridden version does not have to check if bottles
are supported.
Replaced by pour_bottle?'s satisfy method if it is specified.
      1418  | 
    
      # File 'formula.rb', line 1418 def pour_bottle? = true  | 
  
#pour_bottle_check_unsatisfied_reason(*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.
      151  | 
    
      # File 'sorbet/rbi/dsl/formula.rbi', line 151 def pour_bottle_check_unsatisfied_reason(*args, &block); end  | 
  
#prefix(version = pkg_version) ⇒ Pathname
The directory in the Cellar that the formula is installed to. This directory points to #opt_prefix if it exists and if #prefix is not called from within the same formula's #install or #post_install methods. Otherwise, return the full path to the formula's keg (versioned Cellar path).
      876 877 878 879 880 881 882 883 884 885  | 
    
      # File 'formula.rb', line 876 def prefix(version = pkg_version) versioned_prefix = versioned_prefix(version) version = PkgVersion.parse(version) if version.is_a?(String) if !@prefix_returns_versioned_prefix && version == pkg_version && versioned_prefix.directory? && Keg.new(versioned_prefix).optlinked? opt_prefix else versioned_prefix end end  | 
  
#prefix_linked?(version = pkg_version) ⇒ Boolean
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.
If a formula's linked keg points to the prefix.
      899 900 901 902 903  | 
    
      # File 'formula.rb', line 899 def prefix_linked?(version = pkg_version) return false unless linked? linked_keg.resolved_path == versioned_prefix(version) end  | 
  
#preserve_rpath? ⇒ Boolean
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.
      366  | 
    
      # File 'formula.rb', line 366 def preserve_rpath? = self.class.preserve_rpath?  | 
  
#print_tap_action(options = {}) ⇒ 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.
      2451 2452 2453 2454 2455 2456  | 
    
      # File 'formula.rb', line 2451 def print_tap_action( = {}) return unless tap? verb = [:verb] || "Installing" ohai "#{verb} #{name} from #{tap}" end  | 
  
#pwsh_completion ⇒ Pathname
The directory where the formula's PowerShell completion files should be
installed.
This is symlinked into HOMEBREW_PREFIX after installation or with
brew link for formulae that are not keg-only.
      1282  | 
    
      # File 'formula.rb', line 1282 def pwsh_completion = share/"pwsh/completions"  | 
  
#rack ⇒ Pathname
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.
The parent of the prefix; the named directory in the Cellar containing all installed versions of this software.
      916  | 
    
      # File 'formula.rb', line 916 def rack = HOMEBREW_CELLAR/name  | 
  
#recursive_dependencies(&block) ⇒ Array<Dependency>
This method is part of an internal API. This method may only be used internally in repositories owned by Homebrew, except in casks or formulae. Third parties should avoid using this method if possible, as it may be removed or changed without warning.
Returns a list of Dependency objects in an installable order, which
means if a depends on b then b will be ordered before a in this list.
      2479 2480 2481 2482 2483 2484 2485 2486 2487 2488  | 
    
      # File 'formula.rb', line 2479 def recursive_dependencies(&block) cache_key = "Formula#recursive_dependencies" if block cache_key += "-#{full_name}" = Time.now end Dependency.(self, cache_key:, cache_timestamp:, &block) ensure Dependency.(cache_key, ) if block end  | 
  
#recursive_requirements(&block) ⇒ Requirements
This method is part of an internal API. This method may only be used internally in repositories owned by Homebrew, except in casks or formulae. Third parties should avoid using this method if possible, as it may be removed or changed without warning.
The full set of Requirements for this formula's dependency tree.
      2494 2495 2496 2497  | 
    
      # File 'formula.rb', line 2494 def recursive_requirements(&block) cache_key = "Formula#recursive_requirements" unless block Requirement.(self, cache_key:, &block) end  | 
  
#require_universal_deps? ⇒ Boolean
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.
      1637  | 
    
      # File 'formula.rb', line 1637 def require_universal_deps? = false  | 
  
#requirements(*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.
      154  | 
    
      # File 'sorbet/rbi/dsl/formula.rbi', line 154 def requirements(*args, &block); end  | 
  
#resource(name = T.unsafe(nil), klass = T.unsafe(nil), &block) ⇒ Resource?
This should not actually take a block. All resources should be defined at the top-level using resource instead (see https://github.com/Homebrew/brew/issues/17203#issuecomment-2093654431).
A named Resource for the currently active SoftwareSpec. Additional downloads can be defined as #resources. Resource#stage will create a temporary directory and yield to a block.
Example
resource("additional_files").stage { bin.install "my/extra/tool" }
  
      705 706 707 708 709 710 711  | 
    
      # File 'formula.rb', line 705 def resource(name = T.unsafe(nil), klass = T.unsafe(nil), &block) if klass.nil? active_spec.resource(*name, &block) else active_spec.resource(name, klass, &block) end end  | 
  
#resources ⇒ 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.
The Resources for the currently active SoftwareSpec.
      743  | 
    
      # File 'formula.rb', line 743 def_delegator :"active_spec.resources", :values, :resources  | 
  
#rpath(source: bin, target: lib) ⇒ String
Executable/Library RPATH according to platform conventions.
Optionally specify a source or target depending on the location
of the file containing the RPATH command and where its target is located.
Example
rpath #=> "@loader_path/../lib"
rpath(target: frameworks) #=> "@loader_path/../Frameworks"
rpath(source: libexec/"bin") #=> "@loader_path/../../lib"
  
      2062 2063 2064 2065 2066 2067 2068  | 
    
      # File 'formula.rb', line 2062 def rpath(source: bin, target: lib) unless target.to_s.start_with?(HOMEBREW_PREFIX) raise "rpath `target` should only be used for paths inside `$HOMEBREW_PREFIX`!" end "#{loader_path}/#{target.relative_path_from(source)}" end  | 
  
#ruby_source_checksum ⇒ Checksum?
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.
      2626 2627 2628  | 
    
      # File 'formula.rb', line 2626 def ruby_source_checksum Checksum.new(Digest::SHA256.file(path).hexdigest) if path.exist? end  | 
  
#ruby_source_path ⇒ 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.
      2621 2622 2623  | 
    
      # File 'formula.rb', line 2621 def ruby_source_path path.relative_path_from(T.must(tap).path).to_s if tap && path.exist? end  | 
  
#run_post_install ⇒ 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.
      1443 1444 1445 1446 1447 1448 1449 1450 1451 1452 1453 1454 1455 1456 1457 1458 1459 1460 1461 1462 1463 1464 1465 1466 1467 1468 1469 1470 1471  | 
    
      # File 'formula.rb', line 1443 def run_post_install @prefix_returns_versioned_prefix = T.let(true, T.nilable(T::Boolean)) build = self.build begin self.build = Tab.for_formula(self) new_env = { TMPDIR: HOMEBREW_TEMP, TEMP: HOMEBREW_TEMP, TMP: HOMEBREW_TEMP, _JAVA_OPTIONS: "-Djava.io.tmpdir=#{HOMEBREW_TEMP}", HOMEBREW_PATH: nil, PATH: PATH.new(ORIGINAL_PATHS), } with_env(new_env) do ENV.clear_sensitive_environment! ENV.activate_extensions! with_logging("post_install") do post_install end end ensure self.build = build @prefix_returns_versioned_prefix = T.let(false, T.nilable(T::Boolean)) end end  | 
  
#run_test(keep_tmp: false) ⇒ 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.
      2956 2957 2958 2959 2960 2961 2962 2963 2964 2965 2966 2967 2968 2969 2970 2971 2972 2973 2974 2975 2976 2977 2978 2979 2980 2981 2982 2983 2984 2985 2986 2987 2988 2989 2990 2991 2992 2993  | 
    
      # File 'formula.rb', line 2956 def run_test(keep_tmp: false) @prefix_returns_versioned_prefix = T.let(true, T.nilable(T::Boolean)) test_env = { TMPDIR: HOMEBREW_TEMP, TEMP: HOMEBREW_TEMP, TMP: HOMEBREW_TEMP, TERM: "dumb", PATH: PATH.new(ENV.fetch("PATH"), HOMEBREW_PREFIX/"bin"), HOMEBREW_TERM: ENV.fetch("TERM", nil), HOMEBREW_PATH: nil, }.merge(common_stage_test_env) test_env[:_JAVA_OPTIONS] += " -Djava.io.tmpdir=#{HOMEBREW_TEMP}" ENV.clear_sensitive_environment! Utils::Git.set_name_email! mktemp("#{name}-test") do |staging| staging.retain! if keep_tmp @testpath = T.let(staging.tmpdir, T.nilable(Pathname)) test_env[:HOME] = @testpath setup_home T.must(@testpath) begin with_logging("test") do with_env(test_env) do test end end # Handle all possible exceptions running formula tests. rescue Exception # rubocop:disable Lint/RescueException staging.retain! if debug? raise end end ensure @prefix_returns_versioned_prefix = T.let(false, T.nilable(T::Boolean)) @testpath = T.let(nil, T.nilable(Pathname)) end  | 
  
#runtime_dependencies(read_from_tab: true, undeclared: true) ⇒ Array<Dependency>
This method is part of an internal API. This method may only be used internally in repositories owned by Homebrew, except in casks or formulae. Third parties should avoid using this method if possible, as it may be removed or changed without warning.
Returns a list of Dependency objects that are required at runtime.
      2532 2533 2534 2535 2536 2537 2538 2539 2540 2541 2542 2543 2544 2545 2546 2547 2548 2549 2550 2551 2552 2553 2554 2555  | 
    
      # File 'formula.rb', line 2532 def runtime_dependencies(read_from_tab: true, undeclared: true) cache_key = "#{full_name}-#{read_from_tab}-#{undeclared}" Formula.cache[:runtime_dependencies] ||= {} Formula.cache[:runtime_dependencies][cache_key] ||= begin deps = if read_from_tab && undeclared && (tab_deps = any_installed_keg&.runtime_dependencies) tab_deps.filter_map do |d| full_name = d["full_name"] next unless full_name Dependency.new full_name end end begin deps ||= declared_runtime_dependencies unless undeclared deps ||= (declared_runtime_dependencies | undeclared_runtime_dependencies) rescue FormulaUnavailableError onoe "Could not get runtime dependencies from #{path}!" deps ||= [] end deps end end  | 
  
#runtime_formula_dependencies(read_from_tab: true, undeclared: true) ⇒ Array<Formula>
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 a list of Formula objects that are required at runtime.
      2559 2560 2561 2562 2563 2564 2565 2566 2567 2568 2569 2570 2571  | 
    
      # File 'formula.rb', line 2559 def runtime_formula_dependencies(read_from_tab: true, undeclared: true) cache_key = "#{full_name}-#{read_from_tab}-#{undeclared}" Formula.cache[:runtime_formula_dependencies] ||= {} Formula.cache[:runtime_formula_dependencies][cache_key] ||= runtime_dependencies( read_from_tab:, undeclared:, ).filter_map do |d| d.to_formula rescue FormulaUnavailableError nil end end  | 
  
#runtime_installed_formula_dependents ⇒ Array<Formula>
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.
      2590 2591 2592 2593 2594 2595 2596 2597 2598 2599 2600 2601 2602 2603 2604 2605  | 
    
      # File 'formula.rb', line 2590 def runtime_installed_formula_dependents # `any_installed_keg` and `runtime_dependencies` `select`s ensure # that we don't end up with something `Formula#runtime_dependencies` can't # read from a `Tab`. Formula.cache[:runtime_installed_formula_dependents] ||= {} Formula.cache[:runtime_installed_formula_dependents][full_name] ||= Formula.installed .select(&:any_installed_keg) .select(&:runtime_dependencies) .select do |f| f.installed_runtime_formula_dependencies.any? do |dep| full_name == dep.full_name rescue name == dep.name end end end  | 
  
#sbin ⇒ Pathname
The directory where the formula's sbin binaries should be installed.
This is symlinked into HOMEBREW_PREFIX after installation or with
brew link for formulae that are not keg-only.
Generally we try to migrate these to #bin instead.
      1117  | 
    
      # File 'formula.rb', line 1117 def sbin = prefix/"sbin"  | 
  
#selective_patch(is_data: false) ⇒ 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.
      1648 1649 1650 1651 1652 1653 1654 1655 1656 1657 1658 1659  | 
    
      # File 'formula.rb', line 1648 def selective_patch(is_data: false) patches = patchlist.select { |p| p.is_a?(DATAPatch) == is_data } return if patches.empty? patchtype = if is_data "DATA" else "non-DATA" end ohai "Applying #{patchtype} patches" patches.each(&:apply) end  | 
  
#serialized_requirements ⇒ Array<Hash{String => 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.
      2835 2836 2837 2838 2839 2840 2841 2842 2843 2844 2845 2846 2847 2848 2849 2850 2851 2852 2853 2854 2855 2856 2857 2858  | 
    
      # File 'formula.rb', line 2835 def serialized_requirements requirements = self.class.spec_syms.to_h do |sym| [sym, send(sym)&.requirements] end merge_spec_dependables(requirements).map do |data| req = data[:dependable] req_name = req.name.dup req_name.prepend("maximum_") if req.respond_to?(:comparator) && req.comparator == "<=" req_version = if req.respond_to?(:version) req.version elsif req.respond_to?(:arch) req.arch end { "name" => req_name, "cask" => req.cask, "download" => req.download, "version" => req_version, "contexts" => req., "specs" => data[:specs], } end end  | 
  
#service ⇒ Homebrew::Service
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.
The service specification for the software.
      1336 1337 1338  | 
    
      # File 'formula.rb', line 1336 def service @service ||= T.let(Homebrew::Service.new(self, &self.class.service), T.nilable(Homebrew::Service)) end  | 
  
#service? ⇒ Boolean
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.
Is a service specification defined for the software?
      573  | 
    
      # File 'formula.rb', line 573 delegate service?: :"self.class"  | 
  
#service_name ⇒ 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.
The generated service name.
      1320  | 
    
      # File 'formula.rb', line 1320 def service_name = service.service_name  | 
  
#share ⇒ Pathname
The directory where the formula's shared files should be installed.
This is symlinked into HOMEBREW_PREFIX after installation or with
brew link for formulae that are not keg-only.
Examples
Need a custom directory?
(share/"concept").mkpath
Installing something into another custom directory?
(share/"concept2").install "ducks.txt"
Install ./example_code/simple/ones to share/demos:
(share/"demos").install "example_code/simple/ones"
Install ./example_code/simple/ones to share/demos/examples:
(share/"demos").install "example_code/simple/ones" => "examples"
  
      1151  | 
    
      # File 'formula.rb', line 1151 def share = prefix/"share"  | 
  
#shared_library(name, version = nil) ⇒ String
Shared library names according to platform conventions.
Optionally specify a version to restrict the shared library to a specific
version. The special string "*" matches any version.
If name is specified as "*", match any shared library of any version.
Example
shared_library("foo")      #=> foo.dylib
shared_library("foo", 1)   #=> foo.1.dylib
shared_library("foo", "*") #=> foo.2.dylib, foo.1.dylib, foo.dylib
shared_library("*")        #=> foo.dylib, bar.dylib
  
      2036 2037 2038 2039 2040 2041 2042 2043 2044 2045  | 
    
      # File 'formula.rb', line 2036 def shared_library(name, version = nil) return "*.dylib" if name == "*" && (version.blank? || version == "*") infix = if version == "*" "{,.*}" elsif version.present? ".#{version}" end "#{name}#{infix}.dylib" end  | 
  
#skip_clean?(path) ⇒ Boolean
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.
      1517 1518 1519 1520 1521 1522  | 
    
      # File 'formula.rb', line 1517 def skip_clean?(path) return true if path.extname == ".la" && T.must(self.class.skip_clean_paths).include?(:la) to_check = path.relative_path_from(prefix).to_s T.must(self.class.skip_clean_paths).include? to_check end  | 
  
#skip_cxxstdlib_check? ⇒ Boolean
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.
      1631 1632 1633 1634  | 
    
      # File 'formula.rb', line 1631 def skip_cxxstdlib_check? # odeprecated "`Formula#skip_cxxstdlib_check?`" false end  | 
  
#specified_name ⇒ 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.
The name specified to find this formula.
      462 463 464  | 
    
      # File 'formula.rb', line 462 def specified_name alias_name || name end  | 
  
#specified_path ⇒ Pathname?
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.
The path that was specified to find this formula.
      449 450 451 452 453 454 455 456 457 458  | 
    
      # File 'formula.rb', line 449 def specified_path return Homebrew::API::Formula.cached_json_file_path if loaded_from_api? return alias_path if alias_path&.exist? return @unresolved_path if @unresolved_path.exist? return local_bottle_path if local_bottle_path.presence&.exist? alias_path || @unresolved_path end  | 
  
#stable? ⇒ Boolean
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.
Is the currently active SoftwareSpec a #stable build?
      486 487 488  | 
    
      # File 'formula.rb', line 486 def stable? active_spec == stable end  | 
  
#std_cabal_v2_args ⇒ Array<String>
Standard parameters for Cabal-v2 builds.
      1881 1882 1883 1884 1885 1886 1887 1888 1889  | 
    
      # File 'formula.rb', line 1881 def std_cabal_v2_args # cabal-install's dependency-resolution backtracking strategy can # easily need more than the default 2,000 maximum number of # "backjumps," since Hackage is a fast-moving, rolling-release # target. The highest known needed value by a formula was 43,478 # for git-annex, so 100,000 should be enough to avoid most # gratuitous backjumps build failures. ["--jobs=#{ENV.make_jobs}", "--max-backjumps=100000", "--install-method=copy", "--installdir=#{bin}"] end  | 
  
#std_cargo_args(root: prefix, path: ".") ⇒ Array<String>
Standard parameters for Cargo builds.
      1897 1898 1899  | 
    
      # File 'formula.rb', line 1897 def std_cargo_args(root: prefix, path: ".") ["--jobs", ENV.make_jobs.to_s, "--locked", "--root=#{root}", "--path=#{path}"] end  | 
  
#std_cmake_args(install_prefix: prefix, install_libdir: "lib", find_framework: "LAST") ⇒ Array<String>
Standard parameters for CMake builds.
Setting CMAKE_FIND_FRAMEWORK to "LAST" tells CMake to search for our
libraries before trying to utilize Frameworks, many of which will be from
3rd party installs.
      1915 1916 1917 1918 1919 1920 1921 1922 1923 1924 1925 1926  | 
    
      # File 'formula.rb', line 1915 def std_cmake_args(install_prefix: prefix, install_libdir: "lib", find_framework: "LAST") %W[ -DCMAKE_INSTALL_PREFIX=#{install_prefix} -DCMAKE_INSTALL_LIBDIR=#{install_libdir} -DCMAKE_BUILD_TYPE=Release -DCMAKE_FIND_FRAMEWORK=#{find_framework} -DCMAKE_VERBOSE_MAKEFILE=ON -DCMAKE_PROJECT_TOP_LEVEL_INCLUDES=#{HOMEBREW_LIBRARY_PATH}/cmake/trap_fetchcontent_provider.cmake -Wno-dev -DBUILD_TESTING=OFF ] end  | 
  
#std_configure_args(prefix: self.prefix, libdir: "lib") ⇒ Array<String>
Standard parameters for configure builds.
      1937 1938 1939 1940  | 
    
      # File 'formula.rb', line 1937 def std_configure_args(prefix: self.prefix, libdir: "lib") libdir = Pathname(libdir).(prefix) ["--disable-debug", "--disable-dependency-tracking", "--prefix=#{prefix}", "--libdir=#{libdir}"] end  | 
  
#std_go_args(output: bin/name, ldflags: nil, gcflags: nil, tags: nil) ⇒ Array<String>
Standard parameters for Go builds.
      1953 1954 1955 1956 1957 1958 1959  | 
    
      # File 'formula.rb', line 1953 def std_go_args(output: bin/name, ldflags: nil, gcflags: nil, tags: nil) args = ["-trimpath", "-o=#{output}"] args += ["-tags=#{Array().join(" ")}"] if args += ["-ldflags=#{Array(ldflags).join(" ")}"] if ldflags args += ["-gcflags=#{Array(gcflags).join(" ")}"] if gcflags args end  | 
  
#std_meson_args ⇒ Array<String>
Standard parameters for Meson builds.
      1965 1966 1967  | 
    
      # File 'formula.rb', line 1965 def std_meson_args ["--prefix=#{prefix}", "--libdir=#{lib}", "--buildtype=release", "--wrap-mode=nofallback"] end  | 
  
#std_npm_args(prefix: libexec) ⇒ Array<String>
Standard parameters for npm builds.
      1973 1974 1975 1976 1977 1978 1979  | 
    
      # File 'formula.rb', line 1973 def std_npm_args(prefix: libexec) require "language/node" return Language::Node.std_npm_install_args(Pathname(prefix)) if prefix Language::Node.local_npm_install_args end  | 
  
#std_pip_args(prefix: self.prefix, build_isolation: false) ⇒ Array<String>
Standard parameters for pip builds.
      1988 1989 1990 1991 1992 1993  | 
    
      # File 'formula.rb', line 1988 def std_pip_args(prefix: self.prefix, build_isolation: false) args = ["--verbose", "--no-deps", "--no-binary=:all:", "--ignore-installed", "--no-compile"] args << "--prefix=#{prefix}" if prefix args << "--no-build-isolation" unless build_isolation args end  | 
  
#std_zig_args(prefix: self.prefix, release_mode: :fast) ⇒ Array<String>
Standard parameters for Zig builds.
release_mode can be set to either :safe, :fast or :small,
with :fast being the default value.
      2005 2006 2007 2008 2009 2010 2011 2012 2013 2014 2015 2016  | 
    
      # File 'formula.rb', line 2005 def std_zig_args(prefix: self.prefix, release_mode: :fast) raise ArgumentError, "Invalid Zig release mode: #{release_mode}" if [:safe, :fast, :small].exclude?(release_mode) release_mode_downcased = release_mode.to_s.downcase release_mode_capitalized = release_mode.to_s.capitalize [ "--prefix", prefix.to_s, "--release=#{release_mode_downcased}", "-Doptimize=Release#{release_mode_capitalized}", "--summary", "all" ] end  | 
  
#supersedes_an_installed_formula? ⇒ Boolean
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.
Is this formula the target of an alias used to install an old formula?
      1803  | 
    
      # File 'formula.rb', line 1803 def supersedes_an_installed_formula? = old_installed_formulae.any?  | 
  
#synced_with_other_formulae? ⇒ Boolean
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.
Whether this Formula is version-synced with other formulae.
      680 681 682 683 684  | 
    
      # File 'formula.rb', line 680 def synced_with_other_formulae? return false if @tap.nil? @tap.synced_versions_formulae.any? { |synced_formulae| synced_formulae.include?(name) } end  | 
  
#system(cmd, *args) ⇒ void
This method returns an undefined value.
To call out to the system, we use the system method and we prefer
you give the args separately as in the line below, otherwise a subshell
has to be opened first.
Examples
system "./bootstrap.sh", "--arg1", "--prefix=#{prefix}"
For CMake and other build systems we have some necessary defaults in e.g. #std_cmake_args:
system "cmake", ".", *std_cmake_args
If the arguments given to configure (or make or cmake) are depending
on options defined above, we usually make a list first and then
use the args << if <condition> to append each:
args = ["--with-option1", "--with-option2"]
args << "--without-gcc" if ENV.compiler == :clang
Most software still uses configure and make.
Check with ./configure --help for what our options are.
system "./configure", "--disable-debug", "--disable-dependency-tracking",
                      "--disable-silent-rules", "--prefix=#{prefix}",
                      *args # our custom arg list (needs `*` to unpack)
If there is a "make install" available, please use it!
system "make", "install"
  
      3154 3155 3156 3157 3158 3159 3160 3161 3162 3163 3164 3165 3166 3167 3168 3169 3170 3171 3172 3173 3174 3175 3176 3177 3178 3179 3180 3181 3182 3183 3184 3185 3186 3187 3188 3189 3190 3191 3192 3193 3194 3195 3196 3197 3198 3199 3200 3201 3202 3203 3204 3205 3206 3207 3208 3209 3210 3211 3212 3213 3214 3215 3216 3217 3218 3219 3220 3221 3222 3223 3224 3225 3226 3227 3228 3229 3230 3231 3232 3233 3234 3235 3236 3237 3238 3239 3240 3241 3242 3243 3244 3245 3246 3247 3248 3249 3250 3251 3252 3253 3254 3255 3256 3257 3258 3259  | 
    
      # File 'formula.rb', line 3154 def system(cmd, *args) verbose_using_dots = Homebrew::EnvConfig.verbose_using_dots? # remove "boring" arguments so that the important ones are more likely to # be shown considering that we trim long ohai lines to the terminal width pretty_args = args.dup unless verbose? case cmd when "./configure" pretty_args -= std_configure_args when "cabal" pretty_args -= std_cabal_v2_args when "cargo" pretty_args -= std_cargo_args when "cmake" pretty_args -= std_cmake_args when "go" pretty_args -= std_go_args when "meson" pretty_args -= std_meson_args when "zig" pretty_args -= std_zig_args when %r{(^|/)(pip|python)(?:[23](?:\.\d{1,2})?)?$} pretty_args -= std_pip_args end end pretty_args.each_index do |i| pretty_args[i] = "import setuptools..." if pretty_args[i].to_s.start_with? "import setuptools" end ohai "#{cmd} #{pretty_args * " "}".strip @exec_count ||= T.let(0, T.nilable(Integer)) @exec_count += 1 log_filename = format("#{logs}/#{active_log_prefix}%02<exec_count>d.%<cmd_base>s.log", exec_count: @exec_count, cmd_base: File.basename(cmd).split.first) logs.mkpath File.open(log_filename, "w") do |log| log.puts Time.now, "", cmd, args, "" log.flush if verbose? rd, wr = IO.pipe begin pid = fork do rd.close log.close exec_cmd(cmd, args, wr, log_filename) end wr.close if verbose_using_dots last_dot = Time.at(0) while (buf = rd.gets) log.puts buf # make sure dots printed with interval of at least 1 min. next if (Time.now - last_dot) <= 60 print "." $stdout.flush last_dot = Time.now end puts else while (buf = rd.gets) log.puts buf puts buf end end ensure rd.close end else pid = fork do exec_cmd(cmd, args, log, log_filename) end end Process.wait(pid) $stdout.flush unless $CHILD_STATUS.success? log_lines = Homebrew::EnvConfig.fail_log_lines log.flush if !verbose? || verbose_using_dots puts "Last #{log_lines} lines from #{log_filename}:" Kernel.system "/usr/bin/tail", "-n", log_lines.to_s, log_filename end log.puts require "system_config" require "build_environment" env = ENV.to_hash SystemConfig.dump_verbose_config(log) log.puts BuildEnvironment.dump env, log raise BuildError.new(self, cmd, args, env) end end end  | 
  
#systemd_service_path ⇒ Pathname
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.
The generated systemd service file path.
      1328  | 
    
      # File 'formula.rb', line 1328 def systemd_service_path = (any_installed_prefix || opt_prefix)/"#{service_name}.service"  | 
  
#systemd_timer_path ⇒ Pathname
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.
The generated systemd timer file path.
      1332  | 
    
      # File 'formula.rb', line 1332 def systemd_timer_path = (any_installed_prefix || opt_prefix)/"#{service_name}.timer"  | 
  
#tap? ⇒ Boolean
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.
True if this formula is provided by an external Tap.
      2437 2438 2439 2440 2441  | 
    
      # File 'formula.rb', line 2437 def tap? return false unless tap !T.must(tap).core_tap? end  | 
  
#tap_git_head ⇒ 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.
      2459 2460 2461 2462 2463  | 
    
      # File 'formula.rb', line 2459 def tap_git_head tap&.git_head rescue TapUnavailableError nil end  | 
  
#tap_path ⇒ Pathname
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.
      439 440 441 442 443 444 445  | 
    
      # File 'formula.rb', line 439 def tap_path return path unless (t = tap) return Formulary.core_path(name) if t.core_tap? return path unless t.installed? t.formula_files_by_name[name] || path end  | 
  
#test ⇒ Boolean?
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.
      3001  | 
    
      # File 'formula.rb', line 3001 def test; end  | 
  
#test_defined? ⇒ Boolean
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.
      2996 2997 2998  | 
    
      # File 'formula.rb', line 2996 def test_defined? method(:test).owner != Formula end  | 
  
#test_fixtures(file) ⇒ Pathname
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.
      3004 3005 3006  | 
    
      # File 'formula.rb', line 3004 def test_fixtures(file) HOMEBREW_LIBRARY_PATH/"test/support/fixtures"/file end  | 
  
#time ⇒ Time
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.
Creates a new Time object for use in the formula as the build time.
      2080 2081 2082 2083 2084 2085 2086  | 
    
      # File 'formula.rb', line 2080 def time if ENV["SOURCE_DATE_EPOCH"].present? Time.at(ENV["SOURCE_DATE_EPOCH"].to_i).utc else Time.now.utc end end  | 
  
#to_hash ⇒ Hash{String => 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.
      2647 2648 2649 2650 2651 2652 2653 2654 2655 2656 2657 2658 2659 2660 2661 2662 2663 2664 2665 2666 2667 2668 2669 2670 2671 2672 2673 2674 2675 2676 2677 2678 2679 2680 2681 2682 2683 2684 2685 2686 2687 2688 2689 2690 2691 2692 2693 2694 2695 2696 2697 2698 2699 2700 2701 2702 2703 2704 2705 2706 2707 2708 2709 2710 2711 2712 2713 2714 2715 2716 2717 2718 2719 2720 2721 2722 2723 2724 2725 2726 2727 2728 2729 2730 2731 2732 2733 2734 2735 2736 2737  | 
    
      # File 'formula.rb', line 2647 def to_hash hsh = { "name" => name, "full_name" => full_name, "tap" => tap&.name, "oldnames" => oldnames, "aliases" => aliases.sort, "versioned_formulae" => versioned_formulae.map(&:name), "desc" => desc, "license" => SPDX.license_expression_to_string(license), "homepage" => homepage, "versions" => { "stable" => stable&.version&.to_s, "head" => head&.version&.to_s, "bottle" => bottle_defined?, }, "urls" => urls_hash, "revision" => revision, "version_scheme" => version_scheme, "compatibility_version" => compatibility_version, "autobump" => autobump?, "no_autobump_message" => , "skip_livecheck" => livecheck.skip?, "bottle" => {}, "pour_bottle_only_if" => self.class.pour_bottle_only_if&.to_s, "keg_only" => keg_only?, "keg_only_reason" => keg_only_reason&.to_hash, "options" => [], "build_dependencies" => [], "dependencies" => [], "test_dependencies" => [], "recommended_dependencies" => [], "optional_dependencies" => [], "uses_from_macos" => [], "uses_from_macos_bounds" => [], "requirements" => serialized_requirements, "conflicts_with" => conflicts.map(&:name), "conflicts_with_reasons" => conflicts.map(&:reason), "link_overwrite" => self.class.link_overwrite_paths.to_a, "caveats" => caveats_with_placeholders, "installed" => T.let([], T::Array[T::Hash[String, T.untyped]]), "linked_keg" => linked_version&.to_s, "pinned" => pinned?, "outdated" => outdated?, "deprecated" => deprecated?, "deprecation_date" => deprecation_date, "deprecation_reason" => deprecation_reason, "deprecation_replacement_formula" => deprecation_replacement_formula, "deprecation_replacement_cask" => deprecation_replacement_cask, "disabled" => disabled?, "disable_date" => disable_date, "disable_reason" => disable_reason, "disable_replacement_formula" => disable_replacement_formula, "disable_replacement_cask" => disable_replacement_cask, "post_install_defined" => post_install_defined?, "service" => (service.to_hash if service?), "tap_git_head" => tap_git_head, "ruby_source_path" => ruby_source_path, "ruby_source_checksum" => {}, } hsh["bottle"]["stable"] = bottle_hash if stable && bottle_defined? hsh["options"] = .map do |opt| { "option" => opt.flag, "description" => opt.description } end hsh.merge!(dependencies_hash) hsh["installed"] = installed_kegs.sort_by(&:scheme_and_version).map do |keg| tab = keg.tab { "version" => keg.version.to_s, "used_options" => tab..as_flags, "built_as_bottle" => tab.built_as_bottle, "poured_from_bottle" => tab.poured_from_bottle, "time" => tab.time, "runtime_dependencies" => tab.runtime_dependencies, "installed_as_dependency" => tab.installed_as_dependency, "installed_on_request" => tab.installed_on_request, } end if (source_checksum = ruby_source_checksum) hsh["ruby_source_checksum"] = { "sha256" => source_checksum.hexdigest, } end hsh end  | 
  
#to_hash_with_variations ⇒ Hash{String => 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.
      2740 2741 2742 2743 2744 2745 2746 2747 2748 2749 2750 2751 2752 2753 2754 2755 2756 2757 2758 2759 2760 2761 2762 2763 2764 2765 2766 2767 2768 2769 2770 2771 2772 2773 2774  | 
    
      # File 'formula.rb', line 2740 def to_hash_with_variations hash = to_hash # Take from API, merging in local install status. if loaded_from_api? && (json_formula = api_source) && !Homebrew::EnvConfig.no_install_from_api? return json_formula.dup.merge( hash.slice("name", "installed", "linked_keg", "pinned", "outdated"), ) end variations = {} if path.exist? && on_system_blocks_exist? formula_contents = path.read OnSystem::VALID_OS_ARCH_TAGS.each do |bottle_tag| Homebrew::SimulateSystem.with_tag(bottle_tag) do variations_namespace = Formulary.class_s("Variations#{bottle_tag.to_sym.capitalize}") variations_formula_class = Formulary.load_formula(name, path, formula_contents, variations_namespace, flags: self.class.build_flags, ignore_errors: true) variations_formula = variations_formula_class.new(name, path, :stable, alias_path:, force_bottle:) variations_formula.to_hash.each do |key, value| next if value.to_s == hash[key].to_s variations[bottle_tag.to_sym] ||= {} variations[bottle_tag.to_sym][key] = value end end end end hash["variations"] = variations hash end  | 
  
#unlock ⇒ Array<FormulaLock>
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.
      1716 1717 1718 1719  | 
    
      # File 'formula.rb', line 1716 def unlock @lock&.unlock @oldname_locks.each(&:unlock) end  | 
  
#unpin(*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.
      163  | 
    
      # File 'sorbet/rbi/dsl/formula.rbi', line 163 def unpin(*args, &block); end  | 
  
#update_head_version ⇒ 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.
      623 624 625 626 627 628 629 630 631 632 633 634 635 636 637 638 639  | 
    
      # File 'formula.rb', line 623 def update_head_version return unless head? head_spec = T.must(head) return unless head_spec.downloader.is_a?(VCSDownloadStrategy) return unless head_spec.downloader.cached_location.exist? path = if ENV["HOMEBREW_ENV"] ENV.fetch("PATH") else PATH.new(ORIGINAL_PATHS) end with_env(PATH: path) do head_spec.version.update_commit(head_spec.downloader.last_commit) end end  | 
  
#urls_hash ⇒ Hash{String => Hash{String => 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.
      2809 2810 2811 2812 2813 2814 2815 2816 2817 2818 2819 2820 2821 2822 2823 2824 2825 2826 2827 2828 2829 2830 2831 2832  | 
    
      # File 'formula.rb', line 2809 def urls_hash hash = {} if stable stable_spec = T.must(stable) hash["stable"] = { "url" => stable_spec.url, "tag" => stable_spec.specs[:tag], "revision" => stable_spec.specs[:revision], "using" => (stable_spec.using if stable_spec.using.is_a?(Symbol)), "checksum" => stable_spec.checksum&.to_s, } end if head hash["head"] = { "url" => T.must(head).url, "branch" => T.must(head).specs[:branch], "using" => (T.must(head).using if T.must(head).using.is_a?(Symbol)), } end hash end  | 
  
#valid_platform? ⇒ Boolean
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.
True if this formula can be installed on this platform.
Redefined in extend/os.
      2446 2447 2448  | 
    
      # File 'formula.rb', line 2446 def valid_platform? requirements.none?(MacOSRequirement) && requirements.none?(LinuxRequirement) end  | 
  
#var ⇒ Pathname
The directory where the formula's variable files should be installed.
This directory is not inside the HOMEBREW_CELLAR so it persists
across upgrades.
      1228  | 
    
      # File 'formula.rb', line 1228 def var = HOMEBREW_PREFIX/"var"  | 
  
#version ⇒ 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.
The version for the currently active SoftwareSpec. The version is autodetected from the URL and/or tag so only needs to be declared if it cannot be autodetected correctly.
      580  | 
    
      # File 'formula.rb', line 580 delegate version: :active_spec  | 
  
#versioned_formula? ⇒ Boolean
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.
If this is a @-versioned formula.
      647  | 
    
      # File 'formula.rb', line 647 def versioned_formula? = name.include?("@")  | 
  
#versioned_formulae ⇒ Array<Formula>
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 any @-versioned Formula objects for any Formula (including versioned formulae).
      670 671 672 673 674 675 676  | 
    
      # File 'formula.rb', line 670 def versioned_formulae versioned_formulae_names.filter_map do |name| Formula[name] rescue FormulaUnavailableError nil end.sort_by(&:version).reverse end  | 
  
#versioned_formulae_names ⇒ Array<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.
Returns any other @-versioned formulae names for any Formula (including versioned formulae).
      651 652 653 654 655 656 657 658 659 660 661 662 663 664 665 666  | 
    
      # File 'formula.rb', line 651 def versioned_formulae_names versioned_names = if tap name_prefix = name.gsub(/(@[\d.]+)?$/, "") T.must(tap).prefix_to_versioned_formulae_names.fetch(name_prefix, []) elsif path.exist? Pathname.glob(path.to_s.gsub(/(@[\d.]+)?\.rb$/, "@*.rb")) .map { |path| path.basename(".rb").to_s } .sort else raise "Either tap or path is required to list versioned formulae" end versioned_names.reject do |versioned_name| versioned_name == name end end  | 
  
#with_logging(log_type, &_block) ⇒ 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.
Runs a block with the given log type in effect for its duration.
      1306 1307 1308 1309 1310 1311 1312  | 
    
      # File 'formula.rb', line 1306 def with_logging(log_type, &_block) old_log_type = @active_log_type @active_log_type = T.let(log_type, T.nilable(String)) yield ensure @active_log_type = old_log_type end  | 
  
#xcodebuild(*args) ⇒ 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.
Runs xcodebuild without Homebrew's compiler environment variables set.
      3333 3334 3335 3336 3337 3338 3339 3340 3341  | 
    
      # File 'formula.rb', line 3333 def xcodebuild(*args) removed = ENV.remove_cc_etc begin self.system("xcodebuild", *args) ensure ENV.update(removed) end end  | 
  
#zsh_completion ⇒ Pathname
The directory where the formula's zsh completion files should be
installed.
This is symlinked into HOMEBREW_PREFIX after installation or with
brew link for formulae that are not keg-only.
      1264  | 
    
      # File 'formula.rb', line 1264 def zsh_completion = share/"zsh/site-functions"  | 
  
#zsh_function ⇒ Pathname
The directory where the formula's zsh function files should be
installed.
This is symlinked into HOMEBREW_PREFIX after installation or with
brew link for formulae that are not keg-only.
      1237  | 
    
      # File 'formula.rb', line 1237 def zsh_function = share/"zsh/site-functions"  |