jruby-launcher 1.1.12-java → 1.1.13-java

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: 36ea2da6a0636abdc37955fd898b3dce7c59e26b852b140987663b5d99ccb374
4
- data.tar.gz: 6a8b47a675cef8d9416790c57c2af6ebe3bc5df0bb038f6f1e1764d8e61faf35
3
+ metadata.gz: b11fc4e524ed4b37e0f46d973c6622df18dbf9676a5ca2c03fbb046a1dcd216b
4
+ data.tar.gz: 2b12dc9ce4c66cd0142747f9ec5898c051414f53f2080119c25c827df336eb13
5
5
  SHA512:
6
- metadata.gz: 4b1893448084229a3d7949f3579e1a949ecf5441eb0d94004cc397695afe8e7fd75a8a91d8f391dfed88e2c1bc00bbec1ae9aaab123d758634ebbc4211e8be3d
7
- data.tar.gz: 9fefa739941cd98038b419337b4b6e0a455fbfaee64ca0060c01d34cff002e2186273501fd515d2b537db53cebe8542aea49cbccf50748729b92faed3ecdc357
6
+ metadata.gz: 0ebe917d3d4f1c416533a5e3afbb0ce5a1394c14c43f6618b97b0b8dc09265d6a84071da2f69423fe1d5da9d49ce3f5f03e47fc247d8c67fe38395bfaa064d29
7
+ data.tar.gz: ca74d57e9ca2f052e705209271eb8a6426122c9620b0423e0828de3dd7eb818808fa6f2624c2109e750582c372cb8011424e304b794eb4036e3a725b7429b136
data/Makefile CHANGED
@@ -2,7 +2,7 @@
2
2
  PREFIX = notspecified
3
3
  BINDIR = $(PREFIX)/bin
4
4
  JRUBY_VERSION = notspecified
5
- JRUBY_MODULE =
5
+ JRUBY_MODULE = 1
6
6
  INSTALLDIR = $(PREFIX)/lib/ruby/shared/rubygems/defaults
7
7
  INSTALLDIR9000 = $(PREFIX)/lib/ruby/stdlib/rubygems/defaults
8
8
  OLDINSTALLDIR = $(PREFIX)/lib/ruby/site_ruby/1.8/rubygems/defaults
@@ -114,6 +114,7 @@ include $(SUB_IMPLMK)
114
114
 
115
115
  # Pick conf based on OS. for mingw64, must manually override for now.
116
116
  ifeq ($(OS),Windows_NT)
117
+ CC=gcc
117
118
  CONF=mingw
118
119
  else
119
120
  CONF=unix
data/Rakefile CHANGED
@@ -32,7 +32,7 @@ task :gemspec => './lib/jruby-launcher.rb' do
32
32
  end
33
33
 
34
34
  desc "Create gem file"
35
- task :package => [:update_version, :gemspec, :spec] do
35
+ task :package => [:update_version, :gemspec] do
36
36
  Gem::PackageTask.new(@gemspec) do |pkg|
37
37
  end
38
38
  Rake::Task['gem'].invoke
@@ -250,7 +250,6 @@ bool ArgParser::parseArgs(int argc, char *argv[]) {
250
250
 
251
251
  // Force OpenJDK-based JVMs to use /dev/urandom for random number generation
252
252
  // See https://github.com/jruby/jruby/issues/4685 among others.
253
- struct stat buffer;
254
253
  if (access("/dev/urandom", R_OK) == 0) {
255
254
  // OpenJDK tries really hard to prevent you from using urandom.
256
255
  // See https://bugs.openjdk.java.net/browse/JDK-6202721
@@ -488,8 +487,12 @@ void ArgParser::prepareOptions() {
488
487
 
489
488
  if (!bootClassPath.empty()) {
490
489
  if (useModulePath) {
490
+ #ifdef JRUBY_MODULE
491
491
  // When modules are present, use module path for the jruby libs (aka bootClassPath)
492
492
  option = OPT_CMDLINE_MODULE_PATH;
493
+ #else
494
+ option = OPT_BOOT_CLASS_PATH;
495
+ #endif
493
496
  } else {
494
497
  option = OPT_BOOT_CLASS_PATH;
495
498
  }
data/extconf.rb CHANGED
@@ -4,10 +4,9 @@ mf = mf.gsub(/^PREFIX\s*=.*$/, "PREFIX = #{File.dirname(RbConfig::CONFIG['libdir
4
4
  mf = mf.gsub(/^JRUBY_VERSION\s*=.*$/, "JRUBY_VERSION = #{JRUBY_VERSION}")
5
5
 
6
6
  # Launcher will use .module_opts file if present, otherwise hardcoded add-opens for this module.
7
- # Pre-9.2.1: ALL-UNNAMED because no name was exported
8
- # 9.2.1 and higher: org.jruby.dist
9
- if JRUBY_VERSION !~ /(^1)|(^9\.[01])|(^9\.2\.0\.0)/
10
- mf = mf.gsub(/^JRUBY_MODULE\s*=.*$/, "JRUBY_MODULE = 1")
7
+ # Module options are only supported on JRuby 9.2.1 or higher.
8
+ if JRUBY_VERSION =~ /(^1)|(^9\.[01])|(^9\.2\.0\.0)/
9
+ mf = mf.gsub(/^JRUBY_MODULE\s*=.*1$/, "JRUBY_MODULE =")
11
10
  end
12
11
  puts mf
13
12
  File.open('Makefile', 'wb') {|f| f << mf}
@@ -1,3 +1,3 @@
1
1
  module JRubyLauncher
2
- VERSION = "1.1.12"
2
+ VERSION = "1.1.13"
3
3
  end
@@ -0,0 +1,13 @@
1
+ mf = File.read('Makefile')
2
+ mf = mf.gsub(/^BINDIR\s*=.*$/, "BINDIR = #{RbConfig::CONFIG['bindir']}")
3
+ mf = mf.gsub(/^PREFIX\s*=.*$/, "PREFIX = #{File.dirname(RbConfig::CONFIG['libdir'])}")
4
+ mf = mf.gsub(/^JRUBY_VERSION\s*=.*$/, "JRUBY_VERSION = #{JRUBY_VERSION}")
5
+
6
+ # Launcher will use .module_opts file if present, otherwise hardcoded add-opens for this module.
7
+ # Pre-9.2.1: ALL-UNNAMED because no name was exported
8
+ # 9.2.1 and higher: org.jruby.dist
9
+ if JRUBY_VERSION !~ /(^1)|(^9\.[01])|(^9\.2\.0\.0)/
10
+ mf = mf.gsub(/^JRUBY_MODULE\s*=.*$/, "JRUBY_MODULE = 1")
11
+ end
12
+ puts mf
13
+ File.open('Makefile', 'wb') {|f| f << mf}
@@ -0,0 +1,3 @@
1
+ module JRubyLauncher
2
+ VERSION = "1.1.13"
3
+ end
@@ -0,0 +1,4 @@
1
+ class Gem::ConfigFile
2
+ PLATFORM_DEFAULTS['install'] = '--no-rdoc --no-ri'
3
+ PLATFORM_DEFAULTS['update'] = '--no-rdoc --no-ri'
4
+ end
@@ -0,0 +1,278 @@
1
+ require 'tmpdir'
2
+ require File.expand_path('../spec_helper.rb', __FILE__)
3
+ load File.expand_path('../../lib/jruby-launcher.rb', __FILE__)
4
+
5
+ describe "JRuby native launcher" do
6
+ it "should run org.jruby.Main" do
7
+ jruby_launcher_args("").last.should == "org/jruby/Main"
8
+ end
9
+
10
+ it "should pass unrecognized arguments to JRuby" do
11
+ jruby_launcher_args("-J-Dsome.option -v --help")[-3..-1].should == ["org/jruby/Main", "-v", "--help"]
12
+ end
13
+
14
+ it "should print help message" do
15
+ args = jruby_launcher_args("-Xhelp 2>&1")
16
+ args.select {|l| l =~ /JRuby Launcher usage/}.should_not be_empty
17
+ args.should include("-X")
18
+ args = jruby_launcher_args("-X 2>&1")
19
+ args.detect {|l| l =~ /JRuby Launcher usage/}.should_not be_empty
20
+ args.should include("-X")
21
+ end
22
+
23
+ it "should use $JAVACMD when JAVACMD is specified" do
24
+ with_environment "JAVACMD" => File.join("jato") do
25
+ if windows?
26
+ jruby_launcher_args("-v 2>&1").join.should =~ %r{jato}
27
+ else
28
+ jruby_launcher_args("-v").first.should == File.join("jato")
29
+ end
30
+ end
31
+ end
32
+
33
+ it "should use $JAVA_HOME/bin/java when JAVA_HOME is specified" do
34
+ with_environment "JAVA_HOME" => File.join("some", "java", "home") do
35
+ if windows?
36
+ jruby_launcher_args("-v 2>&1").join.should =~ %r{some/java/home}
37
+ else
38
+ jruby_launcher_args("-v").first.should == File.join("some", "java", "home", "bin", "java")
39
+ end
40
+ end
41
+ end
42
+
43
+ it "should use -Xjdkhome argument above JAVA_HOME" do
44
+ with_environment "JAVA_HOME" => File.join("env", "java", "home") do
45
+ if windows?
46
+ jruby_launcher_args("-Xjdkhome some/java/home 2>&1").join.should =~ %r{some/java/home}
47
+ else
48
+ jruby_launcher_args("-Xjdkhome some/java/home").first.should == File.join("some", "java", "home", "bin", "java")
49
+ end
50
+ end
51
+ end
52
+
53
+ it "should drop the backslashes at the end of JAVA_HOME" do
54
+ with_environment "JAVA_HOME" => File.join("some", "java", "home\\\\") do
55
+ if windows?
56
+ jruby_launcher_args("").join.should =~ %r{some/java/home}
57
+ else
58
+ jruby_launcher_args("").first.should == File.join("some", "java", "home", "bin", "java")
59
+ end
60
+ end
61
+ end
62
+
63
+ it "should complain about a missing log argument" do
64
+ jruby_launcher("-Xtrace 2>&1").should =~ /Argument is missing for "-Xtrace"/
65
+ jruby_launcher("-Xtrace -- 2>&1").should =~ /Argument is missing for "-Xtrace"/
66
+ end
67
+
68
+ it "should complain about a missing jdkhome argument" do
69
+ jruby_launcher("-Xjdkhome 2>&1").should =~ /Argument is missing/
70
+ jruby_launcher("-Xjdkhome -- 2>&1").should =~ /Argument is missing/
71
+ end
72
+
73
+ it "should complain about a missing classpath append argument" do
74
+ jruby_launcher("-Xcp:a 2>&1").should =~ /Argument is missing/
75
+ jruby_launcher("-Xcp:a -- 2>&1").should =~ /Argument is missing/
76
+ end
77
+
78
+ it "should run nailgun server with --ng-server option" do
79
+ jruby_launcher_args("--ng-server").last.should == "com/martiansoftware/nailgun/NGServer"
80
+ end
81
+
82
+ it "should run nailgun client with --ng option" do
83
+ jruby_launcher_args('--ng -e "puts 1"').should == ["org.jruby.util.NailMain", "-e", "puts 1"]
84
+ end
85
+
86
+ it "should handle -J JVM options" do
87
+ jruby_launcher_args("-J-Darg1=value1 -J-Darg2=value2").should include("-Darg1=value1", "-Darg2=value2")
88
+ end
89
+
90
+ it "should pass -Xprop.erty=value as -J-Djruby.prop.erty=value" do
91
+ jruby_launcher_args("-Xprop.erty=value").should include("-Djruby.prop.erty=value")
92
+ end
93
+
94
+ it "should pass -Xproperties as --properties" do
95
+ jruby_launcher_args("-Xproperties").should include("--properties")
96
+ end
97
+
98
+ it "should allow max heap to be overridden" do
99
+ jruby_launcher_args("-J-Xmx256m").should include("-Xmx256m")
100
+ end
101
+
102
+ it "should default to 2048k max stack" do
103
+ jruby_launcher_args("").should include("-Xss2048k")
104
+ end
105
+
106
+ it "should allow max stack to be overridden" do
107
+ jruby_launcher_args("-J-Xss512k").should include("-Xss512k")
108
+ end
109
+
110
+ it "should add the contents of the CLASSPATH environment variable" do
111
+ with_environment "CLASSPATH" => "some.jar" do
112
+ classpath_arg(jruby_launcher_args("")).should =~ /some.jar/
113
+ end
114
+ end
115
+
116
+ it "should add the classpath elements in proper order" do
117
+ s = File::PATH_SEPARATOR
118
+ with_environment "CLASSPATH" => "some-env.jar" do
119
+ args = jruby_launcher_args("-Xcp:a some-other.jar -Xcp:p some.jar")
120
+ classpath_arg(args).should =~ /some.jar.*#{s}some-env.jar#{s}some-other.jar/
121
+ end
122
+ end
123
+
124
+ it "should use the --server compiler" do
125
+ jruby_launcher_args("--server").should include("-server")
126
+ end
127
+
128
+ it "should use the --client compiler" do
129
+ jruby_launcher_args("--client").should include("-client")
130
+ end
131
+
132
+ it "should set the JMX settings when --manage is present" do
133
+ jruby_launcher_args("--manage").should include("-Dcom.sun.management.jmxremote", "-Djruby.management.enabled=true")
134
+ end
135
+
136
+ it "should set the headless flag when --headless is present" do
137
+ jruby_launcher_args("--headless").should include("-Djava.awt.headless=true")
138
+ end
139
+
140
+ it "should pass -Xprof when --sample is present" do
141
+ jruby_launcher_args("--sample").should include("-Xprof")
142
+ end
143
+
144
+ it "should stop argument processing when a -- is seen" do
145
+ jruby_launcher_args("-- -Xhelp -Xtrace --headless").should include("-Xhelp", "-Xtrace", "--headless")
146
+ end
147
+
148
+ # JRUBY-4151
149
+ it "should properly handle single quotes" do
150
+ jruby_launcher_args("-e 'ABC DEF'").should include("ABC DEF")
151
+ end
152
+
153
+ # JRUBY-4581
154
+ it "should prepend JRUBY_OPTS to the start of the argument list to process" do
155
+ with_environment "JRUBY_OPTS" => "--server -J-Dsome.key=val -rubygems" do
156
+ jruby_launcher_args("-e 'ABC DEF'").should include("-server", "-Dsome.key=val", "-rubygems", "-e", "ABC DEF")
157
+ end
158
+ end
159
+
160
+ # JRUBY-4611
161
+ it "stops argument processing on first non-option argument" do
162
+ jruby_launcher_args("foo.rb --sample")[-2..-1].should == ["foo.rb", "--sample"]
163
+ end
164
+
165
+ # JRUBY-4608
166
+ if RbConfig::CONFIG['target_os'] =~ /darwin/i
167
+ it "includes file.encoding=UTF-8 on Mac if JAVA_ENCODING is not set" do
168
+ jruby_launcher_args("-e true").should include("-Dfile.encoding=UTF-8")
169
+ with_environment "JAVA_ENCODING" => "MacRoman" do
170
+ jruby_launcher_args("-e true").should_not include("-Dfile.encoding=UTF-8")
171
+ end
172
+ end
173
+ end
174
+
175
+ it "does not crash on empty args" do
176
+ jruby_launcher_args("-e ''").should include("-e")
177
+ jruby_launcher("-Xtrace '' 2>&1").should =~ /-Xtrace/
178
+ jruby_launcher("-Xjdkhome '' 2>&1").should =~ /-Xjdkhome/
179
+ end
180
+
181
+ # JRUBY-4706
182
+ it "should put JRuby on regular classpath when -Xnobootclasspath is used" do
183
+ args = jruby_launcher_args("-e true")
184
+ args.grep(/Xbootclasspath/).should_not be_empty
185
+ args = jruby_launcher_args("-Xnobootclasspath -e true")
186
+ args.grep(/Xbootclasspath/).should be_empty
187
+ end
188
+
189
+ it "should put JRuby on regular classpath when VERIFY_JRUBY is set" do
190
+ with_environment "VERIFY_JRUBY" => "true" do
191
+ args = jruby_launcher_args("-e true")
192
+ args.grep(/Xbootclasspath/).should be_empty
193
+ end
194
+ end
195
+
196
+ # JRUBY-4709
197
+ it "should include a bare : or ; at the end of the classpath, to include PWD in the path" do
198
+ classpath_arg(jruby_launcher_args("-Xnobootclasspath -e true")).should =~
199
+ if windows?
200
+ /;$/
201
+ else
202
+ /:$/
203
+ end
204
+ end
205
+
206
+ # JRUBY-6016
207
+ it "should honor JAVA_MEM" do
208
+ with_environment "JAVA_MEM" => "-Xmx768m" do
209
+ jruby_launcher_args("").should include("-Xmx768m")
210
+ end
211
+ end
212
+
213
+ it "should honor JAVA_STACK" do
214
+ with_environment "JAVA_STACK" => "-Xss3072k" do
215
+ jruby_launcher_args("").should include("-Xss3072k")
216
+ end
217
+ end
218
+
219
+ it "should honor JRUBY_HOME" do
220
+ with_environment "JRUBY_HOME" => "/tmp" do
221
+ jruby_launcher_args("").should include("-Djruby.home=/tmp")
222
+ end
223
+ end
224
+
225
+ context "JRUBY_HOME set and JRUBY_HOME/lib/jruby.jar exists" do
226
+ let(:jruby_home) do
227
+ require 'tempfile'
228
+ t = Tempfile.new("jruby_home")
229
+ t.path.tap { t.close! }
230
+ end
231
+
232
+ before do
233
+ FileUtils.mkdir_p(File.join(jruby_home, "lib"))
234
+ FileUtils.touch(File.join(jruby_home, "lib", "jruby.jar"))
235
+ end
236
+ after { FileUtils.rm_rf jruby_home }
237
+
238
+ it "should add jruby.jar to the bootclasspath" do
239
+ with_environment "JRUBY_HOME" => jruby_home do
240
+ jruby_launcher_args("").should include("-Xbootclasspath/a:#{jruby_home}/lib/jruby.jar")
241
+ end
242
+ end
243
+ end
244
+
245
+ it "should place user-supplied options after default options" do
246
+ args = jruby_launcher_args("-J-Djruby.home=/tmp")
247
+ home_args = args.select {|x| x =~ /^-Djruby\.home/ }
248
+ home_args.length.should == 2
249
+ home_args.last.should == "-Djruby.home=/tmp"
250
+ end
251
+
252
+ it "should print the version" do
253
+ jruby_launcher("-Xversion 2>&1").should =~ /Launcher Version #{JRubyLauncher::VERSION}/
254
+ end
255
+
256
+ it "should not crash on format-strings" do
257
+ jruby_launcher_args("-e %s%s%s%s%s 2>&1").should include('-e', '%s%s%s%s%s')
258
+ end
259
+
260
+ it "should use --module-path on java9+" do
261
+ Dir.mktmpdir do |java_home|
262
+ Dir.mkdir(File.join(java_home, 'jmods'))
263
+ with_environment 'JAVA_HOME' => java_home do
264
+ jruby_launcher_args('').grep(/^--module-path=.*jruby.jar/).should_not be_empty
265
+ end
266
+ end
267
+ end
268
+
269
+ it "should not treat CLASSPATH entries as modules on java9+" do
270
+ Dir.mktmpdir do |java_home|
271
+ Dir.mkdir(File.join(java_home, 'jmods'))
272
+ with_environment 'JAVA_HOME' => java_home, 'CLASSPATH' => '/some/lib.jar' do
273
+ jruby_launcher_args('').grep(/^--module-path=.*\/some\/lib.jar/).should be_empty
274
+ classpath_arg(jruby_launcher_args('')).should =~ /\/some\/lib.jar/
275
+ end
276
+ end
277
+ end
278
+ end
@@ -0,0 +1,76 @@
1
+ require 'rspec'
2
+ require 'rbconfig'
3
+ require 'fileutils'
4
+
5
+ module JRubyLauncherHelper
6
+ JRUBY_EXE = ''
7
+ WINDOWS = RbConfig::CONFIG['target_os'] =~ /mswin/
8
+
9
+ def self.check_executable_built
10
+ exe = File.expand_path("../../jruby", __FILE__) + RbConfig::CONFIG['EXEEXT']
11
+ unless File.executable?(exe)
12
+ raise "Error: launcher executable not built; type `make' before continuing."
13
+ end
14
+ top = File.dirname(exe)
15
+ name = File.basename(exe)
16
+ home = File.join(top, "build/home")
17
+ FileUtils.mkdir_p(File.join(home, "bin"))
18
+ FileUtils.cp(exe, File.join(home, "bin"))
19
+ if JRubyLauncherHelper::WINDOWS
20
+ FileUtils.cp(exe.sub(/exe/, 'dll'), File.join(home, "bin"))
21
+ end
22
+ FileUtils.mkdir_p(File.join(home, "lib"))
23
+ FileUtils.touch(File.join(home, "lib/jruby.jar"))
24
+ JRUBY_EXE.concat File.join(home, "bin", name)
25
+ end
26
+
27
+ def jruby_launcher(args)
28
+ `#{JRUBY_EXE} #{args}`
29
+ end
30
+
31
+ def jruby_launcher_args(args)
32
+ jruby_launcher("-Xcommand #{args}").split("\n")
33
+ end
34
+
35
+ def last_exit_code
36
+ $?.exitstatus
37
+ end
38
+
39
+ def windows?
40
+ WINDOWS
41
+ end
42
+
43
+ def classpath_arg(args)
44
+ index = args.index("-cp")
45
+ index.should > 0
46
+ args[index + 1]
47
+ end
48
+
49
+ def with_environment(pairs = {})
50
+ prev_env = {}
51
+ pairs.each_pair do |k,v|
52
+ prev_env[k] = ENV[k] if ENV.has_key?(k)
53
+ ENV[k] = v
54
+ end
55
+ begin
56
+ yield
57
+ ensure
58
+ pairs.keys.each {|k| ENV.delete(k)}
59
+ ENV.update(prev_env)
60
+ end
61
+ end
62
+ end
63
+
64
+ RSpec.configure do |config|
65
+ config.before(:all) do
66
+ JRubyLauncherHelper.check_executable_built
67
+ # clear environment for better control
68
+ ENV.delete("JAVA_HOME")
69
+ ENV.delete("JRUBY_HOME")
70
+ ENV.delete("JAVA_OPTS")
71
+ ENV.delete("JRUBY_OPTS")
72
+ ENV.delete("CLASSPATH")
73
+ ENV.delete("JAVA_ENCODING")
74
+ end
75
+ config.include(JRubyLauncherHelper)
76
+ end
@@ -147,14 +147,29 @@ bool PlatformLauncher::start(char* argv[], int argc, DWORD *retCode, const char*
147
147
  suppressConsole = false;
148
148
  } else {
149
149
  if (jdkhome.empty()) {
150
- if (!jvmLauncher.initialize(REQ_JAVA_VERSION)) {
151
- logErr(false, true, "Cannot find Java %s or higher.", REQ_JAVA_VERSION);
152
- return false;
150
+ // attempt to get JDK home from registry
151
+ jvmLauncher.initialize(REQ_JAVA_VERSION);
152
+ }
153
+
154
+ if (!jdkhome.empty()) {
155
+ java = jdkhome + "\\bin\\java.exe";
156
+ } else if (getenv("JAVA_HOME") != NULL) {
157
+ string java_home = string(getenv("JAVA_HOME"));
158
+ jdkhome = java_home;
159
+ java_home = trimTrailingBackslashes(java_home);
160
+ java = java_home + "\\bin\\java.exe";
161
+ } else {
162
+ java = findOnPath("java.exe");
163
+ if (!java.empty()) {
164
+ int home_index = java.find_last_of('\\', java.find_last_of('\\') - 1);
165
+ jdkhome = java.substr(0, home_index);
153
166
  }
154
167
  }
168
+ }
155
169
 
156
- jvmLauncher.getJavaPath(jdkhome);
157
- java = jdkhome + "\\bin\\java";
170
+ if (java.empty()) {
171
+ printToConsole("No `java.exe' executable found on PATH.");
172
+ return 255;
158
173
  }
159
174
 
160
175
  prepareOptions();
@@ -52,7 +52,7 @@ int rb_w32_cmdvector(const char *cmd, char ***vec) {
52
52
  char *ptr, *base, *buffer, *cmdline;
53
53
  char **vptr;
54
54
  char quote;
55
- NtCmdLineElement *curr, **tail;
55
+ NtCmdLineElement *curr;
56
56
  NtCmdLineElement *cmdhead = NULL, **cmdtail = &cmdhead;
57
57
 
58
58
  //
@@ -237,7 +237,7 @@ int rb_w32_cmdvector(const char *cmd, char ***vec) {
237
237
  buffer = (char *)malloc(len);
238
238
  if (!buffer) {
239
239
  do_nothing:
240
- while (curr = cmdhead) {
240
+ while ((curr = cmdhead)) {
241
241
  cmdhead = curr->next;
242
242
  if (curr->flags & NTMALLOC) free(curr->str);
243
243
  free(curr);
@@ -263,7 +263,7 @@ int rb_w32_cmdvector(const char *cmd, char ***vec) {
263
263
 
264
264
  ptr = buffer + (elements+1) * sizeof(char *);
265
265
 
266
- while (curr = cmdhead) {
266
+ while ((curr = cmdhead)) {
267
267
  strlcpy(ptr, curr->str, curr->len + 1);
268
268
  *vptr++ = ptr;
269
269
  ptr += curr->len + 1;
@@ -2,11 +2,6 @@ require 'rspec'
2
2
  require 'rbconfig'
3
3
  require 'fileutils'
4
4
 
5
- if defined?(JRUBY_VERSION)
6
- require 'jruby'
7
- JRuby.runtime.instance_config.run_ruby_in_process = false
8
- end
9
-
10
5
  module JRubyLauncherHelper
11
6
  JRUBY_EXE = ''
12
7
  WINDOWS = RbConfig::CONFIG['target_os'] =~ /mswin/
@@ -56,6 +56,10 @@ int UnixLauncher::run(int argc, char* argv[], char* envp[]) {
56
56
  java = java_home + "/bin/java";
57
57
  } else {
58
58
  java = findOnPath("java");
59
+ if (!java.empty()) {
60
+ int home_index = java.find_last_of('/', java.find_last_of('/') - 1);
61
+ jdkhome = java.substr(0, home_index);
62
+ }
59
63
  }
60
64
  }
61
65
 
@@ -123,7 +123,6 @@ string findOnPath(const char* name) {
123
123
  string path(getenv("PATH"));
124
124
  size_t start = 0;
125
125
  size_t sep;
126
- char * found;
127
126
 
128
127
  while (start < path.length()) {
129
128
  sep = path.find(PATH_SEP, start);
@@ -39,10 +39,27 @@ bool disableFolderVirtualization(HANDLE hProcess) {
39
39
  return true;
40
40
  }
41
41
 
42
+ typedef BOOL (WINAPI *LPFN_ISWOW64PROCESS) (HANDLE, PBOOL);
43
+
44
+ LPFN_ISWOW64PROCESS IsWow64Process;
45
+
46
+ BOOL is64bits() {
47
+ BOOL is64Bits = FALSE;
48
+ IsWow64Process = (LPFN_ISWOW64PROCESS) GetProcAddress(GetModuleHandle(TEXT("kernel32")),"IsWow64Process");
49
+
50
+ if (IsWow64Process && !IsWow64Process(GetCurrentProcess(),&is64Bits)) {}
51
+
52
+ return is64Bits;
53
+ }
54
+
55
+ #define KEY_WOW64_64KEY 0x0100
56
+ #define KEY_WOW64_32KEY 0x0200
57
+
42
58
  bool getStringFromRegistry(HKEY rootKey, const char *keyName, const char *valueName, string &value) {
43
59
  logMsg("getStringFromRegistry()\n\tkeyName: %s\n\tvalueName: %s", keyName, valueName);
60
+ DWORD openFlags = KEY_READ | (is64bits() ? KEY_WOW64_64KEY : KEY_WOW64_32KEY);
44
61
  HKEY hKey = 0;
45
- if (RegOpenKeyEx(rootKey, keyName, 0, KEY_READ, &hKey) == ERROR_SUCCESS) {
62
+ if (RegOpenKeyEx(rootKey, keyName, 0, openFlags, &hKey) == ERROR_SUCCESS) {
46
63
  DWORD valSize = 4096;
47
64
  DWORD type = 0;
48
65
  char val[4096] = "";
@@ -64,8 +81,9 @@ bool getStringFromRegistry(HKEY rootKey, const char *keyName, const char *valueN
64
81
 
65
82
  bool getDwordFromRegistry(HKEY rootKey, const char *keyName, const char *valueName, DWORD &value) {
66
83
  logMsg("getDwordFromRegistry()\n\tkeyName: %s\n\tvalueName: %s", keyName, valueName);
84
+ DWORD openFlags = KEY_READ | (is64bits() ? KEY_WOW64_64KEY : KEY_WOW64_32KEY);
67
85
  HKEY hKey = 0;
68
- if (RegOpenKeyEx(rootKey, keyName, 0, KEY_READ, &hKey) == ERROR_SUCCESS) {
86
+ if (RegOpenKeyEx(rootKey, keyName, 0, openFlags, &hKey) == ERROR_SUCCESS) {
69
87
  DWORD valSize = sizeof(DWORD);
70
88
  DWORD type = 0;
71
89
  if (RegQueryValueEx(hKey, valueName, 0, &type, (BYTE *) &value, &valSize) == ERROR_SUCCESS
data/version.h CHANGED
@@ -6,6 +6,6 @@
6
6
  #ifndef _VERSION_H_
7
7
  #define _VERSION_H_
8
8
 
9
- #define JRUBY_LAUNCHER_VERSION "1.1.12"
9
+ #define JRUBY_LAUNCHER_VERSION "1.1.13"
10
10
 
11
11
  #endif // ! _VERSION_H_
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: jruby-launcher
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.1.12
4
+ version: 1.1.13
5
5
  platform: java
6
6
  authors:
7
7
  - Nick Sieger
@@ -9,7 +9,7 @@ authors:
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2020-03-09 00:00:00.000000000 Z
12
+ date: 2020-03-20 00:00:00.000000000 Z
13
13
  dependencies: []
14
14
  description: Builds and installs a native launcher for JRuby on your system
15
15
  email:
@@ -39,6 +39,11 @@ files:
39
39
  - lib/rubygems/defaults/jruby_native.rb
40
40
  - nbexecloader.h
41
41
  - ng.c
42
+ - pkg/jruby-launcher-1.1.12-java/extconf.rb
43
+ - pkg/jruby-launcher-1.1.12-java/lib/jruby-launcher.rb
44
+ - pkg/jruby-launcher-1.1.12-java/lib/rubygems/defaults/jruby_native.rb
45
+ - pkg/jruby-launcher-1.1.12-java/spec/launcher_spec.rb
46
+ - pkg/jruby-launcher-1.1.12-java/spec/spec_helper.rb
42
47
  - platformlauncher.cpp
43
48
  - platformlauncher.h
44
49
  - rb_w32_cmdvector.h