| 
									
										
										
										
											2010-06-28 09:39:14 -07:00
										 |  |  | class Volumes | 
					
						
							|  |  |  |   def initialize | 
					
						
							|  |  |  |     @volumes = [] | 
					
						
							|  |  |  |     raw_mounts=`mount` | 
					
						
							|  |  |  |     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] | 
					
						
							|  |  |  |       return i if is_prefix?(vol[1], path) | 
					
						
							|  |  |  |     end | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     return -1
 | 
					
						
							|  |  |  |   end | 
					
						
							|  |  |  | end | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | def is_prefix? prefix, longer_string | 
					
						
							|  |  |  |   p = prefix.to_s | 
					
						
							|  |  |  |   longer_string.to_s[0,p.length] == p | 
					
						
							|  |  |  | 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" | 
					
						
							| 
									
										
										
										
											2010-08-18 09:09:38 -07:00
										 |  |  |     puts <<-EOS.undent
 | 
					
						
							|  |  |  |       If you 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/. | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     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? | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |   opoo "Unbrewed dylibs were found in /usr/local/lib" | 
					
						
							|  |  |  |   puts <<-EOS.undent
 | 
					
						
							|  |  |  |     You have unbrewed dylibs in /usr/local/lib. If you didn't put them there on purpose, | 
					
						
							|  |  |  |     they could cause problems when building Homebrew formulae. | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     Unexpected dylibs (delete if they are no longer needed): | 
					
						
							|  |  |  |   EOS | 
					
						
							|  |  |  |   puts *bad_dylibs.collect { |f| "    #{f}" } | 
					
						
							|  |  |  |   puts | 
					
						
							| 
									
										
										
										
											2010-03-31 14:58:32 -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? | 
					
						
							|  |  |  |     opoo "X11 not installed." | 
					
						
							| 
									
										
										
										
											2010-03-31 15:22:20 -07:00
										 |  |  |     puts <<-EOS.undent
 | 
					
						
							|  |  |  |       You don't have X11 installed as part of your Xcode installation. | 
					
						
							| 
									
										
										
										
											2010-06-29 10:21:40 -07:00
										 |  |  |       This isn't 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 | 
					
						
							|  |  |  |   return unless File.exists? '/usr/X11' | 
					
						
							|  |  |  |   x11 = Pathname.new('/usr/X11') | 
					
						
							|  |  |  |   if x11.symlink? | 
					
						
							|  |  |  |     puts <<-EOS.undent
 | 
					
						
							|  |  |  |       "/usr/X11" was found, but it is a symlink to: | 
					
						
							|  |  |  |         #{x11.resolved_path} | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											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? | 
					
						
							| 
									
										
										
										
											2010-03-31 15:22:20 -07:00
										 |  |  |     puts <<-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. | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         sudo mv /opt/local ~/macports
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     EOS | 
					
						
							| 
									
										
										
										
											2010-03-31 15:00:40 -07:00
										 |  |  |   end | 
					
						
							|  |  |  | end | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2010-03-31 15:06:46 -07:00
										 |  |  | def check_gcc_versions | 
					
						
							|  |  |  |   gcc_42 = gcc_42_build | 
					
						
							|  |  |  |   gcc_40 = gcc_40_build | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2010-05-01 09:02:18 -07:00
										 |  |  |   if gcc_42 == nil | 
					
						
							|  |  |  |     puts <<-EOS.undent
 | 
					
						
							| 
									
										
										
										
											2010-08-09 21:06:33 -07:00
										 |  |  |       We couldn't detect gcc 4.2.x. Some formulae require this compiler. | 
					
						
							| 
									
										
										
										
											2010-05-01 09:02:18 -07:00
										 |  |  | 
 | 
					
						
							|  |  |  |     EOS | 
					
						
							|  |  |  |   elsif gcc_42 < RECOMMENDED_GCC_42 | 
					
						
							| 
									
										
										
										
											2010-03-31 15:22:20 -07:00
										 |  |  |     puts <<-EOS.undent
 | 
					
						
							|  |  |  |       Your gcc 4.2.x version is older than the recommended version. It may be advisable | 
					
						
							|  |  |  |       to upgrade to the latest release of Xcode. | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     EOS | 
					
						
							| 
									
										
										
										
											2010-03-31 15:06:46 -07:00
										 |  |  |   end | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2010-05-01 09:02:18 -07:00
										 |  |  |   if gcc_40 == nil | 
					
						
							|  |  |  |     puts <<-EOS.undent
 | 
					
						
							| 
									
										
										
										
											2010-08-09 21:06:33 -07:00
										 |  |  |       We couldn't detect gcc 4.0.x. Some formulae require this compiler. | 
					
						
							| 
									
										
										
										
											2010-05-01 09:02:18 -07:00
										 |  |  | 
 | 
					
						
							|  |  |  |     EOS | 
					
						
							|  |  |  |   elsif gcc_40 < RECOMMENDED_GCC_40 | 
					
						
							| 
									
										
										
										
											2010-03-31 15:22:20 -07:00
										 |  |  |     puts <<-EOS.undent
 | 
					
						
							|  |  |  |       Your gcc 4.0.x version is older than the recommended version. It may be advisable | 
					
						
							|  |  |  |       to upgrade to the latest release of Xcode. | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     EOS | 
					
						
							| 
									
										
										
										
											2010-03-31 15:06:46 -07:00
										 |  |  |   end | 
					
						
							|  |  |  | end | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2010-08-09 21:06:33 -07:00
										 |  |  | def check_cc_symlink | 
					
						
							|  |  |  |     which_cc = Pathname.new('/usr/bin/cc').realpath.basename.to_s | 
					
						
							|  |  |  |     if which_cc == "llvm-gcc-4.2" | 
					
						
							|  |  |  |       puts <<-EOS.undent
 | 
					
						
							|  |  |  |         You changed your cc to symlink to llvm. | 
					
						
							|  |  |  |         This bypasses LLVM checks, and some formulae may mysteriously fail to work. | 
					
						
							|  |  |  |         You may want to change /usr/bin/cc to point back at gcc. | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         To force Homebrew to use LLVM, you can set the "HOMEBREW_LLVM" environmental | 
					
						
							| 
									
										
										
										
											2010-09-07 10:05:51 -07:00
										 |  |  |         variable, or pass "--use-llvm" to "brew install". | 
					
						
							| 
									
										
										
										
											2010-08-09 21:06:33 -07:00
										 |  |  | 
 | 
					
						
							|  |  |  |       EOS | 
					
						
							|  |  |  |     end | 
					
						
							|  |  |  | 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! | 
					
						
							| 
									
										
										
										
											2010-04-12 13:09:51 -07:00
										 |  |  |   if cant_read.length > 0
 | 
					
						
							| 
									
										
										
										
											2010-03-31 15:38:20 -07:00
										 |  |  |     puts <<-EOS.undent
 | 
					
						
							| 
									
										
										
										
											2010-07-30 09:23:29 -07:00
										 |  |  |     Some folders 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 | 
					
						
							|  |  |  |     folders, then the install will fail during the link step. | 
					
						
							|  |  |  |     You should probably `chown` them: | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     EOS | 
					
						
							|  |  |  |     puts *cant_read.collect { |f| "    #{f}" } | 
					
						
							|  |  |  |     puts | 
					
						
							|  |  |  |   end | 
					
						
							| 
									
										
										
										
											2010-07-01 10:16:15 -07:00
										 |  |  | 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 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2010-07-01 10:16:15 -07:00
										 |  |  | def check_access_pkgconfig | 
					
						
							|  |  |  |   # If PREFIX/lib/pkgconfig already exists, "sudo make install" of | 
					
						
							|  |  |  |   # non-brew installed software may cause installation failures. | 
					
						
							|  |  |  |   pkgconfig = HOMEBREW_PREFIX+'lib/pkgconfig' | 
					
						
							|  |  |  |   return unless pkgconfig.exist? | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |   unless pkgconfig.writable? | 
					
						
							|  |  |  |     puts <<-EOS.undent
 | 
					
						
							|  |  |  |       #{pkgconfig} isn't writable. | 
					
						
							|  |  |  |       This can happen if you "sudo make install" software that isn't managed | 
					
						
							|  |  |  |       by Homebrew. If a brew tries to write a .pc file to this folder, the | 
					
						
							|  |  |  |       install will fail during the link step. | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |       You should probably `chown` #{pkgconfig} | 
					
						
							| 
									
										
										
										
											2010-03-31 15:38:20 -07:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2010-07-01 10:16:15 -07:00
										 |  |  |     EOS | 
					
						
							|  |  |  |   end | 
					
						
							| 
									
										
										
										
											2010-03-31 15:09:03 -07:00
										 |  |  | end | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | def check_usr_bin_ruby | 
					
						
							| 
									
										
										
										
											2010-03-31 15:19:19 -07:00
										 |  |  |   if /^1\.9/.match RUBY_VERSION | 
					
						
							|  |  |  |     puts <<-EOS.undent
 | 
					
						
							|  |  |  |       Ruby version #{RUBY_VERSION} is unsupported. | 
					
						
							|  |  |  |       Homebrew is developed and tested on Ruby 1.8.x, and may not work correctly | 
					
						
							|  |  |  |       on Ruby 1.9.x. Patches are accepted as long as they don't break on 1.8.x. | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     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' | 
					
						
							|  |  |  |     puts <<-EOS.undent
 | 
					
						
							|  |  |  |       You can install Homebrew anywhere you want, but some brews may not work | 
					
						
							|  |  |  |       correctly if you're not installing to /usr/local. | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     EOS | 
					
						
							|  |  |  |   end | 
					
						
							| 
									
										
										
										
											2010-03-31 15:09:03 -07:00
										 |  |  | end | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2010-03-31 15:55:44 -07:00
										 |  |  | def check_user_path | 
					
						
							|  |  |  |   seen_prefix_bin = false | 
					
						
							|  |  |  |   seen_prefix_sbin = false | 
					
						
							|  |  |  |   seen_usr_bin = false | 
					
						
							| 
									
										
										
										
											2010-04-08 17:50:51 -07:00
										 |  |  | 
 | 
					
						
							|  |  |  |   paths = ENV['PATH'].split(':').collect{|p| File.expand_path p} | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2010-03-31 15:55:44 -07:00
										 |  |  |   paths.each do |p| | 
					
						
							|  |  |  |     if p == '/usr/bin' | 
					
						
							|  |  |  |       seen_usr_bin = true | 
					
						
							|  |  |  |       unless seen_prefix_bin | 
					
						
							|  |  |  |         puts <<-EOS.undent
 | 
					
						
							|  |  |  |           /usr/bin is in your PATH before Homebrew's bin. This means that system- | 
					
						
							|  |  |  |           provided programs will be used before Homebrew-provided ones. This is an | 
					
						
							|  |  |  |           issue if you install, for instance, Python. | 
					
						
							| 
									
										
										
										
											2010-04-08 17:50:51 -07:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2010-03-31 15:55:44 -07:00
										 |  |  |           Consider editing your .bashrc to put: | 
					
						
							|  |  |  |             #{HOMEBREW_PREFIX}/bin | 
					
						
							| 
									
										
										
										
											2010-04-08 17:50:51 -07:00
										 |  |  |           ahead of /usr/bin in your $PATH. | 
					
						
							| 
									
										
										
										
											2010-03-31 15:55:44 -07:00
										 |  |  | 
 | 
					
						
							|  |  |  |         EOS | 
					
						
							|  |  |  |       end | 
					
						
							|  |  |  |     end | 
					
						
							| 
									
										
										
										
											2010-04-08 17:50:51 -07:00
										 |  |  | 
 | 
					
						
							|  |  |  |     seen_prefix_bin  = true if p == "#{HOMEBREW_PREFIX}/bin" | 
					
						
							| 
									
										
										
										
											2010-03-31 15:55:44 -07:00
										 |  |  |     seen_prefix_sbin = true if p == "#{HOMEBREW_PREFIX}/sbin" | 
					
						
							|  |  |  |   end | 
					
						
							| 
									
										
										
										
											2010-04-08 17:50:51 -07:00
										 |  |  | 
 | 
					
						
							|  |  |  |   unless seen_prefix_bin | 
					
						
							|  |  |  |     puts <<-EOS.undent
 | 
					
						
							|  |  |  |       Homebrew's bin was not found in your path. Some brews depend | 
					
						
							|  |  |  |       on other brews that install tools to bin. | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |       You should edit your .bashrc to add: | 
					
						
							|  |  |  |         #{HOMEBREW_PREFIX}/bin | 
					
						
							|  |  |  |       to $PATH. | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |       EOS | 
					
						
							|  |  |  |   end | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2010-03-31 15:55:44 -07:00
										 |  |  |   unless seen_prefix_sbin | 
					
						
							|  |  |  |     puts <<-EOS.undent
 | 
					
						
							|  |  |  |       Some brews install binaries to sbin instead of bin, but Homebrew's | 
					
						
							|  |  |  |       sbin was not found in your path. | 
					
						
							| 
									
										
										
										
											2010-04-08 17:50:51 -07:00
										 |  |  | 
 | 
					
						
							|  |  |  |       Consider editing your .bashrc to add: | 
					
						
							| 
									
										
										
										
											2010-03-31 15:55:44 -07:00
										 |  |  |         #{HOMEBREW_PREFIX}/sbin | 
					
						
							| 
									
										
										
										
											2010-04-08 17:50:51 -07:00
										 |  |  |       to $PATH. | 
					
						
							| 
									
										
										
										
											2010-03-31 15:55:44 -07:00
										 |  |  | 
 | 
					
						
							|  |  |  |       EOS | 
					
						
							|  |  |  |   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" | 
					
						
							|  |  |  |     puts <<-EOS.undent
 | 
					
						
							|  |  |  |       You have a non-brew 'pkg-config' in your PATH: | 
					
						
							|  |  |  |         #{binary} | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |       `./configure` may have problems finding brew-installed packages using | 
					
						
							|  |  |  |       this other pkg-config. | 
					
						
							| 
									
										
										
										
											2010-04-08 17:50:51 -07:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2010-04-03 09:43:17 -07:00
										 |  |  |     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" | 
					
						
							|  |  |  |     puts <<-EOS.undent
 | 
					
						
							|  |  |  |       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 | 
					
						
							| 
									
										
										
										
											2010-06-24 17:05:57 -07:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2010-04-20 12:20:57 -07:00
										 |  |  |     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}" } | 
					
						
							| 
									
										
										
										
											2010-05-01 10:50:14 -07:00
										 |  |  |     puts <<-EOS.undent
 | 
					
						
							|  |  |  |       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}" } | 
					
						
							|  |  |  |     puts <<-EOS.undent
 | 
					
						
							|  |  |  |       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 | 
					
						
							|  |  |  |   real_cellar = HOMEBREW_CELLAR.realpath | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |   config_scripts = [] | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |   paths = ENV['PATH'].split(':').collect{|p| File.expand_path p} | 
					
						
							|  |  |  |   paths.each do |p| | 
					
						
							|  |  |  |     next if ['/usr/bin', '/usr/sbin', '/usr/X11/bin', "#{HOMEBREW_PREFIX}/bin", "#{HOMEBREW_PREFIX}/sbin"].include? p | 
					
						
							| 
									
										
										
										
											2010-08-07 15:36:54 -07:00
										 |  |  |     next if p =~ %r[^(#{real_cellar.to_s}|#{HOMEBREW_CELLAR.to_s})] | 
					
						
							| 
									
										
										
										
											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? | 
					
						
							|  |  |  |     puts <<-EOS.undent
 | 
					
						
							|  |  |  |       Some "config" scripts were found in your path, but not in system or Homebrew folders. | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |       `./configure` scripts often look for *-config scripts to determine if software packages | 
					
						
							|  |  |  |       are installed, and what additional flags to use when compiling and linking. | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |       Having additional scripts in your path can confuse software installed via Homebrew if | 
					
						
							|  |  |  |       the config script overrides a system or Homebrew provided script of the same name. | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     EOS | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     config_scripts.each do |pair| | 
					
						
							|  |  |  |       puts pair[0] | 
					
						
							|  |  |  |       puts "    " + pair[1] * " " | 
					
						
							|  |  |  |     end | 
					
						
							| 
									
										
										
										
											2010-06-24 17:05:57 -07:00
										 |  |  |     puts | 
					
						
							| 
									
										
										
										
											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'] | 
					
						
							|  |  |  |     puts <<-EOS.undent
 | 
					
						
							|  |  |  |       Setting DYLD_LIBARY_PATH can break dynamic linking. | 
					
						
							|  |  |  |       You should probably unset it. | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     EOS | 
					
						
							|  |  |  |   end | 
					
						
							|  |  |  | end | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2010-06-24 17:11:50 -07:00
										 |  |  | def check_for_symlinked_cellar | 
					
						
							|  |  |  |   if HOMEBREW_CELLAR.symlink? | 
					
						
							|  |  |  |     puts <<-EOS.undent
 | 
					
						
							|  |  |  |       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: | 
					
						
							|  |  |  |       (A) Have Cellar be a real folder inside of your HOMEBREW_PREFIX | 
					
						
							|  |  |  |       (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 | 
					
						
							|  |  |  |   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' | 
					
						
							|  |  |  |   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 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |   unless where_cellar == where_temp | 
					
						
							|  |  |  |     puts <<-EOS.undent
 | 
					
						
							| 
									
										
										
										
											2010-08-16 09:32:16 -07:00
										 |  |  |       Your Cellar & TEMP folders are on different volumes. | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |       OS X won't move relative symlinks across volumes unless the target file | 
					
						
							|  |  |  |       already exists. | 
					
						
							| 
									
										
										
										
											2010-06-28 09:39:14 -07:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2010-08-16 09:32:16 -07:00
										 |  |  |       Brews known to be affected by this are Git and Narwhal. | 
					
						
							| 
									
										
										
										
											2010-06-28 09:39:14 -07:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2010-05-01 14:06:23 -07:00
										 |  |  |       You should set the "HOMEBREW_TEMP" environmental variable to a suitable | 
					
						
							|  |  |  |       folder 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 | 
					
						
							|  |  |  |   git = `/usr/bin/which git`.chomp | 
					
						
							|  |  |  |   if git.empty? | 
					
						
							|  |  |  |     puts <<-EOS.undent
 | 
					
						
							|  |  |  |       "Git" was not found in your path. | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |       Homebrew uses Git for several internal functions, and some formulae | 
					
						
							|  |  |  |       (Erlang in particular) use Git checkouts instead of stable tarballs. | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |       You may want to do: | 
					
						
							|  |  |  |         brew install git | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     EOS | 
					
						
							|  |  |  |   end | 
					
						
							|  |  |  | end | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2010-08-09 21:33:06 -07:00
										 |  |  | def check_for_autoconf | 
					
						
							|  |  |  |   which_autoconf = `/usr/bin/which autoconf`.chomp | 
					
						
							|  |  |  |   if which_autoconf != '/usr/bin/autoconf' | 
					
						
							|  |  |  |     puts <<-EOS.undent
 | 
					
						
							|  |  |  |       You have an "autoconf" in your path blocking the system version at: | 
					
						
							|  |  |  |         #{which_autoconf} | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |       Custom autoconf in general and autoconf 2.66 in particular has issues | 
					
						
							|  |  |  |       and will cause some Homebrew formulae to fail. | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     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? | 
					
						
							|  |  |  |     links_found << dst unless src.directory? | 
					
						
							|  |  |  |     Find.prune if src.directory? | 
					
						
							|  |  |  |   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? | 
					
						
							|  |  |  |     puts <<-EOS.undent
 | 
					
						
							|  |  |  |     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: | 
					
						
							|  |  |  |     EOS | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     puts *warnings.keys.collect { |f| "    #{f}" } | 
					
						
							|  |  |  |   end | 
					
						
							|  |  |  | end | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2010-03-31 14:55:41 -07:00
										 |  |  | def brew_doctor | 
					
						
							|  |  |  |   read, write = IO.pipe | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |   if fork == nil | 
					
						
							|  |  |  |     read.close | 
					
						
							|  |  |  |     $stdout.reopen write | 
					
						
							| 
									
										
										
										
											2010-06-10 14:48:34 -07:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2010-03-31 15:19:19 -07:00
										 |  |  |     check_usr_bin_ruby | 
					
						
							| 
									
										
										
										
											2010-03-31 15:20:13 -07:00
										 |  |  |     check_homebrew_prefix | 
					
						
							| 
									
										
										
										
											2010-08-18 09:09:38 -07:00
										 |  |  |     check_for_macgpg2 | 
					
						
							| 
									
										
										
										
											2010-03-31 14:58:32 -07:00
										 |  |  |     check_for_stray_dylibs | 
					
						
							| 
									
										
										
										
											2010-03-31 15:06:46 -07:00
										 |  |  |     check_gcc_versions | 
					
						
							| 
									
										
										
										
											2010-08-09 21:06:33 -07:00
										 |  |  |     check_cc_symlink | 
					
						
							| 
									
										
										
										
											2010-03-31 15:00:40 -07:00
										 |  |  |     check_for_other_package_managers | 
					
						
							| 
									
										
										
										
											2010-03-31 14:59:50 -07:00
										 |  |  |     check_for_x11 | 
					
						
							| 
									
										
										
										
											2010-07-25 12:07:41 -07:00
										 |  |  |     check_for_nonstandard_x11 | 
					
						
							| 
									
										
										
										
											2010-07-01 10:16:15 -07:00
										 |  |  |     check_access_share_locale | 
					
						
							| 
									
										
										
										
											2010-07-30 09:23:29 -07:00
										 |  |  |     check_access_share_man | 
					
						
							| 
									
										
										
										
											2010-03-31 15:55:44 -07:00
										 |  |  |     check_user_path | 
					
						
							| 
									
										
										
										
											2010-04-20 12:20:57 -07:00
										 |  |  |     check_which_pkg_config | 
					
						
							|  |  |  |     check_pkg_config_paths | 
					
						
							| 
									
										
										
										
											2010-07-01 10:16:15 -07:00
										 |  |  |     check_access_pkgconfig | 
					
						
							| 
									
										
										
										
											2010-05-01 10:50:14 -07:00
										 |  |  |     check_for_gettext | 
					
						
							| 
									
										
										
										
											2010-06-10 14:48:34 -07:00
										 |  |  |     check_for_config_scripts | 
					
						
							| 
									
										
										
										
											2010-06-25 19:22:54 -07:00
										 |  |  |     check_for_dyld_vars | 
					
						
							| 
									
										
										
										
											2010-06-24 17:11:50 -07:00
										 |  |  |     check_for_symlinked_cellar | 
					
						
							| 
									
										
										
										
											2010-06-28 09:39:14 -07:00
										 |  |  |     check_for_multiple_volumes | 
					
						
							| 
									
										
										
										
											2010-07-09 07:13:19 -07:00
										 |  |  |     check_for_git | 
					
						
							| 
									
										
										
										
											2010-08-09 21:33:06 -07:00
										 |  |  |     check_for_autoconf | 
					
						
							| 
									
										
										
										
											2010-08-09 21:58:47 -07:00
										 |  |  |     check_for_linked_kegonly_brews | 
					
						
							| 
									
										
										
										
											2010-03-31 14:55:41 -07:00
										 |  |  | 
 | 
					
						
							|  |  |  |     exit! 0
 | 
					
						
							|  |  |  |   else | 
					
						
							|  |  |  |     write.close | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     unless (out = read.read).chomp.empty? | 
					
						
							|  |  |  |       puts out | 
					
						
							|  |  |  |     else | 
					
						
							| 
									
										
										
										
											2010-08-07 11:44:45 -07:00
										 |  |  |       puts "Your OS X is ripe for brewing." | 
					
						
							|  |  |  |       puts "Any troubles you may be experiencing are likely purely psychosomatic." | 
					
						
							| 
									
										
										
										
											2010-03-31 14:55:41 -07:00
										 |  |  |     end | 
					
						
							|  |  |  |   end | 
					
						
							|  |  |  | end |