From 3a127e405e45a4d95a809651553ff4a30ed95e3d Mon Sep 17 00:00:00 2001 From: Mike McQuaid <mike@mikemcquaid.com> Date: Wed, 6 Jul 2016 11:07:24 +0100 Subject: [PATCH] development_tools: add installed? method. (#455) --- Library/Homebrew/cmd/install.rb | 2 +- Library/Homebrew/cmd/reinstall.rb | 2 +- Library/Homebrew/cmd/upgrade.rb | 2 +- Library/Homebrew/compat/macos.rb | 4 ++++ Library/Homebrew/extend/ENV/super.rb | 3 ++- Library/Homebrew/extend/os/mac/development_tools.rb | 9 +++++++++ Library/Homebrew/formula_installer.rb | 6 +++--- Library/Homebrew/os/mac.rb | 7 ------- Library/Homebrew/test/test_formula_installer.rb | 2 +- Library/Homebrew/test/test_formula_installer_bottle.rb | 4 ++-- 10 files changed, 24 insertions(+), 17 deletions(-) diff --git a/Library/Homebrew/cmd/install.rb b/Library/Homebrew/cmd/install.rb index 56cfbc24fe..df98503073 100644 --- a/Library/Homebrew/cmd/install.rb +++ b/Library/Homebrew/cmd/install.rb @@ -96,7 +96,7 @@ module Homebrew # if the user's flags will prevent bottle only-installations when no # developer tools are available, we need to stop them early on - FormulaInstaller.prevent_build_flags unless MacOS.has_apple_developer_tools? + FormulaInstaller.prevent_build_flags unless DevelopmentTools.installed? ARGV.formulae.each do |f| # head-only without --HEAD is an error diff --git a/Library/Homebrew/cmd/reinstall.rb b/Library/Homebrew/cmd/reinstall.rb index 4a23c00ec6..dc3a02cef4 100644 --- a/Library/Homebrew/cmd/reinstall.rb +++ b/Library/Homebrew/cmd/reinstall.rb @@ -5,7 +5,7 @@ require "formula_installer" module Homebrew def reinstall - FormulaInstaller.prevent_build_flags unless MacOS.has_apple_developer_tools? + FormulaInstaller.prevent_build_flags unless DevelopmentTools.installed? ARGV.resolved_formulae.each { |f| reinstall_formula(f) } end diff --git a/Library/Homebrew/cmd/upgrade.rb b/Library/Homebrew/cmd/upgrade.rb index c296e77577..e914da3a3c 100644 --- a/Library/Homebrew/cmd/upgrade.rb +++ b/Library/Homebrew/cmd/upgrade.rb @@ -13,7 +13,7 @@ require "cleanup" module Homebrew def upgrade - FormulaInstaller.prevent_build_flags unless MacOS.has_apple_developer_tools? + FormulaInstaller.prevent_build_flags unless DevelopmentTools.installed? Homebrew.perform_preinstall_checks diff --git a/Library/Homebrew/compat/macos.rb b/Library/Homebrew/compat/macos.rb index e534e2f2eb..4595eeac55 100644 --- a/Library/Homebrew/compat/macos.rb +++ b/Library/Homebrew/compat/macos.rb @@ -90,5 +90,9 @@ module OS def clang_build_version DevelopmentTools.clang_build_version end + + def has_apple_developer_tools? + DevelopmentTools.installed? + end end end diff --git a/Library/Homebrew/extend/ENV/super.rb b/Library/Homebrew/extend/ENV/super.rb index 1ef5c465df..25ee5c0aa3 100644 --- a/Library/Homebrew/extend/ENV/super.rb +++ b/Library/Homebrew/extend/ENV/super.rb @@ -1,4 +1,5 @@ require "extend/ENV/shared" +require "development_tools" # ### Why `superenv`? # @@ -26,7 +27,7 @@ module Superenv # @private def self.bin - return unless MacOS.has_apple_developer_tools? + return unless DevelopmentTools.installed? bin = HOMEBREW_ENV_PATH.subdirs.reject { |d| d.basename.to_s > MacOS::Xcode.version }.max bin.realpath unless bin.nil? diff --git a/Library/Homebrew/extend/os/mac/development_tools.rb b/Library/Homebrew/extend/os/mac/development_tools.rb index b80be4c814..1afab513b9 100644 --- a/Library/Homebrew/extend/os/mac/development_tools.rb +++ b/Library/Homebrew/extend/os/mac/development_tools.rb @@ -1,3 +1,5 @@ +require "os/mac/xcode" + # @private class DevelopmentTools class << self @@ -13,6 +15,13 @@ class DevelopmentTools end end + # Checks if the user has any developer tools installed, either via Xcode + # or the CLT. Convenient for guarding against formula builds when building + # is impossible. + def installed? + MacOS::Xcode.installed? || MacOS::CLT.installed? + end + def default_compiler case default_cc # if GCC 4.2 is installed, e.g. via Tigerbrew, prefer it diff --git a/Library/Homebrew/formula_installer.rb b/Library/Homebrew/formula_installer.rb index ab0e36029e..da626da4c4 100644 --- a/Library/Homebrew/formula_installer.rb +++ b/Library/Homebrew/formula_installer.rb @@ -178,13 +178,13 @@ class FormulaInstaller check_conflicts - if !pour_bottle? && !formula.bottle_unneeded? && !MacOS.has_apple_developer_tools? + if !pour_bottle? && !formula.bottle_unneeded? && !DevelopmentTools.installed? raise BuildToolsError.new([formula]) end unless skip_deps_check? deps = compute_dependencies - check_dependencies_bottled(deps) if pour_bottle? && !MacOS.has_apple_developer_tools? + check_dependencies_bottled(deps) if pour_bottle? && !DevelopmentTools.installed? install_dependencies(deps) end @@ -223,7 +223,7 @@ class FormulaInstaller @pour_failed = true onoe e.message opoo "Bottle installation failed: building from source." - raise BuildToolsError.new([formula]) unless MacOS.has_apple_developer_tools? + raise BuildToolsError.new([formula]) unless DevelopmentTools.installed? else @poured_bottle = true end diff --git a/Library/Homebrew/os/mac.rb b/Library/Homebrew/os/mac.rb index 6a7044ddb1..70cd3e33f5 100644 --- a/Library/Homebrew/os/mac.rb +++ b/Library/Homebrew/os/mac.rb @@ -61,13 +61,6 @@ module OS end end - # Checks if the user has any developer tools installed, either via Xcode - # or the CLT. Convenient for guarding against formula builds when building - # is impossible. - def has_apple_developer_tools? - Xcode.installed? || CLT.installed? - end - def active_developer_dir @active_developer_dir ||= Utils.popen_read("/usr/bin/xcode-select", "-print-path").strip end diff --git a/Library/Homebrew/test/test_formula_installer.rb b/Library/Homebrew/test/test_formula_installer.rb index 9602ec7c1e..55b456fbae 100644 --- a/Library/Homebrew/test/test_formula_installer.rb +++ b/Library/Homebrew/test/test_formula_installer.rb @@ -62,7 +62,7 @@ class InstallTests < Homebrew::TestCase end def test_bottle_unneeded_formula_install - MacOS.stubs(:has_apple_developer_tools?).returns(false) + DevelopmentTools.stubs(:installed?).returns(false) formula = Testball.new formula.stubs(:bottle_unneeded?).returns(true) diff --git a/Library/Homebrew/test/test_formula_installer_bottle.rb b/Library/Homebrew/test/test_formula_installer_bottle.rb index 12306c2299..d83c856b7f 100644 --- a/Library/Homebrew/test/test_formula_installer_bottle.rb +++ b/Library/Homebrew/test/test_formula_installer_bottle.rb @@ -36,7 +36,7 @@ class InstallBottleTests < Homebrew::TestCase end def test_a_basic_bottle_install - MacOS.stubs(:has_apple_developer_tools?).returns(false) + DevelopmentTools.stubs(:installed?).returns(false) temporary_bottle_install(TestballBottle.new) do |f| # Copied directly from test_formula_installer.rb as we expect @@ -59,7 +59,7 @@ class InstallBottleTests < Homebrew::TestCase end def test_build_tools_error - MacOS.stubs(:has_apple_developer_tools?).returns(false) + DevelopmentTools.stubs(:installed?).returns(false) # Testball doesn't have a bottle block, so use it to test this behavior formula = Testball.new -- GitLab