< prev index next >
src/jdk.jextract/share/classes/com/sun/tools/jextract/Main.java
Print this page
@@ -26,10 +26,11 @@
import jdk.internal.joptsimple.OptionParser;
import jdk.internal.joptsimple.OptionSet;
import jdk.internal.joptsimple.util.KeyValuePair;
import java.io.File;
+import java.io.InputStream;
import java.io.IOException;
import java.io.PrintWriter;
import java.nio.file.Files;
import java.nio.file.Path;
import java.nio.file.Paths;
@@ -159,10 +160,25 @@
setupLogging(Level.parse((String) options.valueOf("log")));
} else {
setupLogging(Level.WARNING);
}
+ Path builtinIncludeDir = null;
+ try {
+ builtinIncludeDir = createBuiltinIncludeDir();
+ } catch (IOException ex) {
+ ctx.err.println(format("cannot.create.builtin.includes", ex));
+ if (Main.DEBUG) {
+ ex.printStackTrace(ctx.err);
+ }
+ return 1;
+ }
+
+ if (builtinIncludeDir != null) {
+ ctx.addClangArg("-I" + builtinIncludeDir.toString());
+ }
+
if (options.has("I")) {
options.valuesOf("I").forEach(p -> ctx.addClangArg("-I" + p));
}
if (options.has("C")) {
@@ -280,10 +296,24 @@
}
return 0;
}
+ private static final String[] HEADERS = { "stdarg.h" };
+
+ private Path createBuiltinIncludeDir() throws IOException {
+ Path tmpDir = Files.createTempDirectory("jextract");
+ // copy built-in header from resources.
+ for (String header : HEADERS) {
+ Path headerPath = tmpDir.resolve(header);
+ try (InputStream headerRes = Main.class.getResourceAsStream("resources/" + header)) {
+ Files.copy(headerRes, headerPath);
+ }
+ }
+ return tmpDir;
+ }
+
public static void main(String... args) {
Main instance = new Main(new Context());
System.exit(instance.run(args));
}
< prev index next >