| 
									
										
										
										
											2010-06-28 09:39:14 -07:00
										 |  |  | class Volumes | 
					
						
							|  |  |  |   def initialize | 
					
						
							|  |  |  |     @volumes = [] | 
					
						
							| 
									
										
										
										
											2011-04-29 09:15:39 -07:00
										 |  |  |     raw_mounts=`/sbin/mount` | 
					
						
							| 
									
										
										
										
											2010-06-28 09:39:14 -07:00
										 |  |  |     raw_mounts.split("\n").each do |line| | 
					
						
							|  |  |  |       case line | 
					
						
							|  |  |  |       when /^(.+) on (\S+) \(/ | 
					
						
							|  |  |  |         @volumes << [$1, $2] | 
					
						
							|  |  |  |       end | 
					
						
							|  |  |  |     end | 
					
						
							|  |  |  |     # Sort volumes by longest path prefix first | 
					
						
							|  |  |  |     @volumes.sort! {|a,b| b[1].length <=> a[1].length} | 
					
						
							|  |  |  |   end | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |   def which path | 
					
						
							|  |  |  |     @volumes.each_index do |i| | 
					
						
							|  |  |  |       vol = @volumes[i] | 
					
						
							| 
									
										
										
										
											2011-06-13 14:32:50 -07:00
										 |  |  |       return i if vol[1].start_with? path.to_s | 
					
						
							| 
									
										
										
										
											2010-06-28 09:39:14 -07:00
										 |  |  |     end | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     return -1
 | 
					
						
							|  |  |  |   end | 
					
						
							|  |  |  | end | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2012-03-01 16:32:02 +00:00
										 |  |  | class Checks | 
					
						
							|  |  |  |   # Sorry for the lack of an indent here, the diff would have been unreadable. | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2011-06-07 13:18:00 -07:00
										 |  |  | def remove_trailing_slash s | 
					
						
							|  |  |  |   (s[s.length-1] == '/') ? s[0,s.length-1] : s | 
					
						
							|  |  |  | end | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2011-03-29 12:45:54 -07:00
										 |  |  | def path_folders | 
					
						
							| 
									
										
										
										
											2011-06-07 13:18:00 -07:00
										 |  |  |   ENV['PATH'].split(':').collect{|p| remove_trailing_slash(File.expand_path(p))}.uniq | 
					
						
							| 
									
										
										
										
											2011-03-29 12:45:54 -07:00
										 |  |  | end | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2012-03-21 22:03:21 -07:00
										 |  |  | # See https://github.com/mxcl/homebrew/pull/9986 | 
					
						
							|  |  |  | def check_path_for_trailing_slashes | 
					
						
							|  |  |  |   bad_paths = ENV['PATH'].split(':').select{|p| p[p.length-1, p.length] == '/'} | 
					
						
							|  |  |  |   return if bad_paths.empty? | 
					
						
							|  |  |  |   s = <<-EOS.undent
 | 
					
						
							|  |  |  |     Some directories in your path end in a slash. | 
					
						
							|  |  |  |     Directories in your path should not end in a slash. This can break other | 
					
						
							|  |  |  |     doctor checks. The following directories should be edited: | 
					
						
							|  |  |  |   EOS | 
					
						
							|  |  |  |   bad_paths.each{|p| s << "    #{p}"} | 
					
						
							|  |  |  |   s | 
					
						
							|  |  |  | end | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2010-08-18 09:09:38 -07:00
										 |  |  | # Installing MacGPG2 interferes with Homebrew in a big way | 
					
						
							|  |  |  | # http://sourceforge.net/projects/macgpg2/files/ | 
					
						
							|  |  |  | def check_for_macgpg2 | 
					
						
							| 
									
										
										
										
											2010-09-22 15:24:41 -07:00
										 |  |  |   if File.exist? "/Applications/start-gpg-agent.app" or | 
					
						
							|  |  |  |      File.exist? "/Library/Receipts/libiconv1.pkg" | 
					
						
							| 
									
										
										
										
											2012-03-01 16:32:02 +00:00
										 |  |  |     <<-EOS.undent
 | 
					
						
							|  |  |  |       You may have installed MacGPG2 via the package installer. | 
					
						
							|  |  |  |       Several other checks in this script will turn up problems, such as stray | 
					
						
							|  |  |  |       dylibs in /usr/local and permissions issues with share and man in /usr/local/. | 
					
						
							| 
									
										
										
										
											2010-08-18 09:09:38 -07:00
										 |  |  |     EOS | 
					
						
							|  |  |  |   end | 
					
						
							|  |  |  | end | 
					
						
							| 
									
										
										
										
											2010-06-28 09:39:14 -07:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2010-03-31 14:58:32 -07:00
										 |  |  | def check_for_stray_dylibs | 
					
						
							| 
									
										
										
										
											2010-06-29 10:10:53 -07:00
										 |  |  |   unbrewed_dylibs = Dir['/usr/local/lib/*.dylib'].select { |f| File.file? f and not File.symlink? f } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |   # Dylibs which are generally OK should be added to this list, | 
					
						
							|  |  |  |   # with a short description of the software they come with. | 
					
						
							|  |  |  |   white_list = { | 
					
						
							|  |  |  |     "libfuse.2.dylib" => "MacFuse", | 
					
						
							|  |  |  |     "libfuse_ino64.2.dylib" => "MacFuse" | 
					
						
							|  |  |  |   } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |   bad_dylibs = unbrewed_dylibs.reject {|d| white_list.key? File.basename(d) } | 
					
						
							|  |  |  |   return if bad_dylibs.empty? | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2012-03-01 16:32:02 +00:00
										 |  |  |   s = <<-EOS.undent
 | 
					
						
							| 
									
										
										
										
											2011-03-28 11:51:54 -07:00
										 |  |  |     Unbrewed dylibs were found in /usr/local/lib. | 
					
						
							|  |  |  |     If you didn't put them there on purpose they could cause problems when | 
					
						
							|  |  |  |     building Homebrew formulae, and may need to be deleted. | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     Unexpected dylibs: | 
					
						
							| 
									
										
										
										
											2010-06-29 10:10:53 -07:00
										 |  |  |   EOS | 
					
						
							| 
									
										
										
										
											2012-03-01 16:32:02 +00:00
										 |  |  |   bad_dylibs.each { |f| s << "    #{f}" } | 
					
						
							|  |  |  |   s | 
					
						
							| 
									
										
										
										
											2010-03-31 14:58:32 -07:00
										 |  |  | end | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2011-05-05 09:40:03 -07:00
										 |  |  | def check_for_stray_static_libs | 
					
						
							|  |  |  |   unbrewed_alibs = Dir['/usr/local/lib/*.a'].select { |f| File.file? f and not File.symlink? f } | 
					
						
							|  |  |  |   return if unbrewed_alibs.empty? | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2012-03-01 16:32:02 +00:00
										 |  |  |   s = <<-EOS.undent
 | 
					
						
							| 
									
										
										
										
											2011-05-05 09:40:03 -07:00
										 |  |  |     Unbrewed static libraries were found in /usr/local/lib. | 
					
						
							|  |  |  |     If you didn't put them there on purpose they could cause problems when | 
					
						
							|  |  |  |     building Homebrew formulae, and may need to be deleted. | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     Unexpected static libraries: | 
					
						
							|  |  |  |   EOS | 
					
						
							| 
									
										
										
										
											2012-03-01 16:32:02 +00:00
										 |  |  |   unbrewed_alibs.each{ |f| s << "    #{f}" } | 
					
						
							|  |  |  |   s | 
					
						
							| 
									
										
										
										
											2011-05-05 09:40:03 -07:00
										 |  |  | end | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2011-05-09 17:23:35 -07:00
										 |  |  | def check_for_stray_pcs | 
					
						
							|  |  |  |   unbrewed_pcs = Dir['/usr/local/lib/pkgconfig/*.pc'].select { |f| File.file? f and not File.symlink? f } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |   # Package-config files which are generally OK should be added to this list, | 
					
						
							|  |  |  |   # with a short description of the software they come with. | 
					
						
							|  |  |  |   white_list = { | 
					
						
							|  |  |  |     "fuse.pc" => "MacFuse", | 
					
						
							|  |  |  |   } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |   bad_pcs = unbrewed_pcs.reject {|d| white_list.key? File.basename(d) } | 
					
						
							|  |  |  |   return if bad_pcs.empty? | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2012-03-01 16:32:02 +00:00
										 |  |  |   s = <<-EOS.undent
 | 
					
						
							| 
									
										
										
										
											2011-05-09 17:23:35 -07:00
										 |  |  |     Unbrewed .pc files were found in /usr/local/lib/pkgconfig. | 
					
						
							|  |  |  |     If you didn't put them there on purpose they could cause problems when | 
					
						
							|  |  |  |     building Homebrew formulae, and may need to be deleted. | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     Unexpected .pc files: | 
					
						
							|  |  |  |   EOS | 
					
						
							| 
									
										
										
										
											2012-03-01 16:32:02 +00:00
										 |  |  |   bad_pcs.each{ |f| s << "    #{f}" } | 
					
						
							|  |  |  |   s | 
					
						
							| 
									
										
										
										
											2011-05-09 17:23:35 -07:00
										 |  |  | end | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2011-05-12 08:10:47 -07:00
										 |  |  | def check_for_stray_las | 
					
						
							|  |  |  |   unbrewed_las = Dir['/usr/local/lib/*.la'].select { |f| File.file? f and not File.symlink? f } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |   white_list = { | 
					
						
							|  |  |  |     "libfuse.la" => "MacFuse", | 
					
						
							|  |  |  |     "libfuse_ino64.la" => "MacFuse", | 
					
						
							|  |  |  |   } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |   bad_las = unbrewed_las.reject {|d| white_list.key? File.basename(d) } | 
					
						
							|  |  |  |   return if bad_las.empty? | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2012-03-01 16:32:02 +00:00
										 |  |  |   s = <<-EOS.undent
 | 
					
						
							| 
									
										
										
										
											2011-05-12 08:10:47 -07:00
										 |  |  |     Unbrewed .la files were found in /usr/local/lib. | 
					
						
							|  |  |  |     If you didn't put them there on purpose they could cause problems when | 
					
						
							|  |  |  |     building Homebrew formulae, and may need to be deleted. | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     Unexpected .la files: | 
					
						
							|  |  |  |   EOS | 
					
						
							| 
									
										
										
										
											2012-03-01 16:32:02 +00:00
										 |  |  |   bad_las.each{ |f| s << "    #{f}" } | 
					
						
							|  |  |  |   s | 
					
						
							| 
									
										
										
										
											2011-05-12 08:10:47 -07:00
										 |  |  | end | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2010-03-31 14:59:50 -07:00
										 |  |  | def check_for_x11 | 
					
						
							| 
									
										
										
										
											2010-06-29 10:21:40 -07:00
										 |  |  |   unless x11_installed? | 
					
						
							| 
									
										
										
										
											2012-03-01 16:32:02 +00:00
										 |  |  |     <<-EOS.undent
 | 
					
						
							| 
									
										
										
										
											2011-03-28 11:51:54 -07:00
										 |  |  |       X11 not installed. | 
					
						
							| 
									
										
										
										
											2011-03-14 20:59:21 +00:00
										 |  |  |       You don't have X11 installed as part of your OS X installation. | 
					
						
							| 
									
										
										
										
											2012-03-01 16:32:02 +00:00
										 |  |  |       This is not required for all formulae, but is expected by some. | 
					
						
							| 
									
										
										
										
											2010-03-31 15:22:20 -07:00
										 |  |  |     EOS | 
					
						
							| 
									
										
										
										
											2010-03-31 14:59:50 -07:00
										 |  |  |   end | 
					
						
							|  |  |  | end | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2010-07-25 12:07:41 -07:00
										 |  |  | def check_for_nonstandard_x11 | 
					
						
							|  |  |  |   x11 = Pathname.new('/usr/X11') | 
					
						
							|  |  |  |   if x11.symlink? | 
					
						
							| 
									
										
										
										
											2012-03-01 16:32:02 +00:00
										 |  |  |     <<-EOS.undent
 | 
					
						
							|  |  |  |       /usr/X11 is a symlink | 
					
						
							| 
									
										
										
										
											2010-08-07 11:46:20 -07:00
										 |  |  |       Homebrew's X11 support has only be tested with Apple's X11. | 
					
						
							|  |  |  |       In particular, "XQuartz" and "XDarwin" are not known to be compatible. | 
					
						
							| 
									
										
										
										
											2010-07-25 12:07:41 -07:00
										 |  |  |     EOS | 
					
						
							|  |  |  |   end | 
					
						
							|  |  |  | end | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2010-03-31 15:00:40 -07:00
										 |  |  | def check_for_other_package_managers | 
					
						
							|  |  |  |   if macports_or_fink_installed? | 
					
						
							| 
									
										
										
										
											2012-03-01 16:32:02 +00:00
										 |  |  |     <<-EOS.undent
 | 
					
						
							|  |  |  |       You have Macports or Fink installed. | 
					
						
							|  |  |  |       This can cause trouble. You don't have to uninstall them, but you may like to | 
					
						
							|  |  |  |       try temporarily moving them away, eg. | 
					
						
							| 
									
										
										
										
											2010-03-31 15:22:20 -07:00
										 |  |  | 
 | 
					
						
							|  |  |  |         sudo mv /opt/local ~/macports
 | 
					
						
							|  |  |  |     EOS | 
					
						
							| 
									
										
										
										
											2010-03-31 15:00:40 -07:00
										 |  |  |   end | 
					
						
							|  |  |  | end | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2012-03-15 16:37:46 +00:00
										 |  |  | def check_for_broken_symlinks | 
					
						
							|  |  |  |   broken_symlinks = [] | 
					
						
							|  |  |  |   %w[lib include sbin bin etc share].each do |d| | 
					
						
							|  |  |  |     d = HOMEBREW_PREFIX/d | 
					
						
							|  |  |  |     d.find do |pn| | 
					
						
							|  |  |  |       broken_symlinks << pn if pn.symlink? and pn.readlink.expand_path.to_s =~ /^#{HOMEBREW_PREFIX}/ and not pn.exist? | 
					
						
							|  |  |  |     end | 
					
						
							|  |  |  |   end | 
					
						
							|  |  |  |   unless broken_symlinks.empty? then <<-EOS.undent
 | 
					
						
							|  |  |  |     Broken symlinks were found. Remove them with `brew prune':
 | 
					
						
							|  |  |  |       #{broken_symlinks * "\n      "} | 
					
						
							|  |  |  |     EOS | 
					
						
							|  |  |  |   end | 
					
						
							|  |  |  | end | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2012-03-19 11:26:39 -05:00
										 |  |  | def check_for_latest_xcode | 
					
						
							| 
									
										
										
										
											2012-03-21 12:47:25 -05:00
										 |  |  |   if MacOS.xcode_version.nil? | 
					
						
							|  |  |  |     if MacOS.version >= 10.7 then return <<-EOS.undent
 | 
					
						
							|  |  |  |       We couldn't detect any version of Xcode. | 
					
						
							|  |  |  |       The latest Xcode can be obtained from the Mac App Store. | 
					
						
							|  |  |  |       Alternatively, the Command Line Tools package can be obtained from | 
					
						
							|  |  |  |         http://connect.apple.com | 
					
						
							|  |  |  |       EOS | 
					
						
							|  |  |  |     else return <<-EOS.undent
 | 
					
						
							|  |  |  |       We couldn't detect any version of Xcode. | 
					
						
							|  |  |  |       The latest Xcode can be obtained from http://connect.apple.com | 
					
						
							|  |  |  |       EOS | 
					
						
							|  |  |  |     end | 
					
						
							| 
									
										
										
										
											2010-03-31 15:06:46 -07:00
										 |  |  |   end | 
					
						
							| 
									
										
										
										
											2012-03-01 17:01:17 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2012-03-01 16:57:14 +00:00
										 |  |  |   latest_xcode = case MacOS.version | 
					
						
							|  |  |  |     when 10.5 then "3.1.4" | 
					
						
							|  |  |  |     when 10.6 then "3.2.6" | 
					
						
							|  |  |  |     else "4.3" | 
					
						
							|  |  |  |   end | 
					
						
							|  |  |  |   if MacOS.xcode_version < latest_xcode then <<-EOS.undent
 | 
					
						
							| 
									
										
										
										
											2012-03-09 13:29:56 -06:00
										 |  |  |     You have Xcode #{MacOS.xcode_version}, which is outdated. | 
					
						
							| 
									
										
										
										
											2012-03-01 20:14:57 +01:00
										 |  |  |     Please install Xcode #{latest_xcode}. | 
					
						
							| 
									
										
										
										
											2012-03-01 16:57:14 +00:00
										 |  |  |     EOS | 
					
						
							|  |  |  |   end | 
					
						
							|  |  |  | end | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2012-03-01 16:32:02 +00:00
										 |  |  | def check_cc | 
					
						
							| 
									
										
										
										
											2012-03-16 01:03:00 +00:00
										 |  |  |   unless File.exist? '/usr/bin/cc' then <<-EOS.undent
 | 
					
						
							|  |  |  |     You have no /usr/bin/cc. | 
					
						
							|  |  |  |     This means you probably can't build *anything*. You need to install the Command | 
					
						
							|  |  |  |     Line Tools for Xcode. You can either download this from http://connect.apple.com | 
					
						
							|  |  |  |     or install them from inside Xcode's Download preferences. Homebrew does not | 
					
						
							|  |  |  |     require all of Xcode! You only need the Command Line Tools package! | 
					
						
							| 
									
										
										
										
											2011-09-07 12:18:05 +01:00
										 |  |  |     EOS | 
					
						
							|  |  |  |   end | 
					
						
							| 
									
										
										
										
											2010-03-31 15:06:46 -07:00
										 |  |  | end | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2010-07-30 09:23:29 -07:00
										 |  |  | def __check_subdir_access base | 
					
						
							|  |  |  |   target = HOMEBREW_PREFIX+base | 
					
						
							|  |  |  |   return unless target.exist? | 
					
						
							| 
									
										
										
										
											2010-03-31 15:38:20 -07:00
										 |  |  | 
 | 
					
						
							|  |  |  |   cant_read = [] | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2010-07-30 09:23:29 -07:00
										 |  |  |   target.find do |d| | 
					
						
							| 
									
										
										
										
											2010-03-31 15:38:20 -07:00
										 |  |  |     next unless d.directory? | 
					
						
							|  |  |  |     cant_read << d unless d.writable? | 
					
						
							|  |  |  |   end | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |   cant_read.sort! | 
					
						
							| 
									
										
										
										
											2012-03-01 16:32:02 +00:00
										 |  |  |   if cant_read.length > 0 then | 
					
						
							|  |  |  |     s = <<-EOS.undent
 | 
					
						
							| 
									
										
										
										
											2011-12-10 17:14:38 -06:00
										 |  |  |     Some directories in #{target} aren't writable. | 
					
						
							| 
									
										
										
										
											2010-03-31 15:38:20 -07:00
										 |  |  |     This can happen if you "sudo make install" software that isn't managed | 
					
						
							|  |  |  |     by Homebrew. If a brew tries to add locale information to one of these | 
					
						
							| 
									
										
										
										
											2011-12-10 17:14:38 -06:00
										 |  |  |     directories, then the install will fail during the link step. | 
					
						
							| 
									
										
										
										
											2010-03-31 15:38:20 -07:00
										 |  |  |     You should probably `chown` them: | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     EOS | 
					
						
							| 
									
										
										
										
											2012-03-01 16:32:02 +00:00
										 |  |  |     cant_read.each{ |f| s << "    #{f}\n" } | 
					
						
							|  |  |  |     s | 
					
						
							| 
									
										
										
										
											2010-03-31 15:38:20 -07:00
										 |  |  |   end | 
					
						
							| 
									
										
										
										
											2010-07-01 10:16:15 -07:00
										 |  |  | end | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2012-02-28 18:48:14 +00:00
										 |  |  | def check_access_usr_local | 
					
						
							|  |  |  |   return unless HOMEBREW_PREFIX.to_s == '/usr/local' | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2012-03-01 16:32:02 +00:00
										 |  |  |   unless Pathname('/usr/local').writable? then <<-EOS.undent
 | 
					
						
							| 
									
										
										
										
											2012-02-28 18:48:14 +00:00
										 |  |  |     The /usr/local directory is not writable. | 
					
						
							| 
									
										
										
										
											2012-03-01 22:55:21 -06:00
										 |  |  |     Even if this directory was writable when you installed Homebrew, other | 
					
						
							|  |  |  |     software may change permissions on this directory. Some versions of the | 
					
						
							| 
									
										
										
										
											2012-02-28 18:48:14 +00:00
										 |  |  |     "InstantOn" component of Airfoil are known to do this. | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     You should probably change the ownership and permissions of /usr/local | 
					
						
							|  |  |  |     back to your user account. | 
					
						
							|  |  |  |     EOS | 
					
						
							|  |  |  |   end | 
					
						
							|  |  |  | end | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2010-07-30 09:23:29 -07:00
										 |  |  | def check_access_share_locale | 
					
						
							|  |  |  |   __check_subdir_access 'share/locale' | 
					
						
							|  |  |  | end | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | def check_access_share_man | 
					
						
							|  |  |  |   __check_subdir_access 'share/man' | 
					
						
							|  |  |  | end | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2011-03-28 11:48:45 -07:00
										 |  |  | def __check_folder_access base, msg | 
					
						
							|  |  |  |   folder = HOMEBREW_PREFIX+base | 
					
						
							| 
									
										
										
										
											2012-03-01 16:32:02 +00:00
										 |  |  |   if folder.exist? and not folder.writable? | 
					
						
							|  |  |  |     <<-EOS.undent
 | 
					
						
							| 
									
										
										
										
											2011-03-28 11:48:45 -07:00
										 |  |  |       #{folder} isn't writable. | 
					
						
							| 
									
										
										
										
											2010-07-01 10:16:15 -07:00
										 |  |  |       This can happen if you "sudo make install" software that isn't managed | 
					
						
							| 
									
										
										
										
											2011-03-28 11:48:45 -07:00
										 |  |  |       by Homebrew. | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |       #{msg} | 
					
						
							| 
									
										
										
										
											2010-07-01 10:16:15 -07:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2011-03-28 11:48:45 -07:00
										 |  |  |       You should probably `chown` #{folder} | 
					
						
							| 
									
										
										
										
											2010-07-01 10:16:15 -07:00
										 |  |  |     EOS | 
					
						
							|  |  |  |   end | 
					
						
							| 
									
										
										
										
											2010-03-31 15:09:03 -07:00
										 |  |  | end | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2011-03-28 11:48:45 -07:00
										 |  |  | def check_access_pkgconfig | 
					
						
							|  |  |  |   __check_folder_access 'lib/pkgconfig', | 
					
						
							| 
									
										
										
										
											2011-12-10 17:14:38 -06:00
										 |  |  |   'If a brew tries to write a .pc file to this directory, the install will\n'+ | 
					
						
							| 
									
										
										
										
											2011-03-28 11:48:45 -07:00
										 |  |  |   'fail during the link step.' | 
					
						
							|  |  |  | end | 
					
						
							| 
									
										
										
										
											2010-09-29 11:56:58 -07:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2011-03-28 11:48:45 -07:00
										 |  |  | def check_access_include | 
					
						
							|  |  |  |   __check_folder_access 'include', | 
					
						
							| 
									
										
										
										
											2011-12-10 17:14:38 -06:00
										 |  |  |   'If a brew tries to write a header file to this directory, the install will\n'+ | 
					
						
							| 
									
										
										
										
											2011-03-28 11:48:45 -07:00
										 |  |  |   'fail during the link step.' | 
					
						
							| 
									
										
										
										
											2010-09-29 11:56:58 -07:00
										 |  |  | end | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2010-10-20 19:28:46 -07:00
										 |  |  | def check_access_etc | 
					
						
							| 
									
										
										
										
											2011-03-28 11:48:45 -07:00
										 |  |  |   __check_folder_access 'etc', | 
					
						
							| 
									
										
										
										
											2011-12-10 17:14:38 -06:00
										 |  |  |   'If a brew tries to write a file to this directory, the install will\n'+ | 
					
						
							| 
									
										
										
										
											2011-03-28 11:48:45 -07:00
										 |  |  |   'fail during the link step.' | 
					
						
							|  |  |  | end | 
					
						
							| 
									
										
										
										
											2010-10-20 19:28:46 -07:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2011-03-28 11:48:45 -07:00
										 |  |  | def check_access_share | 
					
						
							|  |  |  |   __check_folder_access 'share', | 
					
						
							| 
									
										
										
										
											2011-12-10 17:14:38 -06:00
										 |  |  |   'If a brew tries to write a file to this directory, the install will\n'+ | 
					
						
							| 
									
										
										
										
											2011-03-28 11:48:45 -07:00
										 |  |  |   'fail during the link step.' | 
					
						
							| 
									
										
										
										
											2010-10-20 19:28:46 -07:00
										 |  |  | end | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2010-03-31 15:09:03 -07:00
										 |  |  | def check_usr_bin_ruby | 
					
						
							| 
									
										
										
										
											2010-03-31 15:19:19 -07:00
										 |  |  |   if /^1\.9/.match RUBY_VERSION | 
					
						
							| 
									
										
										
										
											2012-03-01 16:32:02 +00:00
										 |  |  |     <<-EOS.undent
 | 
					
						
							| 
									
										
										
										
											2010-03-31 15:19:19 -07:00
										 |  |  |       Ruby version #{RUBY_VERSION} is unsupported. | 
					
						
							|  |  |  |       Homebrew is developed and tested on Ruby 1.8.x, and may not work correctly | 
					
						
							| 
									
										
										
										
											2012-03-01 16:32:02 +00:00
										 |  |  |       on other Rubies. Patches are accepted as long as they don't break on 1.8.x. | 
					
						
							| 
									
										
										
										
											2010-03-31 15:19:19 -07:00
										 |  |  |     EOS | 
					
						
							|  |  |  |   end | 
					
						
							| 
									
										
										
										
											2010-03-31 15:09:03 -07:00
										 |  |  | end | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | def check_homebrew_prefix | 
					
						
							| 
									
										
										
										
											2010-03-31 15:20:13 -07:00
										 |  |  |   unless HOMEBREW_PREFIX.to_s == '/usr/local' | 
					
						
							| 
									
										
										
										
											2012-03-01 16:32:02 +00:00
										 |  |  |     <<-EOS.undent
 | 
					
						
							|  |  |  |       Your Homebrew is not installed to /usr/local | 
					
						
							| 
									
										
										
										
											2011-07-29 14:33:59 +01:00
										 |  |  |       You can install Homebrew anywhere you want, but some brews may only build | 
					
						
							| 
									
										
										
										
											2012-03-01 16:32:02 +00:00
										 |  |  |       correctly if you install in /usr/local. Sorry! | 
					
						
							| 
									
										
										
										
											2010-03-31 15:20:13 -07:00
										 |  |  |     EOS | 
					
						
							|  |  |  |   end | 
					
						
							| 
									
										
										
										
											2010-03-31 15:09:03 -07:00
										 |  |  | end | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2011-09-01 09:39:17 -07:00
										 |  |  | def check_xcode_prefix | 
					
						
							|  |  |  |   prefix = MacOS.xcode_prefix | 
					
						
							|  |  |  |   return if prefix.nil? | 
					
						
							|  |  |  |   if prefix.to_s.match(' ') | 
					
						
							| 
									
										
										
										
											2012-03-01 16:32:02 +00:00
										 |  |  |     <<-EOS.undent
 | 
					
						
							| 
									
										
										
										
											2011-12-10 17:14:38 -06:00
										 |  |  |       Xcode is installed to a directory with a space in the name. | 
					
						
							| 
									
										
										
										
											2012-02-25 03:25:43 -06:00
										 |  |  |       This will cause some formulae to fail to build. | 
					
						
							| 
									
										
										
										
											2011-09-01 09:39:17 -07:00
										 |  |  |     EOS | 
					
						
							|  |  |  |   end | 
					
						
							|  |  |  | end | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2012-03-01 10:19:43 +00:00
										 |  |  | def check_xcode_select_path | 
					
						
							|  |  |  |   path = `xcode-select -print-path 2>/dev/null`.chomp | 
					
						
							|  |  |  |   unless File.directory? path and File.file? "#{path}/usr/bin/xcodebuild" | 
					
						
							|  |  |  |     # won't guess at the path they should use because it's too hard to get right | 
					
						
							| 
									
										
										
										
											2012-03-07 15:08:29 +00:00
										 |  |  |     # We specify /Applications/Xcode.app/Contents/Developer even though | 
					
						
							|  |  |  |     # /Applications/Xcode.app should work because people don't install the new CLI | 
					
						
							|  |  |  |     # tools and then it doesn't work. Lets hope the location doesn't change in the | 
					
						
							|  |  |  |     # future. | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2012-03-01 16:32:02 +00:00
										 |  |  |     <<-EOS.undent
 | 
					
						
							|  |  |  |       Your Xcode is configured with an invalid path. | 
					
						
							| 
									
										
										
										
											2012-03-01 10:19:43 +00:00
										 |  |  |       You should change it to the correct path. Please note that there is no correct | 
					
						
							|  |  |  |       path at this time if you have *only* installed the Command Line Tools for Xcode. | 
					
						
							|  |  |  |       If your Xcode is pre-4.3 or you installed the whole of Xcode 4.3 then one of | 
					
						
							|  |  |  |       these is (probably) what you want: | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |           sudo xcode-select -switch /Developer
 | 
					
						
							| 
									
										
										
										
											2012-03-07 15:08:29 +00:00
										 |  |  |           sudo xcode-select -switch /Applications/Xcode.app/Contents/Developer | 
					
						
							| 
									
										
										
										
											2012-03-15 13:19:43 +00:00
										 |  |  | 
 | 
					
						
							|  |  |  |       DO NOT SET / OR EVERYTHING BREAKS! | 
					
						
							| 
									
										
										
										
											2012-03-01 10:19:43 +00:00
										 |  |  |     EOS | 
					
						
							|  |  |  |   end | 
					
						
							|  |  |  | end | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2012-03-01 16:32:02 +00:00
										 |  |  | def check_user_path_1 | 
					
						
							|  |  |  |   $seen_prefix_bin = false | 
					
						
							|  |  |  |   $seen_prefix_sbin = false | 
					
						
							| 
									
										
										
										
											2010-03-31 15:55:44 -07:00
										 |  |  |   seen_usr_bin = false | 
					
						
							| 
									
										
										
										
											2010-04-08 17:50:51 -07:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2012-03-01 16:32:02 +00:00
										 |  |  |   out = nil | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2011-08-31 15:38:11 +01:00
										 |  |  |   path_folders.each do |p| case p | 
					
						
							|  |  |  |     when '/usr/bin' | 
					
						
							| 
									
										
										
										
											2010-03-31 15:55:44 -07:00
										 |  |  |       seen_usr_bin = true | 
					
						
							| 
									
										
										
										
											2012-03-01 16:32:02 +00:00
										 |  |  |       unless $seen_prefix_bin | 
					
						
							| 
									
										
										
										
											2011-08-31 15:38:11 +01:00
										 |  |  |         # only show the doctor message if there are any conflicts | 
					
						
							|  |  |  |         # rationale: a default install should not trigger any brew doctor messages | 
					
						
							| 
									
										
										
										
											2012-02-20 18:25:13 +00:00
										 |  |  |         conflicts = Dir["#{HOMEBREW_PREFIX}/bin/*"]. | 
					
						
							| 
									
										
										
										
											2012-02-21 15:50:35 +00:00
										 |  |  |             map{ |fn| File.basename fn }. | 
					
						
							|  |  |  |             select{ |bn| File.exist? "/usr/bin/#{bn}" } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2012-03-01 16:59:18 +00:00
										 |  |  |         if conflicts.size > 0
 | 
					
						
							| 
									
										
										
										
											2012-03-01 16:32:02 +00:00
										 |  |  |           out = <<-EOS.undent
 | 
					
						
							|  |  |  |             /usr/bin occurs before #{HOMEBREW_PREFIX}/bin | 
					
						
							| 
									
										
										
										
											2011-08-31 15:38:11 +01:00
										 |  |  |             This means that system-provided programs will be used instead of those | 
					
						
							| 
									
										
										
										
											2012-02-20 18:25:13 +00:00
										 |  |  |             provided by Homebrew. The following tools exist at both paths: | 
					
						
							| 
									
										
										
										
											2011-08-31 15:38:11 +01:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2012-02-21 15:50:35 +00:00
										 |  |  |                 #{conflicts * "\n                "} | 
					
						
							| 
									
										
										
										
											2012-02-20 18:25:13 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2012-03-01 16:32:02 +00:00
										 |  |  |             Consider ammending your PATH so that #{HOMEBREW_PREFIX}/bin | 
					
						
							|  |  |  |             is ahead of /usr/bin in your PATH. | 
					
						
							| 
									
										
										
										
											2011-08-31 15:38:11 +01:00
										 |  |  |           EOS | 
					
						
							|  |  |  |         end | 
					
						
							| 
									
										
										
										
											2010-03-31 15:55:44 -07:00
										 |  |  |       end | 
					
						
							| 
									
										
										
										
											2011-08-31 15:38:11 +01:00
										 |  |  |     when "#{HOMEBREW_PREFIX}/bin" | 
					
						
							| 
									
										
										
										
											2012-03-01 16:32:02 +00:00
										 |  |  |       $seen_prefix_bin = true | 
					
						
							| 
									
										
										
										
											2011-08-31 15:38:11 +01:00
										 |  |  |     when "#{HOMEBREW_PREFIX}/sbin" | 
					
						
							| 
									
										
										
										
											2012-03-01 16:32:02 +00:00
										 |  |  |       $seen_prefix_sbin = true | 
					
						
							| 
									
										
										
										
											2010-03-31 15:55:44 -07:00
										 |  |  |     end | 
					
						
							|  |  |  |   end | 
					
						
							| 
									
										
										
										
											2012-03-01 16:32:02 +00:00
										 |  |  |   out | 
					
						
							|  |  |  | end | 
					
						
							| 
									
										
										
										
											2010-04-08 17:50:51 -07:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2012-03-01 16:32:02 +00:00
										 |  |  | def check_user_path_2 | 
					
						
							|  |  |  |   unless $seen_prefix_bin | 
					
						
							|  |  |  |     <<-EOS.undent
 | 
					
						
							|  |  |  |       Homebrew's bin was not found in your path. | 
					
						
							|  |  |  |       Consider ammending your PATH variable so it contains: | 
					
						
							| 
									
										
										
										
											2010-04-08 17:50:51 -07:00
										 |  |  |         #{HOMEBREW_PREFIX}/bin | 
					
						
							| 
									
										
										
										
											2012-03-01 16:32:02 +00:00
										 |  |  |     EOS | 
					
						
							| 
									
										
										
										
											2010-04-08 17:50:51 -07:00
										 |  |  |   end | 
					
						
							| 
									
										
										
										
											2012-03-01 16:32:02 +00:00
										 |  |  | end | 
					
						
							| 
									
										
										
										
											2010-04-08 17:50:51 -07:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2012-03-01 16:32:02 +00:00
										 |  |  | def check_user_path_3 | 
					
						
							| 
									
										
										
										
											2011-06-02 09:27:11 -07:00
										 |  |  |   # Don't complain about sbin not being in the path if it doesn't exist | 
					
						
							| 
									
										
										
										
											2011-08-02 14:44:09 +01:00
										 |  |  |   sbin = (HOMEBREW_PREFIX+'sbin') | 
					
						
							|  |  |  |   if sbin.directory? and sbin.children.length > 0
 | 
					
						
							| 
									
										
										
										
											2012-03-01 16:32:02 +00:00
										 |  |  |     unless $seen_prefix_sbin | 
					
						
							|  |  |  |       <<-EOS.undent
 | 
					
						
							|  |  |  |         Homebrew's sbin was not found in your path. | 
					
						
							|  |  |  |         Consider ammending your PATH variable so it contains: | 
					
						
							| 
									
										
										
										
											2011-06-02 09:27:11 -07:00
										 |  |  |           #{HOMEBREW_PREFIX}/sbin | 
					
						
							| 
									
										
										
										
											2012-03-01 16:32:02 +00:00
										 |  |  |       EOS | 
					
						
							| 
									
										
										
										
											2011-06-02 09:27:11 -07:00
										 |  |  |     end | 
					
						
							| 
									
										
										
										
											2010-03-31 15:55:44 -07:00
										 |  |  |   end | 
					
						
							|  |  |  | end | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2010-04-20 12:20:57 -07:00
										 |  |  | def check_which_pkg_config | 
					
						
							| 
									
										
										
										
											2010-07-09 07:13:19 -07:00
										 |  |  |   binary = `/usr/bin/which pkg-config`.chomp | 
					
						
							| 
									
										
										
										
											2010-04-03 09:43:17 -07:00
										 |  |  |   return if binary.empty? | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |   unless binary == "#{HOMEBREW_PREFIX}/bin/pkg-config" | 
					
						
							| 
									
										
										
										
											2012-03-01 16:32:02 +00:00
										 |  |  |     <<-EOS.undent
 | 
					
						
							| 
									
										
										
										
											2010-04-03 09:43:17 -07:00
										 |  |  |       You have a non-brew 'pkg-config' in your PATH: | 
					
						
							|  |  |  |         #{binary} | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |       `./configure` may have problems finding brew-installed packages using | 
					
						
							|  |  |  |       this other pkg-config. | 
					
						
							|  |  |  |     EOS | 
					
						
							|  |  |  |   end | 
					
						
							|  |  |  | end | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2010-04-20 12:20:57 -07:00
										 |  |  | def check_pkg_config_paths | 
					
						
							| 
									
										
										
										
											2010-07-09 07:13:19 -07:00
										 |  |  |   binary = `/usr/bin/which pkg-config`.chomp | 
					
						
							| 
									
										
										
										
											2010-04-20 12:20:57 -07:00
										 |  |  |   return if binary.empty? | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |   # Use the debug output to determine which paths are searched | 
					
						
							|  |  |  |   pkg_config_paths = [] | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |   debug_output = `pkg-config --debug 2>&1` | 
					
						
							|  |  |  |   debug_output.split("\n").each do |line| | 
					
						
							|  |  |  |     line =~ /Scanning directory '(.*)'/ | 
					
						
							|  |  |  |     pkg_config_paths << $1 if $1 | 
					
						
							|  |  |  |   end | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |   # Check that all expected paths are being searched | 
					
						
							|  |  |  |   unless pkg_config_paths.include? "/usr/X11/lib/pkgconfig" | 
					
						
							| 
									
										
										
										
											2012-03-01 16:32:02 +00:00
										 |  |  |     <<-EOS.undent
 | 
					
						
							| 
									
										
										
										
											2010-04-20 12:20:57 -07:00
										 |  |  |       Your pkg-config is not checking "/usr/X11/lib/pkgconfig" for packages. | 
					
						
							|  |  |  |       Earlier versions of the pkg-config formula did not add this path | 
					
						
							|  |  |  |       to the search path, which means that other formula may not be able | 
					
						
							|  |  |  |       to find certain dependencies. | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |       To resolve this issue, re-brew pkg-config with: | 
					
						
							|  |  |  |         brew rm pkg-config && brew install pkg-config | 
					
						
							|  |  |  |     EOS | 
					
						
							|  |  |  |   end | 
					
						
							|  |  |  | end | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2010-05-01 10:50:14 -07:00
										 |  |  | def check_for_gettext | 
					
						
							| 
									
										
										
										
											2010-08-09 22:15:10 -07:00
										 |  |  |   if %w[lib/libgettextlib.dylib
 | 
					
						
							|  |  |  |         lib/libintl.dylib | 
					
						
							|  |  |  |         include/libintl.h ].any? { |f| File.exist? "#{HOMEBREW_PREFIX}/#{f}" } | 
					
						
							| 
									
										
										
										
											2012-03-01 16:32:02 +00:00
										 |  |  |     <<-EOS.undent
 | 
					
						
							| 
									
										
										
										
											2010-05-01 10:50:14 -07:00
										 |  |  |       gettext was detected in your PREFIX. | 
					
						
							|  |  |  |       The gettext provided by Homebrew is "keg-only", meaning it does not | 
					
						
							|  |  |  |       get linked into your PREFIX by default. | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |       If you `brew link gettext` then a large number of brews that don't | 
					
						
							|  |  |  |       otherwise have a `depends_on 'gettext'` will pick up gettext anyway | 
					
						
							|  |  |  |       during the `./configure` step. | 
					
						
							| 
									
										
										
										
											2010-06-24 17:05:57 -07:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2010-08-09 22:15:10 -07:00
										 |  |  |       If you have a non-Homebrew provided gettext, other problems will happen | 
					
						
							|  |  |  |       especially if it wasn't compiled with the proper architectures. | 
					
						
							|  |  |  |     EOS | 
					
						
							|  |  |  |   end | 
					
						
							|  |  |  | end | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | def check_for_iconv | 
					
						
							|  |  |  |   if %w[lib/libiconv.dylib
 | 
					
						
							|  |  |  |         include/iconv.h ].any? { |f| File.exist? "#{HOMEBREW_PREFIX}/#{f}" } | 
					
						
							| 
									
										
										
										
											2012-03-01 16:32:02 +00:00
										 |  |  |     <<-EOS.undent
 | 
					
						
							| 
									
										
										
										
											2010-08-09 22:15:10 -07:00
										 |  |  |       libiconv was detected in your PREFIX. | 
					
						
							|  |  |  |       Homebrew doesn't provide a libiconv formula, and expects to link against | 
					
						
							|  |  |  |       the system version in /usr/lib. | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |       If you have a non-Homebrew provided libiconv, many formulae will fail | 
					
						
							|  |  |  |       to compile or link, especially if it wasn't compiled with the proper | 
					
						
							|  |  |  |       architectures. | 
					
						
							| 
									
										
										
										
											2010-05-01 10:50:14 -07:00
										 |  |  |     EOS | 
					
						
							|  |  |  |   end | 
					
						
							|  |  |  | end | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2010-06-10 14:48:34 -07:00
										 |  |  | def check_for_config_scripts | 
					
						
							| 
									
										
										
										
											2011-05-21 03:38:34 +02:00
										 |  |  |   real_cellar = HOMEBREW_CELLAR.exist? && HOMEBREW_CELLAR.realpath | 
					
						
							| 
									
										
										
										
											2010-06-10 14:48:34 -07:00
										 |  |  | 
 | 
					
						
							|  |  |  |   config_scripts = [] | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2011-03-29 12:45:54 -07:00
										 |  |  |   path_folders.each do |p| | 
					
						
							| 
									
										
										
										
											2012-03-01 16:32:02 +00:00
										 |  |  |     next if ['/usr/bin', '/usr/sbin', '/usr/X11/bin', '/usr/X11R6/bin', "#{HOMEBREW_PREFIX}/bin", "#{HOMEBREW_PREFIX}/sbin", "/opt/X11/bin"].include? p | 
					
						
							| 
									
										
										
										
											2011-05-21 03:38:34 +02:00
										 |  |  |     next if p =~ %r[^(#{real_cellar.to_s}|#{HOMEBREW_CELLAR.to_s})] if real_cellar | 
					
						
							| 
									
										
										
										
											2010-06-10 14:48:34 -07:00
										 |  |  | 
 | 
					
						
							|  |  |  |     configs = Dir["#{p}/*-config"] | 
					
						
							|  |  |  |     # puts "#{p}\n    #{configs * ' '}" unless configs.empty? | 
					
						
							|  |  |  |     config_scripts << [p, configs.collect {|p| File.basename(p)}] unless configs.empty? | 
					
						
							|  |  |  |   end | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |   unless config_scripts.empty? | 
					
						
							| 
									
										
										
										
											2012-03-01 16:32:02 +00:00
										 |  |  |     s = <<-EOS.undent
 | 
					
						
							|  |  |  |       "config" scripts exist outside your system or Homebrew directories. | 
					
						
							| 
									
										
										
										
											2011-12-10 17:14:38 -06:00
										 |  |  |       `./configure` scripts often look for *-config scripts to determine if | 
					
						
							|  |  |  |       software packages are installed, and what additional flags to use when | 
					
						
							|  |  |  |       compiling and linking. | 
					
						
							| 
									
										
										
										
											2010-06-10 14:48:34 -07:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2011-12-10 17:14:38 -06:00
										 |  |  |       Having additional scripts in your path can confuse software installed via | 
					
						
							|  |  |  |       Homebrew if the config script overrides a system or Homebrew provided | 
					
						
							| 
									
										
										
										
											2012-03-01 16:32:02 +00:00
										 |  |  |       script of the same name. We found the following "config" scripts: | 
					
						
							| 
									
										
										
										
											2010-06-10 14:48:34 -07:00
										 |  |  | 
 | 
					
						
							|  |  |  |     EOS | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     config_scripts.each do |pair| | 
					
						
							| 
									
										
										
										
											2012-03-01 16:32:02 +00:00
										 |  |  |       dn = pair[0] | 
					
						
							|  |  |  |       pair[1].each do |fn| | 
					
						
							|  |  |  |         s << "    #{dn}/#{fn}\n" | 
					
						
							|  |  |  |       end | 
					
						
							| 
									
										
										
										
											2010-06-10 14:48:34 -07:00
										 |  |  |     end | 
					
						
							| 
									
										
										
										
											2012-03-01 16:32:02 +00:00
										 |  |  |     s | 
					
						
							| 
									
										
										
										
											2010-06-10 14:48:34 -07:00
										 |  |  |   end | 
					
						
							|  |  |  | end | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2010-06-25 19:22:54 -07:00
										 |  |  | def check_for_dyld_vars | 
					
						
							|  |  |  |   if ENV['DYLD_LIBRARY_PATH'] | 
					
						
							| 
									
										
										
										
											2012-03-01 16:32:02 +00:00
										 |  |  |     <<-EOS.undent
 | 
					
						
							| 
									
										
										
										
											2011-09-02 10:59:32 -03:00
										 |  |  |       Setting DYLD_LIBRARY_PATH can break dynamic linking. | 
					
						
							| 
									
										
										
										
											2010-06-25 19:22:54 -07:00
										 |  |  |       You should probably unset it. | 
					
						
							|  |  |  |     EOS | 
					
						
							|  |  |  |   end | 
					
						
							|  |  |  | end | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2012-03-12 21:14:33 -07:00
										 |  |  | def check_for_DYLD_INSERT_LIBRARIES | 
					
						
							|  |  |  |   if ENV['DYLD_INSERT_LIBRARIES'] | 
					
						
							|  |  |  |     <<-EOS.undent
 | 
					
						
							|  |  |  |       Setting DYLD_INSERT_LIBRARIES can cause Go builds to fail. | 
					
						
							|  |  |  |       Having this set is common if you use this software: | 
					
						
							|  |  |  |         http://asepsis.binaryage.com/ | 
					
						
							|  |  |  |     EOS | 
					
						
							|  |  |  |   end | 
					
						
							|  |  |  | end | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2010-06-24 17:11:50 -07:00
										 |  |  | def check_for_symlinked_cellar | 
					
						
							|  |  |  |   if HOMEBREW_CELLAR.symlink? | 
					
						
							| 
									
										
										
										
											2012-03-01 16:32:02 +00:00
										 |  |  |     <<-EOS.undent
 | 
					
						
							| 
									
										
										
										
											2010-06-24 17:11:50 -07:00
										 |  |  |       Symlinked Cellars can cause problems. | 
					
						
							|  |  |  |       Your Homebrew Cellar is a symlink: #{HOMEBREW_CELLAR} | 
					
						
							|  |  |  |                       which resolves to: #{HOMEBREW_CELLAR.realpath} | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |       The recommended Homebrew installations are either: | 
					
						
							| 
									
										
										
										
											2011-12-10 17:14:38 -06:00
										 |  |  |       (A) Have Cellar be a real directory inside of your HOMEBREW_PREFIX | 
					
						
							| 
									
										
										
										
											2010-06-24 17:11:50 -07:00
										 |  |  |       (B) Symlink "bin/brew" into your prefix, but don't symlink "Cellar". | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |       Older installations of Homebrew may have created a symlinked Cellar, but this can | 
					
						
							|  |  |  |       cause problems when two formula install to locations that are mapped on top of each | 
					
						
							|  |  |  |       other during the linking step. | 
					
						
							|  |  |  |     EOS | 
					
						
							|  |  |  |   end | 
					
						
							|  |  |  | end | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2010-06-28 09:39:14 -07:00
										 |  |  | def check_for_multiple_volumes | 
					
						
							| 
									
										
										
										
											2011-05-21 03:38:34 +02:00
										 |  |  |   return unless HOMEBREW_CELLAR.exist? | 
					
						
							| 
									
										
										
										
											2010-06-28 09:39:14 -07:00
										 |  |  |   volumes = Volumes.new | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |   # Find the volumes for the TMP folder & HOMEBREW_CELLAR | 
					
						
							|  |  |  |   real_cellar = HOMEBREW_CELLAR.realpath | 
					
						
							| 
									
										
										
										
											2010-08-16 09:32:16 -07:00
										 |  |  | 
 | 
					
						
							|  |  |  |   tmp_prefix = ENV['HOMEBREW_TEMP'] || '/tmp' | 
					
						
							| 
									
										
										
										
											2011-03-29 12:45:54 -07:00
										 |  |  |   tmp = Pathname.new `/usr/bin/mktemp -d #{tmp_prefix}/homebrew-brew-doctor-XXXX`.strip | 
					
						
							| 
									
										
										
										
											2010-06-28 09:39:14 -07:00
										 |  |  |   real_temp = tmp.realpath.parent | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |   where_cellar = volumes.which real_cellar | 
					
						
							|  |  |  |   where_temp = volumes.which real_temp | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2011-11-20 01:53:52 -08:00
										 |  |  |   Dir.delete tmp | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2012-03-01 16:32:02 +00:00
										 |  |  |   unless where_cellar == where_temp then <<-EOS.undent
 | 
					
						
							|  |  |  |     Your Cellar and TEMP directories are on different volumes. | 
					
						
							|  |  |  |     OS X won't move relative symlinks across volumes unless the target file already | 
					
						
							|  |  |  |     exists. Brews known to be affected by this are Git and Narwhal. | 
					
						
							| 
									
										
										
										
											2010-06-28 09:39:14 -07:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2012-03-01 16:32:02 +00:00
										 |  |  |     You should set the "HOMEBREW_TEMP" environmental variable to a suitable | 
					
						
							|  |  |  |     directory on the same volume as your Cellar. | 
					
						
							| 
									
										
										
										
											2010-06-28 09:39:14 -07:00
										 |  |  |     EOS | 
					
						
							|  |  |  |   end | 
					
						
							|  |  |  | end | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2010-07-09 07:13:19 -07:00
										 |  |  | def check_for_git | 
					
						
							| 
									
										
										
										
											2012-03-16 15:14:20 +13:00
										 |  |  |   unless which_s "git" then <<-EOS.undent
 | 
					
						
							| 
									
										
										
										
											2012-03-01 16:32:02 +00:00
										 |  |  |     Git could not be found in your PATH. | 
					
						
							|  |  |  |     Homebrew uses Git for several internal functions, and some formulae use Git | 
					
						
							|  |  |  |     checkouts instead of stable tarballs. You may want to install Git: | 
					
						
							|  |  |  |       brew install git | 
					
						
							| 
									
										
										
										
											2010-07-09 07:13:19 -07:00
										 |  |  |     EOS | 
					
						
							|  |  |  |   end | 
					
						
							|  |  |  | end | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2011-05-12 08:47:51 -07:00
										 |  |  | def check_git_newline_settings | 
					
						
							| 
									
										
										
										
											2012-03-16 15:14:20 +13:00
										 |  |  |   return unless which_s "git" | 
					
						
							| 
									
										
										
										
											2011-05-12 08:47:51 -07:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2011-12-16 20:14:19 -06:00
										 |  |  |   autocrlf = `git config --get core.autocrlf`.chomp | 
					
						
							|  |  |  |   safecrlf = `git config --get core.safecrlf`.chomp | 
					
						
							| 
									
										
										
										
											2011-05-12 08:47:51 -07:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2012-03-01 16:32:02 +00:00
										 |  |  |   if autocrlf == 'input' and safecrlf == 'true' then <<-EOS.undent
 | 
					
						
							| 
									
										
										
										
											2011-05-12 08:47:51 -07:00
										 |  |  |     Suspicious Git newline settings found. | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     The detected Git newline settings can cause checkout problems: | 
					
						
							| 
									
										
										
										
											2011-12-16 20:14:19 -06:00
										 |  |  |       core.autocrlf = #{autocrlf} | 
					
						
							|  |  |  |       core.safecrlf = #{safecrlf} | 
					
						
							| 
									
										
										
										
											2011-05-12 08:47:51 -07:00
										 |  |  | 
 | 
					
						
							|  |  |  |     If you are not routinely dealing with Windows-based projects, | 
					
						
							|  |  |  |     consider removing these settings. | 
					
						
							|  |  |  |     EOS | 
					
						
							|  |  |  |   end | 
					
						
							|  |  |  | end | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2010-08-09 21:33:06 -07:00
										 |  |  | def check_for_autoconf | 
					
						
							| 
									
										
										
										
											2012-02-27 00:41:17 +00:00
										 |  |  |   return if MacOS.xcode_version >= "4.3" | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2011-07-10 20:57:00 +02:00
										 |  |  |   autoconf = `/usr/bin/which autoconf`.chomp | 
					
						
							|  |  |  |   safe_autoconfs = %w[/usr/bin/autoconf /Developer/usr/bin/autoconf] | 
					
						
							| 
									
										
										
										
											2012-03-01 16:32:02 +00:00
										 |  |  |   unless autoconf.empty? or safe_autoconfs.include? autoconf then <<-EOS.undent
 | 
					
						
							|  |  |  |     An "autoconf" in your path blocks the Xcode-provided version at: | 
					
						
							|  |  |  |       #{autoconf} | 
					
						
							| 
									
										
										
										
											2010-08-09 21:33:06 -07:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2012-03-01 16:32:02 +00:00
										 |  |  |     This custom autoconf may cause some Homebrew formulae to fail to compile. | 
					
						
							| 
									
										
										
										
											2010-08-09 21:33:06 -07:00
										 |  |  |     EOS | 
					
						
							|  |  |  |   end | 
					
						
							|  |  |  | end | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2010-08-09 21:58:47 -07:00
										 |  |  | def __check_linked_brew f | 
					
						
							|  |  |  |   links_found = [] | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |   Pathname.new(f.prefix).find do |src| | 
					
						
							|  |  |  |     dst=HOMEBREW_PREFIX+src.relative_path_from(f.prefix) | 
					
						
							|  |  |  |     next unless dst.symlink? | 
					
						
							| 
									
										
										
										
											2010-10-20 20:05:44 -07:00
										 |  |  | 
 | 
					
						
							|  |  |  |     dst_points_to = dst.realpath() | 
					
						
							|  |  |  |     next unless dst_points_to.to_s == src.to_s | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     if src.directory? | 
					
						
							|  |  |  |       Find.prune | 
					
						
							|  |  |  |     else | 
					
						
							|  |  |  |       links_found << dst | 
					
						
							|  |  |  |     end | 
					
						
							| 
									
										
										
										
											2010-08-09 21:58:47 -07:00
										 |  |  |   end | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |   return links_found | 
					
						
							|  |  |  | end | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | def check_for_linked_kegonly_brews | 
					
						
							|  |  |  |   require 'formula' | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |   warnings = Hash.new | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |   Formula.all.each do |f| | 
					
						
							|  |  |  |     next unless f.keg_only? and f.installed? | 
					
						
							|  |  |  |     links = __check_linked_brew f | 
					
						
							|  |  |  |     warnings[f.name] = links unless links.empty? | 
					
						
							|  |  |  |   end | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |   unless warnings.empty? | 
					
						
							| 
									
										
										
										
											2012-03-01 16:32:02 +00:00
										 |  |  |     s = <<-EOS.undent
 | 
					
						
							| 
									
										
										
										
											2010-08-09 21:58:47 -07:00
										 |  |  |     Some keg-only formula are linked into the Cellar. | 
					
						
							|  |  |  |     Linking a keg-only formula, such as gettext, into the cellar with | 
					
						
							|  |  |  |     `brew link f` will cause other formulae to detect them during the | 
					
						
							|  |  |  |     `./configure` step. This may cause problems when compiling those | 
					
						
							|  |  |  |     other formulae. | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     Binaries provided by keg-only formulae may override system binaries | 
					
						
							|  |  |  |     with other strange results. | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     You may wish to `brew unlink` these brews: | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2012-03-01 16:32:02 +00:00
										 |  |  |     EOS | 
					
						
							|  |  |  |     warnings.keys.each{ |f| s << "    #{f}\n" } | 
					
						
							|  |  |  |     s | 
					
						
							| 
									
										
										
										
											2010-08-09 21:58:47 -07:00
										 |  |  |   end | 
					
						
							|  |  |  | end | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2011-03-28 11:57:57 -07:00
										 |  |  | def check_for_MACOSX_DEPLOYMENT_TARGET | 
					
						
							| 
									
										
										
										
											2010-11-05 07:01:00 -07:00
										 |  |  |   target_var = ENV['MACOSX_DEPLOYMENT_TARGET'] | 
					
						
							| 
									
										
										
										
											2012-03-01 16:32:02 +00:00
										 |  |  |   if target_var and target_var != MACOS_VERSION.to_s then <<-EOS.undent
 | 
					
						
							| 
									
										
										
										
											2011-12-16 20:20:33 -06:00
										 |  |  |     MACOSX_DEPLOYMENT_TARGET was set to #{target_var} | 
					
						
							| 
									
										
										
										
											2010-11-05 07:01:00 -07:00
										 |  |  |     This is used by Fink, but having it set to a value different from the | 
					
						
							|  |  |  |     current system version (#{MACOS_VERSION}) can cause problems, compiling | 
					
						
							|  |  |  |     Git for instance, and should probably be removed. | 
					
						
							|  |  |  |     EOS | 
					
						
							|  |  |  |   end | 
					
						
							|  |  |  | end | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2010-12-31 12:33:21 -08:00
										 |  |  | def check_for_other_frameworks | 
					
						
							|  |  |  |   # Other frameworks that are known to cause problems when present | 
					
						
							| 
									
										
										
										
											2012-03-01 16:32:02 +00:00
										 |  |  |   %w{Mono.framework expat.framework libexpat.framework}. | 
					
						
							|  |  |  |     map{ |frmwrk| "/Library/Frameworks/#{frmwrk}" }. | 
					
						
							|  |  |  |     select{ |frmwrk| File.exist? frmwrk }. | 
					
						
							|  |  |  |     map do |frmwrk| <<-EOS.undent
 | 
					
						
							|  |  |  |       #{frmwrk} detected | 
					
						
							|  |  |  |       This can be picked up by CMake's build system and likely cause the build to | 
					
						
							|  |  |  |       fail. You may need to move this file out of the way to compile CMake. | 
					
						
							| 
									
										
										
										
											2011-04-04 08:48:42 -07:00
										 |  |  |       EOS | 
					
						
							| 
									
										
										
										
											2012-03-01 16:32:02 +00:00
										 |  |  |     end.join | 
					
						
							| 
									
										
										
										
											2010-12-31 12:33:21 -08:00
										 |  |  | end | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2011-07-22 10:41:49 -07:00
										 |  |  | def check_tmpdir | 
					
						
							|  |  |  |   tmpdir = ENV['TMPDIR'] | 
					
						
							| 
									
										
										
										
											2012-03-01 16:32:02 +00:00
										 |  |  |   "TMPDIR #{tmpdir.inspect} doesn't exist." unless tmpdir.nil? or File.directory? tmpdir | 
					
						
							| 
									
										
										
										
											2011-07-22 10:41:49 -07:00
										 |  |  | end | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2011-08-31 15:36:29 +01:00
										 |  |  | def check_missing_deps | 
					
						
							| 
									
										
										
										
											2012-03-02 01:21:55 +00:00
										 |  |  |   s = [] | 
					
						
							|  |  |  |   `brew missing`.each_line do |line| | 
					
						
							|  |  |  |     line =~ /(.*): (.*)/ | 
					
						
							| 
									
										
										
										
											2012-03-06 17:03:39 +02:00
										 |  |  |     $2.split.each do |dep| | 
					
						
							|  |  |  |         s << dep unless s.include? dep | 
					
						
							|  |  |  |     end | 
					
						
							| 
									
										
										
										
											2012-03-02 01:21:55 +00:00
										 |  |  |   end | 
					
						
							| 
									
										
										
										
											2012-03-01 16:32:02 +00:00
										 |  |  |   if s.length > 0 then <<-EOS.undent
 | 
					
						
							| 
									
										
										
										
											2012-03-02 01:21:55 +00:00
										 |  |  |     Some installed formula are missing dependencies. | 
					
						
							|  |  |  |     You should `brew install` the missing dependencies: | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         brew install #{s * " "} | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     Run `brew missing` for more details. | 
					
						
							| 
									
										
										
										
											2012-03-01 16:32:02 +00:00
										 |  |  |     EOS | 
					
						
							| 
									
										
										
										
											2011-08-31 15:36:29 +01:00
										 |  |  |   end | 
					
						
							|  |  |  | end | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2011-09-09 09:24:03 +01:00
										 |  |  | def check_git_status | 
					
						
							| 
									
										
										
										
											2012-03-16 15:14:20 +13:00
										 |  |  |   return unless which_s "git" | 
					
						
							| 
									
										
										
										
											2011-12-28 19:32:40 -06:00
										 |  |  |   HOMEBREW_REPOSITORY.cd do | 
					
						
							| 
									
										
										
										
											2012-03-01 23:29:14 -06:00
										 |  |  |     unless `git status -s -- Library/Homebrew/ 2>/dev/null`.chomp.empty? then <<-EOS.undent
 | 
					
						
							| 
									
										
										
										
											2012-03-01 16:32:02 +00:00
										 |  |  |       You have uncommitted modifications to Homebrew's core. | 
					
						
							|  |  |  |       Unless you know what you are doing, you should run: | 
					
						
							|  |  |  |         cd #{HOMEBREW_REPOSITORY} && git reset --hard | 
					
						
							|  |  |  |       EOS | 
					
						
							| 
									
										
										
										
											2011-12-28 19:32:40 -06:00
										 |  |  |     end | 
					
						
							| 
									
										
										
										
											2011-09-09 09:24:03 +01:00
										 |  |  |   end | 
					
						
							|  |  |  | end | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2011-10-03 13:55:51 -05:00
										 |  |  | def check_for_leopard_ssl | 
					
						
							|  |  |  |   if MacOS.leopard? and not ENV['GIT_SSL_NO_VERIFY'] | 
					
						
							| 
									
										
										
										
											2012-03-01 16:32:02 +00:00
										 |  |  |     <<-EOS.undent
 | 
					
						
							| 
									
										
										
										
											2011-10-03 13:55:51 -05:00
										 |  |  |       The version of libcurl provided with Mac OS X Leopard has outdated | 
					
						
							|  |  |  |       SSL certificates. | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |       This can cause problems when running Homebrew commands that use Git to | 
					
						
							|  |  |  |       fetch over HTTPS, e.g. `brew update` or installing formulae that perform | 
					
						
							|  |  |  |       Git checkouts. | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2011-12-16 20:20:33 -06:00
										 |  |  |       You can force Git to ignore these errors by setting GIT_SSL_NO_VERIFY. | 
					
						
							| 
									
										
										
										
											2011-10-03 13:55:51 -05:00
										 |  |  |         export GIT_SSL_NO_VERIFY=1
 | 
					
						
							|  |  |  |     EOS | 
					
						
							|  |  |  |   end | 
					
						
							|  |  |  | end | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2011-10-10 18:20:50 -05:00
										 |  |  | def check_git_version | 
					
						
							|  |  |  |   # see https://github.com/blog/642-smart-http-support | 
					
						
							| 
									
										
										
										
											2012-03-16 15:14:20 +13:00
										 |  |  |   return unless which_s "git" | 
					
						
							| 
									
										
										
										
											2011-10-10 18:20:50 -05:00
										 |  |  |   `git --version`.chomp =~ /git version (\d)\.(\d)\.(\d)/ | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2012-03-01 16:32:02 +00:00
										 |  |  |   if $2.to_i < 6 or $2.to_i == 6 and $3.to_i < 6 then <<-EOS.undent
 | 
					
						
							|  |  |  |     An outdated version of Git was detected in your PATH. | 
					
						
							|  |  |  |     Git 1.6.6 or newer is required to perform checkouts over HTTP from GitHub. | 
					
						
							|  |  |  |     Please upgrade: brew upgrade git | 
					
						
							| 
									
										
										
										
											2011-10-10 18:20:50 -05:00
										 |  |  |     EOS | 
					
						
							|  |  |  |   end | 
					
						
							|  |  |  | end | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2011-12-18 08:36:44 -08:00
										 |  |  | def check_for_enthought_python | 
					
						
							| 
									
										
										
										
											2012-03-16 15:14:20 +13:00
										 |  |  |   if which_s "enpkg" then <<-EOS.undent
 | 
					
						
							| 
									
										
										
										
											2011-12-18 08:36:44 -08:00
										 |  |  |     Enthought Python was found in your PATH. | 
					
						
							|  |  |  |     This can cause build problems, as this software installs its own | 
					
						
							| 
									
										
										
										
											2011-12-10 17:14:38 -06:00
										 |  |  |     copies of iconv and libxml2 into directories that are picked up by | 
					
						
							| 
									
										
										
										
											2011-12-18 08:36:44 -08:00
										 |  |  |     other build systems. | 
					
						
							| 
									
										
										
										
											2012-03-01 16:32:02 +00:00
										 |  |  |     EOS | 
					
						
							|  |  |  |   end | 
					
						
							| 
									
										
										
										
											2011-12-18 08:36:44 -08:00
										 |  |  | end | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2012-03-06 12:19:53 +00:00
										 |  |  | def check_for_bad_python_symlink | 
					
						
							| 
									
										
										
										
											2012-03-16 15:14:20 +13:00
										 |  |  |   return unless which_s "python" | 
					
						
							| 
									
										
										
										
											2012-03-06 12:19:53 +00:00
										 |  |  |   # Indeed Python --version outputs to stderr (WTF?) | 
					
						
							|  |  |  |   `python --version 2>&1` =~ /Python (\d+)\./ | 
					
						
							|  |  |  |   unless $1 == "2" then <<-EOS.undent
 | 
					
						
							|  |  |  |     python is symlinked to python#$1 | 
					
						
							|  |  |  |     This will confuse build scripts and in general lead to subtle breakage. | 
					
						
							|  |  |  |     EOS | 
					
						
							|  |  |  |   end | 
					
						
							|  |  |  | end | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2012-03-06 18:09:09 +00:00
										 |  |  | def check_for_outdated_homebrew | 
					
						
							| 
									
										
										
										
											2012-03-10 10:08:16 -08:00
										 |  |  |   HOMEBREW_REPOSITORY.cd do | 
					
						
							| 
									
										
										
										
											2012-03-06 18:09:09 +00:00
										 |  |  |     timestamp = if File.directory? ".git" | 
					
						
							|  |  |  |       `git log -1 --format="%ct" HEAD`.to_i | 
					
						
							|  |  |  |     else | 
					
						
							| 
									
										
										
										
											2012-03-10 10:08:16 -08:00
										 |  |  |       (HOMEBREW_REPOSITORY/"Library").mtime.to_i | 
					
						
							| 
									
										
										
										
											2012-03-06 18:09:09 +00:00
										 |  |  |     end | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     if Time.now.to_i - timestamp > 60 * 60 * 24 then <<-EOS.undent
 | 
					
						
							|  |  |  |       Your Homebrew is outdated | 
					
						
							|  |  |  |       You haven't updated for at least 24 hours, this is a long time in brewland! | 
					
						
							|  |  |  |       EOS | 
					
						
							|  |  |  |     end | 
					
						
							|  |  |  |   end | 
					
						
							|  |  |  | end | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2012-03-09 11:36:34 +00:00
										 |  |  | def check_for_unlinked_but_not_keg_only | 
					
						
							|  |  |  |   unlinked = HOMEBREW_CELLAR.children.reject do |rack| | 
					
						
							| 
									
										
										
										
											2012-03-18 00:15:48 +00:00
										 |  |  |     if not rack.directory? | 
					
						
							|  |  |  |       true | 
					
						
							|  |  |  |     elsif not (HOMEBREW_REPOSITORY/"Library/LinkedKegs"/rack.basename).directory? | 
					
						
							| 
									
										
										
										
											2012-03-09 11:36:34 +00:00
										 |  |  |       Formula.factory(rack.basename).keg_only? rescue nil | 
					
						
							|  |  |  |     else | 
					
						
							|  |  |  |       true | 
					
						
							|  |  |  |     end | 
					
						
							|  |  |  |   end.map{ |pn| pn.basename } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |   if not unlinked.empty? then <<-EOS.undent
 | 
					
						
							|  |  |  |     You have unlinked kegs in your Cellar | 
					
						
							|  |  |  |     Leaving kegs unlinked can lead to build-trouble and cause brews that depend on | 
					
						
							|  |  |  |     those kegs to fail to run properly once built. | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         #{unlinked * "\n        "} | 
					
						
							|  |  |  |     EOS | 
					
						
							|  |  |  |   end | 
					
						
							|  |  |  | end | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2012-03-17 11:56:32 -07:00
										 |  |  | def check_os_version | 
					
						
							|  |  |  |   if MACOS_FULL_VERSION =~ /^10\.6(\.|$)/ | 
					
						
							|  |  |  |     unless (MACOS_FULL_VERSION == "10.6.8") | 
					
						
							|  |  |  |       return <<-EOS.undent
 | 
					
						
							|  |  |  |         Please update Snow Leopard. | 
					
						
							|  |  |  |         10.6.8 is the supported version of Snow Leopard. | 
					
						
							|  |  |  |         You are still running #{MACOS_FULL_VERSION}. | 
					
						
							|  |  |  |       EOS | 
					
						
							|  |  |  |     end | 
					
						
							|  |  |  |   elsif MACOS_FULL_VERSION =~ /^10\.5(\.|$)/ | 
					
						
							|  |  |  |     unless (MACOS_FULL_VERSION == "10.5.8") | 
					
						
							|  |  |  |       return <<-EOS.undent
 | 
					
						
							|  |  |  |         Please update Leopard. | 
					
						
							|  |  |  |         10.5.8 is the supported version of Leopard. | 
					
						
							|  |  |  |         You are still running #{MACOS_FULL_VERSION}. | 
					
						
							|  |  |  |       EOS | 
					
						
							|  |  |  |     end | 
					
						
							|  |  |  |   end | 
					
						
							|  |  |  | end | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2012-03-01 16:32:02 +00:00
										 |  |  | end # end class Checks | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2010-09-11 20:22:54 +01:00
										 |  |  | module Homebrew extend self | 
					
						
							| 
									
										
										
										
											2010-11-09 13:00:33 +00:00
										 |  |  |   def doctor | 
					
						
							| 
									
										
										
										
											2012-03-01 16:32:02 +00:00
										 |  |  |     raring_to_brew = true | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     checks = Checks.new | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     checks.methods.select{ |method| method =~ /^check_/ }.sort.each do |method| | 
					
						
							|  |  |  |       out = checks.send(method) | 
					
						
							|  |  |  |       unless out.nil? or out.empty? | 
					
						
							|  |  |  |         puts unless raring_to_brew | 
					
						
							|  |  |  |         lines = out.to_s.split('\n') | 
					
						
							|  |  |  |         opoo lines.shift | 
					
						
							|  |  |  |         puts lines | 
					
						
							|  |  |  |         raring_to_brew = false | 
					
						
							|  |  |  |       end | 
					
						
							| 
									
										
										
										
											2011-05-21 03:40:48 +02:00
										 |  |  |     end | 
					
						
							| 
									
										
										
										
											2010-11-09 13:00:33 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2012-03-01 16:32:02 +00:00
										 |  |  |     puts "Your system is raring to brew." if raring_to_brew | 
					
						
							| 
									
										
										
										
											2012-03-08 00:10:34 -08:00
										 |  |  |     exit raring_to_brew ? 0 : 1
 | 
					
						
							| 
									
										
										
										
											2010-03-31 14:55:41 -07:00
										 |  |  |   end | 
					
						
							|  |  |  | end |