From 023f02b90a758b147aa75edcca13944033a538c0 Mon Sep 17 00:00:00 2001 From: Jack Nagel Date: Tue, 19 Aug 2014 17:14:02 -0500 Subject: [PATCH] Make fails_with available in spec blocks Closes Homebrew/homebrew#31706. --- Library/Homebrew/formula.rb | 21 ++++++++------------- Library/Homebrew/software_spec.rb | 17 +++++++++++++++++ 2 files changed, 25 insertions(+), 13 deletions(-) diff --git a/Library/Homebrew/formula.rb b/Library/Homebrew/formula.rb index f0a10bc1ec..4088f50dad 100644 --- a/Library/Homebrew/formula.rb +++ b/Library/Homebrew/formula.rb @@ -3,7 +3,6 @@ require 'formula_lock' require 'formula_pin' require 'hardware' require 'bottles' -require 'compilers' require 'build_environment' require 'build_options' require 'formulary' @@ -111,6 +110,10 @@ class Formula active_spec.option_defined?(name) end + def fails_with?(compiler) + active_spec.fails_with?(compiler) + end + # if the dir is there, but it's empty we consider it not installed def installed? (dir = installed_prefix).directory? && dir.children.length > 0 @@ -228,10 +231,6 @@ class Formula self.class.keg_only_reason end - def fails_with? compiler - (self.class.cc_failures || []).any? { |failure| failure === compiler } - end - # sometimes the formula cleaner breaks things # skip cleaning paths in a formula with a class method like this: # skip_clean "bin/foo", "lib"bar" @@ -609,7 +608,7 @@ class Formula class << self include BuildEnvironmentDSL - attr_reader :keg_only_reason, :cc_failures + attr_reader :keg_only_reason attr_rw :homepage, :plist_startup, :plist_manual, :revision def specs @@ -742,16 +741,12 @@ class Formula # fails_with :gcc => '4.8' do # version '4.8.1' # end - def fails_with spec, &block - @cc_failures ||= Set.new - @cc_failures << CompilerFailure.create(spec, &block) + def fails_with compiler, &block + specs.each { |spec| spec.fails_with(compiler, &block) } end def needs *standards - @cc_failures ||= Set.new - standards.each do |standard| - @cc_failures.merge CompilerFailure.for_standard standard - end + specs.each { |spec| spec.needs(*standards) } end def test &block diff --git a/Library/Homebrew/software_spec.rb b/Library/Homebrew/software_spec.rb index 9fda2cef96..113230247d 100644 --- a/Library/Homebrew/software_spec.rb +++ b/Library/Homebrew/software_spec.rb @@ -7,6 +7,7 @@ require 'build_options' require 'dependency_collector' require 'bottles' require 'patch' +require 'compilers' class SoftwareSpec extend Forwardable @@ -21,6 +22,7 @@ class SoftwareSpec attr_reader :build, :resources, :patches, :options attr_reader :dependency_collector attr_reader :bottle_specification + attr_reader :compiler_failures def_delegators :@resource, :stage, :fetch, :verify_download_integrity def_delegators :@resource, :cached_download, :clear_cache @@ -35,6 +37,7 @@ class SoftwareSpec @patches = [] @options = Options.new @build = BuildOptions.new(Options.create(ARGV.options_only), options) + @compiler_failures = [] end def owner= owner @@ -112,6 +115,20 @@ class SoftwareSpec patches << Patch.create(strip, src, &block) end + def fails_with? compiler + compiler_failures.any? { |failure| failure === compiler } + end + + def fails_with compiler, &block + compiler_failures << CompilerFailure.create(compiler, &block) + end + + def needs *standards + standards.each do |standard| + compiler_failures.concat CompilerFailure.for_standard(standard) + end + end + def add_legacy_patches(list) list = Patch.normalize_legacy_patches(list) list.each { |p| p.owner = self }