class OS
a set of friendly files for determining your Ruby runtime treats cygwin as linux also treats IronRuby on mono as…linux
Attributes
config[R]
Public Class Methods
app_config_path(name)
click to toggle source
# File lib/os.rb, line 267 def self.app_config_path(name) if OS.doze? if ENV['LOCALAPPDATA'] return File.join(ENV['LOCALAPPDATA'], name) end File.join ENV['USERPROFILE'], 'Local Settings', 'Application Data', name elsif OS.mac? File.join ENV['HOME'], 'Library', 'Application Support', name else if ENV['XDG_CONFIG_HOME'] return File.join(ENV['XDG_CONFIG_HOME'], name) end File.join ENV['HOME'], '.config', name end end
bits()
click to toggle source
# File lib/os.rb, line 80 def self.bits @bits ||= begin if host_cpu =~ /_64$/ || RUBY_PLATFORM =~ /x86_64/ 64 elsif RUBY_PLATFORM == 'java' && ENV_JAVA['sun.arch.data.model'] # "32" or "64":http://www.ruby-forum.com/topic/202173#880613 ENV_JAVA['sun.arch.data.model'].to_i elsif host_cpu == 'i386' 32 elsif host_os =~ /32$/ # mingw32, mswin32 32 else # cygwin only...I think if 1.size == 8 64 else 32 end end end end
config()
click to toggle source
# File lib/os.rb, line 10 def self.config @config ||= RbConfig::CONFIG end
cpu_count()
click to toggle source
# File lib/os.rb, line 228 def self.cpu_count @cpu_count ||= case RUBY_PLATFORM when /darwin9/ `hwprefs cpu_count`.to_i when /darwin10/ (hwprefs_available? ? `hwprefs thread_count` : `sysctl -n hw.ncpu`).to_i when /linux/ `cat /proc/cpuinfo | grep processor | wc -l`.to_i when /freebsd/ `sysctl -n hw.ncpu`.to_i else if RbConfig::CONFIG['host_os'] =~ /darwin/ (hwprefs_available? ? `hwprefs thread_count` : `sysctl -n hw.ncpu`).to_i elsif self.windows? # ENV counts hyper threaded...not good. # out = ENV['NUMBER_OF_PROCESSORS'].to_i require 'win32ole' wmi = WIN32OLE.connect("winmgmts://") cpu = wmi.ExecQuery("select NumberOfCores from Win32_Processor") # don't count hyper-threaded in this cpu.to_enum.first.NumberOfCores else raise 'unknown platform processor_count' end end end
cygwin?()
click to toggle source
# File lib/os.rb, line 192 def self.cygwin? @cygwin = begin if RUBY_PLATFORM =~ /-cygwin/ true else false end end end
dev_null()
click to toggle source
# File lib/os.rb, line 202 def self.dev_null # File::NULL in 1.9.3+ @dev_null ||= begin if OS.windows? "NUL" else "/dev/null" end end end
freebsd?()
click to toggle source
# File lib/os.rb, line 62 def self.freebsd? if (host_os =~ /freebsd/) true else false end end
iron_ruby?()
click to toggle source
# File lib/os.rb, line 70 def self.iron_ruby? @iron_ruby ||= begin if defined?(RUBY_ENGINE) && (RUBY_ENGINE == 'ironruby') true else false end end end
java?()
click to toggle source
# File lib/os.rb, line 101 def self.java? @java ||= begin if RUBY_PLATFORM =~ /java/ true else false end end end
Also aliased as: jruby?
linux?()
click to toggle source
true for linux, false for windows, os x, cygwin
# File lib/os.rb, line 54 def self.linux? if (host_os =~ /linux/) true else false end end
mac?()
click to toggle source
# File lib/os.rb, line 117 def self.mac? @mac = begin if host_os =~ /darwin/ true else false end end end
open_file_command()
click to toggle source
# File lib/os.rb, line 255 def self.open_file_command if OS.doze? || OS.cygwin? "start" elsif OS.mac? "open" else # linux...what about cygwin? "xdg-open" end end
osx?()
click to toggle source
# File lib/os.rb, line 127 def self.osx? mac? end
parse_os_release()
click to toggle source
# File lib/os.rb, line 285 def self.parse_os_release if OS.linux? && File.exist?('/etc/os-release') output = {} File.read('/etc/os-release').each_line do |line| parsed_line = line.chomp.tr('"', '').split('=') next if parsed_line.empty? output[parsed_line[0].to_sym] = parsed_line[1] end output else raise "File /etc/os-release doesn't exists or not Linux" end end
posix?()
click to toggle source
true for linux, os x, cygwin
# File lib/os.rb, line 31 def self.posix? @posix ||= begin if OS.windows? begin begin # what if we're on interix... # untested, of course Process.wait fork{} true rescue NotImplementedError, NoMethodError false end end else # assume non windows is posix true end end end
report()
click to toggle source
provides easy way to see the relevant config entries
# File lib/os.rb, line 213 def self.report relevant_keys = [ 'arch', 'host', 'host_cpu', 'host_os', 'host_vendor', 'target', 'target_cpu', 'target_os', 'target_vendor', ] RbConfig::CONFIG.reject {|key, val| !relevant_keys.include? key }.merge({'RUBY_PLATFORM' => RUBY_PLATFORM}).to_yaml end
rss_bytes()
click to toggle source
amount of memory the current process “is using”, in RAM (doesn't include any swap memory that it may be using, just that in actual RAM) raises 'unknown' on jruby currently
# File lib/os.rb, line 139 def self.rss_bytes # attempt to do this in a jruby friendly way if OS::Underlying.windows? # MRI, Java, IronRuby, Cygwin if OS.java? # no win32ole on 1.5.x, so leave here for compatibility...maybe for awhile :P require 'java' mem_bean = java.lang.management.ManagementFactory.getMemoryMXBean mem_bean.heap_memory_usage.used + mem_bean.non_heap_memory_usage.used else wmi = nil begin require 'win32ole' wmi = WIN32OLE.connect("winmgmts://") rescue LoadError, NoMethodError => e # NoMethod for IronRuby currently [sigh] raise 'rss unknown for this platform ' + e.to_s end processes = wmi.ExecQuery("select * from win32_process where ProcessId = #{Process.pid}") memory_used = nil # only allow for one process... for process in processes raise "multiple processes same pid?" if memory_used memory_used = process.WorkingSetSize.to_i end memory_used end elsif OS.posix? # linux [though I've heard it works in OS X] `ps -o rss= -p #{Process.pid}`.to_i * 1024 # in kiloBytes else raise 'unknown rss for this platform' end end
ruby_bin()
click to toggle source
# File lib/os.rb, line 111 def self.ruby_bin @ruby_exe ||= begin File::join(config['bindir'], config['ruby_install_name']) + config['EXEEXT'] end end
windows?()
click to toggle source
true if on windows [and/or jruby] false if on linux or cygwin on windows
# File lib/os.rb, line 17 def self.windows? @windows ||= begin if RUBY_PLATFORM =~ /cygwin/ # i386-cygwin false elsif ENV['OS'] == 'Windows_NT' true else false end end end
Also aliased as: doze?
x?()
click to toggle source
# File lib/os.rb, line 131 def self.x? mac? end
Private Class Methods
hwprefs_available?()
click to toggle source
# File lib/os.rb, line 313 def self.hwprefs_available? `which hwprefs` != '' end