blob: de4f8e20d244520824c15a621465625b52c48393 (
plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
|
package com.sun.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 output;
static {
out.println(" - - - System info - - - ");
out.println("OS: " + System.getProperty("os.name"));
out.println("VM: " + System.getProperty("java.vm.name"));
// 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/sun/gluegen";
output = gluegenRoot + "/build/test";
out.println("path: "+path);
out.println("output: "+output);
out.println(" - - - - - - - - - - - - ");
cleanGeneratedFiles();
//setup ant build file
project = new Project();
project.setBaseDir(new File(gluegenRoot));
DefaultLogger logger = new DefaultLogger();
logger.setErrorPrintStream(out);
logger.setOutputPrintStream(out);
logger.setMessageOutputLevel(Project.MSG_INFO);
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 void cleanGeneratedFiles() {
out.println("cleaning generated files");
deleteDirectory(new File(output+"/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) {
out.println("generate binding: " + bindingName);
GlueGen.main( "-I"+path,
"-O"+output+"/gensrc",
// "-Ecom.sun.gluegen.DebugEmitter",
"-C"+path+"/"+bindingName+".cfg",
path+"/"+bindingName+".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();
}
}
}
|