| 
									
										
										
										
											2020-10-10 14:16:11 +02:00
										 |  |  | # typed: false | 
					
						
							| 
									
										
										
										
											2019-04-19 15:38:03 +09:00
										 |  |  | # frozen_string_literal: true | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-09-06 08:29:14 +02:00
										 |  |  | module Cask | 
					
						
							| 
									
										
										
										
											2016-09-24 13:52:43 +02:00
										 |  |  |   class DSL | 
					
						
							| 
									
										
										
										
											2020-08-24 23:09:43 +02:00
										 |  |  |     # Class corresponding to the `caveats` stanza. | 
					
						
							|  |  |  |     # | 
					
						
							|  |  |  |     # Each method should handle output, following the | 
					
						
							|  |  |  |     # convention of at least one trailing blank line so that the user | 
					
						
							|  |  |  |     # can distinguish separate caveats. | 
					
						
							|  |  |  |     # | 
					
						
							|  |  |  |     # The return value of the last method in the block is also sent | 
					
						
							|  |  |  |     # to the output by the caller, but that feature is only for the | 
					
						
							| 
									
										
										
										
											2020-11-05 17:17:03 -05:00
										 |  |  |     # convenience of cask authors. | 
					
						
							| 
									
										
										
										
											2020-08-24 23:09:43 +02:00
										 |  |  |     # | 
					
						
							|  |  |  |     # @api private | 
					
						
							| 
									
										
										
										
											2016-09-24 13:52:43 +02:00
										 |  |  |     class Caveats < Base | 
					
						
							| 
									
										
										
										
											2020-11-07 21:29:06 +01:00
										 |  |  |       extend Predicable | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |       attr_predicate :discontinued? | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2017-11-24 17:44:01 +01:00
										 |  |  |       def initialize(*args) | 
					
						
							|  |  |  |         super(*args) | 
					
						
							|  |  |  |         @built_in_caveats = {} | 
					
						
							|  |  |  |         @custom_caveats = [] | 
					
						
							| 
									
										
										
										
											2020-11-07 21:29:06 +01:00
										 |  |  |         @discontinued = false | 
					
						
							| 
									
										
										
										
											2017-11-24 17:44:01 +01:00
										 |  |  |       end | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |       def self.caveat(name, &block) | 
					
						
							|  |  |  |         define_method(name) do |*args| | 
					
						
							|  |  |  |           key = [name, *args] | 
					
						
							| 
									
										
										
										
											2017-11-28 21:59:12 +01:00
										 |  |  |           text = instance_exec(*args, &block) | 
					
						
							|  |  |  |           @built_in_caveats[key] = text if text | 
					
						
							| 
									
										
										
										
											2017-11-24 17:44:01 +01:00
										 |  |  |           :built_in_caveat | 
					
						
							|  |  |  |         end | 
					
						
							|  |  |  |       end | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |       private_class_method :caveat | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |       def to_s | 
					
						
							|  |  |  |         (@custom_caveats + @built_in_caveats.values).join("\n") | 
					
						
							|  |  |  |       end | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |       # Override `puts` to collect caveats. | 
					
						
							|  |  |  |       def puts(*args) | 
					
						
							|  |  |  |         @custom_caveats += args | 
					
						
							|  |  |  |         :built_in_caveat | 
					
						
							|  |  |  |       end | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |       def eval_caveats(&block) | 
					
						
							|  |  |  |         result = instance_eval(&block) | 
					
						
							|  |  |  |         return unless result | 
					
						
							|  |  |  |         return if result == :built_in_caveat | 
					
						
							| 
									
										
										
										
											2018-09-17 02:45:00 +02:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2017-11-24 17:44:01 +01:00
										 |  |  |         @custom_caveats << result.to_s.sub(/\s*\Z/, "\n") | 
					
						
							|  |  |  |       end | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |       caveat :kext do | 
					
						
							| 
									
										
										
										
											2017-11-28 21:59:12 +01:00
										 |  |  |         next if MacOS.version < :high_sierra | 
					
						
							| 
									
										
										
										
											2018-09-17 02:45:00 +02:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2017-11-24 17:44:01 +01:00
										 |  |  |         <<~EOS | 
					
						
							| 
									
										
										
										
											2020-03-23 16:13:50 +00:00
										 |  |  |           #{@cask} requires a kernel extension to work. | 
					
						
							|  |  |  |           If the installation fails, retry after you enable it in: | 
					
						
							| 
									
										
										
										
											2017-11-24 17:44:01 +01:00
										 |  |  |             System Preferences → Security & Privacy → General | 
					
						
							| 
									
										
										
										
											2020-03-23 16:13:50 +00:00
										 |  |  | 
 | 
					
						
							|  |  |  |           For more information, refer to vendor documentation or this Apple Technical Note: | 
					
						
							| 
									
										
										
										
											2017-11-24 17:44:01 +01:00
										 |  |  |             #{Formatter.url("https://developer.apple.com/library/content/technotes/tn2459/_index.html")} | 
					
						
							|  |  |  |         EOS | 
					
						
							|  |  |  |       end | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2020-05-26 20:17:10 +01:00
										 |  |  |       caveat :unsigned_accessibility do |access = "Accessibility"| | 
					
						
							| 
									
										
										
										
											2020-07-06 15:31:47 -04:00
										 |  |  |         # access: the category in System Preferences > Security & Privacy > Privacy the app requires. | 
					
						
							| 
									
										
										
										
											2020-05-26 20:17:10 +01:00
										 |  |  | 
 | 
					
						
							|  |  |  |         <<~EOS | 
					
						
							|  |  |  |           #{@cask} is not signed and requires Accessibility access, | 
					
						
							|  |  |  |           so you will need to re-grant Accessibility access every time the app is updated. | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |           Enable or re-enable it in: | 
					
						
							| 
									
										
										
										
											2020-07-06 15:31:47 -04:00
										 |  |  |             System Preferences → Security & Privacy → Privacy → #{access} | 
					
						
							|  |  |  |           To re-enable, untick and retick #{@cask}.app. | 
					
						
							| 
									
										
										
										
											2020-05-26 20:17:10 +01:00
										 |  |  |         EOS | 
					
						
							|  |  |  |       end | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2017-11-24 17:44:01 +01:00
										 |  |  |       caveat :path_environment_variable do |path| | 
					
						
							|  |  |  |         <<~EOS | 
					
						
							| 
									
										
										
										
											2017-10-15 02:28:32 +02:00
										 |  |  |           To use #{@cask}, you may need to add the #{path} directory | 
					
						
							| 
									
										
										
										
											2020-07-29 17:31:11 -04:00
										 |  |  |           to your PATH environment variable, e.g. (for Bash shell): | 
					
						
							| 
									
										
										
										
											2017-10-15 02:28:32 +02:00
										 |  |  |             export PATH=#{path}:"$PATH" | 
					
						
							| 
									
										
										
										
											2016-09-24 13:52:43 +02:00
										 |  |  |         EOS | 
					
						
							|  |  |  |       end | 
					
						
							| 
									
										
										
										
											2016-08-18 22:11:42 +03:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2017-11-24 17:44:01 +01:00
										 |  |  |       caveat :zsh_path_helper do |path| | 
					
						
							|  |  |  |         <<~EOS | 
					
						
							| 
									
										
										
										
											2017-10-15 02:28:32 +02:00
										 |  |  |           To use #{@cask}, zsh users may need to add the following line to their | 
					
						
							| 
									
										
										
										
											2021-01-26 15:21:24 -05:00
										 |  |  |           ~/.zprofile. (Among other effects, #{path} will be added to the
 | 
					
						
							| 
									
										
										
										
											2017-10-15 02:28:32 +02:00
										 |  |  |           PATH environment variable): | 
					
						
							|  |  |  |             eval `/usr/libexec/path_helper -s` | 
					
						
							| 
									
										
										
										
											2016-09-24 13:52:43 +02:00
										 |  |  |         EOS | 
					
						
							|  |  |  |       end | 
					
						
							| 
									
										
										
										
											2016-08-18 22:11:42 +03:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2017-11-24 17:44:01 +01:00
										 |  |  |       caveat :files_in_usr_local do | 
					
						
							|  |  |  |         next unless HOMEBREW_PREFIX.to_s.downcase.start_with?("/usr/local") | 
					
						
							| 
									
										
										
										
											2018-09-17 02:45:00 +02:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2017-11-24 17:44:01 +01:00
										 |  |  |         <<~EOS | 
					
						
							|  |  |  |           Cask #{@cask} installs files under /usr/local. The presence of such | 
					
						
							| 
									
										
										
										
											2019-04-05 12:24:10 -04:00
										 |  |  |           files can cause warnings when running `brew doctor`, which is considered | 
					
						
							| 
									
										
										
										
											2018-09-03 20:12:29 +01:00
										 |  |  |           to be a bug in Homebrew Cask. | 
					
						
							| 
									
										
										
										
											2016-09-24 13:52:43 +02:00
										 |  |  |         EOS | 
					
						
							|  |  |  |       end | 
					
						
							| 
									
										
										
										
											2016-08-18 22:11:42 +03:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2017-11-24 17:44:01 +01:00
										 |  |  |       caveat :depends_on_java do |java_version = :any| | 
					
						
							|  |  |  |         if java_version == :any | 
					
						
							|  |  |  |           <<~EOS | 
					
						
							| 
									
										
										
										
											2019-04-08 12:47:15 -04:00
										 |  |  |             #{@cask} requires Java. You can install the latest version with: | 
					
						
							| 
									
										
										
										
											2021-10-21 13:00:00 +01:00
										 |  |  |               brew install --cask temurin | 
					
						
							| 
									
										
										
										
											2016-09-24 13:52:43 +02:00
										 |  |  |           EOS | 
					
						
							| 
									
										
										
										
											2021-04-29 19:00:40 -04:00
										 |  |  |         elsif java_version.include?("+") | 
					
						
							| 
									
										
										
										
											2017-11-24 17:44:01 +01:00
										 |  |  |           <<~EOS | 
					
						
							| 
									
										
										
										
											2019-04-08 12:47:15 -04:00
										 |  |  |             #{@cask} requires Java #{java_version}. You can install the latest version with: | 
					
						
							| 
									
										
										
										
											2021-10-21 13:00:00 +01:00
										 |  |  |               brew install --cask temurin | 
					
						
							| 
									
										
										
										
											2016-09-24 13:52:43 +02:00
										 |  |  |           EOS | 
					
						
							|  |  |  |         else | 
					
						
							| 
									
										
										
										
											2017-11-24 17:44:01 +01:00
										 |  |  |           <<~EOS | 
					
						
							| 
									
										
										
										
											2019-04-08 12:47:15 -04:00
										 |  |  |             #{@cask} requires Java #{java_version}. You can install it with: | 
					
						
							| 
									
										
										
										
											2021-10-21 13:00:00 +01:00
										 |  |  |               brew install --cask homebrew/cask-versions/temurin#{java_version} | 
					
						
							| 
									
										
										
										
											2016-09-24 13:52:43 +02:00
										 |  |  |           EOS | 
					
						
							|  |  |  |         end | 
					
						
							|  |  |  |       end | 
					
						
							| 
									
										
										
										
											2016-08-18 22:11:42 +03:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2022-02-04 09:50:21 +08:00
										 |  |  |       caveat :requires_rosetta do | 
					
						
							|  |  |  |         next unless Hardware::CPU.arm? | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         <<~EOS | 
					
						
							|  |  |  |           #{@cask} is built for Intel macOS and so requires Rosetta 2 to be installed. | 
					
						
							|  |  |  |           You can install Rosetta 2 with: | 
					
						
							|  |  |  |             softwareupdate --install-rosetta --agree-to-license | 
					
						
							|  |  |  |           Note that it is very difficult to remove Rosetta 2 once it is installed. | 
					
						
							|  |  |  |         EOS | 
					
						
							|  |  |  |       end | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2017-11-24 17:44:01 +01:00
										 |  |  |       caveat :logout do | 
					
						
							|  |  |  |         <<~EOS | 
					
						
							|  |  |  |           You must log out and log back in for the installation of #{@cask} to take effect. | 
					
						
							| 
									
										
										
										
											2016-09-24 13:52:43 +02:00
										 |  |  |         EOS | 
					
						
							|  |  |  |       end | 
					
						
							| 
									
										
										
										
											2016-08-18 22:11:42 +03:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2017-11-24 17:44:01 +01:00
										 |  |  |       caveat :reboot do | 
					
						
							|  |  |  |         <<~EOS | 
					
						
							| 
									
										
										
										
											2017-10-15 02:28:32 +02:00
										 |  |  |           You must reboot for the installation of #{@cask} to take effect. | 
					
						
							| 
									
										
										
										
											2016-09-24 13:52:43 +02:00
										 |  |  |         EOS | 
					
						
							|  |  |  |       end | 
					
						
							| 
									
										
										
										
											2016-08-18 22:11:42 +03:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2017-11-24 17:44:01 +01:00
										 |  |  |       caveat :discontinued do | 
					
						
							| 
									
										
										
										
											2020-11-07 21:29:06 +01:00
										 |  |  |         @discontinued = true | 
					
						
							| 
									
										
										
										
											2017-11-24 17:44:01 +01:00
										 |  |  |         <<~EOS | 
					
						
							| 
									
										
										
										
											2017-10-15 02:28:32 +02:00
										 |  |  |           #{@cask} has been officially discontinued upstream. | 
					
						
							|  |  |  |           It may stop working correctly (or at all) in recent versions of macOS. | 
					
						
							| 
									
										
										
										
											2016-09-24 13:52:43 +02:00
										 |  |  |         EOS | 
					
						
							|  |  |  |       end | 
					
						
							| 
									
										
										
										
											2016-08-18 22:11:42 +03:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-05-15 19:56:03 +10:00
										 |  |  |       caveat :license do |web_page| | 
					
						
							|  |  |  |         <<~EOS | 
					
						
							| 
									
										
										
										
											2019-04-08 12:47:15 -04:00
										 |  |  |           Installing #{@cask} means you have AGREED to the license at: | 
					
						
							| 
									
										
										
										
											2019-04-05 12:24:10 -04:00
										 |  |  |             #{Formatter.url(web_page.to_s)} | 
					
						
							| 
									
										
										
										
											2018-05-15 19:56:03 +10:00
										 |  |  |         EOS | 
					
						
							|  |  |  |       end | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2017-11-24 17:44:01 +01:00
										 |  |  |       caveat :free_license do |web_page| | 
					
						
							|  |  |  |         <<~EOS | 
					
						
							| 
									
										
										
										
											2019-04-08 12:47:15 -04:00
										 |  |  |           The vendor offers a free license for #{@cask} at: | 
					
						
							| 
									
										
										
										
											2019-04-05 12:24:10 -04:00
										 |  |  |             #{Formatter.url(web_page.to_s)} | 
					
						
							| 
									
										
										
										
											2016-09-24 13:52:43 +02:00
										 |  |  |         EOS | 
					
						
							|  |  |  |       end | 
					
						
							|  |  |  |     end | 
					
						
							| 
									
										
										
										
											2016-08-18 22:11:42 +03:00
										 |  |  |   end | 
					
						
							|  |  |  | end |