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
|
2012-04-28 14:08:05 -07:00
|
|
|
File.exist? "/Library/Receipts/libiconv1.pkg" or
|
|
|
|
File.exist? "/usr/local/MacGPG2"
|
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
|
2012-04-17 17:08:36 -05:00
|
|
|
next unless d.directory?
|
2012-03-15 16:37:46 +00:00
|
|
|
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
|
|
|
|
|
2012-04-08 11:10:22 -05:00
|
|
|
def check_standard_compilers
|
|
|
|
return if check_for_latest_xcode # only check if Xcode is up to date
|
|
|
|
if !MacOS.compilers_standard? then <<-EOS.undent
|
|
|
|
Your compilers are different from the standard versions for your Xcode.
|
|
|
|
If you have Xcode 4.3 or newer, you should install the Command Line Tools for
|
|
|
|
Xcode from within Xcode's Download preferences.
|
|
|
|
Otherwise, you should reinstall Xcode.
|
|
|
|
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!
|
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-04-03 12:16:40 -03:00
|
|
|
Consider amending your PATH so that #{HOMEBREW_PREFIX}/bin
|
2012-03-01 16:32:02 +00:00
|
|
|
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.
|
2012-04-03 12:16:40 -03:00
|
|
|
Consider amending 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.
|
2012-04-03 12:16:40 -03:00
|
|
|
Consider amending 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
|
2012-04-09 13:09:41 -05:00
|
|
|
iconv_files = %w[lib/iconv.dylib
|
|
|
|
include/iconv.h].select { |f| File.exist? "#{HOMEBREW_PREFIX}/#{f}" }
|
|
|
|
if !iconv_files.empty?
|
2012-03-01 16:32:02 +00:00
|
|
|
<<-EOS.undent
|
2012-04-09 13:09:41 -05:00
|
|
|
The following libiconv files were detected in #{HOMEBREW_PREFIX}:
|
|
|
|
#{iconv_files.join "\n "}
|
2010-08-09 22:15:10 -07:00
|
|
|
Homebrew doesn't provide a libiconv formula, and expects to link against
|
|
|
|
the system version in /usr/lib.
|
|
|
|
|
2012-04-09 13:09:41 -05:00
|
|
|
If you have an alternate 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
|
2012-04-09 13:09:41 -05:00
|
|
|
else
|
|
|
|
nil
|
2010-05-01 10:50:14 -07:00
|
|
|
end
|
|
|
|
end
|
|
|
|
|
2010-06-10 14:48:34 -07:00
|
|
|
def check_for_config_scripts
|
2012-04-08 15:28:16 -05:00
|
|
|
return unless HOMEBREW_CELLAR.exist?
|
|
|
|
real_cellar = 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
|
2012-04-08 15:28:16 -05:00
|
|
|
return unless HOMEBREW_CELLAR.exist?
|
2012-03-09 11:36:34 +00:00
|
|
|
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
|
|
|
checks = Checks.new
|
|
|
|
|
|
|
|
checks.methods.select{ |method| method =~ /^check_/ }.sort.each do |method|
|
|
|
|
out = checks.send(method)
|
|
|
|
unless out.nil? or out.empty?
|
2012-03-15 10:57:34 +13:00
|
|
|
puts unless Homebrew.failed?
|
2012-03-01 16:32:02 +00:00
|
|
|
lines = out.to_s.split('\n')
|
|
|
|
opoo lines.shift
|
|
|
|
puts lines
|
2012-03-15 10:57:34 +13:00
|
|
|
Homebrew.failed = true
|
2012-03-01 16:32:02 +00:00
|
|
|
end
|
2011-05-21 03:40:48 +02:00
|
|
|
end
|
2010-11-09 13:00:33 +00:00
|
|
|
|
2012-03-15 10:57:34 +13:00
|
|
|
puts "Your system is raring to brew." unless Homebrew.failed?
|
2010-03-31 14:55:41 -07:00
|
|
|
end
|
|
|
|
end
|