From d01cb422c4621fbc1b5ea2bcd7d19f3ff8602715 Mon Sep 17 00:00:00 2001 From: Sven Gothel Date: Sat, 15 Jun 2013 05:27:51 +0200 Subject: Fix CStruct APT File Location - Threw FileNotFoundException w/ Java7 --- .../scripts/make.gluegen.all.linux-x86_64.java7.sh | 25 ++++++++ make/scripts/setenv-build-jogl-x86_64.java7.sh | 52 ++++++++++++++++ make/scripts/setenv-build-jogl-x86_64.sh | 4 +- .../structgen/CStructAnnotationProcessor.java | 70 ++++++++++++---------- 4 files changed, 116 insertions(+), 35 deletions(-) create mode 100755 make/scripts/make.gluegen.all.linux-x86_64.java7.sh create mode 100644 make/scripts/setenv-build-jogl-x86_64.java7.sh diff --git a/make/scripts/make.gluegen.all.linux-x86_64.java7.sh b/make/scripts/make.gluegen.all.linux-x86_64.java7.sh new file mode 100755 index 0000000..967a21e --- /dev/null +++ b/make/scripts/make.gluegen.all.linux-x86_64.java7.sh @@ -0,0 +1,25 @@ +#! /bin/sh + +SDIR=`dirname $0` + +if [ -e $SDIR/setenv-build-jogl-x86_64.java7.sh ] ; then + . $SDIR/setenv-build-jogl-x86_64.java7.sh +fi + +# -Dc.compiler.debug=true +# -Dgluegen.cpptasks.detected.os=true \ +# -DisUnix=true \ +# -DisLinux=true \ +# -DisLinuxAMD64=true \ +# -DisX11=true \ +# +# -Dtarget.sourcelevel=1.6 \ +# -Dtarget.targetlevel=1.6 \ +# -Dtarget.rt.jar=/opt-share/jre1.6.0_30/lib/rt.jar \ + +# BUILD_ARCHIVE=true \ +ant \ + -Dc.compiler.debug=true \ + -Djavacdebuglevel="source,lines,vars" \ + -Drootrel.build=build-x86_64.java7 \ + $* 2>&1 | tee make.gluegen.all.linux-x86_64.java7.log diff --git a/make/scripts/setenv-build-jogl-x86_64.java7.sh b/make/scripts/setenv-build-jogl-x86_64.java7.sh new file mode 100644 index 0000000..6d293a0 --- /dev/null +++ b/make/scripts/setenv-build-jogl-x86_64.java7.sh @@ -0,0 +1,52 @@ +#! /bin/sh + +echo $0 + +if [ -e /opt-share/apache-ant ] ; then + ANT_PATH=/opt-share/apache-ant + PATH=$ANT_PATH/bin:$PATH + export ANT_PATH +fi +if [ -z "$ANT_PATH" ] ; then + if [ -e /usr/share/ant/bin/ant -a -e /usr/share/ant/lib/ant.jar ] ; then + ANT_PATH=/usr/share/ant + export ANT_PATH + echo autosetting ANT_PATH to $ANT_PATH + fi +fi +if [ -z "$ANT_PATH" ] ; then + if [ -e /usr/share/ant/bin/ant -a -e /usr/share/ant/lib/ant.jar ] ; then + ANT_PATH=/usr/share/ant + export ANT_PATH + echo autosetting ANT_PATH to $ANT_PATH + fi +fi +if [ -z "$ANT_PATH" ] ; then + echo ANT_PATH does not exist, set it + exit +fi + +if [ -e /opt-linux-x86_64/jre7 -a -e /opt-linux-x86_64/j2se7 ] ; then + J2RE_HOME=/opt-linux-x86_64/jre7 + JAVA_HOME=/opt-linux-x86_64/j2se7 + PATH=$J2RE_HOME/bin:$JAVA_HOME/bin:$PATH + export J2RE_HOME JAVA_HOME +elif [ -e /usr/java/jre/bin/amd64 -a -e /usr/java/bin/amd64 ] ; then + # make a symbolic link: /usr/java/bin/amd64/bin$ ln -s . bin + # since ant looks for $JAVA_HOME/bin/java and we need to force the 64bit JVM + J2RE_HOME=/usr/java/jre/bin/amd64 + JAVA_HOME=/usr/java/bin/amd64 + PATH=$J2RE_HOME:$JAVA_HOME:$PATH + export J2RE_HOME JAVA_HOME +elif [ -e /opt-solaris-x86_64/jre6 -a -e /opt-solaris-x86_64/j2se6 ] ; then + # make a symbolic link: /opt-solaris-x86_64/jre6/bin/amd64/bin$ ln -s . bin + # since ant looks for $JAVA_HOME/bin/java and we need to force the 64bit JVM + J2RE_HOME=/opt-solaris-x86_64/jre6/bin/amd64 + JAVA_HOME=/opt-solaris-x86_64/j2se6/bin/amd64 + PATH=$J2RE_HOME:$JAVA_HOME:$PATH + export J2RE_HOME JAVA_HOME +fi + +export PATH + + diff --git a/make/scripts/setenv-build-jogl-x86_64.sh b/make/scripts/setenv-build-jogl-x86_64.sh index 9c7d674..6b2a66e 100644 --- a/make/scripts/setenv-build-jogl-x86_64.sh +++ b/make/scripts/setenv-build-jogl-x86_64.sh @@ -31,9 +31,7 @@ if [ -e /opt-linux-x86_64/jre6 -a -e /opt-linux-x86_64/j2se6 ] ; then JAVA_HOME=/opt-linux-x86_64/j2se6 PATH=$J2RE_HOME/bin:$JAVA_HOME/bin:$PATH export J2RE_HOME JAVA_HOME -fi - -if [ -e /usr/java/jre/bin/amd64 -a -e /usr/java/bin/amd64 ] ; then +elif [ -e /usr/java/jre/bin/amd64 -a -e /usr/java/bin/amd64 ] ; then # make a symbolic link: /usr/java/bin/amd64/bin$ ln -s . bin # since ant looks for $JAVA_HOME/bin/java and we need to force the 64bit JVM J2RE_HOME=/usr/java/jre/bin/amd64 diff --git a/src/java/com/jogamp/gluegen/structgen/CStructAnnotationProcessor.java b/src/java/com/jogamp/gluegen/structgen/CStructAnnotationProcessor.java index fef8545..fc60265 100644 --- a/src/java/com/jogamp/gluegen/structgen/CStructAnnotationProcessor.java +++ b/src/java/com/jogamp/gluegen/structgen/CStructAnnotationProcessor.java @@ -53,8 +53,6 @@ import javax.tools.StandardLocation; import jogamp.common.Debug; -import static java.io.File.*; - /** *

* If the header file is absolute, the root path is the parent folder of the folder containing the package source, i.e.: @@ -108,57 +106,65 @@ public class CStructAnnotationProcessor extends AbstractProcessor { outputPath = outputPath == null ? STRUCTGENOUTPUT : outputPath; } + private File locateSource(String packageName, String relativeName) { + try { + if( DEBUG ) { + System.err.println("CStruct.locateSource.0: p "+packageName+", r "+relativeName); + } + final FileObject h = filer.getResource(StandardLocation.SOURCE_PATH, packageName, relativeName); + if( DEBUG ) { + System.err.println("CStruct.locateSource.1: h "+h.toUri()); + } + final File f = new File( h.toUri().getPath() ); // URI is incomplete (no scheme), hence use path only! + if( f.exists() ) { + return f; + } + } catch (IOException e) { if(DEBUG) { System.err.println("Catched "+e.getClass().getSimpleName()+": "+e.getMessage()); /* e.printStackTrace(); */ } } + return null; + } + @Override public boolean process(Set annotations, RoundEnvironment env) { + final String user_dir = System.getProperty("user.dir"); - Set elements = env.getElementsAnnotatedWith(CStruct.class); + final Set elements = env.getElementsAnnotatedWith(CStruct.class); for (Element element : elements) { final String packageName = eltUtils.getPackageOf(element).toString(); - final String user_dir = System.getProperty("user.dir"); try { final CStruct struct = element.getAnnotation(CStruct.class); final String headerRelPath = struct.header(); - final FileObject header; - final File headerFileRel; + final Element enclElement = element.getEnclosingElement(); + + System.err.println("CStruct: "+struct+", package "+packageName+", header "+headerRelPath); + if(DEBUG) { + System.err.println("CStruct.0: user.dir: "+user_dir); + System.err.println("CStruct.0: element: "+element+", .simpleName "+element.getSimpleName()); + System.err.println("CStruct.0: enclElement: "+enclElement+", .simpleName "+enclElement.getSimpleName()+", .package "+eltUtils.getPackageOf(enclElement).toString()); + } + + final File headerFile; { - FileObject h = filer.getResource(StandardLocation.SOURCE_PATH, packageName, headerRelPath); - File f = new File( h.toUri().getPath() ); // URI is incomplete (no scheme), hence use path only! - if( !f.exists() ) { - h = filer.getResource(StandardLocation.SOURCE_PATH, "", headerRelPath); - f = new File( h.toUri().getPath() ); // URI is incomplete (no scheme), hence use path only! - if( !f.exists() ) { + File f = locateSource(packageName, headerRelPath); + if( null == f ) { + f = locateSource("", headerRelPath); + if( null == f ) { // bail out throw new RuntimeException("Could not locate header "+headerRelPath+", package "+packageName); } } - header = h; - headerFileRel = f; + headerFile = f; } - final boolean headerFileRelIsAbsolute = headerFileRel.isAbsolute(); - final String root; - final File headerFile; - if( headerFileRelIsAbsolute ) { - headerFile = headerFileRel; - + { String root0 = headerFile.getAbsolutePath(); root0 = root0.substring(0, root0.length()-headerFile.getName().length()-1); root = root0.substring(0, root0.length()-packageName.length()) +".."; - } else { - root = user_dir; - headerFile = new File(root + separator + header.toUri()); - } - System.err.println("CStruct: "+struct); - System.err.println("CStruct: package "+packageName+", header "+headerRelPath+": "+headerFile); - if(DEBUG) { - System.err.println("CStruct: header "+headerFileRel+", abs-path: "+headerFileRelIsAbsolute); - System.err.println("CStruct: Root: "+root); - System.err.println("CStruct: user.dir: "+user_dir); } + System.err.println("CStruct: "+headerFile+", abs: "+headerFile.isAbsolute()+", root "+root); generateStructBinding(element, struct, root, packageName, headerFile); } catch (IOException ex) { @@ -185,8 +191,8 @@ public class CStructAnnotationProcessor extends AbstractProcessor { final File outputDirFile = new File(outputPath); outputDirAbs = outputDirFile.isAbsolute(); } - final String outputPath1 = outputDirAbs ? outputPath : root + separator + outputPath; - final String config = outputPath1 + separator + header.getName() + ".cfg"; + final String outputPath1 = outputDirAbs ? outputPath : root + File.separator + outputPath; + final String config = outputPath1 + File.separator + header.getName() + ".cfg"; final File configFile = new File(config); if(DEBUG) { System.err.println("CStruct: OutputDir: "+outputPath+", is-abs "+outputDirAbs); -- cgit v1.2.3