Skip to content

HTTPS clone URL

Subversion checkout URL

You can clone with HTTPS or Subversion.

Download ZIP
Fetching contributors…

Cannot retrieve contributors at this time

48 lines (39 sloc) 1.451 kb
class Keg
def fix_install_names
dylibs.each do |dylib|
bad_install_names_for dylib do |id, bad_names|
dylib.ensure_writable do
system "install_name_tool", "-id", id, dylib
bad_names.each do |bad_name|
# we should be more careful here, check the path we point to exists etc.
system "install_name_tool", "-change", bad_name, "@loader_path/#{bad_name}", dylib
end
end
end
end
end
private
OTOOL_RX = /\t(.*) \(compatibility version (\d+\.)*\d+, current version (\d+\.)*\d+\)/
def bad_install_names_for dylib
dylib = dylib.to_s
ENV['HOMEBREW_DYLIB'] = dylib # solves all shell escaping problems
install_names = `otool -L "$HOMEBREW_DYLIB"`.split "\n"
install_names.shift # first line is fluff
install_names.map!{ |s| OTOOL_RX =~ s && $1 }
id = install_names.shift
install_names.compact!
install_names.reject!{ |fn| fn =~ /^@(loader|executable)_path/ }
install_names.reject!{ |fn| fn[0,1] == '/' }
# the shortpath ensures that library upgrades don’t break installed tools
shortpath = HOMEBREW_PREFIX + Pathname.new(dylib).relative_path_from(self)
id = if shortpath.exist? then shortpath else dylib end
yield id, install_names
end
def dylibs
if (lib = join 'lib').directory?
lib.children.select{ |pn| pn.extname == '.dylib' and not pn.symlink? }
else
[]
end
end
end
Jump to Line
Something went wrong with that request. Please try again.