Revert "mach: Avoid reopening the file for relocation"
This commit is contained in:
parent
0ba9d9ccd7
commit
e8da9613fb
@ -2,10 +2,7 @@ class Keg
|
|||||||
def fix_dynamic_linkage
|
def fix_dynamic_linkage
|
||||||
mach_o_files.each do |file|
|
mach_o_files.each do |file|
|
||||||
file.ensure_writable do
|
file.ensure_writable do
|
||||||
if file.dylib?
|
change_dylib_id(dylib_id_for(file), file) if file.dylib?
|
||||||
@require_relocation = true
|
|
||||||
file.change_dylib_id(dylib_id_for(file))
|
|
||||||
end
|
|
||||||
|
|
||||||
each_install_name_for(file) do |bad_name|
|
each_install_name_for(file) do |bad_name|
|
||||||
# Don't fix absolute paths unless they are rooted in the build directory
|
# Don't fix absolute paths unless they are rooted in the build directory
|
||||||
@ -14,9 +11,7 @@ class Keg
|
|||||||
!bad_name.start_with?(HOMEBREW_TEMP.realpath.to_s)
|
!bad_name.start_with?(HOMEBREW_TEMP.realpath.to_s)
|
||||||
|
|
||||||
new_name = fixed_name(file, bad_name)
|
new_name = fixed_name(file, bad_name)
|
||||||
|
change_install_name(bad_name, new_name, file) unless new_name == bad_name
|
||||||
@require_relocation = true
|
|
||||||
file.change_install_name(bad_name, new_name, file)
|
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
@ -28,9 +23,8 @@ class Keg
|
|||||||
mach_o_files.each do |file|
|
mach_o_files.each do |file|
|
||||||
file.ensure_writable do
|
file.ensure_writable do
|
||||||
if file.dylib?
|
if file.dylib?
|
||||||
@require_relocation = true
|
|
||||||
id = dylib_id_for(file).sub(relocation.old_prefix, relocation.new_prefix)
|
id = dylib_id_for(file).sub(relocation.old_prefix, relocation.new_prefix)
|
||||||
file.change_dylib_id(id)
|
change_dylib_id(id, file)
|
||||||
end
|
end
|
||||||
|
|
||||||
each_install_name_for(file) do |old_name|
|
each_install_name_for(file) do |old_name|
|
||||||
@ -40,8 +34,7 @@ class Keg
|
|||||||
new_name = old_name.sub(relocation.old_prefix, relocation.new_prefix)
|
new_name = old_name.sub(relocation.old_prefix, relocation.new_prefix)
|
||||||
end
|
end
|
||||||
|
|
||||||
@require_relocation = true
|
change_install_name(old_name, new_name, file) if new_name
|
||||||
file.change_install_name(old_name, new_name) if new_name
|
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
@ -5,6 +5,7 @@ require "os/mac/xcode"
|
|||||||
require "os/mac/xquartz"
|
require "os/mac/xquartz"
|
||||||
require "os/mac/pathname"
|
require "os/mac/pathname"
|
||||||
require "os/mac/sdk"
|
require "os/mac/sdk"
|
||||||
|
require "os/mac/keg"
|
||||||
|
|
||||||
module OS
|
module OS
|
||||||
module Mac
|
module Mac
|
||||||
|
29
Library/Homebrew/os/mac/keg.rb
Normal file
29
Library/Homebrew/os/mac/keg.rb
Normal file
@ -0,0 +1,29 @@
|
|||||||
|
class Keg
|
||||||
|
def change_dylib_id(id, file)
|
||||||
|
return if file.dylib_id == id
|
||||||
|
@require_relocation = true
|
||||||
|
puts "Changing dylib ID of #{file}\n from #{file.dylib_id}\n to #{id}" if ARGV.debug?
|
||||||
|
MachO::Tools.change_dylib_id(file, id, strict: false)
|
||||||
|
rescue MachO::MachOError
|
||||||
|
onoe <<-EOS.undent
|
||||||
|
Failed changing dylib ID of #{file}
|
||||||
|
from #{file.dylib_id}
|
||||||
|
to #{id}
|
||||||
|
EOS
|
||||||
|
raise
|
||||||
|
end
|
||||||
|
|
||||||
|
def change_install_name(old, new, file)
|
||||||
|
return if old == new
|
||||||
|
@require_relocation = true
|
||||||
|
puts "Changing install name in #{file}\n from #{old}\n to #{new}" if ARGV.debug?
|
||||||
|
MachO::Tools.change_install_name(file, old, new, strict: false)
|
||||||
|
rescue MachO::MachOError
|
||||||
|
onoe <<-EOS.undent
|
||||||
|
Failed changing install name in #{file}
|
||||||
|
from #{old}
|
||||||
|
to #{new}
|
||||||
|
EOS
|
||||||
|
raise
|
||||||
|
end
|
||||||
|
end
|
@ -61,34 +61,6 @@ module MachOShim
|
|||||||
macho.dylib_id
|
macho.dylib_id
|
||||||
end
|
end
|
||||||
|
|
||||||
def change_dylib_id(id)
|
|
||||||
return if dylib_id == id
|
|
||||||
puts "Changing dylib ID of #{self}\n from #{dylib_id}\n to #{id}" if ARGV.debug?
|
|
||||||
macho.change_dylib_id(id, strict: false)
|
|
||||||
macho.write!
|
|
||||||
rescue MachO::MachOError
|
|
||||||
odie <<-EOS.undent
|
|
||||||
Failed changing dylib ID of #{self}
|
|
||||||
from #{file.dylib_id}
|
|
||||||
to #{id}
|
|
||||||
EOS
|
|
||||||
raise
|
|
||||||
end
|
|
||||||
|
|
||||||
def change_install_name(old, new)
|
|
||||||
return if old == new
|
|
||||||
puts "Changing install name in #{self}\n from #{old}\n to #{new}" if ARGV.debug?
|
|
||||||
macho.change_install_name(old, new, strict: false)
|
|
||||||
macho.write!
|
|
||||||
rescue MachO::MachOError
|
|
||||||
odie <<-EOS.undent
|
|
||||||
Failed changing install name in #{self}
|
|
||||||
from #{old}
|
|
||||||
to #{new}
|
|
||||||
EOS
|
|
||||||
raise
|
|
||||||
end
|
|
||||||
|
|
||||||
def archs
|
def archs
|
||||||
mach_data.map { |m| m.fetch :arch }.extend(ArchitectureListExtension)
|
mach_data.map { |m| m.fetch :arch }.extend(ArchitectureListExtension)
|
||||||
end
|
end
|
||||||
|
Loading…
x
Reference in New Issue
Block a user