Spec-Zone.ru › Homebrew

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

Параметры:

  • brewed (Boolean) (по умолчанию: true)

Возвращает:

  • (String)


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

Параметры:

  • conf_path (::Pathname, String) (по умолчанию: "ld.so.conf")
  • brewed (Boolean) (по умолчанию: true)

Возвращает:

  • (Array<String>)


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

Параметры:

  • brewed (Boolean) (по умолчанию: true)

Возвращает:

  • (String)


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

Параметры:

  • brewed (Boolean) (по умолчанию: true)

Возвращает:

  • (Array<String>)


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, если он не найден

Возвращает:

  • (::Pathname, 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

Spec-Zone.ru

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