2010-03-31 14:58:32 -07:00
|
|
|
def check_for_stray_dylibs
|
|
|
|
bad_dylibs = Dir['/usr/local/lib/*.dylib'].select { |f| File.file? f and not File.symlink? f }
|
2010-04-12 13:09:51 -07:00
|
|
|
if bad_dylibs.length > 0
|
2010-03-31 14:58:32 -07:00
|
|
|
puts "You have unbrewed dylibs in /usr/local/lib. These could cause build problems"
|
|
|
|
puts "when building Homebrew formula. If you no longer need them, delete them:"
|
|
|
|
puts
|
|
|
|
puts *bad_dylibs.collect { |f| " #{f}" }
|
|
|
|
puts
|
|
|
|
end
|
|
|
|
end
|
|
|
|
|
2010-03-31 14:59:50 -07:00
|
|
|
def check_for_x11
|
|
|
|
unless File.exists? '/usr/X11/lib/libpng.dylib'
|
2010-03-31 15:22:20 -07:00
|
|
|
puts <<-EOS.undent
|
|
|
|
You don't have X11 installed as part of your Xcode installation.
|
|
|
|
This isn't required for all formula. But it is expected by some.
|
|
|
|
|
|
|
|
EOS
|
2010-03-31 14:59:50 -07:00
|
|
|
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
|
|
|
|
We couldn't detect gcc 4.2.x. Some formulas require this compiler.
|
|
|
|
|
|
|
|
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
|
|
|
|
We couldn't detect gcc 4.0.x. Some formulas require this compiler.
|
|
|
|
|
|
|
|
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-03-31 15:09:03 -07:00
|
|
|
def check_share_locale
|
2010-03-31 15:38:20 -07:00
|
|
|
# If PREFIX/share/locale already exists, "sudo make install" of
|
|
|
|
# non-brew installed software may cause installation failures.
|
|
|
|
locale = HOMEBREW_PREFIX+'share/locale'
|
|
|
|
return unless locale.exist?
|
|
|
|
|
|
|
|
cant_read = []
|
|
|
|
|
|
|
|
locale.find do |d|
|
|
|
|
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
|
|
|
|
Some folders in #{locale} aren't writable.
|
|
|
|
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-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-04-03 09:43:17 -07:00
|
|
|
binary = `which pkg-config`.chomp
|
|
|
|
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
|
|
|
|
binary = `which pkg-config`.chomp
|
|
|
|
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
|
|
|
|
EOS
|
|
|
|
end
|
|
|
|
end
|
|
|
|
|
2010-05-01 10:50:14 -07:00
|
|
|
def check_for_gettext
|
|
|
|
if File.exist? "#{HOMEBREW_PREFIX}/lib/libgettextlib.dylib" or
|
|
|
|
File.exist? "#{HOMEBREW_PREFIX}/lib/libintl.dylib"
|
|
|
|
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.
|
|
|
|
EOS
|
|
|
|
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-03-31 15:19:19 -07:00
|
|
|
check_usr_bin_ruby
|
2010-03-31 15:20:13 -07:00
|
|
|
check_homebrew_prefix
|
2010-03-31 14:58:32 -07:00
|
|
|
check_for_stray_dylibs
|
2010-03-31 15:06:46 -07:00
|
|
|
check_gcc_versions
|
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-03-31 15:38:20 -07:00
|
|
|
check_share_locale
|
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-05-01 10:50:14 -07:00
|
|
|
check_for_gettext
|
2010-03-31 14:55:41 -07:00
|
|
|
|
|
|
|
exit! 0
|
|
|
|
else
|
|
|
|
write.close
|
|
|
|
|
|
|
|
unless (out = read.read).chomp.empty?
|
|
|
|
puts out
|
|
|
|
else
|
|
|
|
puts "Your OS X is ripe for brewing. Any troubles you may be experiencing are"
|
|
|
|
puts "likely purely psychosomatic."
|
|
|
|
end
|
|
|
|
end
|
|
|
|
end
|