aboutsummaryrefslogtreecommitdiffstats
path: root/Library
diff options
context:
space:
mode:
authorJack Nagel2014-08-19 17:14:02 -0500
committerJack Nagel2014-08-19 17:14:02 -0500
commit19c0692d08d15cb6a259ef5c3942eff0c8675e2c (patch)
tree584c21e6f05362bc5d7bbc73e9e6820a9569b0eb /Library
parentbfa884c65d033c306ddef1421d2e234826f1108e (diff)
downloadhomebrew-19c0692d08d15cb6a259ef5c3942eff0c8675e2c.tar.bz2
Make fails_with available in spec blocks
Closes #31706.
Diffstat (limited to 'Library')
-rw-r--r--Library/Homebrew/formula.rb21
-rw-r--r--Library/Homebrew/software_spec.rb17
2 files changed, 25 insertions, 13 deletions
diff --git a/Library/Homebrew/formula.rb b/Library/Homebrew/formula.rb
index f0a10bc1e..4088f50da 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 9fda2cef9..113230247 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 }