Модуль: Superenv Приватный
- Включён в:
- Sorbet::Private::Static::ENVClass
- Определён в:
- extend/ENV/super.rb
Обзор
Этот модуль является частью приватного API. Этот модуль можно использовать только в репозитории Homebrew/brew. По возможности сторонним разработчикам следует избегать использования этого модуля, поскольку он может быть удалён или изменён без предупреждения.
Почему superenv?
- Указывать только нужное нам окружение (без LDFLAGS для cmake)
- Применять параметры, специфичные для компилятора, только при вызове этого компилятора
- Передавать все пути включаемых файлов и библиотек при создании экземпляра cc (меньше ошибок)
- Адаптировать использование цепочки инструментов к конкретным версиям Xcode
- Удалять флаги, которые нам не нужны или могут нарушить сборку
- Более простой код
- Более простые формулы, которые просто работают
- Конфигурация цепочки инструментов, не зависящая от системы сборки
Краткое описание констант
Константы, включённые из CompilerConstants
CompilerConstants::COMPILERS, CompilerConstants::COMPILER_SYMBOL_MAP, CompilerConstants::GNU_GCC_REGEXP, CompilerConstants::GNU_GCC_VERSIONS
Краткое описание атрибутов экземпляра свернуть
- #deps ⇒ Array<Formula> приватный
- #keg_only_deps ⇒ Array<Formula> приватный
- #run_time_deps ⇒ Array<Formula> приватный
Атрибуты, включённые из SharedEnvExtension
Краткое описание методов класса свернуть
- .bin ⇒ Pathname? приватный
- .extended(base) ⇒ void приватный
- .shims_path ⇒ Pathname
Расположение shims Homebrew.
Краткое описание методов экземпляра свернуть
- #cxx11 ⇒ void приватный
- #deparallelize(&block) ⇒ T.untyped приватный
Удаляет переменную окружения MAKEFLAGS, заставляя make использовать только одну задачу.
- #initialize ⇒ void приватный
- #libcxx ⇒ void приватный
- #make_jobs ⇒ Integer приватный
- #O0(&block) ⇒ Object приватный
- #O1(&block) ⇒ void приватный
- #O3(&block) ⇒ void приватный
- #permit_arch_flags ⇒ void приватный
- #refurbish_args ⇒ void приватный
- #reset ⇒ void приватный
- #runtime_cpu_detection ⇒ void приватный
- #set_debug_symbols ⇒ void приватный
- #setup_build_environment(formula: nil, cc: nil, build_bottle: false, bottle_arch: nil, testing_formula: false, debug_symbols: false) ⇒ void приватный
Методы, включённые из 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
Методы, включённые из SharedEnvExtension
#[]=, #append, #append_path, #append_to_cccfg, #append_to_cflags, #append_to_rustflags, #cc, #cflags, #compiler, #cppflags, #cxx, #cxxflags, #effective_arch, #fc, #fcflags, #fflags, #fortran, #ldflags, #prepend, #prepend_create_path, #prepend_path, #remove, #remove_cc_etc, #remove_from_cflags
Методы, включённые из OS::Linux::SharedEnvExtension
Методы, включённые из OS::Linux::Superenv
#determine_dynamic_linker_path, #determine_rpath_paths
Методы, включённые из OS::Mac::Superenv
#libxml2_include_needed?, #no_fixup_chains, #no_weak_imports
Подробное описание атрибутов экземпляра
#deps ⇒ Array<Formula>
Этот метод является частью закрытого API. Этот метод можно использовать только в репозитории Homebrew/brew. Сторонним разработчикам следует по возможности избегать использования этого метода, поскольку он может быть удалён или изменён без предупреждения.
26 27 28 | # File 'extend/ENV/super.rb', line 26 def deps @deps end |
#keg_only_deps ⇒ Array<Formula>
Этот метод является частью закрытого API. Этот метод можно использовать только в репозитории Homebrew/brew. Сторонним разработчикам следует по возможности избегать использования этого метода, поскольку он может быть удалён или изменён без предупреждения.
23 24 25 | # File 'extend/ENV/super.rb', line 23 def keg_only_deps @keg_only_deps end |
#run_time_deps ⇒ Array<Formula>
Этот метод является частью закрытого API. Этот метод можно использовать только в репозитории Homebrew/brew. Сторонним разработчикам следует по возможности избегать использования этого метода, поскольку он может быть удалён или изменён без предупреждения.
29 30 31 | # File 'extend/ENV/super.rb', line 29 def run_time_deps @run_time_deps end |
Подробное описание методов класса
.bin ⇒ Pathname?
Этот метод является частью закрытого API. Этот метод можно использовать только в репозитории Homebrew/brew. Сторонним разработчикам следует по возможности избегать использования этого метода, поскольку он может быть удалён или изменён без предупреждения.
47 | # File 'extend/ENV/super.rb', line 47 def self.bin; end |
.extended(base) ⇒ void
Этот метод является частью закрытого API. Этот метод можно использовать только в репозитории Homebrew/brew. Сторонним разработчикам следует по возможности избегать использования этого метода, поскольку он может быть удалён или изменён без предупреждения.
Этот метод возвращает неопределённое значение.
32 33 34 35 36 | # File 'extend/ENV/super.rb', line 32 def self.extended(base) base.keg_only_deps = [] base.deps = [] base.run_time_deps = [] end |
.shims_path ⇒ Pathname
Расположение shims Homebrew.
42 43 44 | # File 'extend/ENV/super.rb', line 42 def self.shims_path HOMEBREW_SHIMS_PATH/"super" end |
Подробное описание методов экземпляра
#cxx11 ⇒ void
Этот метод является частью закрытого API. Этот метод можно использовать только в репозитории Homebrew/brew. Третьим сторонам по возможности следует избегать использования этого метода, поскольку он может быть удалён или изменён без предупреждения.
Этот метод возвращает неопределённое значение.
374 375 376 377 | # File 'extend/ENV/super.rb', line 374 def cxx11 append_to_cccfg "x" append_to_cccfg "g" if homebrew_cc == "clang" end |
#deparallelize(&block) ⇒ T.untyped
Этот метод является частью закрытого API. Этот метод можно использовать только в репозитории Homebrew/brew. Третьим сторонам по возможности следует избегать использования этого метода, поскольку он может быть удалён или изменён без предупреждения.
Удаляет переменную окружения MAKEFLAGS, заставляя make использовать одно задание. Это полезно для make-файлов, подверженных состояниям гонки. Если передан блок, MAKEFLAGS удаляется только на время выполнения блока и восстанавливается после его завершения.
341 342 343 344 345 346 347 348 349 350 351 352 353 354 355 | # File 'extend/ENV/super.rb', line 341 def deparallelize(&block) old_makeflags = delete("MAKEFLAGS") old_make_jobs = delete("HOMEBREW_MAKE_JOBS") self["HOMEBREW_MAKE_JOBS"] = "1" if block begin yield ensure self["MAKEFLAGS"] = old_makeflags self["HOMEBREW_MAKE_JOBS"] = old_make_jobs end end old_makeflags end |
#initialize ⇒ void
Этот метод является частью закрытого API. Этот метод можно использовать только в репозитории Homebrew/brew. Третьим сторонам по возможности следует избегать использования этого метода, поскольку он может быть удалён или изменён без предупреждения.
50 51 52 53 54 55 56 | # File 'extend/ENV/super.rb', line 50 def initialize @keg_only_deps = T.let([], T::Array[Formula]) @deps = T.let([], T::Array[Formula]) @run_time_deps = T.let([], T::Array[Formula]) @formula = T.let(nil, T.nilable(Formula)) end |
#libcxx ⇒ void
Этот метод является частью закрытого API. Этот метод можно использовать только в репозитории Homebrew/brew. Третьим сторонам по возможности следует избегать использования этого метода, поскольку он может быть удалён или изменён без предупреждения.
Этот метод возвращает неопределённое значение.
380 381 382 | # File 'extend/ENV/super.rb', line 380 def libcxx append_to_cccfg "g" if compiler == :clang end |
#make_jobs ⇒ Integer
Этот метод является частью закрытого API. Этот метод можно использовать только в репозитории Homebrew/brew. Третьим сторонам по возможности следует избегать использования этого метода, поскольку он может быть удалён или изменён без предупреждения.
358 359 360 361 | # File 'extend/ENV/super.rb', line 358 def make_jobs self["MAKEFLAGS"] =~ /-\w*j(\d+)/ [Regexp.last_match(1).to_i, 1].max end |
#O0(&block) ⇒ Object
Этот метод является частью закрытого API. Этот метод можно использовать только в репозитории Homebrew/brew. Третьим сторонам по возможности следует избегать использования этого метода, поскольку он может быть удалён или изменён без предупреждения.
397 398 399 400 401 402 403 | # File 'extend/ENV/super.rb', line 397 def O0(&block) if block with_env(HOMEBREW_OPTIMIZATION_LEVEL: "O0", &block) else self["HOMEBREW_OPTIMIZATION_LEVEL"] = "O0" end end |
#O1(&block) ⇒ void
Этот метод является частью закрытого API. Этот метод можно использовать только в репозитории Homebrew/brew. Третьим сторонам по возможности следует избегать использования этого метода, поскольку он может быть удалён или изменён без предупреждения.
Этот метод возвращает неопределённое значение.
406 407 408 409 410 411 412 | # File 'extend/ENV/super.rb', line 406 def O1(&block) if block with_env(HOMEBREW_OPTIMIZATION_LEVEL: "O1", &block) else self["HOMEBREW_OPTIMIZATION_LEVEL"] = "O1" end end |
#O3(&block) ⇒ void
Этот метод является частью закрытого API. Этот метод можно использовать только в репозитории Homebrew/brew. Третьим сторонам по возможности следует избегать использования этого метода, поскольку он может быть удалён или изменён без предупреждения.
Этот метод возвращает неопределённое значение.
415 416 417 418 419 420 421 | # File 'extend/ENV/super.rb', line 415 def O3(&block) if block with_env(HOMEBREW_OPTIMIZATION_LEVEL: "O3", &block) else self["HOMEBREW_OPTIMIZATION_LEVEL"] = "O3" end end |
#permit_arch_flags ⇒ void
Этот метод является частью закрытого API. Этот метод можно использовать только в репозитории Homebrew/brew. Третьим сторонам по возможности следует избегать использования этого метода, поскольку он может быть удалён или изменён без предупреждения.
Этот метод возвращает неопределённое значение.
364 365 366 | # File 'extend/ENV/super.rb', line 364 def permit_arch_flags append_to_cccfg "K" end |
#refurbish_args ⇒ void
Этот метод является частью закрытого API. Этот метод можно использовать только в репозитории Homebrew/brew. Сторонним разработчикам по возможности следует избегать использования этого метода, так как он может быть удалён или изменён без предупреждения.
Этот метод возвращает неопределённое значение.
390 391 392 | # File 'extend/ENV/super.rb', line 390 def refurbish_args append_to_cccfg "O" end |
#reset ⇒ void
Этот метод является частью закрытого API. Этот метод можно использовать только в репозитории Homebrew/brew. Сторонним разработчикам по возможности следует избегать использования этого метода, так как он может быть удалён или изменён без предупреждения.
Этот метод возвращает неопределённое значение.
59 60 61 62 63 64 | # File 'extend/ENV/super.rb', line 59 def reset super # Configure scripts generated by autoconf 2.61 or later export as_nl, which # we use as a heuristic for running under configure delete("as_nl") end |
#runtime_cpu_detection ⇒ void
Этот метод является частью закрытого API. Этот метод можно использовать только в репозитории Homebrew/brew. Сторонним разработчикам по возможности следует избегать использования этого метода, так как он может быть удалён или изменён без предупреждения.
Этот метод возвращает неопределённое значение.
369 370 371 | # File 'extend/ENV/super.rb', line 369 def runtime_cpu_detection append_to_cccfg "d" end |
#set_debug_symbols ⇒ void
Этот метод является частью закрытого API. Этот метод можно использовать только в репозитории Homebrew/brew. Сторонним разработчикам по возможности следует избегать использования этого метода, так как он может быть удалён или изменён без предупреждения.
Этот метод возвращает неопределённое значение.
385 386 387 | # File 'extend/ENV/super.rb', line 385 def set_debug_symbols append_to_cccfg "D" end |
#setup_build_environment(formula: nil, cc: nil, build_bottle: false, bottle_arch: nil, testing_formula: false, debug_symbols: false) ⇒ void
Этот метод является частью закрытого API. Этот метод можно использовать только в репозитории Homebrew/brew. Сторонним разработчикам по возможности следует избегать использования этого метода, так как он может быть удалён или изменён без предупреждения.
Этот метод возвращает неопределённое значение.
76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 | # File 'extend/ENV/super.rb', line 76 def setup_build_environment(formula: nil, cc: nil, build_bottle: false, bottle_arch: nil, testing_formula: false, debug_symbols: false) super send(compiler) self["HOMEBREW_ENV"] = "super" self["MAKEFLAGS"] ||= "-j#{determine_make_jobs}" self["RUSTC_WRAPPER"] = "#{HOMEBREW_SHIMS_PATH}/shared/rustc_wrapper" self["HOMEBREW_RUSTFLAGS"] = Hardware.rustflags_target_cpu(effective_arch) self["PATH"] = determine_path self["PKG_CONFIG_PATH"] = determine_pkg_config_path self["PKG_CONFIG_LIBDIR"] = determine_pkg_config_libdir || "" self["HOMEBREW_CCCFG"] = determine_cccfg self["HOMEBREW_OPTIMIZATION_LEVEL"] = compiler.match?(GNU_GCC_REGEXP) ? "O2" : "Os" self["HOMEBREW_BREW_FILE"] = HOMEBREW_BREW_FILE.to_s self["HOMEBREW_PREFIX"] = HOMEBREW_PREFIX.to_s self["HOMEBREW_CELLAR"] = HOMEBREW_CELLAR.to_s self["HOMEBREW_OPT"] = "#{HOMEBREW_PREFIX}/opt" self["HOMEBREW_TEMP"] = HOMEBREW_TEMP.to_s self["HOMEBREW_OPTFLAGS"] = determine_optflags self["HOMEBREW_ARCHFLAGS"] = "" self["HOMEBREW_MAKE_JOBS"] = determine_make_jobs.to_s self["CMAKE_PREFIX_PATH"] = determine_cmake_prefix_path self["CMAKE_FRAMEWORK_PATH"] = determine_cmake_frameworks_path self["CMAKE_INCLUDE_PATH"] = determine_cmake_include_path self["CMAKE_LIBRARY_PATH"] = determine_cmake_library_path self["ACLOCAL_PATH"] = determine_aclocal_path self["M4"] = "#{HOMEBREW_PREFIX}/opt/m4/bin/m4" if deps.any? { |d| d.name == "libtool" } self["HOMEBREW_ISYSTEM_PATHS"] = determine_isystem_paths self["HOMEBREW_INCLUDE_PATHS"] = determine_include_paths self["HOMEBREW_LIBRARY_PATHS"] = determine_library_paths self["HOMEBREW_DEPENDENCIES"] = determine_dependencies self["HOMEBREW_FORMULA_PREFIX"] = @formula.prefix unless @formula.nil? # Prevent the OpenSSL rust crate from building a vendored OpenSSL. # https://github.com/sfackler/rust-openssl/blob/994e5ff8c63557ab2aa85c85cc6956b0b0216ca7/openssl/src/lib.rs#L65 self["OPENSSL_NO_VENDOR"] = "1" # Prevent Go from automatically downloading a newer toolchain than the one that we have. # https://tip.golang.org/doc/toolchain self["GOTOOLCHAIN"] = "local" # Prevent maturin from automatically downloading its own rust self["MATURIN_NO_INSTALL_RUST"] = "1" # Prevent Python packages from using bundled libraries by default. # Currently for hidapi, pyzmq and pynacl self["HIDAPI_SYSTEM_HIDAPI"] = "1" self["PYZMQ_NO_BUNDLE"] = "1" self["SODIUM_INSTALL"] = "system" set_debug_symbols if debug_symbols # The HOMEBREW_CCCFG ENV variable is used by the ENV/cc tool to control # compiler flag stripping. It consists of a string of characters which act # as flags. Some of these flags are mutually exclusive. # # O - Enables argument refurbishing. Only active under the # make/bsdmake wrappers currently. # x - Enable C++11 mode. # g - Enable "-stdlib=libc++" for clang. # h - Enable "-stdlib=libstdc++" for clang. # K - Don't strip -arch <arch>, -m32, or -m64 # d - Don't strip -march=<target>. Use only in formulae that # have runtime detection of CPU features. # D - Generate debugging information # w - Pass `-no_weak_imports` to the linker # f - Pass `-no_fixup_chains` to `ld` whenever it # is invoked with `-undefined dynamic_lookup` # o - Pass `-oso_prefix` to `ld` whenever it is invoked # c - Pass `-ld_classic` to `ld` whenever it is invoked # with `-dead_strip_dylibs` # b - Pass `-mbranch-protection=standard` to the compiler # # These flags will also be present: # a - apply fix for apr-1-config path end |
© 2009–present Homebrew contributors
Licensed under the BSD 2-Clause License.
https://docs.brew.sh/rubydoc/Superenv.html