git-svn-id: https://svn.apache.org/repos/asf/ant/core/trunk@272472 13f79535-47bb-0310-9956-ffa450edef68master
@@ -23,10 +23,10 @@ REM run bootstrap | |||
java -classpath bin\init;bin\bootstrap org.apache.ant.bootstrap.Bootstrap | |||
REM run full build using bootstrapped version | |||
java -classpath bootstrap\lib\start.jar;bootstrap\lib\init.jar org.apache.ant.start.Main %* | |||
java -jar bootstrap\lib\start.jar %* | |||
REM Use the full build as the build used by the build script | |||
xcopy /s dist bootstrap | |||
REM clean up after bootstrap | |||
java -classpath bootstrap\lib\start.jar:bootstrap\lib\init.jar org.apache.ant.start.Main clean | |||
java -jar bootstrap\lib\start.jar clean |
@@ -22,10 +22,10 @@ javac -classpath bin/init:bin/bootstrap -d bin/builder src/java/bootstrap/org/ap | |||
java -classpath bin/init:bin/bootstrap org.apache.ant.bootstrap.Bootstrap | |||
# run full build using bootstrapped version | |||
java -classpath bootstrap/lib/start.jar:bootstrap/lib/init.jar org.apache.ant.start.Main $* | |||
java -jar bootstrap/lib/start.jar $* | |||
# Use the full build as the build used by the build script | |||
cp -r dist/lib bootstrap | |||
#clean up after bootstrap | |||
java -classpath bootstrap/lib/start.jar:bootstrap/lib/init.jar org.apache.ant.start.Main clean | |||
java -jar bootstrap/lib/start.jar clean |
@@ -1,5 +1,5 @@ | |||
@echo off | |||
REM Copyright (c) 2000-2001 The Apache Software Foundation. All rights | |||
REM Copyright (c) 2002 The Apache Software Foundation. All rights | |||
REM reserved. | |||
java -classpath bootstrap\lib\start.jar;bootstrap\lib\init.jar org.apache.ant.start.Main %* | |||
java -jar bootstrap\lib\start.jar %* |
@@ -1,6 +1,6 @@ | |||
#!/bin/sh -x | |||
# Copyright (c) 2000-2001 The Apache Software Foundation. All rights | |||
# Copyright (c) 2002 The Apache Software Foundation. All rights | |||
# reserved. | |||
java -classpath bootstrap/lib/start.jar:bootstrap/lib/init.jar org.apache.ant.start.Main $@ | |||
java -jar bootstrap/lib/start.jar $@ |
@@ -25,7 +25,7 @@ | |||
<path refid="classpath.parser"/> | |||
</path> | |||
<path id="classpath.cli"> | |||
<path id="classpath.frontend"> | |||
<path refid="classpath.antcore"/> | |||
<pathelement location="${distlib.dir}/antcore/antcore.jar"/> | |||
</path> | |||
@@ -75,18 +75,23 @@ | |||
<jar basedir="${bin.dir}/antcore" jarfile="${distlib.dir}/antcore/antcore.jar"/> | |||
</target> | |||
<target name="cli" depends="antcore, start"> | |||
<mkdir dir="${bin.dir}/cli"/> | |||
<target name="frontend" depends="antcore, start"> | |||
<mkdir dir="${bin.dir}/frontend"/> | |||
<mkdir dir="${distlib.dir}/frontend"/> | |||
<depend destdir="${bin.dir}/cli" srcdir="${java.dir}/cli"> | |||
<classpath refid="classpath.cli"/> | |||
<depend destdir="${bin.dir}/frontend" srcdir="${java.dir}/frontend"> | |||
<classpath refid="classpath.frontend"/> | |||
</depend> | |||
<javac destdir="${bin.dir}/cli" srcdir="${java.dir}/cli" debug="${debug}"> | |||
<classpath refid="classpath.cli"/> | |||
<javac destdir="${bin.dir}/frontend" srcdir="${java.dir}/frontend" debug="${debug}"> | |||
<classpath refid="classpath.frontend"/> | |||
</javac> | |||
<jar basedir="${bin.dir}/cli" jarfile="${distlib.dir}/frontend/cli.jar"> | |||
<jar basedir="${bin.dir}/frontend" jarfile="${distlib.dir}/frontend/frontend.jar"> | |||
<include name="**/frontend/*.class"/> | |||
</jar> | |||
<jar basedir="${bin.dir}/frontend" jarfile="${distlib.dir}/frontend/cli.jar"> | |||
<include name="**/cli/*.class"/> | |||
<manifest> | |||
<attribute name="Main-Class" value="org.apache.ant.cli.Commandline"/> | |||
<attribute name="Class-Path" value="frontend.jar"/> | |||
</manifest> | |||
</jar> | |||
</target> | |||
@@ -165,7 +170,7 @@ | |||
</jar> | |||
</target> | |||
<target name="main" depends="cli, antlibs, ant1compat, remote, checkstyle"/> | |||
<target name="main" depends="frontend, antlibs, ant1compat, remote, checkstyle"/> | |||
<target name="checkstyle" if="checkstyle.available"> | |||
<taskdef name="checkstyle" | |||
@@ -197,7 +202,7 @@ | |||
<mkdir dir="${javadocs.dir}"/> | |||
<javadoc packagenames="org.apache.*" | |||
useexternalfile="yes" | |||
sourcepath="${java.dir}/antcore:${java.dir}/init:${java.dir}/common:${java.dir}/cli:${java.dir}/start" | |||
sourcepath="${java.dir}/antcore:${java.dir}/init:${java.dir}/common:${java.dir}/frontend:${java.dir}/start" | |||
destdir="${javadocs.dir}" | |||
author="true" | |||
private ="true" | |||
@@ -23,11 +23,15 @@ | |||
<xsl:text>"); </xsl:text> | |||
</xsl:template> | |||
<xsl:template match="echo"> | |||
</xsl:template> | |||
<xsl:template match="path"> | |||
<xsl:text> helper.createPath("</xsl:text> | |||
<xsl:variable name="pathName" select="attribute::id"/> | |||
<xsl:value-of select="$pathName"/> | |||
<xsl:text>"); </xsl:text> | |||
<xsl:for-each select="fileset"> | |||
<xsl:text> </xsl:text> | |||
<xsl:text>helper.addFileSetToPath("</xsl:text> | |||
@@ -48,6 +52,7 @@ | |||
</xsl:choose> | |||
<xsl:text>); </xsl:text> | |||
</xsl:for-each> | |||
<xsl:for-each select="pathelement"> | |||
<xsl:text> </xsl:text> | |||
<xsl:text>helper.addPathElementToPath("</xsl:text> | |||
@@ -56,6 +61,7 @@ | |||
<xsl:value-of select="attribute::location"/> | |||
<xsl:text>"); </xsl:text> | |||
</xsl:for-each> | |||
<xsl:for-each select="path"> | |||
<xsl:text> </xsl:text> | |||
<xsl:text>helper.addPathToPath("</xsl:text> | |||
@@ -114,17 +120,33 @@ | |||
<xsl:when test="metainf/attribute::includes"> | |||
<xsl:text>"</xsl:text> | |||
<xsl:value-of select="metainf/attribute::includes"/> | |||
<xsl:text>"</xsl:text> | |||
<xsl:text>", </xsl:text> | |||
</xsl:when> | |||
<xsl:otherwise> | |||
<xsl:text>null</xsl:text> | |||
<xsl:text>null, </xsl:text> | |||
</xsl:otherwise> | |||
</xsl:choose> | |||
</xsl:when> | |||
<xsl:otherwise> | |||
<xsl:text>null, null</xsl:text> | |||
<xsl:text>null, null, </xsl:text> | |||
</xsl:otherwise> | |||
</xsl:choose> | |||
<xsl:choose> | |||
<xsl:when test="manifest/attribute[attribute::name='Class-Path']"> | |||
<xsl:text>"</xsl:text> | |||
<xsl:value-of select="manifest/attribute[attribute::name='Class-Path']/attribute::value"/> | |||
<xsl:text>", </xsl:text> | |||
</xsl:when> | |||
<xsl:otherwise>null, </xsl:otherwise> | |||
</xsl:choose> | |||
<xsl:choose> | |||
<xsl:when test="manifest/attribute[attribute::name='Main-Class']"> | |||
<xsl:text>"</xsl:text> | |||
<xsl:value-of select="manifest/attribute[attribute::name='Main-Class']/attribute::value"/> | |||
<xsl:text>"</xsl:text> | |||
</xsl:when> | |||
<xsl:otherwise>null</xsl:otherwise> | |||
</xsl:choose> | |||
<xsl:text>); </xsl:text> | |||
</xsl:template> | |||
@@ -37,7 +37,7 @@ public class Ant1CompatBuilder { | |||
helper.copyFileset("${bin.dir}/ant1src_copy", "${bin.dir}/ant1compat"); | |||
helper.copyFileset("${ant1etc.dir}", "${bin.dir}/ant1compat/${optional.package}/junit/xsl"); | |||
helper.jar("${bin.dir}/ant1compat", "${distlib.dir}/antlibs/ant1compat.jar", | |||
"${java.dir}/antlibs/ant1compat", "antlib.xml"); | |||
"${java.dir}/antlibs/ant1compat", "antlib.xml", null, null); | |||
} | |||
protected void clean(BuildHelper helper) { | |||
} | |||
@@ -64,7 +64,9 @@ import java.util.Iterator; | |||
import java.util.List; | |||
import java.util.Map; | |||
import java.util.StringTokenizer; | |||
import java.util.jar.Attributes; | |||
import java.util.jar.JarOutputStream; | |||
import java.util.jar.Manifest; | |||
import java.util.zip.ZipEntry; | |||
/** | |||
@@ -90,6 +92,7 @@ public class BuildHelper { | |||
} | |||
/** The properties which have been defined in the build */ | |||
private Map properties = new HashMap(); | |||
@@ -99,6 +102,7 @@ public class BuildHelper { | |||
/** Filesets created in the build */ | |||
private Map filesets = new HashMap(); | |||
/** | |||
* Set a property for the build | |||
* | |||
@@ -108,30 +112,49 @@ public class BuildHelper { | |||
protected void setProperty(String propertyName, String propertyValue) { | |||
if (!properties.containsKey(propertyName)) { | |||
String value = resolve(propertyValue); | |||
properties.put(propertyName, value); | |||
} | |||
} | |||
/** | |||
* Create a Jar | |||
* | |||
* @param basedir the base directpory from which files are added to the | |||
* jar | |||
* @param metaInfDir the directory containing the META-INF for the jar | |||
* @param metaInfIncludes the files to be included in the META-INF area | |||
* of the jar | |||
* @param metaInfIncludes the files to be included in the META-INF area of | |||
* the jar | |||
* @param jarFile the file in which the Jar is created | |||
* @param classpath Class-Path attribute in manifest | |||
* @param mainClass Main-Class attribute in manifest | |||
*/ | |||
protected void jar(String basedir, String jarFile, String metaInfDir, | |||
String metaInfIncludes) { | |||
String metaInfIncludes, | |||
String classpath, String mainClass) { | |||
try { | |||
File base = new File(resolve(basedir)); | |||
File jar = new File(resolve(jarFile)); | |||
Manifest manifest = new Manifest(); | |||
Attributes attributes = manifest.getMainAttributes(); | |||
attributes.putValue("Manifest-Version", "1.0"); | |||
attributes.putValue("Created-By", "Mutant Bootstrap"); | |||
if (classpath != null) { | |||
attributes.putValue("Class-Path", classpath); | |||
} | |||
if (mainClass != null) { | |||
attributes.putValue("Main-Class", mainClass); | |||
} | |||
JarOutputStream jos | |||
= new JarOutputStream(new FileOutputStream(jar)); | |||
= new JarOutputStream(new FileOutputStream(jar), manifest); | |||
addToJar(jos, base, null); | |||
if (metaInfDir != null) { | |||
File[] metaFileSet = buildFileSet(metaInfDir, metaInfIncludes); | |||
addFilesToJar(jos, new File(resolve(metaInfDir)), | |||
metaFileSet, "META-INF"); | |||
} | |||
@@ -142,38 +165,44 @@ public class BuildHelper { | |||
} | |||
} | |||
/** | |||
* Compile a set of files | |||
* | |||
* @param srcDir the source directory | |||
* @param destDir where the compiled classes will go | |||
* @param classpathRef the id of a path object with the classpath for | |||
* the build | |||
* @param classpathRef the id of a path object with the classpath for the | |||
* build | |||
*/ | |||
protected void javac(String srcDir, String destDir, String classpathRef) { | |||
List javaFiles = new ArrayList(); | |||
String src = resolve(srcDir); | |||
StringTokenizer tokenizer = new StringTokenizer(src, ":"); | |||
while (tokenizer.hasMoreTokens()) { | |||
File srcLocation = new File(tokenizer.nextToken()); | |||
getJavaFiles(srcLocation, javaFiles); | |||
} | |||
File dest = new File(resolve(destDir)); | |||
int numArgs = javaFiles.size() + 2; | |||
if (classpathRef != null) { | |||
numArgs += 2; | |||
} | |||
String[] args = new String[numArgs]; | |||
int index = 0; | |||
args[index++] = "-d"; | |||
args[index++] = dest.getPath(); | |||
if (classpathRef != null) { | |||
String path = (String) paths.get(resolve(classpathRef)); | |||
args[index++] = "-classpath"; | |||
args[index++] = path; | |||
} | |||
for (Iterator i = javaFiles.iterator(); i.hasNext();) { | |||
for (Iterator i = javaFiles.iterator(); i.hasNext(); ) { | |||
args[index++] = ((File) i.next()).getPath(); | |||
} | |||
@@ -182,6 +211,7 @@ public class BuildHelper { | |||
Object compiler = c.newInstance(); | |||
Method compile = c.getMethod("compile", | |||
new Class[]{(new String[]{}).getClass()}); | |||
compile.invoke(compiler, new Object[]{args}); | |||
} catch (Exception e) { | |||
e.printStackTrace(); | |||
@@ -189,6 +219,7 @@ public class BuildHelper { | |||
} | |||
} | |||
/** | |||
* Copy a directory | |||
* | |||
@@ -198,9 +229,11 @@ public class BuildHelper { | |||
protected void copyFileset(String fromDir, String toDir) { | |||
File from = new File(resolve(fromDir)); | |||
File to = new File(resolve(toDir)); | |||
copyDir(from, to); | |||
} | |||
/** | |||
* Add a fileset to this build helper | |||
* | |||
@@ -210,11 +243,13 @@ public class BuildHelper { | |||
*/ | |||
protected void addFileSet(String name, File root, File[] files) { | |||
FileSetInfo info = new FileSetInfo(); | |||
info.root = root; | |||
info.files = files; | |||
filesets.put(name, info); | |||
} | |||
/** | |||
* Copy a fileset given a reference to the source fileset | |||
* | |||
@@ -223,12 +258,15 @@ public class BuildHelper { | |||
*/ | |||
protected void copyFilesetRef(String fileSetRef, String toDir) { | |||
FileSetInfo fileset = (FileSetInfo) filesets.get(resolve(fileSetRef)); | |||
if (fileset != null) { | |||
File to = new File(resolve(toDir)); | |||
copyFileList(fileset.root, fileset.files, to); | |||
} | |||
} | |||
/** | |||
* Make a directory | |||
* | |||
@@ -236,9 +274,11 @@ public class BuildHelper { | |||
*/ | |||
protected void mkdir(String dirName) { | |||
File dir = new File(resolve(dirName)); | |||
dir.mkdirs(); | |||
} | |||
/** | |||
* Create a path object | |||
* | |||
@@ -246,9 +286,11 @@ public class BuildHelper { | |||
*/ | |||
protected void createPath(String pathName) { | |||
String path = ""; | |||
paths.put(pathName, path); | |||
} | |||
/** | |||
* Add a fileset to a path | |||
* | |||
@@ -260,6 +302,7 @@ public class BuildHelper { | |||
String filesetIncludes) { | |||
File[] files = buildFileSet(filesetDir, filesetIncludes); | |||
String currentPath = (String) paths.get(pathName); | |||
for (int i = 0; i < files.length; ++i) { | |||
if (currentPath == null || currentPath.length() == 0) { | |||
currentPath = files[i].getPath(); | |||
@@ -271,6 +314,7 @@ public class BuildHelper { | |||
paths.put(pathName, currentPath); | |||
} | |||
/** | |||
* Add a new element to a path | |||
* | |||
@@ -280,6 +324,7 @@ public class BuildHelper { | |||
protected void addPathElementToPath(String pathName, String location) { | |||
String pathElement = resolve(location).replace('/', File.separatorChar); | |||
String currentPath = (String) paths.get(pathName); | |||
if (currentPath == null || currentPath.length() == 0) { | |||
currentPath = pathElement; | |||
} else { | |||
@@ -288,6 +333,7 @@ public class BuildHelper { | |||
paths.put(pathName, currentPath); | |||
} | |||
/** | |||
* Add an existing path to another path | |||
* | |||
@@ -296,11 +342,13 @@ public class BuildHelper { | |||
*/ | |||
protected void addPathToPath(String pathName, String pathNameToAdd) { | |||
String pathToAdd = (String) paths.get(pathNameToAdd); | |||
if (pathToAdd == null || pathToAdd.length() == 0) { | |||
return; | |||
} | |||
String currentPath = (String) paths.get(pathName); | |||
if (currentPath == null || currentPath.length() == 0) { | |||
currentPath = pathToAdd; | |||
} else { | |||
@@ -309,6 +357,7 @@ public class BuildHelper { | |||
paths.put(pathName, currentPath); | |||
} | |||
/** | |||
* Get the set of Java files to be compiled | |||
* | |||
@@ -317,6 +366,7 @@ public class BuildHelper { | |||
*/ | |||
private void getJavaFiles(File srcDir, List javaFiles) { | |||
File[] files = srcDir.listFiles(); | |||
for (int i = 0; i < files.length; ++i) { | |||
if (files[i].isDirectory()) { | |||
getJavaFiles(files[i], javaFiles); | |||
@@ -326,6 +376,7 @@ public class BuildHelper { | |||
} | |||
} | |||
/** | |||
* Copy a file | |||
* | |||
@@ -340,6 +391,7 @@ public class BuildHelper { | |||
FileOutputStream out = new FileOutputStream(dest); | |||
byte[] buf = new byte[1024 * 16]; | |||
int count = 0; | |||
count = in.read(buf, 0, buf.length); | |||
while (count != -1) { | |||
out.write(buf, 0, count); | |||
@@ -355,6 +407,7 @@ public class BuildHelper { | |||
} | |||
} | |||
/** | |||
* Copy a list of files from one directory to another, preserving the | |||
* relative paths | |||
@@ -371,6 +424,7 @@ public class BuildHelper { | |||
String name | |||
= files[i].getPath().substring(root.getPath().length() + 1); | |||
File dest = new File(to, name); | |||
if (files[i].isDirectory()) { | |||
copyDir(files[i], dest); | |||
} else { | |||
@@ -379,6 +433,7 @@ public class BuildHelper { | |||
} | |||
} | |||
/** | |||
* Copy a directory | |||
* | |||
@@ -387,10 +442,13 @@ public class BuildHelper { | |||
*/ | |||
private void copyDir(File from, File to) { | |||
to.mkdirs(); | |||
File[] files = from.listFiles(); | |||
copyFileList(from, files, to); | |||
} | |||
/** | |||
* Add a directory to a Jar | |||
* | |||
@@ -403,9 +461,11 @@ public class BuildHelper { | |||
private void addToJar(JarOutputStream jos, File dir, String prefix) | |||
throws IOException { | |||
File[] files = dir.listFiles(); | |||
addFilesToJar(jos, dir, files, prefix); | |||
} | |||
/** | |||
* Add a set of files to a jar | |||
* | |||
@@ -420,11 +480,13 @@ public class BuildHelper { | |||
File[] files, String prefix) throws IOException { | |||
for (int i = 0; i < files.length; i++) { | |||
String name = files[i].getPath().replace('\\', '/'); | |||
name = name.substring(dir.getPath().length() + 1); | |||
if (prefix != null) { | |||
name = prefix + "/" + name; | |||
} | |||
ZipEntry ze = new ZipEntry(name); | |||
jos.putNextEntry(ze); | |||
if (files[i].isDirectory()) { | |||
addToJar(jos, files[i], name); | |||
@@ -432,6 +494,7 @@ public class BuildHelper { | |||
FileInputStream fis = new FileInputStream(files[i]); | |||
int count = 0; | |||
byte[] buf = new byte[8 * 1024]; | |||
count = fis.read(buf, 0, buf.length); | |||
while (count != -1) { | |||
jos.write(buf, 0, count); | |||
@@ -442,9 +505,10 @@ public class BuildHelper { | |||
} | |||
} | |||
/** | |||
* Build a simple fileset. Only simple inclusion filtering is supported | |||
* - no complicated patterns. | |||
* Build a simple fileset. Only simple inclusion filtering is supported - | |||
* no complicated patterns. | |||
* | |||
* @param filesetDir the base directory of the fileset | |||
* @param filesetIncludes the simple includes spec for the fileset | |||
@@ -455,11 +519,13 @@ public class BuildHelper { | |||
return new File[0]; | |||
} | |||
final String includes = resolve(filesetIncludes); | |||
if (includes.indexOf("**") != -1) { | |||
throw new RuntimeException("Simple fileset cannot handle ** " | |||
+ "style includes"); | |||
} | |||
int index = 0; | |||
if (includes.charAt(0) == '*') { | |||
index = 1; | |||
} | |||
@@ -469,6 +535,7 @@ public class BuildHelper { | |||
} | |||
File base = new File(resolve(filesetDir)); | |||
return base.listFiles( | |||
new FilenameFilter() { | |||
public boolean accept(File dir, String name) { | |||
@@ -481,6 +548,7 @@ public class BuildHelper { | |||
}); | |||
} | |||
/** | |||
* Resolve the property references in a string | |||
* | |||
@@ -490,11 +558,13 @@ public class BuildHelper { | |||
*/ | |||
private String resolve(String propertyValue) { | |||
String newValue = propertyValue; | |||
while (newValue.indexOf("${") != -1) { | |||
int index = newValue.indexOf("${"); | |||
int endIndex = newValue.indexOf("}", index); | |||
String propertyName = newValue.substring(index + 2, endIndex); | |||
String repValue = (String) properties.get(propertyName); | |||
newValue = newValue.substring(0, index) + | |||
repValue + newValue.substring(endIndex + 1); | |||
} | |||
@@ -141,6 +141,7 @@ public class Builder { | |||
addJavaFiles(files, UTIL_ROOT); | |||
addJavaFiles(files, new File(UTIL_ROOT, "depend")); | |||
addJavaFiles(files, ZIP_ROOT); | |||
addJavaFiles(files, new File(UTIL_ROOT, "facade")); | |||
files.add(new File(PACKAGE_ROOT, "BuildException.java")); | |||
files.add(new File(PACKAGE_ROOT, "Location.java")); | |||
@@ -163,7 +164,7 @@ public class Builder { | |||
files.add(new File(UTIL_ROOT, "regexp/RegexpMatcherFactory.java")); | |||
files.add(new File(FILTERS_ROOT, "util/ChainReaderHelper.java")); | |||
// these shouyld not be included | |||
// these should not be included | |||
files.remove(new File(TYPES_ROOT, "DataType.java")); | |||
files.remove(new File(TASKDEFS_ROOT, "Ant.java")); | |||
files.remove(new File(TASKDEFS_ROOT, "CallTarget.java")); | |||
@@ -200,7 +201,7 @@ public class Builder { | |||
mutantBuilder.common(mainBuild); | |||
mutantBuilder.antcore(mainBuild); | |||
mutantBuilder.start(mainBuild); | |||
mutantBuilder.cli(mainBuild); | |||
mutantBuilder.frontend(mainBuild); | |||
BuildHelper systemBuild = new BuildHelper(); | |||
systemBuild.setProperty("libset", "system"); | |||
@@ -18,9 +18,9 @@ public class MutantBuilder { | |||
helper.addPathElementToPath("classpath.antcore", "${distlib.dir}/common/common.jar"); | |||
helper.addPathToPath("classpath.antcore", "classpath.common"); | |||
helper.addPathToPath("classpath.antcore", "classpath.parser"); | |||
helper.createPath("classpath.cli"); | |||
helper.addPathElementToPath("classpath.cli", "${distlib.dir}/antcore/antcore.jar"); | |||
helper.addPathToPath("classpath.cli", "classpath.antcore"); | |||
helper.createPath("classpath.frontend"); | |||
helper.addPathElementToPath("classpath.frontend", "${distlib.dir}/antcore/antcore.jar"); | |||
helper.addPathToPath("classpath.frontend", "classpath.antcore"); | |||
helper.createPath("classpath.start"); | |||
helper.addPathElementToPath("classpath.start", "${distlib.dir}/init.jar"); | |||
} | |||
@@ -33,36 +33,38 @@ public class MutantBuilder { | |||
helper.mkdir("${bin.dir}/init"); | |||
helper.javac("${java.dir}/init", "${bin.dir}/init", null); | |||
helper.jar("${bin.dir}/init", "${distlib.dir}/init.jar", | |||
null, null); | |||
null, null, null, null); | |||
} | |||
protected void common(BuildHelper helper) { | |||
helper.mkdir("${bin.dir}/common"); | |||
helper.mkdir("${distlib.dir}/common"); | |||
helper.javac("${java.dir}/common", "${bin.dir}/common", "classpath.common"); | |||
helper.jar("${bin.dir}/common", "${distlib.dir}/common/common.jar", | |||
null, null); | |||
null, null, null, null); | |||
} | |||
protected void antcore(BuildHelper helper) { | |||
helper.mkdir("${bin.dir}/antcore"); | |||
helper.mkdir("${distlib.dir}/antcore"); | |||
helper.javac("${java.dir}/antcore", "${bin.dir}/antcore", "classpath.antcore"); | |||
helper.jar("${bin.dir}/antcore", "${distlib.dir}/antcore/antcore.jar", | |||
null, null); | |||
null, null, null, null); | |||
} | |||
protected void cli(BuildHelper helper) { | |||
helper.mkdir("${bin.dir}/cli"); | |||
protected void frontend(BuildHelper helper) { | |||
helper.mkdir("${bin.dir}/frontend"); | |||
helper.mkdir("${distlib.dir}/frontend"); | |||
helper.javac("${java.dir}/cli", "${bin.dir}/cli", "classpath.cli"); | |||
helper.jar("${bin.dir}/cli", "${distlib.dir}/frontend/cli.jar", | |||
null, null); | |||
helper.javac("${java.dir}/frontend", "${bin.dir}/frontend", "classpath.frontend"); | |||
helper.jar("${bin.dir}/frontend", "${distlib.dir}/frontend/frontend.jar", | |||
null, null, null, null); | |||
helper.jar("${bin.dir}/frontend", "${distlib.dir}/frontend/cli.jar", | |||
null, null, "frontend.jar", "org.apache.ant.cli.Commandline"); | |||
} | |||
protected void start(BuildHelper helper) { | |||
helper.mkdir("${bin.dir}/start"); | |||
helper.javac("${java.dir}/start", "${bin.dir}/start", "classpath.start"); | |||
helper.jar("${bin.dir}/start", "${distlib.dir}/start.jar", | |||
null, null); | |||
null, null, "init.jar", "org.apache.ant.start.Main"); | |||
helper.jar("${bin.dir}/start", "${distlib.dir}/ant.jar", | |||
null, null); | |||
null, null, "start.jar", "org.apache.tools.ant.Main"); | |||
} | |||
protected void ant1compat(BuildHelper helper) { | |||
} | |||
@@ -70,7 +72,7 @@ public class MutantBuilder { | |||
helper.mkdir("${bin.dir}/remote"); | |||
helper.javac("${java.dir}/remote", "${bin.dir}/remote", "classpath.start"); | |||
helper.jar("${bin.dir}/remote", "${distlib.dir}/remote.jar", | |||
null, null); | |||
null, null, null, "org.apache.ant.remote.RemoteMain"); | |||
} | |||
protected void clean(BuildHelper helper) { | |||
} | |||
@@ -84,7 +86,7 @@ public class MutantBuilder { | |||
helper.addPathToPath("classpath.antlibs", "classpath.common"); | |||
helper.javac("${java.dir}/antlibs/${libset}", "${bin.dir}/antlibs/${libset}", "classpath.antlibs"); | |||
helper.jar("${bin.dir}/antlibs/${libset}", "${distlib.dir}/antlibs/${libset}.jar", | |||
"${java.dir}/antlibs/${libset}", "antlib.xml"); | |||
"${java.dir}/antlibs/${libset}", "antlib.xml", null, null); | |||
} | |||
protected void main(BuildHelper helper) { | |||
} | |||
@@ -79,6 +79,7 @@ import org.apache.ant.common.util.ConfigException; | |||
import org.apache.ant.common.util.DemuxOutputStream; | |||
import org.apache.ant.init.InitConfig; | |||
import org.apache.ant.init.InitUtils; | |||
import org.apache.ant.frontend.FrontendUtils; | |||
/** | |||
* This is the command line front end. It drives the core. | |||
@@ -87,12 +88,6 @@ import org.apache.ant.init.InitUtils; | |||
* @created 9 January 2002 | |||
*/ | |||
public class Commandline { | |||
/** The default build file name */ | |||
public static final String DEFAULT_BUILD_FILENAME = "build.ant"; | |||
/** The default build file name */ | |||
public static final String DEFAULT_ANT1_FILENAME = "build.xml"; | |||
/** The initialisation configuration for Ant */ | |||
private InitConfig initConfig; | |||
@@ -182,58 +177,6 @@ public class Commandline { | |||
} | |||
} | |||
/** | |||
* Get the AntConfig from the given config area if it is available | |||
* | |||
* @param configArea the config area from which the config may be read | |||
* @return the AntConfig instance representing the config info read in | |||
* from the config area. May be null if the AntConfig is not | |||
* present | |||
* @exception ConfigException if the URL for the config file cannotbe | |||
* formed. | |||
*/ | |||
private AntConfig getAntConfig(File configArea) throws ConfigException { | |||
File configFile = new File(configArea, "antconfig.xml"); | |||
try { | |||
return getAntConfigFile(configFile); | |||
} catch (FileNotFoundException e) { | |||
// ignore if files are not present | |||
return null; | |||
} | |||
} | |||
/** | |||
* Read in a config file | |||
* | |||
* @param configFile the file containing the XML config | |||
* @return the parsed config object | |||
* @exception ConfigException if the config cannot be parsed | |||
* @exception FileNotFoundException if the file cannot be found. | |||
*/ | |||
private AntConfig getAntConfigFile(File configFile) | |||
throws ConfigException, FileNotFoundException { | |||
try { | |||
URL configFileURL = InitUtils.getFileURL(configFile); | |||
ParseContext context = new ParseContext(); | |||
AntConfigHandler configHandler = new AntConfigHandler(); | |||
context.parse(configFileURL, "antconfig", configHandler); | |||
return configHandler.getAntConfig(); | |||
} catch (MalformedURLException e) { | |||
throw new ConfigException("Unable to form URL to read config from " | |||
+ configFile, e); | |||
} catch (XMLParseException e) { | |||
if (e.getCause() instanceof FileNotFoundException) { | |||
throw (FileNotFoundException) e.getCause(); | |||
} | |||
throw new ConfigException("Unable to parse config file from " | |||
+ configFile, e); | |||
} | |||
} | |||
/** | |||
* Get an option value | |||
* | |||
@@ -273,9 +216,10 @@ public class Commandline { | |||
determineBuildFile(); | |||
AntConfig config = new AntConfig(); | |||
AntConfig userConfig = getAntConfig(initConfig.getUserConfigArea()); | |||
AntConfig userConfig = | |||
FrontendUtils.getAntConfig(initConfig.getUserConfigArea()); | |||
AntConfig systemConfig | |||
= getAntConfig(initConfig.getSystemConfigArea()); | |||
= FrontendUtils.getAntConfig(initConfig.getSystemConfigArea()); | |||
if (systemConfig != null) { | |||
config.merge(systemConfig); | |||
@@ -286,7 +230,8 @@ public class Commandline { | |||
for (Iterator i = configFiles.iterator(); i.hasNext();) { | |||
File configFile = (File) i.next(); | |||
AntConfig runConfig = getAntConfigFile(configFile); | |||
AntConfig runConfig | |||
= FrontendUtils.getAntConfigFile(configFile); | |||
config.merge(runConfig); | |||
} | |||
@@ -398,9 +343,11 @@ public class Commandline { | |||
*/ | |||
private void determineBuildFile() throws ConfigException { | |||
if (buildFileURL == null) { | |||
File defaultBuildFile = new File(DEFAULT_BUILD_FILENAME); | |||
File defaultBuildFile | |||
= new File(FrontendUtils.DEFAULT_BUILD_FILENAME); | |||
if (!defaultBuildFile.exists()) { | |||
File ant1BuildFile = new File(DEFAULT_ANT1_FILENAME); | |||
File ant1BuildFile | |||
= new File(FrontendUtils.DEFAULT_ANT1_FILENAME); | |||
if (ant1BuildFile.exists()) { | |||
defaultBuildFile = ant1BuildFile; | |||
} |
@@ -0,0 +1,136 @@ | |||
/* | |||
* The Apache Software License, Version 1.1 | |||
* | |||
* Copyright (c) 2002 The Apache Software Foundation. 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. | |||
* | |||
* 3. The end-user documentation included with the redistribution, if | |||
* any, must include the following acknowlegement: | |||
* "This product includes software developed by the | |||
* Apache Software Foundation (http://www.apache.org/)." | |||
* Alternately, this acknowlegement may appear in the software itself, | |||
* if and wherever such third-party acknowlegements normally appear. | |||
* | |||
* 4. The names "The Jakarta Project", "Ant", and "Apache Software | |||
* Foundation" must not be used to endorse or promote products derived | |||
* from this software without prior written permission. For written | |||
* permission, please contact apache@apache.org. | |||
* | |||
* 5. Products derived from this software may not be called "Apache" | |||
* nor may "Apache" appear in their names without prior written | |||
* permission of the Apache Group. | |||
* | |||
* THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED 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 THE APACHE SOFTWARE FOUNDATION OR | |||
* ITS 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. | |||
* ==================================================================== | |||
* | |||
* This software consists of voluntary contributions made by many | |||
* individuals on behalf of the Apache Software Foundation. For more | |||
* information on the Apache Software Foundation, please see | |||
* <http://www.apache.org/>. | |||
*/ | |||
package org.apache.ant.frontend; | |||
import java.io.File; | |||
import java.io.FileNotFoundException; | |||
import java.net.MalformedURLException; | |||
import java.net.URL; | |||
import org.apache.ant.antcore.config.AntConfig; | |||
import org.apache.ant.antcore.config.AntConfigHandler; | |||
import org.apache.ant.antcore.xml.ParseContext; | |||
import org.apache.ant.antcore.xml.XMLParseException; | |||
import org.apache.ant.common.util.ConfigException; | |||
import org.apache.ant.init.InitUtils; | |||
/** | |||
* Frontend Utilities methods and constants. | |||
* | |||
* @author Conor MacNeill | |||
* @created 16 April 2002 | |||
*/ | |||
public class FrontendUtils { | |||
/** The default build file name */ | |||
public static final String DEFAULT_BUILD_FILENAME = "build.ant"; | |||
/** The default build file name */ | |||
public static final String DEFAULT_ANT1_FILENAME = "build.xml"; | |||
/** | |||
* Get the AntConfig from the given config area if it is available | |||
* | |||
* @param configArea the config area from which the config may be read | |||
* @return the AntConfig instance representing the config info read in | |||
* from the config area. May be null if the AntConfig is not present | |||
* @exception ConfigException if the URL for the config file cannotbe | |||
* formed. | |||
*/ | |||
public static AntConfig getAntConfig(File configArea) | |||
throws ConfigException { | |||
File configFile = new File(configArea, "antconfig.xml"); | |||
try { | |||
return getAntConfigFile(configFile); | |||
} catch (FileNotFoundException e) { | |||
// ignore if files are not present | |||
return null; | |||
} | |||
} | |||
/** | |||
* Read in a config file | |||
* | |||
* @param configFile the file containing the XML config | |||
* @return the parsed config object | |||
* @exception ConfigException if the config cannot be parsed | |||
* @exception FileNotFoundException if the file cannot be found. | |||
*/ | |||
public static AntConfig getAntConfigFile(File configFile) | |||
throws ConfigException, FileNotFoundException { | |||
try { | |||
URL configFileURL = InitUtils.getFileURL(configFile); | |||
ParseContext context = new ParseContext(); | |||
AntConfigHandler configHandler = new AntConfigHandler(); | |||
context.parse(configFileURL, "antconfig", configHandler); | |||
return configHandler.getAntConfig(); | |||
} catch (MalformedURLException e) { | |||
throw new ConfigException("Unable to form URL to read config from " | |||
+ configFile, e); | |||
} catch (XMLParseException e) { | |||
if (e.getCause() instanceof FileNotFoundException) { | |||
throw (FileNotFoundException) e.getCause(); | |||
} | |||
throw new ConfigException("Unable to parse config file from " | |||
+ configFile, e); | |||
} | |||
} | |||
} | |||