r_bridge 0.5.5 → 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 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