jruby-launcher 1.0-java → 1.0.1-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.
- data/Rakefile +30 -15
- data/argnames.h +2 -4
- data/argparser.cpp +32 -12
- data/argparser.h +1 -1
- data/lib/jruby-launcher.rb +1 -1
- data/resources/jruby.rc +1 -1
- data/spec/launcher_spec.rb +22 -1
- data/spec/spec_helper.rb +15 -2
- data/utilsfuncs.cpp +1 -1
- data/version.h +11 -0
- metadata +54 -52
data/Rakefile
CHANGED
@@ -6,22 +6,37 @@ Spec::Rake::SpecTask.new
|
|
6
6
|
|
7
7
|
task :default => :spec
|
8
8
|
|
9
|
-
|
9
|
+
file './lib/jruby-launcher.rb' => 'version.h' do |t|
|
10
|
+
version = nil
|
11
|
+
IO.readlines(t.prerequisites.first).grep(/LAUNCHER_VERSION\s+"([^"]+)"/) {|l| version = $1 }
|
12
|
+
ruby = IO.readlines(t.name)
|
13
|
+
File.open(t.name, "wb") do |f|
|
14
|
+
ruby.each do |l|
|
15
|
+
f << l.sub(/VERSION\s*=\s*"([^"]*)"/, "VERSION = \"#{version}\"")
|
16
|
+
end
|
17
|
+
end
|
18
|
+
end
|
10
19
|
|
11
|
-
gemspec
|
12
|
-
|
13
|
-
|
14
|
-
|
15
|
-
|
16
|
-
|
17
|
-
|
18
|
-
|
19
|
-
|
20
|
-
|
21
|
-
|
22
|
-
|
23
|
-
|
20
|
+
task :gemspec => './lib/jruby-launcher.rb' do
|
21
|
+
@gemspec ||= Gem::Specification.new do |s|
|
22
|
+
load './lib/jruby-launcher.rb'
|
23
|
+
s.name = %q{jruby-launcher}
|
24
|
+
s.platform = Gem::Platform.new("java")
|
25
|
+
s.version = JRubyLauncher::VERSION
|
26
|
+
s.authors = ["Nick Sieger", "Vladimir Sizikov"]
|
27
|
+
s.date = Date.today.to_s
|
28
|
+
s.description = %q{Builds and installs a native launcher for JRuby on your system}
|
29
|
+
s.summary = %q{Native launcher for JRuby}
|
30
|
+
s.email = ["nick@nicksieger.com", "vsizikov@gmail.com"]
|
31
|
+
s.extensions = ["extconf.rb"]
|
32
|
+
s.files = FileList["COPYING", "README.txt", "Makefile", "Rakefile", "*.c", "*.cpp", "*.h", "inc/*.*", "**/*.rb", "resources/*.*"]
|
33
|
+
s.homepage = %q{http://jruby.org}
|
34
|
+
s.rubyforge_project = %q{jruby-extras}
|
35
|
+
end
|
24
36
|
end
|
25
37
|
|
26
|
-
|
38
|
+
task :package => :gemspec do
|
39
|
+
Rake::GemPackageTask.new(@gemspec) do |pkg|
|
40
|
+
end
|
41
|
+
Rake::Task['gem'].invoke
|
27
42
|
end
|
data/argnames.h
CHANGED
@@ -1,8 +1,5 @@
|
|
1
1
|
/*
|
2
|
-
*
|
3
|
-
* Author: Holy
|
4
|
-
*
|
5
|
-
* Created on 4. prosinec 2008, 14:13
|
2
|
+
* Copyright 2009-2010 JRuby Team (www.jruby.org).
|
6
3
|
*/
|
7
4
|
|
8
5
|
#ifndef _ARGNAMES_H
|
@@ -22,6 +19,7 @@
|
|
22
19
|
#define ARG_NAME_CP_PREPEND "-Xcp:p"
|
23
20
|
#define ARG_NAME_CP_APPEND "-Xcp:a"
|
24
21
|
#define ARG_NAME_CMD_ONLY "-Xcommand"
|
22
|
+
#define ARG_NAME_NO_BOOTCLASSPATH "-Xnobootclasspath"
|
25
23
|
|
26
24
|
/* Below are standard JRuby args handled by the launcher. */
|
27
25
|
#define ARG_NAME_SERVER "--server"
|
data/argparser.cpp
CHANGED
@@ -8,6 +8,7 @@
|
|
8
8
|
#include "utilsfuncs.h"
|
9
9
|
#include "argparser.h"
|
10
10
|
#include "argnames.h"
|
11
|
+
#include "version.h"
|
11
12
|
|
12
13
|
#ifndef WIN32
|
13
14
|
#include <sys/types.h>
|
@@ -21,24 +22,26 @@
|
|
21
22
|
using namespace std;
|
22
23
|
|
23
24
|
const char *ArgParser::HELP_MSG =
|
24
|
-
"
|
25
|
+
"JRuby Launcher usage: jruby" EXEEXT " {options} arguments\n\n\
|
25
26
|
Options:\n\
|
26
27
|
-Xhelp show this help\n\
|
27
|
-
-
|
28
|
+
-Xversion print launcher's version\n\
|
29
|
+
\nJvm Management:\n\
|
30
|
+
-Xjdkhome <path> set path to JDK\n\
|
31
|
+
-Xfork-java run java in separate process\n\
|
28
32
|
-J<jvm_option> pass <jvm_option> to JVM\n\
|
29
|
-
\n\
|
33
|
+
\nClasspath Management:\n\
|
30
34
|
-Xcp <classpath> set the classpath\n\
|
31
35
|
-Xcp:p <classpath> prepend <classpath> to classpath\n\
|
32
36
|
-Xcp:a <classpath> append <classpath> to classpath\n\
|
33
|
-
\n\
|
34
|
-
|
37
|
+
-Xnobootclasspath don't put jruby jars on the bootclasspath\n\
|
38
|
+
\nMisc:\n\
|
35
39
|
-Xtrace <path> path for launcher log (for troubleshooting)\n\
|
36
40
|
-Xcommand just print the equivalent java command and exit\n"
|
37
41
|
#ifdef WIN32
|
38
42
|
" -Xconsole <mode> jrubyw console attach mode (new|attach|suppress)\n\n"
|
39
43
|
#endif
|
40
|
-
"To see general JRuby options, type 'jruby -h' or 'jruby --help'.\n
|
41
|
-
--------------------------------------------------------------------\n\n";
|
44
|
+
"To see general JRuby options, type 'jruby -h' or 'jruby --help'.\n";
|
42
45
|
|
43
46
|
const char *ArgParser::REQ_JAVA_VERSION = "1.5";
|
44
47
|
|
@@ -58,7 +61,7 @@ const char *ArgParser::DEFAULT_EXECUTABLE = "jruby";
|
|
58
61
|
ArgParser::ArgParser()
|
59
62
|
: separateProcess(false)
|
60
63
|
, nailgunClient(false)
|
61
|
-
,
|
64
|
+
, noBootClassPath(false)
|
62
65
|
, printCommandLine(false)
|
63
66
|
{
|
64
67
|
}
|
@@ -242,6 +245,8 @@ bool ArgParser::parseArgs(int argc, char *argv[]) {
|
|
242
245
|
logMsg("Run Java in separater process");
|
243
246
|
} else if (it->compare(ARG_NAME_CMD_ONLY) == 0) {
|
244
247
|
printCommandLine = true;
|
248
|
+
} else if (it->compare(ARG_NAME_NO_BOOTCLASSPATH) == 0) {
|
249
|
+
noBootClassPath = true;
|
245
250
|
} else if (it->compare(ARG_NAME_LAUNCHER_LOG) == 0) {
|
246
251
|
// We only check the validity of args here,
|
247
252
|
// the actual parsing and setting the log file
|
@@ -294,21 +299,31 @@ bool ArgParser::parseArgs(int argc, char *argv[]) {
|
|
294
299
|
javaOptions.push_front("-Dprofile.properties=" + platformDir + "/lib/profile-" + filterType + ".properties");
|
295
300
|
javaOptions.push_front("-javaagent:" + platformDir + "/lib/profile.jar");
|
296
301
|
progArgs.push_back("-X+C");
|
302
|
+
noBootClassPath = true;
|
297
303
|
printToConsole("Running with instrumented profiler\n");
|
298
304
|
} else if (it->compare(ARG_NAME_NG) == 0) {
|
299
305
|
nailgunClient = true;
|
300
306
|
} else if (it->compare(ARG_NAME_NG_SERVER) == 0) {
|
301
307
|
bootclass = "com/martiansoftware/nailgun/NGServer";
|
302
308
|
javaOptions.push_back("-server");
|
303
|
-
|
309
|
+
noBootClassPath = true;
|
304
310
|
} else if (it->compare(0, 2, "-J", 2) == 0) {
|
305
|
-
|
311
|
+
std::string javaOpt = it->substr(2);
|
312
|
+
if (javaOpt.compare(0, 3, "-ea", 3) == 0
|
313
|
+
|| javaOpt.compare(0, 17, "-enableassertions", 17) == 0) {
|
314
|
+
logMsg("Note: -ea option is specified, there will be no bootclasspath in order to enable assertions");
|
315
|
+
noBootClassPath = true;
|
316
|
+
}
|
317
|
+
javaOptions.push_back(javaOpt);
|
306
318
|
} else if (strcmp(it->c_str(), "-Xhelp") == 0) {
|
307
319
|
printToConsole(HELP_MSG);
|
308
320
|
if (!appendHelp.empty()) {
|
309
321
|
printToConsole(appendHelp.c_str());
|
310
322
|
}
|
311
323
|
return false;
|
324
|
+
} else if (strcmp(it->c_str(), "-Xversion") == 0) {
|
325
|
+
printToConsole("JRuby Launcher Version " JRUBY_LAUNCHER_VERSION "\n");
|
326
|
+
return false;
|
312
327
|
} else {
|
313
328
|
progArgs.push_back(*it);
|
314
329
|
}
|
@@ -467,6 +482,11 @@ void ArgParser::constructClassPath() {
|
|
467
482
|
classPath += cpAfter;
|
468
483
|
}
|
469
484
|
|
485
|
+
// JRUBY-4709: Include this by default to have PWD as part of classpath
|
486
|
+
if (!classPath.empty()) {
|
487
|
+
classPath += PATH_SEP;
|
488
|
+
}
|
489
|
+
|
470
490
|
logMsg("ClassPath: %s", classPath.c_str());
|
471
491
|
}
|
472
492
|
|
@@ -533,8 +553,8 @@ void ArgParser::addToClassPath(const char *path, bool onlyIfExists) {
|
|
533
553
|
void ArgParser::addToBootClassPath(const char *path, bool onlyIfExists) {
|
534
554
|
logMsg("addToBootClassPath()\n\tpath: %s\n\tonlyIfExists: %s", path, onlyIfExists ? "true" : "false");
|
535
555
|
|
536
|
-
if (
|
537
|
-
logMsg("NOTE: In
|
556
|
+
if (noBootClassPath) {
|
557
|
+
logMsg("NOTE: In this mode there is no bootclasspath, adding to the classpath instead...");
|
538
558
|
return addToClassPath(path, onlyIfExists);
|
539
559
|
}
|
540
560
|
|
data/argparser.h
CHANGED
data/lib/jruby-launcher.rb
CHANGED
data/resources/jruby.rc
CHANGED
@@ -12,7 +12,7 @@ BEGIN
|
|
12
12
|
VALUE "FileDescription", "Windows JRuby Launcher\0"
|
13
13
|
VALUE "FileVersion", "1.0\0"
|
14
14
|
VALUE "InternalName", "jruby.exe\0"
|
15
|
-
VALUE "LegalCopyright", "Copyright
|
15
|
+
VALUE "LegalCopyright", "Copyright 2009-2010 JRuby Team\0"
|
16
16
|
VALUE "OriginalFilename", "jruby.exe\0"
|
17
17
|
VALUE "ProductName", "JRuby\0"
|
18
18
|
VALUE "ProductVersion", "1.0\0"
|
data/spec/launcher_spec.rb
CHANGED
@@ -1,5 +1,4 @@
|
|
1
1
|
require File.expand_path('../spec_helper.rb', __FILE__)
|
2
|
-
require 'rbconfig'
|
3
2
|
|
4
3
|
describe "JRuby native launcher" do
|
5
4
|
it "should run org.jruby.Main" do
|
@@ -148,4 +147,26 @@ describe "JRuby native launcher" do
|
|
148
147
|
jruby_launcher("-Xtrace '' 2>&1").should =~ /-Xtrace/
|
149
148
|
jruby_launcher("-Xjdkhome '' 2>&1").should =~ /-Xjdkhome/
|
150
149
|
end
|
150
|
+
|
151
|
+
# JRUBY-4706
|
152
|
+
it "should put JRuby on regular classpath when -Xnobootclasspath is used" do
|
153
|
+
args = jruby_launcher_args("-e true")
|
154
|
+
args.grep(/Xbootclasspath/).should_not be_empty
|
155
|
+
args = jruby_launcher_args("-Xnobootclasspath -e true")
|
156
|
+
args.grep(/Xbootclasspath/).should be_empty
|
157
|
+
end
|
158
|
+
|
159
|
+
# JRUBY-4709
|
160
|
+
it "should include a bare : or ; at the end of the classpath, to include PWD in the path" do
|
161
|
+
jruby_launcher_args("-Xnobootclasspath -e true").grep(/java\.class\.path/).first.should =~
|
162
|
+
if windows?
|
163
|
+
/;$/
|
164
|
+
else
|
165
|
+
/:$/
|
166
|
+
end
|
167
|
+
end
|
168
|
+
|
169
|
+
it "should print the version" do
|
170
|
+
jruby_launcher("-Xversion 2>&1").should =~ /Launcher Version [0-9.]+/
|
171
|
+
end
|
151
172
|
end
|
data/spec/spec_helper.rb
CHANGED
@@ -1,5 +1,6 @@
|
|
1
1
|
require 'spec'
|
2
2
|
require 'rbconfig'
|
3
|
+
require 'fileutils'
|
3
4
|
|
4
5
|
if defined?(JRUBY_VERSION)
|
5
6
|
require 'jruby'
|
@@ -7,13 +8,25 @@ if defined?(JRUBY_VERSION)
|
|
7
8
|
end
|
8
9
|
|
9
10
|
module JRubyLauncherHelper
|
10
|
-
JRUBY_EXE =
|
11
|
+
JRUBY_EXE = ''
|
11
12
|
WINDOWS = Config::CONFIG['target_os'] =~ /mswin/
|
12
13
|
|
13
14
|
def self.check_executable_built
|
14
|
-
|
15
|
+
exe = File.expand_path("../../jruby", __FILE__) + Config::CONFIG['EXEEXT']
|
16
|
+
unless File.executable?(exe)
|
15
17
|
raise "Error: launcher executable not built; type `make' before continuing."
|
16
18
|
end
|
19
|
+
top = File.dirname(exe)
|
20
|
+
name = File.basename(exe)
|
21
|
+
home = File.join(top, "build/home")
|
22
|
+
FileUtils.mkdir_p(File.join(home, "bin"))
|
23
|
+
FileUtils.cp(exe, File.join(home, "bin"))
|
24
|
+
if JRubyLauncherHelper::WINDOWS
|
25
|
+
FileUtils.cp(exe.sub(/exe/, 'dll'), File.join(home, "bin"))
|
26
|
+
end
|
27
|
+
FileUtils.mkdir_p(File.join(home, "lib"))
|
28
|
+
FileUtils.touch(File.join(home, "lib/jruby.jar"))
|
29
|
+
JRUBY_EXE.concat File.join(home, "bin", name)
|
17
30
|
end
|
18
31
|
|
19
32
|
def jruby_launcher(args)
|
data/utilsfuncs.cpp
CHANGED
@@ -184,7 +184,7 @@ void logV(bool appendSysError, bool showMsgBox, const char *format, va_list args
|
|
184
184
|
strncat(msg, sysErr, 4096 - strlen(msg));
|
185
185
|
}
|
186
186
|
|
187
|
-
if (!gLogFileName.empty()) {
|
187
|
+
if (!gLogFileName.empty() && gLogFileName != "''") {
|
188
188
|
FILE *file = fopen(gLogFileName.c_str(), "a");
|
189
189
|
if (file) {
|
190
190
|
fprintf(file, "%s\n", msg);
|
data/version.h
ADDED
metadata
CHANGED
@@ -3,64 +3,66 @@ name: jruby-launcher
|
|
3
3
|
version: !ruby/object:Gem::Version
|
4
4
|
prerelease: false
|
5
5
|
segments:
|
6
|
-
|
7
|
-
|
8
|
-
|
6
|
+
- 1
|
7
|
+
- 0
|
8
|
+
- 1
|
9
|
+
version: 1.0.1
|
9
10
|
platform: java
|
10
11
|
authors:
|
11
|
-
|
12
|
-
|
12
|
+
- Nick Sieger
|
13
|
+
- Vladimir Sizikov
|
13
14
|
autorequire:
|
14
15
|
bindir: bin
|
15
16
|
cert_chain: []
|
16
17
|
|
17
|
-
date: 2010-04-
|
18
|
+
date: 2010-04-13 00:00:00 -05:00
|
18
19
|
default_executable:
|
19
20
|
dependencies: []
|
20
21
|
|
21
22
|
description: Builds and installs a native launcher for JRuby on your system
|
22
23
|
email:
|
23
|
-
|
24
|
-
|
24
|
+
- nick@nicksieger.com
|
25
|
+
- vsizikov@gmail.com
|
25
26
|
executables: []
|
26
27
|
|
27
28
|
extensions:
|
28
|
-
|
29
|
+
- extconf.rb
|
29
30
|
extra_rdoc_files: []
|
30
31
|
|
31
32
|
files:
|
32
|
-
|
33
|
-
|
34
|
-
|
35
|
-
|
36
|
-
|
37
|
-
|
38
|
-
|
39
|
-
|
40
|
-
|
41
|
-
|
42
|
-
|
43
|
-
|
44
|
-
|
45
|
-
|
46
|
-
|
47
|
-
|
48
|
-
|
49
|
-
|
50
|
-
|
51
|
-
|
52
|
-
|
53
|
-
|
54
|
-
|
55
|
-
|
56
|
-
|
57
|
-
|
58
|
-
|
59
|
-
|
60
|
-
|
61
|
-
|
62
|
-
|
63
|
-
|
33
|
+
- COPYING
|
34
|
+
- README.txt
|
35
|
+
- Makefile
|
36
|
+
- Rakefile
|
37
|
+
- ng.c
|
38
|
+
- strlcpy.c
|
39
|
+
- argparser.cpp
|
40
|
+
- jruby.cpp
|
41
|
+
- jrubyexe.cpp
|
42
|
+
- jvmlauncher.cpp
|
43
|
+
- platformlauncher.cpp
|
44
|
+
- unixlauncher.cpp
|
45
|
+
- utilsfuncs.cpp
|
46
|
+
- utilsfuncswin.cpp
|
47
|
+
- argnames.h
|
48
|
+
- argparser.h
|
49
|
+
- jvmlauncher.h
|
50
|
+
- nbexecloader.h
|
51
|
+
- platformlauncher.h
|
52
|
+
- rb_w32_cmdvector.h
|
53
|
+
- unixlauncher.h
|
54
|
+
- utilsfuncs.h
|
55
|
+
- version.h
|
56
|
+
- inc/Makefile-conf.mk
|
57
|
+
- inc/Makefile-impl.mk
|
58
|
+
- inc/Makefile-rules.mk
|
59
|
+
- extconf.rb
|
60
|
+
- lib/jruby-launcher.rb
|
61
|
+
- lib/rubygems/defaults/jruby_native.rb
|
62
|
+
- spec/launcher_spec.rb
|
63
|
+
- spec/spec_helper.rb
|
64
|
+
- resources/jruby.ico
|
65
|
+
- resources/jruby.rc
|
64
66
|
has_rdoc: true
|
65
67
|
homepage: http://jruby.org
|
66
68
|
licenses: []
|
@@ -69,21 +71,21 @@ post_install_message:
|
|
69
71
|
rdoc_options: []
|
70
72
|
|
71
73
|
require_paths:
|
72
|
-
|
74
|
+
- lib
|
73
75
|
required_ruby_version: !ruby/object:Gem::Requirement
|
74
76
|
requirements:
|
75
|
-
|
76
|
-
|
77
|
-
|
78
|
-
|
79
|
-
|
77
|
+
- - ">="
|
78
|
+
- !ruby/object:Gem::Version
|
79
|
+
segments:
|
80
|
+
- 0
|
81
|
+
version: "0"
|
80
82
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
81
83
|
requirements:
|
82
|
-
|
83
|
-
|
84
|
-
|
85
|
-
|
86
|
-
|
84
|
+
- - ">="
|
85
|
+
- !ruby/object:Gem::Version
|
86
|
+
segments:
|
87
|
+
- 0
|
88
|
+
version: "0"
|
87
89
|
requirements: []
|
88
90
|
|
89
91
|
rubyforge_project: jruby-extras
|