Class: SystemConfig

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

Class Method Summary collapse

Class Method Details

.clangObject



25
26
27
28
29
30
31
# File 'Library/Homebrew/system_config.rb', line 25

def clang
  @clang ||= if DevelopmentTools.installed?
    DevelopmentTools.clang_version
  else
    Version::NULL
  end
end

.clang_buildObject



33
34
35
36
37
38
39
# File 'Library/Homebrew/system_config.rb', line 33

def clang_build
  @clang_build ||= if DevelopmentTools.installed?
    DevelopmentTools.clang_build_version
  else
    Version::NULL
  end
end

.cltObject



13
14
15
16
17
18
19
# File 'Library/Homebrew/extend/os/mac/system_config.rb', line 13

def clt
  if instance_variable_defined?(:@clt)
    @clt
  elsif MacOS::CLT.installed? && MacOS::Xcode.version >= "4.3"
    @clt = MacOS::CLT.version
  end
end

.core_tap_headObject



53
54
55
# File 'Library/Homebrew/system_config.rb', line 53

def core_tap_head
  CoreTap.instance.git_head || "(none)"
end

.core_tap_last_commitObject



57
58
59
# File 'Library/Homebrew/system_config.rb', line 57

def core_tap_last_commit
  CoreTap.instance.git_last_commit || "never"
end

.core_tap_originObject



61
62
63
# File 'Library/Homebrew/system_config.rb', line 61

def core_tap_origin
  CoreTap.instance.remote || "(none)"
end

.describe_curlObject



151
152
153
154
155
156
157
158
# File 'Library/Homebrew/system_config.rb', line 151

def describe_curl
  curl_version_output = Utils.popen_read("#{curl_executable} --version", err: :close)
  curl_version_output =~ /^curl ([\d\.]+)/
  curl_version = Regexp.last_match(1)
  "#{curl_version} => #{curl_executable}"
rescue
  "N/A"
end

.describe_gitObject



146
147
148
149
# File 'Library/Homebrew/system_config.rb', line 146

def describe_git
  return "N/A" unless Utils.git_available?
  "#{Utils.git_version} => #{Utils.git_path}"
end

.describe_homebrew_rubyObject



120
121
122
# File 'Library/Homebrew/system_config.rb', line 120

def describe_homebrew_ruby
  "#{describe_homebrew_ruby_version} => #{RUBY_PATH}"
end

.describe_homebrew_ruby_versionObject



111
112
113
114
115
116
117
118
# File 'Library/Homebrew/system_config.rb', line 111

def describe_homebrew_ruby_version
  case RUBY_VERSION
  when /^1\.[89]/, /^2\.0/
    "#{RUBY_VERSION}-p#{RUBY_PATCHLEVEL}"
  else
    RUBY_VERSION
  end
end

.describe_javaObject



133
134
135
136
137
138
139
140
141
142
143
144
# File 'Library/Homebrew/system_config.rb', line 133

def describe_java
  # java_home doesn't exist on all macOSs; it might be missing on older versions.
  return "N/A" unless File.executable? "/usr/libexec/java_home"

  java_xml = Utils.popen_read("/usr/libexec/java_home", "--xml", "--failfast", err: :close)
  return "N/A" unless $CHILD_STATUS.success?
  javas = []
  REXML::XPath.each(REXML::Document.new(java_xml), "//key[text()='JVMVersion']/following-sibling::string") do |item|
    javas << item.text
  end
  javas.uniq.join(", ")
end

.describe_path(path) ⇒ Object



65
66
67
68
69
70
71
72
73
# File 'Library/Homebrew/system_config.rb', line 65

def describe_path(path)
  return "N/A" if path.nil?
  realpath = path.realpath
  if realpath == path
    path
  else
    "#{path} => #{realpath}"
  end
end

.describe_perlObject



75
76
77
# File 'Library/Homebrew/system_config.rb', line 75

def describe_perl
  describe_path(which("perl", ENV["HOMEBREW_PATH"]))
end

.describe_pythonObject



79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
# File 'Library/Homebrew/system_config.rb', line 79

def describe_python
  python = begin
    python_path = PATH.new(ENV["HOMEBREW_PATH"])
                      .prepend(Formula["python"].opt_libexec/"bin")
    which "python", python_path
  rescue FormulaUnavailableError
    which "python"
  end

  return "N/A" if python.nil?
  python_binary = Utils.popen_read python, "-c", "import sys; sys.stdout.write(sys.executable)"
  python_binary = Pathname.new(python_binary).realpath
  if python == python_binary
    python
  else
    "#{python} => #{python_binary}"
  end
end

.describe_rubyObject



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

def describe_ruby
  ruby = which "ruby", ENV["HOMEBREW_PATH"]
  return "N/A" if ruby.nil?
  ruby_binary = Utils.popen_read ruby, "-rrbconfig", "-e", \
    'include RbConfig;print"#{CONFIG["bindir"]}/#{CONFIG["ruby_install_name"]}#{CONFIG["EXEEXT"]}"'
  ruby_binary = Pathname.new(ruby_binary).realpath
  if ruby == ruby_binary
    ruby
  else
    "#{ruby} => #{ruby_binary}"
  end
end

.describe_xquartzObject



26
27
28
29
# File 'Library/Homebrew/extend/os/mac/system_config.rb', line 26

def describe_xquartz
  return "N/A" unless MacOS::XQuartz.installed?
  "#{MacOS::XQuartz.version} => #{describe_path(MacOS::XQuartz.prefix)}"
end

.dump_generic_verbose_configObject



226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
# File 'Library/Homebrew/system_config.rb', line 226

def dump_verbose_config(f = $stdout)
  f.puts "HOMEBREW_VERSION: #{HOMEBREW_VERSION}"
  f.puts "ORIGIN: #{origin}"
  f.puts "HEAD: #{head}"
  f.puts "Last commit: #{last_commit}"
  if CoreTap.instance.installed?
    f.puts "Core tap ORIGIN: #{core_tap_origin}"
    f.puts "Core tap HEAD: #{core_tap_head}"
    f.puts "Core tap last commit: #{core_tap_last_commit}"
  else
    f.puts "Core tap: N/A"
  end
  defaults_hash = {
    HOMEBREW_PREFIX: "/usr/local",
    HOMEBREW_REPOSITORY: "/usr/local/Homebrew",
    HOMEBREW_CELLAR: "/usr/local/Cellar",
    HOMEBREW_CACHE: "#{ENV["HOME"]}/Library/Caches/Homebrew",
  }.freeze
  boring_keys = %w[
    HOMEBREW_BROWSER
    HOMEBREW_EDITOR

    HOMEBREW_ANALYTICS_ID
    HOMEBREW_ANALYTICS_USER_UUID
    HOMEBREW_AUTO_UPDATE_CHECKED
    HOMEBREW_BREW_FILE
    HOMEBREW_COMMAND_DEPTH
    HOMEBREW_CURL
    HOMEBREW_LIBRARY
    HOMEBREW_MACOS_VERSION
    HOMEBREW_RUBY_PATH
    HOMEBREW_SYSTEM
    HOMEBREW_OS_VERSION
    HOMEBREW_PATH
    HOMEBREW_PROCESSOR
    HOMEBREW_PRODUCT
    HOMEBREW_USER_AGENT
    HOMEBREW_USER_AGENT_CURL
    HOMEBREW_VERSION
  ].freeze
  f.puts "HOMEBREW_PREFIX: #{HOMEBREW_PREFIX}"
  if defaults_hash[:HOMEBREW_REPOSITORY] != HOMEBREW_REPOSITORY.to_s
    f.puts "HOMEBREW_REPOSITORY: #{HOMEBREW_REPOSITORY}"
  end
  if defaults_hash[:HOMEBREW_CELLAR] != HOMEBREW_CELLAR.to_s
    f.puts "HOMEBREW_CELLAR: #{HOMEBREW_CELLAR}"
  end
  ENV.sort.each do |key, value|
    next unless key.start_with?("HOMEBREW_")
    next if boring_keys.include?(key)
    next if defaults_hash[key.to_sym] == value
    value = "set" if key =~ /(cookie|key|token|password)/i
    f.puts "#{key}: #{value}"
  end
  f.puts hardware if hardware
  f.puts "Homebrew Ruby: #{describe_homebrew_ruby}"
  f.puts "GCC-4.0: build #{gcc_4_0}" unless gcc_4_0.null?
  f.puts "GCC-4.2: build #{gcc_4_2}" unless gcc_4_2.null?
  f.puts "Clang: #{clang.null? ? "N/A" : "#{clang} build #{clang_build}"}"
  f.puts "Git: #{describe_git}"
  f.puts "Curl: #{describe_curl}"
  f.puts "Perl: #{describe_perl}"
  f.puts "Python: #{describe_python}"
  f.puts "Ruby: #{describe_ruby}"
  f.puts "Java: #{describe_java}"
end

.dump_verbose_config(out = $stdout) ⇒ Object



160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
# File 'Library/Homebrew/system_config.rb', line 160

def dump_verbose_config(f = $stdout)
  f.puts "HOMEBREW_VERSION: #{HOMEBREW_VERSION}"
  f.puts "ORIGIN: #{origin}"
  f.puts "HEAD: #{head}"
  f.puts "Last commit: #{last_commit}"
  if CoreTap.instance.installed?
    f.puts "Core tap ORIGIN: #{core_tap_origin}"
    f.puts "Core tap HEAD: #{core_tap_head}"
    f.puts "Core tap last commit: #{core_tap_last_commit}"
  else
    f.puts "Core tap: N/A"
  end
  defaults_hash = {
    HOMEBREW_PREFIX: "/usr/local",
    HOMEBREW_REPOSITORY: "/usr/local/Homebrew",
    HOMEBREW_CELLAR: "/usr/local/Cellar",
    HOMEBREW_CACHE: "#{ENV["HOME"]}/Library/Caches/Homebrew",
  }.freeze
  boring_keys = %w[
    HOMEBREW_BROWSER
    HOMEBREW_EDITOR

    HOMEBREW_ANALYTICS_ID
    HOMEBREW_ANALYTICS_USER_UUID
    HOMEBREW_AUTO_UPDATE_CHECKED
    HOMEBREW_BREW_FILE
    HOMEBREW_COMMAND_DEPTH
    HOMEBREW_CURL
    HOMEBREW_LIBRARY
    HOMEBREW_MACOS_VERSION
    HOMEBREW_RUBY_PATH
    HOMEBREW_SYSTEM
    HOMEBREW_OS_VERSION
    HOMEBREW_PATH
    HOMEBREW_PROCESSOR
    HOMEBREW_PRODUCT
    HOMEBREW_USER_AGENT
    HOMEBREW_USER_AGENT_CURL
    HOMEBREW_VERSION
  ].freeze
  f.puts "HOMEBREW_PREFIX: #{HOMEBREW_PREFIX}"
  if defaults_hash[:HOMEBREW_REPOSITORY] != HOMEBREW_REPOSITORY.to_s
    f.puts "HOMEBREW_REPOSITORY: #{HOMEBREW_REPOSITORY}"
  end
  if defaults_hash[:HOMEBREW_CELLAR] != HOMEBREW_CELLAR.to_s
    f.puts "HOMEBREW_CELLAR: #{HOMEBREW_CELLAR}"
  end
  ENV.sort.each do |key, value|
    next unless key.start_with?("HOMEBREW_")
    next if boring_keys.include?(key)
    next if defaults_hash[key.to_sym] == value
    value = "set" if key =~ /(cookie|key|token|password)/i
    f.puts "#{key}: #{value}"
  end
  f.puts hardware if hardware
  f.puts "Homebrew Ruby: #{describe_homebrew_ruby}"
  f.puts "GCC-4.0: build #{gcc_4_0}" unless gcc_4_0.null?
  f.puts "GCC-4.2: build #{gcc_4_2}" unless gcc_4_2.null?
  f.puts "Clang: #{clang.null? ? "N/A" : "#{clang} build #{clang_build}"}"
  f.puts "Git: #{describe_git}"
  f.puts "Curl: #{describe_curl}"
  f.puts "Perl: #{describe_perl}"
  f.puts "Python: #{describe_python}"
  f.puts "Ruby: #{describe_ruby}"
  f.puts "Java: #{describe_java}"
end

.formula_version(formula) ⇒ Object



23
24
25
26
27
28
29
30
# File 'Library/Homebrew/extend/os/linux/system_config.rb', line 23

def formula_version(formula)
  return "N/A" unless CoreTap.instance.installed?
  f = Formulary.factory formula
  return "N/A" unless f.installed?
  f.version
rescue FormulaUnavailableError
  return "N/A"
end

.gcc_4_0Object



17
18
19
20
21
22
23
# File 'Library/Homebrew/system_config.rb', line 17

def gcc_4_0
  @gcc_4_0 ||= if DevelopmentTools.installed?
    DevelopmentTools.gcc_4_0_build_version
  else
    Version::NULL
  end
end

.gcc_4_2Object



9
10
11
12
13
14
15
# File 'Library/Homebrew/system_config.rb', line 9

def gcc_4_2
  @gcc_4_2 ||= if DevelopmentTools.installed?
    DevelopmentTools.gcc_4_2_build_version
  else
    Version::NULL
  end
end

.hardwareObject



124
125
126
127
# File 'Library/Homebrew/system_config.rb', line 124

def hardware
  return if Hardware::CPU.type == :dunno
  "CPU: #{Hardware.cores_as_words}-core #{Hardware::CPU.bits}-bit #{Hardware::CPU.family}"
end

.headObject



41
42
43
# File 'Library/Homebrew/system_config.rb', line 41

def head
  HOMEBREW_REPOSITORY.git_head || "(none)"
end

.host_gcc_versionObject



17
18
19
20
21
# File 'Library/Homebrew/extend/os/linux/system_config.rb', line 17

def host_gcc_version
  gcc = Pathname.new "/usr/bin/gcc"
  return "N/A" unless gcc.executable?
  `#{gcc} --version 2>/dev/null`[/ (\d+\.\d+\.\d+)/, 1]
end

.host_os_versionObject



5
6
7
8
9
10
11
12
13
14
15
# File 'Library/Homebrew/extend/os/linux/system_config.rb', line 5

def host_os_version
  if which("lsb_release")
    description = `lsb_release -d`.chomp.sub("Description:\t", "")
    codename = `lsb_release -c`.chomp.sub("Codename:\t", "")
    "#{description} (#{codename})"
  elsif (redhat_release = Pathname.new("/etc/redhat-release")).readable?
    redhat_release.read.chomp
  else
    "N/A"
  end
end

.kernelObject



129
130
131
# File 'Library/Homebrew/system_config.rb', line 129

def kernel
  `uname -m`.chomp
end

.last_commitObject



45
46
47
# File 'Library/Homebrew/system_config.rb', line 45

def last_commit
  HOMEBREW_REPOSITORY.git_last_commit || "never"
end

.macports_or_finkObject



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

def macports_or_fink
  @ponk ||= MacOS.macports_or_fink
  @ponk.join(", ") unless @ponk.empty?
end

.originObject



49
50
51
# File 'Library/Homebrew/system_config.rb', line 49

def origin
  HOMEBREW_REPOSITORY.git_origin || "(none)"
end

.xcodeObject



3
4
5
6
7
8
9
10
11
# File 'Library/Homebrew/extend/os/mac/system_config.rb', line 3

def xcode
  if instance_variable_defined?(:@xcode)
    @xcode
  elsif MacOS::Xcode.installed?
    @xcode = MacOS::Xcode.version.to_s
    @xcode += " => #{MacOS::Xcode.prefix}" unless MacOS::Xcode.default_prefix?
    @xcode
  end
end