Класс: 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
Прямые известные подклассы
Определено в пространстве имён
Классы: 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? только для чтения
- #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 закрытый
- #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
Методы, включенные из Cachable
Методы, включенные из 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
Подробное описание конструкторов
#initialize(name, path, spec, alias_path: nil, tap: nil, force_bottle: false) ⇒ void
Этот метод является частью закрытого API. Этот метод можно использовать только в репозитории Homebrew/brew. Третьим лицам по возможности следует избегать использования этого метода, поскольку он может быть удалён или изменён без предупреждения.
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.
3837 3838 3839 | # File 'formula.rb', line 3837 def api_source @api_source end |
.conflicts ⇒ Array<FormulaConflict>? (только для чтения)
Этот метод является частью закрытого API. Этот метод можно использовать только в репозитории Homebrew/brew. Сторонним разработчикам по возможности следует избегать использования этого метода, поскольку он может быть удалён или изменён без предупреждения.
4075 4076 4077 | # File 'formula.rb', line 4075 def conflicts @conflicts end |
.deprecate_args ⇒ Hash{Symbol => String, Symbol, nil}? (только для чтения)
Этот метод является частью закрытого API. Этот метод можно использовать только в репозитории Homebrew/brew. Сторонним разработчикам по возможности следует избегать использования этого метода, поскольку он может быть удалён или изменён без предупреждения.
Аргументы, переданные в deprecate!.
5020 5021 5022 | # File 'formula.rb', line 5020 def deprecate_args @deprecate_args end |
.deprecation_date ⇒ Date? (только для чтения)
Этот метод является частью закрытого API. Этот метод можно использовать только в репозитории Homebrew/brew. Сторонним разработчикам по возможности следует избегать использования этого метода, поскольку он может быть удалён или изменён без предупреждения.
Дата устаревания Formula.
4991 4992 4993 | # File 'formula.rb', line 4991 def deprecation_date @deprecation_date end |
.deprecation_reason ⇒ String, ... (только для чтения)
Этот метод является частью закрытого API. Этот метод можно использовать только в репозитории Homebrew/brew. Сторонним разработчикам по возможности следует избегать использования этого метода, поскольку он может быть удалён или изменён без предупреждения.
Причина устаревания Formula.
4998 4999 5000 | # File 'formula.rb', line 4998 def deprecation_reason @deprecation_reason end |
.deprecation_replacement_cask ⇒ String? (только для чтения)
Этот метод является частью закрытого API. Этот метод можно использовать только в репозитории Homebrew/brew. Сторонним разработчикам по возможности следует избегать использования этого метода, поскольку он может быть удалён или изменён без предупреждения.
Замещающий cask для устаревшей Formula.
5012 5013 5014 | # File 'formula.rb', line 5012 def deprecation_replacement_cask @deprecation_replacement_cask end |
.deprecation_replacement_formula ⇒ String? (только для чтения)
Этот метод является частью закрытого API. Этот метод можно использовать только в репозитории Homebrew/brew. Сторонним разработчикам по возможности следует избегать использования этого метода, поскольку он может быть удалён или изменён без предупреждения.
Замещающая формула для устаревшей Formula.
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!.
5134 5135 5136 | # File 'formula.rb', line 5134 def disable_args @disable_args end |
.disable_date ⇒ Date? (только для чтения)
Этот метод является частью закрытого API. Этот метод можно использовать только в репозитории Homebrew/brew. Сторонним разработчикам по возможности следует избегать использования этого метода, поскольку он может быть удалён или изменён без предупреждения.
Дата, когда эта Formula была или будет отключена. Возвращает nil, если дата не указана.
5105 5106 5107 | # File 'formula.rb', line 5105 def disable_date @disable_date end |
.disable_reason ⇒ String, ... (только для чтения)
Этот метод является частью закрытого API. Этот метод можно использовать только в репозитории Homebrew/brew. Сторонним разработчикам по возможности следует избегать использования этого метода, поскольку он может быть удалён или изменён без предупреждения.
Причина отключения этой Formula. Возвращает nil, если причина не указана или формула не отключена.
5112 5113 5114 | # File 'formula.rb', line 5112 def disable_reason @disable_reason end |
.disable_replacement_cask ⇒ String? (только для чтения)
Этот метод является частью закрытого API. Этот метод можно использовать только в репозитории Homebrew/brew. Сторонним разработчикам по возможности следует избегать использования этого метода, поскольку он может быть удалён или изменён без предупреждения.
Замещающий cask для отключённой Formula. Возвращает nil, если причина не указана или формула не отключена.
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, если причина не указана или формула не отключена.
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.
3846 3847 3848 | # File 'formula.rb', line 3846 def keg_only_reason @keg_only_reason end |
.link_overwrite_paths ⇒ Set<String>? (только для чтения)
Этот метод является частью закрытого API. Этот метод можно использовать только в репозитории Homebrew/brew. Сторонним разработчикам по возможности следует избегать использования этого метода, поскольку он может быть удалён или изменён без предупреждения.
4081 4082 4083 | # File 'formula.rb', line 4081 def link_overwrite_paths @link_overwrite_paths end |
.no_autobump_message ⇒ String, ... (только для чтения)
Этот метод является частью закрытого API. Этот метод можно использовать только в репозитории Homebrew/brew. Сторонним разработчикам по возможности следует избегать использования этого метода, поскольку он может быть удалён или изменён без предупреждения.
Сообщение с объяснением, почему формула исключена из списка автоматического обновления. Возвращает nil, если сообщение не указано.
4820 4821 4822 | # File 'formula.rb', line 4820 def @no_autobump_message end |
.pour_bottle_check_unsatisfied_reason ⇒ String?
Этот метод является частью закрытого API. Этот метод можно использовать только в репозитории Homebrew/brew. Сторонним разработчикам по возможности следует избегать использования этого метода, поскольку он может быть удалён или изменён без предупреждения.
Если pour_bottle? возвращает false: причина, отображаемая пользователю и объясняющая, почему он не может использовать bottle.
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. Сторонним разработчикам по возможности следует избегать использования этого метода, поскольку он может быть удалён или изменён без предупреждения.
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. Сторонним разработчикам по возможности следует избегать использования этого метода, поскольку он может быть удалён или изменён без предупреждения.
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. Сторонним разработчикам по возможности следует избегать использования этого метода, поскольку он может быть удалён или изменён без предупреждения.
4078 4079 4080 | # File 'formula.rb', line 4078 def skip_clean_paths @skip_clean_paths end |
Подробное описание атрибутов экземпляра
#active_log_type ⇒ String? (только для чтения)
Этот метод является частью закрытого API. Этот метод можно использовать только в репозитории Homebrew/brew. По возможности сторонним разработчикам следует избегать использования этого метода, поскольку он может быть удалён или изменён без предупреждения.
При сборке, тестировании или выполнении другого действия, для которого ведётся журнал, указывает, где следует разместить файл журнала.
238 239 240 | # File 'formula.rb', line 238 def active_log_type @active_log_type end |
#active_spec=(spec_sym) ⇒ void
Этот метод является частью закрытого API. Этот метод можно использовать только в репозитории Homebrew/brew. По возможности сторонним разработчикам следует избегать использования этого метода, поскольку он может быть удалён или изменён без предупреждения.
Этот метод возвращает неопределённое значение.
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.
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
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
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 они могут различаться. Это неудобно, но является следствием состояния, от которого мы пытаемся избавиться.
245 246 247 | # File 'formula.rb', line 245 def build @build end |
#buildpath ⇒ Pathname? (только для чтения)
Текущий рабочий каталог во время сборки. Значение будет отличаться от nil только внутри #install.
221 222 223 | # File 'formula.rb', line 221 def buildpath @buildpath end |
#compatibility_version ⇒ Integer? (только для чтения)
Используется для указания совместимости API/ABI зависимостей.
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.
256 257 258 | # File 'formula.rb', line 256 def follow_installed_alias @follow_installed_alias end |
#force_bottle ⇒ Boolean
Этот метод является частью закрытого API. Этот метод можно использовать только в репозитории Homebrew/brew. По возможности сторонним разработчикам следует избегать использования этого метода, поскольку он может быть удалён или изменён без предупреждения.
Следует ли принудительно использовать bottle.
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
142 143 144 | # File 'formula.rb', line 142 def full_alias_name @full_alias_name end |
#full_name ⇒ 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 нет.
175 176 177 | # File 'formula.rb', line 175 def head @head end |
#local_bottle_path ⇒ Pathname?
Этот метод является частью закрытого API. Этот метод можно использовать только в репозитории Homebrew/brew. По возможности сторонним разработчикам следует избегать использования этого метода, поскольку он может быть удалён или изменён без предупреждения.
При установке bottle (двоичного пакета) из локального пути этому атрибуту присваивается полный путь к архиву bottle. В противном случае значение будет nil.
233 234 235 | # File 'formula.rb', line 233 def local_bottle_path @local_bottle_path end |
#name ⇒ String (только для чтения)
Имя этой Formula. Например: this-formula
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
149 150 151 | # File 'formula.rb', line 149 def path @path end |
#pinned? ⇒ Boolean (только для чтения)
Этот метод является частью закрытого API. Этот метод можно использовать только в репозитории Homebrew/brew. По возможности сторонним разработчикам следует избегать использования этого метода, поскольку он может быть удалён или изменён без предупреждения.
2038 | # File 'formula.rb', line 2038 delegate pinned?: :@pin |
#pypi_packages_info ⇒ PypiPackages (только для чтения)
Этот метод является частью закрытого API. Этот метод можно использовать только в репозитории Homebrew/brew. По возможности сторонним разработчикам следует избегать использования этого метода, поскольку он может быть удалён или изменён без предупреждения.
Сведения о сопоставлениях PyPI для этой Formula хранятся в объекте PypiPackages.
250 251 252 | # File 'formula.rb', line 250 def pypi_packages_info @pypi_packages_info end |
#revision ⇒ Integer (только для чтения)
Используется для создания новых версий программного обеспечения Homebrew без выпуска новых версий upstream.
200 201 202 | # File 'formula.rb', line 200 def revision @revision end |
#source_modified_time ⇒ Time? (только для чтения)
Этот метод является частью закрытого API. Этот метод можно использовать только в репозитории Homebrew/brew. По возможности сторонним разработчикам следует избегать использования этого метода, поскольку он может быть удалён или изменён без предупреждения.
Время последнего изменения исходных файлов.
192 193 194 | # File 'formula.rb', line 192 def source_modified_time @source_modified_time end |
#stable ⇒ SoftwareSpec? (только для чтения)
Стабильная (и используемая по умолчанию) SoftwareSpec для этой Formula. Она содержит все атрибуты (например, URL и контрольную сумму), относящиеся к стабильной версии этой формулы.
164 165 166 | # File 'formula.rb', line 164 def stable @stable end |
#tap ⇒ Tap? (только для чтения)
156 157 158 | # File 'formula.rb', line 156 def tap @tap end |
#testpath ⇒ Pathname? (только для чтения)
Текущий рабочий каталог во время тестирования. Значение будет отличаться от nil только внутри test.
228 229 230 | # File 'formula.rb', line 228 def testpath @testpath end |
#version_scheme ⇒ Integer (только для чтения)
Используется для изменения схем версий пакетов.
207 208 209 | # File 'formula.rb', line 207 def version_scheme @version_scheme end |
Подробное описание методов класса
.[](name) ⇒ Formula
Этот метод является частью закрытого API. Этот метод можно использовать только в репозитории Homebrew/brew. По возможности сторонним разработчикам следует избегать использования этого метода, поскольку он может быть удалён или изменён без предупреждения.
2638 2639 2640 | # File 'formula.rb', line 2638 def self.[](name) Formulary.factory(name) end |
.alias_full_names ⇒ Array<String>
Этот метод является частью закрытого API. Этот метод можно использовать только в репозитории Homebrew/brew. По возможности сторонним разработчикам следует избегать использования этого метода, поскольку он может быть удалён или изменён без предупреждения.
Массив всех псевдонимов в виде полных имён.
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. По возможности сторонним разработчикам следует избегать использования этого метода, поскольку он может быть удалён или изменён без предупреждения.
Массив всех псевдонимов.
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.
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]
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?
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 для всех формул.
4257 | # File 'formula.rb', line 4257 def bottle(&block) = stable.bottle(&block) |
.build ⇒ BuildOptions
Этот метод является частью закрытого API. Этот метод можно использовать только в репозитории Homebrew/brew. По возможности сторонним разработчикам следует избегать использования этого метода, поскольку он может быть удалён или изменён без предупреждения.
4260 | # File 'formula.rb', line 4260 def build = stable.build |
.build_flags ⇒ Array<String>
Этот метод является частью закрытого API. Этот метод можно использовать только в репозитории Homebrew/brew. По возможности сторонним разработчикам следует избегать использования этого метода, поскольку он может быть удалён или изменён без предупреждения.
Получает BUILD_FLAGS из пространства имён формулы, заданного в Formulary::load_formula.
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
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"
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.
2605 2606 2607 | # File 'formula.rb', line 2605 def self.core_aliases CoreTap.instance.aliases end |
.core_names ⇒ Array<String>
Этот метод является частью закрытого API. Этот метод можно использовать только в репозитории Homebrew/brew. По возможности сторонним разработчикам следует избегать использования этого метода, поскольку он может быть удалён или изменён без предупреждения.
Массив имён всех основных Formula.
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]
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"
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"
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.
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"
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"
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"
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.
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
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. Сторонним разработчикам по возможности не следует использовать этот метод, поскольку он может быть удалён или изменён без предупреждения.
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 в качестве полных имён.
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. Сторонним разработчикам по возможности не следует использовать этот метод, поскольку он может быть удалён или изменён без предупреждения.
Возвращает список приблизительно совпадающих имён формул, но не полные совпадения.
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
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"
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 могут вообще не вызываться, поэтому выполнить инициализацию отложенно нельзя.
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.
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. Сторонним разработчикам по возможности не следует использовать этот метод, поскольку он может быть удалён или изменён без предупреждения.
Массив имён всех установленных в данный момент формул.
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. Сторонним разработчикам по возможности не следует использовать этот метод, поскольку он может быть удалён или изменён без предупреждения.
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"
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" },
]
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-*"
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
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 в противном случае.
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.
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.
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
4214 | # File 'formula.rb', line 4214 def mirror(val) = stable.mirror(val) |
.names ⇒ Array<String>
Этот метод относится к закрытому API. Этот метод можно использовать только в репозитории Homebrew/brew. Сторонним разработчикам по возможности не следует использовать этот метод, поскольку он может быть удалён или изменён без предупреждения.
Массив имён всех Formula.
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. Сторонним разработчикам по возможности не следует использовать этот метод, поскольку он может быть удалён или изменён без предупреждения.
3825 | # File 'formula.rb', line 3825 def network_access_allowed = T.must(@network_access_allowed) |
.network_access_allowed?(phase) ⇒ Boolean
Этот метод относится к закрытому API. Этот метод можно использовать только в репозитории Homebrew/brew. Сторонним разработчикам по возможности не следует использовать этот метод, поскольку он может быть удалён или изменён без предупреждения.
Указывает, следует ли принудительно отключить сеть на указанном этапе.
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
Этот метод возвращает неопределённое значение.
Исключает формулу из списка автоматического обновления.
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).
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'"
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, "..."
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
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. Третьим сторонам по возможности следует избегать его использования, поскольку он может быть удалён или изменён без предупреждения.
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
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
4644 4645 4646 | # File 'formula.rb', line 4644 def preserve_rpath(value: true) @preserve_rpath = value end |
.preserve_rpath? ⇒ Boolean
Этот метод является частью внутреннего API. Этот метод можно использовать только внутри репозиториев, принадлежащих Homebrew, за исключением cask-файлов и формул. Третьим сторонам по возможности следует избегать его использования, поскольку он может быть удалён или изменён без предупреждения.
Проверяет, нужно ли сохранять имена установки @rpath.
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"
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.
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
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
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
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 в противном случае.
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"
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
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. Третьим сторонам по возможности следует избегать его использования, поскольку он может быть удалён или изменён без предупреждения.
4148 | # File 'formula.rb', line 4148 def spec_syms = [:stable, :head].freeze |
.specs ⇒ Array<SoftwareSpec>
Этот метод является частью закрытого API. Этот метод можно использовать только в репозитории Homebrew/brew. Третьим сторонам по возможности следует избегать его использования, поскольку он может быть удалён или изменён без предупреждения.
Список stable и head 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
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.
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.
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.
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 приведут к возникновению исключений.
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(использовать установленный через Homebrewcurl) -
: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"
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.
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"
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
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. Сторонним разработчикам по возможности следует избегать использования этого метода, поскольку он может быть удалён или изменён без предупреждения.
Префикс, если он есть, используемый в именах файлов для записи текущей активности.
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. Сторонним разработчикам по возможности следует избегать использования этого метода, поскольку он может быть удалён или изменён без предупреждения.
Изменился ли псевдоним, использованный для установки формулы, или уже установлены разные формулы с этим псевдонимом?
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-файлов и формул. Сторонним разработчикам по возможности следует избегать использования этого метода, поскольку он может быть удалён или изменён без предупреждения.
Все псевдонимы формулы.
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. Сторонним разработчикам по возможности следует избегать использования этого метода, поскольку он может быть удалён или изменён без предупреждения.
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.
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-файлов и формул. Сторонним разработчикам по возможности следует избегать использования этого метода, поскольку он может быть удалён или изменён без предупреждения.
Получить путь к любому установленному префиксу.
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.
2769 2770 2771 | # File 'formula.rb', line 2769 def any_installed_version any_installed_keg&.version end |
#any_version_installed? ⇒ Boolean
Установлена ли хотя бы одна версия Formula.
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.
642 | # File 'formula.rb', line 642 delegate api_source: :"self.class" |
#autobump? ⇒ Boolean
Этот метод является частью закрытого API. Этот метод можно использовать только в репозитории Homebrew/brew. Сторонним разработчикам по возможности следует избегать использования этого метода, поскольку он может быть удалён или изменён без предупреждения.
Входит ли формула в список autobump?
605 | # File 'formula.rb', line 605 delegate autobump?: :"self.class" |
#bash_completion ⇒ Pathname
Каталог, в который следует установить файлы автодополнения bash для формулы. После установки они связываются символическими ссылками с HOMEBREW_PREFIX или с помощью brew link для формул, которые не являются keg-only.
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"
1100 | # File 'formula.rb', line 1100 def bin = prefix/"bin" |
#bottle ⇒ Bottle?
Этот метод является частью закрытого API. Этот метод можно использовать только в репозитории Homebrew/brew. Сторонним разработчикам по возможности следует избегать использования этого метода, поскольку он может быть удалён или изменён без предупреждения.
Объект Bottle для текущей активной спецификации SoftwareSpec.
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. Сторонним разработчикам по возможности следует избегать использования этого метода, поскольку он может быть удалён или изменён без предупреждения.
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 для указанного тега.
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 для формулы.
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.
1435 | # File 'formula.rb', line 1435 def bottle_prefix = prefix/".bottle" |
#bottle_specification(*args, &block) ⇒ T.untyped
Этот метод является частью закрытого API. Этот метод можно использовать только в репозитории Homebrew/brew. Сторонним разработчикам по возможности следует избегать использования этого метода, поскольку он может быть удалён или изменён без предупреждения.
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. Сторонним разработчикам по возможности следует избегать использования этого метода, поскольку он может быть удалён или изменён без предупреждения.
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. Сторонним разработчикам по возможности следует избегать использования этого метода, поскольку он может быть удалён или изменён без предупреждения.
25 | # File 'sorbet/rbi/dsl/formula.rbi', line 25 def bottle_tag?(*args, &block); end |
#bottled?(*args, &block) ⇒ Boolean
Этот метод является частью закрытого API. Этот метод можно использовать только в репозитории Homebrew/brew. Сторонним разработчикам по возможности следует избегать использования этого метода, поскольку он может быть удалён или изменён без предупреждения.
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.
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. Сторонним разработчикам по возможности следует избегать использования этого метода, поскольку он может быть удалён или изменён без предупреждения.
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
1692 | # File 'formula.rb', line 1692 def caveats = nil |
#caveats_with_placeholders ⇒ String?
Этот метод является частью закрытого API. Этот метод можно использовать только в репозитории Homebrew/brew. Сторонним разработчикам по возможности следует избегать использования этого метода, поскольку он может быть удалён или изменён без предупреждения.
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. Сторонним разработчикам по возможности следует избегать использования этого метода, поскольку он может быть удалён или изменён без предупреждения.
34 | # File 'sorbet/rbi/dsl/formula.rbi', line 34 def clear_cache(*args, &block); end |
#compiler_failures(*args, &block) ⇒ T.untyped
Этот метод является частью закрытого API. Этот метод можно использовать только в репозитории Homebrew/brew. Третьим сторонам по возможности не следует использовать этот метод, поскольку он может быть удалён или изменён без предупреждения.
37 | # File 'sorbet/rbi/dsl/formula.rbi', line 37 def compiler_failures(*args, &block); end |
#conflicts ⇒ Array<FormulaConflict>
Этот метод является частью внутреннего API. Этот метод можно использовать только внутри репозиториев, принадлежащих Homebrew, за исключением cask-файлов и формул. Третьим сторонам по возможности не следует использовать этот метод, поскольку он может быть удалён или изменён без предупреждения.
Возвращает список объектов FormulaConflict, указывающих, какие формулы конфликтуют с этой и по какой причине.
2697 | # File 'formula.rb', line 2697 def conflicts = T.must(self.class.conflicts) |
#core_formula? ⇒ Boolean
Этот метод является частью закрытого API. Этот метод можно использовать только в репозитории Homebrew/brew. Третьим сторонам по возможности не следует использовать этот метод, поскольку он может быть удалён или изменён без предупреждения.
Возвращает true, если эта формула предоставляется самим Homebrew.
2644 2645 2646 | # File 'formula.rb', line 2644 def core_formula? !!tap&.core_tap? end |
#current_installed_alias_target ⇒ Formula?
Этот метод является частью закрытого API. Этот метод можно использовать только в репозитории Homebrew/brew. Третьим сторонам по возможности не следует использовать этот метод, поскольку он может быть удалён или изменён без предупреждения.
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. Третьим сторонам по возможности не следует использовать этот метод, поскольку он может быть удалён или изменён без предупреждения.
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. Третьим сторонам по возможности не следует использовать этот метод, поскольку он может быть удалён или изменён без предупреждения.
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. Третьим сторонам по возможности не следует использовать этот метод, поскольку он может быть удалён или изменён без предупреждения.
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..length >= 2 { dep.name => dep. } elsif dep..present? { dep.name => dep..first } else dep.name end end dep_hash["uses_from_macos_bounds"] = uses_from_macos_deps.map(&:bounds) end hash end |
#deprecate_args ⇒ T.untyped
Этот метод является частью закрытого API. Этот метод можно использовать только в репозитории Homebrew/brew. Третьим сторонам по возможности не следует использовать этот метод, поскольку он может быть удалён или изменён без предупреждения.
Аргументы, использованные для признания этой формулы Formula устаревшей. Возвращает nil, если deprecate! не вызывался.
1791 | # File 'formula.rb', line 1791 delegate deprecate_args: :"self.class" |
#deprecated? ⇒ Boolean
Этот метод является частью закрытого API. Этот метод можно использовать только в репозитории Homebrew/brew. Третьим сторонам по возможности не следует использовать этот метод, поскольку он может быть удалён или изменён без предупреждения.
Указывает, признана ли эта формула Formula устаревшей (то есть выводит предупреждение при установке). По умолчанию — false.
1756 | # File 'formula.rb', line 1756 delegate deprecated?: :"self.class" |
#deprecated_flags(*args, &block) ⇒ T.untyped
Этот метод является частью закрытого API. Этот метод можно использовать только в репозитории Homebrew/brew. Третьим сторонам по возможности не следует использовать этот метод, поскольку он может быть удалён или изменён без предупреждения.
52 | # File 'sorbet/rbi/dsl/formula.rbi', line 52 def deprecated_flags(*args, &block); end |
#deprecated_options(*args, &block) ⇒ T.untyped
Этот метод является частью закрытого API. Этот метод можно использовать только в репозитории Homebrew/brew. Третьим сторонам по возможности не следует использовать этот метод, поскольку он может быть удалён или изменён без предупреждения.
55 | # File 'sorbet/rbi/dsl/formula.rbi', line 55 def (*args, &block); end |
#deprecation_date ⇒ T.untyped
Этот метод является частью закрытого API. Этот метод можно использовать только в репозитории Homebrew/brew. Третьим сторонам по возможности не следует использовать этот метод, поскольку он может быть удалён или изменён без предупреждения.
Дата, когда эта формула Formula была признана устаревшей или будет признана таковой. Возвращает nil, если дата не указана.
1763 | # File 'formula.rb', line 1763 delegate deprecation_date: :"self.class" |
#deprecation_reason ⇒ T.untyped
Этот метод является частью закрытого API. Этот метод можно использовать только в репозитории Homebrew/brew. Третьим сторонам по возможности не следует использовать этот метод, поскольку он может быть удалён или изменён без предупреждения.
Причина, по которой эта формула Formula признана устаревшей. Возвращает nil, если причина не указана или формула не признана устаревшей.
1770 | # File 'formula.rb', line 1770 delegate deprecation_reason: :"self.class" |
#deprecation_replacement_cask ⇒ T.untyped
Этот метод является частью закрытого API. Этот метод можно использовать только в репозитории Homebrew/brew. Третьим сторонам по возможности не следует использовать этот метод, поскольку он может быть удалён или изменён без предупреждения.
Cask на замену этой устаревшей формуле Formula. Возвращает nil, если замена не указана или формула не признана устаревшей.
1784 | # File 'formula.rb', line 1784 delegate deprecation_replacement_cask: :"self.class" |
#deprecation_replacement_formula ⇒ T.untyped
Этот метод является частью закрытого API. Этот метод можно использовать только в репозитории Homebrew/brew. Третьим сторонам по возможности не следует использовать этот метод, поскольку он может быть удалён или изменён без предупреждения.
Формула на замену этой устаревшей формуле Formula. Возвращает nil, если замена не указана или формула не признана устаревшей.
1777 | # File 'formula.rb', line 1777 delegate deprecation_replacement_formula: :"self.class" |
#deps(*args, &block) ⇒ T.untyped
Этот метод является частью закрытого API. Этот метод можно использовать только в репозитории Homebrew/brew. Третьим сторонам по возможности не следует использовать этот метод, поскольку он может быть удалён или изменён без предупреждения.
70 | # File 'sorbet/rbi/dsl/formula.rbi', line 70 def deps(*args, &block); end |
#desc ⇒ T.untyped
Этот метод является частью закрытого API. Этот метод можно использовать только в репозитории Homebrew/brew. Третьим сторонам по возможности не следует использовать этот метод, поскольку он может быть удалён или изменён без предупреждения.
Описание программного обеспечения.
570 | # File 'formula.rb', line 570 delegate desc: :"self.class" |
#deuniversalize_machos(*targets) ⇒ void
Этот метод возвращает неопределённое значение.
Заменяет универсальный двоичный файл его нативным срезом.
Если метод вызван без параметров, он выполняет это действие со всеми совместимыми универсальными двоичными файлами в Keg формулы Formula.
Вызывает ошибку, если универсальные двоичные файлы для преобразования не найдены.
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! не вызывался.
1833 | # File 'formula.rb', line 1833 delegate disable_args: :"self.class" |
#disable_date ⇒ T.untyped
Этот метод является частью закрытого API. Этот метод можно использовать только в репозитории Homebrew/brew. Третьим сторонам по возможности не следует использовать этот метод, поскольку он может быть удалён или изменён без предупреждения.
Дата, когда эта формула Formula была отключена или будет отключена. Возвращает nil, если дата не указана.
1805 | # File 'formula.rb', line 1805 delegate disable_date: :"self.class" |
#disable_reason ⇒ T.untyped
Этот метод является частью закрытого API. Этот метод можно использовать только в репозитории Homebrew/brew. Третьим сторонам по возможности не следует использовать этот метод, поскольку он может быть удалён или изменён без предупреждения.
Причина, по которой эта формула Formula отключена. Возвращает nil, если причина не указана или формула не отключена.
1812 | # File 'formula.rb', line 1812 delegate disable_reason: :"self.class" |
#disable_replacement_cask ⇒ T.untyped
Этот метод является частью закрытого API. Этот метод можно использовать только в репозитории Homebrew/brew. Третьим сторонам по возможности не следует использовать этот метод, поскольку он может быть удалён или изменён без предупреждения.
Cask на замену этой отключённой формуле Formula. Возвращает nil, если замена не указана или формула не отключена.
1826 | # File 'formula.rb', line 1826 delegate disable_replacement_cask: :"self.class" |
#disable_replacement_formula ⇒ T.untyped
Этот метод является частью закрытого API. Этот метод можно использовать только в репозитории Homebrew/brew. По возможности сторонним разработчикам следует избегать использования этого метода, поскольку он может быть удалён или изменён без предупреждения.
Формула-замена для этой отключённой Formula. Возвращает nil, если замена не указана или формула не отключена.
1819 | # File 'formula.rb', line 1819 delegate disable_replacement_formula: :"self.class" |
#disabled? ⇒ Boolean
Этот метод является частью закрытого API. Этот метод можно использовать только в репозитории Homebrew/brew. По возможности сторонним разработчикам следует избегать использования этого метода, поскольку он может быть удалён или изменён без предупреждения.
Отключена ли эта Formula (то есть её нельзя установить). По умолчанию — false.
1798 | # File 'formula.rb', line 1798 delegate disabled?: :"self.class" |
#doc ⇒ Pathname
Каталог, в который следует установить документацию формулы. После установки или с помощью brew link для формул, которые не являются keg-only, на него создаётся символическая ссылка в HOMEBREW_PREFIX.
1108 | # File 'formula.rb', line 1108 def doc = share/"doc"/name |
#downloader(*args, &block) ⇒ T.untyped
Этот метод является частью закрытого API. Этот метод можно использовать только в репозитории Homebrew/brew. По возможности сторонним разработчикам следует избегать использования этого метода, поскольку он может быть удалён или изменён без предупреждения.
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. По возможности сторонним разработчикам следует избегать использования этого метода, поскольку он может быть удалён или изменён без предупреждения.
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"
1330 | # File 'formula.rb', line 1330 def elisp = prefix/"share/emacs/site-lisp"/name |
#enqueue_resources_and_patches(download_queue:) ⇒ void
Этот метод является частью закрытого API. Этот метод можно использовать только в репозитории Homebrew/brew. По возможности сторонним разработчикам следует избегать использования этого метода, поскольку он может быть удалён или изменён без предупреждения.
Этот метод возвращает неопределённое значение.
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, в противном случае — формулу.
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. По возможности сторонним разработчикам следует избегать использования этого метода, поскольку он может быть удалён или изменён без предупреждения.
97 | # File 'sorbet/rbi/dsl/formula.rbi', line 97 def env(*args, &block); end |
#etc ⇒ Pathname
Каталог, в который следует устанавливать файлы конфигурации формулы. При использовании etc.install существующие файлы не перезаписываются, например, во время обновления; вместо этого создаётся новый файл с именем *.default. Этот каталог находится вне HOMEBREW_CELLAR, поэтому сохраняется при обновлениях.
1358 | # File 'formula.rb', line 1358 def etc = (HOMEBREW_PREFIX/"etc").extend(InstallRenamed) |
#fetch_bottle_tab(quiet: false) ⇒ void
Этот метод является частью закрытого API. Этот метод можно использовать только в репозитории Homebrew/brew. По возможности сторонним разработчикам следует избегать использования этого метода, поскольку он может быть удалён или изменён без предупреждения.
Этот метод возвращает неопределённое значение.
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.
1420 | # File 'formula.rb', line 1420 def fish_completion = share/"fish/vendor_completions.d" |
#fish_function ⇒ Pathname
Каталог, в который следует устанавливать файлы функций fish для формулы. После установки или с помощью brew link для формул, которые не являются keg-only, на него создаётся символическая ссылка в HOMEBREW_PREFIX.
1393 | # File 'formula.rb', line 1393 def fish_function = share/"fish/vendor_functions.d" |
#frameworks ⇒ Pathname
Каталог, в который следует устанавливать фреймворки формулы. После установки или с помощью brew link для формул, которые не являются keg-only, на него создаётся символическая ссылка в HOMEBREW_PREFIX. Символическая ссылка в HOMEBREW_PREFIX не создаётся.
1339 | # File 'formula.rb', line 1339 def frameworks = prefix/"Frameworks" |
#full_formulae_names ⇒ Array<String>
Этот метод является частью закрытого API. Этот метод можно использовать только в репозитории Homebrew/brew. По возможности сторонним разработчикам следует избегать использования этого метода, поскольку он может быть удалён или изменён без предупреждения.
Возвращает названия соседних формул -full или формул без -full для любой Formula.
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. По возможности сторонним разработчикам следует избегать использования этого метода, поскольку он может быть удалён или изменён без предупреждения.
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), указанное для установки этой формулы.
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), указанное для поиска этой формулы.
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")
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?
536 537 538 | # File 'formula.rb', line 536 def head? active_spec == head end |
#head_only? ⇒ Boolean
Этот метод является частью закрытого API. Этот метод можно использовать только в репозитории Homebrew/brew. По возможности сторонним разработчикам следует избегать использования этого метода, поскольку он может быть удалён или изменён без предупреждения.
Предназначена ли эта формула только для HEAD?
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. По возможности сторонним разработчикам следует избегать использования этого метода, поскольку он может быть удалён или изменён без предупреждения.
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. По возможности сторонним разработчикам следует избегать использования этого метода, поскольку он может быть удалён или изменён без предупреждения.
Домашняя страница программного обеспечения.
580 | # File 'formula.rb', line 580 delegate homepage: :"self.class" |
#implied_link_overwrite?(keg_name, overwrite_formulae) ⇒ Boolean
Этот метод является частью закрытого API. Этот метод можно использовать только в репозитории Homebrew/brew. По возможности сторонним разработчикам следует избегать использования этого метода, поскольку он может быть удалён или изменён без предупреждения.
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"
1124 | # File 'formula.rb', line 1124 def include = prefix/"include" |
#info ⇒ Pathname
Каталог, в который следует установить файлы info формулы. После установки или с помощью brew link для формул, не предназначенных только для keg, в HOMEBREW_PREFIX создаётся символическая ссылка на этот каталог.
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
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. По возможности сторонним разработчикам следует избегать использования этого метода, поскольку он может быть удалён или изменён без предупреждения.
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 — псевдонима, по которому была найдена формула и который указан для этого экземпляра.
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, если формула была установлена без псевдонима.
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.
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, установленные в данный момент.
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, необходимых во время выполнения.
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.
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. По возможности сторонним разработчикам следует избегать использования этого метода, поскольку он может быть удалён или изменён без предупреждения.
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 не создаётся.
1348 | # File 'formula.rb', line 1348 def kext_prefix = prefix/"Library/Extensions" |
#latest_formula ⇒ Formula
Этот метод является частью закрытого API. Этот метод можно использовать только в репозитории Homebrew/brew. По возможности сторонним разработчикам следует избегать использования этого метода, поскольку он может быть удалён или изменён без предупреждения.
Если значение псевдонима изменилось, возвращает новую формулу. В противном случае возвращает последнюю версию текущей формулы.
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. По возможности сторонним разработчикам следует избегать использования этого метода, поскольку он может быть удалён или изменён без предупреждения.
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. По возможности сторонним разработчикам следует избегать использования этого метода, поскольку он может быть удалён или изменён без предупреждения.
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. По возможности сторонним разработчикам следует избегать использования этого метода, поскольку он может быть удалён или изменён без предупреждения.
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.
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 и не пуст ли он.
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.
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"
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"
1165 | # File 'formula.rb', line 1165 def libexec = prefix/"libexec" |
#license ⇒ T.untyped
Этот метод является частью закрытого API. Этот метод можно использовать только в репозитории Homebrew/brew. По возможности сторонним разработчикам следует избегать использования этого метода, поскольку он может быть удалён или изменён без предупреждения.
Идентификатор SPDX лицензии программного обеспечения.
575 | # File 'formula.rb', line 575 delegate license: :"self.class" |
#link_overwrite?(path) ⇒ Boolean
Этот метод является частью закрытого API. Этот метод можно использовать только в репозитории Homebrew/brew. По возможности сторонним разработчикам следует избегать использования этого метода, поскольку он может быть удалён или изменён без предупреждения.
Для связанных семейств формул могут также подразумеваться явно указанные пути 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. По возможности сторонним разработчикам следует избегать использования этого метода, поскольку он может быть удалён или изменён без предупреждения.
Возвращает соседние формулы, ссылки на префиксы которых следует заменить при связывании этой формулы.
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. По возможности сторонним разработчикам следует избегать использования этого метода, поскольку он может быть удалён или изменён без предупреждения.
Возвращает имена соседних формул, ссылки на префиксы которых следует заменить при связывании этой формулы.
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..each do || next if == name next unless formula_names.add?() pending_formula_names << end end formula_names.to_a.sort end |
#link_overwrite_keg_name(path) ⇒ String, ...
Этот метод является частью закрытого API. Этот метод можно использовать только в репозитории Homebrew/brew. По возможности сторонним разработчикам следует избегать использования этого метода, поскольку он может быть удалён или изменён без предупреждения.
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. По возможности сторонним разработчикам следует избегать использования этого метода, поскольку он может быть удалён или изменён без предупреждения.
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. По возможности сторонним разработчикам следует избегать использования этого метода, поскольку он может быть удалён или изменён без предупреждения.
764 765 766 | # File 'formula.rb', line 764 def [*versioned_formulae_names, *full_formulae_names, unversioned_formula_name].compact end |
#linked? ⇒ Boolean
Этот метод является частью внутреннего API. Этот метод можно использовать только внутри репозиториев, принадлежащих Homebrew, за исключением casks и формул. По возможности сторонним разработчикам следует избегать использования этого метода, поскольку он может быть удалён или изменён без предупреждения.
Связана ли формула?
1051 | # File 'formula.rb', line 1051 def linked? = linked_keg.exist? |
#linked_keg ⇒ Pathname
Этот метод является частью внутреннего API. Этот метод можно использовать только внутри репозиториев, принадлежащих Homebrew, за исключением casks и формул. По возможности сторонним разработчикам следует избегать использования этого метода, поскольку он может быть удалён или изменён без предупреждения.
Каталог символических ссылок, указывающий на состояние связывания этой Formula. Вероятно, вместо него вам нужен #opt_prefix.
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 для формулы.
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 для программного обеспечения.
585 | # File 'formula.rb', line 585 delegate livecheck: :"self.class" |
#livecheck_defined? ⇒ Boolean
Этот метод является частью закрытого API. Этот метод можно использовать только в репозитории Homebrew/brew. По возможности сторонним разработчикам следует избегать использования этого метода, поскольку он может быть удалён или изменён без предупреждения.
Определена ли для программного обеспечения спецификация livecheck?
590 | # File 'formula.rb', line 590 delegate livecheck_defined?: :"self.class" |
#livecheckable? ⇒ Boolean
Этот метод является частью закрытого API. Этот метод можно использовать только в репозитории Homebrew/brew. По возможности сторонним разработчикам следует избегать использования этого метода, поскольку он может быть удалён или изменён без предупреждения.
Это устаревший псевдоним для #livecheck_defined?.
595 | # File 'formula.rb', line 595 delegate livecheckable?: :"self.class" |
#loaded_from_api? ⇒ Boolean
Этот метод является частью закрытого API. Этот метод можно использовать только в репозитории Homebrew/brew. По возможности сторонним разработчикам следует избегать использования этого метода, поскольку он может быть удалён или изменён без предупреждения.
Была ли эта формула загружена с помощью API formulae.brew.sh.
631 | # File 'formula.rb', line 631 delegate loaded_from_api?: :"self.class" |
#loaded_from_internal_api? ⇒ Boolean
Этот метод является частью закрытого API. Этот метод можно использовать только в репозитории Homebrew/brew. По возможности сторонним разработчикам следует избегать использования этого метода, поскольку он может быть удалён или изменён без предупреждения.
Была ли эта формула загружена с помощью внутреннего API formulae.brew.sh.
636 | # File 'formula.rb', line 636 delegate loaded_from_internal_api?: :"self.class" |
#loader_path ⇒ String
Переменная компоновщика для каталога, содержащего программу или разделяемый объект.
2287 | # File 'formula.rb', line 2287 def loader_path = "@loader_path" |
#lock ⇒ Array<String>
Этот метод является частью закрытого API. Этот метод можно использовать только в репозитории Homebrew/brew. По возможности сторонним разработчикам следует избегать использования этого метода, поскольку он может быть удалён или изменён без предупреждения.
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. По возможности сторонним разработчикам следует избегать использования этого метода, поскольку он может быть удалён или изменён без предупреждения.
Каталог, в который будут записываться журналы установки или тестирования формулы.
1439 | # File 'formula.rb', line 1439 def logs = HOMEBREW_LOGS + name |
#man ⇒ Pathname
Корневой каталог, в который следует устанавливать страницы руководства формулы. После установки он связывается символической ссылкой с HOMEBREW_PREFIX либо с brew link для формул, не являющихся keg-only. Часто вместо него следует использовать одну из более специализированных функций man, например #man1.
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"
1191 | # File 'formula.rb', line 1191 def man1 = man/"man1" |
#man2 ⇒ Pathname
Каталог, в который следует устанавливать страницы man2 формулы. После установки он связывается символической ссылкой с HOMEBREW_PREFIX либо с brew link для формул, не являющихся keg-only.
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"
1215 | # File 'formula.rb', line 1215 def man3 = man/"man3" |
#man4 ⇒ Pathname
Каталог, в который следует устанавливать страницы man4 формулы. После установки он связывается символической ссылкой с HOMEBREW_PREFIX либо с brew link для формул, не являющихся keg-only.
1223 | # File 'formula.rb', line 1223 def man4 = man/"man4" |
#man5 ⇒ Pathname
Каталог, в который следует устанавливать страницы man5 формулы. После установки он связывается символической ссылкой с HOMEBREW_PREFIX либо с brew link для формул, не являющихся keg-only.
1231 | # File 'formula.rb', line 1231 def man5 = man/"man5" |
#man6 ⇒ Pathname
Каталог, в который следует устанавливать страницы man6 формулы. После установки он связывается символической ссылкой с HOMEBREW_PREFIX либо с brew link для формул, не являющихся keg-only.
1239 | # File 'formula.rb', line 1239 def man6 = man/"man6" |
#man7 ⇒ Pathname
Каталог, в который следует устанавливать страницы man7 формулы. После установки он связывается символической ссылкой с HOMEBREW_PREFIX либо с brew link для формул, не являющихся keg-only.
1247 | # File 'formula.rb', line 1247 def man7 = man/"man7" |
#man8 ⇒ Pathname
Каталог, в который следует устанавливать страницы man8 формулы. После установки он связывается символической ссылкой с HOMEBREW_PREFIX либо с brew link для формул, не являющихся keg-only.
1255 | # File 'formula.rb', line 1255 def man8 = man/"man8" |
#migration_needed? ⇒ Boolean
Этот метод является частью закрытого API. Этот метод можно использовать только в репозитории Homebrew/brew. По возможности сторонним разработчикам следует избегать использования этого метода, поскольку он может быть удалён или изменён без предупреждения.
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.
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. По возможности сторонним разработчикам следует избегать использования этого метода, поскольку он может быть удалён или изменён без предупреждения.
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, который также переключается в эту папку внутри блока.
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! в блоке, удаление будет пропущено и содержимое временного каталога сохранится.
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. Сторонним разработчикам по возможности не следует использовать этот метод, поскольку он может быть удалён или изменён без предупреждения.
124 | # File 'sorbet/rbi/dsl/formula.rbi', line 124 def network_access_allowed?(*args, &block); end |
#new_formula_available? ⇒ Boolean
Этот метод является частью закрытого API. Этот метод можно использовать только в репозитории Homebrew/brew. Сторонним разработчикам по возможности не следует использовать этот метод, поскольку он может быть удалён или изменён без предупреждения.
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. Сторонним разработчикам по возможности не следует использовать этот метод, поскольку он может быть удалён или изменён без предупреждения.
Исключает формулу из списка автоматического обновления.
600 | # File 'formula.rb', line 600 delegate no_autobump!: :"self.class" |
#no_autobump_message(*args, &block) ⇒ T.untyped
Этот метод является частью закрытого API. Этот метод можно использовать только в репозитории Homebrew/brew. Сторонним разработчикам по возможности не следует использовать этот метод, поскольку он может быть удалён или изменён без предупреждения.
130 | # File 'sorbet/rbi/dsl/formula.rbi', line 130 def (*args, &block); end |
#old_installed_formulae ⇒ Array<Formula>
Этот метод является частью закрытого API. Этот метод можно использовать только в репозитории Homebrew/brew. Сторонним разработчикам по возможности не следует использовать этот метод, поскольку он может быть удалён или изменён без предупреждения.
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-файлов и формул. Сторонним разработчикам по возможности не следует использовать этот метод, поскольку он может быть удалён или изменён без предупреждения.
Старые имена формулы.
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. Сторонним разработчикам по возможности не следует использовать этот метод, поскольку он может быть удалён или изменён без предупреждения.
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. Сторонним разработчикам по возможности не следует использовать этот метод, поскольку он может быть удалён или изменён без предупреждения.
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.
1515 | # File 'formula.rb', line 1515 def opt_bin = opt_prefix/"bin" |
#opt_elisp ⇒ Pathname
То же, что и #elisp, но относительно #opt_prefix, а не #prefix.
1557 | # File 'formula.rb', line 1557 def opt_elisp = opt_prefix/"share/emacs/site-lisp"/name |
#opt_frameworks ⇒ Pathname
То же, что и #frameworks, но относительно #opt_prefix, а не #prefix.
1563 | # File 'formula.rb', line 1563 def opt_frameworks = opt_prefix/"Frameworks" |
#opt_include ⇒ Pathname
То же, что и #include, но относительно #opt_prefix, а не #prefix.
1521 | # File 'formula.rb', line 1521 def opt_include = opt_prefix/"include" |
#opt_lib ⇒ Pathname
То же, что и #lib, но относительно #opt_prefix, а не #prefix.
1527 | # File 'formula.rb', line 1527 def opt_lib = opt_prefix/"lib" |
#opt_libexec ⇒ Pathname
То же, что и #libexec, но относительно #opt_prefix, а не #prefix.
1533 | # File 'formula.rb', line 1533 def opt_libexec = opt_prefix/"libexec" |
#opt_pkgshare ⇒ Pathname
То же, что и #pkgshare, но относительно #opt_prefix, а не #prefix.
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"
1509 | # File 'formula.rb', line 1509 def opt_prefix = formula_opt_prefix(name) |
#opt_sbin ⇒ Pathname
То же, что и #sbin, но относительно #opt_prefix, а не #prefix.
1539 | # File 'formula.rb', line 1539 def opt_sbin = opt_prefix/"sbin" |
#opt_share ⇒ Pathname
То же, что и #share, но относительно #opt_prefix, а не #prefix.
1545 | # File 'formula.rb', line 1545 def opt_share = opt_prefix/"share" |
#option_defined? ⇒ Boolean
Этот метод является частью закрытого API. Этот метод можно использовать только в репозитории Homebrew/brew. Сторонним разработчикам по возможности не следует использовать этот метод, поскольку он может быть удалён или изменён без предупреждения.
Определён ли именованный параметр для активного в данный момент объекта SoftwareSpec.
936 | # File 'formula.rb', line 936 delegate option_defined?: :active_spec |
#options(*args, &block) ⇒ T.untyped
Этот метод является частью закрытого API. Этот метод можно использовать только в репозитории Homebrew/brew. Сторонним разработчикам по возможности не следует использовать этот метод, поскольку он может быть удалён или изменён без предупреждения.
136 | # File 'sorbet/rbi/dsl/formula.rbi', line 136 def (*args, &block); end |
#optlinked? ⇒ Boolean
Этот метод является частью закрытого API. Этот метод можно использовать только в репозитории Homebrew/brew. Сторонним разработчикам по возможности не следует использовать этот метод, поскольку он может быть удалён или изменён без предупреждения.
Связана ли формула с opt?
1055 | # File 'formula.rb', line 1055 def optlinked? = opt_prefix.symlink? |
#outdated?(fetch_head: false) ⇒ Boolean
Этот метод является частью внутреннего API. Этот метод можно использовать только внутри репозиториев, принадлежащих Homebrew, за исключением cask-файлов и формул. Сторонним разработчикам по возможности не следует использовать этот метод, поскольку он может быть удалён или изменён без предупреждения.
Проверяет, устарела ли установленная формула.
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. Сторонним разработчикам по возможности не следует использовать этот метод, поскольку он может быть удалён или изменён без предупреждения.
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. Сторонним разработчикам по возможности не следует использовать этот метод, поскольку он может быть удалён или изменён без предупреждения.
139 | # File 'sorbet/rbi/dsl/formula.rbi', line 139 def patchlist(*args, &block); end |
#pin(*args, &block) ⇒ T.untyped
Этот метод является частью закрытого API. Этот метод можно использовать только в репозитории Homebrew/brew. По возможности сторонним разработчикам не следует использовать этот метод, поскольку он может быть удалён или изменён без предупреждения.
142 | # File 'sorbet/rbi/dsl/formula.rbi', line 142 def pin(*args, &block); end |
#pinnable?(*args, &block) ⇒ Boolean
Этот метод является частью закрытого API. Этот метод можно использовать только в репозитории Homebrew/brew. По возможности сторонним разработчикам не следует использовать этот метод, поскольку он может быть удалён или изменён без предупреждения.
145 | # File 'sorbet/rbi/dsl/formula.rbi', line 145 def pinnable?(*args, &block); end |
#pinned_version(*args, &block) ⇒ T.untyped
Этот метод является частью закрытого API. Этот метод можно использовать только в репозитории Homebrew/brew. По возможности сторонним разработчикам не следует использовать этот метод, поскольку он может быть удалён или изменён без предупреждения.
151 | # File 'sorbet/rbi/dsl/formula.rbi', line 151 def pinned_version(*args, &block); end |
#pkg_version ⇒ PkgVersion
Этот метод является частью закрытого API. Этот метод можно использовать только в репозитории Homebrew/brew. По возможности сторонним разработчикам не следует использовать этот метод, поскольку он может быть удалён или изменён без предупреждения.
PkgVersion этой формулы с информацией о version и #revision.
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.
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"
1315 | # File 'formula.rb', line 1315 def pkgshare = prefix/"share"/name |
#plist_name ⇒ String
Этот метод является частью закрытого API. Этот метод можно использовать только в репозитории Homebrew/brew. По возможности сторонним разработчикам не следует использовать этот метод, поскольку он может быть удалён или изменён без предупреждения.
Сгенерированное имя службы launchd plist.
1468 | # File 'formula.rb', line 1468 def plist_name = service.plist_name |
#possible_names ⇒ Array<String>
Этот метод является частью закрытого API. Этот метод можно использовать только в репозитории Homebrew/brew. По возможности сторонним разработчикам не следует использовать этот метод, поскольку он может быть удалён или изменён без предупреждения.
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. По возможности сторонним разработчикам не следует использовать этот метод, поскольку он может быть удалён или изменён без предупреждения.
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. По возможности сторонним разработчикам не следует использовать этот метод, поскольку он может быть удалён или изменён без предупреждения.
Шаги после установки.
647 | # File 'formula.rb', line 647 delegate post_install_steps: :"self.class" |
#post_install_steps_conflict? ⇒ Boolean
Этот метод является частью закрытого API. Этот метод можно использовать только в репозитории Homebrew/brew. По возможности сторонним разработчикам не следует использовать этот метод, поскольку он может быть удалён или изменён без предупреждения.
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. По возможности сторонним разработчикам не следует использовать этот метод, поскольку он может быть удалён или изменён без предупреждения.
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?.
1572 | # File 'formula.rb', line 1572 def pour_bottle? = true |
#pour_bottle_check_unsatisfied_reason(*args, &block) ⇒ T.untyped
Этот метод является частью закрытого API. Этот метод можно использовать только в репозитории Homebrew/brew. По возможности сторонним разработчикам не следует использовать этот метод, поскольку он может быть удалён или изменён без предупреждения.
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).
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. По возможности сторонним разработчикам не следует использовать этот метод, поскольку он может быть удалён или изменён без предупреждения.
407 | # File 'formula.rb', line 407 def preserve_rpath? = self.class.preserve_rpath? |
#print_tap_action(options = {}) ⇒ void
Этот метод является частью закрытого API. Этот метод можно использовать только в репозитории Homebrew/brew. По возможности сторонним разработчикам не следует использовать этот метод, поскольку он может быть удалён или изменён без предупреждения.
Этот метод возвращает неопределённое значение.
2676 2677 2678 2679 2680 2681 | # File 'formula.rb', line 2676 def print_tap_action( = {}) return unless tap? verb = [:verb] || "Installing" ohai "#{verb}#{name} from #{tap}" end |
#pwsh_completion ⇒ Pathname
Каталог, в который следует устанавливать файлы автодополнения PowerShell для формулы. После установки он связывается символической ссылкой с HOMEBREW_PREFIX; для формул, не являющихся keg-only, это происходит с помощью brew link.
1429 | # File 'formula.rb', line 1429 def pwsh_completion = share/"pwsh/completions" |
#rack ⇒ Pathname
Этот метод является частью закрытого API. Этот метод можно использовать только в репозитории Homebrew/brew. По возможности сторонним разработчикам не следует использовать этот метод, поскольку он может быть удалён или изменён без предупреждения.
Родительский каталог prefix; именованный каталог в Cellar, содержащий все установленные версии этого программного обеспечения.
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.
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}" = Time.now end Dependency.(self, cache_key:, cache_timestamp:, &block) ensure Dependency.(cache_key, ) if block end |
#recursive_requirements(&block) ⇒ Requirements
Этот метод является частью внутреннего API. Этот метод можно использовать только внутри репозиториев, принадлежащих Homebrew, за исключением cask- и formula-определений. По возможности сторонним разработчикам не следует использовать этот метод, поскольку он может быть удалён или изменён без предупреждения.
Полный набор Requirements для дерева зависимостей этой формулы.
2739 2740 2741 2742 | # File 'formula.rb', line 2739 def recursive_requirements(&block) cache_key = "Formula#recursive_requirements" unless block Requirement.(self, cache_key:, &block) end |
#reloadable_ref ⇒ String, Pathname
Этот метод является частью закрытого API. Этот метод можно использовать только в репозитории Homebrew/brew. По возможности сторонним разработчикам не следует использовать этот метод, поскольку он может быть удалён или изменён без предупреждения.
508 | # File 'formula.rb', line 508 def reloadable_ref = loaded_from_api? ? full_name : path |
#requirements(*args, &block) ⇒ T.untyped
Этот метод является частью закрытого API. Этот метод можно использовать только в репозитории Homebrew/brew. По возможности сторонним разработчикам не следует использовать этот метод, поскольку он может быть удалён или изменён без предупреждения.
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" }
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.
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"
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. По возможности сторонним разработчикам следует избегать использования этого метода, поскольку он может быть удалён или изменён без предупреждения.
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. По возможности сторонним разработчикам следует избегать использования этого метода, поскольку он может быть удалён или изменён без предупреждения.
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. По возможности сторонним разработчикам следует избегать использования этого метода, поскольку он может быть удалён или изменён без предупреждения.
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, необходимых во время выполнения.
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, необходимых во время выполнения.
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. По возможности сторонним разработчикам следует избегать использования этого метода, поскольку он может быть удалён или изменён без предупреждения.
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.
1264 | # File 'formula.rb', line 1264 def sbin = prefix/"sbin" |
#selective_patch(is_data: false) ⇒ void
Этот метод является частью закрытого API. Этот метод можно использовать только в репозитории Homebrew/brew. По возможности сторонним разработчикам следует избегать использования этого метода, поскольку он может быть удалён или изменён без предупреждения.
Этот метод возвращает неопределённое значение.
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. По возможности сторонним разработчикам следует избегать использования этого метода, поскольку он может быть удалён или изменён без предупреждения.
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. По возможности сторонним разработчикам следует избегать использования этого метода, поскольку он может быть удалён или изменён без предупреждения.
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., "specs" => data[:specs], } end end |
#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. По возможности сторонним разработчикам следует избегать использования этого метода, поскольку он может быть удалён или изменён без предупреждения.
Определена ли для программного обеспечения спецификация службы?
612 | # File 'formula.rb', line 612 delegate service?: :"self.class" |
#service_name ⇒ String
Этот метод является частью закрытого API. Этот метод можно использовать только в репозитории Homebrew/brew. По возможности сторонним разработчикам следует избегать использования этого метода, поскольку он может быть удалён или изменён без предупреждения.
Сгенерированное имя службы.
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"
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
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. По возможности сторонним разработчикам следует избегать использования этого метода, поскольку он может быть удалён или изменён без предупреждения.
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. По возможности сторонним разработчикам следует избегать использования этого метода, поскольку он может быть удалён или изменён без предупреждения.
Имя, указанное для поиска этой формулы.
512 513 514 | # File 'formula.rb', line 512 def specified_name alias_name || name end |
#specified_path ⇒ Pathname?
Этот метод является частью закрытого API. Этот метод можно использовать только в репозитории Homebrew/brew. По возможности сторонним разработчикам следует избегать использования этого метода, поскольку он может быть удалён или изменён без предупреждения.
Путь, указанный для поиска этой формулы.
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?
530 531 532 | # File 'formula.rb', line 530 def stable? active_spec == stable end |
#std_cabal_v2_args ⇒ Array<String>
Стандартные параметры для сборок Cabal-v2.
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.
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, многие из которых устанавливаются сторонними пакетами.
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.
2140 2141 2142 2143 | # File 'formula.rb', line 2140 def std_configure_args(prefix: self.prefix, libdir: "lib") libdir = Pathname(libdir).(prefix) ["--disable-debug", "--disable-dependency-tracking", "--prefix=#{prefix}", "--libdir=#{libdir}"] end |
#std_go_args(output: bin/name, ldflags: nil, gcflags: nil, tags: nil) ⇒ Array<String>
Стандартные параметры для сборок Go.
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().join("")}"] if args += ["-ldflags=#{Array(ldflags).join("")}"] if ldflags args += ["-gcflags=#{Array(gcflags).join("")}"] if gcflags args end |
#std_meson_args ⇒ Array<String>
Стандартные параметры для сборок Meson.
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.
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.
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.
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. Сторонним разработчикам по возможности не следует использовать этот метод, поскольку он может быть удалён или изменён без предупреждения.
Является ли эта формула целью псевдонима, используемого для установки старой формулы?
1998 | # File 'formula.rb', line 1998 def supersedes_an_installed_formula? = old_installed_formulae.any? |
#supports_linux? ⇒ Boolean
Этот метод является частью закрытого API. Этот метод можно использовать только в репозитории Homebrew/brew. Сторонним разработчикам по возможности не следует использовать этот метод, поскольку он может быть удалён или изменён без предупреждения.
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. Сторонним разработчикам по возможности не следует использовать этот метод, поскольку он может быть удалён или изменён без предупреждения.
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 с версиями других формул.
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"
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.
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.
1484 | # File 'formula.rb', line 1484 def systemd_timer_path = (any_installed_prefix || opt_prefix)/"#{service_name}.timer" |
#tap! ⇒ Tap
Этот метод является частью закрытого API. Этот метод можно использовать только в репозитории Homebrew/brew. Сторонним разработчикам по возможности не следует использовать этот метод, поскольку он может быть удалён или изменён без предупреждения.
480 481 482 | # File 'formula.rb', line 480 def tap! tap || raise("Formula tap is nil") end |
#tap? ⇒ Boolean
Этот метод является частью закрытого API. Этот метод можно использовать только в репозитории Homebrew/brew. Сторонним разработчикам по возможности не следует использовать этот метод, поскольку он может быть удалён или изменён без предупреждения.
Истина, если эта формула предоставляется внешним Tap.
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. Сторонним разработчикам по возможности не следует использовать этот метод, поскольку он может быть удалён или изменён без предупреждения.
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. Сторонним разработчикам по возможности не следует использовать этот метод, поскольку он может быть удалён или изменён без предупреждения.
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.
3288 | # File 'formula.rb', line 3288 def test; end |
#test_defined? ⇒ Boolean
Этот метод является частью закрытого API. Этот метод можно использовать только в репозитории Homebrew/brew. Сторонним разработчикам по возможности не следует использовать этот метод, поскольку он может быть удалён или изменён без предупреждения.
3276 3277 3278 | # File 'formula.rb', line 3276 def test_defined? method(:test).owner != Formula end |
#test_fixtures(file) ⇒ 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 для использования в формуле в качестве времени сборки.
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. Сторонним разработчикам по возможности не следует использовать этот метод, поскольку он может быть удалён или изменён без предупреждения.
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" => , "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"] = .map do |opt| { "option" => opt.flag, "description" => opt.description } end hsh.merge!(dependencies_hash) hsh["installed"] = installed_kegs.sort_by(&:scheme_and_version).map do |keg| tab = keg.tab { "version" => keg.version.to_s, "used_options" => tab..as_flags, "built_as_bottle" => tab.built_as_bottle, "poured_from_bottle" => tab.poured_from_bottle, "time" => tab.time, "runtime_dependencies" => tab.runtime_dependencies, "installed_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. Сторонним разработчикам по возможности не следует использовать этот метод, поскольку он может быть удалён или изменён без предупреждения.
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. Сторонним разработчикам по возможности не следует использовать этот метод, поскольку он может быть удалён или изменён без предупреждения.
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. Третьим сторонам следует по возможности избегать использования этого метода, так как он может быть удалён или изменён без предупреждения.
169 | # File 'sorbet/rbi/dsl/formula.rbi', line 169 def unpin(*args, &block); end |
#unversioned_formula_name ⇒ String?
Этот метод является частью закрытого API. Этот метод можно использовать только в репозитории Homebrew/brew. Третьим сторонам следует по возможности избегать использования этого метода, так как он может быть удалён или изменён без предупреждения.
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. Третьим сторонам следует по возможности избегать использования этого метода, так как он может быть удалён или изменён без предупреждения.
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.
2659 2660 2661 | # File 'formula.rb', line 2659 def valid_platform? supports_macos? && supports_linux? end |
#var ⇒ Pathname
Каталог, в который следует устанавливать файлы переменных формулы. Этот каталог находится не внутри HOMEBREW_CELLAR, поэтому его содержимое сохраняется при обновлении.
1375 | # File 'formula.rb', line 1375 def var = HOMEBREW_PREFIX/"var" |
#version ⇒ T.untyped
Этот метод является частью закрытого API. Этот метод можно использовать только в репозитории Homebrew/brew. Третьим сторонам следует по возможности избегать использования этого метода, так как он может быть удалён или изменён без предупреждения.
Версия текущего активного объекта SoftwareSpec. Версия автоматически определяется по URL и/или тегу, поэтому её нужно объявлять только в том случае, если автоматическое определение работает некорректно.
619 | # File 'formula.rb', line 619 delegate version: :active_spec |
#versioned_formula? ⇒ Boolean
Этот метод является частью закрытого API. Этот метод можно использовать только в репозитории Homebrew/brew. Третьим сторонам следует по возможности избегать использования этого метода, так как он может быть удалён или изменён без предупреждения.
Является ли это @-формулой с версией.
674 | # File 'formula.rb', line 674 def versioned_formula? = name.include?("@") |
#versioned_formulae ⇒ Array<Formula>
Этот метод является частью закрытого API. Этот метод можно использовать только в репозитории Homebrew/brew. Третьим сторонам следует по возможности избегать использования этого метода, так как он может быть удалён или изменён без предупреждения.
Возвращает все объекты Formula с версией @ для любой 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 (включая формулы с версиями).
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. Третьим сторонам следует по возможности избегать использования этого метода, так как он может быть удалён или изменён без предупреждения.
Выполняет блок, применяя указанный тип журнала на время его выполнения.
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.
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.
1411 | # File 'formula.rb', line 1411 def zsh_completion = share/"zsh/site-functions" |
#zsh_function ⇒ Pathname
Каталог, в который следует устанавливать файлы функций zsh для формулы. После установки они связываются символической ссылкой с HOMEBREW_PREFIX или с brew link для формул, которые не являются keg-only.
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