26 |
26 |
package org.kepler.build;
|
27 |
27 |
|
28 |
28 |
import org.apache.tools.ant.taskdefs.Javac;
|
|
29 |
import org.apache.tools.ant.taskdefs.optional.depend.Depend;
|
|
30 |
import org.apache.tools.ant.types.Path;
|
29 |
31 |
import org.kepler.build.modules.Module;
|
30 |
32 |
import org.kepler.build.modules.ModulesTask;
|
31 |
33 |
import org.kepler.build.project.CompileClasspath;
|
... | ... | |
51 |
53 |
protected String moduleName = "undefined";
|
52 |
54 |
protected String compilerArgs = "undefined";
|
53 |
55 |
protected boolean debug = false;
|
|
56 |
protected boolean depend = false;
|
|
57 |
protected boolean dependClasspath = false;
|
|
58 |
protected boolean dependClosure = false;
|
54 |
59 |
protected List<String> exclude = new ArrayList<String>();
|
55 |
60 |
protected List<String> include = new ArrayList<String>();
|
56 |
61 |
|
... | ... | |
85 |
90 |
}
|
86 |
91 |
|
87 |
92 |
/**
|
|
93 |
* set whether to use java dependencies to delete out of date files
|
|
94 |
*
|
|
95 |
* @param depend
|
|
96 |
*/
|
|
97 |
public void setDepend(boolean depend)
|
|
98 |
{
|
|
99 |
this.depend = depend;
|
|
100 |
}
|
|
101 |
|
|
102 |
/**
|
|
103 |
* set whether Depend should use the classpath
|
|
104 |
*
|
|
105 |
* @param dependClasspath
|
|
106 |
*/
|
|
107 |
public void setDependClasspath(boolean dependClasspath)
|
|
108 |
{
|
|
109 |
this.dependClasspath = dependClasspath;
|
|
110 |
}
|
|
111 |
|
|
112 |
/**
|
|
113 |
* set whether Depend should use closure
|
|
114 |
*
|
|
115 |
* @param dependClosure
|
|
116 |
*/
|
|
117 |
public void setDependClosure(boolean dependClosure)
|
|
118 |
{
|
|
119 |
this.dependClosure = dependClosure;
|
|
120 |
}
|
|
121 |
|
|
122 |
/**
|
88 |
123 |
* set any includes
|
89 |
124 |
*
|
90 |
125 |
* @param include
|
... | ... | |
230 |
265 |
javac.setFork(true);
|
231 |
266 |
javac.setMemoryMaximumSize("512m");
|
232 |
267 |
javac.setFailonerror(true);
|
|
268 |
|
|
269 |
// Depend helps Javac by deleting out of date class files by
|
|
270 |
// determining dependencies rather than just timestamps.
|
|
271 |
Depend dep = null;
|
|
272 |
if (this.depend) {
|
|
273 |
dep = new Depend();
|
|
274 |
dep.bindToOwner(this);
|
|
275 |
dep.setSrcdir(module.getSrcPath());
|
|
276 |
|
|
277 |
if (this.dependClasspath) {
|
|
278 |
// Ant assumes that anything in the path that's not a directory
|
|
279 |
// is a jar. Kepler adds a lot of non-jar files to the
|
|
280 |
// classpath including *.htm and *.in. If you don't filter them
|
|
281 |
// out of the classpath for Depend, it will throw an exception.
|
|
282 |
Path cleanClasspath = new Path(classpath.getProject());
|
|
283 |
for (String s : classpath.list()) {
|
|
284 |
if (s.toLowerCase().endsWith(".jar") || new File(s).isDirectory()) {
|
|
285 |
cleanClasspath.setPath(s);
|
|
286 |
}
|
|
287 |
}
|
|
288 |
} else {
|
|
289 |
dep.createClasspath();
|
|
290 |
}
|
|
291 |
|
|
292 |
Path path = new Path(module.getSrcPath().getProject(), classes.getAbsolutePath());
|
|
293 |
dep.setDestDir(path);
|
|
294 |
dep.setWarnOnRmiStubs(true);
|
|
295 |
|
|
296 |
if (this.dependClosure) {
|
|
297 |
dep.setClosure(false);
|
|
298 |
}
|
|
299 |
}
|
|
300 |
|
233 |
301 |
if (osDependentExcludes)
|
234 |
302 |
{
|
235 |
303 |
javac.setExcludesfile(new File(basedir, "build-area/settings/os-dependent-excludes"));
|
|
304 |
|
|
305 |
if (this.depend) {
|
|
306 |
dep.setExcludesfile(new File(basedir, "build-area/settings/os-dependent-excludes"));
|
|
307 |
}
|
236 |
308 |
}
|
237 |
309 |
|
238 |
310 |
if (mn.equals(Module.PTOLEMY) || mn.matches(Module.PTOLEMY+"-\\d+\\.\\d+") ||
|
239 |
311 |
mn.matches(Module.PTOLEMY_KEPLER+"-\\d+\\.\\d+"))
|
240 |
312 |
{
|
241 |
313 |
javac.setIncludesfile(new File(basedir, "build-area/settings/ptolemy-includes"));
|
|
314 |
if (this.depend) {
|
|
315 |
dep.setIncludesfile(new File(basedir, "build-area/settings/ptolemy-includes"));
|
|
316 |
}
|
|
317 |
|
242 |
318 |
javac.setExcludesfile(new File(basedir, "build-area/settings/ptolemy-excludes"));
|
|
319 |
if (this.depend) {
|
|
320 |
dep.setExcludesfile(new File(basedir, "build-area/settings/ptolemy-excludes"));
|
|
321 |
}
|
243 |
322 |
}
|
244 |
323 |
|
|
324 |
if (this.depend) {
|
|
325 |
File baseCache = new File("./depcache");
|
|
326 |
if (! baseCache.exists()) {
|
|
327 |
baseCache.mkdirs();
|
|
328 |
}
|
|
329 |
|
|
330 |
// Depend uses this path. In practice, it will create
|
|
331 |
// ./depcache/<modulename>/dependencies.txt
|
|
332 |
File modDep = new File(baseCache, module.toString());
|
|
333 |
dep.setCache(modDep);
|
|
334 |
|
|
335 |
dep.execute();
|
|
336 |
}
|
|
337 |
|
245 |
338 |
if (!compilerArgs.equals("undefined"))
|
246 |
339 |
{
|
247 |
340 |
String[] args = compilerArgs.split(",");
|