Модуль: OS::Linux::Ld Закрытый
- Определён в:
- os/linux/ld.rb
Обзор
Этот модуль является частью закрытого API. Этот модуль можно использовать только в репозитории Homebrew/brew. По возможности сторонним разработчикам следует избегать использования этого модуля, поскольку он может быть удалён или изменён без предупреждения.
Вспомогательные функции для получения информации о ld.
Краткое описание констант свернуть
- DYNAMIC_LINKERS =
Эта константа является частью закрытого API. Эту константу можно использовать только в репозитории Homebrew/brew. По возможности сторонним разработчикам следует избегать использования этой константы, поскольку она может быть удалена или изменена без предупреждения.
Список известных путей к динамическому компоновщику хост-системы Linux, если версия glibc в хост-системе достаточно нова. Brew не сможет создать символическую ссылку для ld.so, если компоновщик хост-системы не найден в этом списке.
%w[/lib64/ld-linux-x86-64.so.2/lib64/ld64.so.2/lib/ld-linux.so.3/lib/ld-linux.so.2/lib/ld-linux-aarch64.so.1/lib/ld-linux-armhf.so.3/system/bin/linker64/system/bin/linker].freeze
Краткое описание методов класса свернуть
- .ld_so_diagnostics(brewed: true) ⇒ String закрытый
- .library_paths(conf_path = "ld.so.conf", brewed: true) ⇒ Array<String> закрытый
- .sysconfdir(brewed: true) ⇒ String закрытый
- .system_dirs(brewed: true) ⇒ Array<String> закрытый
- .system_ld_so ⇒ ::Pathname? закрытый
Путь к динамическому компоновщику системы или
nil, если он не найден.
Подробное описание методов класса
.ld_so_diagnostics(brewed: true) ⇒ String
Этот метод является частью закрытого API. Этот метод можно использовать только в репозитории Homebrew/brew. По возможности сторонним разработчикам следует избегать использования этого метода, поскольку он может быть удалён или изменён без предупреждения.
33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 | # File 'os/linux/ld.rb', line 33 def self.ld_so_diagnostics(brewed: true) @ld_so_diagnostics ||= T.let({}, T.nilable(T::Hash[Pathname, T.nilable(String)])) ld_so_target = if brewed ld_so = HOMEBREW_PREFIX/"lib/ld.so" return "" unless ld_so.exist? ld_so.readlink else ld_so = system_ld_so return "" unless ld_so&.exist? ld_so end @ld_so_diagnostics[ld_so_target] ||= begin ld_so_output = Utils.popen_read(ld_so, "--list-diagnostics") ld_so_output if $CHILD_STATUS.success? end @ld_so_diagnostics[ld_so_target].to_s end |
.library_paths(conf_path = "ld.so.conf", brewed: true) ⇒ Array<String>
Этот метод является частью закрытого API. Этот метод можно использовать только в репозитории Homebrew/brew. По возможности сторонним разработчикам следует избегать использования этого метода, поскольку он может быть удалён или изменён без предупреждения.
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 | # File 'os/linux/ld.rb', line 81 def self.library_paths(conf_path = "ld.so.conf", brewed: true) conf_file = Pathname(sysconfdir(brewed:))/conf_path return [] unless conf_file.exist? return [] unless conf_file.file? return [] unless conf_file.readable? @library_paths_cache ||= T.let({}, T.nilable(T::Hash[String, T::Array[String]])) cache_key = conf_file.to_s if (cached_library_path_contents = @library_paths_cache[cache_key]) return cached_library_path_contents end paths = Set.new directory = conf_file.realpath.dirname conf_file.open("r") do |file| file.each_line do |line| # Remove comments and leading/trailing whitespace line.strip! line.sub!(/\s*#.*$/, "") if line.start_with?(/\s*include\s+/) wildcard = Pathname(line.sub(/^\s*include\s+/, "")).(directory) Dir.glob(wildcard.to_s).each do |include_file| paths += library_paths(include_file) end elsif line.empty? next else paths << line end end end @library_paths_cache[cache_key] = paths.to_a end |
.sysconfdir(brewed: true) ⇒ String
Этот метод является частью закрытого API. Этот метод можно использовать только в репозитории Homebrew/brew. По возможности сторонним разработчикам следует избегать использования этого метода, поскольку он может быть удалён или изменён без предупреждения.
57 58 59 60 61 62 63 64 | # File 'os/linux/ld.rb', line 57 def self.sysconfdir(brewed: true) fallback_sysconfdir = "/etc" match = ld_so_diagnostics(brewed:).match(/path.sysconfdir="(.+)"/) return fallback_sysconfdir unless match match.captures.compact.first || fallback_sysconfdir end |
.system_dirs(brewed: true) ⇒ Array<String>
Этот метод является частью закрытого API. Этот метод можно использовать только в репозитории Homebrew/brew. По возможности сторонним разработчикам следует избегать использования этого метода, поскольку он может быть удалён или изменён без предупреждения.
67 68 69 70 71 72 73 74 75 76 77 78 | # File 'os/linux/ld.rb', line 67 def self.system_dirs(brewed: true) dirs = [] ld_so_diagnostics(brewed:).split("\n").each do |line| match = line.match(/path.system_dirs\[0x.*\]="(.*)"/) next unless match dirs << match.captures.compact.first end dirs end |
.system_ld_so ⇒ ::Pathname?
Этот метод является частью закрытого API. Этот метод можно использовать только в репозитории Homebrew/brew. По возможности сторонним разработчикам следует избегать использования этого метода, поскольку он может быть удалён или изменён без предупреждения.
Путь к динамическому компоновщику системы или nil, если он не найден
24 25 26 27 28 29 30 | # File 'os/linux/ld.rb', line 24 def self.system_ld_so @system_ld_so ||= T.let(nil, T.nilable(::Pathname)) @system_ld_so ||= begin linker = DYNAMIC_LINKERS.find { |s| File.executable? s } Pathname(linker) if linker end end |
© 2009–present Homebrew contributors
Licensed under the BSD 2-Clause License.
https://docs.brew.sh/rubydoc/OS/Linux/Ld.html