Spec-Zone.ru › Homebrew

Класс: Formula Абстрактный Закрытый

Наследует:
Object
  • Object
  • Formula
показать всё
Расширен модулями:
APIHashable, BuildEnvironment::DSL, Cachable, Forwardable, OnSystem::MacOSAndLinux, T::Generic, T::Helpers, Utils::Output::Mixin
Подключает:
Context, FileUtils, Homebrew::Livecheck::Constants, OS::Linux::Formula, OS::Mac::Formula, OnSystem::MacOSAndLinux, Utils::Output::Mixin, Utils::Path, Utils::Shebang, Utils::Shell
Определён в:
formula.rb,
sorbet/rbi/dsl/formula.rbi

Обзор

Этот класс является частью закрытого API. Этот класс можно использовать только в репозитории Homebrew/brew. По возможности сторонним разработчикам следует избегать использования этого класса, поскольку он может быть удалён или изменён без предупреждения.

Этот класс является абстрактным.

Формула содержит инструкции и метаданные, необходимые Homebrew для установки программного обеспечения. Каждая формула Homebrew является экземпляром Formula. Все подклассы Formula (как и все классы Ruby) должны называться UpperCase и not-use-dashes. Формула, заданная в this-formula.rb, должна иметь класс с именем ThisFormula. Homebrew проверяет соответствие имени файла имени класса. Убедитесь с помощью brew search, что это имя свободно!

Пример

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

См. также:

  • SharedEnvExtension
  • Pathname
  • FileUtils
  • Справочник по формулам
  • Руководство по стилю Ruby

Прямые известные подклассы

PortableFormula

Определено в пространстве имён

Классы: FormulaConflict

Краткое описание констант свернуть

Cache =

Эта константа является частью закрытого API. Эту константу можно использовать только в репозитории Homebrew/brew. По возможности сторонним разработчикам следует избегать использования этой константы, поскольку она может быть удалена или изменена без предупреждения.

type_template { { fixed: T::Hash[Symbol, T.untyped] } }

Константы, подключённые из Homebrew::Livecheck::Constants

Homebrew::Livecheck::Constants::LATEST_VERSION

Константы, подключённые из Utils::Shell

Utils::Shell::SHELL_PROFILE_MAP, Utils::Shell::UNSAFE_SHELL_CHAR

Краткое описание атрибутов класса свернуть

  • .api_source ⇒ Hash{String => T.untyped}? только для чтения закрытый

    Указывает, была ли эта формула загружена с помощью API formulae.brew.sh.

  • .conflicts ⇒ Array<FormulaConflict>? только для чтения закрытый
  • .deprecate_args ⇒ Hash{Symbol => String, Symbol, nil}? только для чтения закрытый

    Аргументы, переданные в deprecate!.

  • .deprecation_date ⇒ Date? только для чтения закрытый

    Дата устаревания Formula.

  • .deprecation_reason ⇒ String, ... только для чтения закрытый

    Причина устаревания Formula.

  • .deprecation_replacement_cask ⇒ String? только для чтения закрытый

    Cask на замену устаревшей Formula.

  • .deprecation_replacement_formula ⇒ String? только для чтения закрытый

    Формула на замену устаревшей Formula.

  • .disable_args ⇒ Hash{Symbol => String, Symbol, nil}? только для чтения закрытый

    Аргументы, переданные в disable!.

  • .disable_date ⇒ Date? только для чтения закрытый

    Дата, когда эта Formula была или будет отключена.

  • .disable_reason ⇒ String, ... только для чтения закрытый

    Причина отключения этой Formula.

  • .disable_replacement_cask ⇒ String? только для чтения закрытый

    Cask на замену отключённой Formula.

  • .disable_replacement_formula ⇒ String? только для чтения закрытый

    Формула на замену отключённой Formula.

  • .keg_only_reason ⇒ KegOnlyReason? только для чтения закрытый

    Причина, по которой это программное обеспечение не связывается (по умолчанию) с HOMEBREW_PREFIX.

  • .link_overwrite_paths ⇒ Set<String>? только для чтения закрытый
  • .no_autobump_message ⇒ String, ... только для чтения закрытый

    Сообщение с объяснением, почему формула исключена из списка автоматического обновления версий.

  • .pour_bottle_check_unsatisfied_reason ⇒ String? закрытый

    Если pour_bottle? возвращает false: отображаемая пользователю причина, объясняющая, почему нельзя использовать bottle.

  • .pour_bottle_only_if ⇒ Symbol? только для чтения закрытый
  • .pypi_packages_info ⇒ PypiPackages? только для чтения закрытый
  • .skip_clean_paths ⇒ Set<String, Symbol>? только для чтения закрытый

Краткое описание атрибутов экземпляра свернуть

  • #active_log_type ⇒ String? только для чтения закрытый

    При выполнении сборки, тестирования или другого действия с ведением журнала указывает, где следует использовать файл журнала.

  • #active_spec ⇒ void только для записи закрытый
  • #active_spec_sym ⇒ Symbol только для чтения закрытый

    Символ, обозначающий текущую активную спецификацию SoftwareSpec.

  • #alias_name ⇒ String? только для чтения закрытый

    Имя псевдонима, использованного для идентификации этой Formula.

  • #alias_path ⇒ Pathname? только для чтения закрытый

    Путь к псевдониму, использованному для идентификации этой Formula.

  • #build ⇒ BuildOptions, Tab закрытый

    BuildOptions или Tab для этой Formula.

  • #buildpath ⇒ Pathname? только для чтения

    Текущий рабочий каталог во время сборки.

  • #compatibility_version ⇒ Integer? только для чтения

    Используется для указания совместимости API/ABI зависимостей.

  • #follow_installed_alias ⇒ Boolean (также: #follow_installed_alias?) закрытый

    Следует ли считать эту формулу устаревшей, если цель псевдонима, использованного при её установке, изменилась.

  • #force_bottle ⇒ Boolean закрытый

    Следует ли принудительно использовать bottle.

  • #full_alias_name ⇒ String? только для чтения закрытый

    Полное имя псевдонима, ссылающегося на эту Formula.

  • #full_name ⇒ String только для чтения

    Полное имя этой Formula.

  • #head ⇒ SoftwareSpec? только для чтения

    Спецификация SoftwareSpec для HEAD этой Formula.

  • #local_bottle_path ⇒ Pathname? закрытый

    При установке bottle (бинарного пакета) из локального пути здесь будет указан полный путь к архиву bottle.

  • #name ⇒ String только для чтения

    Имя этой Formula.

  • #path ⇒ Pathname только для чтения

    Полный путь к этой Formula.

  • #pinned? ⇒ Boolean только для чтения закрытый
  • #pypi_packages_info ⇒ PypiPackages только для чтения закрытый

    Сведения о сопоставлениях PyPI для этой Formula хранятся в объекте PypiPackages.

  • #revision ⇒ Integer только для чтения

    Используется для создания новых версий программного обеспечения в Homebrew без выпуска новых версий upstream.

  • #source_modified_time ⇒ Time? только для чтения закрытый

    Время последнего изменения исходных файлов.

  • #stable ⇒ SoftwareSpec? только для чтения

    Стабильная (и используемая по умолчанию) спецификация SoftwareSpec для этой Formula.

  • #tap ⇒ Tap? только для чтения

    Экземпляр Tap, связанный с этой Formula.

  • #testpath ⇒ Pathname? только для чтения

    Текущий рабочий каталог во время тестирования.

  • #version_scheme ⇒ Integer только для чтения

    Используется для изменения схем версионирования пакетов.

Краткое описание методов класса свернуть

  • .[](name) ⇒ Formula закрытый
  • .alias_full_names ⇒ Array<String> закрытый

    Массив всех псевдонимов в виде полных имён.

  • .aliases ⇒ Array<String> закрытый

    Массив всех псевдонимов.

  • .all(eval_all: false) ⇒ Array<Formula> закрытый

    Массив всех известных Formula.

  • .allow_network_access!(phases = []) ⇒ void

    Этапы, на которых разрешён доступ к сети.

  • .autobump? ⇒ Boolean закрытый

    Входит ли формула в список автоматического обновления?

  • .bottle(&block) ⇒ void

    Добавляет Formula.bottle SoftwareSpec.

  • .build ⇒ BuildOptions закрытый
  • .build_flags ⇒ Array<String> закрытый

    Получает BUILD_FLAGS из пространства имён формулы, заданного в Formulary::load_formula.

  • .compatibility_version(val = T.unsafe(nil)) ⇒ Integer?

    Используется для указания совместимости API/ABI зависимостей.

  • .conflicts_with(*names) ⇒ void

    Одна или несколько формул, конфликтующих с этой формулой, и причины конфликта.

  • .core_aliases ⇒ Array<String> закрытый

    Массив всех основных псевдонимов.

  • .core_names ⇒ Array<String> закрытый

    Массив имён всех основных Formula.

  • .deny_network_access!(phases = []) ⇒ void

    Этапы, на которых доступ к сети запрещён.

  • .depends_on(dep) ⇒ void

    Зависимости этой формулы.

  • .deprecate!(date:, because:, replacement: nil, replacement_formula: nil, replacement_cask: nil) ⇒ void

    Помечает Formula как устаревшую (с указанной даты), чтобы при каждой установке отображалось предупреждение.

  • .deprecated? ⇒ Boolean закрытый

    Является ли эта Formula устаревшей (то есть отображается ли предупреждение при установке).

  • .deprecated_option(hash) ⇒ void

    Устаревшие параметры используются для переименования параметров и переноса пользователей, которые их использовали, на новые параметры.

  • .desc(val = T.unsafe(nil)) ⇒ String?

    Однострочное описание программного обеспечения.

  • .disable!(date:, because:, replacement: nil, replacement_formula: nil, replacement_cask: nil) ⇒ void

    Отключает Formula (с указанной даты), чтобы её нельзя было установить.

  • .disabled? ⇒ Boolean закрытый

    Отключена ли эта Formula (то есть можно ли её установить).

  • .fails_with(compiler, &block) ⇒ void

    Отмечает Formula как несовместимую с определённым компилятором, чтобы вместо него использовались другие компиляторы.

  • .freeze ⇒ T.self_type закрытый
  • .full_names ⇒ Array<String> закрытый

    Массив всех имён Formula, которые формулы из tap используют в качестве полных имён.

  • .fuzzy_search(name) ⇒ Array<String> закрытый

    Возвращает список приблизительно совпадающих имён формул, но не полных совпадений.

  • .head(val = nil, specs = {}, &block) ⇒ T.untyped

    Добавляет Formula.head SoftwareSpec.

  • .homepage(val = T.unsafe(nil)) ⇒ String?

    Домашняя страница программного обеспечения.

  • .inherited(child) ⇒ void закрытый

    Инициализирует переменные экземпляра для каждого подкласса.

  • .installed ⇒ Array<Formula> закрытый

    Массив всех установленных Formula.

  • .installed_formula_names ⇒ Array<String> закрытый

    Массив имён всех установленных в данный момент формул.

  • .installed_with_alias_path(alias_path) ⇒ Array<Formula> закрытый
  • .keg_only(reason, explanation = "") ⇒ void

    Программное обеспечение, которое не будет связано символическими ссылками с brew --prefix и будет находиться только в своём Cellar.

  • .license(args = nil) ⇒ SPDX::LicenseExpression?

    Идентификатор SPDX лицензии с открытым исходным кодом, используемой формулой.

  • .link_overwrite(*paths) ⇒ Set<String> закрытый

    Разрешает перезапись определённых файлов при создании ссылок.

  • .livecheck(&block) ⇒ T.untyped

    Livecheck можно использовать для проверки наличия более новых версий программного обеспечения.

  • .livecheck_defined? ⇒ Boolean закрытый

    Проверяет, определена ли спецификация livecheck.

  • .loaded_from_api? ⇒ Boolean закрытый

    Была ли эта формула загружена с помощью API formulae.brew.sh.

  • .loaded_from_internal_api? ⇒ Boolean закрытый

    Была ли эта формула загружена с помощью внутреннего API formulae.brew.sh.

  • .mirror(val) ⇒ void

    Дополнительные URL-адреса для версии формулы Formula.stable.

  • .names ⇒ Array<String> закрытый

    Массив имён всех Formula.

  • .network_access_allowed ⇒ Hash{Symbol => Boolean} закрытый
  • .network_access_allowed?(phase) ⇒ Boolean закрытый

    Следует ли принудительно отключить сеть на указанном этапе.

  • .no_autobump!(because:) ⇒ void

    Исключает формулу из списка автоматического обновления.

  • .on_system_blocks_exist? ⇒ Boolean закрытый

    Содержит ли эта формула блоки, зависящие от ОС/архитектуры (например, on_macos, on_arm, on_monterey :or_older, on_system :linux, macos: :big_sur_or_newer).

  • .option(name, description = "") ⇒ void

    Параметры можно использовать в качестве аргументов для brew install.

  • .patch(strip = :p1, src = nil, &block) ⇒ void

    Внешние исправления можно объявлять с помощью блоков в стиле resource.

  • .post_install_steps(*steps, &block) ⇒ Homebrew::InstallSteps::Steps

    Декларативные шаги, выполняемые после установки bottle.

  • .post_install_steps_defined? ⇒ Boolean закрытый
  • .pour_bottle?(only_if: nil, &block) ⇒ void

    Определяет, можно ли использовать bottle Formula в данной установке Homebrew.

  • .preserve_rpath(value: true) ⇒ Boolean

    Сохраняет имена установки @rpath при исправлении динамической компоновки в macOS.

  • .preserve_rpath? ⇒ Boolean внутренний

    Проверяет, следует ли сохранять имена установки @rpath.

  • .pypi_packages(package_name: nil, extra_packages: nil, exclude_packages: nil, dependencies: nil) ⇒ void

    Добавляет сведения о сопоставлении формулы с пакетами PyPI в виде объекта PypiPackages.

  • .racks ⇒ Array<Pathname> закрытый

    Массив всех установленных в данный момент хранилищ.

  • .resource(name, klass = Resource, &block) ⇒ void

    Дополнительные загрузки можно определить как ресурсы Formula.resource и использовать в методе установки.

  • .revision(val = T.unsafe(nil)) ⇒ Integer?

    Используется для создания новых версий программного обеспечения в Homebrew без выпуска новых версий upstream.

  • .service(&block) ⇒ T.proc.returns(T.untyped)?

    С помощью service можно определять службы.

  • .service? ⇒ Boolean закрытый

    Проверяет, определена ли спецификация службы.

  • .sha256(val) ⇒ void

    Чтобы проверить целостность и безопасность кэшированной загрузки, мы проверяем, совпадает ли хеш SHA-256 с указанным в Formula.

  • .skip_clean(*paths) ⇒ Set<String, Symbol>

    Пропускает очистку путей в формуле.

  • .spec_syms ⇒ Array<Symbol> закрытый
  • .specs ⇒ Array<SoftwareSpec> закрытый

    Список Formula.stable и Formula.head SoftwareSpec.

  • .stable(&block) ⇒ T.untyped

    Позволяет добавлять Formula.depends_on и Patch только к Formula.stable SoftwareSpec.

  • .tap_aliases ⇒ Array<String> закрытый

    Массив всех псевдонимов tap.

  • .tap_files ⇒ Array<Pathname> закрытый

    Массив всех файлов Formula из tap.

  • .tap_names ⇒ Array<String> закрытый

    Массив имён всех Formula из tap.

  • .test(&block) ⇒ BasicObject

    Для новых формул требуется тест, и он нас радует.

  • .url(val = T.unsafe(nil), specs = {}) ⇒ String

    URL-адрес для загрузки исходного кода стабильной версии формулы Formula.stable.

  • .uses_from_macos(dep, bounds = {}) ⇒ void

    Указывает на использование зависимостей, предоставляемых macOS.

  • .version(val = nil) ⇒ Version?

    Строка версии стабильной версии формулы Formula.stable.

  • .version_scheme(val = T.unsafe(nil)) ⇒ Integer?

    Используется для создания новых схем версий Homebrew.

Краткое описание методов экземпляра свернуть

  • #active_log_prefix ⇒ String закрытый

    Префикс, если он задан, который используется в именах файлов для журналирования текущей активности.

  • #alias_changed? ⇒ Boolean закрытый

    Изменился ли псевдоним, использованный для установки формулы, или уже установлены другие формулы с этим псевдонимом?

  • #aliases ⇒ Array<String> внутренний

    Все псевдонимы формулы.

  • #allow_network_access!(*args, &block) ⇒ T.untyped закрытый
  • #any_installed_keg ⇒ Keg? закрытый

    Возвращает Keg для opt_prefix или installed_prefix, если они существуют.

  • #any_installed_prefix ⇒ Pathname? внутренний

    Получить путь к любому установленному префиксу.

  • #any_installed_version ⇒ PkgVersion? закрытый

    Возвращает PkgVersion этой формулы, если она установлена.

  • #any_version_installed? ⇒ Boolean

    Установлена ли хотя бы одна версия Formula.

  • #api_source ⇒ T.untyped закрытый

    Данные источника API, используемые для загрузки этой формулы.

  • #autobump? ⇒ Boolean закрытый

    Есть ли формула в списке autobump?

  • #bash_completion ⇒ Pathname

    Каталог, в который следует устанавливать файлы автодополнения bash для формулы.

  • #bin ⇒ Pathname

    Каталог, в который следует устанавливать исполняемые файлы формулы.

  • #bottle ⇒ Bottle? закрытый

    Объект Bottle для текущего активного SoftwareSpec.

  • #bottle_defined?(*args, &block) ⇒ Boolean закрытый
  • #bottle_for_tag(tag = nil) ⇒ Bottle? закрытый

    Объект Bottle для указанного тега.

  • #bottle_hash ⇒ Hash{String => T.untyped} закрытый

    Возвращает сведения о бутылке для формулы.

  • #bottle_prefix ⇒ Pathname закрытый

    Каталог, используемый в качестве префикса для файлов #etc и #var при установке, чтобы они устанавливались туда после распаковки бутылки, несмотря на то, что они не находятся в HOMEBREW_CELLAR.

  • #bottle_specification(*args, &block) ⇒ T.untyped закрытый
  • #bottle_tab_attributes ⇒ Hash{String => T.untyped} закрытый
  • #bottle_tag?(*args, &block) ⇒ Boolean закрытый
  • #bottled?(*args, &block) ⇒ Boolean закрытый
  • #brew(fetch: true, keep_tmp: false, debug_symbols: false, interactive: false, &_blk) ⇒ void закрытый

    Передаёт управление |self,staging|, установив текущий рабочий каталог в каталог распакованного tar-архива, где staging — это контекст подготовки Mktemp.

  • #cached_download(*args, &block) ⇒ T.untyped закрытый
  • #caveats ⇒ String? закрытый

    Предупреждает пользователя о специфичных для Homebrew особенностях или проблемах этого пакета.

  • #caveats_with_placeholders ⇒ String? закрытый
  • #clear_cache(*args, &block) ⇒ T.untyped закрытый
  • #compiler_failures(*args, &block) ⇒ T.untyped закрытый
  • #conflicts ⇒ Array<FormulaConflict> внутренний

    Возвращает список объектов FormulaConflict, указывающих, какие формулы конфликтуют с этой формулой и по какой причине.

  • #core_formula? ⇒ Boolean закрытый

    Истинно, если эта формула предоставляется самим Homebrew.

  • #current_installed_alias_target ⇒ Formula? закрытый
  • #declared_deps(*args, &block) ⇒ T.untyped закрытый
  • #deny_network_access!(*args, &block) ⇒ T.untyped закрытый
  • #dependencies_hash ⇒ Hash{String => T.untyped} закрытый
  • #deprecate_args ⇒ T.untyped закрытый

    Аргументы, использованные для объявления этой Formula устаревшей.

  • #deprecated? ⇒ Boolean закрытый

    Является ли эта Formula устаревшей (то есть выводит предупреждение при установке).

  • #deprecated_flags(*args, &block) ⇒ T.untyped закрытый
  • #deprecated_options(*args, &block) ⇒ T.untyped закрытый
  • #deprecation_date ⇒ T.untyped закрытый

    Дата, когда эта Formula была или станет устаревшей.

  • #deprecation_reason ⇒ T.untyped закрытый

    Причина, по которой эта Formula считается устаревшей.

  • #deprecation_replacement_cask ⇒ T.untyped закрытый

    Cask, заменяющий эту устаревшую Formula.

  • #deprecation_replacement_formula ⇒ T.untyped закрытый

    Формула, заменяющая эту устаревшую Formula.

  • #deps(*args, &block) ⇒ T.untyped закрытый
  • #desc ⇒ T.untyped закрытый

    Описание программного обеспечения.

  • #deuniversalize_machos(*targets) ⇒ void

    Заменяет универсальный бинарный файл его срезом для текущей платформы.

  • #disable_args ⇒ T.untyped закрытый

    Аргументы, использованные для отключения этой Formula.

  • #disable_date ⇒ T.untyped закрытый

    Дата, когда эта Formula была или станет отключённой.

  • #disable_reason ⇒ T.untyped закрытый

    Причина отключения этой Formula.

  • #disable_replacement_cask ⇒ T.untyped закрытый

    Cask, заменяющий эту отключённую Formula.

  • #disable_replacement_formula ⇒ T.untyped закрытый

    Формула, заменяющая эту отключённую Formula.

  • #disabled? ⇒ Boolean закрытый

    Отключена ли эта Formula (то есть её нельзя установить).

  • #doc ⇒ Pathname

    Каталог, в который следует устанавливать документацию формулы.

  • #downloader(*args, &block) ⇒ T.untyped закрытый
  • #eligible_kegs_for_cleanup(quiet: false) ⇒ Array<Keg> закрытый
  • #elisp ⇒ Pathname

    Каталог, в который следует устанавливать файлы Emacs Lisp; к имени добавляется имя формулы, чтобы избежать конфликтов при создании ссылок.

  • #enqueue_resources_and_patches(download_queue:) ⇒ void закрытый
  • #ensure_installed!(reason: "", latest: false, output_to_stderr: true, quiet: false, executable: nil, version_args: ["--version"]) ⇒ T.self_type, Pathname закрытый

    Проверяет, что указанная формула установлена.

  • #env(*args, &block) ⇒ T.untyped закрытый
  • #etc ⇒ Pathname

    Каталог, в который следует устанавливать файлы конфигурации формулы.

  • #fetch_bottle_tab(quiet: false) ⇒ void закрытый
  • #fetch_patches ⇒ void закрытый
  • #fish_completion ⇒ Pathname

    Каталог, в который следует устанавливать файлы автодополнения fish для формулы.

  • #fish_function ⇒ Pathname

    Каталог, в который следует устанавливать файлы функций fish для формулы.

  • #frameworks ⇒ Pathname

    Каталог, в который следует устанавливать фреймворки формулы.

  • #full_formulae_names ⇒ Array<String> закрытый

    Возвращает имена родственных формул -full или не--full для любой Formula.

  • #full_installed_alias_name ⇒ String? закрытый
  • #full_installed_specified_name ⇒ String закрытый

    Имя (включая tap), указанное при установке этой формулы.

  • #full_specified_name ⇒ String закрытый

    Имя (включая tap), указанное для поиска этой формулы.

  • #generate_completions_from_executable(*commands, base_name: nil, shell_parameter_format: nil, shells: Utils::ShellCompletion.default_completion_shells(shell_parameter_format)) ⇒ void

    Создаёт автодополнение командной оболочки для формулы для bash, zsh, fish и, при необходимости, pwsh, используя исполняемый файл формулы.

  • #head? ⇒ Boolean закрытый

    Является ли текущий активный SoftwareSpec сборкой #head?

  • #head_only? ⇒ Boolean закрытый

    Предназначена ли эта формула только для HEAD?

  • #head_version_outdated?(version, fetch_head: false) ⇒ Boolean закрытый
  • #homepage ⇒ T.untyped закрытый

    Домашняя страница программного обеспечения.

  • #implied_link_overwrite?(keg_name, overwrite_formulae) ⇒ Boolean закрытый
  • #include ⇒ Pathname

    Каталог, в который следует устанавливать заголовочные файлы формулы.

  • #info ⇒ Pathname

    Каталог, в который следует устанавливать информационные файлы формулы.

  • #initialize(name, path, spec, alias_path: nil, tap: nil, force_bottle: false) ⇒ void конструктор закрытый
  • #inreplace(paths, before = nil, after = nil, audit_result: true, global: true, &block) ⇒ void

    Иногда перед установкой необходимо внести небольшие изменения.

  • #install ⇒ void

    Этот метод переопределяется в подклассах Formula, чтобы предоставить инструкции по установке.

  • #install_etc_var ⇒ void закрытый
  • #installed_alias_name ⇒ String? закрытый
  • #installed_alias_path ⇒ Pathname? закрытый

    Путь к псевдониму, использованному для установки этой формулы, если он существует.

  • #installed_alias_target_changed? ⇒ Boolean закрытый

    Изменился ли целевой объект псевдонима, использованного для установки этой формулы? Возвращает false, если формула была установлена без псевдонима.

  • #installed_kegs ⇒ Array<Keg> закрытый

    Все кеги, установленные в данный момент.

  • #installed_prefixes ⇒ Array<Pathname> закрытый

    Все каталоги префиксов, установленные в данный момент.

  • #installed_runtime_formula_dependencies(read_from_tab: true, undeclared: true) ⇒ Array<Formula> закрытый

    Возвращает список установленных объектов Formula, необходимых во время выполнения.

  • #keg_only? ⇒ Boolean внутренний

    В редких случаях библиотеку не нужно связывать символической ссылкой с основным префиксом.

  • #keg_only_reason(*args, &block) ⇒ T.untyped приватный
  • #kext_prefix ⇒ Pathname

    Каталог, в который следует устанавливать расширения ядра формулы.

  • #latest_formula ⇒ Formula приватный

    Если значение псевдонима изменилось, возвращает новую формулу.

  • #latest_head_pkg_version(fetch_head: false) ⇒ PkgVersion приватный
  • #latest_head_prefix ⇒ Pathname? приватный
  • #latest_head_version ⇒ PkgVersion? приватный
  • #latest_installed_prefix ⇒ Pathname приватный

    Последний префикс для этой формулы.

  • #latest_version_installed? ⇒ Boolean приватный

    Установлена ли эта Formula.

  • #launchd_service_path ⇒ Pathname приватный

    Путь к созданному файлу launchd Formula.service.

  • #lib ⇒ Pathname

    Каталог, в который следует устанавливать библиотеки формулы.

  • #libexec ⇒ Pathname

    Каталог, в который следует устанавливать исполняемые файлы формулы.

  • #license ⇒ T.untyped приватный

    Идентификатор лицензии на программное обеспечение в формате SPDX.

  • #link_overwrite?(path) ⇒ Boolean приватный

    Явно указанные пути link_overwrite также могут подразумеваться для связанных семейств формул.

  • #link_overwrite_formulae ⇒ Array<Formula> приватный

    Возвращает родственные Formula, ссылки на префиксы которых следует заменить при создании ссылки на эту Formula.

  • #link_overwrite_formulae_names ⇒ Array<String> приватный

    Возвращает имена родственных формул, ссылки на префиксы которых следует заменить при создании ссылки на эту Formula.

  • #link_overwrite_keg_name(path) ⇒ String, ... приватный
  • #link_overwrite_reason ⇒ String? приватный
  • #link_overwrite_related_formula_names ⇒ Array<String> приватный
  • #linked? ⇒ Boolean внутренний

    Связана ли формула символической ссылкой?

  • #linked_keg ⇒ Pathname внутренний

    Каталог символической ссылки, указывающий на состояние связывания этой Formula.

  • #linked_version ⇒ PkgVersion? приватный

    PkgVersion связанного keg для формулы.

  • #livecheck ⇒ T.untyped приватный

    Спецификация livecheck для программного обеспечения.

  • #livecheck_defined? ⇒ Boolean приватный

    Определена ли спецификация livecheck для программного обеспечения?

  • #livecheckable? ⇒ Boolean приватный

    Это устаревший псевдоним для #livecheck_defined?.

  • #loaded_from_api? ⇒ Boolean приватный

    Была ли эта формула загружена с помощью API formulae.brew.sh.

  • #loaded_from_internal_api? ⇒ Boolean приватный

    Была ли эта формула загружена с помощью внутреннего API formulae.brew.sh.

  • #loader_path ⇒ String

    Переменная компоновщика для каталога, содержащего программу или разделяемый объект.

  • #lock ⇒ Array<String> приватный
  • #logs ⇒ Pathname приватный

    Каталог, в который будут записываться журналы установки или тестирования формулы.

  • #man ⇒ Pathname

    Корневой каталог, в который следует устанавливать страницы руководства формулы.

  • #man1 ⇒ Pathname

    Каталог, в который следует устанавливать страницы руководства man1 для формулы.

  • #man2 ⇒ Pathname

    Каталог, в который следует устанавливать страницы руководства man2 для формулы.

  • #man3 ⇒ Pathname

    Каталог, в который следует устанавливать страницы руководства man3 для формулы.

  • #man4 ⇒ Pathname

    Каталог, в который следует устанавливать страницы руководства man4 для формулы.

  • #man5 ⇒ Pathname

    Каталог, в который следует устанавливать страницы руководства man5 для формулы.

  • #man6 ⇒ Pathname

    Каталог, в который следует устанавливать страницы руководства man6 для формулы.

  • #man7 ⇒ Pathname

    Каталог, в который следует устанавливать страницы руководства man7 для формулы.

  • #man8 ⇒ Pathname

    Каталог, в который следует устанавливать страницы руководства man8 для формулы.

  • #migration_needed? ⇒ Boolean приватный
  • #missing_dependencies(hide: []) ⇒ Array<Dependency> приватный

    Возвращает список зависимостей этой формулы, которые ещё не установлены.

  • #missing_library_linkage ⇒ Array<(Array<String>, Set<String>)> приватный
  • #mkdir(name, &block) ⇒ T.untyped приватный

    Вариант FileUtils.mkdir, который также переходит в эту папку внутри блока.

  • #mktemp(prefix = name, retain: false, retain_in_cache: false, &block) ⇒ T.type_parameter(:U) приватный

    Создаёт временный каталог, а затем передаёт его в блок.

  • #network_access_allowed?(*args, &block) ⇒ Boolean приватный
  • #new_formula_available? ⇒ Boolean приватный
  • #no_autobump! ⇒ T.untyped приватный

    Исключает формулу из списка автоматического обновления.

  • #no_autobump_message(*args, &block) ⇒ T.untyped приватный
  • #old_installed_formulae ⇒ Array<Formula> приватный
  • #oldnames ⇒ Array<String> внутренний

    Старые имена формулы.

  • #oldnames_to_migrate ⇒ Array<String> приватный
  • #on_system_blocks_exist? ⇒ Boolean? приватный
  • #opt_bin ⇒ Pathname

    То же, что и #bin, но относительно #opt_prefix, а не #prefix.

  • #opt_elisp ⇒ Pathname

    То же, что и #elisp, но относительно #opt_prefix, а не #prefix.

  • #opt_frameworks ⇒ Pathname

    То же, что и #frameworks, но относительно #opt_prefix, а не #prefix.

  • #opt_include ⇒ Pathname

    То же, что и #include, но относительно #opt_prefix, а не #prefix.

  • #opt_lib ⇒ Pathname

    То же, что и #lib, но относительно #opt_prefix, а не #prefix.

  • #opt_libexec ⇒ Pathname

    То же, что и #libexec, но относительно #opt_prefix, а не #prefix.

  • #opt_pkgshare ⇒ Pathname

    То же, что и #pkgshare, но относительно #opt_prefix, а не #prefix.

  • #opt_prefix ⇒ Pathname

    Стабильный путь к этой формуле после установки.

  • #opt_sbin ⇒ Pathname

    То же, что и #sbin, но относительно #opt_prefix, а не #prefix.

  • #opt_share ⇒ Pathname

    То же, что и #share, но относительно #opt_prefix, а не #prefix.

  • #option_defined? ⇒ Boolean приватный

    Определён ли именованный параметр для текущей активной SoftwareSpec.

  • #options(*args, &block) ⇒ T.untyped приватный
  • #optlinked? ⇒ Boolean приватный

    Связана ли формула с opt?

  • #outdated?(fetch_head: false) ⇒ Boolean внутренний

    Проверяет, устарела ли установленная формула.

  • #outdated_kegs(fetch_head: false) ⇒ Array<Keg> приватный
  • #patch ⇒ void

    Применяет все исправления из #patchlist к дереву исходного кода.

  • #patchlist(*args, &block) ⇒ T.untyped приватный
  • #pin(*args, &block) ⇒ T.untyped приватный
  • #pinnable?(*args, &block) ⇒ Boolean приватный
  • #pinned_version(*args, &block) ⇒ T.untyped приватный
  • #pkg_version ⇒ PkgVersion приватный

    PkgVersion этой формулы с информацией о Formula.version и #revision.

  • #pkgetc ⇒ Pathname

    Подкаталог etc с добавленным к имени названием формулы, например:

  • #pkgshare ⇒ Pathname

    Каталог для установки общих файлов формулы. К его имени добавляется название формулы, чтобы избежать конфликтов при создании ссылок.

  • #plist_name ⇒ String приватный

    Имя созданной службы launchd в формате plist.

  • #possible_names ⇒ Array<String> приватный
  • #post_install ⇒ void приватный

    Можно переопределить для выполнения команд как при установке из исходного кода, так и при установке готового пакета.

  • #post_install_defined? ⇒ Boolean приватный
  • #post_install_steps ⇒ T.untyped приватный

    Шаги после установки.

  • #post_install_steps_conflict? ⇒ Boolean приватный
  • #post_install_steps_defined? ⇒ Boolean приватный
  • #pour_bottle? ⇒ Boolean приватный

    Указывает, что для этой формулы поддерживаются готовые пакеты.

  • #pour_bottle_check_unsatisfied_reason(*args, &block) ⇒ T.untyped приватный
  • #prefix(version = pkg_version) ⇒ Pathname

    Каталог в Cellar, в который устанавливается формула.

  • #preserve_rpath? ⇒ Boolean приватный
  • #print_tap_action(options = {}) ⇒ void приватный
  • #pwsh_completion ⇒ Pathname

    Каталог, в который следует установить файлы автодополнения PowerShell для формулы.

  • #rack ⇒ Pathname закрытый

    Родительский каталог для prefix; именованный каталог в Cellar, содержащий все установленные версии этого программного обеспечения.

  • #recursive_dependencies(&block) ⇒ Array<Dependency> внутренний

    Возвращает список объектов Dependency в порядке, пригодном для установки: если a зависит от b, то в этом списке b будет расположена перед a.

  • #recursive_requirements(&block) ⇒ Requirements внутренний

    Полный набор Requirements для дерева зависимостей этой формулы.

  • #reloadable_ref ⇒ String, Pathname закрытый
  • #requirements(*args, &block) ⇒ T.untyped закрытый
  • #resource(name = T.unsafe(nil), klass = T.unsafe(nil), &block) ⇒ Resource?

    Именованный Resource для текущего активного SoftwareSpec.

  • #resources ⇒ T.untyped закрытый

    Resource для текущего активного SoftwareSpec.

  • #rpath(source: bin, target: lib) ⇒ String

    RPATH исполняемого файла/библиотеки в соответствии с соглашениями платформы.

  • #ruby_source_checksum ⇒ Checksum? закрытый
  • #ruby_source_path ⇒ String? закрытый
  • #run_post_install ⇒ void закрытый
  • #run_post_install_steps ⇒ void закрытый
  • #run_test(keep_tmp: false) ⇒ BasicObject закрытый
  • #runtime_dependencies(read_from_tab: true, undeclared: true) ⇒ Array<Dependency> внутренний

    Возвращает список объектов Dependency, необходимых во время выполнения.

  • #runtime_formula_dependencies(read_from_tab: true, undeclared: true) ⇒ Array<Formula> закрытый

    Возвращает список объектов Formula, необходимых во время выполнения.

  • #runtime_installed_formula_dependents ⇒ Array<Formula> закрытый
  • #sbin ⇒ Pathname

    Каталог, в который следует установить исполняемые файлы sbin формулы.

  • #selective_patch(is_data: false) ⇒ void закрытый
  • #serialized_patches ⇒ Array<Hash{String => T.untyped}> закрытый
  • #serialized_requirements ⇒ Array<Hash{String => T.untyped}> закрытый
  • #service ⇒ Homebrew::Service

    Спецификация службы для программного обеспечения.

  • #service? ⇒ Boolean закрытый

    Определена ли спецификация службы для программного обеспечения?

  • #service_name ⇒ String закрытый

    Сгенерированное имя службы.

  • #share ⇒ Pathname

    Каталог, в который следует установить общие файлы формулы.

  • #shared_library(name, version = nil) ⇒ String

    Имена разделяемых библиотек в соответствии с соглашениями платформы.

  • #skip_clean?(path) ⇒ Boolean закрытый
  • #specified_name ⇒ String закрытый

    Имя, указанное для поиска этой формулы.

  • #specified_path ⇒ Pathname? закрытый

    Путь, указанный для поиска этой формулы.

  • #stable? ⇒ Boolean закрытый

    Является ли текущая активная SoftwareSpec сборкой #stable?

  • #std_cabal_v2_args ⇒ Array<String>

    Стандартные параметры для сборок Cabal-v2.

  • #std_cargo_args(root: prefix, path: ".", features: nil) ⇒ Array<String>

    Стандартные параметры для сборок Cargo.

  • #std_cmake_args(install_prefix: prefix, install_libdir: "lib", find_framework: "LAST") ⇒ Array<String>

    Стандартные параметры для сборок CMake.

  • #std_configure_args(prefix: self.prefix, libdir: "lib") ⇒ Array<String>

    Стандартные параметры для сборок configure.

  • #std_go_args(output: bin/name, ldflags: nil, gcflags: nil, tags: nil) ⇒ Array<String>

    Стандартные параметры для сборок Go.

  • #std_meson_args ⇒ Array<String>

    Стандартные параметры для сборок Meson.

  • #std_npm_args(prefix: libexec, ignore_scripts: true) ⇒ Array<String>

    Стандартные параметры для сборок npm.

  • #std_pip_args(prefix: self.prefix, build_isolation: false) ⇒ Array<String>

    Стандартные параметры для сборок pip.

  • #std_zig_args(prefix: self.prefix, release_mode: :fast, cpu: nil) ⇒ Array<String>

    Стандартные параметры для сборок Zig.

  • #supersedes_an_installed_formula? ⇒ Boolean закрытый

    Является ли эта формула целью псевдонима, используемого для установки старой формулы?

  • #supports_linux? ⇒ Boolean закрытый
  • #supports_macos? ⇒ Boolean закрытый
  • #synced_with_other_formulae? ⇒ Boolean закрытый

    Синхронизирована ли версия этой Formula с версиями других формул.

  • #system(cmd, *args) ⇒ void

    Для вызова системных команд мы используем метод system и рекомендуем передавать аргументы отдельно, как в строке ниже; в противном случае сначала потребуется запустить подоболочку.

  • #systemd_service_path ⇒ Pathname закрытый

    Путь к сгенерированному файлу systemd Formula.service.

  • #systemd_timer_path ⇒ Pathname закрытый

    Путь к сгенерированному файлу таймера systemd.

  • #tap! ⇒ Tap закрытый
  • #tap? ⇒ Boolean закрытый

    Значение true, если эта формула предоставляется внешним Tap.

  • #tap_git_head ⇒ String? закрытый
  • #tap_path ⇒ Pathname закрытый
  • #test ⇒ BasicObject

    Этот метод переопределяется в подклассах Formula для предоставления инструкций по тестированию.

  • #test_defined? ⇒ Boolean закрытый
  • #test_fixtures(file) ⇒ Pathname

    Возвращает путь к файлу фикстуры для использования в тестах формулы.

  • #time ⇒ Time закрытый

    Создает новый объект Time для использования в формуле в качестве времени сборки.

  • #to_hash ⇒ Hash{String => T.untyped} закрытый
  • #to_hash_with_variations ⇒ Hash{String => T.untyped} закрытый
  • #unlock ⇒ Array<FormulaLock> закрытый
  • #unpin(*args, &block) ⇒ T.untyped закрытый
  • #unversioned_formula_name ⇒ String? закрытый
  • #update_head_version ⇒ void закрытый
  • #urls_hash ⇒ Hash{String => Hash{String => T.untyped}} закрытый
  • #valid_platform? ⇒ Boolean закрытый

    Значение true, если эту формулу можно установить на данной платформе.

  • #var ⇒ Pathname

    Каталог, в который следует установить файлы переменных формулы.

  • #version ⇒ T.untyped закрытый

    Версия текущего активного SoftwareSpec.

  • #versioned_formula? ⇒ Boolean закрытый

    Является ли это формулой с версиями @.

  • #versioned_formulae ⇒ Array<Formula> закрытый

    Возвращает все объекты Formula с версиями @ для любой Formula (включая формулы с версиями).

  • #versioned_formulae_names ⇒ Array<String> закрытый

    Возвращает имена всех других формул с версиями @ для любой Formula (включая формулы с версиями).

  • #warn_on_post_install_steps_conflict ⇒ void закрытый
  • #with_logging(log_type, &_block) ⇒ T.type_parameter(:U) закрытый

    Выполняет блок, используя указанный тип журнала на протяжении всего его выполнения.

  • #xcodebuild(*args) ⇒ void

    Запускает xcodebuild без переменных среды компилятора Homebrew.

  • #zsh_completion ⇒ Pathname

    Каталог, в который следует установить файлы автодополнения zsh формулы.

  • #zsh_function ⇒ Pathname

    Каталог, в который следует установить файлы функций zsh формулы.

Методы, включенные из OnSystem::MacOSAndLinux

included, on_arch_conditional, on_macos, on_system_conditional

Методы, включенные из BuildEnvironment::DSL

inherited

Методы, включенные из Cachable

cache

Методы, включенные из APIHashable

deep_remove_placeholders, generated_hash!, generating_hash!, generating_hash?

Методы, включенные из Utils::Output::Mixin

issue_reporting_message, odebug, odeprecated, odie, odisabled, ofail, oh1, oh1_title, ohai, ohai_title, onoe, opoo, opoo_outside_github_actions, opoo_without_github_actions_annotation, pretty_deprecated, pretty_disabled, pretty_duration, pretty_install_status, pretty_installed, pretty_uninstalled, pretty_upgradable, pretty_warning

Методы, включенные из Context

current, current=, #debug?, #quiet?, #verbose?, #with_context

Методы, включённые из Utils::Path

child_of?, formula_any_version_installed?, #formula_any_version_installed?, formula_installed_prefixes, formula_opt_bin, #formula_opt_bin, formula_opt_bin_env, formula_opt_bin_path, formula_opt_include, #formula_opt_include, formula_opt_lib, #formula_opt_lib, formula_opt_libexec, #formula_opt_libexec, formula_opt_prefix, #formula_opt_prefix, loadable_package_path?

Методы, включённые из 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

Методы, включённые из Utils::Shebang

rewrite_shebang

Подробное описание конструкторов

#initialize(name, path, spec, alias_path: nil, tap: nil, force_bottle: false) ⇒ void

Этот метод является частью закрытого API. Этот метод можно использовать только в репозитории Homebrew/brew. Третьим лицам по возможности следует избегать использования этого метода, поскольку он может быть удалён или изменён без предупреждения.

Параметры:

  • name (String)
  • path (Pathname)
  • spec (Symbol)
  • alias_path (Pathname, nil) (по умолчанию: nil)
  • tap (Tap, nil) (по умолчанию: nil)
  • force_bottle (Boolean) (по умолчанию: false)


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
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
# File 'formula.rb', line 268

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 = name
  @unresolved_path = path
  @path = T.let(path.resolved_path, Pathname)
  @alias_path = alias_path
  @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 = force_bottle

  @tap = 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.new, 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

Подробное описание атрибутов класса

.api_source ⇒ Hash{String => T.untyped}? (только для чтения)

Этот метод является частью закрытого API. Этот метод можно использовать только в репозитории Homebrew/brew. Сторонним разработчикам по возможности следует избегать использования этого метода, поскольку он может быть удалён или изменён без предупреждения.

Была ли эта формула загружена с использованием API formulae.brew.sh.

Возвращает:

  • (Hash{String => T.untyped}, nil)


3837
3838
3839
# File 'formula.rb', line 3837

def api_source
  @api_source
end

.conflicts ⇒ Array<FormulaConflict>? (только для чтения)

Этот метод является частью закрытого API. Этот метод можно использовать только в репозитории Homebrew/brew. Сторонним разработчикам по возможности следует избегать использования этого метода, поскольку он может быть удалён или изменён без предупреждения.

Возвращает:

  • (Array<FormulaConflict>, nil)


4075
4076
4077
# File 'formula.rb', line 4075

def conflicts
  @conflicts
end

.deprecate_args ⇒ Hash{Symbol => String, Symbol, nil}? (только для чтения)

Этот метод является частью закрытого API. Этот метод можно использовать только в репозитории Homebrew/brew. Сторонним разработчикам по возможности следует избегать использования этого метода, поскольку он может быть удалён или изменён без предупреждения.

Аргументы, переданные в deprecate!.

Возвращает:

  • (Hash{Symbol => String, Symbol, nil}, nil) —

    если deprecate! не вызывался.

См. также:

  • deprecate!


5020
5021
5022
# File 'formula.rb', line 5020

def deprecate_args
  @deprecate_args
end

.deprecation_date ⇒ Date? (только для чтения)

Этот метод является частью закрытого API. Этот метод можно использовать только в репозитории Homebrew/brew. Сторонним разработчикам по возможности следует избегать использования этого метода, поскольку он может быть удалён или изменён без предупреждения.

Дата устаревания Formula.

Возвращает:

  • (Date, nil) —

    если дата не указана.

См. также:

  • deprecate!


4991
4992
4993
# File 'formula.rb', line 4991

def deprecation_date
  @deprecation_date
end

.deprecation_reason ⇒ String, ... (только для чтения)

Этот метод является частью закрытого API. Этот метод можно использовать только в репозитории Homebrew/brew. Сторонним разработчикам по возможности следует избегать использования этого метода, поскольку он может быть удалён или изменён без предупреждения.

Причина устаревания Formula.

Возвращает:

  • (String, Symbol, nil) —

    если причина не указана или формула не устарела.

См. также:

  • deprecate!


4998
4999
5000
# File 'formula.rb', line 4998

def deprecation_reason
  @deprecation_reason
end

.deprecation_replacement_cask ⇒ String? (только для чтения)

Этот метод является частью закрытого API. Этот метод можно использовать только в репозитории Homebrew/brew. Сторонним разработчикам по возможности следует избегать использования этого метода, поскольку он может быть удалён или изменён без предупреждения.

Замещающий cask для устаревшей Formula.

Возвращает:

  • (String, nil) —

    если замена не указана или формула не устарела.

См. также:

  • deprecate!


5012
5013
5014
# File 'formula.rb', line 5012

def deprecation_replacement_cask
  @deprecation_replacement_cask
end

.deprecation_replacement_formula ⇒ String? (только для чтения)

Этот метод является частью закрытого API. Этот метод можно использовать только в репозитории Homebrew/brew. Сторонним разработчикам по возможности следует избегать использования этого метода, поскольку он может быть удалён или изменён без предупреждения.

Замещающая формула для устаревшей Formula.

Возвращает:

  • (String, nil) —

    если замена не указана или формула не устарела.

См. также:

  • deprecate!


5005
5006
5007
# File 'formula.rb', line 5005

def deprecation_replacement_formula
  @deprecation_replacement_formula
end

.disable_args ⇒ Hash{Symbol => String, Symbol, nil}? (только для чтения)

Этот метод является частью закрытого API. Этот метод можно использовать только в репозитории Homebrew/brew. Сторонним разработчикам по возможности следует избегать использования этого метода, поскольку он может быть удалён или изменён без предупреждения.

Аргументы, переданные в disable!.

Возвращает:

  • (Hash{Symbol => String, Symbol, nil}, nil) —

    если disable! не вызывался.

См. также:

  • disable!


5134
5135
5136
# File 'formula.rb', line 5134

def disable_args
  @disable_args
end

.disable_date ⇒ Date? (только для чтения)

Этот метод является частью закрытого API. Этот метод можно использовать только в репозитории Homebrew/brew. Сторонним разработчикам по возможности следует избегать использования этого метода, поскольку он может быть удалён или изменён без предупреждения.

Дата, когда эта Formula была или будет отключена. Возвращает nil, если дата не указана.

Возвращает:

  • (Date, nil)

См. также:

  • disable!


5105
5106
5107
# File 'formula.rb', line 5105

def disable_date
  @disable_date
end

.disable_reason ⇒ String, ... (только для чтения)

Этот метод является частью закрытого API. Этот метод можно использовать только в репозитории Homebrew/brew. Сторонним разработчикам по возможности следует избегать использования этого метода, поскольку он может быть удалён или изменён без предупреждения.

Причина отключения этой Formula. Возвращает nil, если причина не указана или формула не отключена.

Возвращает:

  • (String, Symbol, nil)

См. также:

  • disable!


5112
5113
5114
# File 'formula.rb', line 5112

def disable_reason
  @disable_reason
end

.disable_replacement_cask ⇒ String? (только для чтения)

Этот метод является частью закрытого API. Этот метод можно использовать только в репозитории Homebrew/brew. Сторонним разработчикам по возможности следует избегать использования этого метода, поскольку он может быть удалён или изменён без предупреждения.

Замещающий cask для отключённой Formula. Возвращает nil, если причина не указана или формула не отключена.

Возвращает:

  • (String, nil)

См. также:

  • disable!


5126
5127
5128
# File 'formula.rb', line 5126

def disable_replacement_cask
  @disable_replacement_cask
end

.disable_replacement_formula ⇒ String? (только для чтения)

Этот метод является частью закрытого API. Этот метод можно использовать только в репозитории Homebrew/brew. Сторонним разработчикам по возможности следует избегать использования этого метода, поскольку он может быть удалён или изменён без предупреждения.

Замещающая формула для отключённой Formula. Возвращает nil, если причина не указана или формула не отключена.

Возвращает:

  • (String, nil)

См. также:

  • disable!


5119
5120
5121
# File 'formula.rb', line 5119

def disable_replacement_formula
  @disable_replacement_formula
end

.keg_only_reason ⇒ KegOnlyReason? (только для чтения)

Этот метод является частью закрытого API. Этот метод можно использовать только в репозитории Homebrew/brew. Сторонним разработчикам по возможности следует избегать использования этого метода, поскольку он может быть удалён или изменён без предупреждения.

Причина, по которой это программное обеспечение не связывается (по умолчанию) с HOMEBREW_PREFIX.

Возвращает:

  • (KegOnlyReason, nil)


3846
3847
3848
# File 'formula.rb', line 3846

def keg_only_reason
  @keg_only_reason
end

.link_overwrite_paths ⇒ Set<String>? (только для чтения)

Этот метод является частью закрытого API. Этот метод можно использовать только в репозитории Homebrew/brew. Сторонним разработчикам по возможности следует избегать использования этого метода, поскольку он может быть удалён или изменён без предупреждения.

Возвращает:

  • (Set<String>, nil)


4081
4082
4083
# File 'formula.rb', line 4081

def link_overwrite_paths
  @link_overwrite_paths
end

.no_autobump_message ⇒ String, ... (только для чтения)

Этот метод является частью закрытого API. Этот метод можно использовать только в репозитории Homebrew/brew. Сторонним разработчикам по возможности следует избегать использования этого метода, поскольку он может быть удалён или изменён без предупреждения.

Сообщение с объяснением, почему формула исключена из списка автоматического обновления. Возвращает nil, если сообщение не указано.

Возвращает:

  • (String, Symbol, nil)

См. также:

  • no_autobump!


4820
4821
4822
# File 'formula.rb', line 4820

def no_autobump_message
  @no_autobump_message
end

.pour_bottle_check_unsatisfied_reason ⇒ String?

Этот метод является частью закрытого API. Этот метод можно использовать только в репозитории Homebrew/brew. Сторонним разработчикам по возможности следует избегать использования этого метода, поскольку он может быть удалён или изменён без предупреждения.

Если pour_bottle? возвращает false: причина, отображаемая пользователю и объясняющая, почему он не может использовать bottle.

Возвращает:

  • (String, nil)


4089
4090
4091
# File 'formula.rb', line 4089

def pour_bottle_check_unsatisfied_reason
  @pour_bottle_check_unsatisfied_reason
end

.pour_bottle_only_if ⇒ Symbol? (только для чтения)

Этот метод является частью закрытого API. Этот метод можно использовать только в репозитории Homebrew/brew. Сторонним разработчикам по возможности следует избегать использования этого метода, поскольку он может быть удалён или изменён без предупреждения.

Возвращает:

  • (Symbol, nil)


4084
4085
4086
# File 'formula.rb', line 4084

def pour_bottle_only_if
  @pour_bottle_only_if
end

.pypi_packages_info ⇒ PypiPackages? (только для чтения)

Этот метод является частью закрытого API. Этот метод можно использовать только в репозитории Homebrew/brew. Сторонним разработчикам по возможности следует избегать использования этого метода, поскольку он может быть удалён или изменён без предупреждения.

Возвращает:

  • (PypiPackages, nil)


3849
3850
3851
# File 'formula.rb', line 3849

def pypi_packages_info
  @pypi_packages_info
end

.skip_clean_paths ⇒ Set<String, Symbol>? (только для чтения)

Этот метод является частью закрытого API. Этот метод можно использовать только в репозитории Homebrew/brew. Сторонним разработчикам по возможности следует избегать использования этого метода, поскольку он может быть удалён или изменён без предупреждения.

Возвращает:

  • (Set<String, Symbol>, nil)


4078
4079
4080
# File 'formula.rb', line 4078

def skip_clean_paths
  @skip_clean_paths
end

Подробное описание атрибутов экземпляра

#active_log_type ⇒ String? (только для чтения)

Этот метод является частью закрытого API. Этот метод можно использовать только в репозитории Homebrew/brew. По возможности сторонним разработчикам следует избегать использования этого метода, поскольку он может быть удалён или изменён без предупреждения.

При сборке, тестировании или выполнении другого действия, для которого ведётся журнал, указывает, где следует разместить файл журнала.

Возвращает:

  • (String, nil)


238
239
240
# File 'formula.rb', line 238

def active_log_type
  @active_log_type
end

#active_spec=(spec_sym) ⇒ void

Этот метод является частью закрытого API. Этот метод можно использовать только в репозитории Homebrew/brew. По возможности сторонним разработчикам следует избегать использования этого метода, поскольку он может быть удалён или изменён без предупреждения.

Этот метод возвращает неопределённое значение.

Параметры:

  • spec_sym (Symbol)

Вызывает исключение:

  • (FormulaSpecificationError)


322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
# File 'formula.rb', line 322

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 (только для чтения)

Этот метод является частью закрытого API. Этот метод можно использовать только в репозитории Homebrew/brew. По возможности сторонним разработчикам следует избегать использования этого метода, поскольку он может быть удалён или изменён без предупреждения.

Символ, обозначающий активный в данный момент SoftwareSpec. Это либо :stable, либо :head.

Возвращает:

  • (Symbol)

См. также:

  • #active_spec


188
189
190
# File 'formula.rb', line 188

def active_spec_sym
  @active_spec_sym
end

#alias_name ⇒ String? (только для чтения)

Этот метод является частью закрытого API. Этот метод можно использовать только в репозитории Homebrew/brew. По возможности сторонним разработчикам следует избегать использования этого метода, поскольку он может быть удалён или изменён без предупреждения.

Имя псевдонима, использованного для идентификации этой Formula. Например: another-name-for-this-formula

Возвращает:

  • (String, nil)


128
129
130
# File 'formula.rb', line 128

def alias_name
  @alias_name
end

#alias_path ⇒ Pathname? (только для чтения)

Этот метод является частью закрытого API. Этот метод можно использовать только в репозитории Homebrew/brew. По возможности сторонним разработчикам следует избегать использования этого метода, поскольку он может быть удалён или изменён без предупреждения.

Путь к псевдониму, использованному для идентификации этой Formula. Например: /usr/local/Library/Taps/homebrew/homebrew-core/Aliases/another-name-for-this-formula

Возвращает:

  • (Pathname, nil)


123
124
125
# File 'formula.rb', line 123

def alias_path
  @alias_path
end

#build ⇒ BuildOptions, Tab

Этот метод является частью закрытого API. Этот метод можно использовать только в репозитории Homebrew/brew. По возможности сторонним разработчикам следует избегать использования этого метода, поскольку он может быть удалён или изменён без предупреждения.

BuildOptions или Tab для этой Formula. Содержит переданные аргументы и все параметры, указанные в Formula. Обратите внимание, что во время установки Formula они могут различаться. Это неудобно, но является следствием состояния, от которого мы пытаемся избавиться.

Возвращает:

  • (BuildOptions, Tab)


245
246
247
# File 'formula.rb', line 245

def build
  @build
end

#buildpath ⇒ Pathname? (только для чтения)

Текущий рабочий каталог во время сборки. Значение будет отличаться от nil только внутри #install.

Возвращает:

  • (Pathname, nil)


221
222
223
# File 'formula.rb', line 221

def buildpath
  @buildpath
end

#compatibility_version ⇒ Integer? (только для чтения)

Используется для указания совместимости API/ABI зависимостей.

Возвращает:

  • (Integer, nil)

См. также:

  • compatibility_version=


214
215
216
# File 'formula.rb', line 214

def compatibility_version
  @compatibility_version
end

#follow_installed_alias ⇒ Boolean Также известен как: follow_installed_alias?

Этот метод является частью закрытого API. Этот метод можно использовать только в репозитории Homebrew/brew. По возможности сторонним разработчикам следует избегать использования этого метода, поскольку он может быть удалён или изменён без предупреждения.

Следует ли считать эту формулу устаревшей, если цель псевдонима, с которым она была установлена, изменилась. По умолчанию — true.

Возвращает:

  • (Boolean)


256
257
258
# File 'formula.rb', line 256

def follow_installed_alias
  @follow_installed_alias
end

#force_bottle ⇒ Boolean

Этот метод является частью закрытого API. Этот метод можно использовать только в репозитории Homebrew/brew. По возможности сторонним разработчикам следует избегать использования этого метода, поскольку он может быть удалён или изменён без предупреждения.

Следует ли принудительно использовать bottle.

Возвращает:

  • (Boolean)


262
263
264
# File 'formula.rb', line 262

def force_bottle
  @force_bottle
end

#full_alias_name ⇒ String? (только для чтения)

Этот метод является частью закрытого API. Этот метод можно использовать только в репозитории Homebrew/brew. По возможности сторонним разработчикам следует избегать использования этого метода, поскольку он может быть удалён или изменён без предупреждения.

Полное имя псевдонима, ссылающегося на эту Formula. Для формул core оно совпадает с #alias_name. Например: homebrew/tap-name/another-name-for-this-formula

Возвращает:

  • (String, nil)


142
143
144
# File 'formula.rb', line 142

def full_alias_name
  @full_alias_name
end

#full_name ⇒ String (только для чтения)

Полное имя этой Formula. Для формул core оно совпадает с #name. Например: homebrew/tap-name/this-formula

Возвращает:

  • (String)


136
137
138
# File 'formula.rb', line 136

def full_name
  @full_name
end

#head ⇒ SoftwareSpec? (только для чтения)

Спецификация HEAD SoftwareSpec для этой Formula. Устанавливается при использовании brew install --HEAD. Всегда устанавливается версия HEAD и берётся из последнего коммита в системе контроля версий. nil, если версии HEAD нет.

Возвращает:

  • (SoftwareSpec, nil)

См. также:

  • #stable


175
176
177
# File 'formula.rb', line 175

def head
  @head
end

#local_bottle_path ⇒ Pathname?

Этот метод является частью закрытого API. Этот метод можно использовать только в репозитории Homebrew/brew. По возможности сторонним разработчикам следует избегать использования этого метода, поскольку он может быть удалён или изменён без предупреждения.

При установке bottle (двоичного пакета) из локального пути этому атрибуту присваивается полный путь к архиву bottle. В противном случае значение будет nil.

Возвращает:

  • (Pathname, nil)


233
234
235
# File 'formula.rb', line 233

def local_bottle_path
  @local_bottle_path
end

#name ⇒ String (только для чтения)

Имя этой Formula. Например: this-formula

Возвращает:

  • (String)


118
119
120
# File 'formula.rb', line 118

def name
  @name
end

#path ⇒ Pathname (только для чтения)

Полный путь к этой Formula. Например: /usr/local/Library/Taps/homebrew/homebrew-core/Formula/t/this-formula.rb

Возвращает:

  • (Pathname)


149
150
151
# File 'formula.rb', line 149

def path
  @path
end

#pinned? ⇒ Boolean (только для чтения)

Этот метод является частью закрытого API. Этот метод можно использовать только в репозитории Homebrew/brew. По возможности сторонним разработчикам следует избегать использования этого метода, поскольку он может быть удалён или изменён без предупреждения.

Параметры:

  • args (T.untyped)
  • block (T.untyped)

Возвращает:

  • (Boolean)


2038
# File 'formula.rb', line 2038

delegate pinned?: :@pin

#pypi_packages_info ⇒ PypiPackages (только для чтения)

Этот метод является частью закрытого API. Этот метод можно использовать только в репозитории Homebrew/brew. По возможности сторонним разработчикам следует избегать использования этого метода, поскольку он может быть удалён или изменён без предупреждения.

Сведения о сопоставлениях PyPI для этой Formula хранятся в объекте PypiPackages.

Возвращает:

  • (PypiPackages)


250
251
252
# File 'formula.rb', line 250

def pypi_packages_info
  @pypi_packages_info
end

#revision ⇒ Integer (только для чтения)

Используется для создания новых версий программного обеспечения Homebrew без выпуска новых версий upstream.

Возвращает:

  • (Integer)

См. также:

  • revision=


200
201
202
# File 'formula.rb', line 200

def revision
  @revision
end

#source_modified_time ⇒ Time? (только для чтения)

Этот метод является частью закрытого API. Этот метод можно использовать только в репозитории Homebrew/brew. По возможности сторонним разработчикам следует избегать использования этого метода, поскольку он может быть удалён или изменён без предупреждения.

Время последнего изменения исходных файлов.

Возвращает:

  • (Time, nil)


192
193
194
# File 'formula.rb', line 192

def source_modified_time
  @source_modified_time
end

#stable ⇒ SoftwareSpec? (только для чтения)

Стабильная (и используемая по умолчанию) SoftwareSpec для этой Formula. Она содержит все атрибуты (например, URL и контрольную сумму), относящиеся к стабильной версии этой формулы.

Возвращает:

  • (SoftwareSpec, nil)


164
165
166
# File 'formula.rb', line 164

def stable
  @stable
end

#tap ⇒ Tap? (только для чтения)

Экземпляр Tap, связанный с этой Formula. Если он nil, эта формула загружена из пути или URL.

Возвращает:

  • (Tap, nil)


156
157
158
# File 'formula.rb', line 156

def tap
  @tap
end

#testpath ⇒ Pathname? (только для чтения)

Текущий рабочий каталог во время тестирования. Значение будет отличаться от nil только внутри test.

Возвращает:

  • (Pathname, nil)


228
229
230
# File 'formula.rb', line 228

def testpath
  @testpath
end

#version_scheme ⇒ Integer (только для чтения)

Используется для изменения схем версий пакетов.

Возвращает:

  • (Integer)

См. также:

  • version_scheme=


207
208
209
# File 'formula.rb', line 207

def version_scheme
  @version_scheme
end

Подробное описание методов класса

.[](name) ⇒ Formula

Этот метод является частью закрытого API. Этот метод можно использовать только в репозитории Homebrew/brew. По возможности сторонним разработчикам следует избегать использования этого метода, поскольку он может быть удалён или изменён без предупреждения.

Параметры:

  • name (Pathname, String)

Возвращает:

  • (Formula)


2638
2639
2640
# File 'formula.rb', line 2638

def self.[](name)
  Formulary.factory(name)
end

.alias_full_names ⇒ Array<String>

Этот метод является частью закрытого API. Этот метод можно использовать только в репозитории Homebrew/brew. По возможности сторонним разработчикам следует избегать использования этого метода, поскольку он может быть удалён или изменён без предупреждения.

Массив всех псевдонимов в виде полных имён.

Возвращает:

  • (Array<String>)


2625
2626
2627
# File 'formula.rb', line 2625

def self.alias_full_names
  @alias_full_names ||= T.let(core_aliases + tap_aliases, T.nilable(T::Array[String]))
end

.aliases ⇒ Array<String>

Этот метод является частью закрытого API. Этот метод можно использовать только в репозитории Homebrew/brew. По возможности сторонним разработчикам следует избегать использования этого метода, поскольку он может быть удалён или изменён без предупреждения.

Массив всех псевдонимов.

Возвращает:

  • (Array<String>)


2617
2618
2619
2620
2621
# File 'formula.rb', line 2617

def self.aliases
  @aliases ||= T.let((core_aliases + tap_aliases.map do |name|
    Utils.name_from_full_name(name)
  end).uniq.sort, T.nilable(T::Array[String]))
end

.all(eval_all: false) ⇒ Array<Formula>

Этот метод является частью закрытого API. Этот метод можно использовать только в репозитории Homebrew/brew. По возможности сторонним разработчикам следует избегать использования этого метода, поскольку он может быть удалён или изменён без предупреждения.

Массив всех известных Formula. Можно использовать, только если пользователи установили HOMEBREW_REQUIRE_TAP_TRUST=1 или HOMEBREW_NO_REQUIRE_TAP_TRUST=1.

Параметры:

  • eval_all (Boolean) (по умолчанию: false)

Возвращает:

  • (Array<Formula>)


2548
2549
2550
2551
2552
2553
2554
2555
2556
2557
2558
2559
2560
2561
2562
2563
2564
2565
2566
# File 'formula.rb', line 2548

def self.all(eval_all: false)
  if !eval_all && !Homebrew::EnvConfig.tap_trust_configured?
    raise ArgumentError,
          "Formula#all cannot be used without `HOMEBREW_REQUIRE_TAP_TRUST=1` or " \
          "`HOMEBREW_NO_REQUIRE_TAP_TRUST=1`"
  end

  trusted_tap_files = Homebrew::Trust.trusted_formula_files(tap_files)

  (core_names + trusted_tap_files).filter_map do |name_or_file|
    Formulary.factory(name_or_file)
  rescue FormulaUnavailableError, FormulaUnreadableError, FormulaSpecificationError => 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

Этот метод возвращает неопределённое значение.

Фазы, в которых разрешён доступ к сети. По умолчанию доступ к сети разрешён на всех этапах. Допустимые фазы: :build, :test и :postinstall. Если аргумент не передан, доступ к сети будет разрешён на всех этапах.

Примеры

allow_network_access!
allow_network_access! :build
allow_network_access! [:build, :test]

Параметры:

  • phases (Symbol, Array<Symbol>) (по умолчанию: [])


3949
3950
3951
3952
3953
3954
3955
3956
3957
3958
3959
3960
# File 'formula.rb', line 3949

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

Этот метод является частью закрытого API. Этот метод можно использовать только в репозитории Homebrew/brew. По возможности сторонним разработчикам следует избегать использования этого метода, поскольку он может быть удалён или изменён без предупреждения.

Входит ли формула в список autobump?

Возвращает:

  • (Boolean)


4811
4812
4813
# File 'formula.rb', line 4811

def autobump?
  @autobump != false # @autobump may be `nil`
end

.bottle(&block) ⇒ void

Этот метод возвращает неопределённое значение.

Добавляет bottle SoftwareSpec. Это готовый бинарный пакет, собранный сопровождающими Homebrew. Он будет установлен автоматически, если для вашей платформы доступен бинарный пакет и вы не передавали и ранее не использовали параметры этой формулы.

Если вы сопровождаете собственный репозиторий, вы можете добавить собственные ссылки на bottle. Если вы отправляете изменения в Homebrew/homebrew-core, этот блок можно не указывать. За это позаботится 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", tahoe:    "ef65c759c5097a36323fa9c77756468649e8d1980a3a4e05695c05e39568967c"
  sha256 cellar: :any,           sequoia:  "28f4090610946a4eb207df102d841de23ced0d06ba31cb79e040d883906dcd4f"
  sha256                         sonoma:   "91dd0caca9bd3f38c439d5a7b6f68440c4274945615fae035ff0a369264b8a2f"
end

Сопровождающие Homebrew стремятся создавать bottle для всех формул.

Параметры:

  • block (T.proc.bind(BottleSpecification).void)

См. также:

  • Bottles


4257
# File 'formula.rb', line 4257

def bottle(&block) = stable.bottle(&block)

.build ⇒ BuildOptions

Этот метод является частью закрытого API. Этот метод можно использовать только в репозитории Homebrew/brew. По возможности сторонним разработчикам следует избегать использования этого метода, поскольку он может быть удалён или изменён без предупреждения.

Возвращает:

  • (BuildOptions)


4260
# File 'formula.rb', line 4260

def build = stable.build

.build_flags ⇒ Array<String>

Этот метод является частью закрытого API. Этот метод можно использовать только в репозитории Homebrew/brew. По возможности сторонним разработчикам следует избегать использования этого метода, поскольку он может быть удалён или изменён без предупреждения.

Получает BUILD_FLAGS из пространства имён формулы, заданного в Formulary::load_formula.

Возвращает:

  • (Array<String>)


4264
4265
4266
4267
4268
4269
4270
4271
4272
4273
# File 'formula.rb', line 4264

def build_flags
  namespace = T.must(to_s.split("::")[0..-2]).join("::")
  return [] if namespace.empty?

  # The namespace is derived dynamically from the formula's own name.
  # rubocop:disable Sorbet/ConstantsFromStrings
  mod = const_get(namespace)
  mod.const_get(:BUILD_FLAGS)
  # rubocop:enable Sorbet/ConstantsFromStrings
end

.compatibility_version(val = T.unsafe(nil)) ⇒ Integer?

Используется для указания совместимости API/ABI зависимостей. Если у формулы compatibility_version равно 1, её не нужно обновлять при установке или обновлении зависимостей, если известно, что зависимости работают с версиями формулы, у которых compatibility_version 1. nil, если не задано.

Пример

compatibility_version 1

Параметры:

  • val (Integer) (по умолчанию: T.unsafe(nil))

Возвращает:

  • (Integer, nil)


4143
4144
4145
# File 'formula.rb', line 4143

def compatibility_version(val = T.unsafe(nil))
  val.nil? ? @compatibility_version : @compatibility_version = T.let(val, T.nilable(Integer))
end

.conflicts_with(*names) ⇒ void

Этот метод возвращает неопределённое значение.

Одна или несколько формул, конфликтующих с этой формулой, и причина конфликта.

Пример

conflicts_with "imagemagick", because: "both install `convert` binaries"

Параметры:

  • names (T.untyped)


4597
4598
4599
4600
# File 'formula.rb', line 4597

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_aliases ⇒ Array<String>

Этот метод является частью закрытого API. Этот метод можно использовать только в репозитории Homebrew/brew. По возможности сторонним разработчикам следует избегать использования этого метода, поскольку он может быть удалён или изменён без предупреждения.

Массив всех псевдонимов core.

Возвращает:

  • (Array<String>)


2605
2606
2607
# File 'formula.rb', line 2605

def self.core_aliases
  CoreTap.instance.aliases
end

.core_names ⇒ Array<String>

Этот метод является частью закрытого API. Этот метод можно использовать только в репозитории Homebrew/brew. По возможности сторонним разработчикам следует избегать использования этого метода, поскольку он может быть удалён или изменён без предупреждения.

Массив имён всех основных Formula.

Возвращает:

  • (Array<String>)


2515
2516
2517
# File 'formula.rb', line 2515

def self.core_names
  CoreTap.instance.formula_names
end

.deny_network_access!(phases = []) ⇒ void

Этот метод возвращает неопределённое значение.

Фазы, в которых запрещён доступ к сети. По умолчанию доступ к сети разрешён на всех этапах. Допустимые фазы: :build, :test и :postinstall. Если аргумент не передан, доступ к сети будет запрещён на всех этапах.

Примеры

deny_network_access!
deny_network_access! :build
deny_network_access! [:build, :test]

Параметры:

  • phases (Symbol, Array<Symbol>) (по умолчанию: [])


3983
3984
3985
3986
3987
3988
3989
3990
3991
3992
3993
3994
# File 'formula.rb', line 3983

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

Этот метод возвращает неопределённое значение.

Зависимости этой формулы. Для имён других формул используйте строки. Homebrew предоставляет несколько :special Requirement для компонентов, требующих дополнительной обработки (часто это изменение переменных ENV или выбор между системной версией и другой версией).

Примеры

:build означает, что эта зависимость нужна только во время сборки.

depends_on "cmake" => :build

:test означает, что эта зависимость нужна только во время тестирования.

depends_on "node" => :test

Зависимости :recommended собираются по умолчанию. При этом создаётся параметр --without-..., позволяющий отказаться от их сборки.

depends_on "readline" => :recommended

Зависимости :optional по умолчанию НЕ собираются, если не передан автоматически созданный параметр --with-....

depends_on "glib" => :optional

Если нужно указать, что другую формулу следует собрать с определёнными параметрами или без них (обратите внимание: перед параметром не требуется --):

depends_on "zeromq" => "with-pgm"
depends_on "qt" => ["with-qtdbus", "developer"] # Multiple options.

Необязательная зависимость с обязательным использованием --with-c++11 при сборке "boost".

depends_on "boost" => [:optional, "with-c++11"]

Если зависимость нужна только в определённых случаях:

depends_on xcode: :build # If the formula really needs full Xcode to compile.
depends_on macos: :sequoia # Needs at least macOS Sequoia (15) to run.
on_tahoe :or_newer do
  depends_on "sqlite"
end

Можно указать зависимость от чего-либо, только если build.with? или build.without? "another_formula":

depends_on "postgresql" if build.without? "sqlite"

Параметры:

  • dep (String, Symbol, Hash{String, Symbol, T::Class[Requirement] => T.untyped}, T::Class[Requirement])


4471
4472
4473
4474
# File 'formula.rb', line 4471

def depends_on(dep)
  set_in_block = instance_variable_get(:@called_in_on_system_block) == true
  specs.each { |spec| spec.depends_on(dep, set_in_block:) }
end

.deprecate!(date:, because:, replacement: nil, replacement_formula: nil, replacement_cask: nil) ⇒ void

ЗАДАЧА:

заменить устаревший replacement на replacement_formula или replacement_cask

Этот метод возвращает неопределённое значение.

Помечает Formula как устаревшую (с указанной даты), чтобы при каждой установке отображалось предупреждение. Если указанная дата ещё не наступила, формула не будет считаться устаревшей.

Примеры

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"

Параметры:

  • date (String)
  • because (String, Symbol, nil)
  • replacement (String, nil) (по умолчанию: nil)
  • replacement_formula (String, nil) (по умолчанию: nil)
  • replacement_cask (String, nil) (по умолчанию: nil)

См. также:

  • https://docs.brew.sh/Deprecating-Disabling-and-Removing#formulae-and-casks
  • DeprecateDisable::FORMULA_DEPRECATE_DISABLE_REASONS


4946
4947
4948
4949
4950
4951
4952
4953
4954
4955
4956
4957
4958
4959
4960
4961
4962
4963
4964
4965
4966
4967
4968
4969
4970
4971
4972
4973
4974
4975
# File 'formula.rb', line 4946

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

  @deprecate_args = T.let(
    { date:, because:, replacement_formula:, replacement_cask: },
    T.nilable(T::Hash[Symbol, T.nilable(T.any(String, Symbol))]),
  )

  @deprecation_date = T.let(Date.parse(date), T.nilable(Date))
  @deprecated = T.let(T.must(@deprecation_date) <= Date.today, T.nilable(T::Boolean))
  if @deprecated
    @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))
  else
    # Reset these to handle disable! before deprecate!
    @deprecation_reason = nil
    @deprecation_replacement_formula = nil
    @deprecation_replacement_cask = nil
  end
end

.deprecated? ⇒ Boolean

Этот метод является частью закрытого API. Этот метод можно использовать только в репозитории Homebrew/brew. По возможности сторонним разработчикам следует избегать использования этого метода, поскольку он может быть удалён или изменён без предупреждения.

Указывает, помечена ли эта Formula как устаревшая (то есть выводит предупреждение при установке). По умолчанию — false.

Возвращает:

  • (Boolean)

См. также:

  • deprecate!


4982
4983
4984
# File 'formula.rb', line 4982

def deprecated?
  @deprecated == true
end

.deprecated_option(hash) ⇒ void

Этот метод возвращает неопределённое значение.

Устаревшие параметры используются для переименования параметров и переноса пользователей, применявших старые параметры, на новые. В основном они нужны для переноса параметров, не относящихся к with (например, enable-debug), на параметры with (например, with-debug).

Пример

deprecated_option "enable-debug" => "with-debug"

Параметры:

  • hash (Hash{String => String})


4526
4527
4528
# File 'formula.rb', line 4526

def deprecated_option(hash)
  specs.each { |spec| spec.deprecated_option(hash) }
end

.desc(val = T.unsafe(nil)) ⇒ String?

Однострочное описание программы. Оно помогает пользователям и сопровождающим Homebrew получить общее представление о программе. Отображается при запуске brew info.

Пример

desc "Example formula"

Параметры:

  • val (String) (по умолчанию: T.unsafe(nil))

Возвращает:

  • (String, nil)


3863
3864
3865
# File 'formula.rb', line 3863

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

ЗАДАЧА:

заменить устаревший replacement на replacement_formula или replacement_cask

Этот метод возвращает неопределённое значение.

Отключает Formula (с указанной даты), запрещая её установку. Если указанная дата ещё не наступила и дата deprecate! не задана, формула будет помечена как устаревшая.

Примеры

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"

Параметры:

  • date (String)
  • because (String, Symbol, nil)
  • replacement (String, nil) (по умолчанию: nil)
  • replacement_formula (String, nil) (по умолчанию: nil)
  • replacement_cask (String, nil) (по умолчанию: nil)

См. также:

  • https://docs.brew.sh/Deprecating-Disabling-and-Removing#formulae-and-casks
  • DeprecateDisable::FORMULA_DEPRECATE_DISABLE_REASONS


5056
5057
5058
5059
5060
5061
5062
5063
5064
5065
5066
5067
5068
5069
5070
5071
5072
5073
5074
5075
5076
5077
5078
5079
5080
5081
5082
5083
5084
5085
5086
5087
5088
5089
# File 'formula.rb', line 5056

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 disable!(:replacement_cask)",
    )
  end

  @disable_args = T.let(
    { date:, because:, replacement_formula:, replacement_cask: },
    T.nilable(T::Hash[Symbol, T.nilable(T.any(String, Symbol))]),
  )

  @disable_date = T.let(Date.parse(date), T.nilable(Date))

  if T.must(@disable_date) > Date.today
    return if @deprecation_date.present?

    @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

Этот метод является частью закрытого API. Этот метод можно использовать только в репозитории Homebrew/brew. По возможности сторонним разработчикам следует избегать использования этого метода, поскольку он может быть удалён или изменён без предупреждения.

Указывает, отключена ли эта Formula (то есть её нельзя установить). По умолчанию — false.

Возвращает:

  • (Boolean)

См. также:

  • disable!


5096
5097
5098
# File 'formula.rb', line 5096

def disabled?
  @disabled == true
end

.fails_with(compiler, &block) ⇒ void

Этот метод возвращает неопределённое значение.

Помечает Formula как несовместимую с определённым компилятором, чтобы она использовала другие компиляторы.

Примеры

Для компиляторов Apple следует использовать такой формат:

fails_with :clang do
  build 600
  cause "multiple configure and compile errors"
end

Блок можно опустить; если он указан, версию сборки также можно опустить. В этом случае компилятор будет запрещён для всех версий.

major_version должен содержать только номер основного выпуска, например «7» для серии GCC 7 (7.0, 7.1 и т. д.). Если version или блок опущены, компилятор будет запрещён для всех компиляторов этой серии.

Например, если ошибка возникает только в GCC 7.1, но не в 7.2:

fails_with gcc: "7" do
  version "7.1"
end

Параметры:

  • compiler (Symbol, Hash{Symbol => String})
  • block (T.proc.void, nil)


4717
4718
4719
# File 'formula.rb', line 4717

def fails_with(compiler, &block)
  specs.each { |spec| spec.fails_with(compiler, &block) }
end

.freeze ⇒ T.self_type

Этот метод относится к закрытому API. Этот метод можно использовать только в репозитории Homebrew/brew. Сторонним разработчикам по возможности не следует использовать этот метод, поскольку он может быть удалён или изменён без предупреждения.

Возвращает:

  • (T.self_type)


3813
3814
3815
3816
3817
3818
3819
3820
3821
3822
# File 'formula.rb', line 3813

def freeze
  specs.each(&:freeze)
  @livecheck.freeze
  @conflicts.freeze
  @skip_clean_paths.freeze
  @link_overwrite_paths.freeze
  @post_install_steps.freeze
  @preserve_rpath&.freeze
  super
end

.full_names ⇒ Array<String>

Этот метод относится к закрытому API. Этот метод можно использовать только в репозитории Homebrew/brew. Сторонним разработчикам по возможности не следует использовать этот метод, поскольку он может быть удалён или изменён без предупреждения.

Массив всех имён Formula, используемых формулами tap в качестве полных имён.

Возвращает:

  • (Array<String>)


2541
2542
2543
# File 'formula.rb', line 2541

def self.full_names
  @full_names ||= T.let(core_names + tap_names, T.nilable(T::Array[String]))
end

.fuzzy_search(name) ⇒ Array<String>

Этот метод относится к закрытому API. Этот метод можно использовать только в репозитории Homebrew/brew. Сторонним разработчикам по возможности не следует использовать этот метод, поскольку он может быть удалён или изменён без предупреждения.

Возвращает список приблизительно совпадающих имён формул, но не полные совпадения.

Параметры:

  • name (String)

Возвращает:

  • (Array<String>)


2631
2632
2633
2634
2635
# File 'formula.rb', line 2631

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

Добавляет head SoftwareSpec. Его можно установить, передав параметр --HEAD, чтобы разрешить установку программного обеспечения непосредственно из ветки репозитория системы контроля версий. При вызове в качестве метода этот метод задаёт только url для SoftwareSpec. Если указан блок, можно также добавить depends_on и Patch только для head SoftwareSpec. Стратегии загрузки (например, :using =>) такие же, как для url. Для репозиториев Git всегда необходимо указывать branch:.

Пример

head "https://we.prefer.https.over.git.example.com/.git", branch: "main"
head "https://example.com/.git", branch: "name_of_branch"

или (если автоматическое определение не сработало):

head "https://hg.is.awesome.but.git.has.won.example.com/", using: :hg

Параметры:

  • val (String, nil) (по умолчанию: nil)
  • specs (Hash{Symbol => T.untyped}) (по умолчанию: {})
  • block (T.proc.void, nil)

Возвращает:

  • (T.untyped)


4328
4329
4330
4331
4332
4333
4334
4335
4336
# File 'formula.rb', line 4328

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?

Домашняя страница программного обеспечения. Пользователи могут узнать на ней больше о программе, а сопровождающие Homebrew могут использовать её как контактную точку, например, для отправки исправлений. Её можно открыть, выполнив brew home.

Пример

homepage "https://www.example.com"

Параметры:

  • val (String) (по умолчанию: T.unsafe(nil))

Возвращает:

  • (String, nil)


4052
4053
4054
# File 'formula.rb', line 4052

def homepage(val = T.unsafe(nil))
  val.nil? ? @homepage : @homepage = T.let(val, T.nilable(String))
end

.inherited(child) ⇒ void

Этот метод относится к закрытому API. Этот метод можно использовать только в репозитории Homebrew/brew. Сторонним разработчикам по возможности не следует использовать этот метод, поскольку он может быть удалён или изменён без предупреждения.

Этот метод возвращает неопределённое значение.

Инициализирует переменные экземпляра для каждого подкласса. Их необходимо инициализировать до замораживания класса, поскольку некоторые DSL могут вообще не вызываться, поэтому выполнить инициализацию отложенно нельзя.

Параметры:

  • child (T::Class[Formula])


3788
3789
3790
3791
3792
3793
3794
3795
3796
3797
3798
3799
3800
3801
3802
3803
3804
3805
3806
3807
3808
3809
3810
# File 'formula.rb', line 3788

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]))
    @post_install_steps = T.let([], T.nilable(Homebrew::InstallSteps::Steps))
    @post_install_steps_defined = T.let(false, T.nilable(T::Boolean))
    @loaded_from_api = T.let(false, T.nilable(T::Boolean))
    @loaded_from_internal_api = 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>

Этот метод относится к закрытому API. Этот метод можно использовать только в репозитории Homebrew/brew. Сторонним разработчикам по возможности не следует использовать этот метод, поскольку он может быть удалён или изменён без предупреждения.

Массив всех установленных Formula.

Возвращает:

  • (Array<Formula>)


2588
2589
2590
2591
2592
2593
2594
# File 'formula.rb', line 2588

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>

Этот метод относится к закрытому API. Этот метод можно использовать только в репозитории Homebrew/brew. Сторонним разработчикам по возможности не следует использовать этот метод, поскольку он может быть удалён или изменён без предупреждения.

Массив имён всех установленных в данный момент формул.

Возвращает:

  • (Array<String>)


2582
2583
2584
# File 'formula.rb', line 2582

def self.installed_formula_names
  racks.map { |rack| rack.basename.to_s }
end

.installed_with_alias_path(alias_path) ⇒ Array<Formula>

Этот метод относится к закрытому API. Этот метод можно использовать только в репозитории Homebrew/brew. Сторонним разработчикам по возможности не следует использовать этот метод, поскольку он может быть удалён или изменён без предупреждения.

Параметры:

  • alias_path (Pathname, nil)

Возвращает:

  • (Array<Formula>)


2597
2598
2599
2600
2601
# File 'formula.rb', line 2597

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

Этот метод возвращает неопределённое значение.

Программное обеспечение, которое не будет связано символическими ссылками с brew --prefix и будет находиться только в Cellar. Другие формулы могут зависеть от него, и Homebrew добавит необходимые заголовочные файлы, библиотеки и другие пути при сборке этих формул.

Формулы keg-only не входят в PATH и не обнаруживаются компиляторами при сборке собственного программного обеспечения вне Homebrew. Это позволяет не затенять программное обеспечение, предоставляемое macOS.

Примеры

keg_only :provided_by_macos
keg_only :versioned_formulae
keg_only "because I want it so"

Параметры:

  • reason (String, Symbol)
  • explanation (String) (по умолчанию: "")


4681
4682
4683
# File 'formula.rb', line 4681

def keg_only(reason, explanation = "")
  @keg_only_reason = T.let(KegOnlyReason.new(reason, explanation), T.nilable(KegOnlyReason))
end

.license(args = nil) ⇒ SPDX::LicenseExpression?

Идентификатор SPDX лицензии с открытым исходным кодом, используемой формулой. Отображается при выполнении brew info.

Для описания сложных выражений лицензий используйте :any_of, :all_of или :with. :any_of следует использовать, если пользователь может выбрать лицензию. :all_of следует использовать, если пользователь обязан соблюдать все лицензии. :with следует использовать для указания допустимого исключения SPDX.

Добавьте + к идентификатору, чтобы указать, что формула может распространяться на условиях более поздних версий той же лицензии.

Примеры

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" },
]

Параметры:

  • args (SPDX::LicenseExpression, nil) (по умолчанию: nil)

Возвращает:

  • (SPDX::LicenseExpression, nil)

См. также:

  • Рекомендации Homebrew по лицензированию
  • Руководство по выражениям лицензий SPDX


3920
3921
3922
3923
3924
3925
3926
# File 'formula.rb', line 3920

def license(args = nil)
  if args.nil?
    @licenses
  else
    @licenses = T.let(args, T.nilable(SPDX::LicenseExpression))
  end
end

.link_overwrite(*paths) ⇒ Set<String>

Этот метод относится к закрытому API. Этот метод можно использовать только в репозитории Homebrew/brew. Сторонним разработчикам по возможности не следует использовать этот метод, поскольку он может быть удалён или изменён без предупреждения.

Разрешает перезапись определённых файлов при создании символических ссылок.

Примеры

Иногда мы случайно устанавливаем файлы вне префикса. После исправления пользователи получат сообщение о конфликте при создании ссылок. Перезапишите эти файлы с помощью:

link_overwrite "bin/foo", "lib/bar"
link_overwrite "share/man/man1/baz-*"

Параметры:

  • paths (String)

Возвращает:

  • (Set<String>)


5151
5152
5153
5154
# File 'formula.rb', line 5151

def link_overwrite(*paths)
  paths.flatten!
  T.must(link_overwrite_paths).merge(paths)
end

.livecheck(&block) ⇒ T.untyped

Livecheck можно использовать для проверки наличия более новых версий программного обеспечения. Этот метод вычисляет DSL, указанный в блоке livecheck Formula (если он существует), и соответствующим образом задаёт переменные экземпляра объекта Livecheck. Это используется методом brew livecheck для проверки наличия более новых версий программного обеспечения.

Пример

livecheck do
  skip "Not maintained"
  url "https://example.com/foo/releases"
  regex /foo-(\d+(?:\.\d+)+)\.tar/
end

Параметры:

  • block (T.proc.bind(Livecheck).returns(T.untyped), nil)

Возвращает:

  • (T.untyped)


4780
4781
4782
4783
4784
4785
# File 'formula.rb', line 4780

def livecheck(&block)
  return @livecheck unless block

  @livecheck_defined = T.let(true, T.nilable(T::Boolean))
  @livecheck.instance_eval(&block)
end

.livecheck_defined? ⇒ Boolean

Этот метод относится к закрытому API. Этот метод можно использовать только в репозитории Homebrew/brew. Сторонним разработчикам по возможности не следует использовать этот метод, поскольку он может быть удалён или изменён без предупреждения.

Проверяет, задана ли спецификация livecheck.

Возвращает true, если в Formula присутствует блок livecheck, и false в противном случае.

Возвращает:

  • (Boolean)


4061
4062
4063
# File 'formula.rb', line 4061

def livecheck_defined?
  @livecheck_defined == true
end

.loaded_from_api? ⇒ Boolean

Этот метод относится к закрытому API. Этот метод можно использовать только в репозитории Homebrew/brew. Сторонним разработчикам по возможности не следует использовать этот метод, поскольку он может быть удалён или изменён без предупреждения.

Указывает, была ли эта формула загружена с помощью API formulae.brew.sh.

Возвращает:

  • (Boolean)


3829
# File 'formula.rb', line 3829

def loaded_from_api? = !!@loaded_from_api

.loaded_from_internal_api? ⇒ Boolean

Этот метод относится к закрытому API. Этот метод можно использовать только в репозитории Homebrew/brew. Сторонним разработчикам по возможности не следует использовать этот метод, поскольку он может быть удалён или изменён без предупреждения.

Указывает, была ли эта формула загружена с помощью внутреннего API formulae.brew.sh.

Возвращает:

  • (Boolean)


3833
# File 'formula.rb', line 3833

def loaded_from_internal_api? = !!@loaded_from_internal_api

.mirror(val) ⇒ void

Этот метод возвращает неопределённое значение.

Дополнительные URL для стабильной версии формулы. Они используются только в случае сбоя загрузки по url. Параметр необязателен, URL может быть несколько. Обычно их добавляют, когда основной url ненадёжен. Если url очень ненадёжен, можно поменять местами mirror и url.

Пример

mirror "https://in.case.the.host.is.down.example.com"
mirror "https://in.case.the.mirror.is.down.example.com

Параметры:

  • val (String)


4214
# File 'formula.rb', line 4214

def mirror(val) = stable.mirror(val)

.names ⇒ Array<String>

Этот метод относится к закрытому API. Этот метод можно использовать только в репозитории Homebrew/brew. Сторонним разработчикам по возможности не следует использовать этот метод, поскольку он может быть удалён или изменён без предупреждения.

Массив имён всех Formula.

Возвращает:

  • (Array<String>)


2533
2534
2535
2536
2537
# File 'formula.rb', line 2533

def self.names
  @names ||= T.let((core_names + tap_names.map do |name|
    Utils.name_from_full_name(name)
  end).uniq.sort, T.nilable(T::Array[String]))
end

.network_access_allowed ⇒ Hash{Symbol => Boolean}

Этот метод относится к закрытому API. Этот метод можно использовать только в репозитории Homebrew/brew. Сторонним разработчикам по возможности не следует использовать этот метод, поскольку он может быть удалён или изменён без предупреждения.

Возвращает:

  • (Hash{Symbol => Boolean})


3825
# File 'formula.rb', line 3825

def network_access_allowed = T.must(@network_access_allowed)

.network_access_allowed?(phase) ⇒ Boolean

Этот метод относится к закрытому API. Этот метод можно использовать только в репозитории Homebrew/brew. Сторонним разработчикам по возможности не следует использовать этот метод, поскольку он может быть удалён или изменён без предупреждения.

Указывает, следует ли принудительно отключить сеть на указанном этапе.

Параметры:

  • phase (Symbol)

Возвращает:

  • (Boolean)

Вызывает исключение:

  • (ArgumentError)


3998
3999
4000
4001
4002
4003
# File 'formula.rb', line 3998

def network_access_allowed?(phase)
  raise ArgumentError, "Unknown phase: #{phase}" unless SUPPORTED_NETWORK_ACCESS_PHASES.include?(phase)

  env_var = Homebrew::EnvConfig.public_send(:"formula_#{phase}_network")
  env_var.nil? ? network_access_allowed[phase] : env_var == "allow"
end

.no_autobump!(because:) ⇒ void

Этот метод возвращает неопределённое значение.

Исключает формулу из списка автоматического обновления.

Параметры:

  • because (String, Symbol)


4791
4792
4793
4794
4795
4796
4797
4798
4799
4800
4801
4802
4803
4804
4805
4806
4807
# File 'formula.rb', line 4791

def no_autobump!(because:)
  caller_path = caller_locations(1, 1)&.first&.path
  if caller_path
    tap = Tap.from_path(caller_path)
    raise ArgumentError, "no_autobump! can only be used in official Homebrew taps." if tap && !tap.official?
  end

  if because.is_a?(Symbol) && !NO_AUTOBUMP_REASONS_LIST.key?(because)
    raise ArgumentError, "'because' argument should use valid symbol or a string!"
  end

  odisabled "no_autobump! because: :requires_manual_review" if because == :requires_manual_review

  @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

.on_system_blocks_exist? ⇒ Boolean

Этот метод относится к закрытому API. Этот метод можно использовать только в репозитории Homebrew/brew. Сторонним разработчикам по возможности не следует использовать этот метод, поскольку он может быть удалён или изменён без предупреждения.

Указывает, содержит ли эта формула блоки, зависящие от ОС или архитектуры (например, on_macos, on_arm, on_monterey :or_older, on_system :linux, macos: :big_sur_or_newer).

Возвращает:

  • (Boolean)


3842
# File 'formula.rb', line 3842

def on_system_blocks_exist? = !!@on_system_blocks_exist

.option(name, description = "") ⇒ void

Этот метод возвращает неопределённое значение.

Параметры можно использовать как аргументы для brew install. Для включения и отключения функций: "with-something" или "with-otherthing". Для использования другого программного обеспечения: "with-other-software" или "without-foo". Обратите внимание: для :optional или :recommended в depends_on параметры генерируются автоматически.

Примеры

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'"

Параметры:

  • name (String)
  • description (String) (по умолчанию: "")


4510
4511
4512
# File 'formula.rb', line 4510

def option(name, description = "")
  specs.each { |spec| spec.option(name, description) }
end

.patch(strip = :p1, src = nil, &block) ⇒ void

Этот метод возвращает неопределённое значение.

Внешние патчи можно объявлять с помощью блоков в стиле ресурсов.

Примеры

patch do
  url "https://example.com/example_patch.diff"
  sha256 "c6bc3f48ce8e797854c4b865f6a8ff969867bbcaebd648ae6fd825683e59fef2"
end

Предполагается уровень удаления префиксов -p1. Его можно переопределить с помощью аргумента-символа:

patch :p0 do
  url "https://example.com/example_patch.diff"
  sha256 "c6bc3f48ce8e797854c4b865f6a8ff969867bbcaebd648ae6fd825683e59fef2"
end

Патчи можно объявлять в блоках stable и head. Этот способ предпочтительнее использования условных операторов.

stable do
  patch do
    url "https://example.com/example_patch.diff"
    sha256 "c6bc3f48ce8e797854c4b865f6a8ff969867bbcaebd648ae6fd825683e59fef2"
  end
end

Встроенные патчи (__END__) объявляются следующим образом:

patch :DATA
patch :p0, :DATA

Патчи также можно встраивать, передав строку. Это позволяет задать несколько встроенных патчей, сделав условными только некоторые из них.

patch :p0, "..."

Параметры:

  • strip (String, Symbol) (по умолчанию: :p1)
  • src (String, Symbol, nil) (по умолчанию: nil)
  • block (T.proc.void, nil)

См. также:

  • Патчи


4583
4584
4585
# File 'formula.rb', line 4583

def patch(strip = :p1, src = nil, &block)
  specs.each { |spec| spec.patch(strip, src, &block) }
end

.post_install_steps(*steps, &block) ⇒ Homebrew::InstallSteps::Steps

Декларативные шаги, выполняемые после установки bottle.

Пример

post_install_steps do
  mkdir "log/foo", base: :var
end

Параметры:

  • steps (T.untyped)
  • block (T.proc.void, nil)

Возвращает:

  • (Homebrew::InstallSteps::Steps)


4020
4021
4022
4023
4024
4025
4026
4027
4028
4029
4030
4031
4032
4033
4034
4035
4036
4037
# File 'formula.rb', line 4020

def post_install_steps(*steps, &block)
  current_steps = @post_install_steps || []
  return current_steps if steps.empty? && block.nil?

  @post_install_steps_defined = T.let(true, T.nilable(T::Boolean))
  current_steps.concat(
    if block
      Homebrew::InstallSteps::DSL.build(
        default_base:        :var,
        default_source_base: :prefix,
        default_target_base: :prefix,
        &block
      )
    else
      Homebrew::InstallSteps::DSL.normalise_steps(steps)
    end,
  )
end

.post_install_steps_defined? ⇒ Boolean

Этот метод является частью закрытого API. Этот метод можно использовать только в репозитории Homebrew/brew. Третьим сторонам по возможности следует избегать его использования, поскольку он может быть удалён или изменён без предупреждения.

Возвращает:

  • (Boolean)


4006
# File 'formula.rb', line 4006

def post_install_steps_defined? = @post_install_steps_defined == true

.pour_bottle?(only_if: nil, &block) ⇒ void

Этот метод возвращает неопределённое значение.

Определяет, можно ли использовать bottle формулы Formula в данной установке Homebrew.

Примеры

Если для bottle требуется установленный Xcode CLT, формула Formula объявит:

pour_bottle? do
  reason "The bottle needs the Xcode CLT to be installed."
  satisfy { MacOS::CLT.installed? }
end

Если satisfy возвращает false, bottle использоваться не будет: вместо этого формула Formula будет собрана из исходного кода, а также будет выведено сообщение reason.

В качестве альтернативы можно передать предустановленную причину в виде символа:

pour_bottle? only_if: :clt_installed

Параметры:

  • only_if (Symbol, nil) (по умолчанию: nil)
  • block (T.proc.params(arg0: T.untyped).returns(T.any(T::Boolean, Symbol)), nil)


4874
4875
4876
4877
4878
4879
4880
4881
4882
4883
4884
4885
4886
4887
4888
4889
4890
4891
4892
4893
4894
4895
4896
4897
4898
4899
4900
4901
4902
4903
4904
4905
4906
4907
4908
4909
4910
# File 'formula.rb', line 4874

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

Сохраняет имена установки @rpath при исправлении динамической линковки в macOS.

По умолчанию Homebrew переписывает имена установки библиотек (включая начинающиеся с @rpath), заменяя их абсолютными путями. Это может нарушить работу таких инструментов, как macdeployqt, которые ожидают, что имена установки на основе @rpath останутся без изменений.

Вызовите этот метод, чтобы пропустить переписывание имён установки, начинающихся с @rpath.

Пример

preserve_rpath

Параметры:

  • value (Boolean) (по умолчанию: true)

Возвращает:

  • (Boolean)


4644
4645
4646
# File 'formula.rb', line 4644

def preserve_rpath(value: true)
  @preserve_rpath = value
end

.preserve_rpath? ⇒ Boolean

Этот метод является частью внутреннего API. Этот метод можно использовать только внутри репозиториев, принадлежащих Homebrew, за исключением cask-файлов и формул. Третьим сторонам по возможности следует избегать его использования, поскольку он может быть удалён или изменён без предупреждения.

Проверяет, нужно ли сохранять имена установки @rpath.

Возвращает:

  • (Boolean)


4652
4653
4654
# File 'formula.rb', line 4652

def preserve_rpath?
  @preserve_rpath == true
end

.pypi_packages(package_name: nil, extra_packages: nil, exclude_packages: nil, dependencies: nil) ⇒ void

Этот метод возвращает неопределённое значение.

Добавляет сведения о соответствии формулы пакетам PyPI в виде объекта PypiPackages. Позволяет указать имя пакета в репозитории PyPI, определить дополнительные пакеты или исключить их (например, если формула устанавливает их как зависимость).

Примеры использования:

# 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"

Параметры:

  • package_name (String, nil) (по умолчанию: nil)
  • extra_packages (String, Array<String>, nil) (по умолчанию: nil)
  • exclude_packages (String, Array<String>, nil) (по умолчанию: nil)
  • dependencies (String, Array<String>, nil) (по умолчанию: nil)


4365
4366
4367
4368
4369
4370
4371
4372
4373
4374
4375
4376
4377
4378
4379
4380
4381
4382
# File 'formula.rb', line 4365

def pypi_packages(
  package_name: nil,
  extra_packages: nil,
  exclude_packages: nil,
  dependencies: nil
)
  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>

Этот метод является частью закрытого API. Этот метод можно использовать только в репозитории Homebrew/brew. Третьим сторонам по возможности следует избегать его использования, поскольку он может быть удалён или изменён без предупреждения.

Массив всех установленных на данный момент rack.

Возвращает:

  • (Array<Pathname>)


2570
2571
2572
2573
2574
2575
2576
2577
2578
# File 'formula.rb', line 2570

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

Этот метод возвращает неопределённое значение.

Дополнительные загрузки можно определить как ресурсы и использовать в методе установки. Ресурсы также можно определять внутри блока stable или head. Этот механизм заменяет специальные классы «подформул».

Пример

resource "additional_files" do
  url "https://example.com/additional-stuff.tar.gz"
  sha256 "c6bc3f48ce8e797854c4b865f6a8ff969867bbcaebd648ae6fd825683e59fef2"
end

Параметры:

  • name (String)
  • klass (T.class_of(Resource)) (по умолчанию: Resource)
  • block (T.proc.bind(Resource).void, nil)


4399
4400
4401
4402
4403
# File 'formula.rb', line 4399

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?

Используется для создания новых версий программного обеспечения Homebrew без выпуска новой версии upstream. Например, если мы повышаем основную версию библиотеки, от которой зависит эта формула Formula в depends_on, может потребоваться обновить revision этой формулы Formula, чтобы установить новую версию, связанную с новой версией библиотеки. 0, если не задано.

Пример

revision 1

Параметры:

  • val (Integer) (по умолчанию: T.unsafe(nil))

Возвращает:

  • (Integer, nil)


4105
4106
4107
# File 'formula.rb', line 4105

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 можно использовать для определения служб. Этот метод вычисляет DSL, заданный в блоке service формулы Formula (если он существует), и соответствующим образом задаёт переменные экземпляра объекта Service. Это используется методом brew install для создания файла службы.

Пример

service do
  run [opt_bin/"foo"]
end

Параметры:

  • block (T.proc.returns(T.untyped), nil)

Возвращает:

  • (T.proc.returns(T.untyped), nil)


4837
4838
4839
4840
4841
# File 'formula.rb', line 4837

def service(&block)
  return @service_block unless block

  @service_block = T.let(block, T.nilable(T.proc.returns(T.untyped)))
end

.service? ⇒ Boolean

Этот метод является частью закрытого API. Этот метод можно использовать только в репозитории Homebrew/brew. Третьим сторонам по возможности следует избегать его использования, поскольку он может быть удалён или изменён без предупреждения.

Проверяет, определена ли спецификация службы.

Возвращает true, если в формуле Formula присутствует блок service, и false в противном случае.

Возвращает:

  • (Boolean)


4070
4071
4072
# File 'formula.rb', line 4070

def service?
  @service_block.present?
end

.sha256(val) ⇒ void

Этот метод возвращает неопределённое значение.

Чтобы проверить целостность и безопасность кэшированной загрузки, мы проверяем, совпадает ли хеш SHA-256 со значением, указанным в формуле Formula. Чтобы быстро подставить это значение, оставьте его пустым и запустите brew fetch --force; команда сообщит текущее действительное значение.

Пример

sha256 "2a2ba417eebaadcb4418ee7b12fe2998f26d6e6f7fda7983412ff66a741ab6f7"

Параметры:

  • val (String)


4230
# File 'formula.rb', line 4230

def sha256(val) = stable.sha256(val)

.skip_clean(*paths) ⇒ Set<String, Symbol>

Пропускает очистку путей в формуле.

Иногда очистка формулы cleaner нарушает работу.

Примеры

Сохраните очищенные пути с помощью:

skip_clean "bin/foo", "lib/bar"

Сохраните файлы .la с помощью:

skip_clean :la

Параметры:

  • paths (String, Symbol)

Возвращает:

  • (Set<String, Symbol>)


4622
4623
4624
4625
4626
# File 'formula.rb', line 4622

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>

Этот метод является частью закрытого API. Этот метод можно использовать только в репозитории Homebrew/brew. Третьим сторонам по возможности следует избегать его использования, поскольку он может быть удалён или изменён без предупреждения.

Возвращает:

  • (Array<Symbol>)


4148
# File 'formula.rb', line 4148

def spec_syms = [:stable, :head].freeze

.specs ⇒ Array<SoftwareSpec>

Этот метод является частью закрытого API. Этот метод можно использовать только в репозитории Homebrew/brew. Третьим сторонам по возможности следует избегать его использования, поскольку он может быть удалён или изменён без предупреждения.

Список stable и head SoftwareSpec.

Возвращает:

  • (Array<SoftwareSpec>)


4152
4153
4154
4155
4156
# File 'formula.rb', line 4152

def specs
  spec_syms.map do |sym|
    send(sym)
  end.freeze
end

.stable(&block) ⇒ T.untyped

Позволяет добавлять depends_on и патчи только к stable SoftwareSpec. Это необходимо вместо использования условного оператора. Если добавлен этот блок, предпочтительно также перенести в него url и sha256.

Пример

stable do
  url "https://example.com/foo-1.0.tar.gz"
  sha256 "2a2ba417eebaadcb4418ee7b12fe2998f26d6e6f7fda7983412ff66a741ab6f7"

  depends_on "libxml2"
  depends_on "libffi"
end

Параметры:

  • block (T.proc.void, nil)

Возвращает:

  • (T.untyped)


4293
4294
4295
4296
4297
# File 'formula.rb', line 4293

def stable(&block)
  return T.must(@stable) unless block

  T.must(@stable).instance_eval(&block)
end

.tap_aliases ⇒ Array<String>

Этот метод является частью закрытого API. Этот метод можно использовать только в репозитории Homebrew/brew. Третьим сторонам по возможности следует избегать его использования, поскольку он может быть удалён или изменён без предупреждения.

Массив всех псевдонимов tap.

Возвращает:

  • (Array<String>)


2611
2612
2613
# File 'formula.rb', line 2611

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>

Этот метод является частью закрытого API. Этот метод можно использовать только в репозитории Homebrew/brew. Третьим сторонам по возможности следует избегать его использования, поскольку он может быть удалён или изменён без предупреждения.

Массив всех файлов формул tap.

Возвращает:

  • (Array<Pathname>)


2527
2528
2529
# File 'formula.rb', line 2527

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>

Этот метод является частью закрытого API. Этот метод можно использовать только в репозитории Homebrew/brew. Третьим сторонам по возможности следует избегать его использования, поскольку он может быть удалён или изменён без предупреждения.

Массив названий всех формул tap.

Возвращает:

  • (Array<String>)


2521
2522
2523
# File 'formula.rb', line 2521

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) ⇒ BasicObject

Для новых формул необходим тест — и он нас радует.

Блок создаёт временный каталог, выполняется в нём, а затем удаляет его.

Нам нужны тесты, не требующие ввода данных пользователем и проверяющие базовую функциональность приложения. Например, foo build-foo input.foo — хороший тест, а foo --version или foo --help — плохие. Однако плохой тест лучше, чем полное отсутствие теста.

Примеры

(testpath/"test.file").write <<~EOS
  writing some test file, if you need to
EOS
assert_equal "OK", shell_output("test_command test.file").strip

Нужен полный контроль над stdin и stdout?

require "open3"
Open3.popen3("#{bin}/example", "argument") do |stdin, stdout, _|
  stdin.write("some text")
  stdin.close
  assert_equal "result", stdout.read
end

Тест завершится с ошибкой, если вернёт false или будет вызвано исключение. Неудачные проверки и неудачные команды system приведут к возникновению исключений.

Параметры:

  • block (T.proc.returns(BasicObject))

Возвращает:

  • (BasicObject)

См. также:

  • Тесты


4760
# File 'formula.rb', line 4760

def test(&block) = define_method(:test, &block)

.url(val = T.unsafe(nil), specs = {}) ⇒ String

URL, используемый для загрузки исходного кода стабильной версии формулы stable. По соображениям безопасности и работы через прокси мы предпочитаем https. Если способ загрузки нельзя определить автоматически, укажите его с помощью using: ....

  • :git, :hg, :svn, :bzr, :fossil, :cvs,
  • :curl (обычная загрузка файла, также выполнится распаковка)
  • :homebrew_curl (использовать установленный через Homebrew curl)
  • :nounzip (без распаковки)
  • :post (загрузка с помощью HTTP POST-запроса)

Примеры

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"

Параметры:

  • val (String) (по умолчанию: T.unsafe(nil))
  • specs (Hash{Symbol => T.anything}) (по умолчанию: {})

Возвращает:

  • (String)


4183
# File 'formula.rb', line 4183

def url(val = T.unsafe(nil), specs = {}) = stable.url(val, specs)

.uses_from_macos(dep, bounds = {}) ⇒ void

Этот метод возвращает неопределённое значение.

Указывает на использование зависимостей, предоставляемых macOS. В macOS ничего не делает (так как используются системные библиотеки), если только :since не задаёт минимальную версию macOS. В Linux этот метод действует как depends_on.

Параметры:

  • dep (String, Hash{String, Symbol => Symbol, Array<Symbol>})
  • bounds (Hash{Symbol => Symbol}) (по умолчанию: {})


4488
4489
4490
# File 'formula.rb', line 4488

def uses_from_macos(dep, bounds = {})
  specs.each { |spec| spec.uses_from_macos(dep, bounds) }
end

.version(val = nil) ⇒ Version?

Строка версии стабильной версии формулы stable. Версия определяется автоматически по URL и/или тегу, поэтому её нужно указывать только в том случае, если автоматически определить её правильно не удаётся.

Пример

version "1.2-final"

Параметры:

  • val (String, nil) (по умолчанию: nil)

Возвращает:

  • (Version, nil)


4197
# File 'formula.rb', line 4197

def version(val = nil) = stable.version(val)

.version_scheme(val = T.unsafe(nil)) ⇒ Integer?

Используется для создания новых схем версий Homebrew. Например, если требуется изменить схему версий, может понадобиться обновить version_scheme этой Formula, чтобы использовать новую схему. Например, для перехода со схемы 20151020 на 1.0.0 нужно увеличить version_scheme. Без этого старая схема всегда будет соответствовать более высокой версии. 0, если значение не задано.

Пример

version_scheme 1

Параметры:

  • val (Integer) (по умолчанию: T.unsafe(nil))

Возвращает:

  • (Integer, nil)


4125
4126
4127
# File 'formula.rb', line 4125

def version_scheme(val = T.unsafe(nil))
  val.nil? ? @version_scheme : @version_scheme = T.let(val, T.nilable(Integer))
end

Подробное описание методов экземпляра

#active_log_prefix ⇒ String

Этот метод является частью закрытого API. Этот метод можно использовать только в репозитории Homebrew/brew. Сторонним разработчикам по возможности следует избегать использования этого метода, поскольку он может быть удалён или изменён без предупреждения.

Префикс, если он есть, используемый в именах файлов для записи текущей активности.

Возвращает:

  • (String)


1443
1444
1445
1446
1447
1448
1449
# File 'formula.rb', line 1443

def active_log_prefix
  if active_log_type
    "#{active_log_type}."
  else
    ""
  end
end

#alias_changed? ⇒ Boolean

Этот метод является частью закрытого API. Этот метод можно использовать только в репозитории Homebrew/brew. Сторонним разработчикам по возможности следует избегать использования этого метода, поскольку он может быть удалён или изменён без предупреждения.

Изменился ли псевдоним, использованный для установки формулы, или уже установлены разные формулы с этим псевдонимом?

Возвращает:

  • (Boolean)


2003
2004
2005
# File 'formula.rb', line 2003

def alias_changed?
  installed_alias_target_changed? || supersedes_an_installed_formula?
end

#aliases ⇒ Array<String>

Этот метод является частью внутреннего API. Этот метод можно использовать только внутри репозиториев, принадлежащих Homebrew, за исключением cask-файлов и формул. Сторонним разработчикам по возможности следует избегать использования этого метода, поскольку он может быть удалён или изменён без предупреждения.

Все псевдонимы формулы.

Возвращает:

  • (Array<String>)


891
892
893
894
895
896
897
898
899
# File 'formula.rb', line 891

def aliases
  @aliases ||= T.let(
    if (tap = self.tap)
      tap.alias_reverse_table.fetch(full_name, []).map { Utils.name_from_full_name(it) }
    else
      []
    end, T.nilable(T::Array[String])
  )
end

#allow_network_access!(*args, &block) ⇒ T.untyped

Этот метод является частью закрытого API. Этот метод можно использовать только в репозитории Homebrew/brew. Сторонним разработчикам по возможности следует избегать использования этого метода, поскольку он может быть удалён или изменён без предупреждения.

Параметры:

  • args (T.untyped)
  • block (T.untyped)

Возвращает:

  • (T.untyped)


10
# File 'sorbet/rbi/dsl/formula.rbi', line 10

def allow_network_access!(*args, &block); end

#any_installed_keg ⇒ Keg?

Этот метод является частью закрытого API. Этот метод можно использовать только в репозитории Homebrew/brew. Сторонним разработчикам по возможности следует избегать использования этого метода, поскольку он может быть удалён или изменён без предупреждения.

Возвращает Keg для opt_prefix или installed_prefix, если они существуют. В противном случае возвращает nil.

Возвращает:

  • (Keg, nil)


2747
2748
2749
2750
2751
2752
# File 'formula.rb', line 2747

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?

Этот метод является частью внутреннего API. Этот метод можно использовать только внутри репозиториев, принадлежащих Homebrew, за исключением cask-файлов и формул. Сторонним разработчикам по возможности следует избегать использования этого метода, поскольку он может быть удалён или изменён без предупреждения.

Получить путь к любому установленному префиксу.

Возвращает:

  • (Pathname, nil)


2758
2759
2760
2761
2762
2763
2764
# File 'formula.rb', line 2758

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?

Этот метод является частью закрытого API. Этот метод можно использовать только в репозитории Homebrew/brew. Сторонним разработчикам по возможности следует избегать использования этого метода, поскольку он может быть удалён или изменён без предупреждения.

Возвращает PkgVersion для этой формулы, если она установлена. В противном случае возвращает nil.

Возвращает:

  • (PkgVersion, nil)


2769
2770
2771
# File 'formula.rb', line 2769

def any_installed_version
  any_installed_keg&.version
end

#any_version_installed? ⇒ Boolean

Установлена ли хотя бы одна версия Formula.

Возвращает:

  • (Boolean)


953
954
955
# File 'formula.rb', line 953

def any_version_installed?
  installed_prefixes.any? { |keg| (keg/AbstractTab::FILENAME).file? }
end

#api_source ⇒ T.untyped

Этот метод является частью закрытого API. Этот метод можно использовать только в репозитории Homebrew/brew. Сторонним разработчикам по возможности следует избегать использования этого метода, поскольку он может быть удалён или изменён без предупреждения.

Исходные данные API, использованные для загрузки этой формулы. Возвращает nil, если формула была загружена не из API.

Параметры:

  • args (T.untyped)
  • block (T.untyped)

Возвращает:

  • (T.untyped)

См. также:

  • api_source


642
# File 'formula.rb', line 642

delegate api_source: :"self.class"

#autobump? ⇒ Boolean

Этот метод является частью закрытого API. Этот метод можно использовать только в репозитории Homebrew/brew. Сторонним разработчикам по возможности следует избегать использования этого метода, поскольку он может быть удалён или изменён без предупреждения.

Входит ли формула в список autobump?

Параметры:

  • args (T.untyped)
  • block (T.untyped)

Возвращает:

  • (Boolean)

См. также:

  • autobump?


605
# File 'formula.rb', line 605

delegate autobump?: :"self.class"

#bash_completion ⇒ Pathname

Каталог, в который следует установить файлы автодополнения bash для формулы. После установки они связываются символическими ссылками с HOMEBREW_PREFIX или с помощью brew link для формул, которые не являются keg-only.

Возвращает:

  • (Pathname)


1402
# File 'formula.rb', line 1402

def bash_completion = prefix/"etc/bash_completion.d"

#bin ⇒ Pathname

Каталог, в который следует установить исполняемые файлы формулы. После установки они связываются символическими ссылками с HOMEBREW_PREFIX или с помощью brew link для формул, которые не являются keg-only.

Примеры

Нужно установить файлы в #bin, но в makefile не mkdir -p prefix/bin?

bin.mkpath

Нет make install?

bin.install "binary1"

Возвращает:

  • (Pathname)


1100
# File 'formula.rb', line 1100

def bin = prefix/"bin"

#bottle ⇒ Bottle?

Этот метод является частью закрытого API. Этот метод можно использовать только в репозитории Homebrew/brew. Сторонним разработчикам по возможности следует избегать использования этого метода, поскольку он может быть удалён или изменён без предупреждения.

Объект Bottle для текущей активной спецификации SoftwareSpec.

Возвращает:

  • (Bottle, nil)


557
558
559
# File 'formula.rb', line 557

def bottle
  @bottle ||= T.let(Bottle.new(self, bottle_specification), T.nilable(Bottle)) if bottled?
end

#bottle_defined?(*args, &block) ⇒ Boolean

Этот метод является частью закрытого API. Этот метод можно использовать только в репозитории Homebrew/brew. Сторонним разработчикам по возможности следует избегать использования этого метода, поскольку он может быть удалён или изменён без предупреждения.

Параметры:

  • args (T.untyped)
  • block (T.untyped)

Возвращает:

  • (Boolean)


19
# File 'sorbet/rbi/dsl/formula.rbi', line 19

def bottle_defined?(*args, &block); end

#bottle_for_tag(tag = nil) ⇒ Bottle?

Этот метод является частью закрытого API. Этот метод можно использовать только в репозитории Homebrew/brew. Сторонним разработчикам по возможности следует избегать использования этого метода, поскольку он может быть удалён или изменён без предупреждения.

Объект Bottle для указанного тега.

Параметры:

  • tag (Utils::Bottles::Tag, nil) (по умолчанию: nil)

Возвращает:

  • (Bottle, nil)


563
564
565
# File 'formula.rb', line 563

def bottle_for_tag(tag = nil)
  Bottle.new(self, bottle_specification, tag) if bottled?(tag)
end

#bottle_hash ⇒ Hash{String => T.untyped}

Этот метод является частью закрытого API. Этот метод можно использовать только в репозитории Homebrew/brew. Сторонним разработчикам по возможности следует избегать использования этого метода, поскольку он может быть удалён или изменён без предупреждения.

Возвращает информацию о bottle для формулы.

Возвращает:

  • (Hash{String => T.untyped})


3043
3044
3045
3046
3047
3048
3049
3050
3051
3052
3053
3054
3055
3056
3057
3058
3059
3060
3061
3062
3063
3064
3065
3066
3067
3068
3069
3070
3071
3072
3073
# File 'formula.rb', line 3043

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)
    odie "Specification for tag #{tag} is nil" if tag_spec.nil?

    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

Этот метод является частью закрытого API. Этот метод можно использовать только в репозитории Homebrew/brew. Сторонним разработчикам по возможности следует избегать использования этого метода, поскольку он может быть удалён или изменён без предупреждения.

Каталог, используемый в качестве префикса для файлов #etc и #var при установке, чтобы они устанавливались туда после распаковки bottle, несмотря на то что они не находятся в HOMEBREW_CELLAR.

Возвращает:

  • (Pathname)


1435
# File 'formula.rb', line 1435

def bottle_prefix = prefix/".bottle"

#bottle_specification(*args, &block) ⇒ T.untyped

Этот метод является частью закрытого API. Этот метод можно использовать только в репозитории Homebrew/brew. Сторонним разработчикам по возможности следует избегать использования этого метода, поскольку он может быть удалён или изменён без предупреждения.

Параметры:

  • args (T.untyped)
  • block (T.untyped)

Возвращает:

  • (T.untyped)


22
# File 'sorbet/rbi/dsl/formula.rbi', line 22

def bottle_specification(*args, &block); end

#bottle_tab_attributes ⇒ Hash{String => T.untyped}

Этот метод является частью закрытого API. Этот метод можно использовать только в репозитории Homebrew/brew. Сторонним разработчикам по возможности следует избегать использования этого метода, поскольку он может быть удалён или изменён без предупреждения.

Возвращает:

  • (Hash{String => T.untyped})


3674
3675
3676
3677
3678
# File 'formula.rb', line 3674

def bottle_tab_attributes
  return {} unless bottled?

  T.must(bottle).tab_attributes
end

#bottle_tag?(*args, &block) ⇒ Boolean

Этот метод является частью закрытого API. Этот метод можно использовать только в репозитории Homebrew/brew. Сторонним разработчикам по возможности следует избегать использования этого метода, поскольку он может быть удалён или изменён без предупреждения.

Параметры:

  • args (T.untyped)
  • block (T.untyped)

Возвращает:

  • (Boolean)


25
# File 'sorbet/rbi/dsl/formula.rbi', line 25

def bottle_tag?(*args, &block); end

#bottled?(*args, &block) ⇒ Boolean

Этот метод является частью закрытого API. Этот метод можно использовать только в репозитории Homebrew/brew. Сторонним разработчикам по возможности следует избегать использования этого метода, поскольку он может быть удалён или изменён без предупреждения.

Параметры:

  • args (T.untyped)
  • block (T.untyped)

Возвращает:

  • (Boolean)


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

Этот метод является частью закрытого API. Этот метод можно использовать только в репозитории Homebrew/brew. Сторонним разработчикам по возможности следует избегать использования этого метода, поскольку он может быть удалён или изменён без предупреждения.

Этот метод возвращает неопределённое значение.

Передаёт управление |self,staging|; текущий рабочий каталог устанавливается в распакованный tar-архив, где staging-контекстом служит Mktemp.

Параметры:

  • fetch (Boolean) (по умолчанию: true)
  • keep_tmp (Boolean) (по умолчанию: false)
  • debug_symbols (Boolean) (по умолчанию: false)
  • interactive (Boolean) (по умолчанию: false)
  • _blk (T.proc.params(arg0: Formula, arg1: Mktemp).void)


1866
1867
1868
1869
1870
1871
1872
1873
1874
1875
1876
1877
1878
1879
1880
1881
1882
1883
1884
1885
1886
1887
1888
1889
1890
1891
1892
1893
1894
1895
1896
1897
# File 'formula.rb', line 1866

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.logCMakeCache.txtCMakeConfigureLog.yamlmeson-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

Этот метод является частью закрытого API. Этот метод можно использовать только в репозитории Homebrew/brew. Сторонним разработчикам по возможности следует избегать использования этого метода, поскольку он может быть удалён или изменён без предупреждения.

Параметры:

  • args (T.untyped)
  • block (T.untyped)

Возвращает:

  • (T.untyped)


31
# File 'sorbet/rbi/dsl/formula.rbi', line 31

def cached_download(*args, &block); end

#caveats ⇒ String?

Этот метод является частью закрытого API. Этот метод можно использовать только в репозитории Homebrew/brew. Сторонним разработчикам по возможности следует избегать использования этого метода, поскольку он может быть удалён или изменён без предупреждения.

Предупреждает пользователя о проблемах или особенностях этого пакета, связанных с Homebrew. Здесь не следует приводить инструкции по настройке, которые применимы к установке через другой менеджер пакетов в другой ОС.

Пример

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

Возвращает:

  • (String, nil)


1692
# File 'formula.rb', line 1692

def caveats = nil

#caveats_with_placeholders ⇒ String?

Этот метод является частью закрытого API. Этот метод можно использовать только в репозитории Homebrew/brew. Сторонним разработчикам по возможности следует избегать использования этого метода, поскольку он может быть удалён или изменён без предупреждения.

Возвращает:

  • (String, nil)


3153
3154
3155
3156
# File 'formula.rb', line 3153

def caveats_with_placeholders
  caveats&.gsub(HOMEBREW_PREFIX, HOMEBREW_PREFIX_PLACEHOLDER)
         &.gsub(HOMEBREW_CELLAR, HOMEBREW_CELLAR_PLACEHOLDER)
end

#clear_cache(*args, &block) ⇒ T.untyped

Этот метод является частью закрытого API. Этот метод можно использовать только в репозитории Homebrew/brew. Сторонним разработчикам по возможности следует избегать использования этого метода, поскольку он может быть удалён или изменён без предупреждения.

Параметры:

  • args (T.untyped)
  • block (T.untyped)

Возвращает:

  • (T.untyped)


34
# File 'sorbet/rbi/dsl/formula.rbi', line 34

def clear_cache(*args, &block); end

#compiler_failures(*args, &block) ⇒ T.untyped

Этот метод является частью закрытого API. Этот метод можно использовать только в репозитории Homebrew/brew. Третьим сторонам по возможности не следует использовать этот метод, поскольку он может быть удалён или изменён без предупреждения.

Параметры:

  • args (T.untyped)
  • block (T.untyped)

Возвращает:

  • (T.untyped)


37
# File 'sorbet/rbi/dsl/formula.rbi', line 37

def compiler_failures(*args, &block); end

#conflicts ⇒ Array<FormulaConflict>

Этот метод является частью внутреннего API. Этот метод можно использовать только внутри репозиториев, принадлежащих Homebrew, за исключением cask-файлов и формул. Третьим сторонам по возможности не следует использовать этот метод, поскольку он может быть удалён или изменён без предупреждения.

Возвращает список объектов FormulaConflict, указывающих, какие формулы конфликтуют с этой и по какой причине.

Возвращает:

  • (Array<FormulaConflict>)


2697
# File 'formula.rb', line 2697

def conflicts = T.must(self.class.conflicts)

#core_formula? ⇒ Boolean

Этот метод является частью закрытого API. Этот метод можно использовать только в репозитории Homebrew/brew. Третьим сторонам по возможности не следует использовать этот метод, поскольку он может быть удалён или изменён без предупреждения.

Возвращает true, если эта формула предоставляется самим Homebrew.

Возвращает:

  • (Boolean)


2644
2645
2646
# File 'formula.rb', line 2644

def core_formula?
  !!tap&.core_tap?
end

#current_installed_alias_target ⇒ Formula?

Этот метод является частью закрытого API. Этот метод можно использовать только в репозитории Homebrew/brew. Третьим сторонам по возможности не следует использовать этот метод, поскольку он может быть удалён или изменён без предупреждения.

Возвращает:

  • (Formula, nil)


1982
1983
1984
# File 'formula.rb', line 1982

def current_installed_alias_target
  Formulary.factory(T.must(full_installed_alias_name)) if installed_alias_path
end

#declared_deps(*args, &block) ⇒ T.untyped

Этот метод является частью закрытого API. Этот метод можно использовать только в репозитории Homebrew/brew. Третьим сторонам по возможности не следует использовать этот метод, поскольку он может быть удалён или изменён без предупреждения.

Параметры:

  • args (T.untyped)
  • block (T.untyped)

Возвращает:

  • (T.untyped)


40
# File 'sorbet/rbi/dsl/formula.rbi', line 40

def declared_deps(*args, &block); end

#deny_network_access!(*args, &block) ⇒ T.untyped

Этот метод является частью закрытого API. Этот метод можно использовать только в репозитории Homebrew/brew. Третьим сторонам по возможности не следует использовать этот метод, поскольку он может быть удалён или изменён без предупреждения.

Параметры:

  • args (T.untyped)
  • block (T.untyped)

Возвращает:

  • (T.untyped)


43
# File 'sorbet/rbi/dsl/formula.rbi', line 43

def deny_network_access!(*args, &block); end

#dependencies_hash ⇒ Hash{String => T.untyped}

Этот метод является частью закрытого API. Этот метод можно использовать только в репозитории Homebrew/brew. Третьим сторонам по возможности не следует использовать этот метод, поскольку он может быть удалён или изменён без предупреждения.

Возвращает:

  • (Hash{String => T.untyped})


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
# File 'formula.rb', line 3159

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.tags.length >= 2
        { dep.name => dep.tags }
      elsif dep.tags.present?
        { dep.name => dep.tags.first }
      else
        dep.name
      end
    end
    dep_hash["uses_from_macos_bounds"] = uses_from_macos_deps.map(&:bounds)
  end

  hash
end

#deprecate_args ⇒ T.untyped

Этот метод является частью закрытого API. Этот метод можно использовать только в репозитории Homebrew/brew. Третьим сторонам по возможности не следует использовать этот метод, поскольку он может быть удалён или изменён без предупреждения.

Аргументы, использованные для признания этой формулы Formula устаревшей. Возвращает nil, если deprecate! не вызывался.

Параметры:

  • args (T.untyped)
  • block (T.untyped)

Возвращает:

  • (T.untyped)


1791
# File 'formula.rb', line 1791

delegate deprecate_args: :"self.class"

#deprecated? ⇒ Boolean

Этот метод является частью закрытого API. Этот метод можно использовать только в репозитории Homebrew/brew. Третьим сторонам по возможности не следует использовать этот метод, поскольку он может быть удалён или изменён без предупреждения.

Указывает, признана ли эта формула Formula устаревшей (то есть выводит предупреждение при установке). По умолчанию — false.

Параметры:

  • args (T.untyped)
  • block (T.untyped)

Возвращает:

  • (Boolean)

См. также:

  • deprecate!


1756
# File 'formula.rb', line 1756

delegate deprecated?: :"self.class"

#deprecated_flags(*args, &block) ⇒ T.untyped

Этот метод является частью закрытого API. Этот метод можно использовать только в репозитории Homebrew/brew. Третьим сторонам по возможности не следует использовать этот метод, поскольку он может быть удалён или изменён без предупреждения.

Параметры:

  • args (T.untyped)
  • block (T.untyped)

Возвращает:

  • (T.untyped)


52
# File 'sorbet/rbi/dsl/formula.rbi', line 52

def deprecated_flags(*args, &block); end

#deprecated_options(*args, &block) ⇒ T.untyped

Этот метод является частью закрытого API. Этот метод можно использовать только в репозитории Homebrew/brew. Третьим сторонам по возможности не следует использовать этот метод, поскольку он может быть удалён или изменён без предупреждения.

Параметры:

  • args (T.untyped)
  • block (T.untyped)

Возвращает:

  • (T.untyped)


55
# File 'sorbet/rbi/dsl/formula.rbi', line 55

def deprecated_options(*args, &block); end

#deprecation_date ⇒ T.untyped

Этот метод является частью закрытого API. Этот метод можно использовать только в репозитории Homebrew/brew. Третьим сторонам по возможности не следует использовать этот метод, поскольку он может быть удалён или изменён без предупреждения.

Дата, когда эта формула Formula была признана устаревшей или будет признана таковой. Возвращает nil, если дата не указана.

Параметры:

  • args (T.untyped)
  • block (T.untyped)

Возвращает:

  • (T.untyped) —

    Дата

См. также:

  • deprecate!


1763
# File 'formula.rb', line 1763

delegate deprecation_date: :"self.class"

#deprecation_reason ⇒ T.untyped

Этот метод является частью закрытого API. Этот метод можно использовать только в репозитории Homebrew/brew. Третьим сторонам по возможности не следует использовать этот метод, поскольку он может быть удалён или изменён без предупреждения.

Причина, по которой эта формула Formula признана устаревшей. Возвращает nil, если причина не указана или формула не признана устаревшей.

Параметры:

  • args (T.untyped)
  • block (T.untyped)

Возвращает:

  • (T.untyped)

См. также:

  • deprecate!


1770
# File 'formula.rb', line 1770

delegate deprecation_reason: :"self.class"

#deprecation_replacement_cask ⇒ T.untyped

Этот метод является частью закрытого API. Этот метод можно использовать только в репозитории Homebrew/brew. Третьим сторонам по возможности не следует использовать этот метод, поскольку он может быть удалён или изменён без предупреждения.

Cask на замену этой устаревшей формуле Formula. Возвращает nil, если замена не указана или формула не признана устаревшей.

Параметры:

  • args (T.untyped)
  • block (T.untyped)

Возвращает:

  • (T.untyped)

См. также:

  • deprecate!


1784
# File 'formula.rb', line 1784

delegate deprecation_replacement_cask: :"self.class"

#deprecation_replacement_formula ⇒ T.untyped

Этот метод является частью закрытого API. Этот метод можно использовать только в репозитории Homebrew/brew. Третьим сторонам по возможности не следует использовать этот метод, поскольку он может быть удалён или изменён без предупреждения.

Формула на замену этой устаревшей формуле Formula. Возвращает nil, если замена не указана или формула не признана устаревшей.

Параметры:

  • args (T.untyped)
  • block (T.untyped)

Возвращает:

  • (T.untyped)

См. также:

  • deprecate!


1777
# File 'formula.rb', line 1777

delegate deprecation_replacement_formula: :"self.class"

#deps(*args, &block) ⇒ T.untyped

Этот метод является частью закрытого API. Этот метод можно использовать только в репозитории Homebrew/brew. Третьим сторонам по возможности не следует использовать этот метод, поскольку он может быть удалён или изменён без предупреждения.

Параметры:

  • args (T.untyped)
  • block (T.untyped)

Возвращает:

  • (T.untyped)


70
# File 'sorbet/rbi/dsl/formula.rbi', line 70

def deps(*args, &block); end

#desc ⇒ T.untyped

Этот метод является частью закрытого API. Этот метод можно использовать только в репозитории Homebrew/brew. Третьим сторонам по возможности не следует использовать этот метод, поскольку он может быть удалён или изменён без предупреждения.

Описание программного обеспечения.

Параметры:

  • args (T.untyped)
  • block (T.untyped)

Возвращает:

  • (T.untyped)

См. также:

  • desc


570
# File 'formula.rb', line 570

delegate desc: :"self.class"

#deuniversalize_machos(*targets) ⇒ void

Этот метод возвращает неопределённое значение.

Заменяет универсальный двоичный файл его нативным срезом.

Если метод вызван без параметров, он выполняет это действие со всеми совместимыми универсальными двоичными файлами в Keg формулы Formula.

Вызывает ошибку, если универсальные двоичные файлы для преобразования не найдены.

Параметры:

  • targets (Pathname, String, nil)


2310
2311
2312
2313
2314
2315
2316
2317
2318
2319
2320
2321
2322
2323
# File 'formula.rb', line 2310

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|
    target = MachOPathname.wrap(target)
    extract_macho_slice_from(target, Hardware::CPU.arch)
  end
end

#disable_args ⇒ T.untyped

Этот метод является частью закрытого API. Этот метод можно использовать только в репозитории Homebrew/brew. Третьим сторонам по возможности не следует использовать этот метод, поскольку он может быть удалён или изменён без предупреждения.

Аргументы, использованные для отключения этой формулы Formula. Возвращает nil, если disable! не вызывался.

Параметры:

  • args (T.untyped)
  • block (T.untyped)

Возвращает:

  • (T.untyped)


1833
# File 'formula.rb', line 1833

delegate disable_args: :"self.class"

#disable_date ⇒ T.untyped

Этот метод является частью закрытого API. Этот метод можно использовать только в репозитории Homebrew/brew. Третьим сторонам по возможности не следует использовать этот метод, поскольку он может быть удалён или изменён без предупреждения.

Дата, когда эта формула Formula была отключена или будет отключена. Возвращает nil, если дата не указана.

Параметры:

  • args (T.untyped)
  • block (T.untyped)

Возвращает:

  • (T.untyped) —

    Дата

См. также:

  • disable!


1805
# File 'formula.rb', line 1805

delegate disable_date: :"self.class"

#disable_reason ⇒ T.untyped

Этот метод является частью закрытого API. Этот метод можно использовать только в репозитории Homebrew/brew. Третьим сторонам по возможности не следует использовать этот метод, поскольку он может быть удалён или изменён без предупреждения.

Причина, по которой эта формула Formula отключена. Возвращает nil, если причина не указана или формула не отключена.

Параметры:

  • args (T.untyped)
  • block (T.untyped)

Возвращает:

  • (T.untyped)

См. также:

  • disable!


1812
# File 'formula.rb', line 1812

delegate disable_reason: :"self.class"

#disable_replacement_cask ⇒ T.untyped

Этот метод является частью закрытого API. Этот метод можно использовать только в репозитории Homebrew/brew. Третьим сторонам по возможности не следует использовать этот метод, поскольку он может быть удалён или изменён без предупреждения.

Cask на замену этой отключённой формуле Formula. Возвращает nil, если замена не указана или формула не отключена.

Параметры:

  • args (T.untyped)
  • block (T.untyped)

Возвращает:

  • (T.untyped)

См. также:

  • disable!


1826
# File 'formula.rb', line 1826

delegate disable_replacement_cask: :"self.class"

#disable_replacement_formula ⇒ T.untyped

Этот метод является частью закрытого API. Этот метод можно использовать только в репозитории Homebrew/brew. По возможности сторонним разработчикам следует избегать использования этого метода, поскольку он может быть удалён или изменён без предупреждения.

Формула-замена для этой отключённой Formula. Возвращает nil, если замена не указана или формула не отключена.

Параметры:

  • args (T.untyped)
  • block (T.untyped)

Возвращает:

  • (T.untyped)

См. также:

  • disable!


1819
# File 'formula.rb', line 1819

delegate disable_replacement_formula: :"self.class"

#disabled? ⇒ Boolean

Этот метод является частью закрытого API. Этот метод можно использовать только в репозитории Homebrew/brew. По возможности сторонним разработчикам следует избегать использования этого метода, поскольку он может быть удалён или изменён без предупреждения.

Отключена ли эта Formula (то есть её нельзя установить). По умолчанию — false.

Параметры:

  • args (T.untyped)
  • block (T.untyped)

Возвращает:

  • (Boolean)

См. также:

  • disable!


1798
# File 'formula.rb', line 1798

delegate disabled?: :"self.class"

#doc ⇒ Pathname

Каталог, в который следует установить документацию формулы. После установки или с помощью brew link для формул, которые не являются keg-only, на него создаётся символическая ссылка в HOMEBREW_PREFIX.

Возвращает:

  • (Pathname)


1108
# File 'formula.rb', line 1108

def doc = share/"doc"/name

#downloader(*args, &block) ⇒ T.untyped

Этот метод является частью закрытого API. Этот метод можно использовать только в репозитории Homebrew/brew. По возможности сторонним разработчикам следует избегать использования этого метода, поскольку он может быть удалён или изменён без предупреждения.

Параметры:

  • args (T.untyped)
  • block (T.untyped)

Возвращает:

  • (T.untyped)


94
# File 'sorbet/rbi/dsl/formula.rbi', line 94

def downloader(*args, &block); end

#eligible_kegs_for_cleanup(quiet: false) ⇒ Array<Keg>

Этот метод является частью закрытого API. Этот метод можно использовать только в репозитории Homebrew/brew. По возможности сторонним разработчикам следует избегать использования этого метода, поскольку он может быть удалён или изменён без предупреждения.

Параметры:

  • quiet (Boolean) (по умолчанию: false)

Возвращает:

  • (Array<Keg>)


3569
3570
3571
3572
3573
3574
3575
3576
3577
3578
3579
3580
3581
3582
3583
3584
3585
3586
3587
3588
3589
3590
3591
3592
3593
3594
3595
3596
3597
3598
3599
3600
3601
3602
3603
3604
3605
3606
3607
3608
3609
3610
# File 'formula.rb', line 3569

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

Каталог, в который следует установить файлы Emacs Lisp; к его имени добавляется имя формулы, чтобы избежать конфликтов при создании ссылок.

Пример

Установка режима Emacs, включённого в программный пакет:

elisp.install "contrib/emacs/example-mode.el"

Возвращает:

  • (Pathname)


1330
# File 'formula.rb', line 1330

def elisp = prefix/"share/emacs/site-lisp"/name

#enqueue_resources_and_patches(download_queue:) ⇒ void

Этот метод является частью закрытого API. Этот метод можно использовать только в репозитории Homebrew/brew. По возможности сторонним разработчикам следует избегать использования этого метода, поскольку он может быть удалён или изменён без предупреждения.

Этот метод возвращает неопределённое значение.

Параметры:

  • download_queue (Homebrew::DownloadQueue)


3653
3654
3655
3656
3657
3658
3659
# File 'formula.rb', line 3653

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, executable: nil, version_args: ["--version"]) ⇒ T.self_type, Pathname

Этот метод является частью закрытого API. Этот метод можно использовать только в репозитории Homebrew/brew. По возможности сторонним разработчикам следует избегать использования этого метода, поскольку он может быть удалён или изменён без предупреждения.

Убедиться, что указанная формула установлена. Это удобно для установки вспомогательной формулы (например, shellcheck для brew style). Если указан executable, подходящий системный исполняемый файл в ORIGINAL_PATHS может удовлетворить запрос без установки формулы. Если latest имеет значение true, сначала проверяется версия системного исполняемого файла с помощью version_args. Возвращает путь к исполняемому файлу, если указан executable, в противном случае — формулу.

Параметры:

  • reason (String) (по умолчанию: "")
  • latest (Boolean) (по умолчанию: false)
  • output_to_stderr (Boolean) (по умолчанию: true)
  • quiet (Boolean) (по умолчанию: false)
  • executable (String, nil) (по умолчанию: nil)
  • version_args (Array<String>) (по умолчанию: ["--version"])

Возвращает:

  • (T.self_type, Pathname)


366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
# File 'formula.rb', line 366

def ensure_installed!(reason: "", latest: false, output_to_stderr: true, quiet: false, executable: nil,
                      version_args: ["--version"])
  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, executable:, version_args:)
    end
  end

  if executable && (system_executable = which(executable, ORIGINAL_PATHS))
    return system_executable unless latest

    require "system_command"
    result = SystemCommand.run(system_executable, args: version_args, print_stderr: false)
    return system_executable if result.success? && result.stdout[/\d+(?:\.\d+)+/] == version.to_s
  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
  elsif missing_dependencies.present?
    ohai "Reinstalling `#{name}`#{reason}..."
    safe_system HOMEBREW_BREW_FILE, "reinstall", "--formula", full_name
  end

  executable ? opt_bin/executable : self
end

#env(*args, &block) ⇒ T.untyped

Этот метод является частью закрытого API. Этот метод можно использовать только в репозитории Homebrew/brew. По возможности сторонним разработчикам следует избегать использования этого метода, поскольку он может быть удалён или изменён без предупреждения.

Параметры:

  • args (T.untyped)
  • block (T.untyped)

Возвращает:

  • (T.untyped)


97
# File 'sorbet/rbi/dsl/formula.rbi', line 97

def env(*args, &block); end

#etc ⇒ Pathname

Каталог, в который следует устанавливать файлы конфигурации формулы. При использовании etc.install существующие файлы не перезаписываются, например, во время обновления; вместо этого создаётся новый файл с именем *.default. Этот каталог находится вне HOMEBREW_CELLAR, поэтому сохраняется при обновлениях.

Возвращает:

  • (Pathname)


1358
# File 'formula.rb', line 1358

def etc = (HOMEBREW_PREFIX/"etc").extend(InstallRenamed)

#fetch_bottle_tab(quiet: false) ⇒ void

Этот метод является частью закрытого API. Этот метод можно использовать только в репозитории Homebrew/brew. По возможности сторонним разработчикам следует избегать использования этого метода, поскольку он может быть удалён или изменён без предупреждения.

Этот метод возвращает неопределённое значение.

Параметры:

  • quiet (Boolean) (по умолчанию: false)


3667
3668
3669
3670
3671
# File 'formula.rb', line 3667

def fetch_bottle_tab(quiet: false)
  return unless bottled?

  T.must(bottle).fetch_tab(quiet: quiet)
end

#fetch_patches ⇒ void

Этот метод является частью закрытого API. Этот метод можно использовать только в репозитории Homebrew/brew. По возможности сторонним разработчикам следует избегать использования этого метода, поскольку он может быть удалён или изменён без предупреждения.

Этот метод возвращает неопределённое значение.



3662
3663
3664
# File 'formula.rb', line 3662

def fetch_patches
  patchlist.select(&:external?).each(&:fetch)
end

#fish_completion ⇒ Pathname

Каталог, в который следует устанавливать файлы автодополнения fish для формулы. После установки или с помощью brew link для формул, которые не являются keg-only, на него создаётся символическая ссылка в HOMEBREW_PREFIX.

Возвращает:

  • (Pathname)


1420
# File 'formula.rb', line 1420

def fish_completion = share/"fish/vendor_completions.d"

#fish_function ⇒ Pathname

Каталог, в который следует устанавливать файлы функций fish для формулы. После установки или с помощью brew link для формул, которые не являются keg-only, на него создаётся символическая ссылка в HOMEBREW_PREFIX.

Возвращает:

  • (Pathname)


1393
# File 'formula.rb', line 1393

def fish_function = share/"fish/vendor_functions.d"

#frameworks ⇒ Pathname

Каталог, в который следует устанавливать фреймворки формулы. После установки или с помощью brew link для формул, которые не являются keg-only, на него создаётся символическая ссылка в HOMEBREW_PREFIX. Символическая ссылка в HOMEBREW_PREFIX не создаётся.

Возвращает:

  • (Pathname)


1339
# File 'formula.rb', line 1339

def frameworks = prefix/"Frameworks"

#full_formulae_names ⇒ Array<String>

Этот метод является частью закрытого API. Этот метод можно использовать только в репозитории Homebrew/brew. По возможности сторонним разработчикам следует избегать использования этого метода, поскольку он может быть удалён или изменён без предупреждения.

Возвращает названия соседних формул -full или формул без -full для любой Formula.

Возвращает:

  • (Array<String>)


737
738
739
740
741
742
743
744
745
# File 'formula.rb', line 737

def full_formulae_names
  sibling_name = if name.end_with?("-full")
    name.delete_suffix("-full")
  else
    "#{name}-full"
  end

  formula_names_for_glob("#{sibling_name}.rb")
end

#full_installed_alias_name ⇒ String?

Этот метод является частью закрытого API. Этот метод можно использовать только в репозитории Homebrew/brew. По возможности сторонним разработчикам следует избегать использования этого метода, поскольку он может быть удалён или изменён без предупреждения.

Возвращает:

  • (String, nil)


477
# File 'formula.rb', line 477

def full_installed_alias_name = full_name_with_optional_tap(installed_alias_name)

#full_installed_specified_name ⇒ String

Этот метод является частью закрытого API. Этот метод можно использовать только в репозитории Homebrew/brew. По возможности сторонним разработчикам следует избегать использования этого метода, поскольку он может быть удалён или изменён без предупреждения.

Имя (включая tap), указанное для установки этой формулы.

Возвращает:

  • (String)


524
525
526
# File 'formula.rb', line 524

def full_installed_specified_name
  full_installed_alias_name || full_name
end

#full_specified_name ⇒ String

Этот метод является частью закрытого API. Этот метод можно использовать только в репозитории Homebrew/brew. По возможности сторонним разработчикам следует избегать использования этого метода, поскольку он может быть удалён или изменён без предупреждения.

Имя (включая tap), указанное для поиска этой формулы.

Возвращает:

  • (String)


518
519
520
# File 'formula.rb', line 518

def full_specified_name
  full_alias_name || full_name
end

#generate_completions_from_executable(*commands, base_name: nil, shell_parameter_format: nil, shells: Utils::ShellCompletion.default_completion_shells(shell_parameter_format)) ⇒ void

Этот метод возвращает неопределённое значение.

Создаёт файлы автодополнения командной оболочки для bash, zsh, fish и, при необходимости, pwsh с помощью исполняемого файла формулы.

Примеры

Использование значений по умолчанию для необязательных аргументов.

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")

Если исполняемый файл умеет создавать автодополнение для PowerShell, необходимо явно передать ":pwsh" вместе с любыми другими поддерживаемыми оболочками. В качестве аргумента автодополнения будет передано "powershell".

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")

Выбор оболочек и использование другого 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")

Использование предопределённого 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")

Использование предопределённого 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")

Использование предопределённого 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")

Использование предопределённого shell_parameter_format :cobra.

generate_completions_from_executable(bin/"foo", shell_parameter_format: :cobra, shells: [:bash])

# translates to
(bash_completion/"foo").write Utils.safe_popen_read({ "SHELL" => "bash" }, bin/"foo", "completion", "bash")

Использование предопределённого 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")

Использование предопределённого 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")

Использование предопределённого shell_parameter_format :typer.

generate_completions_from_executable(bin/"foo", shell_parameter_format: :typer, shells: [:zsh])

# translates to
(zsh_completion/"_foo").write Utils.safe_popen_read(
  { "SHELL" => "zsh", "_TYPER_COMPLETE_TEST_DISABLE_SHELL_DETECTION" => "1" },
  bin/"foo", "--show-completion", "zsh"
)

Использование пользовательского 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")

Параметры:

  • commands (Pathname, String) —

    путь к исполняемому файлу и передаваемые ему подкоманды, используемые для создания скриптов автодополнения.

  • base_name (String, nil) (по умолчанию: nil) —

    базовое имя создаваемого скрипта автодополнения. По умолчанию используется имя исполняемого файла, если он установлен в bin или sbin формулы. В противном случае используется имя формулы.

  • shell_parameter_format (Symbol, String, nil) (по умолчанию: nil) —

    задаёт способ передачи каждой shells в executable. Принимает строку, задающую префикс, или одно из значений [:arg, :clap, :click, :cobra, :flag, :none, :typer]. По умолчанию оболочка передаётся без изменений.

  • shells (Array<Symbol>) (по умолчанию: Utils::ShellCompletion.default_completion_shells(shell_parameter_format)) —

    оболочки, для которых создаются скрипты автодополнения. По умолчанию используются [:bash, :zsh, :fish].



2482
2483
2484
2485
2486
2487
2488
2489
2490
2491
2492
2493
2494
2495
2496
2497
2498
2499
2500
2501
2502
2503
2504
2505
2506
2507
2508
2509
2510
2511
# File 'formula.rb', line 2482

def generate_completions_from_executable(*commands,
                                         base_name: nil,
                                         shell_parameter_format: nil,
                                         shells: Utils::ShellCompletion.default_completion_shells(shell_parameter_format))
  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]

    shell_parameter = Utils::ShellCompletion.completion_shell_parameter(
      shell_parameter_format,
      shell,
      executable,
      popen_read_env,
    )

    script_path.dirname.mkpath
    script_path.write Utils::ShellCompletion.generate_completion_output(commands, shell_parameter, popen_read_env)
  end
end

#head? ⇒ Boolean

Этот метод является частью закрытого API. Этот метод можно использовать только в репозитории Homebrew/brew. По возможности сторонним разработчикам следует избегать использования этого метода, поскольку он может быть удалён или изменён без предупреждения.

Является ли текущая активная SoftwareSpec сборкой #head?

Возвращает:

  • (Boolean)


536
537
538
# File 'formula.rb', line 536

def head?
  active_spec == head
end

#head_only? ⇒ Boolean

Этот метод является частью закрытого API. Этот метод можно использовать только в репозитории Homebrew/brew. По возможности сторонним разработчикам следует избегать использования этого метода, поскольку он может быть удалён или изменён без предупреждения.

Предназначена ли эта формула только для HEAD?

Возвращает:

  • (Boolean)


542
543
544
# File 'formula.rb', line 542

def head_only?
  !!head && !stable
end

#head_version_outdated?(version, fetch_head: false) ⇒ Boolean

Этот метод является частью закрытого API. Этот метод можно использовать только в репозитории Homebrew/brew. По возможности сторонним разработчикам следует избегать использования этого метода, поскольку он может быть удалён или изменён без предупреждения.

Параметры:

  • version (PkgVersion)
  • fetch_head (Boolean) (по умолчанию: false)

Возвращает:

  • (Boolean)


989
990
991
992
993
994
995
996
997
998
999
1000
1001
1002
1003
1004
# File 'formula.rb', line 989

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

Этот метод является частью закрытого API. Этот метод можно использовать только в репозитории Homebrew/brew. По возможности сторонним разработчикам следует избегать использования этого метода, поскольку он может быть удалён или изменён без предупреждения.

Домашняя страница программного обеспечения.

Параметры:

  • args (T.untyped)
  • block (T.untyped)

Возвращает:

  • (T.untyped)

См. также:

  • homepage


580
# File 'formula.rb', line 580

delegate homepage: :"self.class"

#implied_link_overwrite?(keg_name, overwrite_formulae) ⇒ Boolean

Этот метод является частью закрытого API. Этот метод можно использовать только в репозитории Homebrew/brew. По возможности сторонним разработчикам следует избегать использования этого метода, поскольку он может быть удалён или изменён без предупреждения.

Параметры:

  • keg_name (String, Symbol, nil)
  • overwrite_formulae (Array<Formula>)

Возвращает:

  • (Boolean)


824
825
826
827
828
829
830
831
832
833
834
835
836
837
# File 'formula.rb', line 824

def implied_link_overwrite?(keg_name, overwrite_formulae)
  return false if overwrite_formulae.empty?
  return false if keg_name.nil?

  case keg_name
  when :missing
    # File doesn't belong to any keg, so implied overwrites do not apply.
    false
  else
    overwrite_formulae.any? do |formula|
      formula.possible_names.include?(keg_name)
    end
  end
end

#include ⇒ Pathname

Каталог, в который следует установить заголовочные файлы формулы. После установки или с помощью brew link для формул, не предназначенных только для keg, в HOMEBREW_PREFIX создаётся символическая ссылка на этот каталог.

Пример

Нет доступного make install?

include.install "example.h"

Возвращает:

  • (Pathname)


1124
# File 'formula.rb', line 1124

def include = prefix/"include"

#info ⇒ Pathname

Каталог, в который следует установить файлы info формулы. После установки или с помощью brew link для формул, не предназначенных только для keg, в HOMEBREW_PREFIX создаётся символическая ссылка на этот каталог.

Возвращает:

  • (Pathname)


1132
# File 'formula.rb', line 1132

def info = share/"info"

#inreplace(paths, before = nil, after = nil, audit_result: true, global: true, &block) ⇒ void

Этот метод возвращает неопределённое значение.

Иногда перед установкой необходимо внести небольшие изменения. Обычно мы предпочитаем использовать патч, но если в патче требуется prefix этой формулы, придётся воспользоваться inreplace, поскольку в патче нельзя получить доступ к переменным, определённым формулой: в встроенном патче доступен только HOMEBREW_PREFIX.

Примеры

inreplace поддерживает регулярные выражения:

inreplace "somefile.cfg", /look[for]what?/, "replace by #{bin}/tool"

inreplace поддерживает блоки:

inreplace "Makefile" do |s|
  s.gsub! "/usr/local", HOMEBREW_PREFIX.to_s
end

Параметры:

  • paths (Enumerable<String, Pathname>, String, Pathname)
  • before (Pathname, Regexp, String, nil) (по умолчанию: nil)
  • after (Pathname, String, Symbol, nil) (по умолчанию: nil)
  • audit_result (Boolean) (по умолчанию: true)
  • global (Boolean) (по умолчанию: true)
  • block (T.proc.params(s: StringInreplaceExtension).void, nil)

См. также:

  • Utils::Inreplace.inreplace


3351
3352
3353
3354
3355
3356
# File 'formula.rb', line 3351

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

Этот метод возвращает неопределённое значение.

Этот метод переопределяется в подклассах Formula и содержит инструкции по установке. Исходные файлы (из url) скачиваются и проверяются по хешу, после чего Homebrew переходит во временный каталог, где распаковывается архив или клонируется репозиторий.

Пример

def install
  system "./configure", "--prefix=#{prefix}"
  system "make", "install"
end


3314
# File 'formula.rb', line 3314

def install; end

#install_etc_var ⇒ void

Этот метод является частью закрытого API. Этот метод можно использовать только в репозитории Homebrew/brew. По возможности сторонним разработчикам следует избегать использования этого метода, поскольку он может быть удалён или изменён без предупреждения.

Этот метод возвращает неопределённое значение.



1599
1600
1601
1602
1603
1604
1605
1606
1607
1608
1609
# File 'formula.rb', line 1599

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)
    # Bottle installs and test-bot cleanup both restore `.bottle` files
    # through `InstallRenamed`, matching formula-level `etc.install` handling.
    path.extend(InstallRenamed)
    path.cp_path_sub(bottle_prefix, HOMEBREW_PREFIX)
    path
  end
end

#installed_alias_name ⇒ String?

Этот метод является частью закрытого API. Этот метод можно использовать только в репозитории Homebrew/brew. По возможности сторонним разработчикам следует избегать использования этого метода, поскольку он может быть удалён или изменён без предупреждения.

Возвращает:

  • (String, nil)


474
# File 'formula.rb', line 474

def installed_alias_name = installed_alias_path&.basename&.to_s

#installed_alias_path ⇒ Pathname?

Этот метод является частью закрытого API. Этот метод можно использовать только в репозитории Homebrew/brew. По возможности сторонним разработчикам следует избегать использования этого метода, поскольку он может быть удалён или изменён без предупреждения.

Путь к псевдониму, использованному для установки этой формулы, если он существует. Может отличаться от #alias_path — псевдонима, по которому была найдена формула и который указан для этого экземпляра.

Возвращает:

  • (Pathname, nil)


461
462
463
464
465
466
467
468
469
470
471
# File 'formula.rb', line 461

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

Этот метод является частью закрытого API. Этот метод можно использовать только в репозитории Homebrew/brew. По возможности сторонним разработчикам следует избегать использования этого метода, поскольку он может быть удалён или изменён без предупреждения.

Изменился ли целевой объект псевдонима, использованного для установки этой формулы? Возвращает false, если формула была установлена без псевдонима.

Возвращает:

  • (Boolean)


1989
1990
1991
1992
1993
1994
# File 'formula.rb', line 1989

def installed_alias_target_changed?
  target = current_installed_alias_target
  return false unless target

  target.name != name
end

#installed_kegs ⇒ Array<Keg>

Этот метод является частью закрытого API. Этот метод можно использовать только в репозитории Homebrew/brew. По возможности сторонним разработчикам следует избегать использования этого метода, поскольку он может быть удалён или изменён без предупреждения.

Все установленные в данный момент keg.

Возвращает:

  • (Array<Keg>)


1076
1077
1078
# File 'formula.rb', line 1076

def installed_kegs
  installed_prefixes.map { |dir| Keg.new(dir) }
end

#installed_prefixes ⇒ Array<Pathname>

Этот метод является частью закрытого API. Этот метод можно использовать только в репозитории Homebrew/brew. По возможности сторонним разработчикам следует избегать использования этого метода, поскольку он может быть удалён или изменён без предупреждения.

Все каталоги prefix, установленные в данный момент.

Возвращает:

  • (Array<Pathname>)


1072
# File 'formula.rb', line 1072

def installed_prefixes = Utils::Path.formula_installed_prefixes(possible_names)

#installed_runtime_formula_dependencies(read_from_tab: true, undeclared: true) ⇒ Array<Formula>

Этот метод является частью закрытого API. Этот метод можно использовать только в репозитории Homebrew/brew. По возможности сторонним разработчикам следует избегать использования этого метода, поскольку он может быть удалён или изменён без предупреждения.

Возвращает список установленных объектов Formula, необходимых во время выполнения.

Параметры:

  • read_from_tab (Boolean) (по умолчанию: true)
  • undeclared (Boolean) (по умолчанию: true)

Возвращает:

  • (Array<Formula>)


2820
2821
2822
2823
2824
2825
2826
2827
2828
2829
2830
2831
2832
# File 'formula.rb', line 2820

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

#keg_only? ⇒ Boolean

Этот метод является частью внутреннего API. Этот метод можно использовать только внутри репозиториев, принадлежащих Homebrew, за исключением casks и формул. По возможности сторонним разработчикам следует избегать использования этого метода, поскольку он может быть удалён или изменён без предупреждения.

В редких случаях библиотеку не следует связывать символической ссылкой с основным prefix. Пример см. в gettext.rb.

Возвращает:

  • (Boolean)

См. также:

  • keg_only


1700
1701
1702
1703
1704
# File 'formula.rb', line 1700

def keg_only?
  return false unless keg_only_reason

  keg_only_reason.applicable?
end

#keg_only_reason(*args, &block) ⇒ T.untyped

Этот метод является частью закрытого API. Этот метод можно использовать только в репозитории Homebrew/brew. По возможности сторонним разработчикам следует избегать использования этого метода, поскольку он может быть удалён или изменён без предупреждения.

Параметры:

  • args (T.untyped)
  • block (T.untyped)

Возвращает:

  • (T.untyped)


103
# File 'sorbet/rbi/dsl/formula.rbi', line 103

def keg_only_reason(*args, &block); end

#kext_prefix ⇒ Pathname

Каталог, в который следует установить расширения ядра формулы. После установки или с помощью brew link для формул, не предназначенных только для keg, в HOMEBREW_PREFIX создаётся символическая ссылка на этот каталог. Символическая ссылка на этот каталог в HOMEBREW_PREFIX не создаётся.

Возвращает:

  • (Pathname)


1348
# File 'formula.rb', line 1348

def kext_prefix = prefix/"Library/Extensions"

#latest_formula ⇒ Formula

Этот метод является частью закрытого API. Этот метод можно использовать только в репозитории Homebrew/brew. По возможности сторонним разработчикам следует избегать использования этого метода, поскольку он может быть удалён или изменён без предупреждения.

Если значение псевдонима изменилось, возвращает новую формулу. В противном случае возвращает последнюю версию текущей формулы.

Возвращает:

  • (Formula)


2010
2011
2012
# File 'formula.rb', line 2010

def latest_formula
  installed_alias_target_changed? ? T.must(current_installed_alias_target) : self
end

#latest_head_pkg_version(fetch_head: false) ⇒ PkgVersion

Этот метод является частью закрытого API. Этот метод можно использовать только в репозитории Homebrew/brew. По возможности сторонним разработчикам следует избегать использования этого метода, поскольку он может быть удалён или изменён без предупреждения.

Параметры:

  • fetch_head (Boolean) (по умолчанию: false)

Возвращает:

  • (PkgVersion)


1007
1008
1009
1010
1011
1012
1013
1014
1015
# File 'formula.rb', line 1007

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?

Этот метод является частью закрытого API. Этот метод можно использовать только в репозитории Homebrew/brew. По возможности сторонним разработчикам следует избегать использования этого метода, поскольку он может быть удалён или изменён без предупреждения.

Возвращает:

  • (Pathname, nil)


983
984
985
986
# File 'formula.rb', line 983

def latest_head_prefix
  head_version = latest_head_version
  prefix(head_version) if head_version
end

#latest_head_version ⇒ PkgVersion?

Этот метод является частью закрытого API. Этот метод можно использовать только в репозитории Homebrew/brew. По возможности сторонним разработчикам следует избегать использования этого метода, поскольку он может быть удалён или изменён без предупреждения.

Возвращает:

  • (PkgVersion, nil)


971
972
973
974
975
976
977
978
979
980
# File 'formula.rb', line 971

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

Этот метод является частью закрытого API. Этот метод можно использовать только в репозитории Homebrew/brew. По возможности сторонним разработчикам следует избегать использования этого метода, поскольку он может быть удалён или изменён без предупреждения.

Последний prefix этой формулы. Проверяет #head, а затем #stable's #prefix.

Возвращает:

  • (Pathname)


1019
1020
1021
1022
1023
1024
1025
1026
1027
# File 'formula.rb', line 1019

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

Этот метод является частью закрытого API. Этот метод можно использовать только в репозитории Homebrew/brew. По возможности сторонним разработчикам следует избегать использования этого метода, поскольку он может быть удалён или изменён без предупреждения.

Установлена ли эта Formula. На самом деле проверяется лишь то, существует ли каталог #latest_installed_prefix и не пуст ли он.

Возвращает:

  • (Boolean)


945
946
947
# File 'formula.rb', line 945

def latest_version_installed?
  (dir = latest_installed_prefix).directory? && !dir.empty?
end

#launchd_service_path ⇒ Pathname

Этот метод является частью закрытого API. Этот метод можно использовать только в репозитории Homebrew/brew. По возможности сторонним разработчикам следует избегать использования этого метода, поскольку он может быть удалён или изменён без предупреждения.

Путь к созданному файлу службы launchd.

Возвращает:

  • (Pathname)


1476
# File 'formula.rb', line 1476

def launchd_service_path = (any_installed_prefix || opt_prefix)/"#{plist_name}.plist"

#lib ⇒ Pathname

Каталог, в который следует установить библиотеки формулы. После установки или с помощью brew link для формул, не предназначенных только для keg, в HOMEBREW_PREFIX создаётся символическая ссылка на этот каталог.

Пример

Нет доступного make install?

lib.install "example.dylib"

Возвращает:

  • (Pathname)


1148
# File 'formula.rb', line 1148

def lib = prefix/"lib"

#libexec ⇒ Pathname

Каталог, в который следует установить исполняемые файлы формулы. Символическая ссылка на этот каталог в HOMEBREW_PREFIX не создаётся. Обычно он используется для установки файлов, которые не нужно связывать символическими ссылками с HOMEBREW_PREFIX из других каталогов; вместо этого символические ссылки или скрипты-обёртки вручную создаются, например, в #bin.

Пример

libexec.install "foo.jar"
bin.write_jar_script libexec/"foo.jar", "foo"

Возвращает:

  • (Pathname)


1165
# File 'formula.rb', line 1165

def libexec = prefix/"libexec"

#license ⇒ T.untyped

Этот метод является частью закрытого API. Этот метод можно использовать только в репозитории Homebrew/brew. По возможности сторонним разработчикам следует избегать использования этого метода, поскольку он может быть удалён или изменён без предупреждения.

Идентификатор SPDX лицензии программного обеспечения.

Параметры:

  • args (T.untyped)
  • block (T.untyped)

Возвращает:

  • (T.untyped)

См. также:

  • license


575
# File 'formula.rb', line 575

delegate license: :"self.class"

#link_overwrite?(path) ⇒ Boolean

Этот метод является частью закрытого API. Этот метод можно использовать только в репозитории Homebrew/brew. По возможности сторонним разработчикам следует избегать использования этого метода, поскольку он может быть удалён или изменён без предупреждения.

Для связанных семейств формул могут также подразумеваться явно указанные пути link_overwrite.

Параметры:

  • path (Pathname)

Возвращает:

  • (Boolean)

См. также:

  • link_overwrite


1720
1721
1722
1723
1724
1725
1726
1727
1728
1729
1730
1731
1732
1733
1734
1735
1736
1737
1738
1739
1740
1741
1742
1743
1744
1745
1746
1747
1748
1749
# File 'formula.rb', line 1720

def link_overwrite?(path)
  # Don't overwrite files that belong to another keg except when that
  # keg's formula is deleted.
  case keg_name = link_overwrite_keg_name(path)
  when String
    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
      # Ensure `keg_name` maps cleanly to the resolved formula via `possible_names`.
      return false unless f.possible_names.include?(keg_name)
    end
  when :missing
    # File doesn't belong to any keg, so defer to overwrite checks below.
  else
    return false
  end

  to_check = path.relative_path_from(HOMEBREW_PREFIX).to_s
  return true if 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

  implied_link_overwrite?(keg_name, link_overwrite_formulae)
end

#link_overwrite_formulae ⇒ Array<Formula>

Этот метод является частью закрытого API. Этот метод можно использовать только в репозитории Homebrew/brew. По возможности сторонним разработчикам следует избегать использования этого метода, поскольку он может быть удалён или изменён без предупреждения.

Возвращает соседние формулы, ссылки на префиксы которых следует заменить при связывании этой формулы.

Возвращает:

  • (Array<Formula>)


798
799
800
801
802
803
804
# File 'formula.rb', line 798

def link_overwrite_formulae
  link_overwrite_formulae_names.filter_map do |formula_name|
    Formula[formula_name]
  rescue FormulaUnavailableError
    nil
  end.uniq(&:full_name)
end

#link_overwrite_formulae_names ⇒ Array<String>

Этот метод является частью закрытого API. Этот метод можно использовать только в репозитории Homebrew/brew. По возможности сторонним разработчикам следует избегать использования этого метода, поскольку он может быть удалён или изменён без предупреждения.

Возвращает имена соседних формул, ссылки на префиксы которых следует заменить при связывании этой формулы.

Возвращает:

  • (Array<String>)


770
771
772
773
774
775
776
777
778
779
780
781
782
783
784
785
786
787
788
789
790
791
792
793
794
# File 'formula.rb', line 770

def link_overwrite_formulae_names
  formula_names = T.let(Set.new, T::Set[String])
  pending_formula_names = T.let([name], T::Array[String])

  pending_formula_names.each do |current_name|
    current_formula = begin
      if current_name == name
        self
      else
        Formula[current_name]
      end
    rescue FormulaUnavailableError
      next
    end

    current_formula.link_overwrite_related_formula_names.each do |related_formula_name|
      next if related_formula_name == name
      next unless formula_names.add?(related_formula_name)

      pending_formula_names << related_formula_name
    end
  end

  formula_names.to_a.sort
end

#link_overwrite_keg_name(path) ⇒ String, ...

Этот метод является частью закрытого API. Этот метод можно использовать только в репозитории Homebrew/brew. По возможности сторонним разработчикам следует избегать использования этого метода, поскольку он может быть удалён или изменён без предупреждения.

Параметры:

  • path (Pathname)

Возвращает:

  • (String, Symbol, nil)


807
808
809
810
811
812
813
814
815
816
817
818
819
# File 'formula.rb', line 807

def link_overwrite_keg_name(path)
  # Don't overwrite files not created by Homebrew.
  return if path.stat.uid != HOMEBREW_ORIGINAL_BREW_FILE.stat.uid

  keg = Keg.for(path)
  # This keg doesn't belong to any current core/tap formula, most likely coming from a DIY install.
  return if keg.tab.tap.nil?

  keg.name
rescue NotAKegError, Errno::ENOENT
  # File doesn't belong to any keg.
  :missing
end

#link_overwrite_reason ⇒ String?

Этот метод является частью закрытого API. Этот метод можно использовать только в репозитории Homebrew/brew. По возможности сторонним разработчикам следует избегать использования этого метода, поскольку он может быть удалён или изменён без предупреждения.

Возвращает:

  • (String, nil)


748
749
750
751
752
753
754
755
756
757
758
759
760
761
# File 'formula.rb', line 748

def link_overwrite_reason
  installed_overwrite_formulae = link_overwrite_formulae.select(&:any_version_installed?)
  return if installed_overwrite_formulae.empty?

  reason_formulae = installed_overwrite_formulae.select(&:linked?)
  status = if reason_formulae.empty?
    reason_formulae = installed_overwrite_formulae
    "installed"
  else
    "linked"
  end

  "#{reason_formulae.map(&:full_name).to_sentence}#{reason_formulae.one? ? "is" : "are"} already #{status}"
end

#link_overwrite_related_formula_names ⇒ Array<String>

Этот метод является частью закрытого API. Этот метод можно использовать только в репозитории Homebrew/brew. По возможности сторонним разработчикам следует избегать использования этого метода, поскольку он может быть удалён или изменён без предупреждения.

Возвращает:

  • (Array<String>)


764
765
766
# File 'formula.rb', line 764

def link_overwrite_related_formula_names
  [*versioned_formulae_names, *full_formulae_names, unversioned_formula_name].compact
end

#linked? ⇒ Boolean

Этот метод является частью внутреннего API. Этот метод можно использовать только внутри репозиториев, принадлежащих Homebrew, за исключением casks и формул. По возможности сторонним разработчикам следует избегать использования этого метода, поскольку он может быть удалён или изменён без предупреждения.

Связана ли формула?

Возвращает:

  • (Boolean)


1051
# File 'formula.rb', line 1051

def linked? = linked_keg.exist?

#linked_keg ⇒ Pathname

Этот метод является частью внутреннего API. Этот метод можно использовать только внутри репозиториев, принадлежащих Homebrew, за исключением casks и формул. По возможности сторонним разработчикам следует избегать использования этого метода, поскольку он может быть удалён или изменён без предупреждения.

Каталог символических ссылок, указывающий на состояние связывания этой Formula. Вероятно, вместо него вам нужен #opt_prefix.

Возвращает:

  • (Pathname)


962
963
964
965
966
967
968
# File 'formula.rb', line 962

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?

Этот метод является частью закрытого API. Этот метод можно использовать только в репозитории Homebrew/brew. По возможности сторонним разработчикам следует избегать использования этого метода, поскольку он может быть удалён или изменён без предупреждения.

PkgVersion связанного keg для формулы.

Возвращает:

  • (PkgVersion, nil)


1059
1060
1061
1062
1063
# File 'formula.rb', line 1059

def linked_version
  return unless linked?

  Keg.for(linked_keg).version
end

#livecheck ⇒ T.untyped

Этот метод является частью закрытого API. Этот метод можно использовать только в репозитории Homebrew/brew. По возможности сторонним разработчикам следует избегать использования этого метода, поскольку он может быть удалён или изменён без предупреждения.

Спецификация livecheck для программного обеспечения.

Параметры:

  • args (T.untyped)
  • block (T.untyped)

Возвращает:

  • (T.untyped)

См. также:

  • livecheck


585
# File 'formula.rb', line 585

delegate livecheck: :"self.class"

#livecheck_defined? ⇒ Boolean

Этот метод является частью закрытого API. Этот метод можно использовать только в репозитории Homebrew/brew. По возможности сторонним разработчикам следует избегать использования этого метода, поскольку он может быть удалён или изменён без предупреждения.

Определена ли для программного обеспечения спецификация livecheck?

Параметры:

  • args (T.untyped)
  • block (T.untyped)

Возвращает:

  • (Boolean)

См. также:

  • livecheck_defined?


590
# File 'formula.rb', line 590

delegate livecheck_defined?: :"self.class"

#livecheckable? ⇒ Boolean

Этот метод является частью закрытого API. Этот метод можно использовать только в репозитории Homebrew/brew. По возможности сторонним разработчикам следует избегать использования этого метода, поскольку он может быть удалён или изменён без предупреждения.

Это устаревший псевдоним для #livecheck_defined?.

Параметры:

  • args (T.untyped)
  • block (T.untyped)

Возвращает:

  • (Boolean)

См. также:

  • #livecheckable?


595
# File 'formula.rb', line 595

delegate livecheckable?: :"self.class"

#loaded_from_api? ⇒ Boolean

Этот метод является частью закрытого API. Этот метод можно использовать только в репозитории Homebrew/brew. По возможности сторонним разработчикам следует избегать использования этого метода, поскольку он может быть удалён или изменён без предупреждения.

Была ли эта формула загружена с помощью API formulae.brew.sh.

Параметры:

  • args (T.untyped)
  • block (T.untyped)

Возвращает:

  • (Boolean)

См. также:

  • loaded_from_api?


631
# File 'formula.rb', line 631

delegate loaded_from_api?: :"self.class"

#loaded_from_internal_api? ⇒ Boolean

Этот метод является частью закрытого API. Этот метод можно использовать только в репозитории Homebrew/brew. По возможности сторонним разработчикам следует избегать использования этого метода, поскольку он может быть удалён или изменён без предупреждения.

Была ли эта формула загружена с помощью внутреннего API formulae.brew.sh.

Параметры:

  • args (T.untyped)
  • block (T.untyped)

Возвращает:

  • (Boolean)

См. также:

  • loaded_from_internal_api?


636
# File 'formula.rb', line 636

delegate loaded_from_internal_api?: :"self.class"

#loader_path ⇒ String

Переменная компоновщика для каталога, содержащего программу или разделяемый объект.

Возвращает:

  • (String)


2287
# File 'formula.rb', line 2287

def loader_path = "@loader_path"

#lock ⇒ Array<String>

Этот метод является частью закрытого API. Этот метод можно использовать только в репозитории Homebrew/brew. По возможности сторонним разработчикам следует избегать использования этого метода, поскольку он может быть удалён или изменён без предупреждения.

Возвращает:

  • (Array<String>)


1900
1901
1902
1903
1904
1905
1906
1907
1908
1909
1910
1911
1912
# File 'formula.rb', line 1900

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

Этот метод является частью закрытого API. Этот метод можно использовать только в репозитории Homebrew/brew. По возможности сторонним разработчикам следует избегать использования этого метода, поскольку он может быть удалён или изменён без предупреждения.

Каталог, в который будут записываться журналы установки или тестирования формулы.

Возвращает:

  • (Pathname)


1439
# File 'formula.rb', line 1439

def logs = HOMEBREW_LOGS + name

#man ⇒ Pathname

Корневой каталог, в который следует устанавливать страницы руководства формулы. После установки он связывается символической ссылкой с HOMEBREW_PREFIX либо с brew link для формул, не являющихся keg-only. Часто вместо него следует использовать одну из более специализированных функций man, например #man1.

Возвращает:

  • (Pathname)


1175
# File 'formula.rb', line 1175

def man = share/"man"

#man1 ⇒ Pathname

Каталог, в который следует устанавливать страницы man1 формулы. После установки он связывается символической ссылкой с HOMEBREW_PREFIX либо с brew link для формул, не являющихся keg-only.

Пример

Нет доступного make install?

man1.install "example.1"

Возвращает:

  • (Pathname)


1191
# File 'formula.rb', line 1191

def man1 = man/"man1"

#man2 ⇒ Pathname

Каталог, в который следует устанавливать страницы man2 формулы. После установки он связывается символической ссылкой с HOMEBREW_PREFIX либо с brew link для формул, не являющихся keg-only.

Возвращает:

  • (Pathname)


1199
# File 'formula.rb', line 1199

def man2 = man/"man2"

#man3 ⇒ Pathname

Каталог, в который следует устанавливать страницы man3 формулы. После установки он связывается символической ссылкой с HOMEBREW_PREFIX либо с brew link для формул, не являющихся keg-only.

Пример

Нет доступного make install?

man3.install "man.3"

Возвращает:

  • (Pathname)


1215
# File 'formula.rb', line 1215

def man3 = man/"man3"

#man4 ⇒ Pathname

Каталог, в который следует устанавливать страницы man4 формулы. После установки он связывается символической ссылкой с HOMEBREW_PREFIX либо с brew link для формул, не являющихся keg-only.

Возвращает:

  • (Pathname)


1223
# File 'formula.rb', line 1223

def man4 = man/"man4"

#man5 ⇒ Pathname

Каталог, в который следует устанавливать страницы man5 формулы. После установки он связывается символической ссылкой с HOMEBREW_PREFIX либо с brew link для формул, не являющихся keg-only.

Возвращает:

  • (Pathname)


1231
# File 'formula.rb', line 1231

def man5 = man/"man5"

#man6 ⇒ Pathname

Каталог, в который следует устанавливать страницы man6 формулы. После установки он связывается символической ссылкой с HOMEBREW_PREFIX либо с brew link для формул, не являющихся keg-only.

Возвращает:

  • (Pathname)


1239
# File 'formula.rb', line 1239

def man6 = man/"man6"

#man7 ⇒ Pathname

Каталог, в который следует устанавливать страницы man7 формулы. После установки он связывается символической ссылкой с HOMEBREW_PREFIX либо с brew link для формул, не являющихся keg-only.

Возвращает:

  • (Pathname)


1247
# File 'formula.rb', line 1247

def man7 = man/"man7"

#man8 ⇒ Pathname

Каталог, в который следует устанавливать страницы man8 формулы. После установки он связывается символической ссылкой с HOMEBREW_PREFIX либо с brew link для формул, не являющихся keg-only.

Возвращает:

  • (Pathname)


1255
# File 'formula.rb', line 1255

def man8 = man/"man8"

#migration_needed? ⇒ Boolean

Этот метод является частью закрытого API. Этот метод можно использовать только в репозитории Homebrew/brew. По возможности сторонним разработчикам следует избегать использования этого метода, поскольку он может быть удалён или изменён без предупреждения.

Возвращает:

  • (Boolean)


1932
1933
1934
# File 'formula.rb', line 1932

def migration_needed?
  !oldnames_to_migrate.empty? && !rack.exist?
end

#missing_dependencies(hide: []) ⇒ Array<Dependency>

Этот метод является частью закрытого API. Этот метод можно использовать только в репозитории Homebrew/brew. По возможности сторонним разработчикам следует избегать использования этого метода, поскольку он может быть удалён или изменён без предупреждения.

Возвращает список формул, от которых зависит эта формула, но которые не установлены. Для получения сведений о зависимостях используются только данные tab; если в tab нет данных о зависимостях времени выполнения (значение nil или пустой список), возвращается пустой список, а не используются определения формул. Это предотвращает ошибочную блокировку удаления из-за устаревших или отсутствующих данных tab.

Параметры:

  • hide (Array<String>) (по умолчанию: [])

Возвращает:

  • (Array<Dependency>)


2859
2860
2861
2862
2863
2864
2865
2866
2867
2868
2869
2870
2871
2872
2873
2874
2875
2876
# File 'formula.rb', line 2859

def missing_dependencies(hide: [])
  tab_deps = any_installed_keg&.runtime_dependencies
  return [] if tab_deps.blank?

  tab_deps.filter_map do |d|
    full_name = d["full_name"]
    next if full_name.blank?

    # Use base name to check the cellar directly, avoiding Formulary.resolve.
    # A dep is "missing" if it's in the hide list (pretend uninstalled) or
    # genuinely not installed in the cellar.
    base_name = Utils.name_from_full_name(full_name)
    next if hide.exclude?(base_name) && ((HOMEBREW_CELLAR/base_name).directory? ||
                                         (HOMEBREW_PREFIX/"opt"/base_name).directory?)

    Dependency.new(full_name)
  end
end

#missing_library_linkage ⇒ Array<(Array<String>, Set<String>)>

Этот метод является частью закрытого API. Этот метод можно использовать только в репозитории Homebrew/brew. По возможности сторонним разработчикам следует избегать использования этого метода, поскольку он может быть удалён или изменён без предупреждения.

Возвращает:

  • (Array<(Array<String>, Set<String>)>)


3405
3406
3407
3408
3409
3410
3411
3412
3413
3414
3415
3416
# File 'formula.rb', line 3405

def missing_library_linkage
  keg = any_installed_keg
  return [[], Set.new] unless keg&.directory?

  CacheStoreDatabase.use(:linkage) do |db|
    typed_db = T.cast(db, CacheStoreDatabase[String, T::Hash[T.any(String, Symbol), T.anything]])
    linkage_checker = LinkageChecker.new(keg, self, cache_db: typed_db)
    own_libraries = (linkage_checker.broken_deps.fetch(name, []) + linkage_checker.broken_dylibs.to_a).uniq.sort
    dependency_names = linkage_checker.broken_deps.keys.reject { |dep| dep == name }.to_set
    [own_libraries, dependency_names]
  end
end

#mkdir(name, &block) ⇒ T.untyped

Этот метод является частью закрытого API. Этот метод можно использовать только в репозитории Homebrew/brew. Сторонним разработчикам по возможности не следует использовать этот метод, поскольку он может быть удалён или изменён без предупреждения.

Вариант FileUtils.mkdir, который также переключается в эту папку внутри блока.

Параметры:

  • name (String, Pathname)
  • block (T.proc.void, nil)

Возвращает:

  • (T.untyped)


3631
3632
3633
3634
3635
3636
# File 'formula.rb', line 3631

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) ⇒ T.type_parameter(:U)

Этот метод является частью закрытого API. Этот метод можно использовать только в репозитории Homebrew/brew. Сторонним разработчикам по возможности не следует использовать этот метод, поскольку он может быть удалён или изменён без предупреждения.

Создаёт временный каталог, а затем передаёт его блоку. После завершения блока временный каталог рекурсивно удаляется. Если передать opts[:retain] или вызвать do |staging| ... staging.retain! в блоке, удаление будет пропущено и содержимое временного каталога сохранится.

Параметры:

  • prefix (String) (по умолчанию: name)
  • retain (Boolean) (по умолчанию: false)
  • retain_in_cache (Boolean) (по умолчанию: false)
  • block (T.proc.params(arg0: Mktemp).returns(T.type_parameter(:U)))

Возвращает:

  • (T.type_parameter(:U))


3624
3625
3626
# File 'formula.rb', line 3624

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

Этот метод является частью закрытого API. Этот метод можно использовать только в репозитории Homebrew/brew. Сторонним разработчикам по возможности не следует использовать этот метод, поскольку он может быть удалён или изменён без предупреждения.

Параметры:

  • args (T.untyped)
  • block (T.untyped)

Возвращает:

  • (Boolean)


124
# File 'sorbet/rbi/dsl/formula.rbi', line 124

def network_access_allowed?(*args, &block); end

#new_formula_available? ⇒ Boolean

Этот метод является частью закрытого API. Этот метод можно использовать только в репозитории Homebrew/brew. Сторонним разработчикам по возможности не следует использовать этот метод, поскольку он может быть удалён или изменён без предупреждения.

Возвращает:

  • (Boolean)


1977
1978
1979
# File 'formula.rb', line 1977

def new_formula_available?
  installed_alias_target_changed? && !latest_formula.latest_version_installed?
end

#no_autobump! ⇒ T.untyped

Этот метод является частью закрытого API. Этот метод можно использовать только в репозитории Homebrew/brew. Сторонним разработчикам по возможности не следует использовать этот метод, поскольку он может быть удалён или изменён без предупреждения.

Исключает формулу из списка автоматического обновления.

Параметры:

  • args (T.untyped)
  • block (T.untyped)

Возвращает:

  • (T.untyped)

См. также:

  • no_autobump!


600
# File 'formula.rb', line 600

delegate no_autobump!: :"self.class"

#no_autobump_message(*args, &block) ⇒ T.untyped

Этот метод является частью закрытого API. Этот метод можно использовать только в репозитории Homebrew/brew. Сторонним разработчикам по возможности не следует использовать этот метод, поскольку он может быть удалён или изменён без предупреждения.

Параметры:

  • args (T.untyped)
  • block (T.untyped)

Возвращает:

  • (T.untyped)


130
# File 'sorbet/rbi/dsl/formula.rbi', line 130

def no_autobump_message(*args, &block); end

#old_installed_formulae ⇒ Array<Formula>

Этот метод является частью закрытого API. Этот метод можно использовать только в репозитории Homebrew/brew. Сторонним разработчикам по возможности не следует использовать этот метод, поскольку он может быть удалён или изменён без предупреждения.

Возвращает:

  • (Array<Formula>)


2015
2016
2017
2018
2019
2020
2021
2022
# File 'formula.rb', line 2015

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>

Этот метод является частью внутреннего API. Этот метод можно использовать только внутри репозиториев, принадлежащих Homebrew, за исключением cask-файлов и формул. Сторонним разработчикам по возможности не следует использовать этот метод, поскольку он может быть удалён или изменён без предупреждения.

Старые имена формулы.

Возвращает:

  • (Array<String>)


877
878
879
880
881
882
883
884
885
# File 'formula.rb', line 877

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>

Этот метод является частью закрытого API. Этот метод можно использовать только в репозитории Homebrew/brew. Сторонним разработчикам по возможности не следует использовать этот метод, поскольку он может быть удалён или изменён без предупреждения.

Возвращает:

  • (Array<String>)


1921
1922
1923
1924
1925
1926
1927
1928
1929
# File 'formula.rb', line 1921

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?

Этот метод является частью закрытого API. Этот метод можно использовать только в репозитории Homebrew/brew. Сторонним разработчикам по возможности не следует использовать этот метод, поскольку он может быть удалён или изменён без предупреждения.

Возвращает:

  • (Boolean, nil)


3224
3225
3226
# File 'formula.rb', line 3224

def on_system_blocks_exist?
  self.class.on_system_blocks_exist? || @on_system_blocks_exist
end

#opt_bin ⇒ Pathname

То же, что и #bin, но относительно #opt_prefix, а не #prefix.

Возвращает:

  • (Pathname)


1515
# File 'formula.rb', line 1515

def opt_bin = opt_prefix/"bin"

#opt_elisp ⇒ Pathname

То же, что и #elisp, но относительно #opt_prefix, а не #prefix.

Возвращает:

  • (Pathname)


1557
# File 'formula.rb', line 1557

def opt_elisp = opt_prefix/"share/emacs/site-lisp"/name

#opt_frameworks ⇒ Pathname

То же, что и #frameworks, но относительно #opt_prefix, а не #prefix.

Возвращает:

  • (Pathname)


1563
# File 'formula.rb', line 1563

def opt_frameworks = opt_prefix/"Frameworks"

#opt_include ⇒ Pathname

То же, что и #include, но относительно #opt_prefix, а не #prefix.

Возвращает:

  • (Pathname)


1521
# File 'formula.rb', line 1521

def opt_include = opt_prefix/"include"

#opt_lib ⇒ Pathname

То же, что и #lib, но относительно #opt_prefix, а не #prefix.

Возвращает:

  • (Pathname)


1527
# File 'formula.rb', line 1527

def opt_lib = opt_prefix/"lib"

#opt_libexec ⇒ Pathname

То же, что и #libexec, но относительно #opt_prefix, а не #prefix.

Возвращает:

  • (Pathname)


1533
# File 'formula.rb', line 1533

def opt_libexec = opt_prefix/"libexec"

#opt_pkgshare ⇒ Pathname

То же, что и #pkgshare, но относительно #opt_prefix, а не #prefix.

Возвращает:

  • (Pathname)


1551
# File 'formula.rb', line 1551

def opt_pkgshare = opt_prefix/"share"/name

#opt_prefix ⇒ Pathname

Стабильный путь к этой формуле после установки. Он содержит имя формулы, но не номер версии. Если установлено несколько версий, здесь будет связана только активная версия.

Это предпочтительный способ обращения к формуле в plists или из другой формулы, поскольку путь остаётся неизменным при обновлении программного обеспечения.

Пример

args << "--with-readline=#{Formula["readline"].opt_prefix}" if build.with? "readline"

Возвращает:

  • (Pathname)


1509
# File 'formula.rb', line 1509

def opt_prefix = formula_opt_prefix(name)

#opt_sbin ⇒ Pathname

То же, что и #sbin, но относительно #opt_prefix, а не #prefix.

Возвращает:

  • (Pathname)


1539
# File 'formula.rb', line 1539

def opt_sbin = opt_prefix/"sbin"

#opt_share ⇒ Pathname

То же, что и #share, но относительно #opt_prefix, а не #prefix.

Возвращает:

  • (Pathname)


1545
# File 'formula.rb', line 1545

def opt_share = opt_prefix/"share"

#option_defined? ⇒ Boolean

Этот метод является частью закрытого API. Этот метод можно использовать только в репозитории Homebrew/brew. Сторонним разработчикам по возможности не следует использовать этот метод, поскольку он может быть удалён или изменён без предупреждения.

Определён ли именованный параметр для активного в данный момент объекта SoftwareSpec.

Параметры:

  • args (T.untyped)
  • block (T.untyped)

Возвращает:

  • (Boolean)


936
# File 'formula.rb', line 936

delegate option_defined?: :active_spec

#options(*args, &block) ⇒ T.untyped

Этот метод является частью закрытого API. Этот метод можно использовать только в репозитории Homebrew/brew. Сторонним разработчикам по возможности не следует использовать этот метод, поскольку он может быть удалён или изменён без предупреждения.

Параметры:

  • args (T.untyped)
  • block (T.untyped)

Возвращает:

  • (T.untyped)


136
# File 'sorbet/rbi/dsl/formula.rbi', line 136

def options(*args, &block); end

#optlinked? ⇒ Boolean

Этот метод является частью закрытого API. Этот метод можно использовать только в репозитории Homebrew/brew. Сторонним разработчикам по возможности не следует использовать этот метод, поскольку он может быть удалён или изменён без предупреждения.

Связана ли формула с opt?

Возвращает:

  • (Boolean)


1055
# File 'formula.rb', line 1055

def optlinked? = opt_prefix.symlink?

#outdated?(fetch_head: false) ⇒ Boolean

Этот метод является частью внутреннего API. Этот метод можно использовать только внутри репозиториев, принадлежащих Homebrew, за исключением cask-файлов и формул. Сторонним разработчикам по возможности не следует использовать этот метод, поскольку он может быть удалён или изменён без предупреждения.

Проверяет, устарела ли установленная формула.

Параметры:

  • fetch_head (Boolean) (по умолчанию: false)

Возвращает:

  • (Boolean)


2028
2029
2030
2031
2032
# File 'formula.rb', line 2028

def outdated?(fetch_head: false)
  !outdated_kegs(fetch_head:).empty?
rescue Migrator::MigrationNeededError
  true
end

#outdated_kegs(fetch_head: false) ⇒ Array<Keg>

Этот метод является частью закрытого API. Этот метод можно использовать только в репозитории Homebrew/brew. Сторонним разработчикам по возможности не следует использовать этот метод, поскольку он может быть удалён или изменён без предупреждения.

Параметры:

  • fetch_head (Boolean) (по умолчанию: false)

Возвращает:

  • (Array<Keg>)

Вызывает исключение:

  • (Migrator::MigrationNeededError)


1937
1938
1939
1940
1941
1942
1943
1944
1945
1946
1947
1948
1949
1950
1951
1952
1953
1954
1955
1956
1957
1958
1959
1960
1961
1962
1963
1964
1965
1966
1967
1968
1969
1970
1971
1972
1973
1974
# File 'formula.rb', line 1937

def outdated_kegs(fetch_head: false)
  raise Migrator::MigrationNeededError.new(oldnames_to_migrate.fetch(0), 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 = latest_formula

    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

Этот метод возвращает неопределённое значение.

Применяет все исправления из #patchlist к дереву исходного кода.



1839
1840
1841
1842
1843
1844
# File 'formula.rb', line 1839

def patch
  return if patchlist.empty?

  ohai "Patching"
  patchlist.each(&:apply)
end

#patchlist(*args, &block) ⇒ T.untyped

Этот метод является частью закрытого API. Этот метод можно использовать только в репозитории Homebrew/brew. Сторонним разработчикам по возможности не следует использовать этот метод, поскольку он может быть удалён или изменён без предупреждения.

Параметры:

  • args (T.untyped)
  • block (T.untyped)

Возвращает:

  • (T.untyped)


139
# File 'sorbet/rbi/dsl/formula.rbi', line 139

def patchlist(*args, &block); end

#pin(*args, &block) ⇒ T.untyped

Этот метод является частью закрытого API. Этот метод можно использовать только в репозитории Homebrew/brew. По возможности сторонним разработчикам не следует использовать этот метод, поскольку он может быть удалён или изменён без предупреждения.

Параметры:

  • args (T.untyped)
  • block (T.untyped)

Возвращает:

  • (T.untyped)


142
# File 'sorbet/rbi/dsl/formula.rbi', line 142

def pin(*args, &block); end

#pinnable?(*args, &block) ⇒ Boolean

Этот метод является частью закрытого API. Этот метод можно использовать только в репозитории Homebrew/brew. По возможности сторонним разработчикам не следует использовать этот метод, поскольку он может быть удалён или изменён без предупреждения.

Параметры:

  • args (T.untyped)
  • block (T.untyped)

Возвращает:

  • (Boolean)


145
# File 'sorbet/rbi/dsl/formula.rbi', line 145

def pinnable?(*args, &block); end

#pinned_version(*args, &block) ⇒ T.untyped

Этот метод является частью закрытого API. Этот метод можно использовать только в репозитории Homebrew/brew. По возможности сторонним разработчикам не следует использовать этот метод, поскольку он может быть удалён или изменён без предупреждения.

Параметры:

  • args (T.untyped)
  • block (T.untyped)

Возвращает:

  • (T.untyped)


151
# File 'sorbet/rbi/dsl/formula.rbi', line 151

def pinned_version(*args, &block); end

#pkg_version ⇒ PkgVersion

Этот метод является частью закрытого API. Этот метод можно использовать только в репозитории Homebrew/brew. По возможности сторонним разработчикам не следует использовать этот метод, поскольку он может быть удалён или изменён без предупреждения.

PkgVersion этой формулы с информацией о version и #revision.

Возвращает:

  • (PkgVersion)


670
# File 'formula.rb', line 670

def pkg_version = PkgVersion.new(version, revision)

#pkgetc ⇒ Pathname

Подкаталог etc с добавленным к имени формулы суффиксом, например $HOMEBREW_PREFIX/etc/openssl@1.1. Всё, что использует pkgetc.install, не будет перезаписывать другие файлы, например при обновлении, а создаст новый файл с именем *.default.

Возвращает:

  • (Pathname)


1367
# File 'formula.rb', line 1367

def pkgetc = (HOMEBREW_PREFIX/"etc"/name).extend(InstallRenamed)

#pkgshare ⇒ Pathname

Каталог, в который следует установить общие файлы формулы; к его имени добавляется имя формулы, чтобы избежать конфликтов при создании ссылок. После установки он связывается символической ссылкой с HOMEBREW_PREFIX; для формул, не являющихся keg-only, это происходит с помощью brew link.

Пример

Нет доступного make install?

pkgshare.install "examples"

Возвращает:

  • (Pathname)


1315
# File 'formula.rb', line 1315

def pkgshare = prefix/"share"/name

#plist_name ⇒ String

Этот метод является частью закрытого API. Этот метод можно использовать только в репозитории Homebrew/brew. По возможности сторонним разработчикам не следует использовать этот метод, поскольку он может быть удалён или изменён без предупреждения.

Сгенерированное имя службы launchd plist.

Возвращает:

  • (String)


1468
# File 'formula.rb', line 1468

def plist_name = service.plist_name

#possible_names ⇒ Array<String>

Этот метод является частью закрытого API. Этот метод можно использовать только в репозитории Homebrew/brew. По возможности сторонним разработчикам не следует использовать этот метод, поскольку он может быть удалён или изменён без предупреждения.

Возвращает:

  • (Array<String>)


2059
2060
2061
# File 'formula.rb', line 2059

def possible_names
  [name, *oldnames, *aliases].compact
end

#post_install ⇒ void

Этот метод является частью закрытого API. Этот метод можно использовать только в репозитории Homebrew/brew. По возможности сторонним разработчикам не следует использовать этот метод, поскольку он может быть удалён или изменён без предупреждения.

Этот метод возвращает неопределённое значение.

Можно переопределить, чтобы выполнять команды как при установке из исходного кода, так и при установке бинарного пакета.



1578
# File 'formula.rb', line 1578

def post_install; end

#post_install_defined? ⇒ Boolean

Этот метод является частью закрытого API. Этот метод можно использовать только в репозитории Homebrew/brew. По возможности сторонним разработчикам не следует использовать этот метод, поскольку он может быть удалён или изменён без предупреждения.

Возвращает:

  • (Boolean)


1581
1582
1583
# File 'formula.rb', line 1581

def post_install_defined?
  method(:post_install).owner != Formula
end

#post_install_steps ⇒ T.untyped

Этот метод является частью закрытого API. Этот метод можно использовать только в репозитории Homebrew/brew. По возможности сторонним разработчикам не следует использовать этот метод, поскольку он может быть удалён или изменён без предупреждения.

Шаги после установки.

Параметры:

  • args (T.untyped)
  • block (T.untyped)

Возвращает:

  • (T.untyped)

См. также:

  • post_install_steps


647
# File 'formula.rb', line 647

delegate post_install_steps: :"self.class"

#post_install_steps_conflict? ⇒ Boolean

Этот метод является частью закрытого API. Этот метод можно использовать только в репозитории Homebrew/brew. По возможности сторонним разработчикам не следует использовать этот метод, поскольку он может быть удалён или изменён без предупреждения.

Возвращает:

  • (Boolean)


1589
1590
1591
# File 'formula.rb', line 1589

def post_install_steps_conflict?
  post_install_steps_defined? && post_install_defined?
end

#post_install_steps_defined? ⇒ Boolean

Этот метод является частью закрытого API. Этот метод можно использовать только в репозитории Homebrew/brew. По возможности сторонним разработчикам не следует использовать этот метод, поскольку он может быть удалён или изменён без предупреждения.

Возвращает:

  • (Boolean)


1586
# File 'formula.rb', line 1586

def post_install_steps_defined? = self.class.post_install_steps_defined?

#pour_bottle? ⇒ Boolean

Этот метод является частью закрытого API. Этот метод можно использовать только в репозитории Homebrew/brew. По возможности сторонним разработчикам не следует использовать этот метод, поскольку он может быть удалён или изменён без предупреждения.

Указывает, что для этой формулы поддерживаются бинарные пакеты (это не обязательно означает, что пакет следует использовать при текущей установке). Метод можно переопределить, чтобы выборочно отключить бинарные пакеты для формул. По умолчанию возвращает true, поэтому переопределённой версии не нужно проверять, поддерживаются ли бинарные пакеты. Если задан метод satisfy, он заменяет этот метод на pour_bottle?.

Возвращает:

  • (Boolean)


1572
# File 'formula.rb', line 1572

def pour_bottle? = true

#pour_bottle_check_unsatisfied_reason(*args, &block) ⇒ T.untyped

Этот метод является частью закрытого API. Этот метод можно использовать только в репозитории Homebrew/brew. По возможности сторонним разработчикам не следует использовать этот метод, поскольку он может быть удалён или изменён без предупреждения.

Параметры:

  • args (T.untyped)
  • block (T.untyped)

Возвращает:

  • (T.untyped)


157
# File 'sorbet/rbi/dsl/formula.rbi', line 157

def pour_bottle_check_unsatisfied_reason(*args, &block); end

#prefix(version = pkg_version) ⇒ Pathname

Каталог в Cellar, в который устанавливается формула. Если каталог существует и метод #prefix вызван не из методов #install или #post_install той же формулы, этот каталог указывает на #opt_prefix. В противном случае возвращается полный путь к keg формулы (версионированный путь в Cellar).

Параметры:

  • version (String, PkgVersion) (по умолчанию: pkg_version)

Возвращает:

  • (Pathname)


1036
1037
1038
1039
1040
1041
1042
1043
1044
1045
# File 'formula.rb', line 1036

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

#preserve_rpath? ⇒ Boolean

Этот метод является частью закрытого API. Этот метод можно использовать только в репозитории Homebrew/brew. По возможности сторонним разработчикам не следует использовать этот метод, поскольку он может быть удалён или изменён без предупреждения.

Возвращает:

  • (Boolean)


407
# File 'formula.rb', line 407

def preserve_rpath? = self.class.preserve_rpath?

#print_tap_action(options = {}) ⇒ void

Этот метод является частью закрытого API. Этот метод можно использовать только в репозитории Homebrew/brew. По возможности сторонним разработчикам не следует использовать этот метод, поскольку он может быть удалён или изменён без предупреждения.

Этот метод возвращает неопределённое значение.

Параметры:

  • options (Hash{Symbol => String}) (по умолчанию: {})


2676
2677
2678
2679
2680
2681
# File 'formula.rb', line 2676

def print_tap_action(options = {})
  return unless tap?

  verb = options[:verb] || "Installing"
  ohai "#{verb}#{name} from #{tap}"
end

#pwsh_completion ⇒ Pathname

Каталог, в который следует устанавливать файлы автодополнения PowerShell для формулы. После установки он связывается символической ссылкой с HOMEBREW_PREFIX; для формул, не являющихся keg-only, это происходит с помощью brew link.

Возвращает:

  • (Pathname)


1429
# File 'formula.rb', line 1429

def pwsh_completion = share/"pwsh/completions"

#rack ⇒ Pathname

Этот метод является частью закрытого API. Этот метод можно использовать только в репозитории Homebrew/brew. По возможности сторонним разработчикам не следует использовать этот метод, поскольку он может быть удалён или изменён без предупреждения.

Родительский каталог prefix; именованный каталог в Cellar, содержащий все установленные версии этого программного обеспечения.

Возвращает:

  • (Pathname)


1068
# File 'formula.rb', line 1068

def rack = HOMEBREW_CELLAR/name

#recursive_dependencies(&block) ⇒ Array<Dependency>

Этот метод является частью внутреннего API. Этот метод можно использовать только внутри репозиториев, принадлежащих Homebrew, за исключением cask- и formula-определений. По возможности сторонним разработчикам не следует использовать этот метод, поскольку он может быть удалён или изменён без предупреждения.

Возвращает список объектов Dependency в порядке, подходящем для установки. Это означает, что если a зависит от b, то в этом списке b будет расположен перед a.

Параметры:

  • block (T.proc.params( arg0: T.any(Formula, CaskDependent), arg1: Dependency, ).returns(T.nilable(Symbol)), nil)

Возвращает:

  • (Array<Dependency>)


2714
2715
2716
2717
2718
2719
2720
2721
2722
2723
# File 'formula.rb', line 2714

def recursive_dependencies(&block)
  cache_key = "Formula#recursive_dependencies"
  if block
    cache_key += "-#{full_name}"
    cache_timestamp = Time.now
  end
  Dependency.expand(self, cache_key:, cache_timestamp:, &block)
ensure
  Dependency.delete_timestamped_cache_entry(cache_key, cache_timestamp) if block
end

#recursive_requirements(&block) ⇒ Requirements

Этот метод является частью внутреннего API. Этот метод можно использовать только внутри репозиториев, принадлежащих Homebrew, за исключением cask- и formula-определений. По возможности сторонним разработчикам не следует использовать этот метод, поскольку он может быть удалён или изменён без предупреждения.

Полный набор Requirements для дерева зависимостей этой формулы.

Параметры:

  • block (T.proc.params( arg0: T.any(Formula, CaskDependent, SoftwareSpec), arg1: Requirement, ).returns(T.nilable(Symbol)), nil)

Возвращает:

  • (Requirements)


2739
2740
2741
2742
# File 'formula.rb', line 2739

def recursive_requirements(&block)
  cache_key = "Formula#recursive_requirements" unless block
  Requirement.expand(self, cache_key:, &block)
end

#reloadable_ref ⇒ String, Pathname

Этот метод является частью закрытого API. Этот метод можно использовать только в репозитории Homebrew/brew. По возможности сторонним разработчикам не следует использовать этот метод, поскольку он может быть удалён или изменён без предупреждения.

Возвращает:

  • (String, Pathname)


508
# File 'formula.rb', line 508

def reloadable_ref = loaded_from_api? ? full_name : path

#requirements(*args, &block) ⇒ T.untyped

Этот метод является частью закрытого API. Этот метод можно использовать только в репозитории Homebrew/brew. По возможности сторонним разработчикам не следует использовать этот метод, поскольку он может быть удалён или изменён без предупреждения.

Параметры:

  • args (T.untyped)
  • block (T.untyped)

Возвращает:

  • (T.untyped)


160
# File 'sorbet/rbi/dsl/formula.rbi', line 160

def requirements(*args, &block); end

#resource(name = T.unsafe(nil), klass = T.unsafe(nil), &block) ⇒ Resource?

ЗАДАЧА:

Этот метод не должен принимать блок. Все ресурсы следует определять на верхнем уровне с помощью resource (см. https://github.com/Homebrew/brew/issues/17203#issuecomment-2093654431).

Именованный Resource для текущей активной SoftwareSpec. Дополнительные загрузки можно определять как #resource. Метод Resource#stage создаёт временный каталог и передаёт управление блоку.

Пример

resource("additional_files").stage { bin.install "my/extra/tool" }

Параметры:

  • name (String) (по умолчанию: T.unsafe(nil))
  • klass (T.class_of(Resource)) (по умолчанию: T.unsafe(nil))
  • block (T.proc.bind(Resource).void, nil)

Возвращает:

  • (Resource, nil)


865
866
867
868
869
870
871
# File 'formula.rb', line 865

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

Этот метод является частью закрытого API. Этот метод можно использовать только в репозитории Homebrew/brew. По возможности сторонним разработчикам следует избегать использования этого метода, поскольку он может быть удалён или изменён без предупреждения.

Resourceы текущего активного SoftwareSpec.

Параметры:

  • args (T.untyped)
  • block (T.untyped)

Возвращает:

  • (T.untyped)


903
# File 'formula.rb', line 903

def_delegator :"active_spec.resources", :values, :resources

#rpath(source: bin, target: lib) ⇒ String

RPATH исполняемого файла или библиотеки в соответствии с соглашениями платформы.

При необходимости укажите source или target в зависимости от расположения файла, содержащего команду RPATH, и расположения её целевого объекта.

Пример

rpath #=> "@loader_path/../lib"
rpath(target: frameworks) #=> "@loader_path/../Frameworks"
rpath(source: libexec/"bin") #=> "@loader_path/../../lib"

Параметры:

  • source (Pathname) (по умолчанию: bin)
  • target (Pathname) (по умолчанию: lib)

Возвращает:

  • (String)


2275
2276
2277
2278
2279
2280
2281
# File 'formula.rb', line 2275

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?

Этот метод является частью закрытого API. Этот метод можно использовать только в репозитории Homebrew/brew. По возможности сторонним разработчикам следует избегать использования этого метода, поскольку он может быть удалён или изменён без предупреждения.

Возвращает:

  • (Checksum, nil)


2884
2885
2886
# File 'formula.rb', line 2884

def ruby_source_checksum
  Checksum.new(Digest::SHA256.file(path).hexdigest) if path.exist?
end

#ruby_source_path ⇒ String?

Этот метод является частью закрытого API. Этот метод можно использовать только в репозитории Homebrew/brew. По возможности сторонним разработчикам следует избегать использования этого метода, поскольку он может быть удалён или изменён без предупреждения.

Возвращает:

  • (String, nil)


2879
2880
2881
# File 'formula.rb', line 2879

def ruby_source_path
  path.relative_path_from(T.must(tap).path).to_s if tap && path.exist?
end

#run_post_install ⇒ void

Этот метод является частью закрытого API. Этот метод можно использовать только в репозитории Homebrew/brew. По возможности сторонним разработчикам следует избегать использования этого метода, поскольку он может быть удалён или изменён без предупреждения.

Этот метод возвращает неопределённое значение.



1627
1628
1629
1630
1631
1632
1633
1634
1635
1636
1637
1638
1639
1640
1641
1642
1643
1644
1645
1646
1647
1648
1649
1650
1651
1652
1653
1654
1655
1656
1657
1658
1659
1660
1661
1662
1663
1664
# File 'formula.rb', line 1627

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,
      HOMEBREW_PATH: nil,
      PATH:          PATH.new(ORIGINAL_PATHS),
    }

    Dir.mktmpdir("#{name}-postinstall-") do |home|
      postinstall_home = Pathname(home)
      new_env[:HOME] = postinstall_home.to_s
      new_env.merge!(common_sandbox_env(postinstall_home))
      # Keep postinstall Java temp files in Homebrew temp while the common
      # sandbox environment points Java's user home at the cache.
      new_env[:_JAVA_OPTIONS] += " -Djava.io.tmpdir=#{HOMEBREW_TEMP}"
      setup_home postinstall_home

      with_env(new_env) do
        ENV.clear_sensitive_environment!
        ENV.activate_extensions!

        with_logging("post_install") do
          post_install
        end
      end
    end
  ensure
    self.build = build
    @prefix_returns_versioned_prefix = T.let(false, T.nilable(T::Boolean))
  end
end

#run_post_install_steps ⇒ void

Этот метод является частью закрытого API. Этот метод можно использовать только в репозитории Homebrew/brew. По возможности сторонним разработчикам следует избегать использования этого метода, поскольку он может быть удалён или изменён без предупреждения.

Этот метод возвращает неопределённое значение.



1612
1613
1614
1615
1616
1617
1618
1619
1620
1621
1622
1623
1624
# File 'formula.rb', line 1612

def run_post_install_steps
  return if post_install_steps.empty?

  @prefix_returns_versioned_prefix = T.let(true, T.nilable(T::Boolean))

  begin
    with_logging("post_install_steps") do
      Homebrew::InstallSteps::Runner.new(context: self).run(post_install_steps)
    end
  ensure
    @prefix_returns_versioned_prefix = T.let(false, T.nilable(T::Boolean))
  end
end

#run_test(keep_tmp: false) ⇒ BasicObject

Этот метод является частью закрытого API. Этот метод можно использовать только в репозитории Homebrew/brew. По возможности сторонним разработчикам следует избегать использования этого метода, поскольку он может быть удалён или изменён без предупреждения.

Параметры:

  • keep_tmp (Boolean) (по умолчанию: false)

Возвращает:

  • (BasicObject)


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
3260
3261
3262
3263
3264
3265
3266
3267
3268
3269
3270
3271
3272
3273
# File 'formula.rb', line 3232

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,
  }

  ENV.clear_sensitive_environment!
  Utils::Git.set_name_email!

  mktemp("#{name}-test") do |staging|
    staging.retain! if keep_tmp
    testpath = staging.tmpdir
    raise "Test path is unexpectedly unset." if testpath.nil?

    @testpath = T.let(testpath, T.nilable(Pathname))
    test_env[:HOME] = testpath
    test_env.merge!(common_sandbox_env(testpath))
    test_env[:_JAVA_OPTIONS] += " -Djava.io.tmpdir=#{HOMEBREW_TEMP}"
    setup_home 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>

Этот метод является частью внутреннего API. Этот метод можно использовать только внутри репозиториев, принадлежащих Homebrew, за исключением casks и formulae. По возможности сторонним разработчикам следует избегать использования этого метода, поскольку он может быть удалён или изменён без предупреждения.

Возвращает список объектов Dependency, необходимых во время выполнения.

Параметры:

  • read_from_tab (Boolean) (по умолчанию: true)
  • undeclared (Boolean) (по умолчанию: true)

Возвращает:

  • (Array<Dependency>)


2777
2778
2779
2780
2781
2782
2783
2784
2785
2786
2787
2788
2789
2790
2791
2792
2793
2794
2795
2796
2797
2798
2799
2800
# File 'formula.rb', line 2777

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>

Этот метод является частью закрытого API. Этот метод можно использовать только в репозитории Homebrew/brew. По возможности сторонним разработчикам следует избегать использования этого метода, поскольку он может быть удалён или изменён без предупреждения.

Возвращает список объектов Formula, необходимых во время выполнения.

Параметры:

  • read_from_tab (Boolean) (по умолчанию: true)
  • undeclared (Boolean) (по умолчанию: true)

Возвращает:

  • (Array<Formula>)


2804
2805
2806
2807
2808
2809
2810
2811
2812
2813
2814
2815
2816
# File 'formula.rb', line 2804

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>

Этот метод является частью закрытого API. Этот метод можно использовать только в репозитории Homebrew/brew. По возможности сторонним разработчикам следует избегать использования этого метода, поскольку он может быть удалён или изменён без предупреждения.

Возвращает:

  • (Array<Formula>)


2835
2836
2837
2838
2839
2840
2841
2842
2843
2844
2845
2846
2847
2848
2849
2850
# File 'formula.rb', line 2835

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

Каталог, в который следует устанавливать sbin двоичные файлы формулы. После установки он связывается символической ссылкой с HOMEBREW_PREFIX либо с помощью brew link для формул, не являющихся keg-only. Обычно мы стараемся перенести их в #bin.

Возвращает:

  • (Pathname)


1264
# File 'formula.rb', line 1264

def sbin = prefix/"sbin"

#selective_patch(is_data: false) ⇒ void

Этот метод является частью закрытого API. Этот метод можно использовать только в репозитории Homebrew/brew. По возможности сторонним разработчикам следует избегать использования этого метода, поскольку он может быть удалён или изменён без предупреждения.

Этот метод возвращает неопределённое значение.

Параметры:

  • is_data (Boolean) (по умолчанию: false)


1847
1848
1849
1850
1851
1852
1853
1854
1855
1856
1857
1858
# File 'formula.rb', line 1847

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_patches ⇒ Array<Hash{String => T.untyped}>

Этот метод является частью закрытого API. Этот метод можно использовать только в репозитории Homebrew/brew. По возможности сторонним разработчикам следует избегать использования этого метода, поскольку он может быть удалён или изменён без предупреждения.

Возвращает:

  • (Array<Hash{String => T.untyped}>)


3102
3103
3104
3105
3106
3107
3108
3109
3110
3111
3112
3113
3114
3115
3116
3117
3118
3119
3120
3121
3122
3123
3124
# File 'formula.rb', line 3102

def serialized_patches
  patchlist.map do |p|
    h = { "strip" => p.strip.to_s }
    if p.external?
      external = T.cast(p, ExternalPatch)
      h["url"] = external.url
      h["sha256"] = external.resource.checksum&.hexdigest
      h["apply"] = external.resource.patch_files.map(&:to_s) if external.resource.patch_files.any?
      h["directory"] = external.resource.directory.to_s if external.resource.directory.present?
      h["type"] = external.type.to_s.tr("_", "-") if external.type
      resolves = external.resolves
      h["resolves"] = resolves.map { |id| { "type" => Patch.resolves_type(id), "id" => id } } if resolves.any?
    elsif p.is_a?(LocalPatch)
      h["file"] = p.file.to_s
      h["type"] = p.type.to_s.tr("_", "-") if p.type
      resolves = p.resolves
      h["resolves"] = resolves.map { |id| { "type" => Patch.resolves_type(id), "id" => id } } if resolves.any?
    else
      h["data"] = true
    end
    h
  end
end

#serialized_requirements ⇒ Array<Hash{String => T.untyped}>

Этот метод является частью закрытого API. Этот метод можно использовать только в репозитории Homebrew/brew. По возможности сторонним разработчикам следует избегать использования этого метода, поскольку он может быть удалён или изменён без предупреждения.

Возвращает:

  • (Array<Hash{String => T.untyped}>)


3127
3128
3129
3130
3131
3132
3133
3134
3135
3136
3137
3138
3139
3140
3141
3142
3143
3144
3145
3146
3147
3148
3149
3150
# File 'formula.rb', line 3127

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.tags,
      "specs"    => data[:specs],
    }
  end
end

#service ⇒ Homebrew::Service

Спецификация службы для программного обеспечения.

Возвращает:

  • (Homebrew::Service)


1490
1491
1492
# File 'formula.rb', line 1490

def service
  @service ||= T.let(Homebrew::Service.new(self, &self.class.service), T.nilable(Homebrew::Service))
end

#service? ⇒ Boolean

Этот метод является частью закрытого API. Этот метод можно использовать только в репозитории Homebrew/brew. По возможности сторонним разработчикам следует избегать использования этого метода, поскольку он может быть удалён или изменён без предупреждения.

Определена ли для программного обеспечения спецификация службы?

Параметры:

  • args (T.untyped)
  • block (T.untyped)

Возвращает:

  • (Boolean)

См. также:

  • service?


612
# File 'formula.rb', line 612

delegate service?: :"self.class"

#service_name ⇒ String

Этот метод является частью закрытого API. Этот метод можно использовать только в репозитории Homebrew/brew. По возможности сторонним разработчикам следует избегать использования этого метода, поскольку он может быть удалён или изменён без предупреждения.

Сгенерированное имя службы.

Возвращает:

  • (String)


1472
# File 'formula.rb', line 1472

def service_name = service.service_name

#share ⇒ Pathname

Каталог, в который следует устанавливать общие файлы формулы. После установки он связывается символической ссылкой с HOMEBREW_PREFIX либо с помощью brew link для формул, не являющихся keg-only.

Примеры

Нужен пользовательский каталог?

(share/"concept").mkpath

Установка чего-либо в другой пользовательский каталог?

(share/"concept2").install "ducks.txt"

Установите ./example_code/simple/ones в share/demos:

(share/"demos").install "example_code/simple/ones"

Установите ./example_code/simple/ones в share/demos/examples:

(share/"demos").install "example_code/simple/ones" => "examples"

Возвращает:

  • (Pathname)


1298
# File 'formula.rb', line 1298

def share = prefix/"share"

#shared_library(name, version = nil) ⇒ String

Имена разделяемых библиотек в соответствии с соглашениями платформы.

При необходимости укажите version, чтобы ограничить выбор разделяемой библиотеки определённой версией. Специальная строка "*" соответствует любой версии.

Если name указано как "*", соответствуют все разделяемые библиотеки любых версий.

Пример

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

Параметры:

  • name (String)
  • version (String, Integer, nil) (по умолчанию: nil)

Возвращает:

  • (String)


2249
2250
2251
2252
2253
2254
2255
2256
2257
2258
# File 'formula.rb', line 2249

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

Этот метод является частью закрытого API. Этот метод можно использовать только в репозитории Homebrew/brew. По возможности сторонним разработчикам следует избегать использования этого метода, поскольку он может быть удалён или изменён без предупреждения.

Параметры:

  • path (Pathname)

Возвращает:

  • (Boolean)

См. также:

  • skip_clean


1710
1711
1712
1713
1714
1715
# File 'formula.rb', line 1710

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

#specified_name ⇒ String

Этот метод является частью закрытого API. Этот метод можно использовать только в репозитории Homebrew/brew. По возможности сторонним разработчикам следует избегать использования этого метода, поскольку он может быть удалён или изменён без предупреждения.

Имя, указанное для поиска этой формулы.

Возвращает:

  • (String)


512
513
514
# File 'formula.rb', line 512

def specified_name
  alias_name || name
end

#specified_path ⇒ Pathname?

Этот метод является частью закрытого API. Этот метод можно использовать только в репозитории Homebrew/brew. По возможности сторонним разработчикам следует избегать использования этого метода, поскольку он может быть удалён или изменён без предупреждения.

Путь, указанный для поиска этой формулы.

Возвращает:

  • (Pathname, nil)


495
496
497
498
499
500
501
502
503
504
505
# File 'formula.rb', line 495

def specified_path
  return Homebrew::API::Internal.cached_packages_json_file_path if loaded_from_internal_api?
  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

Этот метод является частью закрытого API. Этот метод можно использовать только в репозитории Homebrew/brew. По возможности сторонним разработчикам следует избегать использования этого метода, поскольку он может быть удалён или изменён без предупреждения.

Является ли текущая активная SoftwareSpec сборкой #stable?

Возвращает:

  • (Boolean)


530
531
532
# File 'formula.rb', line 530

def stable?
  active_spec == stable
end

#std_cabal_v2_args ⇒ Array<String>

Стандартные параметры для сборок Cabal-v2.

Возвращает:

  • (Array<String>)


2078
2079
2080
2081
2082
2083
2084
2085
2086
# File 'formula.rb', line 2078

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: ".", features: nil) ⇒ Array<String>

Стандартные параметры для сборок Cargo.

Параметры:

  • root (String, Pathname) (по умолчанию: prefix)
  • path (String, Pathname) (по умолчанию: ".")
  • features (String, Array<String>, nil) (по умолчанию: nil)

Возвращает:

  • (Array<String>)


2098
2099
2100
2101
2102
# File 'formula.rb', line 2098

def std_cargo_args(root: prefix, path: ".", features: nil)
  args = ["--jobs", ENV.make_jobs.to_s, "--locked", "--root=#{root}", "--path=#{path}"]
  args += ["--features=#{Array(features).join(",")}"] if features
  args
end

#std_cmake_args(install_prefix: prefix, install_libdir: "lib", find_framework: "LAST") ⇒ Array<String>

Стандартные параметры для сборок CMake.

Установка CMAKE_FIND_FRAMEWORK в значение "LAST" сообщает CMake, что нужно искать наши библиотеки до попытки использовать Frameworks, многие из которых устанавливаются сторонними пакетами.

Параметры:

  • install_prefix (String, Pathname) (по умолчанию: prefix)
  • install_libdir (String, Pathname) (по умолчанию: "lib")
  • find_framework (String) (по умолчанию: "LAST")

Возвращает:

  • (Array<String>)


2118
2119
2120
2121
2122
2123
2124
2125
2126
2127
2128
2129
# File 'formula.rb', line 2118

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>

Стандартные параметры для сборок configure.

Параметры:

  • prefix (String, Pathname) (по умолчанию: self.prefix)
  • libdir (String, Pathname) (по умолчанию: "lib")

Возвращает:

  • (Array<String>)


2140
2141
2142
2143
# File 'formula.rb', line 2140

def std_configure_args(prefix: self.prefix, libdir: "lib")
  libdir = Pathname(libdir).expand_path(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>

Стандартные параметры для сборок Go.

Параметры:

  • output (String, Pathname) (по умолчанию: bin/name)
  • ldflags (String, Array<String>, nil) (по умолчанию: nil)
  • gcflags (String, Array<String>, nil) (по умолчанию: nil)
  • tags (String, Array<String>, nil) (по умолчанию: nil)

Возвращает:

  • (Array<String>)


2156
2157
2158
2159
2160
2161
2162
# File 'formula.rb', line 2156

def std_go_args(output: bin/name, ldflags: nil, gcflags: nil, tags: nil)
  args = ["-trimpath", "-o=#{output}"]
  args += ["-tags=#{Array(tags).join("")}"] if tags
  args += ["-ldflags=#{Array(ldflags).join("")}"] if ldflags
  args += ["-gcflags=#{Array(gcflags).join("")}"] if gcflags
  args
end

#std_meson_args ⇒ Array<String>

Стандартные параметры для сборок Meson.

Возвращает:

  • (Array<String>)


2168
2169
2170
# File 'formula.rb', line 2168

def std_meson_args
  ["--prefix=#{prefix}", "--libdir=#{lib}", "--buildtype=release", "--wrap-mode=nofallback"]
end

#std_npm_args(prefix: libexec, ignore_scripts: true) ⇒ Array<String>

Стандартные параметры для сборок npm.

Параметры:

  • prefix (String, Pathname, false) (по умолчанию: libexec) —

    префикс установки (по умолчанию: libexec)

  • ignore_scripts (Boolean) (по умолчанию: true) —

    указывает, добавлять ли флаг --ignore-scripts (по умолчанию: true)

Возвращает:

  • (Array<String>)


2178
2179
2180
2181
2182
2183
2184
# File 'formula.rb', line 2178

def std_npm_args(prefix: libexec, ignore_scripts: true)
  require "language/node"

  return Language::Node.std_npm_install_args(Pathname(prefix), ignore_scripts:) if prefix

  Language::Node.local_npm_install_args(ignore_scripts:)
end

#std_pip_args(prefix: self.prefix, build_isolation: false) ⇒ Array<String>

Стандартные параметры для сборок pip.

Параметры:

  • prefix (false, String, Pathname) (по умолчанию: self.prefix)
  • build_isolation (Boolean) (по умолчанию: false)

Возвращает:

  • (Array<String>)


2193
2194
2195
2196
2197
2198
2199
2200
2201
# File 'formula.rb', line 2193

def std_pip_args(prefix: self.prefix, build_isolation: false)
  args = ["--verbose", "--no-deps", "--no-binary=:all:", "--ignore-installed", "--no-compile"]
  # Delay packages published in the last day so builds are less likely to
  # install a freshly compromised PyPI release.
  args << "--uploaded-prior-to=#{(Time.now.utc - Homebrew::RELEASE_COOLDOWN_SECONDS).iso8601(0)}"
  args << "--prefix=#{prefix}" if prefix
  args << "--no-build-isolation" unless build_isolation
  args
end

#std_zig_args(prefix: self.prefix, release_mode: :fast, cpu: nil) ⇒ Array<String>

Стандартные параметры для сборок Zig.

release_mode можно задать как :safe, :fast или :small; значение по умолчанию — :fast.

Параметры:

  • prefix (String, Pathname) (по умолчанию: self.prefix)
  • release_mode (Symbol) (по умолчанию: :fast)
  • cpu (Symbol, nil) (по умолчанию: nil)

Возвращает:

  • (Array<String>)

Вызывает исключение:

  • (ArgumentError)


2216
2217
2218
2219
2220
2221
2222
2223
2224
2225
2226
2227
2228
2229
# File 'formula.rb', line 2216

def std_zig_args(prefix: self.prefix, release_mode: :fast, cpu: nil)
  raise ArgumentError, "Invalid Zig release mode: #{release_mode}" if [:safe, :fast, :small].exclude?(release_mode)

  cpu ||= Hardware.zig_cpu(ENV.effective_arch)
  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",
    "-Dcpu=#{cpu}"
  ]
end

#supersedes_an_installed_formula? ⇒ Boolean

Этот метод является частью закрытого API. Этот метод можно использовать только в репозитории Homebrew/brew. Сторонним разработчикам по возможности не следует использовать этот метод, поскольку он может быть удалён или изменён без предупреждения.

Является ли эта формула целью псевдонима, используемого для установки старой формулы?

Возвращает:

  • (Boolean)


1998
# File 'formula.rb', line 1998

def supersedes_an_installed_formula? = old_installed_formulae.any?

#supports_linux? ⇒ Boolean

Этот метод является частью закрытого API. Этот метод можно использовать только в репозитории Homebrew/brew. Сторонним разработчикам по возможности не следует использовать этот метод, поскольку он может быть удалён или изменён без предупреждения.

Возвращает:

  • (Boolean)


2669
2670
2671
2672
2673
# File 'formula.rb', line 2669

def supports_linux?
  return true if active_spec.depends_on_linux_set_top_level?

  !active_spec.depends_on_macos_set_top_level?
end

#supports_macos? ⇒ Boolean

Этот метод является частью закрытого API. Этот метод можно использовать только в репозитории Homebrew/brew. Сторонним разработчикам по возможности не следует использовать этот метод, поскольку он может быть удалён или изменён без предупреждения.

Возвращает:

  • (Boolean)


2664
2665
2666
# File 'formula.rb', line 2664

def supports_macos?
  !active_spec.depends_on_linux_set_top_level?
end

#synced_with_other_formulae? ⇒ Boolean

Этот метод является частью закрытого API. Этот метод можно использовать только в репозитории Homebrew/brew. Сторонним разработчикам по возможности не следует использовать этот метод, поскольку он может быть удалён или изменён без предупреждения.

Синхронизирована ли версия этой Formula с версиями других формул.

Возвращает:

  • (Boolean)


840
841
842
843
844
# File 'formula.rb', line 840

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

Этот метод не возвращает определённого значения.

Для вызова системных команд используется метод system; мы рекомендуем передавать аргументы отдельно, как показано в строке ниже, иначе сначала придётся открыть подоболочку.

Примеры

system "./bootstrap.sh", "--arg1", "--prefix=#{prefix}"

Для CMake и других систем сборки у нас есть несколько необходимых параметров по умолчанию, например, в #std_cmake_args:

system "cmake", ".", *std_cmake_args

Если аргументы, передаваемые в configure (или make, или cmake), зависят от параметров, определённых выше, обычно сначала создаётся список, а затем для добавления каждого аргумента используется args << if <condition>:

args = ["--with-option1", "--with-option2"]
args << "--without-gcc" if ENV.compiler == :clang

В большинстве программ по-прежнему используются configure и make. Узнайте в ./configure --help, какие параметры доступны.

system "./configure", "--disable-debug", "--disable-dependency-tracking",
                      "--disable-silent-rules", "--prefix=#{prefix}",
                      *args # our custom arg list (needs `*` to unpack)

Если доступна команда «make install», используйте её!

system "make", "install"

Параметры:

  • cmd (String, Pathname)
  • args (String, Integer, Pathname, Symbol)


3461
3462
3463
3464
3465
3466
3467
3468
3469
3470
3471
3472
3473
3474
3475
3476
3477
3478
3479
3480
3481
3482
3483
3484
3485
3486
3487
3488
3489
3490
3491
3492
3493
3494
3495
3496
3497
3498
3499
3500
3501
3502
3503
3504
3505
3506
3507
3508
3509
3510
3511
3512
3513
3514
3515
3516
3517
3518
3519
3520
3521
3522
3523
3524
3525
3526
3527
3528
3529
3530
3531
3532
3533
3534
3535
3536
3537
3538
3539
3540
3541
3542
3543
3544
3545
3546
3547
3548
3549
3550
3551
3552
3553
3554
3555
3556
3557
3558
3559
3560
3561
3562
3563
3564
3565
3566
# File 'formula.rb', line 3461

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

Этот метод является частью закрытого API. Этот метод можно использовать только в репозитории Homebrew/brew. Сторонним разработчикам по возможности не следует использовать этот метод, поскольку он может быть удалён или изменён без предупреждения.

Путь к созданному файлу службы systemd service.

Возвращает:

  • (Pathname)


1480
# File 'formula.rb', line 1480

def systemd_service_path = (any_installed_prefix || opt_prefix)/"#{service_name}.service"

#systemd_timer_path ⇒ Pathname

Этот метод является частью закрытого API. Этот метод можно использовать только в репозитории Homebrew/brew. Сторонним разработчикам по возможности не следует использовать этот метод, поскольку он может быть удалён или изменён без предупреждения.

Путь к созданному файлу таймера systemd.

Возвращает:

  • (Pathname)


1484
# File 'formula.rb', line 1484

def systemd_timer_path = (any_installed_prefix || opt_prefix)/"#{service_name}.timer"

#tap! ⇒ Tap

Этот метод является частью закрытого API. Этот метод можно использовать только в репозитории Homebrew/brew. Сторонним разработчикам по возможности не следует использовать этот метод, поскольку он может быть удалён или изменён без предупреждения.

Возвращает:

  • (Tap)


480
481
482
# File 'formula.rb', line 480

def tap!
  tap || raise("Formula tap is nil")
end

#tap? ⇒ Boolean

Этот метод является частью закрытого API. Этот метод можно использовать только в репозитории Homebrew/brew. Сторонним разработчикам по возможности не следует использовать этот метод, поскольку он может быть удалён или изменён без предупреждения.

Истина, если эта формула предоставляется внешним Tap.

Возвращает:

  • (Boolean)


2650
2651
2652
2653
2654
# File 'formula.rb', line 2650

def tap?
  return false unless tap

  !T.must(tap).core_tap?
end

#tap_git_head ⇒ String?

Этот метод является частью закрытого API. Этот метод можно использовать только в репозитории Homebrew/brew. Сторонним разработчикам по возможности не следует использовать этот метод, поскольку он может быть удалён или изменён без предупреждения.

Возвращает:

  • (String, nil)


2684
2685
2686
2687
2688
# File 'formula.rb', line 2684

def tap_git_head
  tap&.git_head
rescue TapUnavailableError
  nil
end

#tap_path ⇒ Pathname

Этот метод является частью закрытого API. Этот метод можно использовать только в репозитории Homebrew/brew. Сторонним разработчикам по возможности не следует использовать этот метод, поскольку он может быть удалён или изменён без предупреждения.

Возвращает:

  • (Pathname)


485
486
487
488
489
490
491
# File 'formula.rb', line 485

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 ⇒ BasicObject

Этот метод переопределяется в подклассах Formula для предоставления инструкций по тестированию. Вызывается методом brew test.

Возвращает:

  • (BasicObject)


3288
# File 'formula.rb', line 3288

def test; end

#test_defined? ⇒ Boolean

Этот метод является частью закрытого API. Этот метод можно использовать только в репозитории Homebrew/brew. Сторонним разработчикам по возможности не следует использовать этот метод, поскольку он может быть удалён или изменён без предупреждения.

Возвращает:

  • (Boolean)


3276
3277
3278
# File 'formula.rb', line 3276

def test_defined?
  method(:test).owner != Formula
end

#test_fixtures(file) ⇒ Pathname

Возвращает путь к файлу с тестовыми данными для использования в тестах формулы.

Параметры:

  • file (Pathname, String)

Возвращает:

  • (Pathname)


3294
3295
3296
# File 'formula.rb', line 3294

def test_fixtures(file)
  HOMEBREW_LIBRARY_PATH/"test/support/fixtures"/file
end

#time ⇒ Time

Этот метод является частью закрытого API. Этот метод можно использовать только в репозитории Homebrew/brew. Сторонним разработчикам по возможности не следует использовать этот метод, поскольку он может быть удалён или изменён без предупреждения.

Создаёт новый объект Time для использования в формуле в качестве времени сборки.

Возвращает:

  • (Time)

См. также:

  • Time


2293
2294
2295
2296
2297
2298
2299
# File 'formula.rb', line 2293

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}

Этот метод является частью закрытого API. Этот метод можно использовать только в репозитории Homebrew/brew. Сторонним разработчикам по возможности не следует использовать этот метод, поскольку он может быть удалён или изменён без предупреждения.

Возвращает:

  • (Hash{String => T.untyped})


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
2930
2931
2932
2933
2934
2935
2936
2937
2938
2939
2940
2941
2942
2943
2944
2945
2946
2947
2948
2949
2950
2951
2952
2953
2954
2955
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
2994
2995
2996
2997
2998
# File 'formula.rb', line 2905

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,
    "patches"                         => serialized_patches,
    "revision"                        => revision,
    "version_scheme"                  => version_scheme,
    "compatibility_version"           => compatibility_version,
    "autobump"                        => autobump?,
    "no_autobump_message"             => 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,
    "deprecate_args"                  => deprecate_args,
    "disabled"                        => disabled?,
    "disable_date"                    => disable_date,
    "disable_reason"                  => disable_reason,
    "disable_replacement_formula"     => disable_replacement_formula,
    "disable_replacement_cask"        => disable_replacement_cask,
    "disable_args"                    => disable_args,
    "post_install_steps"              => post_install_steps,
    "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"] = 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.used_options.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_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}

Этот метод является частью закрытого API. Этот метод можно использовать только в репозитории Homebrew/brew. Сторонним разработчикам по возможности не следует использовать этот метод, поскольку он может быть удалён или изменён без предупреждения.

Возвращает:

  • (Hash{String => T.untyped})


3001
3002
3003
3004
3005
3006
3007
3008
3009
3010
3011
3012
3013
3014
3015
3016
3017
3018
3019
3020
3021
3022
3023
3024
3025
3026
3027
3028
3029
3030
3031
3032
3033
3034
3035
3036
3037
3038
3039
# File 'formula.rb', line 3001

def to_hash_with_variations
  if loaded_from_internal_api?
    raise UsageError, "Cannot call #to_hash_with_variations on formulae loaded from the internal API"
  end

  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>

Этот метод является частью закрытого API. Этот метод можно использовать только в репозитории Homebrew/brew. Сторонним разработчикам по возможности не следует использовать этот метод, поскольку он может быть удалён или изменён без предупреждения.

Возвращает:

  • (Array<FormulaLock>)


1915
1916
1917
1918
# File 'formula.rb', line 1915

def unlock
  @lock&.unlock
  @oldname_locks.each(&:unlock)
end

#unpin(*args, &block) ⇒ T.untyped

Этот метод является частью закрытого API. Этот метод можно использовать только в репозитории Homebrew/brew. Третьим сторонам следует по возможности избегать использования этого метода, так как он может быть удалён или изменён без предупреждения.

Параметры:

  • args (T.untyped)
  • block (T.untyped)

Возвращает:

  • (T.untyped)


169
# File 'sorbet/rbi/dsl/formula.rbi', line 169

def unpin(*args, &block); end

#unversioned_formula_name ⇒ String?

Этот метод является частью закрытого API. Этот метод можно использовать только в репозитории Homebrew/brew. Третьим сторонам следует по возможности избегать использования этого метода, так как он может быть удалён или изменён без предупреждения.

Возвращает:

  • (String, nil)


709
710
711
712
713
# File 'formula.rb', line 709

def unversioned_formula_name
  return unless versioned_formula?

  name.sub(/@[\d.]+(?=-full$|$)/, "")
end

#update_head_version ⇒ void

Этот метод является частью закрытого API. Этот метод можно использовать только в репозитории Homebrew/brew. Третьим сторонам следует по возможности избегать использования этого метода, так как он может быть удалён или изменён без предупреждения.

Этот метод возвращает неопределённое значение.



650
651
652
653
654
655
656
657
658
659
660
661
662
663
664
665
666
# File 'formula.rb', line 650

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}}

Этот метод является частью закрытого API. Этот метод можно использовать только в репозитории Homebrew/brew. Третьим сторонам следует по возможности избегать использования этого метода, так как он может быть удалён или изменён без предупреждения.

Возвращает:

  • (Hash{String => Hash{String => T.untyped}})


3076
3077
3078
3079
3080
3081
3082
3083
3084
3085
3086
3087
3088
3089
3090
3091
3092
3093
3094
3095
3096
3097
3098
3099
# File 'formula.rb', line 3076

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

Этот метод является частью закрытого API. Этот метод можно использовать только в репозитории Homebrew/brew. Третьим сторонам следует по возможности избегать использования этого метода, так как он может быть удалён или изменён без предупреждения.

Значение true, если эту формулу можно установить на данной платформе. Переопределён в extend/os.

Возвращает:

  • (Boolean)


2659
2660
2661
# File 'formula.rb', line 2659

def valid_platform?
  supports_macos? && supports_linux?
end

#var ⇒ Pathname

Каталог, в который следует устанавливать файлы переменных формулы. Этот каталог находится не внутри HOMEBREW_CELLAR, поэтому его содержимое сохраняется при обновлении.

Возвращает:

  • (Pathname)


1375
# File 'formula.rb', line 1375

def var = HOMEBREW_PREFIX/"var"

#version ⇒ T.untyped

Этот метод является частью закрытого API. Этот метод можно использовать только в репозитории Homebrew/brew. Третьим сторонам следует по возможности избегать использования этого метода, так как он может быть удалён или изменён без предупреждения.

Версия текущего активного объекта SoftwareSpec. Версия автоматически определяется по URL и/или тегу, поэтому её нужно объявлять только в том случае, если автоматическое определение работает некорректно.

Параметры:

  • args (T.untyped)
  • block (T.untyped)

Возвращает:

  • (T.untyped)

См. также:

  • version


619
# File 'formula.rb', line 619

delegate version: :active_spec

#versioned_formula? ⇒ Boolean

Этот метод является частью закрытого API. Этот метод можно использовать только в репозитории Homebrew/brew. Третьим сторонам следует по возможности избегать использования этого метода, так как он может быть удалён или изменён без предупреждения.

Является ли это @-формулой с версией.

Возвращает:

  • (Boolean)


674
# File 'formula.rb', line 674

def versioned_formula? = name.include?("@")

#versioned_formulae ⇒ Array<Formula>

Этот метод является частью закрытого API. Этот метод можно использовать только в репозитории Homebrew/brew. Третьим сторонам следует по возможности избегать использования этого метода, так как он может быть удалён или изменён без предупреждения.

Возвращает все объекты Formula с версией @ для любой Formula (включая формулы с версиями).

Возвращает:

  • (Array<Formula>)


700
701
702
703
704
705
706
# File 'formula.rb', line 700

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>

Этот метод является частью закрытого API. Этот метод можно использовать только в репозитории Homebrew/brew. Третьим сторонам следует по возможности избегать использования этого метода, так как он может быть удалён или изменён без предупреждения.

Возвращает имена всех остальных формул с версией @ для любой Formula (включая формулы с версиями).

Возвращает:

  • (Array<String>)


678
679
680
681
682
683
684
685
686
687
688
689
690
691
692
693
694
695
696
# File 'formula.rb', line 678

def versioned_formulae_names
  name_prefix = unversioned_formula_name || name

  versioned_names = if (formula_tap = tap)
    formula_tap.prefix_to_versioned_formulae_names.fetch(name_prefix, [])
  else
    versioned_formula_glob = if name_prefix.end_with?("-full")
      "#{name_prefix.delete_suffix("-full")}@*-full.rb"
    else
      "#{name_prefix}@*.rb"
    end

    formula_names_for_glob(versioned_formula_glob)
  end

  versioned_names.reject do |versioned_name|
    versioned_name == name
  end
end

#warn_on_post_install_steps_conflict ⇒ void

Этот метод является частью закрытого API. Этот метод можно использовать только в репозитории Homebrew/brew. Третьим сторонам следует по возможности избегать использования этого метода, так как он может быть удалён или изменён без предупреждения.

Этот метод возвращает неопределённое значение.



1594
1595
1596
# File 'formula.rb', line 1594

def warn_on_post_install_steps_conflict
  opoo "#{full_name}: `post_install` is ignored because `post_install_steps` are defined!"
end

#with_logging(log_type, &_block) ⇒ T.type_parameter(:U)

Этот метод является частью закрытого API. Этот метод можно использовать только в репозитории Homebrew/brew. Третьим сторонам следует по возможности избегать использования этого метода, так как он может быть удалён или изменён без предупреждения.

Выполняет блок, применяя указанный тип журнала на время его выполнения.

Параметры:

  • log_type (String)
  • _block (T.proc.returns(T.type_parameter(:U)))

Возвращает:

  • (T.type_parameter(:U))


1458
1459
1460
1461
1462
1463
1464
# File 'formula.rb', line 1458

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

Этот метод возвращает неопределённое значение.

Запускает xcodebuild без переменных окружения компилятора Homebrew.

Параметры:

  • args (String, Integer, Pathname, Symbol)


3642
3643
3644
3645
3646
3647
3648
3649
3650
# File 'formula.rb', line 3642

def xcodebuild(*args)
  removed = ENV.remove_cc_etc

  begin
    self.system("xcodebuild", *args)
  ensure
    ENV.update(removed)
  end
end

#zsh_completion ⇒ Pathname

Каталог, в который следует устанавливать файлы автодополнения zsh для формулы. После установки они связываются символической ссылкой с HOMEBREW_PREFIX или с brew link для формул, которые не являются keg-only.

Возвращает:

  • (Pathname)


1411
# File 'formula.rb', line 1411

def zsh_completion = share/"zsh/site-functions"

#zsh_function ⇒ Pathname

Каталог, в который следует устанавливать файлы функций zsh для формулы. После установки они связываются символической ссылкой с HOMEBREW_PREFIX или с brew link для формул, которые не являются keg-only.

Возвращает:

  • (Pathname)


1384
# File 'formula.rb', line 1384

def zsh_function = share/"zsh/site-functions"

© 2009–present Homebrew contributors
Licensed under the BSD 2-Clause License.
https://docs.brew.sh/rubydoc/Formula

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API