r_bridge 0.5.4 → 0.5.6
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/ext/r_bridge/extconf.rb +69 -35
- data/lib/r_bridge/r_bridge_ffi.rb +2 -0
- data/lib/r_bridge/r_bridge_lazyfunc_ext.rb +16 -0
- data/lib/r_bridge/version.rb +1 -1
- data/lib/r_bridge.rb +16 -0
- metadata +6 -6
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 07cb9536295a7d3c189e375f4a7024c0fc0fa7d76a63372bebeb9fec0248f021
|
4
|
+
data.tar.gz: a8b7fd323bbfe50c80b06e383a18f4651f4bfd3abe4ac7ce3790996b0d3e93fc
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 64b37858d049eaefef2fd8d73abff0f300595f03d978253bcda6a830d2313de9a0886cb2536f7b50ff74dc897809194d600eae91b1ea14f4bc857030afd4e0fb
|
7
|
+
data.tar.gz: 18baf0868ced6db926a61c9e1fe7f8869a1fe87bb0097dda5ddb897369ebc25ff63a51533befb75bc11c4d3b10207f834bb979d001ad5b34f19cf7b567a1102e
|
data/ext/r_bridge/extconf.rb
CHANGED
@@ -6,53 +6,69 @@ if FFI::Platform::OS == "windows"
|
|
6
6
|
$CFLAGS << " " << "-D_WIN" << " "
|
7
7
|
end
|
8
8
|
|
9
|
-
|
10
|
-
class RHeaderNotFound < RuntimeError
|
11
|
-
end
|
12
|
-
class RLibraryNotFound < RuntimeError
|
9
|
+
class RHeaderLibraryNotFound < RuntimeError
|
13
10
|
end
|
14
11
|
|
15
|
-
def
|
12
|
+
def check_set_system_R_header_and_lib( )
|
16
13
|
msg_devel_header = "For UNIX package users, please install R development tools via package (which name should look like r-base-dev or R-devel)."
|
17
14
|
msg_devel_lib = "For UNIX package users, please install R development tools via package (which name should look like r-base-dev or R-devel). If this is a custom build of R, please make sure that It was built with the --enable-R-shlib option. "
|
18
15
|
|
19
16
|
if have_header('R.h')
|
20
|
-
p "header ok"
|
17
|
+
p "header ok (system)"
|
21
18
|
if have_library('R', 'R_tryEval') || have_library('libR', 'R_tryEval')
|
22
|
-
p "library ok"
|
19
|
+
p "library ok (system)"
|
23
20
|
return true
|
24
21
|
else
|
25
|
-
|
22
|
+
p "Dynamic (i.e. shared) library of R is not found (R.dll for Windows, libR.so for UNIX)." + msg_devel_lib
|
26
23
|
end
|
27
24
|
else
|
28
|
-
|
25
|
+
p "Header for R is not found." + msg_devel_header
|
29
26
|
end
|
27
|
+
return false
|
30
28
|
end
|
31
29
|
|
32
|
-
|
33
|
-
|
34
|
-
|
35
|
-
dir_config("R")
|
30
|
+
def check_set_pkg_config_R_header_and_lib( )
|
31
|
+
msg_pkg_config = "To let pkg-config locate libR.pc file, include its existing directory path in R PKG_CONFIG_PATH"
|
36
32
|
|
37
|
-
|
38
|
-
if check_R_header_and_lib()
|
39
|
-
# Makefile that will build and install extension to lib/r_bridge/librbridge.so
|
40
|
-
create_makefile "r_bridge/librbridge"
|
41
|
-
end
|
42
|
-
rescue RHeaderNotFound, RLibraryNotFound => e
|
43
|
-
if find_executable('pkg-config') && (pkg_config_tried == false)
|
33
|
+
if find_executable('pkg-config')
|
44
34
|
add_cflags = pkg_config("libR", "cflags")
|
45
35
|
add_ldflags = pkg_config("libR", "libs")
|
46
|
-
if ( ! add_cflags.nil? )
|
36
|
+
if ( ! add_cflags.nil? )
|
37
|
+
p "header ok (pkg-config)"
|
47
38
|
$CFLAGS << " " << add_cflags
|
48
|
-
|
39
|
+
if (! add_ldflags.nil?)
|
40
|
+
p "library ok (pkg-config)"
|
41
|
+
$LDFLAGS <<" " << add_ldflags
|
42
|
+
return true
|
43
|
+
else
|
44
|
+
p "Dynamic (i.e. shared) library of R is not found (R.dll for Windows, libR.so for UNIX)." + msg_pkg_config
|
45
|
+
end
|
46
|
+
else
|
47
|
+
p "Header for R is not found." + msg_pkg_config
|
48
|
+
end
|
49
|
+
else
|
50
|
+
p "pkg-config command is not available."
|
51
|
+
end
|
52
|
+
return false
|
53
|
+
end
|
54
|
+
|
55
|
+
def check_Rscript_executable
|
56
|
+
if find_executable('Rscript')
|
57
|
+
return true
|
58
|
+
else
|
59
|
+
p "R program is not found. Please check your PATH setting if you already have R on your machine."
|
60
|
+
end
|
61
|
+
return false
|
62
|
+
end
|
63
|
+
|
64
|
+
def check_set_R_home_header_and_lib
|
65
|
+
msg_rscript = "Cannot be detected by R home."
|
66
|
+
|
67
|
+
if check_Rscript_executable
|
68
|
+
r_home_path = `Rscript -e "cat(R.home()[1])"`.chomp
|
69
|
+
else
|
70
|
+
return false
|
49
71
|
end
|
50
|
-
pkg_config_tried = true
|
51
|
-
retry
|
52
|
-
elsif ! find_executable('R')
|
53
|
-
raise "R program is not found. Please check your PATH setting if you already have R on your machine."
|
54
|
-
elsif find_executable('R') && find_executable('Rscript') && (r_config_tried == false)
|
55
|
-
r_home_path = `Rscript -e "cat(R.home()[1])"`.chomp
|
56
72
|
|
57
73
|
if ! r_home_path.empty?()
|
58
74
|
case FFI::Platform::ARCH
|
@@ -65,14 +81,32 @@ rescue RHeaderNotFound, RLibraryNotFound => e
|
|
65
81
|
else
|
66
82
|
raise FFI::Platform::ARCH + ": unkown architecure detected. Please specify R shared library by yourself."
|
67
83
|
end
|
68
|
-
|
69
|
-
|
84
|
+
|
85
|
+
if find_header('R.h', *possible_r_header_dirs)
|
86
|
+
p "header ok (Rscript)"
|
87
|
+
if find_library('R', 'R_tryEval', *possible_r_lib_dirs)
|
88
|
+
p "library ok (Rscript)"
|
89
|
+
return true
|
90
|
+
else
|
91
|
+
p "Dynamic (i.e. shared) library of R is not found (R.dll for Windows, libR.so for UNIX)." + msg_rscript
|
92
|
+
end
|
93
|
+
else
|
94
|
+
p "Header for R is not found." + msg_rscript
|
95
|
+
end
|
96
|
+
else
|
97
|
+
p "R home cannot be detected."
|
70
98
|
end
|
99
|
+
return false
|
100
|
+
end
|
71
101
|
|
72
|
-
|
73
|
-
|
74
|
-
|
75
|
-
|
76
|
-
|
102
|
+
dir_config("R")
|
103
|
+
|
104
|
+
if check_set_system_R_header_and_lib()
|
105
|
+
elsif check_set_pkg_config_R_header_and_lib()
|
106
|
+
elsif check_set_R_home_header_and_lib()
|
107
|
+
else
|
108
|
+
raise RHeaderLibraryNotFound.new( "R header or library not fouund.")
|
77
109
|
end
|
78
110
|
|
111
|
+
create_makefile "r_bridge/librbridge"
|
112
|
+
|
@@ -69,6 +69,8 @@ module RBridge
|
|
69
69
|
if(idx == val.elems.size ) # Not found
|
70
70
|
new_arg_assoc_array << [key, RBridge::r_nil()]
|
71
71
|
end
|
72
|
+
when RInstPrevious
|
73
|
+
new_arg_assoc_array << [key, result_manager.get_previous_inst_name() ]
|
72
74
|
else # R object
|
73
75
|
new_arg_assoc_array << [key, val]
|
74
76
|
end
|
@@ -166,6 +168,10 @@ module RBridge
|
|
166
168
|
end
|
167
169
|
end
|
168
170
|
|
171
|
+
class RInstPrevious
|
172
|
+
# RInstPrevious is used to obtain the previous instruction name.
|
173
|
+
end
|
174
|
+
|
169
175
|
class RResultManager
|
170
176
|
def initialize
|
171
177
|
@results = []
|
@@ -248,6 +254,16 @@ module RBridge
|
|
248
254
|
return RBridge::r_nil()
|
249
255
|
end
|
250
256
|
end
|
257
|
+
|
258
|
+
def get_previous_inst_name()
|
259
|
+
if @results.size > 0
|
260
|
+
last_inst_name = @results.last[0]
|
261
|
+
r_obj = RBridge::create_strvec([last_inst_name])
|
262
|
+
return r_obj
|
263
|
+
else
|
264
|
+
return RBridge::r_nil()
|
265
|
+
end
|
266
|
+
end
|
251
267
|
end
|
252
268
|
|
253
269
|
class RNameContainer
|
data/lib/r_bridge/version.rb
CHANGED
data/lib/r_bridge.rb
CHANGED
@@ -6,5 +6,21 @@ require 'r_bridge/r_bridge_lazyfunc_ext'
|
|
6
6
|
module RBridge
|
7
7
|
class Error < StandardError; end
|
8
8
|
# Your code goes here...
|
9
|
+
|
10
|
+
if ENV["R_HOME"].nil?
|
11
|
+
puts "Environment variable R_HOME is not set."
|
12
|
+
puts "This time, it is tried to be set by 'R RHOME' command."
|
13
|
+
begin
|
14
|
+
`R --version`
|
15
|
+
rescue => e
|
16
|
+
puts "R command is not available. Please ensure that your PATH environment variable includes the location of R command."
|
17
|
+
raise e
|
18
|
+
end
|
19
|
+
|
20
|
+
r_home_output = `R RHOME`
|
21
|
+
r_home = r_home_output.chomp
|
22
|
+
ENV["R_HOME"] = r_home
|
23
|
+
puts "R_HOME environment variable is set to be #{r_home}."
|
24
|
+
end
|
9
25
|
end
|
10
26
|
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: r_bridge
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.5.
|
4
|
+
version: 0.5.6
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Toshihiro Umehara
|
8
|
-
autorequire:
|
8
|
+
autorequire:
|
9
9
|
bindir: exe
|
10
10
|
cert_chain: []
|
11
|
-
date:
|
11
|
+
date: 2022-11-08 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: ffi
|
@@ -73,7 +73,7 @@ metadata:
|
|
73
73
|
homepage_uri: https://github.com/niceume/r_bridge
|
74
74
|
source_code_uri: https://github.com/niceume/r_bridge
|
75
75
|
changelog_uri: https://github.com/niceume/r_bridge
|
76
|
-
post_install_message:
|
76
|
+
post_install_message:
|
77
77
|
rdoc_options: []
|
78
78
|
require_paths:
|
79
79
|
- lib
|
@@ -88,8 +88,8 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
88
88
|
- !ruby/object:Gem::Version
|
89
89
|
version: '0'
|
90
90
|
requirements: []
|
91
|
-
rubygems_version: 3.
|
92
|
-
signing_key:
|
91
|
+
rubygems_version: 3.2.31
|
92
|
+
signing_key:
|
93
93
|
specification_version: 4
|
94
94
|
summary: Enables Ruby to construct and evaluate R internal objects
|
95
95
|
test_files: []
|