rjb 1.1.9 → 1.2.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (6) hide show
  1. data/ChangeLog +11 -0
  2. data/ext/extconf.rb +5 -2
  3. data/ext/load.c +57 -40
  4. data/ext/rjb.c +2 -2
  5. metadata +15 -12
  6. data/ext/extconf.h +0 -9
data/ChangeLog CHANGED
@@ -1,3 +1,14 @@
1
+ Sun Nov 1 arton
2
+ *ext/load.c
3
+ load jvm pointed by JVM_LIB environment variable first (suggested by Ittay Dror).
4
+ *ext/rjb.c
5
+ RJB_VERSION -> 1.2.0
6
+ Sun Oct 11 arton
7
+ *ext/extconf.rb
8
+ add double quotation around include path for mingw compiler, original patched by Roger Pack (thanks)
9
+ remove double quotaion around java_home variable for existing checking by File.directoy?
10
+ *rjb.rake
11
+ adding mingw support for the older version compatibility checking
1
12
  Thu Sep 10 arton
2
13
  *ext/load.c
3
14
  Correct previous code (always reload jvm if OSX < Snow Leopard)
@@ -17,8 +17,8 @@ class Path
17
17
 
18
18
  def include(parent, child)
19
19
  inc = joint(parent, child)
20
- $INCFLAGS += " -I#{inc}"
21
- $CFLAGS += " -I#{inc}"
20
+ $INCFLAGS += " -I\"#{inc}\""
21
+ $CFLAGS += " -I\"#{inc}\""
22
22
  inc
23
23
  end
24
24
 
@@ -30,6 +30,9 @@ end
30
30
 
31
31
  javahome = ENV['JAVA_HOME']
32
32
  unless javahome.nil?
33
+ if javahome[0] == ?" && javahome[-1] == ?"
34
+ javahome = javahome[1..-2]
35
+ end
33
36
  raise "JAVA_HOME is not directory." unless File.directory?(javahome)
34
37
  p = Path.new
35
38
  inc = p.include(javahome, 'include')
data/ext/load.c CHANGED
@@ -1,6 +1,6 @@
1
1
  /*
2
2
  * Rjb - Ruby <-> Java Bridge
3
- * Copyright(c) 2004,2005,2006 arton
3
+ * Copyright(c) 2004,2005,2006,2009 arton
4
4
  *
5
5
  * This library is free software; you can redistribute it and/or
6
6
  * modify it under the terms of the GNU Lesser General Public
@@ -12,7 +12,7 @@
12
12
  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
13
13
  * Lesser General Public License for more details.
14
14
  *
15
- * $Id: load.c 96 2009-09-10 13:57:04Z arton $
15
+ * $Id: load.c 102 2009-11-01 14:01:41Z arton $
16
16
  */
17
17
 
18
18
  #include <stdlib.h>
@@ -98,6 +98,37 @@ static VALUE jvmdll = Qnil;
98
98
  static VALUE getdefaultjavavminitargsfunc;
99
99
  static VALUE createjavavmfunc;
100
100
 
101
+ static int open_jvm(char* libpath)
102
+ {
103
+ int sstat;
104
+ VALUE* argv;
105
+
106
+ rb_require("dl");
107
+ if (!rb_const_defined_at(rb_cObject, rb_intern("DL")))
108
+ {
109
+ rb_raise(rb_eRuntimeError, "Constants DL is not defined.");
110
+ return 0;
111
+ }
112
+ argv = ALLOCA_N(VALUE, 4);
113
+ *argv = rb_const_get(rb_cObject, rb_intern("DL"));
114
+ *(argv + 1) = rb_intern("dlopen");
115
+ *(argv + 2) = 1;
116
+ *(argv + 3) = rb_str_new2(libpath);
117
+ jvmdll = rb_protect(rjb_safe_funcall, (VALUE)argv, &sstat);
118
+ if (sstat)
119
+ {
120
+ return 0;
121
+ }
122
+ /* get function pointers of JNI */
123
+ #if RJB_RUBY_VERSION_CODE < 190
124
+ getdefaultjavavminitargsfunc = rb_funcall(rb_funcall(rb_funcall(jvmdll, rb_intern("[]"), 2, rb_str_new2(GETDEFAULTJVMINITARGS), rb_str_new2("IP")), rb_intern("to_ptr"), 0), rb_intern("to_i"), 0);
125
+ createjavavmfunc = rb_funcall(rb_funcall(rb_funcall(jvmdll, rb_intern("[]"), 2, rb_str_new2(CREATEJVM), rb_str_new2("IPPP")), rb_intern("to_ptr"), 0), rb_intern("to_i"), 0);
126
+ #else
127
+ getdefaultjavavminitargsfunc = rb_funcall(jvmdll, rb_intern("[]"), 1, rb_str_new2(GETDEFAULTJVMINITARGS));
128
+ createjavavmfunc = rb_funcall(jvmdll, rb_intern("[]"), 1, rb_str_new2(CREATEJVM));
129
+ #endif
130
+ return 1;
131
+ }
101
132
  /*
102
133
  * not completed, only valid under some circumstances.
103
134
  */
@@ -106,8 +137,6 @@ static int load_jvm(char* jvmtype)
106
137
  char* libpath;
107
138
  char* java_home;
108
139
  char* jh;
109
- int sstat;
110
- VALUE* argv;
111
140
 
112
141
  jh = getenv("JAVA_HOME");
113
142
  #if defined(__APPLE__) && defined(__MACH__)
@@ -161,32 +190,7 @@ static int load_jvm(char* jvmtype)
161
190
  + strlen(ARCH) + strlen(jvmtype) + 1);
162
191
  sprintf(libpath, JVMDLL, java_home, ARCH, jvmtype);
163
192
  #endif
164
-
165
- rb_require("dl");
166
- if (!rb_const_defined_at(rb_cObject, rb_intern("DL")))
167
- {
168
- rb_raise(rb_eRuntimeError, "Constants DL is not defined.");
169
- return 0;
170
- }
171
- argv = ALLOCA_N(VALUE, 4);
172
- *argv = rb_const_get(rb_cObject, rb_intern("DL"));
173
- *(argv + 1) = rb_intern("dlopen");
174
- *(argv + 2) = 1;
175
- *(argv + 3) = rb_str_new2(libpath);
176
- jvmdll = rb_protect(rjb_safe_funcall, (VALUE)argv, &sstat);
177
- if (sstat)
178
- {
179
- return 0;
180
- }
181
- /* get function pointers of JNI */
182
- #if RJB_RUBY_VERSION_CODE < 190
183
- getdefaultjavavminitargsfunc = rb_funcall(rb_funcall(rb_funcall(jvmdll, rb_intern("[]"), 2, rb_str_new2(GETDEFAULTJVMINITARGS), rb_str_new2("IP")), rb_intern("to_ptr"), 0), rb_intern("to_i"), 0);
184
- createjavavmfunc = rb_funcall(rb_funcall(rb_funcall(jvmdll, rb_intern("[]"), 2, rb_str_new2(CREATEJVM), rb_str_new2("IPPP")), rb_intern("to_ptr"), 0), rb_intern("to_i"), 0);
185
- #else
186
- getdefaultjavavminitargsfunc = rb_funcall(jvmdll, rb_intern("[]"), 1, rb_str_new2(GETDEFAULTJVMINITARGS));
187
- createjavavmfunc = rb_funcall(jvmdll, rb_intern("[]"), 1, rb_str_new2(CREATEJVM));
188
- #endif
189
- return 1;
193
+ return open_jvm(libpath);
190
194
  }
191
195
 
192
196
  static int load_bridge(JNIEnv* jenv)
@@ -264,20 +268,33 @@ int rjb_create_jvm(JNIEnv** pjenv, JavaVMInitArgs* vm_args, char* userpath, VALU
264
268
 
265
269
  if (!RTEST(jvmdll))
266
270
  {
267
- #if defined(__APPLE__) && defined(__MACH__)
268
- if (!(load_jvm(JVM_TYPE) || load_jvm(ALT_JVM_TYPE)))
271
+ char* libjvm = getenv("JVM_LIB");
272
+ #if defined(_WIN32)
273
+ if (libjvm && *libjvm == '"' && *(libjvm + strlen(libjvm) - 1) == '"')
269
274
  {
270
- JVMDLL = "%s/Libraries/libjvm.dylib";
271
- CREATEJVM = "JNI_CreateJavaVM_Impl";
272
- GETDEFAULTJVMINITARGS = "JNI_GetDefaultJavaVMInitArgs_Impl";
275
+ char* p = ALLOCA_N(char, strlen(libjvm) + 1);
276
+ strcpy(p, libjvm + 1);
277
+ *(p + strlen(p) - 1) = '\0';
278
+ libjvm = p;
279
+ }
280
+ #endif
281
+ if (libjvm == NULL || !open_jvm(libjvm))
282
+ {
283
+ #if defined(__APPLE__) && defined(__MACH__)
284
+ if (!(load_jvm(JVM_TYPE) || load_jvm(ALT_JVM_TYPE)))
285
+ {
286
+ JVMDLL = "%s/Libraries/libjvm.dylib";
287
+ CREATEJVM = "JNI_CreateJavaVM_Impl";
288
+ GETDEFAULTJVMINITARGS = "JNI_GetDefaultJavaVMInitArgs_Impl";
273
289
  #endif
274
- if (!(load_jvm(JVM_TYPE) || load_jvm(ALT_JVM_TYPE)))
275
- {
276
- return -1;
277
- }
290
+ if (!(load_jvm(JVM_TYPE) || load_jvm(ALT_JVM_TYPE)))
291
+ {
292
+ return -1;
293
+ }
278
294
  #if defined(__APPLE__) && defined(__MACH__)
279
- }
295
+ }
280
296
  #endif
297
+ }
281
298
  #if RJB_RUBY_VERSION_CODE < 190
282
299
  ruby_errinfo = Qnil;
283
300
  #else
data/ext/rjb.c CHANGED
@@ -12,10 +12,10 @@
12
12
  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
13
13
  * Lesser General Public License for more details.
14
14
  *
15
- * $Id: rjb.c 93 2009-09-10 13:43:04Z arton $
15
+ * $Id: rjb.c 102 2009-11-01 14:01:41Z arton $
16
16
  */
17
17
 
18
- #define RJB_VERSION "1.1.9"
18
+ #define RJB_VERSION "1.2.0"
19
19
 
20
20
  #include "ruby.h"
21
21
  #include "extconf.h"
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: rjb
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.1.9
4
+ version: 1.2.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - arton
@@ -9,11 +9,13 @@ autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
11
 
12
- date: 2009-09-10 00:00:00 +09:00
12
+ date: 2009-11-01 00:00:00 +09:00
13
13
  default_executable:
14
14
  dependencies: []
15
15
 
16
- description: RJB is a bridge program that connect between Ruby and Java with Java Native Interface.
16
+ description: |
17
+ RJB is a bridge program that connect between Ruby and Java with Java Native Interface.
18
+
17
19
  email: artonx@gmail.com
18
20
  executables: []
19
21
 
@@ -24,31 +26,32 @@ extra_rdoc_files: []
24
26
  files:
25
27
  - ext/RBridge.java
26
28
  - ext/load.c
29
+ - ext/rjbexception.c
27
30
  - ext/riconv.c
28
31
  - ext/rjb.c
29
- - ext/rjbexception.c
30
- - ext/extconf.h
31
- - ext/jniwrap.h
32
32
  - ext/jp_co_infoseek_hp_arton_rjb_RBridge.h
33
33
  - ext/riconv.h
34
+ - ext/jniwrap.h
34
35
  - ext/rjb.h
35
36
  - ext/depend
36
37
  - data/rjb/jp/co/infoseek/hp/arton/rjb/RBridge.class
37
38
  - lib/rjb.rb
38
39
  - samples/filechooser.rb
39
- - test/gctest.rb
40
40
  - test/test.rb
41
+ - test/gctest.rb
41
42
  - test/jp/co/infoseek/hp/arton/rjb/Base.class
42
- - test/jp/co/infoseek/hp/arton/rjb/ExtBase.class
43
43
  - test/jp/co/infoseek/hp/arton/rjb/IBase.class
44
- - test/jp/co/infoseek/hp/arton/rjb/Test$TestTypes.class
45
44
  - test/jp/co/infoseek/hp/arton/rjb/Test.class
45
+ - test/jp/co/infoseek/hp/arton/rjb/Test$TestTypes.class
46
+ - test/jp/co/infoseek/hp/arton/rjb/ExtBase.class
46
47
  - COPYING
47
48
  - ChangeLog
48
49
  - readme.sj
49
50
  - readme.txt
50
- has_rdoc: false
51
+ has_rdoc: true
51
52
  homepage: http://rjb.rubyforge.org/
53
+ licenses: []
54
+
52
55
  post_install_message:
53
56
  rdoc_options: []
54
57
 
@@ -70,9 +73,9 @@ requirements:
70
73
  - none
71
74
  - JDK 5.0
72
75
  rubyforge_project:
73
- rubygems_version: 1.3.1
76
+ rubygems_version: 1.3.5
74
77
  signing_key:
75
- specification_version: 2
78
+ specification_version: 3
76
79
  summary: Ruby Java bridge
77
80
  test_files:
78
81
  - test/test.rb
@@ -1,9 +0,0 @@
1
- #ifndef EXTCONF_H
2
- #define EXTCONF_H
3
- #define HAVE_JNI_H 1
4
- #define HAVE_DL_H 1
5
- #define HAVE_NL_LANGINFO 1
6
- #define HAVE_SETLOCALE 1
7
- #define HAVE_GETENV 1
8
- #define RJB_RUBY_VERSION_CODE 187
9
- #endif