2025-01-06 00:12:03 +00:00
|
|
|
# typed: strict
|
2020-07-29 12:20:23 -04:00
|
|
|
# frozen_string_literal: true
|
|
|
|
|
2022-08-24 23:46:43 +01:00
|
|
|
require "requirement"
|
|
|
|
|
2020-11-05 17:17:03 -05:00
|
|
|
# An adapter for casks to provide dependency information in a formula-like interface.
|
2020-07-29 09:14:39 -04:00
|
|
|
class CaskDependent
|
2022-08-24 23:46:43 +01:00
|
|
|
# Defines a dependency on another cask
|
|
|
|
class Requirement < ::Requirement
|
|
|
|
satisfy(build_env: false) do
|
|
|
|
Cask::CaskLoader.load(cask).installed?
|
|
|
|
end
|
|
|
|
end
|
|
|
|
|
2025-01-06 00:12:03 +00:00
|
|
|
sig { returns(Cask::Cask) }
|
2021-11-12 13:52:20 -08:00
|
|
|
attr_reader :cask
|
|
|
|
|
2025-01-06 00:12:03 +00:00
|
|
|
sig { params(cask: Cask::Cask).void }
|
2020-07-29 09:14:39 -04:00
|
|
|
def initialize(cask)
|
2025-01-06 00:12:03 +00:00
|
|
|
@cask = T.let(cask, Cask::Cask)
|
2020-07-29 09:14:39 -04:00
|
|
|
end
|
|
|
|
|
2025-01-06 00:12:03 +00:00
|
|
|
sig { returns(String) }
|
2020-07-29 09:14:39 -04:00
|
|
|
def name
|
|
|
|
@cask.token
|
|
|
|
end
|
|
|
|
|
2025-01-06 00:12:03 +00:00
|
|
|
sig { returns(String) }
|
2020-07-29 09:14:39 -04:00
|
|
|
def full_name
|
|
|
|
@cask.full_name
|
|
|
|
end
|
|
|
|
|
2025-01-06 00:12:03 +00:00
|
|
|
sig { returns(T::Array[Dependency]) }
|
2022-02-10 00:29:39 +09:00
|
|
|
def runtime_dependencies
|
2022-02-16 18:59:58 +09:00
|
|
|
deps.flat_map { |dep| [dep, *dep.to_formula.runtime_dependencies] }.uniq
|
2020-07-29 09:14:39 -04:00
|
|
|
end
|
|
|
|
|
2025-01-06 00:12:03 +00:00
|
|
|
sig { returns(T::Array[Dependency]) }
|
2020-07-29 09:14:39 -04:00
|
|
|
def deps
|
2025-01-06 00:12:03 +00:00
|
|
|
@deps ||= T.let(
|
|
|
|
@cask.depends_on.formula.map do |f|
|
|
|
|
Dependency.new f
|
|
|
|
end,
|
|
|
|
T.nilable(T::Array[Dependency]),
|
|
|
|
)
|
2020-07-29 09:14:39 -04:00
|
|
|
end
|
|
|
|
|
2025-01-06 00:12:03 +00:00
|
|
|
sig { returns(T::Array[CaskDependent::Requirement]) }
|
2020-07-29 09:14:39 -04:00
|
|
|
def requirements
|
2025-01-06 00:12:03 +00:00
|
|
|
@requirements ||= T.let(
|
|
|
|
begin
|
|
|
|
requirements = []
|
|
|
|
dsl_reqs = @cask.depends_on
|
2020-07-29 09:14:39 -04:00
|
|
|
|
2025-01-06 00:12:03 +00:00
|
|
|
dsl_reqs.arch&.each do |arch|
|
|
|
|
arch = if arch[:bits] == 64
|
|
|
|
if arch[:type] == :intel
|
|
|
|
:x86_64
|
|
|
|
else
|
|
|
|
:"#{arch[:type]}64"
|
|
|
|
end
|
|
|
|
elsif arch[:type] == :intel && arch[:bits] == 32
|
|
|
|
:i386
|
2022-08-24 23:46:43 +01:00
|
|
|
else
|
2025-01-06 00:12:03 +00:00
|
|
|
arch[:type]
|
2022-08-24 23:46:43 +01:00
|
|
|
end
|
2025-01-06 00:12:03 +00:00
|
|
|
requirements << ArchRequirement.new([arch])
|
|
|
|
end
|
|
|
|
dsl_reqs.cask.each do |cask_ref|
|
|
|
|
requirements << CaskDependent::Requirement.new([{ cask: cask_ref }])
|
2022-08-24 23:46:43 +01:00
|
|
|
end
|
2025-01-06 00:12:03 +00:00
|
|
|
requirements << dsl_reqs.macos if dsl_reqs.macos
|
2020-07-29 09:14:39 -04:00
|
|
|
|
2025-01-06 00:12:03 +00:00
|
|
|
requirements
|
|
|
|
end,
|
|
|
|
T.nilable(T::Array[CaskDependent::Requirement]),
|
|
|
|
)
|
2020-07-29 09:14:39 -04:00
|
|
|
end
|
|
|
|
|
2025-01-06 00:12:03 +00:00
|
|
|
sig { params(block: T.nilable(T.proc.returns(T::Array[Dependency]))).returns(T::Array[Dependency]) }
|
2022-06-14 15:03:55 -04:00
|
|
|
def recursive_dependencies(&block)
|
|
|
|
Dependency.expand(self, &block)
|
2020-07-29 09:14:39 -04:00
|
|
|
end
|
|
|
|
|
2025-01-06 00:12:03 +00:00
|
|
|
sig { params(block: T.nilable(T.proc.returns(CaskDependent::Requirement))).returns(Requirements) }
|
2020-07-29 09:14:39 -04:00
|
|
|
def recursive_requirements(&block)
|
|
|
|
Requirement.expand(self, &block)
|
|
|
|
end
|
|
|
|
|
2025-01-06 00:12:03 +00:00
|
|
|
sig { returns(T::Boolean) }
|
2020-07-29 09:14:39 -04:00
|
|
|
def any_version_installed?
|
|
|
|
@cask.installed?
|
|
|
|
end
|
|
|
|
end
|