Module: FFI::Platform

Defined in:
lib/ffi/platform.rb,
ext/ffi_c/Platform.c

Overview

This module defines different constants and class methods to play with various platforms.

Constant Summary collapse

OS =
case RbConfig::CONFIG['host_os'].downcase
when /linux/
  "linux"
when /darwin/
  "darwin"
when /freebsd/
  "freebsd"
when /netbsd/
  "netbsd"
when /openbsd/
  "openbsd"
when /sunos|solaris/
  "solaris"
when /mingw|mswin/
  "windows"
else
  RbConfig::CONFIG['host_os'].downcase
end
OSVERSION =
RbConfig::CONFIG['host_os'].gsub(/[^\d]/, '').to_i
CPU =
RbConfig::CONFIG['host_cpu']
ARCH =
case CPU.downcase
when /amd64|x86_64/
  "x86_64"
when /i?86|x86|i86pc/
  "i386"
when /ppc64|powerpc64/
  "powerpc64"
when /ppc|powerpc/
  "powerpc"
when /sparcv9|sparc64/
  "sparcv9"
else
  case RbConfig::CONFIG['host_cpu']
  when /^arm/
    "arm"
  else
    RbConfig::CONFIG['host_cpu']
  end
end
IS_GNU =
defined?(GNU_LIBC)
IS_LINUX =
is_os("linux")
IS_MAC =
is_os("darwin")
IS_FREEBSD =
is_os("freebsd")
IS_NETBSD =
is_os("netbsd")
IS_OPENBSD =
is_os("openbsd")
IS_SOLARIS =
is_os("solaris")
IS_WINDOWS =
is_os("windows")
IS_BSD =
IS_MAC || IS_FREEBSD || IS_NETBSD || IS_OPENBSD
NAME =

64-bit inodes

"#{ARCH}-#{OS}#{name_version}"
CONF_DIR =
File.join(File.dirname(__FILE__), 'platform', NAME)
LIBPREFIX =
case OS
when /windows|msys/
  ''
when /cygwin/
  'cyg'
else
  'lib'
end
LIBSUFFIX =
case OS
when /darwin/
  'dylib'
when /linux|bsd|solaris/
  'so'
when /windows|cygwin|msys/
  'dll'
else
  # Punt and just assume a sane unix (i.e. anything but AIX)
  'so'
end
LIBC =
if IS_WINDOWS
  RbConfig::CONFIG['RUBY_SO_NAME'].split('-')[-2] + '.dll'
elsif IS_GNU
  GNU_LIBC
elsif OS == 'cygwin'
  "cygwin1.dll"
elsif OS == 'msys'
  # Not sure how msys 1.0 behaves, tested on MSYS2.
  "msys-2.0.dll"
else
  "#{LIBPREFIX}c.#{LIBSUFFIX}"
end
BYTE_ORDER =
INT2FIX(BYTE_ORDER)
LITTLE_ENDIAN =
INT2FIX(LITTLE_ENDIAN)
BIG_ENDIAN =
INT2FIX(BIG_ENDIAN)
GNU_LIBC =
rb_str_new2(LIBC_SO)

Class Method Summary collapse

Class Method Details

.bsd?Boolean

Test if current OS is a *BSD (include MAC)


143
144
145
# File 'lib/ffi/platform.rb', line 143

def self.bsd?
  IS_BSD
end

.is_os(os) ⇒ Boolean (private)

Test if current OS is os.


85
86
87
# File 'lib/ffi/platform.rb', line 85

def self.is_os(os)
  OS == os
end

.mac?Boolean

Test if current OS is Mac OS


155
156
157
# File 'lib/ffi/platform.rb', line 155

def self.mac?
  IS_MAC
end

.solaris?Boolean

Test if current OS is Solaris (Sun OS)


161
162
163
# File 'lib/ffi/platform.rb', line 161

def self.solaris?
  IS_SOLARIS
end

.unix?Boolean

Test if current OS is a unix OS


167
168
169
# File 'lib/ffi/platform.rb', line 167

def self.unix?
  !IS_WINDOWS
end

.windows?Boolean

Test if current OS is Windows


149
150
151
# File 'lib/ffi/platform.rb', line 149

def self.windows?
  IS_WINDOWS
end