diff options
Diffstat (limited to 'test/junit/com/jogamp/gluegen/BuildUtil.java')
-rw-r--r-- | test/junit/com/jogamp/gluegen/BuildUtil.java | 179 |
1 files changed, 179 insertions, 0 deletions
diff --git a/test/junit/com/jogamp/gluegen/BuildUtil.java b/test/junit/com/jogamp/gluegen/BuildUtil.java new file mode 100644 index 0000000..ce88ba2 --- /dev/null +++ b/test/junit/com/jogamp/gluegen/BuildUtil.java @@ -0,0 +1,179 @@ +/** + * Copyright 2010 JogAmp Community. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without modification, are + * permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, this list of + * conditions and the following disclaimer. + * + * 2. Redistributions in binary form must reproduce the above copyright notice, this list + * of conditions and the following disclaimer in the documentation and/or other materials + * provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY JogAmp Community ``AS IS'' AND ANY EXPRESS OR IMPLIED + * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND + * FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL JogAmp Community OR + * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR + * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR + * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON + * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING + * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF + * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + * The views and conclusions contained in the software and documentation are those of the + * authors and should not be interpreted as representing official policies, either expressed + * or implied, of JogAmp Community. + */ + +package com.jogamp.gluegen; + +import com.jogamp.gluegen.JavaEmitter; +import com.jogamp.gluegen.GlueGen; +import java.io.File; +import java.net.URISyntaxException; +import org.apache.tools.ant.DefaultLogger; +import org.apache.tools.ant.Project; +import org.apache.tools.ant.ProjectHelper; + +import static java.lang.System.*; + +/** + * @author Michael Bien + */ +public final class BuildUtil { + + private static final Project project; + + public static final String gluegenRoot; + public static final String path; + public static final String testOutput; + public static final String rootrel_build; + + static { + + out.println(" - - - System info - - - "); + out.println("OS: " + System.getProperty("os.name")); + out.println("VM: " + System.getProperty("java.vm.name")); + + String rootrel_build_tmp = System.getProperty("rootrel.build"); + if(null==rootrel_build_tmp || rootrel_build_tmp.length()==0) { + rootrel_build_tmp = "build" ; + } + rootrel_build = rootrel_build_tmp; + out.println("rootrel.build: " + rootrel_build); + + // setup paths + try { + File executionRoot = new File(BuildUtil.class.getProtectionDomain().getCodeSource().getLocation().toURI()); + out.println("execution root: " + executionRoot); + gluegenRoot = executionRoot.getParentFile().getParentFile().getParentFile().getParentFile().toString(); + out.println("gluegen project root: " + gluegenRoot); + } catch (URISyntaxException ex) { + throw new RuntimeException("can not determine gluegen root", ex); + } + + path = gluegenRoot + "/test/junit/com/jogamp/gluegen"; + testOutput = gluegenRoot + "/" + rootrel_build + "/test"; + + out.println("path: "+path); + out.println("testOutput: "+testOutput); + out.println(" - - - - - - - - - - - - "); + + cleanGeneratedFiles(); + + //setup ant build file + project = new Project(); + project.setProperty("rootrel.build", rootrel_build); + passSystemProperty(project, "gluegen-cpptasks.file"); + passSystemProperty(project, "os.arch"); + + DefaultLogger logger = new DefaultLogger(); + logger.setErrorPrintStream(out); + logger.setOutputPrintStream(out); + logger.setMessageOutputLevel(Project.MSG_WARN); + project.addBuildListener(logger); + + project.init(); + + File buildFile = new File(path, "build.xml"); + if(!buildFile.exists()) { + throw new RuntimeException("buildfile "+buildFile+" does not exist"); + } + + ProjectHelper.configureProject(project, buildFile); + } + + public static Project passSystemProperty(Project p, String name) { + String tmp = System.getProperty(name); + if(null!=tmp && tmp.length()>0) { + p.setProperty(name, tmp); + } + return p; + } + + public static void cleanGeneratedFiles() { + out.println("cleaning generated files"); + deleteDirectory(new File(testOutput+"/gensrc")); + out.println("done"); + } + + /** + * fails if ant script fails (which is a good thing). + * executeTarget throws RuntimeException on failure + */ + public static void compileJava() { + out.println("compiling java files"); + project.executeTarget("compile.java"); + out.println("done"); + } + + /** + * fails if ant script fails (which is a good thing) + * executeTarget throws RuntimeException on failure + */ + public static void compileNatives() { + out.println("compiling native files"); + project.executeTarget("compile.native"); + out.println("done"); + } + + public static void generate(String bindingName) { + generate(bindingName, JavaEmitter.class.getName()); +// generate(bindingName, DebugEmitter.class.getName()); + } + + public static void generate(String bindingName, String emitter) { + generate(bindingName, bindingName, emitter); + } + public static void generate(String bindingName, String header, String emitter) { + + out.println("generate binding to '" + bindingName+"' using '"+emitter+"'"); + + GlueGen.main( "-I"+path, + "-O"+testOutput+"/gensrc", + "-E"+emitter, + "-C"+path+"/"+bindingName+".cfg", + path+"/"+header+".h" ); + + out.println("done"); + } + + public static void deleteDirectory(File path) { + if(path.exists()) { + + File[] files = path.listFiles(); + for (int i = 0; i < files.length; i++) { + if (files[i].isDirectory()) { + deleteDirectory(files[i]); + } else { + files[i].delete(); + } + } + + path.delete(); + } + } + + +} |