Class Platform
In: lib/facets/supplemental/facets/platform.rb
Parent: Object

Platform class

Original version from RubyGems, Copyright (c) 2007 Eric Hodel

Methods

==   ===   =~   big_endian?   bsd?   byte_order   byteorder   cardinal?   enterprise?   host_os   inspect   interpreter   iron_ruby?   ironruby?   java?   jruby?   linux?   little_endian?   local   mac?   match   mri?   new   official_ruby?   parrot?   perl?   posix?   rbx?   ree?   rubinius?   ruby?   solaris?   supported   symbian?   to_a   to_s   windows?  

Constants

RUBY = 'ruby'   A pure-ruby gem that may use Gem::Specification#extensions to build binary files.
CURRENT = 'current'   A platform-specific gem that is built for the packaging ruby‘s platform. This will be replaced with Gem::Platform::local.

Attributes

cpu  [RW] 
os  [RW] 
version  [RW] 

Public Class methods

[Source]

# File lib/facets/supplemental/facets/platform.rb, line 58
  def self.local
    arch = Config::CONFIG['arch']
    arch = "#{arch}_60" if arch =~ /mswin32$/
    @local ||= new(arch)
  end

[Source]

# File lib/facets/supplemental/facets/platform.rb, line 65
  def self.match(platform)
    supported.any? do |local_platform|
      platform.nil? or local_platform == platform or
        (local_platform != Platform::RUBY and local_platform =~ platform)
    end
  end

[Source]

# File lib/facets/supplemental/facets/platform.rb, line 85
  def initialize(arch)
    case arch
    when Array then
      @cpu, @os, @version = arch
    when String then
      arch = arch.split '-'

      if arch.length > 2 and arch.last !~ /\d/ then # reassemble x86-linux-gnu
        extra = arch.pop
        arch.last << "-#{extra}"
      end

      cpu = arch.shift

      @cpu = case cpu
             when /i\d86/ then 'x86'
             else cpu
             end

      if arch.length == 2 and arch.last =~ /^\d+$/ then # for command-line
        @os, @version = arch
        return
      end

      os, = arch
      @cpu, os = nil, cpu if os.nil? # legacy jruby

      @os, @version = case os
        when /aix(\d+)/ then             [ 'aix',       $1  ]
        when /cygwin/ then               [ 'cygwin',    nil ]
        when /darwin(\d+)?/ then         [ 'darwin',    $1  ]
        when /freebsd(\d+)/ then         [ 'freebsd',   $1  ]
        when /hpux(\d+)/ then            [ 'hpux',      $1  ]
        when /^java$/, /^jruby$/ then    [ 'java',      nil ]
        when /^java([\d.]*)/ then        [ 'java',      $1  ]
        when /linux/ then                [ 'linux',     $1  ]
        when /mingw32/ then              [ 'mingw32',   nil ]
        when /(mswin\d+)(\_(\d+))?/ then
          os, version = $1, $3
          @cpu = 'x86' if @cpu.nil? and os =~ /32$/
          [os, version]
        when /netbsdelf/ then            [ 'netbsdelf', nil ]
        when /openbsd(\d+\.\d+)/ then    [ 'openbsd',   $1  ]
        when /solaris(\d+\.\d+)/ then    [ 'solaris',   $1  ]
        # test
        when /^(\w+_platform)(\d+)/ then [ $1,          $2  ]
        else                             [ 'unknown',   nil ]
      end
    when Platform then
      @cpu = arch.cpu
      @os = arch.os
      @version = arch.version
    else
      raise ArgumentError, "invalid argument #{arch.inspect}"
    end
  end

Array of supported platforms (ie. pure-Ruby and local platform).

[Source]

# File lib/facets/supplemental/facets/platform.rb, line 45
  def self.supported
    @suported ||= [Platform::RUBY, Platform.local]
  end

Public Instance methods

[Source]

# File lib/facets/supplemental/facets/platform.rb, line 158
  def ==(other)
    self.class === other and
      @cpu == other.cpu and @os == other.os and @version == other.version
  end

[Source]

# File lib/facets/supplemental/facets/platform.rb, line 164
  def ===(other)
    return nil unless Platform === other

    # cpu
    (@cpu == 'universal' or other.cpu == 'universal' or @cpu == other.cpu) and

    # os
    @os == other.os and

    # version
    (@version.nil? or other.version.nil? or @version == other.version)
  end

[Source]

# File lib/facets/supplemental/facets/platform.rb, line 178
  def =~(other)
    case other
    when Platform then # nop
    when String then
      # This data is from http://gems.rubyforge.org/gems/yaml on 19 Aug 2007
      other = case other
        when /^i686-darwin(\d)/ then     ['x86',       'darwin',  $1]
        when /^i\d86-linux/ then         ['x86',       'linux',   nil]
        when 'java', 'jruby' then        [nil,         'java',    nil]
        when /mswin32(\_(\d+))?/ then    ['x86',       'mswin32', $2]
        when 'powerpc-darwin' then       ['powerpc',   'darwin',  nil]
        when /powerpc-darwin(\d)/ then   ['powerpc',   'darwin',  $1]
        when /sparc-solaris2.8/ then     ['sparc',     'solaris', '2.8']
        when /universal-darwin(\d)/ then ['universal', 'darwin',  $1]
        else                             other
      end

      other = Platform.new other
    else
      return nil
    end

    self === other
  end

[Source]

# File lib/facets/supplemental/facets/platform.rb, line 229
  def big_endian?
    byte_order == :big
  end

[Source]

# File lib/facets/supplemental/facets/platform.rb, line 299
  def bsd?
    host_os =~ /bsd/
  end

Byte order of CPU. Determine byte order of underlying machine.

Examines the byte order of the underlying machine. Returns :big if Big Endian and :little if Little Endian.

TODO: This doesn‘t work well apearently. We need to use a chart for possible cpus instead, maybe.

[Source]

# File lib/facets/supplemental/facets/platform.rb, line 212
  def byte_order
    if [0x12345678].pack("L") == "\x12\x34\x56\x78"
      :big
    else
      :little
    end
  end
byteorder()

Alias for byte_order

[Source]

# File lib/facets/supplemental/facets/platform.rb, line 278
  def cardinal?
    'cardinal' === interpreter
  end
enterprise?()

Alias for ree?

O P E R A T I N G S Y S T E M

[Source]

# File lib/facets/supplemental/facets/platform.rb, line 287
  def host_os
    RbConfig::CONFIG['host_os']
  end

[Source]

# File lib/facets/supplemental/facets/platform.rb, line 143
  def inspect
    "#s:0x%x @cpu=%p, @os=%p, @version=%p>" % [self.class, object_id, *to_a]
  end

Return the name of the ruby interpreter.

[Source]

# File lib/facets/supplemental/facets/platform.rb, line 236
  def interpreter
    @interpreter ||= (
      if RUBY_PLATFORM == 'parrot'
        'cardinal'
      elsif RUBY_ENGINE == 'ruby'
        if RUBY_DESCRIPTION =~ /Enterprise/i
          'ree'
        else
          'mri'
        end
      else
        RUBY_ENGINE.to_s # jruby, rbx, ironruby, macruby, etc.
      end
    )
  end
iron_ruby?()

Alias for ironruby?

[Source]

# File lib/facets/supplemental/facets/platform.rb, line 273
  def ironruby?
    'ironruby' === interpreter
  end
java?()

Alias for jruby?

[Source]

# File lib/facets/supplemental/facets/platform.rb, line 258
  def jruby?
    'jruby' === interpreter
  end

[Source]

# File lib/facets/supplemental/facets/platform.rb, line 291
  def linux?
    host_os =~ /linux|cygwin/
  end

[Source]

# File lib/facets/supplemental/facets/platform.rb, line 224
  def little_endian?
    byte_order == :little
  end

[Source]

# File lib/facets/supplemental/facets/platform.rb, line 295
  def mac?
    host_os =~ /mac|darwin/
  end

[Source]

# File lib/facets/supplemental/facets/platform.rb, line 252
  def mri?
    'mri' === interpreter
  end
official_ruby?()

Alias for mri?

parrot?()

Alias for cardinal?

perl?()

Alias for cardinal?

[Source]

# File lib/facets/supplemental/facets/platform.rb, line 317
  def posix?
    linux? or mac? or bsd? or solaris? or begin 
      fork do end
      true
    rescue NotImplementedError, NoMethodError
      false
    end
  end
rbx?()

Alias for rubinius?

[Source]

# File lib/facets/supplemental/facets/platform.rb, line 268
  def ree?
    'ree' === interpreter
  end

[Source]

# File lib/facets/supplemental/facets/platform.rb, line 263
  def rubinius?
    'rbx' === interpreter
  end
ruby?()

Alias for mri?

[Source]

# File lib/facets/supplemental/facets/platform.rb, line 307
  def solaris?
    host_os =~ /solaris|sunos/
  end

TODO: who knows what symbian returns?

[Source]

# File lib/facets/supplemental/facets/platform.rb, line 312
  def symbian?
    host_os =~ /symbian/
  end

[Source]

# File lib/facets/supplemental/facets/platform.rb, line 148
  def to_a
    [@cpu, @os, @version]
  end

[Source]

# File lib/facets/supplemental/facets/platform.rb, line 153
  def to_s
    to_a.compact.join '-'
  end

[Source]

# File lib/facets/supplemental/facets/platform.rb, line 303
  def windows?
    host_os =~ /mswin|mingw/
  end

[Validate]