blob: 178440b268690dfcc89bb448ec2f12909fc042a5 [file] [log] [blame]
/*
* 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.builder;
import java.io.File;
import java.util.ArrayList;
import java.util.List;
/**
* The Builder object builds the code for bootstrap purposes. It invokes the
* mathods of the required targets in the converted build files.
*
* @author <a href="mailto:conor@apache.org">Conor MacNeill</a>
* @created 18 February 2002
*/
public class Builder {
/** The root of the Ant1 source tree */
private static final File ANT1_SRC_ROOT = new File("../../src/main");
/** the root of the Ant package in the Ant1 source tree */
private static final File PACKAGE_ROOT
= new File(ANT1_SRC_ROOT, "org/apache/tools/ant");
/** The zip utilities root */
private static final File ZIP_ROOT
= new File(ANT1_SRC_ROOT, "org/apache/tools/zip");
/** the taskdefs root */
private static final File TASKDEFS_ROOT
= new File(PACKAGE_ROOT, "taskdefs");
/** the root forthe depend task's support classes */
private static final File DEPEND_ROOT
= new File(TASKDEFS_ROOT, "optional/depend");
/**
* The main program - create a builder and run the build
*
* @param args the command line arguments - not currently used
*/
public static void main(String[] args) {
Builder builder = new Builder();
builder.runBuild(args);
}
/**
* Get the Ant1 files currently required to build a bootstrap build.
*
* @return an array of files which need to be copied into the bootstrap
* build.
*/
private File[] getAnt1Files() {
List files = new ArrayList();
files.add(new File(PACKAGE_ROOT, "types/EnumeratedAttribute.java"));
files.add(new File(PACKAGE_ROOT, "types/Path.java"));
files.add(new File(PACKAGE_ROOT, "types/FileSet.java"));
files.add(new File(PACKAGE_ROOT, "types/PatternSet.java"));
files.add(new File(PACKAGE_ROOT, "types/Reference.java"));
files.add(new File(PACKAGE_ROOT, "types/FilterSet.java"));
files.add(new File(PACKAGE_ROOT, "types/FilterSetCollection.java"));
files.add(new File(PACKAGE_ROOT, "types/Mapper.java"));
files.add(new File(PACKAGE_ROOT, "types/ZipFileSet.java"));
files.add(new File(PACKAGE_ROOT, "types/ZipScanner.java"));
files.add(new File(PACKAGE_ROOT, "util/FileNameMapper.java"));
files.add(new File(PACKAGE_ROOT, "util/FlatFileNameMapper.java"));
files.add(new File(PACKAGE_ROOT, "util/SourceFileScanner.java"));
files.add(new File(PACKAGE_ROOT, "util/IdentityMapper.java"));
files.add(new File(PACKAGE_ROOT, "util/MergingMapper.java"));
files.add(new File(PACKAGE_ROOT, "util/GlobPatternMapper.java"));
files.add(new File(PACKAGE_ROOT, "types/Commandline.java"));
files.add(new File(PACKAGE_ROOT, "BuildException.java"));
files.add(new File(PACKAGE_ROOT, "Location.java"));
files.add(new File(PACKAGE_ROOT, "AntClassLoader.java"));
files.add(new File(PACKAGE_ROOT, "BuildListener.java"));
files.add(new File(PACKAGE_ROOT, "BuildEvent.java"));
files.add(new File(PACKAGE_ROOT, "DirectoryScanner.java"));
files.add(new File(PACKAGE_ROOT, "FileScanner.java"));
files.add(new File(PACKAGE_ROOT, "PathTokenizer.java"));
files.add(new File(PACKAGE_ROOT, "TaskAdapter.java"));
files.add(new File(PACKAGE_ROOT, "MatchingTask.java"));
files.add(new File(PACKAGE_ROOT, "util/FileUtils.java"));
files.add(new File(PACKAGE_ROOT, "defaultManifest.mf"));
files.add(new File(TASKDEFS_ROOT, "defaults.properties"));
files.add(new File(PACKAGE_ROOT, "types/defaults.properties"));
files.add(new File(TASKDEFS_ROOT, "Property.java"));
files.add(new File(TASKDEFS_ROOT, "Execute.java"));
files.add(new File(TASKDEFS_ROOT, "ExecuteStreamHandler.java"));
files.add(new File(TASKDEFS_ROOT, "ExecuteWatchdog.java"));
files.add(new File(TASKDEFS_ROOT, "ProcessDestroyer.java"));
files.add(new File(TASKDEFS_ROOT, "PumpStreamHandler.java"));
files.add(new File(TASKDEFS_ROOT, "StreamPumper.java"));
files.add(new File(TASKDEFS_ROOT, "LogStreamHandler.java"));
files.add(new File(TASKDEFS_ROOT, "LogOutputStream.java"));
files.add(new File(TASKDEFS_ROOT, "condition/Os.java"));
files.add(new File(TASKDEFS_ROOT, "condition/Contains.java"));
files.add(new File(TASKDEFS_ROOT, "condition/Condition.java"));
files.add(new File(TASKDEFS_ROOT, "Available.java"));
files.add(new File(TASKDEFS_ROOT, "Mkdir.java"));
files.add(new File(TASKDEFS_ROOT, "Copy.java"));
files.add(new File(TASKDEFS_ROOT, "Echo.java"));
files.add(new File(TASKDEFS_ROOT, "MatchingTask.java"));
files.add(new File(DEPEND_ROOT, "Depend.java"));
files.add(new File(DEPEND_ROOT, "ClassFile.java"));
files.add(new File(DEPEND_ROOT, "ClassFileUtils.java"));
files.add(new File(DEPEND_ROOT, "constantpool/ClassCPInfo.java"));
files.add(new File(DEPEND_ROOT, "constantpool/ConstantPool.java"));
files.add(new File(DEPEND_ROOT, "constantpool/ConstantPoolEntry.java"));
files.add(new File(DEPEND_ROOT, "constantpool/Utf8CPInfo.java"));
files.add(new File(DEPEND_ROOT, "constantpool/ConstantCPInfo.java"));
files.add(new File(DEPEND_ROOT, "constantpool/MethodRefCPInfo.java"));
files.add(new File(DEPEND_ROOT,
"constantpool/InterfaceMethodRefCPInfo.java"));
files.add(new File(DEPEND_ROOT, "constantpool/FieldRefCPInfo.java"));
files.add(new File(DEPEND_ROOT, "constantpool/NameAndTypeCPInfo.java"));
files.add(new File(DEPEND_ROOT, "constantpool/IntegerCPInfo.java"));
files.add(new File(DEPEND_ROOT, "constantpool/FloatCPInfo.java"));
files.add(new File(DEPEND_ROOT, "constantpool/LongCPInfo.java"));
files.add(new File(DEPEND_ROOT, "constantpool/StringCPInfo.java"));
files.add(new File(DEPEND_ROOT, "constantpool/DoubleCPInfo.java"));
files.add(new File(TASKDEFS_ROOT, "Javac.java"));
files.add(new File(TASKDEFS_ROOT, "compilers/CompilerAdapter.java"));
files.add(new File(TASKDEFS_ROOT,
"compilers/DefaultCompilerAdapter.java"));
files.add(new File(TASKDEFS_ROOT,
"compilers/CompilerAdapterFactory.java"));
files.add(new File(TASKDEFS_ROOT, "compilers/Jikes.java"));
files.add(new File(TASKDEFS_ROOT, "compilers/JavacExternal.java"));
files.add(new File(TASKDEFS_ROOT, "compilers/Javac12.java"));
files.add(new File(TASKDEFS_ROOT, "compilers/Javac13.java"));
files.add(new File(TASKDEFS_ROOT, "compilers/Kjc.java"));
files.add(new File(TASKDEFS_ROOT, "compilers/Gcj.java"));
files.add(new File(TASKDEFS_ROOT, "compilers/Jvc.java"));
files.add(new File(TASKDEFS_ROOT, "compilers/Sj.java"));
files.add(new File(TASKDEFS_ROOT, "Jar.java"));
files.add(new File(TASKDEFS_ROOT, "Zip.java"));
files.add(new File(TASKDEFS_ROOT, "Manifest.java"));
files.add(new File(TASKDEFS_ROOT, "ManifestException.java"));
files.add(new File(ZIP_ROOT, "ZipOutputStream.java"));
files.add(new File(ZIP_ROOT, "ZipOutputStream.java"));
files.add(new File(ZIP_ROOT, "ZipEntry.java"));
files.add(new File(ZIP_ROOT, "ZipLong.java"));
files.add(new File(ZIP_ROOT, "ZipShort.java"));
files.add(new File(ZIP_ROOT, "ZipExtraField.java"));
files.add(new File(ZIP_ROOT, "ExtraFieldUtils.java"));
files.add(new File(ZIP_ROOT, "AsiExtraField.java"));
files.add(new File(ZIP_ROOT, "UnrecognizedExtraField.java"));
files.add(new File(ZIP_ROOT, "UnixStat.java"));
files.add(new File(TASKDEFS_ROOT, "ConditionTask.java"));
files.add(new File(TASKDEFS_ROOT, "condition/ConditionBase.java"));
files.add(new File(TASKDEFS_ROOT, "Checksum.java"));
files.add(new File(TASKDEFS_ROOT, "UpToDate.java"));
files.add(new File(TASKDEFS_ROOT, "condition/Not.java"));
files.add(new File(TASKDEFS_ROOT, "condition/And.java"));
files.add(new File(TASKDEFS_ROOT, "condition/Equals.java"));
files.add(new File(TASKDEFS_ROOT, "condition/Or.java"));
files.add(new File(TASKDEFS_ROOT, "condition/IsSet.java"));
files.add(new File(TASKDEFS_ROOT, "condition/Http.java"));
files.add(new File(TASKDEFS_ROOT, "condition/Socket.java"));
files.add(new File(TASKDEFS_ROOT, "condition/FilesMatch.java"));
files.add(new File(TASKDEFS_ROOT, "Taskdef.java"));
files.add(new File(TASKDEFS_ROOT, "Definer.java"));
return (File[])files.toArray(new File[0]);
}
/**
* Run the build
*
* @param args the command line arguments for the build - currently not
* used.
*/
private void runBuild(String[] args) {
BuildHelper mainBuild = new BuildHelper();
mainBuild.setProperty("dist.dir", "bootstrap");
MutantBuilder mutantBuilder = new MutantBuilder();
mutantBuilder._init(mainBuild);
mutantBuilder.buildsetup(mainBuild);
mutantBuilder.init(mainBuild);
mutantBuilder.common(mainBuild);
mutantBuilder.antcore(mainBuild);
mutantBuilder.start(mainBuild);
mutantBuilder.cli(mainBuild);
BuildHelper systemBuild = new BuildHelper();
systemBuild.setProperty("libset", "system");
systemBuild.setProperty("dist.dir", "bootstrap");
mutantBuilder._init(systemBuild);
mutantBuilder.build_lib(systemBuild);
Ant1CompatBuilder ant1Builder = new Ant1CompatBuilder();
BuildHelper ant1Build = new BuildHelper();
ant1Build.setProperty("dist.dir", "bootstrap");
ant1Build.addFileSet("ant1src", ANT1_SRC_ROOT, getAnt1Files());
ant1Builder._init(ant1Build);
ant1Builder.ant1compat(ant1Build);
}
}