diff options
Diffstat (limited to 'Library')
| -rwxr-xr-x | Library/Homebrew/install.rb | 20 | ||||
| -rw-r--r-- | Library/Homebrew/keg_fix_install_names.rb | 11 |
2 files changed, 18 insertions, 13 deletions
diff --git a/Library/Homebrew/install.rb b/Library/Homebrew/install.rb index d436fb853..ca4e6663b 100755 --- a/Library/Homebrew/install.rb +++ b/Library/Homebrew/install.rb @@ -120,16 +120,6 @@ def install f keg = Keg.new f.prefix begin - keg.fix_install_names - rescue Exception => e - onoe "Failed to fix install names" - puts "The formula built, but you may encounter issues using it or linking other" - puts "formula against it." - ohai e, e.backtrace if ARGV.debug? - show_summary_heading = true - end - - begin require 'cleaner' Cleaner.new f if not f.pouring rescue Exception => e @@ -204,6 +194,16 @@ def install f end show_summary_heading = true end + + begin + keg.fix_install_names + rescue Exception => e + onoe "Failed to fix install names" + puts "The formula built, but you may encounter issues using it or linking other" + puts "formula against it." + ohai e, e.backtrace if ARGV.debug? + show_summary_heading = true + end end ohai "Summary" if ARGV.verbose? or show_summary_heading diff --git a/Library/Homebrew/keg_fix_install_names.rb b/Library/Homebrew/keg_fix_install_names.rb index 55cc09395..c23f04adb 100644 --- a/Library/Homebrew/keg_fix_install_names.rb +++ b/Library/Homebrew/keg_fix_install_names.rb @@ -2,6 +2,9 @@ class Keg def fix_install_names dylibs.each do |dylib| bad_install_names_for dylib do |id, bad_names| + # avoid the chmod change if unecessary—I'm not convinced it reverses right + next if bad_names.empty? and id.to_s == dylib.to_s + dylib.ensure_writable do system "install_name_tool", "-id", id, dylib bad_names.each do |bad_name| @@ -30,9 +33,11 @@ class Keg install_names.reject!{ |fn| fn =~ /^@(loader|executable)_path/ } install_names.reject!{ |fn| fn[0,1] == '/' } - unless install_names.empty? and id == dylib # avoid the work if possible - yield dylib, install_names - end + # 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 |
