diff --git a/Library/Homebrew/compat.rb b/Library/Homebrew/compat.rb index d829e900cbdb9..6c3fa2dbba6d8 100644 --- a/Library/Homebrew/compat.rb +++ b/Library/Homebrew/compat.rb @@ -3,6 +3,7 @@ require "compat/hbc" require "compat/formula" require "compat/formula_specialties" +require "compat/formula_support" require "compat/global" require "compat/hardware" require "compat/macos" diff --git a/Library/Homebrew/compat/dependency_collector.rb b/Library/Homebrew/compat/dependency_collector.rb index 1c91f22830ea5..84d5431f3e8b6 100644 --- a/Library/Homebrew/compat/dependency_collector.rb +++ b/Library/Homebrew/compat/dependency_collector.rb @@ -1,80 +1,82 @@ require "dependency_collector" class DependencyCollector - alias _parse_string_spec parse_string_spec + module Compat + # Define the languages that we can handle as external dependencies. + LANGUAGE_MODULES = Set[ + :lua, :lua51, :perl, :python, :python3, :ruby + ].freeze - # Define the languages that we can handle as external dependencies. - LANGUAGE_MODULES = Set[ - :lua, :lua51, :perl, :python, :python3, :ruby - ].freeze + def parse_string_spec(spec, tags) + if (tag = tags.first) && LANGUAGE_MODULES.include?(tag) + odeprecated "'depends_on ... => #{tag.inspect}'" + LanguageModuleRequirement.new(tag, spec, tags[1]) + else + super + end + end - def parse_string_spec(spec, tags) - if (tag = tags.first) && LANGUAGE_MODULES.include?(tag) - odeprecated "'depends_on :#{tag}'" - LanguageModuleRequirement.new(tag, spec, tags[1]) - else - _parse_string_spec(spec, tags) + def parse_symbol_spec(spec, tags) + case spec + when :clt + odeprecated "'depends_on :clt'" + when :tex + odeprecated "'depends_on :tex'" + TeXRequirement.new(tags) + when :autoconf, :automake, :bsdmake, :libtool + output_deprecation(spec) + autotools_dep(spec, tags) + when :cairo, :fontconfig, :freetype, :libpng, :pixman + output_deprecation(spec) + Dependency.new(spec.to_s, tags) + when :ant, :expat + output_deprecation(spec) + Dependency.new(spec.to_s, tags) + when :libltdl + tags << :run + output_deprecation("libtool") + Dependency.new("libtool", tags) + when :apr + output_deprecation(spec, "apr-util") + Dependency.new("apr-util", tags) + when :fortran + output_deprecation(spec, "gcc") + Dependency.new("gcc", tags) + when :gpg + output_deprecation(spec, "gnupg") + Dependency.new("gnupg", tags) + when :hg + output_deprecation(spec, "mercurial") + Dependency.new("mercurial", tags) + when :mpi + output_deprecation(spec, "open-mpi") + Dependency.new("open-mpi", tags) + when :python, :python2 + output_deprecation(spec, "python") + Dependency.new("python", tags) + when :python3 + output_deprecation(spec, "python3") + Dependency.new("python3", tags) + when :emacs, :mysql, :perl, :postgresql, :rbenv, :ruby + output_deprecation(spec) + Dependency.new(spec, tags) + else + super + end end - end - alias _parse_symbol_spec parse_symbol_spec + private - def parse_symbol_spec(spec, tags) - case spec - when :clt - odeprecated "'depends_on :clt'" - when :tex - odeprecated "'depends_on :tex'" - TeXRequirement.new(tags) - when :autoconf, :automake, :bsdmake, :libtool - output_deprecation(spec) - autotools_dep(spec, tags) - when :cairo, :fontconfig, :freetype, :libpng, :pixman - output_deprecation(spec) - Dependency.new(spec.to_s, tags) - when :ant, :expat - output_deprecation(spec) + def autotools_dep(spec, tags) + tags << :build unless tags.include? :run Dependency.new(spec.to_s, tags) - when :libltdl - tags << :run - output_deprecation("libtool") - Dependency.new("libtool", tags) - when :apr - output_deprecation(spec, "apr-util") - Dependency.new("apr-util", tags) - when :fortran - output_deprecation(spec, "gcc") - Dependency.new("gcc", tags) - when :gpg - output_deprecation(spec, "gnupg") - Dependency.new("gnupg", tags) - when :hg - output_deprecation(spec, "mercurial") - Dependency.new("mercurial", tags) - when :mpi - output_deprecation(spec, "open-mpi") - Dependency.new("open-mpi", tags) - when :python, :python2 - output_deprecation(spec, "python") - Dependency.new("python", tags) - when :python3 - output_deprecation(spec, "python3") - Dependency.new("python3", tags) - when :emacs, :mysql, :perl, :postgresql, :rbenv, :ruby - output_deprecation(spec) - Dependency.new(spec, tags) - else - _parse_symbol_spec(spec, tags) end - end - def autotools_dep(spec, tags) - tags << :build unless tags.include? :run - Dependency.new(spec.to_s, tags) + def output_deprecation(dependency, new_dependency = dependency) + odeprecated "'depends_on :#{dependency}'", + "'depends_on \"#{new_dependency}\"'" + end end - def output_deprecation(dependency, new_dependency = dependency) - odeprecated "'depends_on :#{dependency}'", - "'depends_on \"#{new_dependency}\"'" - end + prepend Compat end diff --git a/Library/Homebrew/compat/formula_support.rb b/Library/Homebrew/compat/formula_support.rb index f56a4909b3ff9..9cb8d8ff144b4 100644 --- a/Library/Homebrew/compat/formula_support.rb +++ b/Library/Homebrew/compat/formula_support.rb @@ -1,18 +1,20 @@ require "formula_support" class KegOnlyReason - alias _to_s to_s + module Compat + def to_s + case @reason + when :provided_by_osx + odeprecated "keg_only :provided_by_osx", "keg_only :provided_by_macos" + @reason = :provided_by_macos + when :shadowed_by_osx + odeprecated "keg_only :shadowed_by_osx", "keg_only :shadowed_by_macos" + @reason = :shadowed_by_macos + end - def to_s - case @reason - when :provided_by_osx - odeprecated "keg_only :provided_by_osx", "keg_only :provided_by_macos" - @reason = :provided_by_macos - when :shadowed_by_osx - odeprecated "keg_only :shadowed_by_osx", "keg_only :shadowed_by_macos" - @reason = :shadowed_by_macos + super end - - _to_s end + + prepend Compat end diff --git a/Library/Homebrew/test/dependency_collector_spec.rb b/Library/Homebrew/test/dependency_collector_spec.rb index 0f182a69e9211..46e859b2d8ae2 100644 --- a/Library/Homebrew/test/dependency_collector_spec.rb +++ b/Library/Homebrew/test/dependency_collector_spec.rb @@ -128,5 +128,15 @@ def find_requirement(klass) resource.download_strategy = Class.new expect { subject.add(resource) }.to raise_error(TypeError) end + + it "is deprecated when called with a language module", :needs_compat do + expect(subject).to receive(:odeprecated) + subject.add("lpeg" => :lua) + end + + it "is deprecated when called with deprecated requirements", :needs_compat do + expect(subject).to receive(:odeprecated) + subject.add(:python) + end end end diff --git a/Library/Homebrew/test/formula_support_spec.rb b/Library/Homebrew/test/formula_support_spec.rb index f42d61ba9bfab..7239ef352a6d4 100644 --- a/Library/Homebrew/test/formula_support_spec.rb +++ b/Library/Homebrew/test/formula_support_spec.rb @@ -3,7 +3,7 @@ describe KegOnlyReason do describe "#to_s" do it "returns the reason provided" do - r = KegOnlyReason.new :provided_by_osx, "test" + r = KegOnlyReason.new :provided_by_macos, "test" expect(r.to_s).to eq("test") end @@ -11,6 +11,12 @@ r = KegOnlyReason.new :provided_by_macos, "" expect(r.to_s).to match(/^macOS already provides/) end + + it "is deprecated when reason mentions 'osx'", :needs_compat do + r = KegOnlyReason.new :provided_by_osx, "test" + expect(r).to receive(:odeprecated) + r.to_s + end end end