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 | java -classpath bin\init;bin\bootstrap org.apache.ant.bootstrap.Bootstrap | ||||
REM run full build using bootstrapped version | 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 | REM Use the full build as the build used by the build script | ||||
xcopy /s dist bootstrap | xcopy /s dist bootstrap | ||||
REM clean up after 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 | java -classpath bin/init:bin/bootstrap org.apache.ant.bootstrap.Bootstrap | ||||
# run full build using bootstrapped version | # 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 | # Use the full build as the build used by the build script | ||||
cp -r dist/lib bootstrap | cp -r dist/lib bootstrap | ||||
#clean up after 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 | @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. | 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 | #!/bin/sh -x | ||||
# Copyright (c) 2000-2001 The Apache Software Foundation. All rights | |||||
# Copyright (c) 2002 The Apache Software Foundation. All rights | |||||
# reserved. | # 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 refid="classpath.parser"/> | ||||
</path> | </path> | ||||
<path id="classpath.cli"> | |||||
<path id="classpath.frontend"> | |||||
<path refid="classpath.antcore"/> | <path refid="classpath.antcore"/> | ||||
<pathelement location="${distlib.dir}/antcore/antcore.jar"/> | <pathelement location="${distlib.dir}/antcore/antcore.jar"/> | ||||
</path> | </path> | ||||
@@ -75,18 +75,23 @@ | |||||
<jar basedir="${bin.dir}/antcore" jarfile="${distlib.dir}/antcore/antcore.jar"/> | <jar basedir="${bin.dir}/antcore" jarfile="${distlib.dir}/antcore/antcore.jar"/> | ||||
</target> | </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"/> | <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> | </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> | </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> | <manifest> | ||||
<attribute name="Main-Class" value="org.apache.ant.cli.Commandline"/> | <attribute name="Main-Class" value="org.apache.ant.cli.Commandline"/> | ||||
<attribute name="Class-Path" value="frontend.jar"/> | |||||
</manifest> | </manifest> | ||||
</jar> | </jar> | ||||
</target> | </target> | ||||
@@ -165,7 +170,7 @@ | |||||
</jar> | </jar> | ||||
</target> | </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"> | <target name="checkstyle" if="checkstyle.available"> | ||||
<taskdef name="checkstyle" | <taskdef name="checkstyle" | ||||
@@ -197,7 +202,7 @@ | |||||
<mkdir dir="${javadocs.dir}"/> | <mkdir dir="${javadocs.dir}"/> | ||||
<javadoc packagenames="org.apache.*" | <javadoc packagenames="org.apache.*" | ||||
useexternalfile="yes" | 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}" | destdir="${javadocs.dir}" | ||||
author="true" | author="true" | ||||
private ="true" | private ="true" | ||||
@@ -23,11 +23,15 @@ | |||||
<xsl:text>"); </xsl:text> | <xsl:text>"); </xsl:text> | ||||
</xsl:template> | </xsl:template> | ||||
<xsl:template match="echo"> | |||||
</xsl:template> | |||||
<xsl:template match="path"> | <xsl:template match="path"> | ||||
<xsl:text> helper.createPath("</xsl:text> | <xsl:text> helper.createPath("</xsl:text> | ||||
<xsl:variable name="pathName" select="attribute::id"/> | <xsl:variable name="pathName" select="attribute::id"/> | ||||
<xsl:value-of select="$pathName"/> | <xsl:value-of select="$pathName"/> | ||||
<xsl:text>"); </xsl:text> | <xsl:text>"); </xsl:text> | ||||
<xsl:for-each select="fileset"> | <xsl:for-each select="fileset"> | ||||
<xsl:text> </xsl:text> | <xsl:text> </xsl:text> | ||||
<xsl:text>helper.addFileSetToPath("</xsl:text> | <xsl:text>helper.addFileSetToPath("</xsl:text> | ||||
@@ -48,6 +52,7 @@ | |||||
</xsl:choose> | </xsl:choose> | ||||
<xsl:text>); </xsl:text> | <xsl:text>); </xsl:text> | ||||
</xsl:for-each> | </xsl:for-each> | ||||
<xsl:for-each select="pathelement"> | <xsl:for-each select="pathelement"> | ||||
<xsl:text> </xsl:text> | <xsl:text> </xsl:text> | ||||
<xsl:text>helper.addPathElementToPath("</xsl:text> | <xsl:text>helper.addPathElementToPath("</xsl:text> | ||||
@@ -56,6 +61,7 @@ | |||||
<xsl:value-of select="attribute::location"/> | <xsl:value-of select="attribute::location"/> | ||||
<xsl:text>"); </xsl:text> | <xsl:text>"); </xsl:text> | ||||
</xsl:for-each> | </xsl:for-each> | ||||
<xsl:for-each select="path"> | <xsl:for-each select="path"> | ||||
<xsl:text> </xsl:text> | <xsl:text> </xsl:text> | ||||
<xsl:text>helper.addPathToPath("</xsl:text> | <xsl:text>helper.addPathToPath("</xsl:text> | ||||
@@ -114,17 +120,33 @@ | |||||
<xsl:when test="metainf/attribute::includes"> | <xsl:when test="metainf/attribute::includes"> | ||||
<xsl:text>"</xsl:text> | <xsl:text>"</xsl:text> | ||||
<xsl:value-of select="metainf/attribute::includes"/> | <xsl:value-of select="metainf/attribute::includes"/> | ||||
<xsl:text>"</xsl:text> | |||||
<xsl:text>", </xsl:text> | |||||
</xsl:when> | </xsl:when> | ||||
<xsl:otherwise> | <xsl:otherwise> | ||||
<xsl:text>null</xsl:text> | |||||
<xsl:text>null, </xsl:text> | |||||
</xsl:otherwise> | </xsl:otherwise> | ||||
</xsl:choose> | </xsl:choose> | ||||
</xsl:when> | </xsl:when> | ||||
<xsl:otherwise> | <xsl:otherwise> | ||||
<xsl:text>null, null</xsl:text> | |||||
<xsl:text>null, null, </xsl:text> | |||||
</xsl:otherwise> | </xsl:otherwise> | ||||
</xsl:choose> | </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:text>); </xsl:text> | ||||
</xsl:template> | </xsl:template> | ||||
@@ -37,7 +37,7 @@ public class Ant1CompatBuilder { | |||||
helper.copyFileset("${bin.dir}/ant1src_copy", "${bin.dir}/ant1compat"); | helper.copyFileset("${bin.dir}/ant1src_copy", "${bin.dir}/ant1compat"); | ||||
helper.copyFileset("${ant1etc.dir}", "${bin.dir}/ant1compat/${optional.package}/junit/xsl"); | helper.copyFileset("${ant1etc.dir}", "${bin.dir}/ant1compat/${optional.package}/junit/xsl"); | ||||
helper.jar("${bin.dir}/ant1compat", "${distlib.dir}/antlibs/ant1compat.jar", | 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) { | protected void clean(BuildHelper helper) { | ||||
} | } | ||||
@@ -64,7 +64,9 @@ import java.util.Iterator; | |||||
import java.util.List; | import java.util.List; | ||||
import java.util.Map; | import java.util.Map; | ||||
import java.util.StringTokenizer; | import java.util.StringTokenizer; | ||||
import java.util.jar.Attributes; | |||||
import java.util.jar.JarOutputStream; | import java.util.jar.JarOutputStream; | ||||
import java.util.jar.Manifest; | |||||
import java.util.zip.ZipEntry; | import java.util.zip.ZipEntry; | ||||
/** | /** | ||||
@@ -90,6 +92,7 @@ public class BuildHelper { | |||||
} | } | ||||
/** The properties which have been defined in the build */ | /** The properties which have been defined in the build */ | ||||
private Map properties = new HashMap(); | private Map properties = new HashMap(); | ||||
@@ -99,6 +102,7 @@ public class BuildHelper { | |||||
/** Filesets created in the build */ | /** Filesets created in the build */ | ||||
private Map filesets = new HashMap(); | private Map filesets = new HashMap(); | ||||
/** | /** | ||||
* Set a property for the build | * Set a property for the build | ||||
* | * | ||||
@@ -108,30 +112,49 @@ public class BuildHelper { | |||||
protected void setProperty(String propertyName, String propertyValue) { | protected void setProperty(String propertyName, String propertyValue) { | ||||
if (!properties.containsKey(propertyName)) { | if (!properties.containsKey(propertyName)) { | ||||
String value = resolve(propertyValue); | String value = resolve(propertyValue); | ||||
properties.put(propertyName, value); | properties.put(propertyName, value); | ||||
} | } | ||||
} | } | ||||
/** | /** | ||||
* Create a Jar | * Create a Jar | ||||
* | * | ||||
* @param basedir the base directpory from which files are added to the | * @param basedir the base directpory from which files are added to the | ||||
* jar | * jar | ||||
* @param metaInfDir the directory containing the META-INF for 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 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, | protected void jar(String basedir, String jarFile, String metaInfDir, | ||||
String metaInfIncludes) { | |||||
String metaInfIncludes, | |||||
String classpath, String mainClass) { | |||||
try { | try { | ||||
File base = new File(resolve(basedir)); | File base = new File(resolve(basedir)); | ||||
File jar = new File(resolve(jarFile)); | 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 | JarOutputStream jos | ||||
= new JarOutputStream(new FileOutputStream(jar)); | |||||
= new JarOutputStream(new FileOutputStream(jar), manifest); | |||||
addToJar(jos, base, null); | addToJar(jos, base, null); | ||||
if (metaInfDir != null) { | if (metaInfDir != null) { | ||||
File[] metaFileSet = buildFileSet(metaInfDir, metaInfIncludes); | File[] metaFileSet = buildFileSet(metaInfDir, metaInfIncludes); | ||||
addFilesToJar(jos, new File(resolve(metaInfDir)), | addFilesToJar(jos, new File(resolve(metaInfDir)), | ||||
metaFileSet, "META-INF"); | metaFileSet, "META-INF"); | ||||
} | } | ||||
@@ -142,38 +165,44 @@ public class BuildHelper { | |||||
} | } | ||||
} | } | ||||
/** | /** | ||||
* Compile a set of files | * Compile a set of files | ||||
* | * | ||||
* @param srcDir the source directory | * @param srcDir the source directory | ||||
* @param destDir where the compiled classes will go | * @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) { | protected void javac(String srcDir, String destDir, String classpathRef) { | ||||
List javaFiles = new ArrayList(); | List javaFiles = new ArrayList(); | ||||
String src = resolve(srcDir); | String src = resolve(srcDir); | ||||
StringTokenizer tokenizer = new StringTokenizer(src, ":"); | StringTokenizer tokenizer = new StringTokenizer(src, ":"); | ||||
while (tokenizer.hasMoreTokens()) { | while (tokenizer.hasMoreTokens()) { | ||||
File srcLocation = new File(tokenizer.nextToken()); | File srcLocation = new File(tokenizer.nextToken()); | ||||
getJavaFiles(srcLocation, javaFiles); | getJavaFiles(srcLocation, javaFiles); | ||||
} | } | ||||
File dest = new File(resolve(destDir)); | File dest = new File(resolve(destDir)); | ||||
int numArgs = javaFiles.size() + 2; | int numArgs = javaFiles.size() + 2; | ||||
if (classpathRef != null) { | if (classpathRef != null) { | ||||
numArgs += 2; | numArgs += 2; | ||||
} | } | ||||
String[] args = new String[numArgs]; | String[] args = new String[numArgs]; | ||||
int index = 0; | int index = 0; | ||||
args[index++] = "-d"; | args[index++] = "-d"; | ||||
args[index++] = dest.getPath(); | args[index++] = dest.getPath(); | ||||
if (classpathRef != null) { | if (classpathRef != null) { | ||||
String path = (String) paths.get(resolve(classpathRef)); | String path = (String) paths.get(resolve(classpathRef)); | ||||
args[index++] = "-classpath"; | args[index++] = "-classpath"; | ||||
args[index++] = path; | args[index++] = path; | ||||
} | } | ||||
for (Iterator i = javaFiles.iterator(); i.hasNext();) { | |||||
for (Iterator i = javaFiles.iterator(); i.hasNext(); ) { | |||||
args[index++] = ((File) i.next()).getPath(); | args[index++] = ((File) i.next()).getPath(); | ||||
} | } | ||||
@@ -182,6 +211,7 @@ public class BuildHelper { | |||||
Object compiler = c.newInstance(); | Object compiler = c.newInstance(); | ||||
Method compile = c.getMethod("compile", | Method compile = c.getMethod("compile", | ||||
new Class[]{(new String[]{}).getClass()}); | new Class[]{(new String[]{}).getClass()}); | ||||
compile.invoke(compiler, new Object[]{args}); | compile.invoke(compiler, new Object[]{args}); | ||||
} catch (Exception e) { | } catch (Exception e) { | ||||
e.printStackTrace(); | e.printStackTrace(); | ||||
@@ -189,6 +219,7 @@ public class BuildHelper { | |||||
} | } | ||||
} | } | ||||
/** | /** | ||||
* Copy a directory | * Copy a directory | ||||
* | * | ||||
@@ -198,9 +229,11 @@ public class BuildHelper { | |||||
protected void copyFileset(String fromDir, String toDir) { | protected void copyFileset(String fromDir, String toDir) { | ||||
File from = new File(resolve(fromDir)); | File from = new File(resolve(fromDir)); | ||||
File to = new File(resolve(toDir)); | File to = new File(resolve(toDir)); | ||||
copyDir(from, to); | copyDir(from, to); | ||||
} | } | ||||
/** | /** | ||||
* Add a fileset to this build helper | * Add a fileset to this build helper | ||||
* | * | ||||
@@ -210,11 +243,13 @@ public class BuildHelper { | |||||
*/ | */ | ||||
protected void addFileSet(String name, File root, File[] files) { | protected void addFileSet(String name, File root, File[] files) { | ||||
FileSetInfo info = new FileSetInfo(); | FileSetInfo info = new FileSetInfo(); | ||||
info.root = root; | info.root = root; | ||||
info.files = files; | info.files = files; | ||||
filesets.put(name, info); | filesets.put(name, info); | ||||
} | } | ||||
/** | /** | ||||
* Copy a fileset given a reference to the source fileset | * Copy a fileset given a reference to the source fileset | ||||
* | * | ||||
@@ -223,12 +258,15 @@ public class BuildHelper { | |||||
*/ | */ | ||||
protected void copyFilesetRef(String fileSetRef, String toDir) { | protected void copyFilesetRef(String fileSetRef, String toDir) { | ||||
FileSetInfo fileset = (FileSetInfo) filesets.get(resolve(fileSetRef)); | FileSetInfo fileset = (FileSetInfo) filesets.get(resolve(fileSetRef)); | ||||
if (fileset != null) { | if (fileset != null) { | ||||
File to = new File(resolve(toDir)); | File to = new File(resolve(toDir)); | ||||
copyFileList(fileset.root, fileset.files, to); | copyFileList(fileset.root, fileset.files, to); | ||||
} | } | ||||
} | } | ||||
/** | /** | ||||
* Make a directory | * Make a directory | ||||
* | * | ||||
@@ -236,9 +274,11 @@ public class BuildHelper { | |||||
*/ | */ | ||||
protected void mkdir(String dirName) { | protected void mkdir(String dirName) { | ||||
File dir = new File(resolve(dirName)); | File dir = new File(resolve(dirName)); | ||||
dir.mkdirs(); | dir.mkdirs(); | ||||
} | } | ||||
/** | /** | ||||
* Create a path object | * Create a path object | ||||
* | * | ||||
@@ -246,9 +286,11 @@ public class BuildHelper { | |||||
*/ | */ | ||||
protected void createPath(String pathName) { | protected void createPath(String pathName) { | ||||
String path = ""; | String path = ""; | ||||
paths.put(pathName, path); | paths.put(pathName, path); | ||||
} | } | ||||
/** | /** | ||||
* Add a fileset to a path | * Add a fileset to a path | ||||
* | * | ||||
@@ -260,6 +302,7 @@ public class BuildHelper { | |||||
String filesetIncludes) { | String filesetIncludes) { | ||||
File[] files = buildFileSet(filesetDir, filesetIncludes); | File[] files = buildFileSet(filesetDir, filesetIncludes); | ||||
String currentPath = (String) paths.get(pathName); | String currentPath = (String) paths.get(pathName); | ||||
for (int i = 0; i < files.length; ++i) { | for (int i = 0; i < files.length; ++i) { | ||||
if (currentPath == null || currentPath.length() == 0) { | if (currentPath == null || currentPath.length() == 0) { | ||||
currentPath = files[i].getPath(); | currentPath = files[i].getPath(); | ||||
@@ -271,6 +314,7 @@ public class BuildHelper { | |||||
paths.put(pathName, currentPath); | paths.put(pathName, currentPath); | ||||
} | } | ||||
/** | /** | ||||
* Add a new element to a path | * Add a new element to a path | ||||
* | * | ||||
@@ -280,6 +324,7 @@ public class BuildHelper { | |||||
protected void addPathElementToPath(String pathName, String location) { | protected void addPathElementToPath(String pathName, String location) { | ||||
String pathElement = resolve(location).replace('/', File.separatorChar); | String pathElement = resolve(location).replace('/', File.separatorChar); | ||||
String currentPath = (String) paths.get(pathName); | String currentPath = (String) paths.get(pathName); | ||||
if (currentPath == null || currentPath.length() == 0) { | if (currentPath == null || currentPath.length() == 0) { | ||||
currentPath = pathElement; | currentPath = pathElement; | ||||
} else { | } else { | ||||
@@ -288,6 +333,7 @@ public class BuildHelper { | |||||
paths.put(pathName, currentPath); | paths.put(pathName, currentPath); | ||||
} | } | ||||
/** | /** | ||||
* Add an existing path to another path | * Add an existing path to another path | ||||
* | * | ||||
@@ -296,11 +342,13 @@ public class BuildHelper { | |||||
*/ | */ | ||||
protected void addPathToPath(String pathName, String pathNameToAdd) { | protected void addPathToPath(String pathName, String pathNameToAdd) { | ||||
String pathToAdd = (String) paths.get(pathNameToAdd); | String pathToAdd = (String) paths.get(pathNameToAdd); | ||||
if (pathToAdd == null || pathToAdd.length() == 0) { | if (pathToAdd == null || pathToAdd.length() == 0) { | ||||
return; | return; | ||||
} | } | ||||
String currentPath = (String) paths.get(pathName); | String currentPath = (String) paths.get(pathName); | ||||
if (currentPath == null || currentPath.length() == 0) { | if (currentPath == null || currentPath.length() == 0) { | ||||
currentPath = pathToAdd; | currentPath = pathToAdd; | ||||
} else { | } else { | ||||
@@ -309,6 +357,7 @@ public class BuildHelper { | |||||
paths.put(pathName, currentPath); | paths.put(pathName, currentPath); | ||||
} | } | ||||
/** | /** | ||||
* Get the set of Java files to be compiled | * Get the set of Java files to be compiled | ||||
* | * | ||||
@@ -317,6 +366,7 @@ public class BuildHelper { | |||||
*/ | */ | ||||
private void getJavaFiles(File srcDir, List javaFiles) { | private void getJavaFiles(File srcDir, List javaFiles) { | ||||
File[] files = srcDir.listFiles(); | File[] files = srcDir.listFiles(); | ||||
for (int i = 0; i < files.length; ++i) { | for (int i = 0; i < files.length; ++i) { | ||||
if (files[i].isDirectory()) { | if (files[i].isDirectory()) { | ||||
getJavaFiles(files[i], javaFiles); | getJavaFiles(files[i], javaFiles); | ||||
@@ -326,6 +376,7 @@ public class BuildHelper { | |||||
} | } | ||||
} | } | ||||
/** | /** | ||||
* Copy a file | * Copy a file | ||||
* | * | ||||
@@ -340,6 +391,7 @@ public class BuildHelper { | |||||
FileOutputStream out = new FileOutputStream(dest); | FileOutputStream out = new FileOutputStream(dest); | ||||
byte[] buf = new byte[1024 * 16]; | byte[] buf = new byte[1024 * 16]; | ||||
int count = 0; | int count = 0; | ||||
count = in.read(buf, 0, buf.length); | count = in.read(buf, 0, buf.length); | ||||
while (count != -1) { | while (count != -1) { | ||||
out.write(buf, 0, count); | out.write(buf, 0, count); | ||||
@@ -355,6 +407,7 @@ public class BuildHelper { | |||||
} | } | ||||
} | } | ||||
/** | /** | ||||
* Copy a list of files from one directory to another, preserving the | * Copy a list of files from one directory to another, preserving the | ||||
* relative paths | * relative paths | ||||
@@ -371,6 +424,7 @@ public class BuildHelper { | |||||
String name | String name | ||||
= files[i].getPath().substring(root.getPath().length() + 1); | = files[i].getPath().substring(root.getPath().length() + 1); | ||||
File dest = new File(to, name); | File dest = new File(to, name); | ||||
if (files[i].isDirectory()) { | if (files[i].isDirectory()) { | ||||
copyDir(files[i], dest); | copyDir(files[i], dest); | ||||
} else { | } else { | ||||
@@ -379,6 +433,7 @@ public class BuildHelper { | |||||
} | } | ||||
} | } | ||||
/** | /** | ||||
* Copy a directory | * Copy a directory | ||||
* | * | ||||
@@ -387,10 +442,13 @@ public class BuildHelper { | |||||
*/ | */ | ||||
private void copyDir(File from, File to) { | private void copyDir(File from, File to) { | ||||
to.mkdirs(); | to.mkdirs(); | ||||
File[] files = from.listFiles(); | File[] files = from.listFiles(); | ||||
copyFileList(from, files, to); | copyFileList(from, files, to); | ||||
} | } | ||||
/** | /** | ||||
* Add a directory to a Jar | * Add a directory to a Jar | ||||
* | * | ||||
@@ -403,9 +461,11 @@ public class BuildHelper { | |||||
private void addToJar(JarOutputStream jos, File dir, String prefix) | private void addToJar(JarOutputStream jos, File dir, String prefix) | ||||
throws IOException { | throws IOException { | ||||
File[] files = dir.listFiles(); | File[] files = dir.listFiles(); | ||||
addFilesToJar(jos, dir, files, prefix); | addFilesToJar(jos, dir, files, prefix); | ||||
} | } | ||||
/** | /** | ||||
* Add a set of files to a jar | * Add a set of files to a jar | ||||
* | * | ||||
@@ -420,11 +480,13 @@ public class BuildHelper { | |||||
File[] files, String prefix) throws IOException { | File[] files, String prefix) throws IOException { | ||||
for (int i = 0; i < files.length; i++) { | for (int i = 0; i < files.length; i++) { | ||||
String name = files[i].getPath().replace('\\', '/'); | String name = files[i].getPath().replace('\\', '/'); | ||||
name = name.substring(dir.getPath().length() + 1); | name = name.substring(dir.getPath().length() + 1); | ||||
if (prefix != null) { | if (prefix != null) { | ||||
name = prefix + "/" + name; | name = prefix + "/" + name; | ||||
} | } | ||||
ZipEntry ze = new ZipEntry(name); | ZipEntry ze = new ZipEntry(name); | ||||
jos.putNextEntry(ze); | jos.putNextEntry(ze); | ||||
if (files[i].isDirectory()) { | if (files[i].isDirectory()) { | ||||
addToJar(jos, files[i], name); | addToJar(jos, files[i], name); | ||||
@@ -432,6 +494,7 @@ public class BuildHelper { | |||||
FileInputStream fis = new FileInputStream(files[i]); | FileInputStream fis = new FileInputStream(files[i]); | ||||
int count = 0; | int count = 0; | ||||
byte[] buf = new byte[8 * 1024]; | byte[] buf = new byte[8 * 1024]; | ||||
count = fis.read(buf, 0, buf.length); | count = fis.read(buf, 0, buf.length); | ||||
while (count != -1) { | while (count != -1) { | ||||
jos.write(buf, 0, count); | 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 filesetDir the base directory of the fileset | ||||
* @param filesetIncludes the simple includes spec for the fileset | * @param filesetIncludes the simple includes spec for the fileset | ||||
@@ -455,11 +519,13 @@ public class BuildHelper { | |||||
return new File[0]; | return new File[0]; | ||||
} | } | ||||
final String includes = resolve(filesetIncludes); | final String includes = resolve(filesetIncludes); | ||||
if (includes.indexOf("**") != -1) { | if (includes.indexOf("**") != -1) { | ||||
throw new RuntimeException("Simple fileset cannot handle ** " | throw new RuntimeException("Simple fileset cannot handle ** " | ||||
+ "style includes"); | + "style includes"); | ||||
} | } | ||||
int index = 0; | int index = 0; | ||||
if (includes.charAt(0) == '*') { | if (includes.charAt(0) == '*') { | ||||
index = 1; | index = 1; | ||||
} | } | ||||
@@ -469,6 +535,7 @@ public class BuildHelper { | |||||
} | } | ||||
File base = new File(resolve(filesetDir)); | File base = new File(resolve(filesetDir)); | ||||
return base.listFiles( | return base.listFiles( | ||||
new FilenameFilter() { | new FilenameFilter() { | ||||
public boolean accept(File dir, String name) { | public boolean accept(File dir, String name) { | ||||
@@ -481,6 +548,7 @@ public class BuildHelper { | |||||
}); | }); | ||||
} | } | ||||
/** | /** | ||||
* Resolve the property references in a string | * Resolve the property references in a string | ||||
* | * | ||||
@@ -490,11 +558,13 @@ public class BuildHelper { | |||||
*/ | */ | ||||
private String resolve(String propertyValue) { | private String resolve(String propertyValue) { | ||||
String newValue = propertyValue; | String newValue = propertyValue; | ||||
while (newValue.indexOf("${") != -1) { | while (newValue.indexOf("${") != -1) { | ||||
int index = newValue.indexOf("${"); | int index = newValue.indexOf("${"); | ||||
int endIndex = newValue.indexOf("}", index); | int endIndex = newValue.indexOf("}", index); | ||||
String propertyName = newValue.substring(index + 2, endIndex); | String propertyName = newValue.substring(index + 2, endIndex); | ||||
String repValue = (String) properties.get(propertyName); | String repValue = (String) properties.get(propertyName); | ||||
newValue = newValue.substring(0, index) + | newValue = newValue.substring(0, index) + | ||||
repValue + newValue.substring(endIndex + 1); | repValue + newValue.substring(endIndex + 1); | ||||
} | } | ||||
@@ -141,6 +141,7 @@ public class Builder { | |||||
addJavaFiles(files, UTIL_ROOT); | addJavaFiles(files, UTIL_ROOT); | ||||
addJavaFiles(files, new File(UTIL_ROOT, "depend")); | addJavaFiles(files, new File(UTIL_ROOT, "depend")); | ||||
addJavaFiles(files, ZIP_ROOT); | 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, "BuildException.java")); | ||||
files.add(new File(PACKAGE_ROOT, "Location.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(UTIL_ROOT, "regexp/RegexpMatcherFactory.java")); | ||||
files.add(new File(FILTERS_ROOT, "util/ChainReaderHelper.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(TYPES_ROOT, "DataType.java")); | ||||
files.remove(new File(TASKDEFS_ROOT, "Ant.java")); | files.remove(new File(TASKDEFS_ROOT, "Ant.java")); | ||||
files.remove(new File(TASKDEFS_ROOT, "CallTarget.java")); | files.remove(new File(TASKDEFS_ROOT, "CallTarget.java")); | ||||
@@ -200,7 +201,7 @@ public class Builder { | |||||
mutantBuilder.common(mainBuild); | mutantBuilder.common(mainBuild); | ||||
mutantBuilder.antcore(mainBuild); | mutantBuilder.antcore(mainBuild); | ||||
mutantBuilder.start(mainBuild); | mutantBuilder.start(mainBuild); | ||||
mutantBuilder.cli(mainBuild); | |||||
mutantBuilder.frontend(mainBuild); | |||||
BuildHelper systemBuild = new BuildHelper(); | BuildHelper systemBuild = new BuildHelper(); | ||||
systemBuild.setProperty("libset", "system"); | systemBuild.setProperty("libset", "system"); | ||||
@@ -18,9 +18,9 @@ public class MutantBuilder { | |||||
helper.addPathElementToPath("classpath.antcore", "${distlib.dir}/common/common.jar"); | helper.addPathElementToPath("classpath.antcore", "${distlib.dir}/common/common.jar"); | ||||
helper.addPathToPath("classpath.antcore", "classpath.common"); | helper.addPathToPath("classpath.antcore", "classpath.common"); | ||||
helper.addPathToPath("classpath.antcore", "classpath.parser"); | 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.createPath("classpath.start"); | ||||
helper.addPathElementToPath("classpath.start", "${distlib.dir}/init.jar"); | helper.addPathElementToPath("classpath.start", "${distlib.dir}/init.jar"); | ||||
} | } | ||||
@@ -33,36 +33,38 @@ public class MutantBuilder { | |||||
helper.mkdir("${bin.dir}/init"); | helper.mkdir("${bin.dir}/init"); | ||||
helper.javac("${java.dir}/init", "${bin.dir}/init", null); | helper.javac("${java.dir}/init", "${bin.dir}/init", null); | ||||
helper.jar("${bin.dir}/init", "${distlib.dir}/init.jar", | helper.jar("${bin.dir}/init", "${distlib.dir}/init.jar", | ||||
null, null); | |||||
null, null, null, null); | |||||
} | } | ||||
protected void common(BuildHelper helper) { | protected void common(BuildHelper helper) { | ||||
helper.mkdir("${bin.dir}/common"); | helper.mkdir("${bin.dir}/common"); | ||||
helper.mkdir("${distlib.dir}/common"); | helper.mkdir("${distlib.dir}/common"); | ||||
helper.javac("${java.dir}/common", "${bin.dir}/common", "classpath.common"); | helper.javac("${java.dir}/common", "${bin.dir}/common", "classpath.common"); | ||||
helper.jar("${bin.dir}/common", "${distlib.dir}/common/common.jar", | helper.jar("${bin.dir}/common", "${distlib.dir}/common/common.jar", | ||||
null, null); | |||||
null, null, null, null); | |||||
} | } | ||||
protected void antcore(BuildHelper helper) { | protected void antcore(BuildHelper helper) { | ||||
helper.mkdir("${bin.dir}/antcore"); | helper.mkdir("${bin.dir}/antcore"); | ||||
helper.mkdir("${distlib.dir}/antcore"); | helper.mkdir("${distlib.dir}/antcore"); | ||||
helper.javac("${java.dir}/antcore", "${bin.dir}/antcore", "classpath.antcore"); | helper.javac("${java.dir}/antcore", "${bin.dir}/antcore", "classpath.antcore"); | ||||
helper.jar("${bin.dir}/antcore", "${distlib.dir}/antcore/antcore.jar", | 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.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) { | protected void start(BuildHelper helper) { | ||||
helper.mkdir("${bin.dir}/start"); | helper.mkdir("${bin.dir}/start"); | ||||
helper.javac("${java.dir}/start", "${bin.dir}/start", "classpath.start"); | helper.javac("${java.dir}/start", "${bin.dir}/start", "classpath.start"); | ||||
helper.jar("${bin.dir}/start", "${distlib.dir}/start.jar", | 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", | 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) { | protected void ant1compat(BuildHelper helper) { | ||||
} | } | ||||
@@ -70,7 +72,7 @@ public class MutantBuilder { | |||||
helper.mkdir("${bin.dir}/remote"); | helper.mkdir("${bin.dir}/remote"); | ||||
helper.javac("${java.dir}/remote", "${bin.dir}/remote", "classpath.start"); | helper.javac("${java.dir}/remote", "${bin.dir}/remote", "classpath.start"); | ||||
helper.jar("${bin.dir}/remote", "${distlib.dir}/remote.jar", | helper.jar("${bin.dir}/remote", "${distlib.dir}/remote.jar", | ||||
null, null); | |||||
null, null, null, "org.apache.ant.remote.RemoteMain"); | |||||
} | } | ||||
protected void clean(BuildHelper helper) { | protected void clean(BuildHelper helper) { | ||||
} | } | ||||
@@ -84,7 +86,7 @@ public class MutantBuilder { | |||||
helper.addPathToPath("classpath.antlibs", "classpath.common"); | helper.addPathToPath("classpath.antlibs", "classpath.common"); | ||||
helper.javac("${java.dir}/antlibs/${libset}", "${bin.dir}/antlibs/${libset}", "classpath.antlibs"); | helper.javac("${java.dir}/antlibs/${libset}", "${bin.dir}/antlibs/${libset}", "classpath.antlibs"); | ||||
helper.jar("${bin.dir}/antlibs/${libset}", "${distlib.dir}/antlibs/${libset}.jar", | 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) { | 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.common.util.DemuxOutputStream; | ||||
import org.apache.ant.init.InitConfig; | import org.apache.ant.init.InitConfig; | ||||
import org.apache.ant.init.InitUtils; | import org.apache.ant.init.InitUtils; | ||||
import org.apache.ant.frontend.FrontendUtils; | |||||
/** | /** | ||||
* This is the command line front end. It drives the core. | * 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 | * @created 9 January 2002 | ||||
*/ | */ | ||||
public class Commandline { | 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 */ | /** The initialisation configuration for Ant */ | ||||
private InitConfig initConfig; | 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 | * Get an option value | ||||
* | * | ||||
@@ -273,9 +216,10 @@ public class Commandline { | |||||
determineBuildFile(); | determineBuildFile(); | ||||
AntConfig config = new AntConfig(); | AntConfig config = new AntConfig(); | ||||
AntConfig userConfig = getAntConfig(initConfig.getUserConfigArea()); | |||||
AntConfig userConfig = | |||||
FrontendUtils.getAntConfig(initConfig.getUserConfigArea()); | |||||
AntConfig systemConfig | AntConfig systemConfig | ||||
= getAntConfig(initConfig.getSystemConfigArea()); | |||||
= FrontendUtils.getAntConfig(initConfig.getSystemConfigArea()); | |||||
if (systemConfig != null) { | if (systemConfig != null) { | ||||
config.merge(systemConfig); | config.merge(systemConfig); | ||||
@@ -286,7 +230,8 @@ public class Commandline { | |||||
for (Iterator i = configFiles.iterator(); i.hasNext();) { | for (Iterator i = configFiles.iterator(); i.hasNext();) { | ||||
File configFile = (File) i.next(); | File configFile = (File) i.next(); | ||||
AntConfig runConfig = getAntConfigFile(configFile); | |||||
AntConfig runConfig | |||||
= FrontendUtils.getAntConfigFile(configFile); | |||||
config.merge(runConfig); | config.merge(runConfig); | ||||
} | } | ||||
@@ -398,9 +343,11 @@ public class Commandline { | |||||
*/ | */ | ||||
private void determineBuildFile() throws ConfigException { | private void determineBuildFile() throws ConfigException { | ||||
if (buildFileURL == null) { | if (buildFileURL == null) { | ||||
File defaultBuildFile = new File(DEFAULT_BUILD_FILENAME); | |||||
File defaultBuildFile | |||||
= new File(FrontendUtils.DEFAULT_BUILD_FILENAME); | |||||
if (!defaultBuildFile.exists()) { | if (!defaultBuildFile.exists()) { | ||||
File ant1BuildFile = new File(DEFAULT_ANT1_FILENAME); | |||||
File ant1BuildFile | |||||
= new File(FrontendUtils.DEFAULT_ANT1_FILENAME); | |||||
if (ant1BuildFile.exists()) { | if (ant1BuildFile.exists()) { | ||||
defaultBuildFile = ant1BuildFile; | 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); | |||||
} | |||||
} | |||||
} | |||||