diff --git a/Library/Homebrew/extend/ENV/shared.rb b/Library/Homebrew/extend/ENV/shared.rb index 9ba3a244a4..6be8f51cdd 100644 --- a/Library/Homebrew/extend/ENV/shared.rb +++ b/Library/Homebrew/extend/ENV/shared.rb @@ -147,7 +147,7 @@ module SharedEnvExtension # Outputs the current compiler. # @return [Symbol] - #
# Do something only for clang + ## Do something only for the system clang # if ENV.compiler == :clang # # modify CFLAGS CXXFLAGS OBJCFLAGS OBJCXXFLAGS in one go: # ENV.append_to_cflags "-I ./missing/includes" @@ -301,6 +301,18 @@ module SharedEnvExtension # A no-op until we enable this by default again (which we may never do). def permit_weak_imports; end + # @private + def compiler_any_clang?(cc = compiler) + %w[clang llvm_clang].include?(cc.to_s) + end + + # @private + def compiler_with_cxx11_support?(cc) + return if compiler_any_clang?(cc) + version = cc[/^gcc-(\d+(?:\.\d+)?)$/, 1] + version && Version.create(version) >= Version.create("4.8") + end + private def cc=(val) @@ -330,11 +342,6 @@ module SharedEnvExtension return unless homebrew_cc =~ GNU_GCC_REGEXP raise "Non-Apple GCC can't build universal binaries" end - - def gcc_with_cxx11_support?(cc) - version = cc[/^gcc-(\d+(?:\.\d+)?)$/, 1] - version && Version.create(version) >= Version.create("4.8") - end end require "extend/os/extend/ENV/shared" diff --git a/Library/Homebrew/extend/ENV/std.rb b/Library/Homebrew/extend/ENV/std.rb index 17e0fd67a0..5a152f0d55 100644 --- a/Library/Homebrew/extend/ENV/std.rb +++ b/Library/Homebrew/extend/ENV/std.rb @@ -157,7 +157,7 @@ module Stdenv append_to_cflags Hardware::CPU.universal_archs.as_arch_flags append "LDFLAGS", Hardware::CPU.universal_archs.as_arch_flags - return if compiler == :clang + return if compiler_any_clang? return unless Hardware.is_32_bit? # Can't mix "-march" for a 32-bit CPU with "-arch x86_64" replace_in_cflags(/-march=\S*/, "-Xarch_#{Hardware::CPU.arch_32_bit} \\0") @@ -167,7 +167,7 @@ module Stdenv if compiler == :clang append "CXX", "-std=c++11" append "CXX", "-stdlib=libc++" - elsif gcc_with_cxx11_support?(compiler) + elsif compiler_with_cxx11_support?(compiler) append "CXX", "-std=c++11" else raise "The selected compiler doesn't support C++11: #{compiler}" diff --git a/Library/Homebrew/extend/ENV/super.rb b/Library/Homebrew/extend/ENV/super.rb index 3a23dfd7f4..aa12aa71c5 100644 --- a/Library/Homebrew/extend/ENV/super.rb +++ b/Library/Homebrew/extend/ENV/super.rb @@ -276,7 +276,7 @@ module Superenv self["HOMEBREW_ARCHFLAGS"] = Hardware::CPU.universal_archs.as_arch_flags # GCC doesn't accept "-march" for a 32-bit CPU with "-arch x86_64" - return if compiler == :clang + return if compiler_any_clang? return unless Hardware::CPU.is_32_bit? self["HOMEBREW_OPTFLAGS"] = self["HOMEBREW_OPTFLAGS"].sub( /-march=\S*/, @@ -300,7 +300,7 @@ module Superenv if homebrew_cc == "clang" append "HOMEBREW_CCCFG", "x", "" append "HOMEBREW_CCCFG", "g", "" - elsif gcc_with_cxx11_support?(homebrew_cc) + elsif compiler_with_cxx11_support?(homebrew_cc) append "HOMEBREW_CCCFG", "x", "" else raise "The selected compiler doesn't support C++11: #{homebrew_cc}" diff --git a/Library/Homebrew/test/ENV_spec.rb b/Library/Homebrew/test/ENV_spec.rb index b39ae374c7..aed0608e00 100644 --- a/Library/Homebrew/test/ENV_spec.rb +++ b/Library/Homebrew/test/ENV_spec.rb @@ -156,6 +156,18 @@ shared_examples EnvActivation do expect(subject["FOO"]).to eq "bar" end end + + describe "#compiler_any_clang?" do + it "returns true for llvm_clang" do + expect(subject.compiler_any_clang?(:llvm_clang)).to be true + end + end + + describe "#compiler_with_cxx11_support?" do + it "returns true for gcc-4.9" do + expect(subject.compiler_with_cxx11_support?("gcc-4.9")).to be true + end + end end describe Stdenv do