< prev index next >
src/jdk.jextract/share/classes/com/sun/tools/jextract/Main.java
Print this page
@@ -25,10 +25,11 @@
import jdk.internal.joptsimple.OptionException;
import jdk.internal.joptsimple.OptionParser;
import jdk.internal.joptsimple.OptionSet;
import jdk.internal.joptsimple.util.KeyValuePair;
+import java.io.File;
import java.io.IOException;
import java.nio.file.Files;
import java.nio.file.Path;
import java.nio.file.Paths;
import java.text.MessageFormat;
@@ -102,34 +103,37 @@
logger.setLevel(level);
log.setLevel(level);
logger.addHandler(log);
}
- private void printHelpAndExit(OptionParser parser) {
+ private void printHelp(OptionParser parser) {
try {
parser.printHelpOn(System.err);
} catch (IOException ex) {
if (Main.DEBUG) {
ex.printStackTrace(System.err);
}
}
- System.exit(1);
}
- public void run(String[] args) {
+ public int run(String[] args) {
OptionParser parser = new OptionParser();
parser.accepts("dry-run", format("help.dry_run"));
parser.accepts("I", format("help.I")).withRequiredArg();
+ // FIXME: -L not yet implemented. This 'jextract time'
+ // option is expected to specify paths to load shared libraries
+ // to check & warn missing symbols.
parser.accepts("L", format("help.L")).withRequiredArg();
parser.accepts("l", format("help.l")).withRequiredArg();
parser.accepts("o", format("help.o")).withRequiredArg();
parser.accepts("t", format("help.t")).withRequiredArg();
parser.accepts("m", format("help.m")).withRequiredArg();
parser.accepts("h", format("help.h")).forHelp();
parser.accepts("help", format("help.h")).forHelp();
parser.accepts("C", format("help.C")).withRequiredArg();
parser.accepts("log", format("help.log")).withRequiredArg();
+ parser.accepts("rpath", format("help.rpath")).withRequiredArg();
parser.accepts("?", format("help.h")).forHelp();
parser.nonOptions(format("help.non.option"));
OptionSet options = null;
try {
@@ -137,15 +141,17 @@
} catch (OptionException oe) {
System.err.println(oe.getMessage());
if (Main.DEBUG) {
oe.printStackTrace(System.err);
}
- printHelpAndExit(parser);
+ printHelp(parser);
+ return 1;
}
if (args.length == 0 || options.has("h") || options.has("?") || options.has("help")) {
- printHelpAndExit(parser);
+ printHelp(parser);
+ return 1;
}
if (options.has("log")) {
setupLogging(Level.parse((String) options.valueOf("log")));
} else {
@@ -159,11 +165,29 @@
if (options.has("C")) {
options.valuesOf("C").forEach(p -> ctx.clangArgs.add((String) p));
}
if (options.has("l")) {
- options.valuesOf("l").forEach(p -> ctx.libraries.add((String) p));
+ try {
+ options.valuesOf("l").forEach(p -> {
+ String lib = (String)p;
+ if (lib.indexOf(File.separatorChar) != -1) {
+ throw new IllegalArgumentException(format("l.name.should.not.be.path", lib));
+ }
+ ctx.libraries.add(lib);
+ });
+ } catch (IllegalArgumentException iae) {
+ System.err.println(iae.getMessage());
+ if (Main.DEBUG) {
+ iae.printStackTrace(System.err);
+ }
+ return 1;
+ }
+ }
+
+ if (options.has("rpath")) {
+ options.valuesOf("rpath").forEach(p -> ctx.libraryPaths.add((String) p));
}
targetPackage = options.has("t") ? (String) options.valueOf("t") : "";
if (!targetPackage.isEmpty()) {
Validators.validPackageName(targetPackage);
@@ -179,15 +203,15 @@
} catch (RuntimeException re) {
System.err.println(re.getMessage());
if (Main.DEBUG) {
re.printStackTrace(System.err);
}
- System.exit(2);
+ return 2;
}
if (options.has("dry-run")) {
- System.exit(0);
+ return 0;
}
String outputName = options.has("o")? (String)options.valueOf("o") :
options.nonOptionArguments().get(0) + ".jar";
Path jar = Paths.get(outputName);
@@ -196,16 +220,18 @@
} catch (IOException ex) {
System.err.println(format("cannot.write.jar.file", jar, ex));
if (Main.DEBUG) {
ex.printStackTrace(System.err);
}
- System.exit(3);
+ return 3;
}
+
+ return 0;
}
public static void main(String... args) {
Main instance = new Main(Context.getInstance());
- instance.run(args);
+ System.exit(instance.run(args));
}
}
< prev index next >