aboutsummaryrefslogtreecommitdiffstats
path: root/Library/Homebrew/cask/lib/hbc/locations.rb
blob: 8f6c028eca2d39cdf8c36170fb760e8e652997d6 (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
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
module Hbc
  module Locations
    def self.included(base)
      base.extend(ClassMethods)
    end

    module ClassMethods
      def legacy_caskroom
        @legacy_caskroom ||= Pathname.new("/opt/homebrew-cask/Caskroom")
      end

      def default_caskroom
        @default_caskroom ||= homebrew_prefix.join("Caskroom")
      end

      def caskroom
        @caskroom ||= begin
          if Utils.path_occupied?(legacy_caskroom)
            opoo <<-EOS.undent
              The default Caskroom location has moved to #{default_caskroom}.

              Please migrate your Casks to the new location and delete #{legacy_caskroom},
              or if you would like to keep your Caskroom at #{legacy_caskroom}, add the
              following to your HOMEBREW_CASK_OPTS:

                --caskroom=#{legacy_caskroom}

              For more details on each of those options, see https://github.com/caskroom/homebrew-cask/issues/21913.
            EOS
            legacy_caskroom
          else
            default_caskroom
          end
        end
      end

      def caskroom=(caskroom)
        @caskroom = caskroom
      end

      def legacy_cache
        @legacy_cache ||= homebrew_cache.join("Casks")
      end

      def cache
        @cache ||= homebrew_cache.join("Cask")
      end

      attr_writer :appdir

      def appdir
        @appdir ||= Pathname.new("/Applications").expand_path
      end

      attr_writer :prefpanedir

      def prefpanedir
        @prefpanedir ||= Pathname.new("~/Library/PreferencePanes").expand_path
      end

      attr_writer :qlplugindir

      def qlplugindir
        @qlplugindir ||= Pathname.new("~/Library/QuickLook").expand_path
      end

      attr_writer :dictionarydir

      def dictionarydir
        @dictionarydir ||= Pathname.new("~/Library/Dictionaries").expand_path
      end

      attr_writer :fontdir

      def fontdir
        @fontdir ||= Pathname.new("~/Library/Fonts").expand_path
      end

      attr_writer :colorpickerdir

      def colorpickerdir
        @colorpickerdir ||= Pathname.new("~/Library/ColorPickers").expand_path
      end

      attr_writer :servicedir

      def servicedir
        @servicedir ||= Pathname.new("~/Library/Services").expand_path
      end

      attr_writer :binarydir

      def binarydir
        @binarydir ||= homebrew_prefix.join("bin")
      end

      attr_writer :input_methoddir

      def input_methoddir
        @input_methoddir ||= Pathname.new("~/Library/Input Methods").expand_path
      end

      attr_writer :internet_plugindir

      def internet_plugindir
        @internet_plugindir ||= Pathname.new("~/Library/Internet Plug-Ins").expand_path
      end

      attr_writer :audio_unit_plugindir

      def audio_unit_plugindir
        @audio_unit_plugindir ||= Pathname.new("~/Library/Audio/Plug-Ins/Components").expand_path
      end

      attr_writer :vst_plugindir

      def vst_plugindir
        @vst_plugindir ||= Pathname.new("~/Library/Audio/Plug-Ins/VST").expand_path
      end

      attr_writer :vst3_plugindir

      def vst3_plugindir
        @vst3_plugindir ||= Pathname.new("~/Library/Audio/Plug-Ins/VST3").expand_path
      end

      attr_writer :screen_saverdir

      def screen_saverdir
        @screen_saverdir ||= Pathname.new("~/Library/Screen Savers").expand_path
      end

      attr_writer :default_tap

      def default_tap
        @default_tap ||= Tap.fetch("caskroom", "homebrew-cask")
      end

      def path(query)
        query_path = Pathname.new(query)

        return query_path if query_path.absolute?
        return query_path if query_path.exist? && query_path.extname == ".rb"

        query_without_extension = query.sub(/\.rb$/i, "")

        token_with_tap = if query =~ %r{\A[^/]+/[^/]+/[^/]+\Z}
          query_without_extension
        else
          all_tokens.detect do |tap_and_token|
            tap_and_token.split("/")[2] == query_without_extension
          end
        end

        if token_with_tap
          user, repo, token = token_with_tap.split("/")
          tap = Tap.fetch(user, repo)
        else
          token = query_without_extension
          tap = Hbc.default_tap
        end

        return query_path if tap.cask_dir.nil?
        tap.cask_dir.join("#{token}.rb")
      end

      def tcc_db
        @tcc_db ||= Pathname.new("/Library/Application Support/com.apple.TCC/TCC.db")
      end

      def pre_mavericks_accessibility_dotfile
        @pre_mavericks_accessibility_dotfile ||= Pathname.new("/private/var/db/.AccessibilityAPIEnabled")
      end

      def x11_executable
        @x11_executable ||= Pathname.new("/usr/X11/bin/X")
      end

      def x11_libpng
        @x11_libpng ||= [Pathname.new("/opt/X11/lib/libpng.dylib"), Pathname.new("/usr/X11/lib/libpng.dylib")]
      end

      def homebrew_cache
        @homebrew_cache ||= HOMEBREW_CACHE
      end

      def homebrew_cache=(path)
        @homebrew_cache = path ? Pathname.new(path) : path
      end

      def homebrew_executable
        @homebrew_executable ||= HOMEBREW_BREW_FILE
      end

      def homebrew_prefix
        # where Homebrew links
        @homebrew_prefix ||= HOMEBREW_PREFIX
      end

      def homebrew_prefix=(path)
        @homebrew_prefix = path ? Pathname.new(path) : path
      end

      def homebrew_repository
        # where Homebrew's .git dir is found
        @homebrew_repository ||= HOMEBREW_REPOSITORY
      end

      def homebrew_repository=(path)
        @homebrew_repository = path ? Pathname.new(path) : path
      end
    end
  end
end