jruby-launcher 2.0.0.pre3-java → 2.0.2-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: 66622259dbdee0e98846fb968d3a563a76b6e5e2c2f7b5a582c1d7deea490f30
4
- data.tar.gz: 54d1ea1244e8a127b27b6b691da3bbe55e64709c9e04da10f8d68ebbe3a23c7f
3
+ metadata.gz: 6de73d28236b6f759f5aa5e49ad77b09e6d505bb645b789b3e24bae79aff1ae2
4
+ data.tar.gz: ccfee027b5c96afeb88e4b4c4e880d361ebbd382c7061209c3247a9bf6363998
5
5
  SHA512:
6
- metadata.gz: 88721cb3c1123f98074a748b7411d0be1cca648ec706d7dc77bea488af1eadb5405a76f8c42162aa195ccbe74ef5c6e927d2aab8cafcdd9f7906e949791ebc74
7
- data.tar.gz: ce7d34b70c77bbb60e631a0f4c7306c0d391c09bd9583b0361c10ff6dbeefa407141f4a74d622ceb12064f00c3ff10c04e47d73740b6da528399073e4c12e8e7
6
+ metadata.gz: e89921ec1bf976c2572ede7ca7c0f328759ca007a4e85dcc37b0af998e59e58f4ed895ce617b16e5cff1cdec909f8aed452cc5267f26d7021dd9ad9efaeb9a0b
7
+ data.tar.gz: d4189f74a4b08adc66e2ad23b6997604331ec02ac81ceed26fc05189c63e1cbdc838c4eed3759fdcdbfe317147379274d27286d2bd231fc6fe50ede23cc3f36b
data/Makefile CHANGED
@@ -37,9 +37,14 @@ install:
37
37
  @if [ x$(BINDIR) = xnotspecified/bin ]; then echo "Please define where to install by passing PREFIX=<jruby-home>."; exit 1; fi
38
38
  @if [ ! -w $(BINDIR) ]; then echo "'$(BINDIR)' does not exist or cannot write to '$(BINDIR)'."; exit 1; fi
39
39
  @if [ -f $(BINDIR)/jruby -a ! -w $(BINDIR)/jruby ]; then echo "Cannot write to '$(BINDIR)/jruby'."; exit 1; fi
40
- cp ./jruby $(BINDIR)/jruby
40
+ cp -a ./jruby $(BINDIR)/jruby
41
+ @if [ -f $(BINDIR)/ruby -a ! -w $(BINDIR)/ruby ]; then echo "Cannot write to '$(BINDIR)/ruby'."; exit 1; fi
42
+ cp -a ./jruby $(BINDIR)/ruby
41
43
  @if [ x$(PREFIX) = xnotspecified ]; then echo "Please define where to install by passing PREFIX=<jruby-home>."; exit 1; fi
42
- @if [ ! -f $(BINDIR)/jruby.sh ]; then cp ./exe/jruby.sh $(BINDIR)/jruby.sh; fi
44
+ # Restore jruby.sh if it has been deleted
45
+ @if [ ! -f $(BINDIR)/jruby.sh ]; then cp -a ./exe/jruby.sh $(BINDIR)/jruby.sh; fi
46
+ # Install a backup jruby.sh in case it is deleted later
47
+ cp -a ./exe/jruby.sh $(BINDIR)/jruby.sh.bak
43
48
 
44
49
  test:
45
50
  $(RAKE)
@@ -97,7 +102,7 @@ include $(SUB_IMPLMK)
97
102
  # Pick conf based on OS. for mingw64, must manually override for now.
98
103
  ifeq ($(OS),Windows_NT)
99
104
  CC=gcc
100
- CONF=mingw
105
+ CONF=mingw64
101
106
  else
102
107
  CONF=unix
103
108
  endif
data/exe/jruby.sh CHANGED
@@ -507,23 +507,35 @@ fi
507
507
  # shellcheck source=/dev/null
508
508
  if [ -f "$JAVA_HOME/release" ]; then
509
509
  java_version=$(. "$JAVA_HOME/release" && echo "${JAVA_VERSION-}")
510
- if echo "${java_version}" | grep -q "1.8.\\.*"; then
511
- java_version=8
512
- fi
510
+
511
+ # convert version to major, considering 1.8 as 8
512
+ case $java_version in
513
+ 1.8 | 1.8.*) java_major=8 ;;
514
+ *) java_major=${java_version%%.*} ;;
515
+ esac
513
516
  else
514
- java_version=8
517
+ # assume Java 8 if no release file
518
+ java_version=1.8
519
+ java_major=8
515
520
  fi
521
+
516
522
  # shellcheck source=/dev/null
517
- if [ -f "$JRUBY_HOME/bin/.java-version" ]; then
518
- minimum_java_version=$(. "$JRUBY_HOME/bin/.java-version" && echo "${JRUBY_MINIMUM_JAVA_VERSION-}")
523
+ if [ -f "$JRUBY_HOME/bin/.java-version" ] && . "$JRUBY_HOME/bin/.java-version" && [ "${JRUBY_MINIMUM_JAVA_VERSION-}" ]; then
524
+ minimum_java_version=$JRUBY_MINIMUM_JAVA_VERSION
519
525
  else
520
526
  # Only 9.4.12.0 and earlier will have shipped without a .java-version file, so fall back on minimum of 8
521
527
  minimum_java_version=8
522
528
  fi
523
529
  add_log "Detected Java version: $java_version"
524
530
 
525
- # Split version out for integer comparisons
526
- java_major=${java_version%%.*}
531
+ # Present a useful error if running a Java version lower than bin/.java-version
532
+ if [ "$java_major" -lt "$minimum_java_version" ]; then
533
+ echo "This version of JRuby requires Java ${minimum_java_version}+."
534
+ echo "Make sure JAVA_HOME points at JDK ${minimum_java_version} or higher"
535
+ echo "Detected Java version: $java_version"
536
+ echo "Detected JAVA_HOME: $JAVA_HOME"
537
+ exit 1
538
+ fi
527
539
 
528
540
  # AppCDS support
529
541
  if [ "$java_major" -ge 13 ] && exists "$JAVA_HOME"/lib/server/*.jsa; then
@@ -536,14 +548,6 @@ readonly java_has_appcds
536
548
  # Default to using AppCDS if available
537
549
  use_jsa_file="$java_has_appcds"
538
550
 
539
- # Present a useful error if running a Java version lower than bin/.java-version
540
- if [ "$java_major" -lt "$minimum_java_version" ]; then
541
- echo "This version of JRuby requires Java ${minimum_java_version}+."
542
- echo "Make sure JAVA_HOME points at JDK ${minimum_java_version} or higher"
543
- echo "Current JAVA_HOME: $JAVA_HOME"
544
- exit 1
545
- fi
546
-
547
551
  # AppCDS autogeneration
548
552
  if [ "$java_major" -ge 19 ]; then
549
553
  java_has_appcds_autogenerate=true
@@ -1,3 +1,3 @@
1
1
  module JRubyLauncher
2
- VERSION = "2.0.0.pre3"
2
+ VERSION = "2.0.2"
3
3
  end
@@ -0,0 +1,12 @@
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
+ # 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 =")
10
+ end
11
+ puts mf
12
+ File.open('Makefile', 'wb') {|f| f << mf}
@@ -0,0 +1,3 @@
1
+ module JRubyLauncher
2
+ VERSION = "2.0.2"
3
+ end
@@ -0,0 +1,288 @@
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", if: /Windows/.match?(ENV_JAVA['os.name']) 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
+ javacmd_path = File.join("path", "to", "jato")
25
+ with_environment "JAVACMD" => javacmd_path do
26
+ if windows?
27
+ jruby_launcher_args("-v 2>&1").join.should =~ /#{javacmd_path}/
28
+ else
29
+ jruby_launcher_args("-v").first.should == javacmd_path
30
+ end
31
+ end
32
+ end
33
+
34
+ it "should use $JAVA_HOME/bin/java when JAVA_HOME is specified" do
35
+ with_environment "JAVA_HOME" => File.join("some", "java", "home") do
36
+ if windows?
37
+ jruby_launcher_args("-v 2>&1").join.should =~ %r{some/java/home}
38
+ else
39
+ jruby_launcher_args("-v").first.should == File.join("some", "java", "home", "bin", "java")
40
+ end
41
+ end
42
+ end
43
+
44
+ it "should use -Xjdkhome argument above JAVA_HOME" do
45
+ with_environment "JAVA_HOME" => File.join("env", "java", "home") do
46
+ if windows?
47
+ jruby_launcher_args("-Xjdkhome some/java/home 2>&1").join.should =~ %r{some/java/home}
48
+ else
49
+ jruby_launcher_args("-Xjdkhome some/java/home").first.should == File.join("some", "java", "home", "bin", "java")
50
+ end
51
+ end
52
+ end
53
+
54
+ it "should drop the backslashes at the end of JAVA_HOME" do
55
+ with_environment "JAVA_HOME" => File.join("some", "java", "home\\\\") do
56
+ if windows?
57
+ jruby_launcher_args("").join.should =~ %r{some/java/home}
58
+ else
59
+ jruby_launcher_args("").first.should == File.join("some", "java", "home", "bin", "java")
60
+ end
61
+ end
62
+ end
63
+
64
+ it "should complain about a missing log argument" do
65
+ jruby_launcher("-Xtrace 2>&1").should =~ /Argument is missing for "-Xtrace"/
66
+ jruby_launcher("-Xtrace -- 2>&1").should =~ /Argument is missing for "-Xtrace"/
67
+ end
68
+
69
+ it "should complain about a missing jdkhome argument" do
70
+ jruby_launcher("-Xjdkhome 2>&1").should =~ /Argument is missing/
71
+ jruby_launcher("-Xjdkhome -- 2>&1").should =~ /Argument is missing/
72
+ end
73
+
74
+ it "should complain about a missing classpath append argument" do
75
+ jruby_launcher("-Xcp:a 2>&1").should =~ /Argument is missing/
76
+ jruby_launcher("-Xcp:a -- 2>&1").should =~ /Argument is missing/
77
+ end
78
+
79
+ it "should run nailgun server with --ng-server option" do
80
+ jruby_launcher_args("--ng-server").last.should == "com/martiansoftware/nailgun/NGServer"
81
+ end
82
+
83
+ it "should run nailgun client with --ng option" do
84
+ jruby_launcher_args('--ng -e "puts 1"').should == ["org.jruby.util.NailMain", "-e", "puts 1"]
85
+ end
86
+
87
+ it "should handle -J JVM options" do
88
+ jruby_launcher_args("-J-Darg1=value1 -J-Darg2=value2").should include("-Darg1=value1", "-Darg2=value2")
89
+ end
90
+
91
+ it "should pass -Xprop.erty=value as -J-Djruby.prop.erty=value" do
92
+ jruby_launcher_args("-Xprop.erty=value").should include("-Djruby.prop.erty=value")
93
+ end
94
+
95
+ it "should pass -Xproperties as --properties" do
96
+ jruby_launcher_args("-Xproperties").should include("--properties")
97
+ end
98
+
99
+ it "should allow max heap to be overridden" do
100
+ jruby_launcher_args("-J-Xmx256m").should include("-Xmx256m")
101
+ end
102
+
103
+ it "should default to 2048k max stack" do
104
+ jruby_launcher_args("").should include("-Xss2048k")
105
+ end
106
+
107
+ it "should allow max stack to be overridden" do
108
+ jruby_launcher_args("-J-Xss512k").should include("-Xss512k")
109
+ end
110
+
111
+ it "should add the contents of the CLASSPATH environment variable" do
112
+ with_environment "CLASSPATH" => "some.jar" do
113
+ classpath_arg(jruby_launcher_args("")).should =~ /some.jar/
114
+ end
115
+ end
116
+
117
+ it "should add the classpath elements in proper order" do
118
+ s = File::PATH_SEPARATOR
119
+ with_environment "CLASSPATH" => "some-env.jar" do
120
+ args = jruby_launcher_args("-Xcp:a some-other.jar -Xcp:p some.jar")
121
+ classpath_arg(args).should =~ /some.jar.*#{s}some-env.jar#{s}some-other.jar/
122
+ end
123
+ end
124
+
125
+ it "should use the --server compiler" do
126
+ jruby_launcher_args("--server").should include("-server")
127
+ end
128
+
129
+ it "should use the --client compiler" do
130
+ jruby_launcher_args("--client").should include("-client")
131
+ end
132
+
133
+ it "should set the JMX settings when --manage is present" do
134
+ jruby_launcher_args("--manage").should include("-Dcom.sun.management.jmxremote", "-Djruby.management.enabled=true")
135
+ end
136
+
137
+ it "should set the headless flag when --headless is present" do
138
+ jruby_launcher_args("--headless").should include("-Djava.awt.headless=true")
139
+ end
140
+
141
+ it "should pass -Xprof when --sample is present" do
142
+ jruby_launcher_args("--sample").should include("-Xprof")
143
+ end
144
+
145
+ it "should stop argument processing when a -- is seen" do
146
+ jruby_launcher_args("-- -Xhelp -Xtrace --headless").should include("-Xhelp", "-Xtrace", "--headless")
147
+ end
148
+
149
+ # JRUBY-4151
150
+ it "should properly handle single quotes" do
151
+ jruby_launcher_args("-e 'ABC DEF'").should include("ABC DEF")
152
+ end
153
+
154
+ # JRUBY-4581
155
+ it "should prepend JRUBY_OPTS to the start of the argument list to process" do
156
+ with_environment "JRUBY_OPTS" => "--server -J-Dsome.key=val -rubygems" do
157
+ jruby_launcher_args("-e 'ABC DEF'").should include("-server", "-Dsome.key=val", "-rubygems", "-e", "ABC DEF")
158
+ end
159
+ end
160
+
161
+ # JRUBY-4611
162
+ it "stops argument processing on first non-option argument" do
163
+ jruby_launcher_args("foo.rb --sample")[-2..-1].should == ["foo.rb", "--sample"]
164
+ end
165
+
166
+ # JRUBY-4608
167
+ if RbConfig::CONFIG['target_os'] =~ /darwin/i
168
+ it "includes file.encoding=UTF-8 on Mac if JAVA_ENCODING is not set" do
169
+ jruby_launcher_args("-e true").should include("-Dfile.encoding=UTF-8")
170
+ with_environment "JAVA_ENCODING" => "MacRoman" do
171
+ jruby_launcher_args("-e true").should_not include("-Dfile.encoding=UTF-8")
172
+ end
173
+ end
174
+ end
175
+
176
+ it "does not crash on empty args" do
177
+ jruby_launcher_args("-e ''").should include("-e")
178
+ jruby_launcher("-Xtrace '' 2>&1").should =~ /-Xtrace/
179
+ jruby_launcher("-Xjdkhome '' 2>&1").should =~ /-Xjdkhome/
180
+ end
181
+
182
+ # JRUBY-4706
183
+ it "should put JRuby on regular classpath when -Xnobootclasspath is used" do
184
+ # Java 9+ do not like bootclasspath so we do not use it
185
+ skip if ENV_JAVA['java.specification.version'].to_i >= 9
186
+
187
+ args = jruby_launcher_args("-e true")
188
+ args.grep(/Xbootclasspath/).should_not be_empty
189
+ args = jruby_launcher_args("-Xnobootclasspath -e true")
190
+ args.grep(/Xbootclasspath/).should be_empty
191
+ end
192
+
193
+ it "should put JRuby on regular classpath when VERIFY_JRUBY is set" do
194
+ with_environment "VERIFY_JRUBY" => "true" do
195
+ args = jruby_launcher_args("-e true")
196
+ args.grep(/Xbootclasspath/).should be_empty
197
+ end
198
+ end
199
+
200
+ # JRUBY-4709
201
+ it "should include a bare : or ; at the end of the classpath, to include PWD in the path" do
202
+ classpath_arg(jruby_launcher_args("-Xnobootclasspath -e true")).should =~
203
+ if windows?
204
+ /;$/
205
+ else
206
+ /:$/
207
+ end
208
+ end
209
+
210
+ # JRUBY-6016
211
+ it "should honor JAVA_MEM" do
212
+ with_environment "JAVA_MEM" => "-Xmx768m" do
213
+ jruby_launcher_args("").should include("-Xmx768m")
214
+ end
215
+ end
216
+
217
+ it "should honor JAVA_STACK" do
218
+ with_environment "JAVA_STACK" => "-Xss3072k" do
219
+ jruby_launcher_args("").should include("-Xss3072k")
220
+ end
221
+ end
222
+
223
+ it "should honor JRUBY_HOME" do
224
+ with_environment "JRUBY_HOME" => "/tmp" do
225
+ jruby_launcher_args("").should include("-Djruby.home=/tmp")
226
+ end
227
+ end
228
+
229
+ context "JRUBY_HOME set and JRUBY_HOME/lib/jruby.jar exists" do
230
+ let(:jruby_home) do
231
+ require 'tempfile'
232
+ t = Tempfile.new("jruby_home")
233
+ t.path.tap { t.close! }
234
+ end
235
+
236
+ before do
237
+ FileUtils.mkdir_p(File.join(jruby_home, "lib"))
238
+ FileUtils.touch(File.join(jruby_home, "lib", "jruby.jar"))
239
+ end
240
+ after { FileUtils.rm_rf jruby_home }
241
+
242
+ it "should add jruby.jar to the bootclasspath" do
243
+ # Java 9+ do not like bootclasspath so we do not use it
244
+ skip if ENV_JAVA['java.specification.version'].to_i >= 9
245
+
246
+ with_environment "JRUBY_HOME" => jruby_home do
247
+ jruby_launcher_args("").should include("-Xbootclasspath/a:#{jruby_home}/lib/jruby.jar")
248
+ end
249
+ end
250
+ end
251
+
252
+ it "should place user-supplied options after default options" do
253
+ args = jruby_launcher_args("-J-Djruby.home=/tmp")
254
+ home_args = args.select {|x| x =~ /^-Djruby\.home/ }
255
+ home_args.length.should == 2
256
+ home_args.last.should == "-Djruby.home=/tmp"
257
+ end
258
+
259
+ it "should print the version" do
260
+ jruby_launcher("-Xversion 2>&1").should =~ /Launcher Version #{JRubyLauncher::VERSION}/
261
+ end
262
+
263
+ it "should not crash on format-strings" do
264
+ jruby_launcher_args("-e %s%s%s%s%s 2>&1").should include('-e', '%s%s%s%s%s')
265
+ end
266
+
267
+ it "should use --module-path on java9+ jruby 9.2.1+" do
268
+ # versions prior to 9.2.1 do not set a predictable module name
269
+ skip unless (JRUBY_VERSION.split('.') <=> ['9', '2', '1']) >= 0
270
+
271
+ Dir.mktmpdir do |java_home|
272
+ FileUtils.mkdir_p(File.join(java_home, 'lib/modules'))
273
+ with_environment 'JAVA_HOME' => java_home do
274
+ jruby_launcher_args('').grep(/^--module-path=.*jruby.jar/).should_not be_empty
275
+ end
276
+ end
277
+ end
278
+
279
+ it "should not treat CLASSPATH entries as modules on java9+" do
280
+ Dir.mktmpdir do |java_home|
281
+ Dir.mkdir(File.join(java_home, 'jmods'))
282
+ with_environment 'JAVA_HOME' => java_home, 'CLASSPATH' => '/some/lib.jar' do
283
+ jruby_launcher_args('').grep(/^--module-path=.*\/some\/lib.jar/).should be_empty
284
+ classpath_arg(jruby_launcher_args('')).should =~ /\/some\/lib.jar/
285
+ end
286
+ end
287
+ end
288
+ 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
@@ -1,8 +1,9 @@
1
1
  require 'tmpdir'
2
+ require 'rbconfig'
2
3
  require File.expand_path('../spec_helper.rb', __FILE__)
3
4
  load File.expand_path('../../lib/jruby-launcher.rb', __FILE__)
4
5
 
5
- describe "JRuby native launcher", if: /Windows/.match?(ENV_JAVA['os.name']) do
6
+ describe "JRuby native launcher", if: /mswin/.match?(RbConfig::CONFIG['host_os']) do
6
7
  it "should run org.jruby.Main" do
7
8
  jruby_launcher_args("").last.should == "org/jruby/Main"
8
9
  end
data/unixlauncher.c CHANGED
@@ -13,8 +13,10 @@
13
13
  * contained within it.
14
14
  */
15
15
 
16
- static const char script_name[] = "jruby.sh";
16
+ #define LENGTH(a) (sizeof(a) / sizeof(0[a]))
17
17
 
18
+ static const char *script_names[] = { "jruby.sh", "jruby.sh.bak" };
19
+ static const char *no_scripts_error = "jruby.sh or jruby.sh.bak";
18
20
 
19
21
  static char *which(const char *const executable) {
20
22
  const size_t exe_length = strlen(executable);
@@ -31,8 +33,7 @@ static char *which(const char *const executable) {
31
33
  dirs[dirs_length] = ':';
32
34
 
33
35
  size_t dir_head = 0;
34
- size_t i = 0;
35
- do {
36
+ for (size_t i = 0; i <= dirs_length; i++) {
36
37
  if (dirs[i] == ':') {
37
38
  // Declare convenient path variables
38
39
  char *const dir = dirs + dir_head;
@@ -59,7 +60,7 @@ static char *which(const char *const executable) {
59
60
 
60
61
  dir_head = i + 1;
61
62
  }
62
- } while (dirs[i++]);
63
+ };
63
64
 
64
65
  // Lookup has failed, free if necessary and return NULL
65
66
  if (exe_path != NULL) {
@@ -100,7 +101,7 @@ int unixlauncher_run(int argc, char *argv[], char *envp[]) {
100
101
  self_path = which(argv[0]);
101
102
 
102
103
  if (self_path == NULL) {
103
- fprintf(stderr, "Error: Could not find %s executable\n", script_name);
104
+ fprintf(stderr, "Error: Could not find %s executable\n", argv[0]);
104
105
  return 1;
105
106
  }
106
107
 
@@ -118,25 +119,30 @@ int unixlauncher_run(int argc, char *argv[], char *envp[]) {
118
119
  }
119
120
  size_t script_dir_length = strlen(script_dir);
120
121
 
121
- // Allocate space for complete script path
122
- size_t script_path_length = strlen(script_name) + script_dir_length + 1;
123
- // Leave space for null terminator
124
- char *script_path = malloc(script_path_length + 1);
122
+ // Try main script and backup script before giving up
123
+ for (int i = 0; i < LENGTH(script_names); i++) {
124
+ const char *script_name = script_names[i];
125
125
 
126
- // Concatenate script dir and script name
127
- memcpy(script_path, script_dir, script_dir_length);
128
- script_path[script_dir_length] = '/';
129
- memcpy(script_path + script_dir_length + 1, script_name, strlen(script_name));
130
- script_path[script_path_length] = '\0';
126
+ // Allocate space for complete script path
127
+ size_t script_path_length = strlen(script_name) + script_dir_length + 1;
128
+ // Leave space for null terminator
129
+ char *script_path = malloc(script_path_length + 1);
131
130
 
132
- // Reuse argv for script command line
133
- argv[0] = script_path;
134
- int ret = execv(argv[0], argv);
131
+ // Concatenate script dir and script name
132
+ memcpy(script_path, script_dir, script_dir_length);
133
+ script_path[script_dir_length] = '/';
134
+ memcpy(script_path + script_dir_length + 1, script_name, strlen(script_name));
135
+ script_path[script_path_length] = '\0';
135
136
 
136
- if (ret < 0) {
137
- fprintf(stderr, "%s: %s: %s\n", original_self, strerror(errno), script_path);
137
+ // Reuse argv for script command line
138
+ argv[0] = script_path;
139
+ execv(argv[0], argv);
140
+
141
+ free(script_path);
138
142
  }
139
143
 
140
- free(script_path);
144
+ // If we get here neither script was available, so we error
145
+ fprintf(stderr, "%s: No executable %s found in %s\n", original_self, no_scripts_error, script_dir);
146
+
141
147
  return EXIT_FAILURE;
142
148
  }
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 "2.0.0.pre3"
9
+ #define JRUBY_LAUNCHER_VERSION "2.0.2"
10
10
 
11
11
  #endif // ! _VERSION_H_
metadata CHANGED
@@ -1,15 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: jruby-launcher
3
3
  version: !ruby/object:Gem::Version
4
- version: 2.0.0.pre3
4
+ version: 2.0.2
5
5
  platform: java
6
6
  authors:
7
7
  - Nick Sieger
8
8
  - Vladimir Sizikov
9
- autorequire:
10
9
  bindir: bin
11
10
  cert_chain: []
12
- date: 2025-04-08 00:00:00.000000000 Z
11
+ date: 2025-07-09 00:00:00.000000000 Z
13
12
  dependencies: []
14
13
  description: Builds and installs a native launcher for JRuby on your system
15
14
  email:
@@ -39,6 +38,10 @@ files:
39
38
  - lib/jruby-launcher.rb
40
39
  - nbexecloader.h
41
40
  - ng.c
41
+ - pkg/jruby-launcher-2.0.1-java/extconf.rb
42
+ - pkg/jruby-launcher-2.0.1-java/lib/jruby-launcher.rb
43
+ - pkg/jruby-launcher-2.0.1-java/spec/launcher_spec.rb
44
+ - pkg/jruby-launcher-2.0.1-java/spec/spec_helper.rb
42
45
  - platformlauncher.cpp
43
46
  - platformlauncher.h
44
47
  - rb_w32_cmdvector.h
@@ -56,7 +59,6 @@ files:
56
59
  homepage: http://jruby.org
57
60
  licenses: []
58
61
  metadata: {}
59
- post_install_message:
60
62
  rdoc_options: []
61
63
  require_paths:
62
64
  - lib
@@ -67,12 +69,11 @@ required_ruby_version: !ruby/object:Gem::Requirement
67
69
  version: '0'
68
70
  required_rubygems_version: !ruby/object:Gem::Requirement
69
71
  requirements:
70
- - - ">"
72
+ - - ">="
71
73
  - !ruby/object:Gem::Version
72
- version: 1.3.1
74
+ version: '0'
73
75
  requirements: []
74
- rubygems_version: 3.0.3.1
75
- signing_key:
76
+ rubygems_version: 3.6.3
76
77
  specification_version: 4
77
78
  summary: Native launcher for JRuby
78
79
  test_files: []