Rename requirements named *Dependency.

Dependency is another similar, related class and it's super confusing
to have some Requirements that are named *Dependency.

Closes Homebrew/homebrew#38891.

Signed-off-by: Mike McQuaid <mike@mikemcquaid.com>
This commit is contained in:
Mike McQuaid 2015-06-15 09:56:04 +01:00
parent f13ac9b0c8
commit 1e86730289
22 changed files with 109 additions and 88 deletions

View File

@ -81,7 +81,7 @@ class Build
if superenv? if superenv?
ENV.keg_only_deps = keg_only_deps.map(&:name) ENV.keg_only_deps = keg_only_deps.map(&:name)
ENV.deps = deps.map { |d| d.to_formula.name } ENV.deps = deps.map { |d| d.to_formula.name }
ENV.x11 = reqs.any? { |rq| rq.kind_of?(X11Dependency) } ENV.x11 = reqs.any? { |rq| rq.kind_of?(X11Requirement) }
ENV.setup_build_environment(formula) ENV.setup_build_environment(formula)
post_superenv_hacks post_superenv_hacks
reqs.each(&:modify_build_environment) reqs.each(&:modify_build_environment)

View File

@ -275,7 +275,7 @@ class FormulaAuditor
problem "Use `depends_on :fortran` instead of `depends_on 'gfortran'`" problem "Use `depends_on :fortran` instead of `depends_on 'gfortran'`"
when "open-mpi", "mpich2" when "open-mpi", "mpich2"
problem <<-EOS.undent problem <<-EOS.undent
There are multiple conflicting ways to install MPI. Use an MPIDependency: There are multiple conflicting ways to install MPI. Use an MPIRequirement:
depends_on :mpi => [<lang list>] depends_on :mpi => [<lang list>]
Where <lang list> is a comma delimited list that can include: Where <lang list> is a comma delimited list that can include:
:cc, :cxx, :f77, :f90 :cc, :cxx, :f77, :f90
@ -698,11 +698,11 @@ class FormulaAuditor
problem "Define method #{$1.inspect} in the class body, not at the top-level" problem "Define method #{$1.inspect} in the class body, not at the top-level"
end end
if line =~ /ENV.fortran/ && !formula.requirements.map(&:class).include?(FortranDependency) if line =~ /ENV.fortran/ && !formula.requirements.map(&:class).include?(FortranRequirement)
problem "Use `depends_on :fortran` instead of `ENV.fortran`" problem "Use `depends_on :fortran` instead of `ENV.fortran`"
end end
if line =~ /JAVA_HOME/i && !formula.requirements.map(&:class).include?(JavaDependency) if line =~ /JAVA_HOME/i && !formula.requirements.map(&:class).include?(JavaRequirement)
problem "Use `depends_on :java` to set JAVA_HOME" problem "Use `depends_on :java` to set JAVA_HOME"
end end

View File

@ -4,4 +4,5 @@ require 'compat/formula_specialties'
require 'compat/hardware' require 'compat/hardware'
require 'compat/macos' require 'compat/macos'
require 'compat/md5' require 'compat/md5'
require 'compat/requirements'
require 'compat/version' require 'compat/version'

View File

@ -0,0 +1,20 @@
require "requirements"
XcodeDependency = XcodeRequirement
MysqlDependency = MysqlRequirement
PostgresqlDependency = PostgresqlRequirement
GPGDependency = GPGRequirement
TeXDependency = TeXRequirement
MercurialDependency = MercurialRequirement
GitDependency = GitRequirement
AprDependency = AprRequirement
FortranDependency = FortranRequirement
JavaDependency = JavaRequirement
JavaRequirement = JavaRequirement
LanguageModuleDependency = LanguageModuleRequirement
MPIDependency = MPIRequirement
OsxfuseDependency = OsxfuseRequirement
PythonDependency = PythonRequirement
TuntapDependency = TuntapRequirement
X11Dependency = X11Requirement
ConflictsWithBinaryOsxfuse = NonBinaryOsxfuseRequirement

View File

@ -1,8 +1,8 @@
require 'dependency' require 'dependency'
require 'dependencies' require 'dependencies'
require 'ld64_dependency'
require 'requirement' require 'requirement'
require 'requirements' require 'requirements'
require 'requirements/ld64_dependency'
require 'set' require 'set'
## A dependency is a formula that another formula needs to install. ## A dependency is a formula that another formula needs to install.
@ -94,7 +94,7 @@ class DependencyCollector
elsif tags.empty? elsif tags.empty?
Dependency.new(spec, tags) Dependency.new(spec, tags)
elsif (tag = tags.first) && LANGUAGE_MODULES.include?(tag) elsif (tag = tags.first) && LANGUAGE_MODULES.include?(tag)
LanguageModuleDependency.new(tag, spec, tags[1]) LanguageModuleRequirement.new(tag, spec, tags[1])
else else
Dependency.new(spec, tags) Dependency.new(spec, tags)
end end
@ -102,25 +102,25 @@ class DependencyCollector
def parse_symbol_spec(spec, tags) def parse_symbol_spec(spec, tags)
case spec case spec
when :x11 then X11Dependency.new(spec.to_s, tags) when :x11 then X11Requirement.new(spec.to_s, tags)
when :xcode then XcodeDependency.new(tags) when :xcode then XcodeRequirement.new(tags)
when :macos then MinimumMacOSRequirement.new(tags) when :macos then MinimumMacOSRequirement.new(tags)
when :mysql then MysqlDependency.new(tags) when :mysql then MysqlRequirement.new(tags)
when :postgresql then PostgresqlDependency.new(tags) when :postgresql then PostgresqlRequirement.new(tags)
when :gpg then GPGDependency.new(tags) when :gpg then GPGRequirement.new(tags)
when :fortran then FortranDependency.new(tags) when :fortran then FortranRequirement.new(tags)
when :mpi then MPIDependency.new(*tags) when :mpi then MPIRequirement.new(*tags)
when :tex then TeXDependency.new(tags) when :tex then TeXRequirement.new(tags)
when :arch then ArchRequirement.new(tags) when :arch then ArchRequirement.new(tags)
when :hg then MercurialDependency.new(tags) when :hg then MercurialRequirement.new(tags)
when :python then PythonDependency.new(tags) when :python then PythonRequirement.new(tags)
when :python3 then Python3Dependency.new(tags) when :python3 then Python3Requirement.new(tags)
when :java then JavaDependency.new(tags) when :java then JavaRequirement.new(tags)
when :ruby then RubyRequirement.new(tags) when :ruby then RubyRequirement.new(tags)
when :osxfuse then OsxfuseDependency.new(tags) when :osxfuse then OsxfuseRequirement.new(tags)
when :tuntap then TuntapDependency.new(tags) when :tuntap then TuntapRequirement.new(tags)
when :ant then ant_dep(spec, tags) when :ant then ant_dep(spec, tags)
when :apr then AprDependency.new(tags) when :apr then AprRequirement.new(tags)
when :emacs then EmacsRequirement.new(tags) when :emacs then EmacsRequirement.new(tags)
# Tiger's ld is too old to properly link some software # Tiger's ld is too old to properly link some software
when :ld64 then LD64Dependency.new if MacOS.version < :leopard when :ld64 then LD64Dependency.new if MacOS.version < :leopard
@ -133,7 +133,7 @@ class DependencyCollector
tags << :run tags << :run
Dependency.new("libtool", tags) Dependency.new("libtool", tags)
when :python2 when :python2
PythonDependency.new(tags) PythonRequirement.new(tags)
else else
raise ArgumentError, "Unsupported special dependency #{spec.inspect}" raise ArgumentError, "Unsupported special dependency #{spec.inspect}"
end end
@ -166,9 +166,9 @@ class DependencyCollector
when strategy <= CurlDownloadStrategy when strategy <= CurlDownloadStrategy
parse_url_spec(spec.url, tags) parse_url_spec(spec.url, tags)
when strategy <= GitDownloadStrategy when strategy <= GitDownloadStrategy
GitDependency.new(tags) GitRequirement.new(tags)
when strategy <= MercurialDownloadStrategy when strategy <= MercurialDownloadStrategy
MercurialDependency.new(tags) MercurialRequirement.new(tags)
when strategy <= FossilDownloadStrategy when strategy <= FossilDownloadStrategy
Dependency.new("fossil", tags) Dependency.new("fossil", tags)
when strategy <= BazaarDownloadStrategy when strategy <= BazaarDownloadStrategy

View File

@ -616,7 +616,7 @@ class Formula
def python(options={}, &block) def python(options={}, &block)
opoo 'Formula#python is deprecated and will go away shortly.' opoo 'Formula#python is deprecated and will go away shortly.'
block.call if block_given? block.call if block_given?
PythonDependency.new PythonRequirement.new
end end
alias_method :python2, :python alias_method :python2, :python
alias_method :python3, :python alias_method :python3, :python

View File

@ -1,20 +1,20 @@
require 'requirement' require 'requirement'
require 'requirements/apr_dependency' require 'requirements/apr_requirement'
require 'requirements/fortran_dependency' require 'requirements/fortran_requirement'
require 'requirements/language_module_dependency' require 'requirements/language_module_requirement'
require 'requirements/minimum_macos_requirement' require 'requirements/minimum_macos_requirement'
require 'requirements/maximum_macos_requirement' require 'requirements/maximum_macos_requirement'
require 'requirements/mpi_dependency' require 'requirements/mpi_requirement'
require 'requirements/osxfuse_dependency' require 'requirements/osxfuse_requirement'
require 'requirements/python_dependency' require 'requirements/python_requirement'
require 'requirements/java_dependency' require 'requirements/java_requirement'
require 'requirements/ruby_requirement' require 'requirements/ruby_requirement'
require 'requirements/tuntap_dependency' require 'requirements/tuntap_requirement'
require 'requirements/unsigned_kext_requirement' require 'requirements/unsigned_kext_requirement'
require 'requirements/x11_dependency' require 'requirements/x11_requirement'
require 'requirements/emacs_requirement' require 'requirements/emacs_requirement'
class XcodeDependency < Requirement class XcodeRequirement < Requirement
fatal true fatal true
satisfy(:build_env => false) { xcode_installed_version } satisfy(:build_env => false) { xcode_installed_version }
@ -52,28 +52,28 @@ class XcodeDependency < Requirement
end end
end end
class MysqlDependency < Requirement class MysqlRequirement < Requirement
fatal true fatal true
default_formula 'mysql' default_formula 'mysql'
satisfy { which 'mysql_config' } satisfy { which 'mysql_config' }
end end
class PostgresqlDependency < Requirement class PostgresqlRequirement < Requirement
fatal true fatal true
default_formula 'postgresql' default_formula 'postgresql'
satisfy { which 'pg_config' } satisfy { which 'pg_config' }
end end
class GPGDependency < Requirement class GPGRequirement < Requirement
fatal true fatal true
default_formula "gpg" default_formula "gpg"
satisfy { which("gpg") || which("gpg2") } satisfy { which("gpg") || which("gpg2") }
end end
class TeXDependency < Requirement class TeXRequirement < Requirement
fatal true fatal true
cask "mactex" cask "mactex"
download "https://www.tug.org/mactex/" download "https://www.tug.org/mactex/"
@ -112,14 +112,14 @@ class ArchRequirement < Requirement
end end
end end
class MercurialDependency < Requirement class MercurialRequirement < Requirement
fatal true fatal true
default_formula 'mercurial' default_formula 'mercurial'
satisfy { which('hg') } satisfy { which('hg') }
end end
class GitDependency < Requirement class GitRequirement < Requirement
fatal true fatal true
default_formula 'git' default_formula 'git'
satisfy { !!which('git') } satisfy { !!which('git') }

View File

@ -1,6 +1,6 @@
require "requirement" require "requirement"
class AprDependency < Requirement class AprRequirement < Requirement
fatal true fatal true
default_formula "apr-util" default_formula "apr-util"

View File

@ -1,6 +1,6 @@
require 'requirement' require 'requirement'
class FortranDependency < Requirement class FortranRequirement < Requirement
fatal true fatal true
default_formula 'gcc' default_formula 'gcc'

View File

@ -1,6 +1,6 @@
require "language/java" require "language/java"
class JavaDependency < Requirement class JavaRequirement < Requirement
fatal true fatal true
cask "java" cask "java"
download "http://www.oracle.com/technetwork/java/javase/downloads/index.html" download "http://www.oracle.com/technetwork/java/javase/downloads/index.html"

View File

@ -1,6 +1,6 @@
require 'requirement' require 'requirement'
class LanguageModuleDependency < Requirement class LanguageModuleRequirement < Requirement
fatal true fatal true
def initialize language, module_name, import_name=nil def initialize language, module_name, import_name=nil

View File

@ -3,7 +3,7 @@ require 'requirement'
# There are multiple implementations of MPI-2 available. # There are multiple implementations of MPI-2 available.
# http://www.mpi-forum.org/ # http://www.mpi-forum.org/
# This requirement is used to find an appropriate one. # This requirement is used to find an appropriate one.
class MPIDependency < Requirement class MPIRequirement < Requirement
attr_reader :lang_list attr_reader :lang_list

View File

@ -1,6 +1,6 @@
require "requirement" require "requirement"
class OsxfuseDependency < Requirement class OsxfuseRequirement < Requirement
fatal true fatal true
default_formula "osxfuse" default_formula "osxfuse"
cask "osxfuse" cask "osxfuse"
@ -17,9 +17,9 @@ class OsxfuseDependency < Requirement
end end
end end
class ConflictsWithBinaryOsxfuse < Requirement class NonBinaryOsxfuseRequirement < Requirement
fatal true fatal true
satisfy { HOMEBREW_PREFIX.to_s != "/usr/local" || !OsxfuseDependency.binary_osxfuse_installed? } satisfy { HOMEBREW_PREFIX.to_s != "/usr/local" || !OsxfuseRequirement.binary_osxfuse_installed? }
def message def message
<<-EOS.undent <<-EOS.undent

View File

@ -1,6 +1,6 @@
require "language/python" require "language/python"
class PythonDependency < Requirement class PythonRequirement < Requirement
fatal true fatal true
default_formula "python" default_formula "python"
cask "python" cask "python"
@ -47,7 +47,7 @@ class PythonDependency < Requirement
alias_method :to_s, :python_binary alias_method :to_s, :python_binary
end end
class Python3Dependency < PythonDependency class Python3Requirement < PythonRequirement
fatal true fatal true
default_formula "python3" default_formula "python3"
cask "python3" cask "python3"

View File

@ -1,6 +1,6 @@
require "requirement" require "requirement"
class TuntapDependency < Requirement class TuntapRequirement < Requirement
fatal true fatal true
default_formula "tuntap" default_formula "tuntap"
cask "tuntap" cask "tuntap"

View File

@ -1,6 +1,6 @@
require "requirement" require "requirement"
class X11Dependency < Requirement class X11Requirement < Requirement
include Comparable include Comparable
attr_reader :min_version attr_reader :min_version
@ -33,7 +33,7 @@ class X11Dependency < Requirement
end end
def <=> other def <=> other
return unless X11Dependency === other return unless X11Requirement === other
min_version <=> other.min_version min_version <=> other.min_version
end end

View File

@ -83,19 +83,19 @@ class RequirementsTests < Homebrew::TestCase
end end
def test_merging_multiple_dependencies def test_merging_multiple_dependencies
@reqs << X11Dependency.new << X11Dependency.new @reqs << X11Requirement.new << X11Requirement.new
assert_equal 1, @reqs.count assert_equal 1, @reqs.count
@reqs << Requirement.new @reqs << Requirement.new
assert_equal 2, @reqs.count assert_equal 2, @reqs.count
end end
def test_comparison_prefers_larger def test_comparison_prefers_larger
@reqs << X11Dependency.new << X11Dependency.new("x11", %w[2.6]) @reqs << X11Requirement.new << X11Requirement.new("x11", %w[2.6])
assert_equal [X11Dependency.new("x11", %w[2.6])], @reqs.to_a assert_equal [X11Requirement.new("x11", %w[2.6])], @reqs.to_a
end end
def test_comparison_does_not_merge_smaller def test_comparison_does_not_merge_smaller
@reqs << X11Dependency.new("x11", %w{2.6}) << X11Dependency.new @reqs << X11Requirement.new("x11", %w{2.6}) << X11Requirement.new
assert_equal [X11Dependency.new("x11", %w[2.6])], @reqs.to_a assert_equal [X11Requirement.new("x11", %w[2.6])], @reqs.to_a
end end
end end

View File

@ -39,7 +39,7 @@ class DependencyCollectorTests < Homebrew::TestCase
def test_requirement_creation def test_requirement_creation
@d.add :x11 @d.add :x11
assert_instance_of X11Dependency, find_requirement(X11Dependency) assert_instance_of X11Requirement, find_requirement(X11Requirement)
end end
def test_no_duplicate_requirements def test_no_duplicate_requirements
@ -50,28 +50,28 @@ class DependencyCollectorTests < Homebrew::TestCase
def test_requirement_tags def test_requirement_tags
@d.add :x11 => '2.5.1' @d.add :x11 => '2.5.1'
@d.add :xcode => :build @d.add :xcode => :build
assert_empty find_requirement(X11Dependency).tags assert_empty find_requirement(X11Requirement).tags
assert_predicate find_requirement(XcodeDependency), :build? assert_predicate find_requirement(XcodeRequirement), :build?
end end
def test_x11_no_tag def test_x11_no_tag
@d.add :x11 @d.add :x11
assert_empty find_requirement(X11Dependency).tags assert_empty find_requirement(X11Requirement).tags
end end
def test_x11_min_version def test_x11_min_version
@d.add :x11 => '2.5.1' @d.add :x11 => '2.5.1'
assert_equal "2.5.1", find_requirement(X11Dependency).min_version.to_s assert_equal "2.5.1", find_requirement(X11Requirement).min_version.to_s
end end
def test_x11_tag def test_x11_tag
@d.add :x11 => :optional @d.add :x11 => :optional
assert_predicate find_requirement(X11Dependency), :optional? assert_predicate find_requirement(X11Requirement), :optional?
end end
def test_x11_min_version_and_tag def test_x11_min_version_and_tag
@d.add :x11 => ['2.5.1', :optional] @d.add :x11 => ['2.5.1', :optional]
dep = find_requirement(X11Dependency) dep = find_requirement(X11Requirement)
assert_equal '2.5.1', dep.min_version.to_s assert_equal '2.5.1', dep.min_version.to_s
assert_predicate dep, :optional? assert_predicate dep, :optional?
end end
@ -104,7 +104,7 @@ class DependencyCollectorTests < Homebrew::TestCase
def test_resource_dep_git_url def test_resource_dep_git_url
resource = Resource.new resource = Resource.new
resource.url("git://example.com/foo/bar.git") resource.url("git://example.com/foo/bar.git")
assert_instance_of GitDependency, @d.add(resource) assert_instance_of GitRequirement, @d.add(resource)
end end
def test_resource_dep_gzip_url def test_resource_dep_gzip_url

View File

@ -1,20 +1,20 @@
require 'testing_env' require 'testing_env'
require 'requirements/language_module_dependency' require 'requirements/language_module_requirement'
class LanguageModuleDependencyTests < Homebrew::TestCase class LanguageModuleRequirementTests < Homebrew::TestCase
parallelize_me! parallelize_me!
def assert_deps_fail(spec) def assert_deps_fail(spec)
refute_predicate LanguageModuleDependency.new(*spec.shift.reverse), :satisfied? refute_predicate LanguageModuleRequirement.new(*spec.shift.reverse), :satisfied?
end end
def assert_deps_pass(spec) def assert_deps_pass(spec)
assert_predicate LanguageModuleDependency.new(*spec.shift.reverse), :satisfied? assert_predicate LanguageModuleRequirement.new(*spec.shift.reverse), :satisfied?
end end
def test_unique_deps_are_not_eql def test_unique_deps_are_not_eql
x = LanguageModuleDependency.new(:node, "less") x = LanguageModuleRequirement.new(:node, "less")
y = LanguageModuleDependency.new(:node, "coffee-script") y = LanguageModuleRequirement.new(:node, "coffee-script")
refute_eql x, y refute_eql x, y
refute_equal x.hash, y.hash refute_equal x.hash, y.hash
end end
@ -22,7 +22,7 @@ class LanguageModuleDependencyTests < Homebrew::TestCase
def test_differing_module_and_import_name def test_differing_module_and_import_name
mod_name = "foo" mod_name = "foo"
import_name = "bar" import_name = "bar"
l = LanguageModuleDependency.new(:python, mod_name, import_name) l = LanguageModuleRequirement.new(:python, mod_name, import_name)
assert_includes l.message, mod_name assert_includes l.message, mod_name
assert_includes l.the_test, "import #{import_name}" assert_includes l.the_test, "import #{import_name}"
end end

View File

@ -1,11 +1,11 @@
require 'testing_env' require 'testing_env'
require 'requirements/mpi_dependency' require 'requirements/mpi_requirement'
class MPIDependencyTests < Homebrew::TestCase class MPIRequirementTests < Homebrew::TestCase
def test_initialize_untangles_tags_and_wrapper_symbols def test_initialize_untangles_tags_and_wrapper_symbols
wrappers = [:cc, :cxx, :f77] wrappers = [:cc, :cxx, :f77]
tags = [:optional, 'some-other-tag'] tags = [:optional, 'some-other-tag']
dep = MPIDependency.new(*wrappers + tags) dep = MPIRequirement.new(*wrappers + tags)
assert_equal wrappers, dep.lang_list assert_equal wrappers, dep.lang_list
assert_equal tags, dep.tags assert_equal tags, dep.tags
end end

View File

@ -1,29 +1,29 @@
require 'testing_env' require 'testing_env'
require 'requirements/x11_dependency' require 'requirements/x11_requirement'
class X11DependencyTests < Homebrew::TestCase class X11RequirementTests < Homebrew::TestCase
def test_eql_instances_are_eql def test_eql_instances_are_eql
x = X11Dependency.new x = X11Requirement.new
y = X11Dependency.new y = X11Requirement.new
assert_eql x, y assert_eql x, y
assert_equal x.hash, y.hash assert_equal x.hash, y.hash
end end
def test_not_eql_when_hashes_differ def test_not_eql_when_hashes_differ
x = X11Dependency.new("foo") x = X11Requirement.new("foo")
y = X11Dependency.new y = X11Requirement.new
refute_eql x, y refute_eql x, y
refute_equal x.hash, y.hash refute_equal x.hash, y.hash
end end
def test_different_min_version def test_different_min_version
x = X11Dependency.new x = X11Requirement.new
y = X11Dependency.new("x11", %w[2.5]) y = X11Requirement.new("x11", %w[2.5])
refute_eql x, y refute_eql x, y
end end
def test_x_env def test_x_env
x = X11Dependency.new x = X11Requirement.new
x.stubs(:satisfied?).returns(true) x.stubs(:satisfied?).returns(true)
ENV.expects(:x11) ENV.expects(:x11)
x.modify_build_environment x.modify_build_environment
@ -32,9 +32,9 @@ class X11DependencyTests < Homebrew::TestCase
def test_satisfied def test_satisfied
MacOS::XQuartz.stubs(:version).returns("2.7.5") MacOS::XQuartz.stubs(:version).returns("2.7.5")
MacOS::XQuartz.stubs(:installed?).returns(true) MacOS::XQuartz.stubs(:installed?).returns(true)
assert_predicate X11Dependency.new, :satisfied? assert_predicate X11Requirement.new, :satisfied?
MacOS::XQuartz.stubs(:installed?).returns(false) MacOS::XQuartz.stubs(:installed?).returns(false)
refute_predicate X11Dependency.new, :satisfied? refute_predicate X11Requirement.new, :satisfied?
end end
end end