jruby-launcher 1.1.9-java → 1.1.15-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 +4 -4
- data/Makefile +3 -0
- data/Rakefile +1 -2
- data/argparser.cpp +55 -14
- data/argparser.h +1 -0
- data/extconf.rb +7 -0
- data/inc/Makefile-conf.mk +5 -0
- data/lib/jruby-launcher.rb +1 -1
- data/pkg/jruby-launcher-1.1.14-java/extconf.rb +12 -0
- data/pkg/{jruby-launcher-1.1.8-java → jruby-launcher-1.1.14-java}/lib/jruby-launcher.rb +1 -1
- data/pkg/{jruby-launcher-1.1.5-java → jruby-launcher-1.1.14-java}/lib/rubygems/defaults/jruby_native.rb +0 -0
- data/pkg/{jruby-launcher-1.1.5-java/pkg/jruby-launcher-1.1.5.pre-java → jruby-launcher-1.1.14-java}/spec/launcher_spec.rb +23 -0
- data/pkg/{jruby-launcher-1.1.5-java/pkg/jruby-launcher-1.1.5.pre-java → jruby-launcher-1.1.14-java}/spec/spec_helper.rb +0 -5
- data/platformlauncher.cpp +20 -5
- data/rb_w32_cmdvector.h +3 -3
- data/spec/launcher_spec.rb +33 -3
- data/spec/spec_helper.rb +0 -5
- data/unixlauncher.cpp +10 -0
- data/utilsfuncs.cpp +13 -1
- data/utilsfuncs.h +1 -0
- data/utilsfuncswin.cpp +20 -2
- data/version.h +1 -1
- metadata +8 -79
- data/pkg/jruby-launcher-1.1.5-java/extconf.rb +0 -5
- data/pkg/jruby-launcher-1.1.5-java/lib/jruby-launcher.rb +0 -3
- data/pkg/jruby-launcher-1.1.5-java/pkg/jruby-launcher-1.1.5.pre-java/extconf.rb +0 -5
- data/pkg/jruby-launcher-1.1.5-java/pkg/jruby-launcher-1.1.5.pre-java/lib/jruby-launcher.rb +0 -3
- data/pkg/jruby-launcher-1.1.5-java/pkg/jruby-launcher-1.1.5.pre-java/lib/rubygems/defaults/jruby_native.rb +0 -4
- data/pkg/jruby-launcher-1.1.5-java/spec/launcher_spec.rb +0 -258
- data/pkg/jruby-launcher-1.1.5-java/spec/spec_helper.rb +0 -81
- data/pkg/jruby-launcher-1.1.5.pre-java/extconf.rb +0 -5
- data/pkg/jruby-launcher-1.1.5.pre-java/lib/jruby-launcher.rb +0 -3
- data/pkg/jruby-launcher-1.1.5.pre-java/lib/rubygems/defaults/jruby_native.rb +0 -4
- data/pkg/jruby-launcher-1.1.5.pre-java/spec/launcher_spec.rb +0 -258
- data/pkg/jruby-launcher-1.1.5.pre-java/spec/spec_helper.rb +0 -81
- data/pkg/jruby-launcher-1.1.7-java/extconf.rb +0 -5
- data/pkg/jruby-launcher-1.1.7-java/lib/jruby-launcher.rb +0 -3
- data/pkg/jruby-launcher-1.1.7-java/lib/rubygems/defaults/jruby_native.rb +0 -4
- data/pkg/jruby-launcher-1.1.7-java/pkg/jruby-launcher-1.1.5-java/extconf.rb +0 -5
- data/pkg/jruby-launcher-1.1.7-java/pkg/jruby-launcher-1.1.5-java/lib/jruby-launcher.rb +0 -3
- data/pkg/jruby-launcher-1.1.7-java/pkg/jruby-launcher-1.1.5-java/lib/rubygems/defaults/jruby_native.rb +0 -4
- data/pkg/jruby-launcher-1.1.7-java/pkg/jruby-launcher-1.1.5-java/pkg/jruby-launcher-1.1.5.pre-java/extconf.rb +0 -5
- data/pkg/jruby-launcher-1.1.7-java/pkg/jruby-launcher-1.1.5-java/pkg/jruby-launcher-1.1.5.pre-java/lib/jruby-launcher.rb +0 -3
- data/pkg/jruby-launcher-1.1.7-java/pkg/jruby-launcher-1.1.5-java/pkg/jruby-launcher-1.1.5.pre-java/lib/rubygems/defaults/jruby_native.rb +0 -4
- data/pkg/jruby-launcher-1.1.7-java/pkg/jruby-launcher-1.1.5-java/pkg/jruby-launcher-1.1.5.pre-java/spec/launcher_spec.rb +0 -258
- data/pkg/jruby-launcher-1.1.7-java/pkg/jruby-launcher-1.1.5-java/pkg/jruby-launcher-1.1.5.pre-java/spec/spec_helper.rb +0 -81
- data/pkg/jruby-launcher-1.1.7-java/pkg/jruby-launcher-1.1.5-java/spec/launcher_spec.rb +0 -258
- data/pkg/jruby-launcher-1.1.7-java/pkg/jruby-launcher-1.1.5-java/spec/spec_helper.rb +0 -81
- data/pkg/jruby-launcher-1.1.7-java/pkg/jruby-launcher-1.1.5.pre-java/extconf.rb +0 -5
- data/pkg/jruby-launcher-1.1.7-java/pkg/jruby-launcher-1.1.5.pre-java/lib/jruby-launcher.rb +0 -3
- data/pkg/jruby-launcher-1.1.7-java/pkg/jruby-launcher-1.1.5.pre-java/lib/rubygems/defaults/jruby_native.rb +0 -4
- data/pkg/jruby-launcher-1.1.7-java/pkg/jruby-launcher-1.1.5.pre-java/spec/launcher_spec.rb +0 -258
- data/pkg/jruby-launcher-1.1.7-java/pkg/jruby-launcher-1.1.5.pre-java/spec/spec_helper.rb +0 -81
- data/pkg/jruby-launcher-1.1.7-java/spec/launcher_spec.rb +0 -258
- data/pkg/jruby-launcher-1.1.7-java/spec/spec_helper.rb +0 -81
- data/pkg/jruby-launcher-1.1.8-java/extconf.rb +0 -5
- data/pkg/jruby-launcher-1.1.8-java/lib/rubygems/defaults/jruby_native.rb +0 -4
- data/pkg/jruby-launcher-1.1.8-java/pkg/jruby-launcher-1.1.5-java/extconf.rb +0 -5
- data/pkg/jruby-launcher-1.1.8-java/pkg/jruby-launcher-1.1.5-java/lib/jruby-launcher.rb +0 -3
- data/pkg/jruby-launcher-1.1.8-java/pkg/jruby-launcher-1.1.5-java/lib/rubygems/defaults/jruby_native.rb +0 -4
- data/pkg/jruby-launcher-1.1.8-java/pkg/jruby-launcher-1.1.5-java/pkg/jruby-launcher-1.1.5.pre-java/extconf.rb +0 -5
- data/pkg/jruby-launcher-1.1.8-java/pkg/jruby-launcher-1.1.5-java/pkg/jruby-launcher-1.1.5.pre-java/lib/jruby-launcher.rb +0 -3
- data/pkg/jruby-launcher-1.1.8-java/pkg/jruby-launcher-1.1.5-java/pkg/jruby-launcher-1.1.5.pre-java/lib/rubygems/defaults/jruby_native.rb +0 -4
- data/pkg/jruby-launcher-1.1.8-java/pkg/jruby-launcher-1.1.5-java/pkg/jruby-launcher-1.1.5.pre-java/spec/launcher_spec.rb +0 -258
- data/pkg/jruby-launcher-1.1.8-java/pkg/jruby-launcher-1.1.5-java/pkg/jruby-launcher-1.1.5.pre-java/spec/spec_helper.rb +0 -81
- data/pkg/jruby-launcher-1.1.8-java/pkg/jruby-launcher-1.1.5-java/spec/launcher_spec.rb +0 -258
- data/pkg/jruby-launcher-1.1.8-java/pkg/jruby-launcher-1.1.5-java/spec/spec_helper.rb +0 -81
- data/pkg/jruby-launcher-1.1.8-java/pkg/jruby-launcher-1.1.5.pre-java/extconf.rb +0 -5
- data/pkg/jruby-launcher-1.1.8-java/pkg/jruby-launcher-1.1.5.pre-java/lib/jruby-launcher.rb +0 -3
- data/pkg/jruby-launcher-1.1.8-java/pkg/jruby-launcher-1.1.5.pre-java/lib/rubygems/defaults/jruby_native.rb +0 -4
- data/pkg/jruby-launcher-1.1.8-java/pkg/jruby-launcher-1.1.5.pre-java/spec/launcher_spec.rb +0 -258
- data/pkg/jruby-launcher-1.1.8-java/pkg/jruby-launcher-1.1.5.pre-java/spec/spec_helper.rb +0 -81
- data/pkg/jruby-launcher-1.1.8-java/pkg/jruby-launcher-1.1.7-java/extconf.rb +0 -5
- data/pkg/jruby-launcher-1.1.8-java/pkg/jruby-launcher-1.1.7-java/lib/jruby-launcher.rb +0 -3
- data/pkg/jruby-launcher-1.1.8-java/pkg/jruby-launcher-1.1.7-java/lib/rubygems/defaults/jruby_native.rb +0 -4
- data/pkg/jruby-launcher-1.1.8-java/pkg/jruby-launcher-1.1.7-java/pkg/jruby-launcher-1.1.5-java/extconf.rb +0 -5
- data/pkg/jruby-launcher-1.1.8-java/pkg/jruby-launcher-1.1.7-java/pkg/jruby-launcher-1.1.5-java/lib/jruby-launcher.rb +0 -3
- data/pkg/jruby-launcher-1.1.8-java/pkg/jruby-launcher-1.1.7-java/pkg/jruby-launcher-1.1.5-java/lib/rubygems/defaults/jruby_native.rb +0 -4
- data/pkg/jruby-launcher-1.1.8-java/pkg/jruby-launcher-1.1.7-java/pkg/jruby-launcher-1.1.5-java/pkg/jruby-launcher-1.1.5.pre-java/extconf.rb +0 -5
- data/pkg/jruby-launcher-1.1.8-java/pkg/jruby-launcher-1.1.7-java/pkg/jruby-launcher-1.1.5-java/pkg/jruby-launcher-1.1.5.pre-java/lib/jruby-launcher.rb +0 -3
- data/pkg/jruby-launcher-1.1.8-java/pkg/jruby-launcher-1.1.7-java/pkg/jruby-launcher-1.1.5-java/pkg/jruby-launcher-1.1.5.pre-java/lib/rubygems/defaults/jruby_native.rb +0 -4
- data/pkg/jruby-launcher-1.1.8-java/pkg/jruby-launcher-1.1.7-java/pkg/jruby-launcher-1.1.5-java/pkg/jruby-launcher-1.1.5.pre-java/spec/launcher_spec.rb +0 -258
- data/pkg/jruby-launcher-1.1.8-java/pkg/jruby-launcher-1.1.7-java/pkg/jruby-launcher-1.1.5-java/pkg/jruby-launcher-1.1.5.pre-java/spec/spec_helper.rb +0 -81
- data/pkg/jruby-launcher-1.1.8-java/pkg/jruby-launcher-1.1.7-java/pkg/jruby-launcher-1.1.5-java/spec/launcher_spec.rb +0 -258
- data/pkg/jruby-launcher-1.1.8-java/pkg/jruby-launcher-1.1.7-java/pkg/jruby-launcher-1.1.5-java/spec/spec_helper.rb +0 -81
- data/pkg/jruby-launcher-1.1.8-java/pkg/jruby-launcher-1.1.7-java/pkg/jruby-launcher-1.1.5.pre-java/extconf.rb +0 -5
- data/pkg/jruby-launcher-1.1.8-java/pkg/jruby-launcher-1.1.7-java/pkg/jruby-launcher-1.1.5.pre-java/lib/jruby-launcher.rb +0 -3
- data/pkg/jruby-launcher-1.1.8-java/pkg/jruby-launcher-1.1.7-java/pkg/jruby-launcher-1.1.5.pre-java/lib/rubygems/defaults/jruby_native.rb +0 -4
- data/pkg/jruby-launcher-1.1.8-java/pkg/jruby-launcher-1.1.7-java/pkg/jruby-launcher-1.1.5.pre-java/spec/launcher_spec.rb +0 -258
- data/pkg/jruby-launcher-1.1.8-java/pkg/jruby-launcher-1.1.7-java/pkg/jruby-launcher-1.1.5.pre-java/spec/spec_helper.rb +0 -81
- data/pkg/jruby-launcher-1.1.8-java/pkg/jruby-launcher-1.1.7-java/spec/launcher_spec.rb +0 -258
- data/pkg/jruby-launcher-1.1.8-java/pkg/jruby-launcher-1.1.7-java/spec/spec_helper.rb +0 -81
- data/pkg/jruby-launcher-1.1.8-java/spec/launcher_spec.rb +0 -258
- data/pkg/jruby-launcher-1.1.8-java/spec/spec_helper.rb +0 -81
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 0b6988d6ac03341b36b3f204165bee190f7f7ae0a73ad223527b7631bd4e5b80
|
4
|
+
data.tar.gz: 0c797f2e012c00217e9defc6081c69c636443ca836436d25fc21d95326c398c7
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 26b78fd8b5b97ac99c2d3822805ff6acaebdc39e9a015a0c99cbc4b8de563b6ebe34d09376d9a7a5c0759362e7dd97bdeffe5303aa91085c21a706e77a441964
|
7
|
+
data.tar.gz: 6f39b0b7f613069696db0acfd3494b029c14e7d847e7093fa8527cab76ff40ba3c61325bfb5b119e189103b2457eab2a50bd27feb52d3dae19079dbf41560371
|
data/Makefile
CHANGED
@@ -1,6 +1,8 @@
|
|
1
1
|
# These line gets substituted with the actual Config::CONFIG items location by extconf.rb
|
2
2
|
PREFIX = notspecified
|
3
3
|
BINDIR = $(PREFIX)/bin
|
4
|
+
JRUBY_VERSION = notspecified
|
5
|
+
JRUBY_MODULE = 1
|
4
6
|
INSTALLDIR = $(PREFIX)/lib/ruby/shared/rubygems/defaults
|
5
7
|
INSTALLDIR9000 = $(PREFIX)/lib/ruby/stdlib/rubygems/defaults
|
6
8
|
OLDINSTALLDIR = $(PREFIX)/lib/ruby/site_ruby/1.8/rubygems/defaults
|
@@ -112,6 +114,7 @@ include $(SUB_IMPLMK)
|
|
112
114
|
|
113
115
|
# Pick conf based on OS. for mingw64, must manually override for now.
|
114
116
|
ifeq ($(OS),Windows_NT)
|
117
|
+
CC=gcc
|
115
118
|
CONF=mingw
|
116
119
|
else
|
117
120
|
CONF=unix
|
data/Rakefile
CHANGED
@@ -28,12 +28,11 @@ task :gemspec => './lib/jruby-launcher.rb' do
|
|
28
28
|
s.extensions = ["extconf.rb"]
|
29
29
|
s.files = FileList["COPYING", "README.md", "Makefile", "Rakefile", "*.c", "*.cpp", "*.h", "inc/*.*", "**/*.rb", "resources/*.*"]
|
30
30
|
s.homepage = %q{http://jruby.org}
|
31
|
-
s.rubyforge_project = %q{jruby-extras}
|
32
31
|
end
|
33
32
|
end
|
34
33
|
|
35
34
|
desc "Create gem file"
|
36
|
-
task :package => [:update_version, :gemspec
|
35
|
+
task :package => [:update_version, :gemspec] do
|
37
36
|
Gem::PackageTask.new(@gemspec) do |pkg|
|
38
37
|
end
|
39
38
|
Rake::Task['gem'].invoke
|
data/argparser.cpp
CHANGED
@@ -10,6 +10,7 @@
|
|
10
10
|
#include <algorithm>
|
11
11
|
#include <unistd.h>
|
12
12
|
#include <limits>
|
13
|
+
#include <fstream>
|
13
14
|
#include "utilsfuncs.h"
|
14
15
|
#include "argparser.h"
|
15
16
|
#include "argnames.h"
|
@@ -247,9 +248,9 @@ bool ArgParser::parseArgs(int argc, char *argv[]) {
|
|
247
248
|
}
|
248
249
|
#endif
|
249
250
|
|
251
|
+
|
250
252
|
// Force OpenJDK-based JVMs to use /dev/urandom for random number generation
|
251
253
|
// See https://github.com/jruby/jruby/issues/4685 among others.
|
252
|
-
struct stat buffer;
|
253
254
|
if (access("/dev/urandom", R_OK) == 0) {
|
254
255
|
// OpenJDK tries really hard to prevent you from using urandom.
|
255
256
|
// See https://bugs.openjdk.java.net/browse/JDK-6202721
|
@@ -485,12 +486,46 @@ void ArgParser::prepareOptions() {
|
|
485
486
|
option += cmdName;
|
486
487
|
javaOptions.push_back(option);
|
487
488
|
|
488
|
-
if (
|
489
|
-
|
490
|
-
|
491
|
-
|
489
|
+
if (!bootClassPath.empty()) {
|
490
|
+
if (useModulePath) {
|
491
|
+
#ifdef JRUBY_MODULE
|
492
|
+
// When modules are present, use module path for the jruby libs (aka bootClassPath)
|
493
|
+
option = OPT_CMDLINE_MODULE_PATH;
|
494
|
+
#else
|
495
|
+
option = OPT_BOOT_CLASS_PATH;
|
496
|
+
#endif
|
497
|
+
} else {
|
498
|
+
option = OPT_BOOT_CLASS_PATH;
|
499
|
+
}
|
500
|
+
option += bootClassPath;
|
492
501
|
javaOptions.push_back(option);
|
493
|
-
}
|
502
|
+
}
|
503
|
+
|
504
|
+
if (useModulePath) {
|
505
|
+
string moduleOptsFile = platformDir + "/bin/.jruby.module_opts";
|
506
|
+
if (access(moduleOptsFile.c_str(), R_OK) == 0) {
|
507
|
+
logMsg("using @arguments file for Java module options");
|
508
|
+
javaOptions.push_back(string("@") + platformDir + "/bin/.jruby.module_opts");
|
509
|
+
} else {
|
510
|
+
// If .module_opts file is not detected, only add options if JRUBY_MODULE is defined.
|
511
|
+
// See extconf.rb for rules on which JRuby versions get JRUBY_MODULE.
|
512
|
+
#ifdef JRUBY_MODULE
|
513
|
+
logMsg("using hardcoded module options");
|
514
|
+
javaOptions.push_back("--add-opens");
|
515
|
+
javaOptions.push_back("java.base/java.io=org.jruby.dist");
|
516
|
+
javaOptions.push_back("--add-opens");
|
517
|
+
javaOptions.push_back("java.base/java.nio.channels=org.jruby.dist");
|
518
|
+
javaOptions.push_back("--add-opens");
|
519
|
+
javaOptions.push_back("java.base/sun.nio.ch=org.jruby.dist");
|
520
|
+
javaOptions.push_back("--add-opens");
|
521
|
+
javaOptions.push_back("java.management/sun.management=org.jruby.dist");
|
522
|
+
#else
|
523
|
+
logMsg("no JRuby module support detected, skipping module flags");
|
524
|
+
#endif
|
525
|
+
}
|
526
|
+
}
|
527
|
+
|
528
|
+
if (separateProcess) {
|
494
529
|
// When launching a separate process, use '-cp' which expands embedded wildcards
|
495
530
|
javaOptions.push_back(OPT_CMDLINE_CLASS_PATH);
|
496
531
|
javaOptions.push_back(classPath);
|
@@ -500,12 +535,6 @@ void ArgParser::prepareOptions() {
|
|
500
535
|
javaOptions.push_back(option);
|
501
536
|
}
|
502
537
|
|
503
|
-
if (!bootClassPath.empty()) {
|
504
|
-
option = OPT_BOOT_CLASS_PATH;
|
505
|
-
option += bootClassPath;
|
506
|
-
javaOptions.push_back(option);
|
507
|
-
}
|
508
|
-
|
509
538
|
javaOptions.insert(javaOptions.end(), userOptions.begin(), userOptions.end());
|
510
539
|
}
|
511
540
|
|
@@ -529,13 +558,25 @@ void ArgParser::useModulesIfPresent() {
|
|
529
558
|
|
530
559
|
if (jdkhome.empty()) {
|
531
560
|
logMsg("Unable to detect JPMS modules as JAVA_HOME is not specified");
|
532
|
-
} else if (access((jdkhome + "/
|
561
|
+
} else if (access((jdkhome + "/lib/modules").c_str(), R_OK) == 0 ||
|
562
|
+
releaseFileHasModules()) {
|
533
563
|
logMsg("JPMS jmods dir detected, using module flags");
|
534
|
-
noBootClassPath = 1;
|
535
564
|
useModulePath = 1;
|
536
565
|
}
|
537
566
|
}
|
538
567
|
|
568
|
+
bool ArgParser::releaseFileHasModules() {
|
569
|
+
string releaseFile = jdkhome + "/release";
|
570
|
+
std::string line;
|
571
|
+
ifstream in(releaseFile.c_str());
|
572
|
+
if (in.is_open()) {
|
573
|
+
while (getline(in,line)) {
|
574
|
+
if (line.find("MODULES") == 0) return true;
|
575
|
+
}
|
576
|
+
}
|
577
|
+
return false;
|
578
|
+
}
|
579
|
+
|
539
580
|
void ArgParser::constructBootClassPath() {
|
540
581
|
logMsg("constructBootClassPath()");
|
541
582
|
addedToBootCP.clear();
|
data/argparser.h
CHANGED
data/extconf.rb
CHANGED
@@ -1,5 +1,12 @@
|
|
1
1
|
mf = File.read('Makefile')
|
2
2
|
mf = mf.gsub(/^BINDIR\s*=.*$/, "BINDIR = #{RbConfig::CONFIG['bindir']}")
|
3
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
|
4
11
|
puts mf
|
5
12
|
File.open('Makefile', 'wb') {|f| f << mf}
|
data/inc/Makefile-conf.mk
CHANGED
data/lib/jruby-launcher.rb
CHANGED
@@ -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}
|
File without changes
|
@@ -1,3 +1,4 @@
|
|
1
|
+
require 'tmpdir'
|
1
2
|
require File.expand_path('../spec_helper.rb', __FILE__)
|
2
3
|
load File.expand_path('../../lib/jruby-launcher.rb', __FILE__)
|
3
4
|
|
@@ -255,4 +256,26 @@ describe "JRuby native launcher" do
|
|
255
256
|
it "should not crash on format-strings" do
|
256
257
|
jruby_launcher_args("-e %s%s%s%s%s 2>&1").should include('-e', '%s%s%s%s%s')
|
257
258
|
end
|
259
|
+
|
260
|
+
it "should use --module-path on java9+ jruby 9.2.1+" do
|
261
|
+
# versions prior to 9.2.1 do not set a predictable module name
|
262
|
+
skip unless (JRUBY_VERSION.split('.') <=> ['9', '2', '1']) >= 0
|
263
|
+
|
264
|
+
Dir.mktmpdir do |java_home|
|
265
|
+
FileUtils.mkdir_p(File.join(java_home, 'lib/modules'))
|
266
|
+
with_environment 'JAVA_HOME' => java_home do
|
267
|
+
jruby_launcher_args('').grep(/^--module-path=.*jruby.jar/).should_not be_empty
|
268
|
+
end
|
269
|
+
end
|
270
|
+
end
|
271
|
+
|
272
|
+
it "should not treat CLASSPATH entries as modules on java9+" do
|
273
|
+
Dir.mktmpdir do |java_home|
|
274
|
+
Dir.mkdir(File.join(java_home, 'jmods'))
|
275
|
+
with_environment 'JAVA_HOME' => java_home, 'CLASSPATH' => '/some/lib.jar' do
|
276
|
+
jruby_launcher_args('').grep(/^--module-path=.*\/some\/lib.jar/).should be_empty
|
277
|
+
classpath_arg(jruby_launcher_args('')).should =~ /\/some\/lib.jar/
|
278
|
+
end
|
279
|
+
end
|
280
|
+
end
|
258
281
|
end
|
@@ -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/
|
data/platformlauncher.cpp
CHANGED
@@ -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
|
-
|
151
|
-
|
152
|
-
|
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
|
-
|
157
|
-
java
|
170
|
+
if (java.empty()) {
|
171
|
+
printToConsole("No `java.exe' executable found on PATH.");
|
172
|
+
return 255;
|
158
173
|
}
|
159
174
|
|
160
175
|
prepareOptions();
|
data/rb_w32_cmdvector.h
CHANGED
@@ -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
|
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;
|
data/spec/launcher_spec.rb
CHANGED
@@ -1,3 +1,4 @@
|
|
1
|
+
require 'tmpdir'
|
1
2
|
require File.expand_path('../spec_helper.rb', __FILE__)
|
2
3
|
load File.expand_path('../../lib/jruby-launcher.rb', __FILE__)
|
3
4
|
|
@@ -20,11 +21,12 @@ describe "JRuby native launcher" do
|
|
20
21
|
end
|
21
22
|
|
22
23
|
it "should use $JAVACMD when JAVACMD is specified" do
|
23
|
-
|
24
|
+
javacmd_path = File.join("path", "to", "jato")
|
25
|
+
with_environment "JAVACMD" => javacmd_path do
|
24
26
|
if windows?
|
25
|
-
jruby_launcher_args("-v 2>&1").join.should =~
|
27
|
+
jruby_launcher_args("-v 2>&1").join.should =~ /#{javacmd_path}/
|
26
28
|
else
|
27
|
-
jruby_launcher_args("-v").first.should ==
|
29
|
+
jruby_launcher_args("-v").first.should == javacmd_path
|
28
30
|
end
|
29
31
|
end
|
30
32
|
end
|
@@ -179,6 +181,9 @@ describe "JRuby native launcher" do
|
|
179
181
|
|
180
182
|
# JRUBY-4706
|
181
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
|
+
|
182
187
|
args = jruby_launcher_args("-e true")
|
183
188
|
args.grep(/Xbootclasspath/).should_not be_empty
|
184
189
|
args = jruby_launcher_args("-Xnobootclasspath -e true")
|
@@ -235,6 +240,9 @@ describe "JRuby native launcher" do
|
|
235
240
|
after { FileUtils.rm_rf jruby_home }
|
236
241
|
|
237
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
|
+
|
238
246
|
with_environment "JRUBY_HOME" => jruby_home do
|
239
247
|
jruby_launcher_args("").should include("-Xbootclasspath/a:#{jruby_home}/lib/jruby.jar")
|
240
248
|
end
|
@@ -255,4 +263,26 @@ describe "JRuby native launcher" do
|
|
255
263
|
it "should not crash on format-strings" do
|
256
264
|
jruby_launcher_args("-e %s%s%s%s%s 2>&1").should include('-e', '%s%s%s%s%s')
|
257
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
|
258
288
|
end
|
data/spec/spec_helper.rb
CHANGED
@@ -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/
|
data/unixlauncher.cpp
CHANGED
@@ -46,6 +46,9 @@ int UnixLauncher::run(int argc, char* argv[], char* envp[]) {
|
|
46
46
|
|
47
47
|
if (getenv("JAVACMD") != NULL) {
|
48
48
|
java = getenv("JAVACMD");
|
49
|
+
if (java.find_last_of('/') == -1) {
|
50
|
+
java = findOnPath(java.c_str());
|
51
|
+
}
|
49
52
|
} else {
|
50
53
|
if (!jdkhome.empty()) {
|
51
54
|
java = jdkhome + "/bin/java";
|
@@ -64,6 +67,13 @@ int UnixLauncher::run(int argc, char* argv[], char* envp[]) {
|
|
64
67
|
return 255;
|
65
68
|
}
|
66
69
|
|
70
|
+
// still no jdk home, use java command to resolve it
|
71
|
+
if (jdkhome.empty()) {
|
72
|
+
java = resolveSymlinks(java);
|
73
|
+
int home_index = java.find_last_of('/', java.find_last_of('/') - 1);
|
74
|
+
jdkhome = java.substr(0, home_index);
|
75
|
+
}
|
76
|
+
|
67
77
|
prepareOptions();
|
68
78
|
|
69
79
|
list<string> commandLine;
|
data/utilsfuncs.cpp
CHANGED
@@ -54,6 +54,7 @@
|
|
54
54
|
#include <unistd.h>
|
55
55
|
#include "utilsfuncs.h"
|
56
56
|
#include "argnames.h"
|
57
|
+
#include <limits.h>
|
57
58
|
|
58
59
|
#ifndef WIN32
|
59
60
|
#include <sys/stat.h>
|
@@ -123,7 +124,6 @@ string findOnPath(const char* name) {
|
|
123
124
|
string path(getenv("PATH"));
|
124
125
|
size_t start = 0;
|
125
126
|
size_t sep;
|
126
|
-
char * found;
|
127
127
|
|
128
128
|
while (start < path.length()) {
|
129
129
|
sep = path.find(PATH_SEP, start);
|
@@ -147,6 +147,18 @@ string findOnPath(const char* name) {
|
|
147
147
|
return "";
|
148
148
|
}
|
149
149
|
|
150
|
+
string resolveSymlinks(string path) {
|
151
|
+
struct stat st;
|
152
|
+
char tmp[PATH_MAX + 1];
|
153
|
+
|
154
|
+
if (lstat(path.c_str(), &st) && st.st_mode & S_IFLNK) {
|
155
|
+
realpath(path.c_str(), tmp);
|
156
|
+
path = tmp;
|
157
|
+
}
|
158
|
+
|
159
|
+
return path;
|
160
|
+
}
|
161
|
+
|
150
162
|
const char* getSysError(char *str, int strSize) {
|
151
163
|
#ifdef WIN32
|
152
164
|
int err = GetLastError();
|