| // ------------------------------------------------------------------------------- |
| // Copyright (c)2000 Apache Software Foundation |
| // ------------------------------------------------------------------------------- |
| |
| import java.io.*; |
| import java.util.*; |
| import java.util.zip.*; |
| |
| /** |
| * Quick and dirty single class bootstrap utility for getting Ant off |
| * the ground when in need. To use, compile this file in the directory |
| * where the source code is in the repository, then execute it. That's |
| * it.<p> |
| * |
| * No pretense is made that this is an elegant peice of code. This code |
| * only exists to do a ground zero build of Ant. Any other building of |
| * Ant should be done with itself whenever possible. |
| * |
| * @author James Duncan Davidson (duncan@apache.org) |
| * @author Conor MacNeill (conor@m64.com) |
| */ |
| public class Bootstrap { |
| |
| /** |
| * Command line entry point. This is the first part of the bootstrap |
| * where we go and set up the environment and generally do what is |
| * necessary to set up for Bootstrapping. |
| */ |
| public static void main(String[] args) throws Exception { |
| |
| String[] command; |
| String classpath = null; |
| |
| // check to see if we have a compiler on the classpath. Right now |
| // we're just checking for the old compiler, but will want to check |
| // for the new compiler and use it if it exists. Later. |
| try { |
| Class clazz = Class.forName("sun.tools.javac.Main"); |
| } catch (ClassNotFoundException cnfe) { |
| String javaHome = System.getProperty("java.home"); |
| if (javaHome.endsWith("jre")) { |
| javaHome = javaHome.substring(0, javaHome.length() - 4); |
| } |
| // XXX should check if this exists and bail out if it doesn't |
| classpath = javaHome + "/lib/tools.jar" + File.pathSeparator + "."; |
| } |
| |
| // XXX really should check to see if compiling the bootstrap is necessary. :) |
| |
| System.out.println("Compiling Bootstrap2"); |
| if (classpath == null) { |
| command = new String[] {"javac", "./Bootstrap2.java"}; |
| } else { |
| command = new String[] {"javac", "-classpath", classpath, |
| "./Bootstrap2.java"}; |
| } |
| runCommand(command); |
| |
| System.out.println("Running Bootstrap2"); |
| if (classpath == null) { |
| command = new String[] {"java", "Bootstrap2"}; |
| } else { |
| command = new String[] {"java", "-cp", classpath, "Bootstrap2"}; |
| } |
| runCommand(command, args); |
| } |
| |
| /** |
| * Utility method for execing processes |
| */ |
| static void runCommand(String[] command) throws IOException { |
| |
| Runtime runtime = Runtime.getRuntime(); |
| Process process = runtime.exec(command); |
| |
| // echo output from process |
| |
| InputStream in = process.getInputStream(); |
| byte[] buf = new byte[80]; |
| int count = 0; |
| count = in.read(buf, 0, buf.length); |
| while (count != -1) { |
| System.out.write(buf, 0, count); |
| count = in.read(buf, 0, buf.length); |
| } |
| |
| in = process.getErrorStream(); |
| count = in.read(buf, 0, buf.length); |
| if (count > 0) { |
| System.out.println(); |
| System.out.println("Error Stream Output:"); |
| |
| while (count != -1) { |
| System.out.write(buf, 0, count); |
| count = in.read(buf, 0, buf.length); |
| } |
| } |
| } |
| |
| /** |
| * Utility method for running processes that let some additional args |
| * be specified. |
| */ |
| static void runCommand(String[] command, String[] addtlArgs) throws IOException { |
| String[] newCommand = new String[command.length + addtlArgs.length]; |
| for (int i = 0; i < command.length; i++) { |
| newCommand[i] = command[i]; |
| } |
| for (int i = 0; i < addtlArgs.length; i++) { |
| newCommand[command.length + i] = addtlArgs[i]; |
| } |
| runCommand(newCommand); |
| } |
| } |
| |