diff options
Diffstat (limited to 'src/java/com/jogamp/gluegen/GlueGen.java')
-rw-r--r-- | src/java/com/jogamp/gluegen/GlueGen.java | 32 |
1 files changed, 26 insertions, 6 deletions
diff --git a/src/java/com/jogamp/gluegen/GlueGen.java b/src/java/com/jogamp/gluegen/GlueGen.java index aa0fb7e..edfe360 100644 --- a/src/java/com/jogamp/gluegen/GlueGen.java +++ b/src/java/com/jogamp/gluegen/GlueGen.java @@ -104,11 +104,16 @@ public class GlueGen implements GlueEmitterControls { public static final String __GLUEGEN__ = "__GLUEGEN__"; @SuppressWarnings("unchecked") - public void run(final Reader reader, final String filename, final Class<?> emitterClass, final List<String> includePaths, final List<String> cfgFiles, final String outputRootDir, final boolean copyCPPOutput2Stderr, final boolean preserveGeneratedCPP) { - + public void run(final Reader reader, final String filename, final Class<?> emitterClass, final List<String> includePaths, final List<String> cfgFiles, final String outputRootDir, + final boolean copyCPPOutput2Stderr, final boolean enablePragmaOnce, final boolean preserveGeneratedCPP) + { try { if(debug) { Logging.getLogger().setLevel(Level.ALL); + System.err.println("GlueGen.run: filename: "+filename+", emitter: "+emitterClass.getName()+", outputRootDir "+outputRootDir+ + ", copyCPPOutput2Stderr "+copyCPPOutput2Stderr+", enablePragmaOnce "+enablePragmaOnce+", preserveGeneratedCPP "+preserveGeneratedCPP); + System.err.println("GlueGen.run: includePaths "+includePaths); + System.err.println("GlueGen.run: cfgFiles "+cfgFiles); } else if( null != logLevel ) { Logging.getLogger().setLevel(logLevel); } @@ -131,8 +136,8 @@ public class GlueGen implements GlueEmitterControls { final File out = File.createTempFile("CPPTemp", ".cpp"); final FileOutputStream outStream = new FileOutputStream(out); - // preprocessor = new PCPP(includePaths, debug, copyCPPOutput2Stderr); - preprocessor = new JCPP(includePaths, debug, copyCPPOutput2Stderr); + // preprocessor = new PCPP(includePaths, debug, copyCPPOutput2Stderr, enablePragmaOnce); + preprocessor = new JCPP(includePaths, debug, copyCPPOutput2Stderr, enablePragmaOnce); final String cppName = preprocessor.getClass().getSimpleName(); if(debug || preserveGeneratedCPP) { System.err.println("CPP <"+cppName+"> output at (persistent): " + out.getAbsolutePath()); @@ -167,7 +172,15 @@ public class GlueGen implements GlueEmitterControls { try { parser.translationUnit(); } catch (final RecognitionException e) { - throw new RuntimeException("Fatal IO error", e); + throw new RuntimeException(String.format( + "Fatal error during translation (Localisation : %s:%s:%s)", + e.getFilename(), e.getLine(), e.getColumn() + ), e); + } catch (final TokenStreamRecognitionException e) { + throw new RuntimeException(String.format( + "Fatal error during translation (Localisation : %s:%s:%s)", + e.recog.getFilename(), e.recog.getLine(), e.recog.getColumn() + ), e); } catch (final TokenStreamException e) { throw new RuntimeException("Fatal IO error", e); } @@ -375,6 +388,7 @@ public class GlueGen implements GlueEmitterControls { String outputRootDir = null; final List<String> cfgFiles = new ArrayList<String>(); boolean copyCPPOutput2Stderr = false; + boolean enablePragmaOnce = true; boolean preserveGeneratedCPP = false; final List<String> includePaths = new ArrayList<String>(); @@ -397,6 +411,10 @@ public class GlueGen implements GlueEmitterControls { debug=true; } else if (arg.equals("--dumpCPP")) { copyCPPOutput2Stderr=true; + } else if (arg.equals("--enablePragmaOnce")) { + enablePragmaOnce=true; + } else if (arg.equals("--disablePragmaOnce")) { + enablePragmaOnce=false; } else if (arg.equals("--preserveGeneratedCPP")) { preserveGeneratedCPP=true; } else { @@ -423,7 +441,7 @@ public class GlueGen implements GlueEmitterControls { try { final Class<?> emitterClass = emitterFQN == null ? null : Class.forName(emitterFQN); - new GlueGen().run(reader, filename, emitterClass, includePaths, cfgFiles, outputRootDir, copyCPPOutput2Stderr, preserveGeneratedCPP); + new GlueGen().run(reader, filename, emitterClass, includePaths, cfgFiles, outputRootDir, copyCPPOutput2Stderr, enablePragmaOnce, preserveGeneratedCPP); } catch (final ClassNotFoundException ex) { throw new RuntimeException("specified emitter class was not in the classpath", ex); } @@ -448,6 +466,8 @@ public class GlueGen implements GlueEmitterControls { out.println("-Cjava-emitter.cfg."); out.println(" --debug enables debug mode"); out.println(" --dumpCPP directs CPP to dump all output to stderr as well"); + out.println(" --enablePragmaOnce allow handle of #pragma once directive during parsing (default)"); + out.println(" --disablePragmaOnce disable handling of #pragma once directive during parsing"); out.println(" --preserveGeneratedCPP preserve generated CPP file during generation (File it's already preserved by debug mode)"); exit(1); } |