Spec-Zone.ru › Homebrew

Модуль: Superenv Приватный

Включает:
OS::Linux::Superenv, OS::Mac::Superenv, SharedEnvExtension, Utils::Output::Mixin
Включён в:
Sorbet::Private::Static::ENVClass
Определён в:
extend/ENV/super.rb

Обзор

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

Почему superenv?

  1. Указывать только нужное нам окружение (без LDFLAGS для cmake)
  2. Применять параметры, специфичные для компилятора, только при вызове этого компилятора
  3. Передавать все пути включаемых файлов и библиотек при создании экземпляра cc (меньше ошибок)
  4. Адаптировать использование цепочки инструментов к конкретным версиям Xcode
  5. Удалять флаги, которые нам не нужны или могут нарушить сборку
  6. Более простой код
  7. Более простые формулы, которые просто работают
  8. Конфигурация цепочки инструментов, не зависящая от системы сборки

Краткое описание констант

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

#bottle_arch, #build_bottle

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

  • .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

#effective_arch

Методы, включённые из 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. Сторонним разработчикам следует по возможности избегать использования этого метода, поскольку он может быть удалён или изменён без предупреждения.

Возвращает:

  • (Array<Formula>)


26
27
28
# File 'extend/ENV/super.rb', line 26

def deps
  @deps
end

#keg_only_deps ⇒ Array<Formula>

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

Возвращает:

  • (Array<Formula>)


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. Сторонним разработчикам следует по возможности избегать использования этого метода, поскольку он может быть удалён или изменён без предупреждения.

Возвращает:

  • (Array<Formula>)


29
30
31
# File 'extend/ENV/super.rb', line 29

def run_time_deps
  @run_time_deps
end

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

.bin ⇒ Pathname?

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

Возвращает:

  • (Pathname, nil)


47
# File 'extend/ENV/super.rb', line 47

def self.bin; end

.extended(base) ⇒ void

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

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

Параметры:

  • base (Superenv)


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.

Возвращает:

  • (Pathname)


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 удаляется только на время выполнения блока и восстанавливается после его завершения.

Параметры:

  • block (T.proc.returns(T.untyped), nil)

Возвращает:

  • (T.untyped)


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. Третьим сторонам по возможности следует избегать использования этого метода, поскольку он может быть удалён или изменён без предупреждения.

Возвращает:

  • (Integer)


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. Третьим сторонам по возможности следует избегать использования этого метода, поскольку он может быть удалён или изменён без предупреждения.

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

Параметры:

  • block (T.proc.void, nil)


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. Третьим сторонам по возможности следует избегать использования этого метода, поскольку он может быть удалён или изменён без предупреждения.

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

Параметры:

  • block (T.proc.void, nil)


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. Сторонним разработчикам по возможности следует избегать использования этого метода, так как он может быть удалён или изменён без предупреждения.

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

Параметры:

  • formula (Formula, nil) (по умолчанию: nil)
  • cc (String, nil) (по умолчанию: nil)
  • build_bottle (Boolean, nil) (по умолчанию: false)
  • bottle_arch (String, nil) (по умолчанию: nil)
  • testing_formula (Boolean) (по умолчанию: false)
  • debug_symbols (Boolean, nil) (по умолчанию: false)


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

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API