Class: DevelopmentTools

Inherits:
Object
  • Object
show all
Defined in:
Library/Homebrew/development_tools.rb,
Library/Homebrew/extend/os/mac/development_tools.rb

Class Method Summary collapse

Class Method Details

.clang_build_versionObject



74
75
76
77
78
79
80
81
82
83
# File 'Library/Homebrew/development_tools.rb', line 74

def clang_build_version
  @clang_build_version ||= begin
    if (path = locate("clang")) &&
       build_version = `#{path} --version`[/clang-(\d{2,})/, 1]
      Version.new build_version
    else
      Version::NULL
    end
  end
end

.clang_versionObject



63
64
65
66
67
68
69
70
71
72
# File 'Library/Homebrew/development_tools.rb', line 63

def clang_version
  @clang_version ||= begin
    if (path = locate("clang")) &&
       build_version = `#{path} --version`[/(?:clang|LLVM) version (\d\.\d)/, 1]
      Version.new build_version
    else
      Version::NULL
    end
  end
end

.clear_version_cacheObject



111
112
113
114
115
# File 'Library/Homebrew/development_tools.rb', line 111

def clear_version_cache
  @gcc_4_0_build_version = @gcc_4_2_build_version = nil
  @clang_version = @clang_build_version = nil
  @non_apple_gcc_version = {}
end

.curl_handles_most_https_certificates?Boolean

Returns:

  • (Boolean)


117
118
119
# File 'Library/Homebrew/development_tools.rb', line 117

def curl_handles_most_https_certificates?
  true
end

.custom_installation_instructionsObject



25
26
27
# File 'Library/Homebrew/development_tools.rb', line 25

def installation_instructions
  "Install Clang or brew install gcc"
end

.default_ccObject



27
28
29
30
31
32
33
34
# File 'Library/Homebrew/development_tools.rb', line 27

def default_cc
  cc = DevelopmentTools.locate "cc"
  begin
    cc.realpath.basename.to_s
  rescue
    nil
  end
end

.default_compilerObject



36
37
38
# File 'Library/Homebrew/development_tools.rb', line 36

def default_compiler
  :clang
end

.gcc_4_0_build_versionObject



40
41
42
43
44
45
46
47
48
49
# File 'Library/Homebrew/development_tools.rb', line 40

def gcc_4_0_build_version
  @gcc_4_0_build_version ||= begin
    if (path = locate("gcc-4.0")) &&
       build_version = `#{path} --version 2>/dev/null`[/build (\d{4,})/, 1]
      Version.new build_version
    else
      Version::NULL
    end
  end
end

.gcc_4_2_build_versionObject



51
52
53
54
55
56
57
58
59
60
61
# File 'Library/Homebrew/development_tools.rb', line 51

def gcc_4_2_build_version
  @gcc_4_2_build_version ||= begin
    gcc = locate("gcc-4.2") || HOMEBREW_PREFIX/"opt/apple-gcc42/bin/gcc-4.2"
    if gcc.exist? && !gcc.realpath.basename.to_s.start_with?("llvm") &&
       build_version = `#{gcc} --version 2>/dev/null`[/build (\d{4,})/, 1]
      Version.new build_version
    else
      Version::NULL
    end
  end
end

.installation_instructionsObject



22
23
24
# File 'Library/Homebrew/development_tools.rb', line 22

def installation_instructions
  "Install Clang or brew install gcc"
end

.installed?Boolean

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.

Returns:

  • (Boolean)


21
22
23
# File 'Library/Homebrew/extend/os/mac/development_tools.rb', line 21

def installed?
  locate("clang") || locate("gcc")
end

.llvm_clang_build_versionObject



85
86
87
88
89
90
91
92
93
94
95
# File 'Library/Homebrew/development_tools.rb', line 85

def llvm_clang_build_version
  @llvm_clang_build_version ||= begin
    path = Formulary.factory("llvm").opt_prefix/"bin/clang"
    if path.executable? &&
       build_version = `#{path} --version`[/clang version (\d\.\d\.\d)/, 1]
      Version.new build_version
    else
      Version::NULL
    end
  end
end

.locate(tool) ⇒ Object



4
5
6
7
8
9
10
11
12
13
14
15
16
# File 'Library/Homebrew/development_tools.rb', line 4

def locate(tool)
  # Don't call tools (cc, make, strip, etc.) directly!
  # Give the name of the binary you look for as a string to this method
  # in order to get the full path back as a Pathname.
  (@locate ||= {}).fetch(tool) do |key|
    @locate[key] = if File.executable?(path = "/usr/bin/#{tool}")
      Pathname.new path
    # Homebrew GCCs most frequently; much faster to check this before xcrun
    elsif (path = HOMEBREW_PREFIX/"bin/#{tool}").executable?
      path
    end
  end
end

.non_apple_gcc_version(cc) ⇒ Object



97
98
99
100
101
102
103
104
105
106
107
108
109
# File 'Library/Homebrew/development_tools.rb', line 97

def non_apple_gcc_version(cc)
  (@non_apple_gcc_version ||= {}).fetch(cc) do
    path = HOMEBREW_PREFIX/"opt/gcc/bin"/cc
    path = locate(cc) unless path.exist?
    version = if path &&
                 build_version = `#{path} --version`[/gcc(?:-\d(?:\.\d)? \(.+\))? (\d\.\d\.\d)/, 1]
      Version.new build_version
    else
      Version::NULL
    end
    @non_apple_gcc_version[cc] = version
  end
end

.original_locateObject



6
7
8
9
10
11
12
13
14
15
16
17
18
# File 'Library/Homebrew/extend/os/mac/development_tools.rb', line 6

def locate(tool)
  # Don't call tools (cc, make, strip, etc.) directly!
  # Give the name of the binary you look for as a string to this method
  # in order to get the full path back as a Pathname.
  (@locate ||= {}).fetch(tool) do |key|
    @locate[key] = if File.executable?(path = "/usr/bin/#{tool}")
      Pathname.new path
    # Homebrew GCCs most frequently; much faster to check this before xcrun
    elsif (path = HOMEBREW_PREFIX/"bin/#{tool}").executable?
      path
    end
  end
end

.subversion_handles_most_https_certificates?Boolean

Returns:

  • (Boolean)


121
122
123
# File 'Library/Homebrew/development_tools.rb', line 121

def subversion_handles_most_https_certificates?
  true
end