Module: MachOShim Private

Extended by:
Forwardable, T::Helpers
Included in:
Pathname
Defined in:
os/mac/mach.rb,
sorbet/rbi/dsl/mach_o_shim.rbi

Overview

This module is part of a private API. This module may only be used in the Homebrew/brew repository. Third parties should avoid using this module if possible, as it may be removed or changed without warning.

Pathname extension for dealing with Mach-O files.

Instance Method Summary collapse

Instance Method Details

#archSymbol

This method is part of a private API. This method may only be used in the Homebrew/brew repository. Third parties should avoid using this method if possible, as it may be removed or changed without warning.

Returns:

 153 154 155 156 157 158 159
# File 'os/mac/mach.rb', line 153 def arch case archs.length when 0 then :dunno when 1 then archs.fetch(0) else :universal end end

#archsArray<Symbol>

This method is part of a private API. This method may only be used in the Homebrew/brew repository. Third parties should avoid using this method if possible, as it may be removed or changed without warning.

Returns:

 148 149 150
# File 'os/mac/mach.rb', line 148 def archs mach_data.map { |m| m.fetch :arch } end

#change_dylib_id(id, strict: true) ⇒ void

This method is part of a private API. This method may only be used in the Homebrew/brew repository. Third parties should avoid using this method if possible, as it may be removed or changed without warning.

This method returns an undefined value.

Parameters:

  • id (String)
  • strict (Boolean) (defaults to: true)
 94 95 96 97
# File 'os/mac/mach.rb', line 94 def change_dylib_id(id, strict: true) macho.change_dylib_id(id, { strict: }) macho.write! end

#change_install_name(old, new, strict: true) ⇒ void

This method is part of a private API. This method may only be used in the Homebrew/brew repository. Third parties should avoid using this method if possible, as it may be removed or changed without warning.

This method returns an undefined value.

Parameters:

  • old (String)
  • new (String)
  • strict (Boolean) (defaults to: true)
 100 101 102 103
# File 'os/mac/mach.rb', line 100 def change_install_name(old, new, strict: true) macho.change_install_name(old, new, { strict: }) macho.write! end

#change_rpath(old, new, uniq: false, last: false, strict: true) ⇒ void

This method is part of a private API. This method may only be used in the Homebrew/brew repository. Third parties should avoid using this method if possible, as it may be removed or changed without warning.

This method returns an undefined value.

Parameters:

  • old (String)
  • new (String)
  • uniq (Boolean) (defaults to: false)
  • last (Boolean) (defaults to: false)
  • strict (Boolean) (defaults to: true)
 88 89 90 91
# File 'os/mac/mach.rb', line 88 def change_rpath(old, new, uniq: false, last: false, strict: true) macho.change_rpath(old, new, { uniq:, last:, strict: }) macho.write! end

#delete_rpath(rpath, strict: true) ⇒ void

This method is part of a private API. This method may only be used in the Homebrew/brew repository. Third parties should avoid using this method if possible, as it may be removed or changed without warning.

TODO:

See if the #write! call can be delayed until we know we're not making any changes to the rpaths.

This method returns an undefined value.

Parameters:

  • rpath (String)
  • strict (Boolean) (defaults to: true)
 75 76 77 78 79 80 81 82 83 84 85
# File 'os/mac/mach.rb', line 75 def delete_rpath(rpath, strict: true) candidates = rpaths(resolve_variable_references: false).select do |r| resolve_variable_name(r) == resolve_variable_name(rpath) end # Delete the last instance to avoid changing the order in which rpaths are searched.  rpath_to_delete = candidates.last macho.delete_rpath(rpath_to_delete, { last: true, strict: }) macho.write! end

#dylib?Boolean

This method is part of a private API. This method may only be used in the Homebrew/brew repository. Third parties should avoid using this method if possible, as it may be removed or changed without warning.

Returns:

  • (Boolean)
 187 188 189
# File 'os/mac/mach.rb', line 187 def dylib? mach_data.any? { |m| m.fetch(:type) == :dylib } end

#dylib_id(*args, &block) ⇒ T.untyped

This method is part of a private API. This method may only be used in the Homebrew/brew repository. Third parties should avoid using this method if possible, as it may be removed or changed without warning.

Parameters:

  • args (T.untyped)
  • block (T.untyped)

Returns:

  • (T.untyped)
 10
# File 'sorbet/rbi/dsl/mach_o_shim.rbi', line 10 def dylib_id(*args, &block); end

#dynamically_linked_libraries(except: :none, resolve_variable_references: true) ⇒ Array<String>

This method is part of a private API. This method may only be used in the Homebrew/brew repository. Third parties should avoid using this method if possible, as it may be removed or changed without warning.

Parameters:

  • except (Symbol) (defaults to: :none)
  • resolve_variable_references (Boolean) (defaults to: true)

Returns:

 106 107 108 109 110 111 112 113
# File 'os/mac/mach.rb', line 106 def dynamically_linked_libraries(except: :none, resolve_variable_references: true) lcs = macho.dylib_load_commands lcs.reject! { |lc| lc.flag?(except) } if except != :none names = lcs.map { |lc| lc.name.to_s }.uniq names.map! { resolve_variable_name(_1) } if resolve_variable_references names end

#i386?Boolean

This method is part of a private API. This method may only be used in the Homebrew/brew repository. Third parties should avoid using this method if possible, as it may be removed or changed without warning.

Returns:

  • (Boolean)
 167 168 169
# File 'os/mac/mach.rb', line 167 def i386? arch == :i386 end

#initialize(*args) ⇒ void

This method is part of a private API. This method may only be used in the Homebrew/brew repository. Third parties should avoid using this method if possible, as it may be removed or changed without warning.

Parameters:

  • args (T.untyped)
 16 17 18 19 20 21
# File 'os/mac/mach.rb', line 16 def initialize(*args) @macho = T.let(nil, T.nilable(T.any(MachO::MachOFile, MachO::FatFile))) @mach_data = T.let(nil, T.nilable(T::Array[T::Hash[Symbol, Symbol]])) super end

#mach_o_bundle?Boolean

This method is part of a private API. This method may only be used in the Homebrew/brew repository. Third parties should avoid using this method if possible, as it may be removed or changed without warning.

Returns:

  • (Boolean)
 199 200 201
# File 'os/mac/mach.rb', line 199 def mach_o_bundle? mach_data.any? { |m| m.fetch(:type) == :bundle } end

#mach_o_executable?Boolean Also known as: binary_executable?

This method is part of a private API. This method may only be used in the Homebrew/brew repository. Third parties should avoid using this method if possible, as it may be removed or changed without warning.

Returns:

  • (Boolean)
 192 193 194
# File 'os/mac/mach.rb', line 192 def mach_o_executable? mach_data.any? { |m| m.fetch(:type) == :executable } end

#ppc64?Boolean

This method is part of a private API. This method may only be used in the Homebrew/brew repository. Third parties should avoid using this method if possible, as it may be removed or changed without warning.

Returns:

  • (Boolean)
 182 183 184
# File 'os/mac/mach.rb', line 182 def ppc64? arch == :ppc64 end

#ppc7400?Boolean

This method is part of a private API. This method may only be used in the Homebrew/brew repository. Third parties should avoid using this method if possible, as it may be removed or changed without warning.

Returns:

  • (Boolean)
 177 178 179
# File 'os/mac/mach.rb', line 177 def ppc7400? arch == :ppc7400 end

#resolve_rpath(name) ⇒ String?

This method is part of a private API. This method may only be used in the Homebrew/brew repository. Third parties should avoid using this method if possible, as it may be removed or changed without warning.

Parameters:

Returns:

 138 139 140 141 142 143 144 145
# File 'os/mac/mach.rb', line 138 def resolve_rpath(name) target = T.let(nil, T.nilable(String)) return unless rpaths(resolve_variable_references: true).find do |rpath| File.exist?(target = File.join(rpath, name.delete_prefix("@rpath"))) end target end

#resolve_variable_name(name, resolve_rpaths: true) ⇒ String

This method is part of a private API. This method may only be used in the Homebrew/brew repository. Third parties should avoid using this method if possible, as it may be removed or changed without warning.

Parameters:

  • name (String)
  • resolve_rpaths (Boolean) (defaults to: true)

Returns:

 125 126 127 128 129 130 131 132 133 134 135
# File 'os/mac/mach.rb', line 125 def resolve_variable_name(name, resolve_rpaths: true) if name.start_with? "@loader_path" Pathname(name.sub("@loader_path", dirname.to_s)).cleanpath.to_s elsif name.start_with?("@executable_path") && binary_executable? Pathname(name.sub("@executable_path", dirname.to_s)).cleanpath.to_s elsif resolve_rpaths && name.start_with?("@rpath") && (target = resolve_rpath(name)).present? target else name end end

#rpaths(resolve_variable_references: true) ⇒ Array<String>

This method is part of a private API. This method may only be used in the Homebrew/brew repository. Third parties should avoid using this method if possible, as it may be removed or changed without warning.

Parameters:

  • resolve_variable_references (Boolean) (defaults to: true)

Returns:

 116 117 118 119 120 121 122
# File 'os/mac/mach.rb', line 116 def rpaths(resolve_variable_references: true) names = macho.rpaths # Don't recursively resolve rpaths to avoid infinite loops.  names.map! { |name| resolve_variable_name(name, resolve_rpaths: false) } if resolve_variable_references names end

#universal?Boolean

This method is part of a private API. This method may only be used in the Homebrew/brew repository. Third parties should avoid using this method if possible, as it may be removed or changed without warning.

Returns:

  • (Boolean)
 162 163 164
# File 'os/mac/mach.rb', line 162 def universal? arch == :universal end

#x86_64?Boolean

This method is part of a private API. This method may only be used in the Homebrew/brew repository. Third parties should avoid using this method if possible, as it may be removed or changed without warning.

Returns:

  • (Boolean)
 172 173 174
# File 'os/mac/mach.rb', line 172 def x86_64? arch == :x86_64 end