diff options
Diffstat (limited to 'make/build-test.xml')
-rw-r--r-- | make/build-test.xml | 374 |
1 files changed, 374 insertions, 0 deletions
diff --git a/make/build-test.xml b/make/build-test.xml new file mode 100644 index 0000000..222ab93 --- /dev/null +++ b/make/build-test.xml @@ -0,0 +1,374 @@ +<?xml version="1.0" encoding="UTF-8"?> + +<project name="GlueGenTest" basedir="."> + + <description>JUNIT Tests GlueGen</description> + + <property name="gluegen.root" value=".." /> + + <import file="gluegen-cpptasks.xml" /> + + <condition property="rootrel.build" value="build"> + <not> + <isset property="rootrel.build"/> + </not> + </condition> + + <target name="init" depends="gluegen.properties.load.user"> + + <!-- Call the external config validator script to make sure the config is ok and consistent --> + <ant antfile="validate-properties.xml" inheritall="true"/> + + <property name="make" value="." /> + + <property name="test.base.dir" value="${gluegen.root}/src/junit" /> + <property name="test.junit.rel" value="com/jogamp" /> + <property name="test.junit.generation.rel" value="${test.junit.rel}/gluegen/test/junit/generation" /> + <property name="test.junit.generation.dir" value="${test.base.dir}/${test.junit.generation.rel}" /> + + <property name="test.dir" value="${gluegen.root}/${rootrel.build}/test"/> + <property name="results" value="${test.dir}/results" /> + <property name="build_t" value="${test.dir}/build" /> + <property name="build_t.gen" value="${build_t}/gensrc"/> + <property name="build_t.java" value="${build_t}/classes"/> + <property name="build_t.obj" value="${build_t}/obj"/> + <property name="build_t.lib" value="${build_t}/natives"/> + + <property name="batchtest.timeout" value="1800000"/> <!-- 30 min --> + + <property name="build_t.gen.rootrel" value="${rootrel.build}/test/build/gensrc"/> + + <mkdir dir="${test.dir}"/> + <mkdir dir="${results}"/> + <mkdir dir="${build_t}"/> + <mkdir dir="${build_t.gen}"/> + <mkdir dir="${build_t.java}"/> + <mkdir dir="${build_t.obj}"/> + <mkdir dir="${build_t.lib}"/> + + <property name="gluegen.jar" location="${gluegen.root}/${rootrel.build}/gluegen.jar" /> + <property name="gluegen-rt.jar" location="${gluegen.root}/${rootrel.build}/gluegen-rt.jar" /> + <property name="gluegen.lib" value="${gluegen.root}/${rootrel.build}/obj" /> + + <property name="gluegen-test.jar" location="${build_t}/gluegen-test.jar" /> + + <path id="gluegen.classpath"> + <pathelement location="${gluegen.jar}" /> + <pathelement location="${antlr.jar}" /> + </path> + + <path id="gluegen_rt.classpath"> + <pathelement location="${gluegen-rt.jar}" /> + </path> + + <path id="junit.compile.classpath"> + <pathelement location="${junit.jar}" /> + <pathelement location="${gluegen.jar}" /> + </path> + + <path id="junit.run.classpath"> + <pathelement location="${junit.jar}" /> + <pathelement location="${gluegen.jar}" /> + <pathelement location="${gluegen-test.jar}" /> + </path> + + <property name="stub.includes.dir" value="stub_includes" /> <!-- NOTE: this MUST be relative for FileSet --> + + <echo message="test.base.dir: ${test.base.dir} "/> + <echo message="test.junit.generation.dir: ${test.junit.generation.dir} "/> + <echo message="test.dir: ${test.dir} "/> + <echo message="results: ${results} "/> + <echo message="build_t: ${build_t} "/> + <echo message="build_t.gen: ${build_t.gen} "/> + <echo message="build_t.java: ${build_t.java} "/> + <echo message="build_t.obj: ${build_t.obj} "/> + <echo message="build_t.lib: ${build_t.lib} "/> + + <!-- Add the GlueGen tasks to ANT --> + <taskdef name="gluegen" classname="com.jogamp.gluegen.ant.GlueGenTask" + classpathref="gluegen.classpath" /> + + <property name="test.archive.name" value="${archive.name}-test-results"/> + </target> + + <target name="java.build" depends="java.generate"> + <echo message=" - - - compiling all java files - - - "/> + <echo message=" test.base.dir ${test.base.dir}"/> + <echo message=" build_t.gen ${build_t.gen}"/> + + <javac destdir="${build_t.java}" + source="1.5" debug="true" + fork="yes" + includeAntRuntime="false" + debuglevel="lines,vars,source"> + <classpath refid="junit.compile.classpath"/> + <src path="${test.base.dir}"/> + <src path="${build_t.gen}" /> + </javac> + + <jar destfile="${gluegen-test.jar}"> + <fileset dir="${build_t.java}"> + <include name="${test.junit.rel}/**/*.class"/> + </fileset> + </jar> + </target> + + <target name="c.configure" depends="gluegen.cpptasks.detect.os,gluegen.cpptasks.setup.compiler"> + <property name="compiler.cfg.id" value="${compiler.cfg.id.base}" /> + <property name="linker.cfg.id" value="${linker.cfg.id.base}" /> + </target> + + <!-- FIXME: this is a hack; the cpptask should have an option to change the + suffix or at least understand the override from dylib to jnilib --> + <target name="rename.dylib" if="isOSX"> + <move file="${src}" tofile="${dest}" /> + </target> + + <macrodef name="c.build"> + <attribute name="c.compiler.src.files" /> + <attribute name="compiler.cfg.id" /> + <attribute name="linker.cfg.id" /> + <attribute name="output.lib.name" /> + <sequential> + <echo message="Compiling @{output.lib.name}" /> + <echo message=" c.compiler.src.files @{c.compiler.src.files}" /> + <echo message=" compiler.cfg.id @{compiler.cfg.id}" /> + <echo message=" linker.cfg.id @{linker.cfg.id}" /> + <echo message=" output.lib.name @{output.lib.name}" /> + + <!-- NOTE: the value of the debug and optimise attributes will not be overridden if already set externally --> + <property name="c.compiler.debug" value="false" /> + <!-- Optimise flags one of { none, size, speed, minimal, full, aggressive, extreme, unsafe } --> + <property name="c.compiler.optimise" value="none" /> + + <condition property="c.compiler.use-debug"><istrue value="${c.compiler.debug}"/></condition> + + <cc outtype="shared" + objdir="${build_t.obj}" + outfile="${build_t.lib}/@{output.lib.name}" + optimize="${c.compiler.optimise}" + debug="${c.compiler.debug}" + multithreaded="true" + exceptions="false" + rtti="false"> + + <fileset dir="${gluegen.root}"><patternset refid="@{c.compiler.src.files}"/></fileset> + + <compiler extends="@{compiler.cfg.id}" > + <sysincludepath path="${java.includes.dir}"/> + <sysincludepath path="${java.includes.dir.platform}"/> + <sysincludepath path="${stub.includes.dir}/platform"/> + <includepath path="${test.junit.generation.dir}"/> + <includepath path="${build_t.gen}/native"/> + </compiler> + + <linker extends="@{linker.cfg.id}"> + <syslibset dir="${java.lib.dir.platform}" libs="jawt" if="@{output.lib.name}.useLibJAWT"/> + <syslibset dir="${java.lib.dir.platform}/server" libs="jvm" if="@{output.lib.name}.useLibJVM"/> + </linker> + </cc> + </sequential> + </macrodef> + + <target name="junit.compile.check" depends="init"> + <delete quiet="true"> + <fileset dir="${build}/test/results" includes="**"/> + <fileset file="${build}/${test.archive.name}.zip"/> + </delete> + <mkdir dir="${build}/test/results"/> + + <uptodate property="junit.compile.skip"> + <srcfiles dir= "." includes="*.xml"/> + <srcfiles dir= "${test.base.dir}" includes="**"/> + <srcfiles file="${gluegen.jar}" /> + <mapper type="merge" to="${gluegen-test.jar}"/> + </uptodate> + </target> + + <target name="junit.compile" depends="junit.compile.check" unless="junit.compile.skip"> + <mkdir dir="${build}/test/build/classes"/> + <antcall target="java.generate" inheritRefs="true"/> + <antcall target="java.build" inheritRefs="true"/> + <antcall target="native.build" inheritRefs="true"/> + </target> + + <target name="junit.run" depends="init,gluegen.cpptasks.detect.os"> + <!-- Use absolute path --> + <property name="gluegen.lib.abs" location="${gluegen.lib}" /> + <property name="build_t.lib.abs" location="${build_t.lib}" /> + + <!-- Perform the junit tests--> + <junit forkmode="once" showoutput="true" fork="true" timeout="${batchtest.timeout}"> + <env key="${system.env.library.path}" path="${gluegen.lib.abs}${path.separator}${build_t.lib.abs}"/> + <jvmarg value="-Djava.library.path=${gluegen.lib.abs}${path.separator}${build_t.lib.abs}"/> + <jvmarg value="-Drootrel.build=${rootrel.build}"/> + <!-- + <jvmarg value="-Dgluegen.debug.NativeLibrary=true"/> + <jvmarg value="-Dgluegen.debug.ProcAddressHelper=true"/> + <jvmarg value="-verbose:jni"/> + <jvmarg value="-client"/> + <jvmarg value="-d32"/> + --> + <formatter usefile="false" type="plain"/> + <formatter usefile="true" type="xml"/> + <classpath refid="junit.run.classpath"/> + + <batchtest todir="${results}"> + <fileset dir="${build_t.java}"> + <include name="${test.junit.rel}/**/*Test*"/> + <exclude name="**/*$$*"/> + </fileset> + <formatter usefile="false" type="brief"/> + <formatter usefile="true" type="xml"/> + </batchtest> + </junit> + <antcall target="test-zip-archive" inheritRefs="true" /> + </target> + + <!-- + + Hook all junit.test* .. + + --> + + <target name="java.generate" depends="junit.test1.java.generate"/> + + <target name="native.build" depends="c.configure, junit.test1.c.build" unless="build.javaonly"> + <antcall target="gluegen.cpptasks.striplibs" inheritRefs="true"> + <param name="libdir" value="${build_t.lib}"/> + </antcall> + </target> + + + <!-- + + junit.test1 + + --> + + + <target name="junit.test1.java.generate"> + <echo message=" - - - junit.test1.java.generate" /> + + <dirset id="stub.includes.fileset.test" dir="."> + <include name="${test.junit.generation.dir}/**"/> + <include name="${stub.includes.dir}/gluegen" /> + <include name="${stub.includes.dir}/macosx" /> + <include name="${stub.includes.dir}/unix" /> + <include name="${stub.includes.dir}/windows" /> + </dirset> + + <gluegen src="${test.junit.generation.dir}/test1-gluegen.c" + outputRootDir="${build_t.gen}" + config="${test.junit.generation.dir}/test1-gluegen.cfg" + literalInclude="${test.junit.generation.dir}" + includeRefid="stub.includes.fileset.test" + emitter="com.jogamp.gluegen.JavaEmitter" + dumpCPP="false" + debug="false"> + <classpath refid="gluegen.classpath" /> + </gluegen> + + <gluegen src="${test.junit.generation.dir}/test1-gluegen.c" + outputRootDir="${build_t.gen}" + config="${test.junit.generation.dir}/test1p1-gluegen.cfg" + literalInclude="${test.junit.generation.dir}" + includeRefid="stub.includes.fileset.test" + emitter="com.jogamp.gluegen.JavaEmitter" + dumpCPP="false" + debug="false"> + <classpath refid="gluegen.classpath" /> + </gluegen> + + <gluegen src="${test.junit.generation.dir}/test1-gluegen.c" + outputRootDir="${build_t.gen}" + config="${test.junit.generation.dir}/test1p2-gluegen.cfg" + literalInclude="${test.junit.generation.dir}" + includeRefid="stub.includes.fileset.test" + emitter="com.jogamp.gluegen.procaddress.ProcAddressEmitter" + dumpCPP="false" + debug="false"> + <classpath refid="gluegen.classpath" /> + </gluegen> + </target> + + <target name="junit.test1.c.build" depends="junit.test1i.c.build, junit.test1p1.c.build, junit.test1p2.c.build" unless="build.javaonly" /> + + <!-- this is the test1 implementation --> + <target name="junit.test1i.c.build"> + <patternset id="junit.test1i.c.src.files"> + <include name="src/junit/${test.junit.generation.rel}/test1.c"/> + </patternset> + + <!-- Windows hacks ro make a proper DLL --> + <linker id="linker.test1.dll.cfg.id" extends="${linker.cfg.id}"> + <linkerarg value="-Wl,-soname=test1.dll" if="isMingW"/> + <linkerarg value="-Wl,--output=test1.dll" if="isMingW"/> + </linker> + + <c.build c.compiler.src.files="junit.test1i.c.src.files" + output.lib.name="test1" + compiler.cfg.id="${compiler.cfg.id}" + linker.cfg.id="linker.test1.dll.cfg.id"/> + </target> + + <!-- this is a fixed binding to the test1 implementation --> + <target name="junit.test1p1.c.build"> + <linker id="linker.test1.fixed.cfg.id" extends="${linker.cfg.id}"> + <linkerarg value="-Wl,-soname=Bindingtest1p1.dll" if="isMingW"/> + <linkerarg value="-Wl,--output=Bindingtest1p1.dll" if="isMingW"/> + <syslibset dir="${build_t.lib}" libs="test1"/> + </linker> + + <patternset id="junit.test1p1.c.src.files"> + <include name="${build_t.gen.rootrel}/native/Bindingtest1p1Impl_JNI.c"/> + </patternset> + + <c.build c.compiler.src.files="junit.test1p1.c.src.files" + output.lib.name="Bindingtest1p1" + compiler.cfg.id="${compiler.cfg.id}" + linker.cfg.id="linker.test1.fixed.cfg.id"/> + + <antcall target="rename.dylib" inheritRefs="true"> + <param name="src" value="${build_t.lib}/libBindingtest1p1.dylib" /> + <param name="dest" value="${build_t.lib}/libBindingtest1p1.jnilib" /> + </antcall> + </target> + + <!-- this is a dynamic lookup binding to the test1 implementation --> + <target name="junit.test1p2.c.build"> + <linker id="linker.test1.runtime.cfg.id" extends="${linker.cfg.id}"> + <linkerarg value="-Wl,-soname=Bindingtest1p2.dll" if="isMingW"/> + <linkerarg value="-Wl,--output=Bindingtest1p2.dll" if="isMingW"/> + </linker> + + <patternset id="junit.test1p2.c.src.files"> + <include name="${build_t.gen.rootrel}/native/Bindingtest1p2Impl_JNI.c"/> + </patternset> + + <c.build c.compiler.src.files="junit.test1p2.c.src.files" + output.lib.name="Bindingtest1p2" + compiler.cfg.id="${compiler.cfg.id}" + linker.cfg.id="linker.test1.runtime.cfg.id"/> + + <antcall target="rename.dylib" inheritRefs="true"> + <param name="src" value="${build_t.lib}/libBindingtest1p2.dylib" /> + <param name="dest" value="${build_t.lib}/libBindingtest1p2.jnilib" /> + </antcall> + + </target> + + <!-- + + junit.test2 + + --> + + <!-- updates / create the test results zip file --> + <target name="test-zip-archive" depends="init"> + <zip destfile="${build}/${test.archive.name}.zip" update="true"> + <zipfileset dir="${build}/test/results" prefix="${archive.name}/test-results"/> + </zip> + </target> + +</project> |