r_bridge 0.5.5 → 0.5.6

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: ad1d735bada2b3edde78582804db6ed1c260663f59fb52e236adf678248b75d7
4
- data.tar.gz: 619abe8dc2e78aa7fae3d20c68da7279a67b72a4fe934562e6ef8d613cadb14b
3
+ metadata.gz: 07cb9536295a7d3c189e375f4a7024c0fc0fa7d76a63372bebeb9fec0248f021
4
+ data.tar.gz: a8b7fd323bbfe50c80b06e383a18f4651f4bfd3abe4ac7ce3790996b0d3e93fc
5
5
  SHA512:
6
- metadata.gz: da62f2782de29b146aa36909f9ddf40d4135379535a5a885abb6a1e50a981218d066d9f0dc444f8e7a678f1cac85375ba3385ace6bbc48be5ad37ef5c9fc29f5
7
- data.tar.gz: c05bc29469b5b61629ef4e0575efae12f99a665fdba8df9f23d4f8106de83aa52b3b2fc124c741de525ab9e234c4b599dded80597ebe9824ddd7f2786dd606c6
6
+ metadata.gz: 64b37858d049eaefef2fd8d73abff0f300595f03d978253bcda6a830d2313de9a0886cb2536f7b50ff74dc897809194d600eae91b1ea14f4bc857030afd4e0fb
7
+ data.tar.gz: 18baf0868ced6db926a61c9e1fe7f8869a1fe87bb0097dda5ddb897369ebc25ff63a51533befb75bc11c4d3b10207f834bb979d001ad5b34f19cf7b567a1102e
@@ -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 check_R_header_and_lib( )
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
- raise RLibraryNotFound.new( "Dynamic (i.e. shared) library of R is not found (R.dll for Windows, libR.so for UNIX)." + msg_devel_lib )
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
- raise RHeaderNotFound.new( "Header for R is not found." + msg_devel_header )
25
+ p "Header for R is not found." + msg_devel_header
29
26
  end
27
+ return false
30
28
  end
31
29
 
32
- pkg_config_tried = false
33
- r_config_tried = false
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
- begin
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? ) && (! add_ldflags.nil?)
36
+ if ( ! add_cflags.nil? )
37
+ p "header ok (pkg-config)"
47
38
  $CFLAGS << " " << add_cflags
48
- $LDFLAGS <<" " << add_ldflags
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
- find_header('R.h', *possible_r_header_dirs)
69
- find_library('R', 'R_tryEval', *possible_r_lib_dirs)
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
- r_config_tried = true
73
- retry
74
- else
75
- raise e
76
- end
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
+
@@ -1,3 +1,3 @@
1
1
  module RBridge
2
- VERSION = "0.5.5"
2
+ VERSION = "0.5.6"
3
3
  end
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.5
4
+ version: 0.5.6
5
5
  platform: ruby
6
6
  authors:
7
7
  - Toshihiro Umehara
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2021-12-05 00:00:00.000000000 Z
11
+ date: 2022-11-08 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: ffi