blob: 466d0b0b5becae89fb3ac0fc0f8600037601a3b1 (
plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
  | 
class Caveats
  attr_reader :f
  def initialize(f)
    @f = f
  end
  def caveats
    caveats = []
    caveats << f.caveats
    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.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.realpath) 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 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
  |