| 
									
										
										
										
											2017-12-30 18:58:30 +00:00
										 |  |  | require "language/python" | 
					
						
							| 
									
										
										
										
											2017-10-21 20:01:07 +02:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2013-01-01 17:26:50 +00:00
										 |  |  | class Caveats | 
					
						
							| 
									
										
										
										
											2017-06-26 07:30:28 +02:00
										 |  |  |   extend Forwardable | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2013-01-12 13:08:29 -06:00
										 |  |  |   attr_reader :f | 
					
						
							| 
									
										
										
										
											2013-01-01 17:26:50 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2013-01-12 13:08:29 -06:00
										 |  |  |   def initialize(f) | 
					
						
							|  |  |  |     @f = f | 
					
						
							|  |  |  |   end | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |   def caveats | 
					
						
							|  |  |  |     caveats = [] | 
					
						
							| 
									
										
										
										
											2015-10-09 19:43:31 +08:00
										 |  |  |     begin | 
					
						
							| 
									
										
										
										
											2016-09-17 15:17:27 +01:00
										 |  |  |       build = f.build | 
					
						
							|  |  |  |       f.build = Tab.for_formula(f) | 
					
						
							| 
									
										
										
										
											2015-10-09 19:43:31 +08:00
										 |  |  |       s = f.caveats.to_s | 
					
						
							| 
									
										
										
										
											2016-09-17 15:17:27 +01:00
										 |  |  |       caveats << s.chomp + "\n" unless s.empty? | 
					
						
							| 
									
										
										
										
											2015-10-09 19:43:31 +08:00
										 |  |  |     ensure | 
					
						
							|  |  |  |       f.build = build | 
					
						
							|  |  |  |     end | 
					
						
							| 
									
										
										
										
											2015-06-14 19:22:03 -07:00
										 |  |  |     caveats << keg_only_text | 
					
						
							| 
									
										
										
										
											2017-03-07 10:36:57 -08:00
										 |  |  |     caveats << function_completion_caveats(:bash) | 
					
						
							|  |  |  |     caveats << function_completion_caveats(:zsh) | 
					
						
							|  |  |  |     caveats << function_completion_caveats(:fish) | 
					
						
							| 
									
										
										
										
											2013-01-12 13:08:29 -06:00
										 |  |  |     caveats << plist_caveats | 
					
						
							| 
									
										
										
										
											2015-07-05 14:45:26 -07:00
										 |  |  |     caveats << elisp_caveats | 
					
						
							| 
									
										
										
										
											2013-01-12 13:08:29 -06:00
										 |  |  |     caveats.compact.join("\n") | 
					
						
							|  |  |  |   end | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2017-06-26 07:30:28 +02:00
										 |  |  |   delegate [:empty?, :to_s] => :caveats | 
					
						
							| 
									
										
										
										
											2013-01-01 17:26:50 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-07-26 10:49:07 +01:00
										 |  |  |   def keg_only_text(skip_reason: false) | 
					
						
							| 
									
										
										
										
											2015-07-25 15:07:10 +08:00
										 |  |  |     return unless f.keg_only? | 
					
						
							| 
									
										
										
										
											2015-06-14 19:22:03 -07:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-07-26 10:49:07 +01:00
										 |  |  |     s = if skip_reason | 
					
						
							|  |  |  |       "" | 
					
						
							|  |  |  |     else | 
					
						
							|  |  |  |       <<~EOS | 
					
						
							|  |  |  |         #{f.name} is keg-only, which means it was not symlinked into #{HOMEBREW_PREFIX}, | 
					
						
							|  |  |  |         because #{f.keg_only_reason.to_s.chomp}. | 
					
						
							|  |  |  |       EOS | 
					
						
							|  |  |  |     end | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2017-01-25 08:25:16 +00:00
										 |  |  |     if f.bin.directory? || f.sbin.directory? | 
					
						
							| 
									
										
										
										
											2018-07-26 10:49:07 +01:00
										 |  |  |       s << <<~EOS | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         If you need to have #{f.name} first in your PATH run: | 
					
						
							|  |  |  |       EOS | 
					
						
							| 
									
										
										
										
											2017-01-25 08:25:16 +00:00
										 |  |  |       if f.bin.directory? | 
					
						
							| 
									
										
										
										
											2017-04-22 16:28:07 +01:00
										 |  |  |         s << "  #{Utils::Shell.prepend_path_in_profile(f.opt_bin.to_s)}\n" | 
					
						
							| 
									
										
										
										
											2017-01-25 08:25:16 +00:00
										 |  |  |       end | 
					
						
							|  |  |  |       if f.sbin.directory? | 
					
						
							| 
									
										
										
										
											2017-04-22 16:28:07 +01:00
										 |  |  |         s << "  #{Utils::Shell.prepend_path_in_profile(f.opt_sbin.to_s)}\n" | 
					
						
							| 
									
										
										
										
											2017-01-25 08:25:16 +00:00
										 |  |  |       end | 
					
						
							|  |  |  |     end | 
					
						
							| 
									
										
										
										
											2015-06-14 19:22:03 -07:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2017-01-25 08:25:16 +00:00
										 |  |  |     if f.lib.directory? || f.include.directory? | 
					
						
							| 
									
										
										
										
											2018-07-26 10:49:07 +01:00
										 |  |  |       s << <<~EOS | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         For compilers to find #{f.name} you may need to set: | 
					
						
							|  |  |  |       EOS | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |       if f.lib.directory? | 
					
						
							|  |  |  |         s << "  #{Utils::Shell.export_value("LDFLAGS", "-L#{f.opt_lib}")}\n" | 
					
						
							|  |  |  |       end | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |       if f.include.directory? | 
					
						
							|  |  |  |         s << "  #{Utils::Shell.export_value("CPPFLAGS", "-I#{f.opt_include}")}\n" | 
					
						
							|  |  |  |       end | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2017-12-11 06:26:56 +00:00
										 |  |  |       if which("pkg-config", ENV["HOMEBREW_PATH"]) && | 
					
						
							| 
									
										
										
										
											2017-01-25 08:25:16 +00:00
										 |  |  |          ((f.lib/"pkgconfig").directory? || (f.share/"pkgconfig").directory?) | 
					
						
							| 
									
										
										
										
											2018-07-26 10:49:07 +01:00
										 |  |  |         s << <<~EOS | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |           For pkg-config to find #{f.name} you may need to set: | 
					
						
							|  |  |  |         EOS | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         if (f.lib/"pkgconfig").directory? | 
					
						
							|  |  |  |           s << "  #{Utils::Shell.export_value("PKG_CONFIG_PATH", "#{f.opt_lib}/pkgconfig")}\n" | 
					
						
							|  |  |  |         end | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         if (f.share/"pkgconfig").directory? | 
					
						
							|  |  |  |           s << "  #{Utils::Shell.export_value("PKG_CONFIG_PATH", "#{f.opt_share}/pkgconfig")}\n" | 
					
						
							|  |  |  |         end | 
					
						
							| 
									
										
										
										
											2016-09-11 04:49:09 +01:00
										 |  |  |       end | 
					
						
							| 
									
										
										
										
											2015-06-14 19:22:03 -07:00
										 |  |  |     end | 
					
						
							|  |  |  |     s << "\n" | 
					
						
							|  |  |  |   end | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-07-26 10:49:07 +01:00
										 |  |  |   private | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |   def keg | 
					
						
							|  |  |  |     @keg ||= [f.prefix, f.opt_prefix, f.linked_keg].map do |d| | 
					
						
							|  |  |  |       begin | 
					
						
							|  |  |  |         Keg.new(d.resolved_path) | 
					
						
							|  |  |  |       rescue | 
					
						
							|  |  |  |         nil | 
					
						
							|  |  |  |       end | 
					
						
							|  |  |  |     end.compact.first | 
					
						
							|  |  |  |   end | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2017-03-07 10:36:57 -08:00
										 |  |  |   def function_completion_caveats(shell) | 
					
						
							| 
									
										
										
										
											2016-09-22 20:12:28 +02:00
										 |  |  |     return unless keg | 
					
						
							| 
									
										
										
										
											2017-12-11 09:16:39 +00:00
										 |  |  |     return unless which(shell.to_s, ENV["HOMEBREW_PATH"]) | 
					
						
							| 
									
										
										
										
											2017-03-07 10:36:57 -08:00
										 |  |  | 
 | 
					
						
							|  |  |  |     completion_installed = keg.completion_installed?(shell) | 
					
						
							|  |  |  |     functions_installed = keg.functions_installed?(shell) | 
					
						
							|  |  |  |     return unless completion_installed || functions_installed | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     installed = [] | 
					
						
							|  |  |  |     installed << "completions" if completion_installed | 
					
						
							|  |  |  |     installed << "functions" if functions_installed | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2017-12-24 07:59:17 +00:00
										 |  |  |     root_dir = f.keg_only? ? f.opt_prefix : HOMEBREW_PREFIX | 
					
						
							| 
									
										
										
										
											2017-12-21 00:30:06 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2017-03-07 10:36:57 -08:00
										 |  |  |     case shell | 
					
						
							|  |  |  |     when :bash | 
					
						
							| 
									
										
										
										
											2017-10-15 02:28:32 +02:00
										 |  |  |       <<~EOS | 
					
						
							| 
									
										
										
										
											2017-03-07 10:36:57 -08:00
										 |  |  |         Bash completion has been installed to: | 
					
						
							| 
									
										
										
										
											2017-12-21 00:30:06 +00:00
										 |  |  |           #{root_dir}/etc/bash_completion.d | 
					
						
							| 
									
										
										
										
											2017-03-07 10:36:57 -08:00
										 |  |  |       EOS | 
					
						
							|  |  |  |     when :zsh | 
					
						
							| 
									
										
										
										
											2017-10-15 02:28:32 +02:00
										 |  |  |       <<~EOS | 
					
						
							| 
									
										
										
										
											2017-03-07 10:36:57 -08:00
										 |  |  |         zsh #{installed.join(" and ")} have been installed to: | 
					
						
							| 
									
										
										
										
											2017-12-21 00:30:06 +00:00
										 |  |  |           #{root_dir}/share/zsh/site-functions | 
					
						
							| 
									
										
										
										
											2017-03-07 10:36:57 -08:00
										 |  |  |       EOS | 
					
						
							|  |  |  |     when :fish | 
					
						
							|  |  |  |       fish_caveats = "fish #{installed.join(" and ")} have been installed to:" | 
					
						
							| 
									
										
										
										
											2017-12-21 00:30:06 +00:00
										 |  |  |       fish_caveats << "\n  #{root_dir}/share/fish/vendor_completions.d" if completion_installed | 
					
						
							|  |  |  |       fish_caveats << "\n  #{root_dir}/share/fish/vendor_functions.d" if functions_installed | 
					
						
							| 
									
										
										
										
											2017-03-07 10:36:57 -08:00
										 |  |  |       fish_caveats | 
					
						
							|  |  |  |     end | 
					
						
							| 
									
										
										
										
											2016-12-03 11:36:49 -06:00
										 |  |  |   end | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2015-07-05 14:45:26 -07:00
										 |  |  |   def elisp_caveats | 
					
						
							| 
									
										
										
										
											2015-08-11 20:25:33 -07:00
										 |  |  |     return if f.keg_only? | 
					
						
							| 
									
										
										
										
											2016-09-22 20:12:28 +02:00
										 |  |  |     return unless keg | 
					
						
							|  |  |  |     return unless keg.elisp_installed? | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2017-10-15 02:28:32 +02:00
										 |  |  |     <<~EOS | 
					
						
							| 
									
										
										
										
											2016-09-22 20:12:28 +02:00
										 |  |  |       Emacs Lisp files have been installed to: | 
					
						
							|  |  |  |         #{HOMEBREW_PREFIX}/share/emacs/site-lisp/#{f.name} | 
					
						
							|  |  |  |     EOS | 
					
						
							| 
									
										
										
										
											2015-07-05 14:45:26 -07:00
										 |  |  |   end | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2017-10-16 11:15:54 -05:00
										 |  |  |   def plist_caveats; end | 
					
						
							| 
									
										
										
										
											2017-07-20 03:47:02 +05:30
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2017-07-21 06:38:45 +05:30
										 |  |  |   def plist_path | 
					
						
							| 
									
										
										
										
											2017-07-20 03:47:02 +05:30
										 |  |  |     destination = if f.plist_startup | 
					
						
							|  |  |  |       "/Library/LaunchDaemons" | 
					
						
							|  |  |  |     else | 
					
						
							|  |  |  |       "~/Library/LaunchAgents" | 
					
						
							|  |  |  |     end | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     plist_filename = if f.plist | 
					
						
							|  |  |  |       f.plist_path.basename | 
					
						
							|  |  |  |     else | 
					
						
							|  |  |  |       File.basename Dir["#{keg}/*.plist"].first | 
					
						
							|  |  |  |     end | 
					
						
							| 
									
										
										
										
											2017-07-21 06:38:45 +05:30
										 |  |  |     destination_path = Pathname.new(File.expand_path(destination)) | 
					
						
							| 
									
										
										
										
											2017-07-20 03:47:02 +05:30
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2017-07-21 06:38:45 +05:30
										 |  |  |     destination_path/plist_filename | 
					
						
							| 
									
										
										
										
											2017-07-20 03:47:02 +05:30
										 |  |  |   end | 
					
						
							| 
									
										
										
										
											2013-01-01 17:26:50 +00:00
										 |  |  | end | 
					
						
							| 
									
										
										
										
											2017-10-16 11:15:54 -05:00
										 |  |  | 
 | 
					
						
							|  |  |  | require "extend/os/caveats" |