jruby-launcher 1.1.12-java → 1.1.17-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: 362ec35e0d3c674dc7eca8aa2df8ccd97b183dc5a8caa8490666149f4c41c70e
4
+ data.tar.gz: ed87dade0caf41331b0ad7c149191bf2dd5cb352f79c7f5a93a2e6e3c45e9966
5
5
  SHA512:
6
- metadata.gz: 4b1893448084229a3d7949f3579e1a949ecf5441eb0d94004cc397695afe8e7fd75a8a91d8f391dfed88e2c1bc00bbec1ae9aaab123d758634ebbc4211e8be3d
7
- data.tar.gz: 9fefa739941cd98038b419337b4b6e0a455fbfaee64ca0060c01d34cff002e2186273501fd515d2b537db53cebe8542aea49cbccf50748729b92faed3ecdc357
6
+ metadata.gz: 6444e3b8be2e0389634a54070e83a2cc252eec656704847f43a964e15c8dfaeb5bd0e4b68712a46a0b60c6a72c4fced3353a23c843bf1a4ed24b243d90fbdb8a
7
+ data.tar.gz: b2053acbaf369dd76b40fb2d55644ccaa2c14012db24bf9c2826667e4532a181cd9d2aa00114ce7ebc381e6d63628df6e8967c60647aed031065888470a1048b
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
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"
@@ -250,7 +251,6 @@ bool ArgParser::parseArgs(int argc, char *argv[]) {
250
251
 
251
252
  // Force OpenJDK-based JVMs to use /dev/urandom for random number generation
252
253
  // See https://github.com/jruby/jruby/issues/4685 among others.
253
- struct stat buffer;
254
254
  if (access("/dev/urandom", R_OK) == 0) {
255
255
  // OpenJDK tries really hard to prevent you from using urandom.
256
256
  // See https://bugs.openjdk.java.net/browse/JDK-6202721
@@ -488,8 +488,12 @@ void ArgParser::prepareOptions() {
488
488
 
489
489
  if (!bootClassPath.empty()) {
490
490
  if (useModulePath) {
491
+ #ifdef JRUBY_MODULE
491
492
  // When modules are present, use module path for the jruby libs (aka bootClassPath)
492
493
  option = OPT_CMDLINE_MODULE_PATH;
494
+ #else
495
+ option = OPT_BOOT_CLASS_PATH;
496
+ #endif
493
497
  } else {
494
498
  option = OPT_BOOT_CLASS_PATH;
495
499
  }
@@ -554,12 +558,25 @@ void ArgParser::useModulesIfPresent() {
554
558
 
555
559
  if (jdkhome.empty()) {
556
560
  logMsg("Unable to detect JPMS modules as JAVA_HOME is not specified");
557
- } else if (access((jdkhome + "/jmods").c_str(), R_OK) == 0) {
561
+ } else if (access((jdkhome + "/lib/modules").c_str(), R_OK) == 0 ||
562
+ releaseFileHasModules()) {
558
563
  logMsg("JPMS jmods dir detected, using module flags");
559
564
  useModulePath = 1;
560
565
  }
561
566
  }
562
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
+
563
580
  void ArgParser::constructBootClassPath() {
564
581
  logMsg("constructBootClassPath()");
565
582
  addedToBootCP.clear();
data/argparser.h CHANGED
@@ -54,6 +54,7 @@ protected:
54
54
  void addOptionsToCommandLine(std::list<std::string> & commandLine);
55
55
  bool endsWith(const std::string &string, const std::string &end);
56
56
  void useModulesIfPresent();
57
+ bool releaseFileHasModules();
57
58
 
58
59
  protected:
59
60
  bool separateProcess;
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.17"
3
3
  end
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
- 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();
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, **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;
@@ -21,11 +21,12 @@ describe "JRuby native launcher" do
21
21
  end
22
22
 
23
23
  it "should use $JAVACMD when JAVACMD is specified" do
24
- with_environment "JAVACMD" => File.join("jato") do
24
+ javacmd_path = File.join("path", "to", "jato")
25
+ with_environment "JAVACMD" => javacmd_path do
25
26
  if windows?
26
- jruby_launcher_args("-v 2>&1").join.should =~ %r{jato}
27
+ jruby_launcher_args("-v 2>&1").join.should =~ /#{javacmd_path}/
27
28
  else
28
- jruby_launcher_args("-v").first.should == File.join("jato")
29
+ jruby_launcher_args("-v").first.should == javacmd_path
29
30
  end
30
31
  end
31
32
  end
@@ -180,6 +181,9 @@ describe "JRuby native launcher" do
180
181
 
181
182
  # JRUBY-4706
182
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
+
183
187
  args = jruby_launcher_args("-e true")
184
188
  args.grep(/Xbootclasspath/).should_not be_empty
185
189
  args = jruby_launcher_args("-Xnobootclasspath -e true")
@@ -236,6 +240,9 @@ describe "JRuby native launcher" do
236
240
  after { FileUtils.rm_rf jruby_home }
237
241
 
238
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
+
239
246
  with_environment "JRUBY_HOME" => jruby_home do
240
247
  jruby_launcher_args("").should include("-Xbootclasspath/a:#{jruby_home}/lib/jruby.jar")
241
248
  end
@@ -257,9 +264,12 @@ describe "JRuby native launcher" do
257
264
  jruby_launcher_args("-e %s%s%s%s%s 2>&1").should include('-e', '%s%s%s%s%s')
258
265
  end
259
266
 
260
- it "should use --module-path on java9+" do
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
+
261
271
  Dir.mktmpdir do |java_home|
262
- Dir.mkdir(File.join(java_home, 'jmods'))
272
+ FileUtils.mkdir_p(File.join(java_home, 'lib/modules'))
263
273
  with_environment 'JAVA_HOME' => java_home do
264
274
  jruby_launcher_args('').grep(/^--module-path=.*jruby.jar/).should_not be_empty
265
275
  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,19 @@ string findOnPath(const char* name) {
147
147
  return "";
148
148
  }
149
149
 
150
+ string resolveSymlinks(string path) {
151
+ #ifndef WIN32
152
+ struct stat st;
153
+ char tmp[PATH_MAX + 1];
154
+
155
+ if (lstat(path.c_str(), &st) == 0 && (st.st_mode & S_IFMT) == S_IFLNK) {
156
+ realpath(path.c_str(), tmp);
157
+ path = tmp;
158
+ }
159
+ #endif
160
+ return path;
161
+ }
162
+
150
163
  const char* getSysError(char *str, int strSize) {
151
164
  #ifdef WIN32
152
165
  int err = GetLastError();
data/utilsfuncs.h CHANGED
@@ -57,6 +57,7 @@ bool printToConsole(const char *msg);
57
57
  char** convertToArgvArray(std::list<std::string> args);
58
58
  void addToArgList(std::list<std::string> & args, int argc, char ** argv);
59
59
  std::string findOnPath(const char* name);
60
+ std::string resolveSymlinks(std::string name);
60
61
  bool checkDirectory(const char* path);
61
62
  void printListToConsole(std::list<std::string> l);
62
63
  std::string trimTrailingBackslashes(std::string orig);
data/utilsfuncswin.cpp CHANGED
@@ -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.17"
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.17
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: 2021-06-07 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:
@@ -71,7 +71,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
71
71
  - !ruby/object:Gem::Version
72
72
  version: '0'
73
73
  requirements: []
74
- rubygems_version: 3.0.6
74
+ rubygems_version: 3.1.6
75
75
  signing_key:
76
76
  specification_version: 4
77
77
  summary: Native launcher for JRuby