From 2f181b3f41487c0c2c4459e3dfb5a9e3d256eccb Mon Sep 17 00:00:00 2001 From: Mike McQuaid Date: Mon, 9 Jul 2018 16:09:00 +0100 Subject: [PATCH] link: stop unneeded force linking on Mojave/CLT 10. People are getting in the habit of force-linking things like `zlib` to fix linking/include issues on Mojave (which doesn't install headers to `/usr/include` by default). This way lies madness so encourage people to instead pass the correct compiler flags instead. --- Library/Homebrew/cmd/link.rb | 31 +++++++++++++++++++++---------- 1 file changed, 21 insertions(+), 10 deletions(-) diff --git a/Library/Homebrew/cmd/link.rb b/Library/Homebrew/cmd/link.rb index a412ca2f52..7f863ea9a0 100644 --- a/Library/Homebrew/cmd/link.rb +++ b/Library/Homebrew/cmd/link.rb @@ -27,16 +27,27 @@ module Homebrew ARGV.kegs.each do |keg| keg_only = Formulary.keg_only?(keg.rack) - if HOMEBREW_PREFIX.to_s == "/usr/local" && keg_only && - keg.name.start_with?("openssl", "libressl") - opoo <<~EOS - Refusing to link: #{keg.name} - Linking keg-only #{keg.name} means you may end up linking against the insecure, - deprecated system OpenSSL while using the headers from Homebrew's #{keg.name}. - Instead, pass the full include/library paths to your compiler e.g.: - -I#{HOMEBREW_PREFIX}/opt/#{keg.name}/include -L#{HOMEBREW_PREFIX}/opt/#{keg.name}/lib - EOS - next + if HOMEBREW_PREFIX.to_s == "/usr/local" && keg_only + if keg.name.start_with?("openssl", "libressl") + opoo <<~EOS + Refusing to link: #{keg.name} + Linking keg-only #{keg.name} means you may end up linking against the insecure, + deprecated system OpenSSL while using the headers from Homebrew's #{keg.name}. + Instead, pass the full include/library paths to your compiler e.g.: + -I#{HOMEBREW_PREFIX}/opt/#{keg.name}/include -L#{HOMEBREW_PREFIX}/opt/#{keg.name}/lib + EOS + next + elsif (MacOS.version >= :mojave || + MacOS::Xcode.version >= "10.0" || + MacOS::CLT.version >= "10.0") && + dep_f.keg_only_reason.reason == :provided_by_macos + opoo <<~EOS + Refusing to link macOS-provided software: #{keg.name} + Instead, pass the full include/library paths to your compiler e.g.: + -I#{HOMEBREW_PREFIX}/opt/#{keg.name}/include -L#{HOMEBREW_PREFIX}/opt/#{keg.name}/lib + EOS + next + end elsif keg.linked? opoo "Already linked: #{keg}" puts "To relink: brew unlink #{keg.name} && brew link #{keg.name}"