| 
									
										
										
										
											2013-01-01 17:26:50 +00:00
										 |  |  | class Caveats | 
					
						
							| 
									
										
										
										
											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 = [] | 
					
						
							| 
									
										
										
										
											2014-11-06 18:54:52 +08:00
										 |  |  |     s = f.caveats.to_s | 
					
						
							|  |  |  |     caveats << s.chomp + "\n" if s.length > 0
 | 
					
						
							| 
									
										
										
										
											2015-06-14 19:22:03 -07:00
										 |  |  |     caveats << keg_only_text | 
					
						
							| 
									
										
										
										
											2013-01-12 13:08:29 -06:00
										 |  |  |     caveats << bash_completion_caveats | 
					
						
							|  |  |  |     caveats << zsh_completion_caveats | 
					
						
							| 
									
										
										
										
											2015-05-17 01:12:12 +02:00
										 |  |  |     caveats << fish_completion_caveats | 
					
						
							| 
									
										
										
										
											2013-01-12 13:08:29 -06:00
										 |  |  |     caveats << plist_caveats | 
					
						
							| 
									
										
										
										
											2014-01-04 13:18:27 +00:00
										 |  |  |     caveats << python_caveats | 
					
						
							| 
									
										
										
										
											2014-01-18 21:58:01 +00:00
										 |  |  |     caveats << app_caveats | 
					
						
							| 
									
										
										
										
											2013-01-12 13:08:29 -06:00
										 |  |  |     caveats.compact.join("\n") | 
					
						
							|  |  |  |   end | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |   def empty? | 
					
						
							|  |  |  |     caveats.empty? | 
					
						
							|  |  |  |   end | 
					
						
							| 
									
										
										
										
											2013-01-01 17:26:50 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2013-01-12 13:08:29 -06:00
										 |  |  |   private | 
					
						
							| 
									
										
										
										
											2013-01-01 17:26:50 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2013-01-12 13:08:29 -06:00
										 |  |  |   def keg | 
					
						
							|  |  |  |     @keg ||= [f.prefix, f.opt_prefix, f.linked_keg].map do |d| | 
					
						
							| 
									
										
										
										
											2014-04-05 12:17:19 -05:00
										 |  |  |       Keg.new(d.resolved_path) rescue nil | 
					
						
							| 
									
										
										
										
											2013-01-12 13:08:29 -06:00
										 |  |  |     end.compact.first | 
					
						
							|  |  |  |   end | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2015-06-14 19:22:03 -07:00
										 |  |  |   def keg_only_text | 
					
						
							|  |  |  |     return "" unless f.keg_only? | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     s = "This formula is keg-only, which means it was not symlinked into #{HOMEBREW_PREFIX}." | 
					
						
							|  |  |  |     s << "\n\n#{f.keg_only_reason.to_s}" | 
					
						
							|  |  |  |     if f.lib.directory? or f.include.directory? | 
					
						
							|  |  |  |       s << | 
					
						
							|  |  |  |         <<-EOS.undent_________________________________________________________72
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         Generally there are no consequences of this for you. If you build your | 
					
						
							|  |  |  |         own software and it requires this formula, you'll need to add to your | 
					
						
							|  |  |  |         build variables: | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         EOS | 
					
						
							|  |  |  |       s << "    LDFLAGS:  -L#{f.opt_lib}\n" if f.lib.directory? | 
					
						
							|  |  |  |       s << "    CPPFLAGS: -I#{f.opt_include}\n" if f.include.directory? | 
					
						
							|  |  |  |     end | 
					
						
							|  |  |  |     s << "\n" | 
					
						
							|  |  |  |   end | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2013-01-12 13:08:29 -06:00
										 |  |  |   def bash_completion_caveats | 
					
						
							|  |  |  |     if keg and keg.completion_installed? :bash then <<-EOS.undent
 | 
					
						
							|  |  |  |       Bash completion has been installed to: | 
					
						
							|  |  |  |         #{HOMEBREW_PREFIX}/etc/bash_completion.d | 
					
						
							|  |  |  |       EOS | 
					
						
							| 
									
										
										
										
											2013-01-01 17:26:50 +00:00
										 |  |  |     end | 
					
						
							| 
									
										
										
										
											2013-01-12 13:08:29 -06:00
										 |  |  |   end | 
					
						
							| 
									
										
										
										
											2013-01-01 17:26:50 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2013-01-12 13:08:29 -06:00
										 |  |  |   def zsh_completion_caveats | 
					
						
							|  |  |  |     if keg and keg.completion_installed? :zsh then <<-EOS.undent
 | 
					
						
							|  |  |  |       zsh completion has been installed to: | 
					
						
							|  |  |  |         #{HOMEBREW_PREFIX}/share/zsh/site-functions | 
					
						
							|  |  |  |       EOS | 
					
						
							| 
									
										
										
										
											2013-01-01 17:26:50 +00:00
										 |  |  |     end | 
					
						
							| 
									
										
										
										
											2013-01-12 13:08:29 -06:00
										 |  |  |   end | 
					
						
							| 
									
										
										
										
											2013-01-01 17:26:50 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2015-05-17 01:12:12 +02:00
										 |  |  |   def fish_completion_caveats | 
					
						
							|  |  |  |     if keg and keg.completion_installed? :fish and which("fish") then <<-EOS.undent
 | 
					
						
							|  |  |  |       fish completion has been installed to: | 
					
						
							|  |  |  |         #{HOMEBREW_PREFIX}/share/fish/vendor_completions.d | 
					
						
							|  |  |  |       EOS | 
					
						
							|  |  |  |     end | 
					
						
							|  |  |  |   end | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2014-01-04 13:18:27 +00:00
										 |  |  |   def python_caveats | 
					
						
							| 
									
										
										
										
											2014-03-08 12:56:15 +00:00
										 |  |  |     return unless keg | 
					
						
							|  |  |  |     return unless keg.python_site_packages_installed? | 
					
						
							| 
									
										
										
										
											2014-11-02 10:33:03 -08:00
										 |  |  | 
 | 
					
						
							|  |  |  |     s = nil | 
					
						
							|  |  |  |     homebrew_site_packages = Language::Python.homebrew_site_packages | 
					
						
							|  |  |  |     user_site_packages = Language::Python.user_site_packages "python" | 
					
						
							|  |  |  |     pth_file = user_site_packages/"homebrew.pth" | 
					
						
							|  |  |  |     instructions = <<-EOS.undent.gsub(/^/, "  ")
 | 
					
						
							|  |  |  |       mkdir -p #{user_site_packages} | 
					
						
							|  |  |  |       echo 'import site; site.addsitedir("#{homebrew_site_packages}")' >> #{pth_file} | 
					
						
							|  |  |  |     EOS | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     if f.keg_only? | 
					
						
							|  |  |  |       keg_site_packages = f.opt_prefix/"lib/python2.7/site-packages" | 
					
						
							|  |  |  |       unless Language::Python.in_sys_path?("python", keg_site_packages) | 
					
						
							|  |  |  |         s = <<-EOS.undent
 | 
					
						
							|  |  |  |           If you need Python to find bindings for this keg-only formula, run: | 
					
						
							|  |  |  |             echo #{keg_site_packages} >> #{homebrew_site_packages/f.name}.pth | 
					
						
							|  |  |  |         EOS | 
					
						
							|  |  |  |         s += instructions unless Language::Python.reads_brewed_pth_files?("python") | 
					
						
							|  |  |  |       end | 
					
						
							|  |  |  |       return s | 
					
						
							| 
									
										
										
										
											2014-01-04 13:18:27 +00:00
										 |  |  |     end | 
					
						
							| 
									
										
										
										
											2014-11-02 10:33:03 -08:00
										 |  |  | 
 | 
					
						
							|  |  |  |     return if Language::Python.reads_brewed_pth_files?("python") | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     if !Language::Python.in_sys_path?("python", homebrew_site_packages) | 
					
						
							|  |  |  |       s = <<-EOS.undent
 | 
					
						
							|  |  |  |         Python modules have been installed and Homebrew's site-packages is not | 
					
						
							|  |  |  |         in your Python sys.path, so you will not be able to import the modules | 
					
						
							|  |  |  |         this formula installed. If you plan to develop with these modules, | 
					
						
							|  |  |  |         please run: | 
					
						
							|  |  |  |       EOS | 
					
						
							|  |  |  |       s += instructions | 
					
						
							|  |  |  |     elsif keg.python_pth_files_installed? | 
					
						
							|  |  |  |       s = <<-EOS.undent
 | 
					
						
							|  |  |  |         This formula installed .pth files to Homebrew's site-packages and your | 
					
						
							|  |  |  |         Python isn't configured to process them, so you will not be able to | 
					
						
							|  |  |  |         import the modules this formula installed. If you plan to develop | 
					
						
							|  |  |  |         with these modules, please run: | 
					
						
							|  |  |  |       EOS | 
					
						
							|  |  |  |       s += instructions | 
					
						
							| 
									
										
										
										
											2014-01-04 13:18:27 +00:00
										 |  |  |     end | 
					
						
							| 
									
										
										
										
											2014-11-02 10:33:03 -08:00
										 |  |  |     s | 
					
						
							| 
									
										
										
										
											2014-01-04 13:18:27 +00:00
										 |  |  |   end | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2014-01-18 21:58:01 +00:00
										 |  |  |   def app_caveats | 
					
						
							|  |  |  |     if keg and keg.app_installed? | 
					
						
							|  |  |  |       <<-EOS.undent
 | 
					
						
							| 
									
										
										
										
											2014-02-02 10:11:48 +00:00
										 |  |  |         .app bundles were installed. | 
					
						
							| 
									
										
										
										
											2014-12-18 15:13:04 +08:00
										 |  |  |         Run `brew linkapps #{keg.name}` to symlink these to /Applications.
 | 
					
						
							| 
									
										
										
										
											2014-01-18 21:58:01 +00:00
										 |  |  |       EOS | 
					
						
							|  |  |  |     end | 
					
						
							|  |  |  |   end | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2013-01-12 13:08:29 -06:00
										 |  |  |   def plist_caveats | 
					
						
							|  |  |  |     s = [] | 
					
						
							| 
									
										
										
										
											2013-01-01 17:26:50 +00:00
										 |  |  |     if f.plist or (keg and keg.plist_installed?) | 
					
						
							|  |  |  |       destination = f.plist_startup ? '/Library/LaunchDaemons' \ | 
					
						
							|  |  |  |                                     : '~/Library/LaunchAgents' | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2014-11-27 10:48:24 +00:00
										 |  |  |       plist_filename = if f.plist | 
					
						
							|  |  |  |         f.plist_path.basename | 
					
						
							|  |  |  |       else | 
					
						
							| 
									
										
										
										
											2014-11-27 11:00:58 +00:00
										 |  |  |         File.basename Dir["#{keg}/*.plist"].first | 
					
						
							| 
									
										
										
										
											2014-11-27 10:48:24 +00:00
										 |  |  |       end | 
					
						
							| 
									
										
										
										
											2013-01-01 17:26:50 +00:00
										 |  |  |       plist_link = "#{destination}/#{plist_filename}" | 
					
						
							|  |  |  |       plist_domain = f.plist_path.basename('.plist') | 
					
						
							|  |  |  |       destination_path = Pathname.new File.expand_path destination | 
					
						
							|  |  |  |       plist_path = destination_path/plist_filename | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |       # we readlink because this path probably doesn't exist since caveats | 
					
						
							|  |  |  |       # occurs before the link step of installation | 
					
						
							| 
									
										
										
										
											2014-11-02 09:42:15 +00:00
										 |  |  |       # Yosemite security measures mildly tighter rules: | 
					
						
							|  |  |  |       # https://github.com/Homebrew/homebrew/issues/33815 | 
					
						
							| 
									
										
										
										
											2014-09-19 11:19:26 +01:00
										 |  |  |       if !plist_path.file? || !plist_path.symlink? | 
					
						
							| 
									
										
										
										
											2013-01-01 17:26:50 +00:00
										 |  |  |         if f.plist_startup | 
					
						
							| 
									
										
										
										
											2015-05-27 20:40:32 +08:00
										 |  |  |           s << "To have launchd start #{f.full_name} at startup:" | 
					
						
							| 
									
										
										
										
											2013-01-01 17:26:50 +00:00
										 |  |  |           s << "    sudo mkdir -p #{destination}" unless destination_path.directory? | 
					
						
							| 
									
										
										
										
											2014-06-30 20:23:56 -05:00
										 |  |  |           s << "    sudo cp -fv #{f.opt_prefix}/*.plist #{destination}" | 
					
						
							| 
									
										
										
										
											2014-11-02 09:42:15 +00:00
										 |  |  |           s << "    sudo chown root #{plist_link}" | 
					
						
							| 
									
										
										
										
											2013-01-01 17:26:50 +00:00
										 |  |  |         else | 
					
						
							| 
									
										
										
										
											2015-05-27 20:40:32 +08:00
										 |  |  |           s << "To have launchd start #{f.full_name} at login:" | 
					
						
							| 
									
										
										
										
											2013-01-01 17:26:50 +00:00
										 |  |  |           s << "    mkdir -p #{destination}" unless destination_path.directory? | 
					
						
							| 
									
										
										
										
											2014-06-30 20:23:56 -05:00
										 |  |  |           s << "    ln -sfv #{f.opt_prefix}/*.plist #{destination}" | 
					
						
							| 
									
										
										
										
											2013-01-01 17:26:50 +00:00
										 |  |  |         end | 
					
						
							| 
									
										
										
										
											2015-05-27 20:40:32 +08:00
										 |  |  |         s << "Then to load #{f.full_name} now:" | 
					
						
							| 
									
										
										
										
											2013-01-01 17:26:50 +00:00
										 |  |  |         if f.plist_startup | 
					
						
							|  |  |  |           s << "    sudo launchctl load #{plist_link}" | 
					
						
							|  |  |  |         else | 
					
						
							|  |  |  |           s << "    launchctl load #{plist_link}" | 
					
						
							|  |  |  |         end | 
					
						
							| 
									
										
										
										
											2014-07-03 20:50:04 +08:00
										 |  |  |       # For startup plists, we cannot tell whether it's running on launchd, | 
					
						
							|  |  |  |       # as it requires for `sudo launchctl list` to get real result. | 
					
						
							|  |  |  |       elsif f.plist_startup | 
					
						
							| 
									
										
										
										
											2015-05-27 20:40:32 +08:00
										 |  |  |           s << "To reload #{f.full_name} after an upgrade:" | 
					
						
							| 
									
										
										
										
											2013-01-01 17:26:50 +00:00
										 |  |  |           s << "    sudo launchctl unload #{plist_link}" | 
					
						
							| 
									
										
										
										
											2014-06-30 20:23:56 -05:00
										 |  |  |           s << "    sudo cp -fv #{f.opt_prefix}/*.plist #{destination}" | 
					
						
							| 
									
										
										
										
											2014-11-02 09:42:15 +00:00
										 |  |  |           s << "    sudo chown root #{plist_link}" | 
					
						
							| 
									
										
										
										
											2013-01-01 17:26:50 +00:00
										 |  |  |           s << "    sudo launchctl load #{plist_link}" | 
					
						
							| 
									
										
										
										
											2014-07-03 20:50:04 +08:00
										 |  |  |       elsif Kernel.system "/bin/launchctl list #{plist_domain} &>/dev/null" | 
					
						
							| 
									
										
										
										
											2015-05-27 20:40:32 +08:00
										 |  |  |           s << "To reload #{f.full_name} after an upgrade:" | 
					
						
							| 
									
										
										
										
											2014-07-03 20:50:04 +08:00
										 |  |  |           s << "    launchctl unload #{plist_link}" | 
					
						
							|  |  |  |           s << "    launchctl load #{plist_link}" | 
					
						
							|  |  |  |       else | 
					
						
							| 
									
										
										
										
											2015-05-27 20:40:32 +08:00
										 |  |  |           s << "To load #{f.full_name}:" | 
					
						
							| 
									
										
										
										
											2014-07-03 20:50:04 +08:00
										 |  |  |           s << "    launchctl load #{plist_link}" | 
					
						
							| 
									
										
										
										
											2013-01-01 17:26:50 +00:00
										 |  |  |       end | 
					
						
							| 
									
										
										
										
											2014-07-03 19:28:09 +08:00
										 |  |  | 
 | 
					
						
							|  |  |  |       if f.plist_manual | 
					
						
							|  |  |  |         s << "Or, if you don't want/need launchctl, you can just run:" | 
					
						
							|  |  |  |         s << "    #{f.plist_manual}" | 
					
						
							|  |  |  |       end | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |       s << "" << "WARNING: launchctl will fail when run under tmux." if ENV['TMUX'] | 
					
						
							| 
									
										
										
										
											2013-01-01 17:26:50 +00:00
										 |  |  |     end | 
					
						
							| 
									
										
										
										
											2013-01-12 13:08:29 -06:00
										 |  |  |     s.join("\n") unless s.empty? | 
					
						
							| 
									
										
										
										
											2013-01-01 17:26:50 +00:00
										 |  |  |   end | 
					
						
							|  |  |  | end |