blob: 00c43ecaead6ca357e93b2e2e364b3fc93dd4242 (
plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
|
#
# This file is part of ruby-ffi.
# For licensing, see LICENSE.SPECS
#
require 'rbconfig'
require 'fileutils'
require 'ffi'
CPU = case RbConfig::CONFIG['host_cpu'].downcase
when /i[3456]86/
# Darwin always reports i686, even when running in 64bit mode
if RbConfig::CONFIG['host_os'] =~ /darwin/ && 0xfee1deadbeef.is_a?(Fixnum)
"x86_64"
else
"i386"
end
when /amd64|x86_64/
"x86_64"
when /ppc64|powerpc64/
"powerpc64"
when /ppc|powerpc/
"powerpc"
when /^arm/
"arm"
else
RbConfig::CONFIG['host_cpu']
end
OS = case RbConfig::CONFIG['host_os'].downcase
when /linux/
"linux"
when /darwin/
"darwin"
when /freebsd/
"freebsd"
when /openbsd/
"openbsd"
when /sunos|solaris/
"solaris"
when /mswin|mingw/
"win32"
else
RbConfig::CONFIG['host_os'].downcase
end
def compile_library(path, lib)
dir = File.expand_path(path, File.dirname(__FILE__))
lib = "#{dir}/#{lib}"
if !File.exists?(lib)
ldshared = RbConfig::CONFIG["LDSHARED"] || "clang -dynamic -bundle"
libs = RbConfig::CONFIG["LIBS"]
dldflags = RbConfig::CONFIG["DLDFLAGS"] || "-Wl,-undefined,dynamic_lookup -Wl,-multiply_defined,suppress"
puts Dir.pwd, dir, File.dirname(__FILE__)
output = nil
FileUtils.cd(dir) do
output = system(*%{#{system('which gmake >/dev/null') && 'gmake' || 'make'} CPU=#{CPU} OS=#{OS} }.tap{|x| puts x.inspect})
end
if $?.exitstatus != 0
puts "ERROR:\n#{output}"
raise "Unable to compile \"#{lib}\""
end
end
lib
end
require "ffi"
module TestLibrary
PATH = compile_library("fixtures", "libtest.#{FFI::Platform::LIBSUFFIX}")
def self.force_gc
if RUBY_PLATFORM =~ /java/
java.lang.System.gc
elsif defined?(RUBY_ENGINE) && RUBY_ENGINE == 'rbx'
GC.run(true)
else
GC.start
end
end
end
module LibTest
extend FFI::Library
ffi_lib TestLibrary::PATH
end
|