aboutsummaryrefslogtreecommitdiffstats
path: root/Library/Homebrew
diff options
context:
space:
mode:
Diffstat (limited to 'Library/Homebrew')
-rw-r--r--Library/Homebrew/keg_relocate.rb7
1 files changed, 6 insertions, 1 deletions
diff --git a/Library/Homebrew/keg_relocate.rb b/Library/Homebrew/keg_relocate.rb
index b1a72f1ef..be41841f1 100644
--- a/Library/Homebrew/keg_relocate.rb
+++ b/Library/Homebrew/keg_relocate.rb
@@ -157,10 +157,15 @@ class Keg
end
def mach_o_files
+ hardlinks = Set.new
mach_o_files = []
path.find do |pn|
next if pn.symlink? || pn.directory?
- mach_o_files << pn if pn.dylib? || pn.mach_o_bundle? || pn.mach_o_executable?
+ next unless pn.dylib? || pn.mach_o_bundle? || pn.mach_o_executable?
+ # if we've already processed a file, ignore its hardlinks (which have the same dev ID and inode)
+ # this prevents relocations from being performed on a binary more than once
+ next unless hardlinks.add? [pn.stat.dev, pn.stat.ino]
+ mach_o_files << pn
end
mach_o_files