From a7802a2ab90a68ecbba962149a335f975fce24e7 Mon Sep 17 00:00:00 2001
From: Sven Gothel <sgothel@jausoft.com>
Date: Fri, 14 Jun 2013 04:40:39 +0200
Subject: GlueGen (Compile Time): Add 'CStruct' Annotation Processor (APT) to
 'gluegen' C Structs on-the-fly (2-pass actually).

Convenient annotation processing (APT) hooked to 'javac' (1.6) via gluegen.jar META-INF
service provider 'javax.annotation.processing.Processor' -> 'com.jogamp.gluegen.structgen.CStructAnnotationProcessor'.

Am implicit APT / JAVAC would be possible, however - to have a proper process
the unit test utilizes an explicit 2 pass run:

        <!-- Annotation Processor Only - First -->
        <javac destdir="${build_t.java}">
            <classpath refid="junit.compile.classpath"/>
            <compilerarg value="-proc:only"/>
            <compilerarg value="-J-Djogamp.gluegen.structgen.debug"/>
            <compilerarg value="-J-Djogamp.gluegen.structgen.output=${build_t.gen}/classes"/>
            <src path="${test.base.dir}/com/jogamp/gluegen/test/junit/structgen"/>
        </javac>

        <!-- Javac Only - Second -->
        <javac destdir="${build_t.java}">
            <classpath refid="junit.compile.classpath"/>
            <compilerarg value="-proc:none"/>
            <src path="${test.base.dir}"/>
            <src path="${build_t.gen}" />
        </javac>

Original code from Michael Bien's 'superglue' git://github.com/mbien/superglue.git,
finally merged to GlueGen (as once intended).

Note: The APT javac pass requires to use 'gluegen.jar' instead of 'gluegen-rt.jar' !
      The 2-pass process also alows using the runtime gluegen-rt.jar and hence ensures
      clean namespace check at compilation.
---
 make/build-test.xml     | 19 +++++++++++++++++++
 make/build.xml          |  3 +++
 make/scripts/runtest.sh |  3 ++-
 3 files changed, 24 insertions(+), 1 deletion(-)

(limited to 'make')

diff --git a/make/build-test.xml b/make/build-test.xml
index 3c7da12..31dc773 100644
--- a/make/build-test.xml
+++ b/make/build-test.xml
@@ -114,6 +114,7 @@
         <echo message=" test.base.dir ${test.base.dir}"/>
         <echo message=" build_t.gen     ${build_t.gen}"/>
 
+        <!-- Annotation Processor Only - First -->
         <javac destdir="${build_t.java}" 
                fork="yes"
                includeAntRuntime="false"
@@ -124,6 +125,24 @@
                bootclasspath="${target.rt.jar}"
                debug="${javacdebug}" debuglevel="${javacdebuglevel}">
             <classpath refid="junit.compile.classpath"/>
+            <compilerarg value="-proc:only"/>
+            <compilerarg value="-J-Djogamp.gluegen.structgen.debug"/>
+            <compilerarg value="-J-Djogamp.gluegen.structgen.output=${build_t.gen}/classes"/>
+            <src path="${test.base.dir}/com/jogamp/gluegen/test/junit/structgen"/>
+        </javac>
+
+        <!-- Javac Only - Second -->
+        <javac destdir="${build_t.java}" 
+               fork="yes"
+               includeAntRuntime="false"
+               memoryMaximumSize="${javac.memorymax}"
+               encoding="UTF-8"
+               source="${target.sourcelevel}" 
+               target="${target.targetlevel}" 
+               bootclasspath="${target.rt.jar}"
+               debug="${javacdebug}" debuglevel="${javacdebuglevel}">
+            <classpath refid="junit.compile.classpath"/>
+            <compilerarg value="-proc:none"/>
             <src path="${test.base.dir}"/>
             <src path="${build_t.gen}" />
         </javac>
diff --git a/make/build.xml b/make/build.xml
index d8fd553..90151c6 100644
--- a/make/build.xml
+++ b/make/build.xml
@@ -802,6 +802,9 @@
 
     <!-- Build gluegen.jar. -->
     <jar destfile="${build}/gluegen.jar" manifest="${build}/Manifest.temp">
+      <service type="javax.annotation.processing.Processor">
+        <provider classname="com.jogamp.gluegen.structgen.CStructAnnotationProcessor"/>
+      </service>
       <fileset dir="${classes}">
         <include name="**/*.class" />
         <exclude name="${jogamp-android-launcher.classes}" />
diff --git a/make/scripts/runtest.sh b/make/scripts/runtest.sh
index 165f64d..65b3573 100755
--- a/make/scripts/runtest.sh
+++ b/make/scripts/runtest.sh
@@ -96,6 +96,7 @@ function onetest() {
 #onetest com.jogamp.common.os.TestElfReader01 2>&1 | tee -a $LOG
 #onetest com.jogamp.gluegen.test.junit.generation.Test1p1JavaEmitter 2>&1 | tee -a $LOG
 #onetest com.jogamp.gluegen.test.junit.generation.Test1p2ProcAddressEmitter 2>&1 | tee -a $LOG
+onetest com.jogamp.gluegen.test.junit.structgen.TestStructGen01 2>&1 | tee -a $LOG
 #onetest com.jogamp.common.util.TestPlatform01 2>&1 | tee -a $LOG
 #onetest com.jogamp.common.util.TestRunnableTask01 2>&1 | tee -a $LOG
 #onetest com.jogamp.common.util.TestIOUtil01 2>&1 | tee -a $LOG
@@ -105,4 +106,4 @@ function onetest() {
 #onetest com.jogamp.common.net.AssetURLConnectionUnregisteredTest 2>&1 | tee -a $LOG
 #onetest com.jogamp.common.net.AssetURLConnectionRegisteredTest 2>&1 | tee -a $LOG
 #onetest com.jogamp.common.net.URLCompositionTest 2>&1 | tee -a $LOG
-onetest com.jogamp.junit.sec.TestSecIOUtil01 2>&1 | tee -a $LOG
+#onetest com.jogamp.junit.sec.TestSecIOUtil01 2>&1 | tee -a $LOG
-- 
cgit v1.2.3