
Symlinks in opt and LinkedKegs point directly at a keg in the cellar, so only resolving one symlink should suffice, and make it clear what path we are actually interested in.
138 lines
4.4 KiB
Ruby
138 lines
4.4 KiB
Ruby
class Caveats
|
|
attr_reader :f
|
|
|
|
def initialize(f)
|
|
@f = f
|
|
end
|
|
|
|
def caveats
|
|
caveats = []
|
|
caveats << f.caveats if f.caveats.to_s.length > 0
|
|
caveats << f.keg_only_text if f.keg_only? && f.respond_to?(:keg_only_text)
|
|
caveats << bash_completion_caveats
|
|
caveats << zsh_completion_caveats
|
|
caveats << plist_caveats
|
|
caveats << python_caveats
|
|
caveats << app_caveats
|
|
caveats.compact.join("\n")
|
|
end
|
|
|
|
def empty?
|
|
caveats.empty?
|
|
end
|
|
|
|
private
|
|
|
|
def keg
|
|
@keg ||= [f.prefix, f.opt_prefix, f.linked_keg].map do |d|
|
|
Keg.new(d.resolved_path) rescue nil
|
|
end.compact.first
|
|
end
|
|
|
|
def bash_completion_caveats
|
|
if keg and keg.completion_installed? :bash then <<-EOS.undent
|
|
Bash completion has been installed to:
|
|
#{HOMEBREW_PREFIX}/etc/bash_completion.d
|
|
EOS
|
|
end
|
|
end
|
|
|
|
def zsh_completion_caveats
|
|
if keg and keg.completion_installed? :zsh then <<-EOS.undent
|
|
zsh completion has been installed to:
|
|
#{HOMEBREW_PREFIX}/share/zsh/site-functions
|
|
EOS
|
|
end
|
|
end
|
|
|
|
def python_caveats
|
|
return unless keg
|
|
return unless keg.python_site_packages_installed?
|
|
return if Formula["python"].installed?
|
|
site_packages = if f.keg_only?
|
|
"#{f.opt_prefix}/lib/python2.7/site-packages"
|
|
else
|
|
"#{HOMEBREW_PREFIX}/lib/python2.7/site-packages"
|
|
end
|
|
dir = "~/Library/Python/2.7/lib/python/site-packages"
|
|
dir_path = Pathname.new(dir).expand_path
|
|
file = "#{dir}/homebrew.pth"
|
|
file_path = Pathname.new(file).expand_path
|
|
if !file_path.readable? || !file_path.read.include?(site_packages)
|
|
s = "If you need Python to find the installed site-packages:\n"
|
|
s += " mkdir -p #{dir}\n" unless dir_path.exist?
|
|
s += " echo '#{site_packages}' >> #{file}"
|
|
end
|
|
end
|
|
|
|
def app_caveats
|
|
if keg and keg.app_installed?
|
|
<<-EOS.undent
|
|
.app bundles were installed.
|
|
Run `brew linkapps` to symlink these to /Applications.
|
|
EOS
|
|
end
|
|
end
|
|
|
|
def plist_caveats
|
|
s = []
|
|
if f.plist or (keg and keg.plist_installed?)
|
|
destination = f.plist_startup ? '/Library/LaunchDaemons' \
|
|
: '~/Library/LaunchAgents'
|
|
|
|
plist_filename = f.plist_path.basename
|
|
plist_link = "#{destination}/#{plist_filename}"
|
|
plist_domain = f.plist_path.basename('.plist')
|
|
destination_path = Pathname.new File.expand_path destination
|
|
plist_path = destination_path/plist_filename
|
|
|
|
# we readlink because this path probably doesn't exist since caveats
|
|
# occurs before the link step of installation
|
|
if (not plist_path.file?) and (not plist_path.symlink?)
|
|
if f.plist_startup
|
|
s << "To have launchd start #{f.name} at startup:"
|
|
s << " sudo mkdir -p #{destination}" unless destination_path.directory?
|
|
s << " sudo cp -fv #{HOMEBREW_PREFIX}/opt/#{f.name}/*.plist #{destination}"
|
|
else
|
|
s << "To have launchd start #{f.name} at login:"
|
|
s << " mkdir -p #{destination}" unless destination_path.directory?
|
|
s << " ln -sfv #{HOMEBREW_PREFIX}/opt/#{f.name}/*.plist #{destination}"
|
|
end
|
|
s << "Then to load #{f.name} now:"
|
|
if f.plist_startup
|
|
s << " sudo launchctl load #{plist_link}"
|
|
else
|
|
s << " launchctl load #{plist_link}"
|
|
end
|
|
if f.plist_manual
|
|
s << "Or, if you don't want/need launchctl, you can just run:"
|
|
s << " #{f.plist_manual}"
|
|
end
|
|
elsif Kernel.system "/bin/launchctl list #{plist_domain} &>/dev/null"
|
|
s << "To reload #{f.name} after an upgrade:"
|
|
if f.plist_startup
|
|
s << " sudo launchctl unload #{plist_link}"
|
|
s << " sudo cp -fv #{HOMEBREW_PREFIX}/opt/#{f.name}/*.plist #{destination}"
|
|
s << " sudo launchctl load #{plist_link}"
|
|
else
|
|
s << " launchctl unload #{plist_link}"
|
|
s << " launchctl load #{plist_link}"
|
|
end
|
|
else
|
|
s << "To load #{f.name}:"
|
|
if f.plist_startup
|
|
s << " sudo launchctl load #{plist_link}"
|
|
else
|
|
s << " launchctl load #{plist_link}"
|
|
end
|
|
if f.plist_manual
|
|
s << "Or, if you don't want/need launchctl, you can just run:"
|
|
s << " #{f.plist_manual}"
|
|
end
|
|
end
|
|
s << '' << "WARNING: launchctl will fail when run under tmux." if ENV['TMUX']
|
|
end
|
|
s.join("\n") unless s.empty?
|
|
end
|
|
end
|