< 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 >