2025-09-09 15:07:35 +02:00
|
|
|
# typed: strict
|
2019-04-19 15:38:03 +09:00
|
|
|
# frozen_string_literal: true
|
|
|
|
|
2017-09-27 02:08:23 -07:00
|
|
|
class Keg
|
2025-09-09 18:13:13 +02:00
|
|
|
sig { params(path: Pathname).void }
|
|
|
|
def initialize(path)
|
|
|
|
super
|
|
|
|
|
2025-09-09 19:51:37 +02:00
|
|
|
@require_relocation = T.let(false, T::Boolean)
|
2025-09-09 18:13:13 +02:00
|
|
|
end
|
|
|
|
|
2023-09-08 00:52:35 -07:00
|
|
|
sig { params(id: String, file: Pathname).returns(T::Boolean) }
|
2017-09-27 02:08:23 -07:00
|
|
|
def change_dylib_id(id, file)
|
2023-09-08 00:52:35 -07:00
|
|
|
return false if file.dylib_id == id
|
2018-09-17 02:45:00 +02:00
|
|
|
|
2025-09-09 18:13:13 +02:00
|
|
|
@require_relocation = true
|
2020-08-02 14:32:31 +02:00
|
|
|
odebug "Changing dylib ID of #{file}\n from #{file.dylib_id}\n to #{id}"
|
2025-09-09 19:51:37 +02:00
|
|
|
file.change_dylib_id(id, strict: false)
|
2023-09-08 00:52:35 -07:00
|
|
|
true
|
2017-09-27 02:08:23 -07:00
|
|
|
rescue MachO::MachOError
|
2017-10-15 02:28:32 +02:00
|
|
|
onoe <<~EOS
|
2017-09-27 02:08:23 -07:00
|
|
|
Failed changing dylib ID of #{file}
|
|
|
|
from #{file.dylib_id}
|
|
|
|
to #{id}
|
|
|
|
EOS
|
|
|
|
raise
|
|
|
|
end
|
|
|
|
|
2023-09-08 00:52:35 -07:00
|
|
|
sig { params(old: String, new: String, file: Pathname).returns(T::Boolean) }
|
2017-09-27 02:08:23 -07:00
|
|
|
def change_install_name(old, new, file)
|
2023-09-08 00:52:35 -07:00
|
|
|
return false if old == new
|
2018-09-17 02:45:00 +02:00
|
|
|
|
2025-09-09 18:13:13 +02:00
|
|
|
@require_relocation = true
|
2020-08-02 14:32:31 +02:00
|
|
|
odebug "Changing install name in #{file}\n from #{old}\n to #{new}"
|
2025-09-09 19:51:37 +02:00
|
|
|
file.change_install_name(old, new, strict: false)
|
2023-09-08 00:52:35 -07:00
|
|
|
true
|
2017-09-27 02:08:23 -07:00
|
|
|
rescue MachO::MachOError
|
2017-10-15 02:28:32 +02:00
|
|
|
onoe <<~EOS
|
2017-09-27 02:08:23 -07:00
|
|
|
Failed changing install name in #{file}
|
|
|
|
from #{old}
|
|
|
|
to #{new}
|
|
|
|
EOS
|
|
|
|
raise
|
|
|
|
end
|
2020-11-10 23:52:33 +01:00
|
|
|
|
2025-09-09 15:07:35 +02:00
|
|
|
sig { params(old: String, new: String, file: Pathname).returns(T::Boolean) }
|
2021-05-05 21:37:02 +01:00
|
|
|
def change_rpath(old, new, file)
|
2023-09-08 00:52:35 -07:00
|
|
|
return false if old == new
|
2021-05-05 21:37:02 +01:00
|
|
|
|
2025-09-09 18:13:13 +02:00
|
|
|
@require_relocation = true
|
2021-05-05 21:37:02 +01:00
|
|
|
odebug "Changing rpath in #{file}\n from #{old}\n to #{new}"
|
2025-09-09 19:51:37 +02:00
|
|
|
file.change_rpath(old, new, strict: false)
|
2023-09-08 00:52:35 -07:00
|
|
|
true
|
2021-05-05 21:37:02 +01:00
|
|
|
rescue MachO::MachOError
|
|
|
|
onoe <<~EOS
|
|
|
|
Failed changing rpath in #{file}
|
|
|
|
from #{old}
|
|
|
|
to #{new}
|
|
|
|
EOS
|
|
|
|
raise
|
|
|
|
end
|
|
|
|
|
2023-09-08 00:52:35 -07:00
|
|
|
sig { params(rpath: String, file: MachOShim).returns(T::Boolean) }
|
2021-05-14 00:00:01 +01:00
|
|
|
def delete_rpath(rpath, file)
|
|
|
|
odebug "Deleting rpath #{rpath} in #{file}"
|
2025-09-09 19:51:37 +02:00
|
|
|
file.delete_rpath(rpath, strict: false)
|
2023-09-08 00:52:35 -07:00
|
|
|
true
|
2021-05-14 00:00:01 +01:00
|
|
|
rescue MachO::MachOError
|
|
|
|
onoe <<~EOS
|
|
|
|
Failed deleting rpath #{rpath} in #{file}
|
|
|
|
EOS
|
|
|
|
raise
|
|
|
|
end
|
2017-09-27 02:08:23 -07:00
|
|
|
end
|