Sha256: 167fe24a324b29ad47e21794b80cb5498ce9788d36d72de850deb3e0351dd23d

Contents?: true

Size: 997 Bytes

Versions: 5

Compression:

Stored size: 997 Bytes

Contents

# frozen_string_literal: true

require 'rbconfig'

# Utility to load native binaries on Java CLASSPATH
# HACK until jruby returns a more specific 'host_os' than 'linux'
class NativeFolder
  attr_reader :os, :bit

  LINUX_FORMAT = 'linux%<bit>d'
  # ARM64 = '-aarch64'
  WIN_FORMAT = 'windows%<bit>d'
  WIN_PATTERNS = [
    /bccwin/i,
    /cygwin/i,
    /djgpp/i,
    /ming/i,
    /mswin/i,
    /wince/i
  ].freeze

  def initialize
    @os = RbConfig::CONFIG['host_os'].downcase
    @bit = /64/.match?(java.lang.System.get_property('os.arch')) ? 64 : 32
  end

  def name
    return 'macosx' if /darwin|mac/.match?(os)

    return format(LINUX_FORMAT, bit: bit) if /linux/.match?(os)

    unless WIN_PATTERNS.any? { |pat| pat.match?(os) }
      raise StandardError, 'Unsupported Architecture'
    end

    format(WIN_FORMAT, bit: bit)
  end

  def extension
    return '*.so' if /linux/.match?(os)

    return '*.dll' if WIN_PATTERNS.any? { |pat| pat.match?(os) }

    '*.dylib' # MacOS
  end
end

Version data entries

5 entries across 5 versions & 1 rubygems

Version Path
jruby_art-2.4.3 lib/jruby_art/native_folder.rb
jruby_art-2.4.2 lib/jruby_art/native_folder.rb
jruby_art-2.4.1 lib/jruby_art/native_folder.rb
jruby_art-2.4.0 lib/jruby_art/native_folder.rb
jruby_art-2.3.0 lib/jruby_art/native_folder.rb