Make fails_with available in spec blocks

Closes Homebrew/homebrew#31706.
This commit is contained in:
Jack Nagel 2014-08-19 17:14:02 -05:00
parent 00220c40db
commit 023f02b90a
2 changed files with 25 additions and 13 deletions

View File

@ -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

View File

@ -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 }