formula_installed: tweak source build behaviour.

Currently `brew install —build-from-source wget` builds all the
dependencies also from source. I can see people wanting to do this when
`HOMEBREW_BUILD_FROM_SOURCE` is set by passing it on the command-line
is mostly just annoying; it means you have to use `—build-bottle` and
deal with the CFLAGS and `post_install` changes if you want to build
from source. Tweak `formula_installer` so this behaviour is more
intuitive.

Closes Homebrew/homebrew#47889.

Signed-off-by: Mike McQuaid <mike@mikemcquaid.com>
This commit is contained in:
Mike McQuaid 2016-01-10 18:17:54 +00:00
parent 04a9b0022d
commit e7bffe4809
2 changed files with 16 additions and 5 deletions

View File

@ -42,9 +42,15 @@ module Homebrew
end
def fetch_bottle?(f)
return true if ARGV.force_bottle? && f.bottle
return false unless f.bottle && f.pour_bottle?
return false if ARGV.build_from_source? || ARGV.build_bottle?
return false unless f.bottle
return true if ARGV.force_bottle?
return false unless f.pour_bottle?
# We want to behave different with `--build-from-source` and
# ENV["HOMEBREW_BUILD_FROM_SOURCE"] because the latter implies you want
# everything built from source and the prior that you want just the
# formulae you've requested built from source.
return false if ENV["HOMEBREW_BUILD_FROM_SOURCE"]
return false if ARGV.build_bottle?
return false unless f.bottle.compatible_cellar?
true
end

View File

@ -98,8 +98,13 @@ class FormulaInstaller
def install_bottle_for?(dep, build)
return pour_bottle? if dep == formula
return false if build_from_source?
return false unless dep.bottle && dep.pour_bottle?
# We want to behave different with `--build-from-source` and
# ENV["HOMEBREW_BUILD_FROM_SOURCE"] because the latter implies you want
# everything built from source and the prior that you want just the
# formulae you've requested built from source.
return false if ENV["HOMEBREW_BUILD_FROM_SOURCE"]
return false unless dep.bottle
return false unless dep.pour_bottle?
return false unless build.used_options.empty?
return false unless dep.bottle.compatible_cellar?
true