/* ******************************************************************* * Copyright (c) 1999-2001 Xerox Corporation, * 2002 Palo Alto Research Center, Incorporated (PARC). * All rights reserved. * This program and the accompanying materials are made available * under the terms of the Eclipse Public License v 2.0 * which accompanies this distribution and is available at * https://www.eclipse.org/org/documents/epl-2.0/EPL-2.0.txt * * Contributors: * Xerox/PARC initial implementation * ******************************************************************/ package org.aspectj.internal.tools.ant.taskdefs; import java.io.File; import org.apache.tools.ant.BuildException; import org.apache.tools.ant.Location; import org.apache.tools.ant.Task; import org.apache.tools.ant.types.Path; import org.aspectj.internal.tools.build.BuildSpec; import org.aspectj.internal.tools.build.Builder; /** * Ant interface to build a product or module, including any required modules. * @see Builder */ public class BuildModule extends Task { // quickie hack... public static void main(String[] args) { TestBuildModule.main(args); } private static File pathToFile(Path path) { if (null != path) { String[] list = path.list(); if ((null == list) || (1 != list.length)) { throw new IllegalArgumentException("expected exactly 1 element"); } return new File(list[0]); } return null; } BuildSpec buildSpec; public BuildModule() { buildSpec = new BuildSpec(); setTaskName("ajbuild"); } public void setModuledir(Path moduleDir) { buildSpec.moduleDir = pathToFile(moduleDir); } public void setModule(String module) { // XXX handle multiple modules, same builder buildSpec.module = module; } public void setVersion(String version) { buildSpec.version = version; } public void setBasedir(Path baseDir) { buildSpec.baseDir = pathToFile(baseDir); } public void setJardir(Path jarDir) { buildSpec.jarDir = pathToFile(jarDir); } public void setTrimtesting(boolean trimTesting) { buildSpec.trimTesting = trimTesting; } public void setAssembleall(boolean assembleAll) { buildSpec.assembleAll = assembleAll; } public void setRebuild(boolean rebuild) { buildSpec.rebuild = rebuild; } public void setFailonerror(boolean failonerror) { buildSpec.failonerror = failonerror; } public void setCreateinstaller(boolean create) { buildSpec.createInstaller = create; } public void setVerbose(boolean verbose) { buildSpec.verbose = verbose; } public void setBuildConfig(String buildConfig) { buildSpec.buildConfig = buildConfig; } // --------------------------------------------------------- product build public void setProductdir(Path productDir) { buildSpec.productDir = pathToFile(productDir); } public void setTempdir(Path tempDir) { buildSpec.tempDir = pathToFile(tempDir); } public void setDistdir(Path distdir) { buildSpec.distDir = pathToFile(distdir); } public void execute() throws BuildException { final BuildSpec buildSpec = this.buildSpec; this.buildSpec = new BuildSpec(); build(buildSpec); } private void build(BuildSpec buildSpec) throws BuildException { final boolean failonerror = buildSpec.failonerror; Builder builder = null; try { // try using script first if not a product boolean built = false; if ((null == buildSpec.productDir) && (null != buildSpec.moduleDir)) { File buildScript = new File(buildSpec.moduleDir, "build.xml"); // XXXFileLiteral if (buildScript.canRead()) { built = buildByScript(buildSpec, buildScript); if (!built) { log("unable to build " + buildSpec + " using script: " + buildScript.getAbsolutePath()); } } } if (!built) { builder = AntBuilder.getBuilder( buildSpec.buildConfig, getProject(), buildSpec.tempDir); if (!builder.build(buildSpec) && failonerror) { Location loc = getLocation(); throw new BuildException("error building " + buildSpec, loc); } } } catch (BuildException e) { throw e; } catch (Throwable t) { Location loc = getLocation(); throw new BuildException("error building " + buildSpec, t, loc); } finally { if (null != builder) { builder.cleanup(); } } } boolean buildByScript(BuildSpec buildSpec, File buildScript) throws BuildException { return false; } }