diff --git a/Library/Homebrew/keg.rb b/Library/Homebrew/keg.rb index 7b4ad84fd0..04d1be8e19 100644 --- a/Library/Homebrew/keg.rb +++ b/Library/Homebrew/keg.rb @@ -115,7 +115,6 @@ class Keg < Pathname link_dir('bin', mode) {:skip_dir} link_dir('sbin', mode) {:skip_dir} link_dir('include', mode) {:link} - link_dir('Frameworks', mode) { :link } link_dir('share', mode) do |path| case path.to_s @@ -148,6 +147,18 @@ class Keg < Pathname end end + link_dir('Frameworks', mode) do |path| + # Frameworks contain symlinks pointing into a subdir, so we have to use + # the :link strategy. However, for Foo.framework and + # Foo.framework/Versions we have to use :mkpath so that multiple formulae + # can link their versions into it and `brew [un]link` works. + if path.to_s =~ /[^\/]*\.framework(\/Versions)?$/ + :mkpath + else + :link + end + end + unless mode.dry_run linked_keg_record.make_relative_symlink(self) optlink