mirror of https://github.com/acidanthera/audk.git
git-svn-id: https://edk2.svn.sourceforge.net/svnroot/edk2/trunk/edk2@696 6f19259b-4bc3-4df7-8a09-765794883524
This commit is contained in:
parent
85c483cb18
commit
6ec40aef55
|
@ -0,0 +1,313 @@
|
|||
/** @file
|
||||
This file is an ANT task.
|
||||
|
||||
LibBuildFileGenerator task is used to generate module's build.xml file.
|
||||
|
||||
Copyright (c) 2006, Intel Corporation
|
||||
All rights reserved. This program and the accompanying materials
|
||||
are licensed and made available under the terms and conditions of the BSD License
|
||||
which accompanies this distribution. The full text of the license may be found at
|
||||
http://opensource.org/licenses/bsd-license.php
|
||||
|
||||
THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
|
||||
WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
|
||||
|
||||
**/
|
||||
package org.tianocore.build.tools;
|
||||
|
||||
import java.io.File;
|
||||
import java.util.Iterator;
|
||||
import java.util.LinkedHashSet;
|
||||
import java.util.Set;
|
||||
|
||||
import javax.xml.parsers.DocumentBuilder;
|
||||
import javax.xml.parsers.DocumentBuilderFactory;
|
||||
import javax.xml.transform.OutputKeys;
|
||||
import javax.xml.transform.Result;
|
||||
import javax.xml.transform.Source;
|
||||
import javax.xml.transform.Transformer;
|
||||
import javax.xml.transform.TransformerFactory;
|
||||
import javax.xml.transform.dom.DOMSource;
|
||||
import javax.xml.transform.stream.StreamResult;
|
||||
|
||||
import org.apache.tools.ant.BuildException;
|
||||
import org.apache.tools.ant.Task;
|
||||
import org.tianocore.build.global.GlobalData;
|
||||
import org.tianocore.build.id.ModuleIdentification;
|
||||
import org.tianocore.build.id.PackageIdentification;
|
||||
import org.w3c.dom.Document;
|
||||
import org.w3c.dom.Element;
|
||||
|
||||
public class DefaultBuildFileGenerator extends Task {
|
||||
|
||||
private Set<ModuleIdentification> modules = new LinkedHashSet<ModuleIdentification>();
|
||||
|
||||
private Set<PackageIdentification> packages = new LinkedHashSet<PackageIdentification>();
|
||||
|
||||
//
|
||||
// <DefaultBuildFileGenerator mode="WORKSPACE | PACKAGE | MODULE">
|
||||
// <PackageItem packageName="" packageGuid="" packageVersion="" />
|
||||
// <ModuleItem moduleName="HelloWorld" moduleGuid="" moduleVersion="" packageName="" packageGuid="" packageVersion="" />
|
||||
// </DefaultBuildFileGenerator>
|
||||
//
|
||||
private String mode = "MODULE";
|
||||
|
||||
private String license = " Copyright (c) 2006, Intel Corporation \n"
|
||||
+ "All rights reserved. This program and the accompanying materials \n"
|
||||
+ "are licensed and made available under the terms and conditions of the BSD License \n"
|
||||
+ "which accompanies this distribution. The full text of the license may be found at \n"
|
||||
+ "http://opensource.org/licenses/bsd-license.php \n"
|
||||
+ "\n"
|
||||
+ "THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN \"AS IS\" BASIS, \n"
|
||||
+ "WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.";
|
||||
|
||||
/**
|
||||
Public construct method. It is necessary for ANT task.
|
||||
**/
|
||||
public DefaultBuildFileGenerator () {
|
||||
}
|
||||
|
||||
public void execute() throws BuildException {
|
||||
//
|
||||
// Global Data initialization
|
||||
//
|
||||
GlobalData.initInfo("Tools" + File.separatorChar + "Conf" + File.separatorChar + "FrameworkDatabase.db",
|
||||
getProject().getProperty("WORKSPACE_DIR"), "tools_def.txt");
|
||||
|
||||
if (mode.equalsIgnoreCase("WORKSPACE")) {
|
||||
modules.clear();
|
||||
packages = GlobalData.getPackageList();
|
||||
}
|
||||
else if (mode.equalsIgnoreCase("PACKAGE")) {
|
||||
modules.clear();
|
||||
}
|
||||
if (mode.equalsIgnoreCase("WORKSPACE") || mode.equalsIgnoreCase("PACKAGE")) {
|
||||
Iterator iter = packages.iterator();
|
||||
while (iter.hasNext()) {
|
||||
PackageIdentification packageId = (PackageIdentification)iter.next();
|
||||
modules.addAll(GlobalData.getModules(packageId));
|
||||
}
|
||||
}
|
||||
|
||||
Iterator iter = modules.iterator();
|
||||
while (iter.hasNext()) {
|
||||
ModuleIdentification moduleId = (ModuleIdentification)iter.next();
|
||||
genBuildFile (moduleId);
|
||||
}
|
||||
}
|
||||
|
||||
private void genBuildFile(ModuleIdentification moduleId) {
|
||||
DocumentBuilderFactory domfac = DocumentBuilderFactory.newInstance();
|
||||
try {
|
||||
DocumentBuilder dombuilder = domfac.newDocumentBuilder();
|
||||
Document document = dombuilder.newDocument();
|
||||
//
|
||||
// create root element and its attributes
|
||||
//
|
||||
document.appendChild(document.createComment(license));
|
||||
Element root = document.createElement("project");
|
||||
root.setAttribute("default", "all");
|
||||
root.setAttribute("basedir", ".");
|
||||
root.setAttribute("name", moduleId.getName());
|
||||
|
||||
//
|
||||
// element for External ANT tasks
|
||||
//
|
||||
root.appendChild(document.createComment("Apply external ANT tasks"));
|
||||
Element ele = document.createElement("taskdef");
|
||||
ele.setAttribute("resource", "GenBuild.tasks");
|
||||
root.appendChild(ele);
|
||||
|
||||
//
|
||||
// <taskdef resource="net/sf/antcontrib/antlib.xml" />
|
||||
//
|
||||
ele = document.createElement("taskdef");
|
||||
ele.setAttribute("resource", "net/sf/antcontrib/antlib.xml");
|
||||
root.appendChild(ele);
|
||||
|
||||
ele = document.createElement("property");
|
||||
ele.setAttribute("environment", "env");
|
||||
root.appendChild(ele);
|
||||
|
||||
ele = document.createElement("property");
|
||||
ele.setAttribute("name", "WORKSPACE_DIR");
|
||||
ele.setAttribute("value", "${env.WORKSPACE}");
|
||||
root.appendChild(ele);
|
||||
|
||||
ele = document.createElement("property");
|
||||
ele.setAttribute("name", "MSA_FILENAME");
|
||||
ele.setAttribute("value", GlobalData.getMsaFile(moduleId).getName());
|
||||
root.appendChild(ele);
|
||||
|
||||
ele = document.createElement("property");
|
||||
ele.setAttribute("name", "BASE_NAME");
|
||||
ele.setAttribute("value", moduleId.getName());
|
||||
root.appendChild(ele);
|
||||
|
||||
//
|
||||
// Don't change it!!
|
||||
//
|
||||
ele = document.createElement("import");
|
||||
ele.setAttribute("file", "${WORKSPACE_DIR}/Tools/Conf/BuildMacro.xml");
|
||||
root.appendChild(ele);
|
||||
|
||||
//
|
||||
// <target name="all">
|
||||
// <GenBuild msaFile="HelloWorld.msa"/>
|
||||
// </target>
|
||||
//
|
||||
Element targetEle = document.createElement("target");
|
||||
targetEle.setAttribute("name", "all");
|
||||
|
||||
ele = document.createElement("GenBuild");
|
||||
ele.setAttribute("msaFile", "${MSA_FILENAME}");
|
||||
targetEle.appendChild(ele);
|
||||
|
||||
root.appendChild(targetEle);
|
||||
|
||||
//
|
||||
// <target name="clean">
|
||||
// <OutputDirSetup msaFile="HelloWorld.msa"/>
|
||||
// <if>
|
||||
// <available file="${DEST_DIR_OUTPUT}/HelloWorld_build.xml"/>
|
||||
// <then>
|
||||
// <ant antfile="${DEST_DIR_OUTPUT}/HelloWorld_build.xml" target="clean"/>
|
||||
// </then>
|
||||
// </if>
|
||||
// <delete dir="${DEST_DIR_OUTPUT}" excludes="*.xml"/>
|
||||
// </target>
|
||||
//
|
||||
targetEle = document.createElement("target");
|
||||
targetEle.setAttribute("name", "clean");
|
||||
|
||||
ele = document.createElement("OutputDirSetup");
|
||||
ele.setAttribute("msaFile", "${MSA_FILENAME}");
|
||||
targetEle.appendChild(ele);
|
||||
|
||||
ele = document.createElement("if");
|
||||
|
||||
Element availableEle = document.createElement("available");
|
||||
availableEle.setAttribute("file", "${DEST_DIR_OUTPUT}/${BASE_NAME}_build.xml");
|
||||
ele.appendChild(availableEle);
|
||||
|
||||
Element thenEle = document.createElement("then");
|
||||
Element antEle = document.createElement("ant");
|
||||
antEle.setAttribute("antfile", "${DEST_DIR_OUTPUT}/${BASE_NAME}_build.xml");
|
||||
antEle.setAttribute("target", "clean");
|
||||
thenEle.appendChild(antEle);
|
||||
ele.appendChild(thenEle);
|
||||
targetEle.appendChild(ele);
|
||||
|
||||
ele = document.createElement("delete");
|
||||
ele.setAttribute("dir", "${DEST_DIR_OUTPUT}");
|
||||
ele.setAttribute("excludes", "*.xml");
|
||||
targetEle.appendChild(ele);
|
||||
|
||||
root.appendChild(targetEle);
|
||||
|
||||
//
|
||||
// <target name="cleanall">
|
||||
// <OutputDirSetup msaFile="HelloWorld.msa"/>
|
||||
// <if>
|
||||
// <available file="${DEST_DIR_OUTPUT}/HelloWorld_build.xml"/>
|
||||
// <then>
|
||||
// <ant antfile="${DEST_DIR_OUTPUT}/HelloWorld_build.xml" target="cleanall"/>
|
||||
// </then>
|
||||
// </if>
|
||||
// <delete dir="${DEST_DIR_OUTPUT}"/>
|
||||
// <delete dir="${DEST_DIR_DEBUG}"/>
|
||||
// <delete>
|
||||
// <fileset dir="${BIN_DIR}" includes="**HelloWorld*"/>
|
||||
// </delete>
|
||||
// </target>
|
||||
//
|
||||
targetEle = document.createElement("target");
|
||||
targetEle.setAttribute("name", "cleanall");
|
||||
|
||||
ele = document.createElement("OutputDirSetup");
|
||||
ele.setAttribute("msaFile", "${MSA_FILENAME}");
|
||||
targetEle.appendChild(ele);
|
||||
|
||||
ele = document.createElement("if");
|
||||
|
||||
availableEle = document.createElement("available");
|
||||
availableEle.setAttribute("file", "${DEST_DIR_OUTPUT}/${BASE_NAME}_build.xml");
|
||||
ele.appendChild(availableEle);
|
||||
|
||||
thenEle = document.createElement("then");
|
||||
antEle = document.createElement("ant");
|
||||
antEle.setAttribute("antfile", "${DEST_DIR_OUTPUT}/${BASE_NAME}_build.xml");
|
||||
antEle.setAttribute("target", "cleanall");
|
||||
thenEle.appendChild(antEle);
|
||||
ele.appendChild(thenEle);
|
||||
targetEle.appendChild(ele);
|
||||
|
||||
ele = document.createElement("delete");
|
||||
ele.setAttribute("dir", "${DEST_DIR_OUTPUT}");
|
||||
targetEle.appendChild(ele);
|
||||
|
||||
ele = document.createElement("delete");
|
||||
ele.setAttribute("dir", "${DEST_DIR_DEBUG}");
|
||||
targetEle.appendChild(ele);
|
||||
|
||||
ele = document.createElement("delete");
|
||||
|
||||
Element filesetEle = document.createElement("fileset");
|
||||
filesetEle.setAttribute("dir", "${BIN_DIR}");
|
||||
filesetEle.setAttribute("includes", "**${BASE_NAME}*");
|
||||
ele.appendChild(filesetEle);
|
||||
|
||||
targetEle.appendChild(ele);
|
||||
|
||||
root.appendChild(targetEle);
|
||||
|
||||
|
||||
document.appendChild(root);
|
||||
|
||||
//
|
||||
// Prepare the DOM document for writing
|
||||
//
|
||||
Source source = new DOMSource(document);
|
||||
|
||||
//
|
||||
// Prepare the output file
|
||||
//
|
||||
String filename = GlobalData.getMsaFile(moduleId).getParent() + File.separatorChar + "build.xml";
|
||||
File file = new File(getProject().replaceProperties(filename));
|
||||
|
||||
GlobalData.log.info("File generating - " + filename);
|
||||
//
|
||||
// generate all directory path
|
||||
//
|
||||
Result result = new StreamResult(file);
|
||||
|
||||
//
|
||||
// Write the DOM document to the file
|
||||
//
|
||||
Transformer xformer = TransformerFactory.newInstance()
|
||||
.newTransformer();
|
||||
xformer.setOutputProperty("{http://xml.apache.org/xslt}indent-amount", "2");
|
||||
xformer.setOutputProperty(OutputKeys.INDENT, "yes");
|
||||
xformer.transform(source, result);
|
||||
} catch (Exception ex) {
|
||||
System.out.println("##" + ex);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
public void addConfiguredModuleItem(ModuleItem moduleItem) {
|
||||
PackageIdentification packageId = new PackageIdentification(moduleItem.getPackageName(), moduleItem.getPackageGuid(), moduleItem.getPackageVersion());
|
||||
ModuleIdentification moduleId = new ModuleIdentification(moduleItem.getModuleName(), moduleItem.getModuleGuid(), moduleItem.getModuleVersion());
|
||||
moduleId.setPackage(packageId);
|
||||
modules.add(moduleId);
|
||||
}
|
||||
|
||||
public void addConfiguredPackageItem(PackageItem packageItem) {
|
||||
PackageIdentification packageId = new PackageIdentification(packageItem.getPackageName(), packageItem.getPackageGuid(), packageItem.getPackageVersion());
|
||||
packages.add(packageId);
|
||||
}
|
||||
|
||||
public void setMode(String mode) {
|
||||
this.mode = mode;
|
||||
}
|
||||
}
|
|
@ -0,0 +1,88 @@
|
|||
/** @file
|
||||
|
||||
Copyright (c) 2006, Intel Corporation
|
||||
All rights reserved. This program and the accompanying materials
|
||||
are licensed and made available under the terms and conditions of the BSD License
|
||||
which accompanies this distribution. The full text of the license may be found at
|
||||
http://opensource.org/licenses/bsd-license.php
|
||||
|
||||
THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
|
||||
WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
|
||||
|
||||
**/
|
||||
package org.tianocore.build.tools;
|
||||
|
||||
import org.apache.tools.ant.BuildException;
|
||||
|
||||
public class ModuleItem {
|
||||
|
||||
private String moduleName;
|
||||
|
||||
private String moduleGuid;
|
||||
|
||||
private String moduleVersion;
|
||||
|
||||
private String packageName;
|
||||
|
||||
private String packageGuid;
|
||||
|
||||
private String packageVersion;
|
||||
|
||||
public ModuleItem(){
|
||||
|
||||
}
|
||||
|
||||
public void execute() throws BuildException {
|
||||
|
||||
}
|
||||
|
||||
public String getModuleGuid() {
|
||||
return moduleGuid;
|
||||
}
|
||||
|
||||
public void setModuleGuid(String moduleGuid) {
|
||||
this.moduleGuid = moduleGuid;
|
||||
}
|
||||
|
||||
public String getModuleName() {
|
||||
return moduleName;
|
||||
}
|
||||
|
||||
public void setModuleName(String moduleName) {
|
||||
this.moduleName = moduleName;
|
||||
}
|
||||
|
||||
public String getModuleVersion() {
|
||||
return moduleVersion;
|
||||
}
|
||||
|
||||
public void setModuleVersion(String moduleVersion) {
|
||||
this.moduleVersion = moduleVersion;
|
||||
}
|
||||
|
||||
public String getPackageGuid() {
|
||||
return packageGuid;
|
||||
}
|
||||
|
||||
public void setPackageGuid(String packageGuid) {
|
||||
this.packageGuid = packageGuid;
|
||||
}
|
||||
|
||||
public String getPackageName() {
|
||||
return packageName;
|
||||
}
|
||||
|
||||
public void setPackageName(String packageName) {
|
||||
this.packageName = packageName;
|
||||
}
|
||||
|
||||
public String getPackageVersion() {
|
||||
return packageVersion;
|
||||
}
|
||||
|
||||
public void setPackageVersion(String packageVersion) {
|
||||
this.packageVersion = packageVersion;
|
||||
}
|
||||
|
||||
|
||||
}
|
|
@ -0,0 +1,60 @@
|
|||
/** @file
|
||||
|
||||
Copyright (c) 2006, Intel Corporation
|
||||
All rights reserved. This program and the accompanying materials
|
||||
are licensed and made available under the terms and conditions of the BSD License
|
||||
which accompanies this distribution. The full text of the license may be found at
|
||||
http://opensource.org/licenses/bsd-license.php
|
||||
|
||||
THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
|
||||
WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
|
||||
|
||||
**/
|
||||
package org.tianocore.build.tools;
|
||||
|
||||
import org.apache.tools.ant.BuildException;
|
||||
import org.tianocore.build.global.SurfaceAreaQuery;
|
||||
|
||||
public class PackageItem {
|
||||
|
||||
private String packageName;
|
||||
|
||||
private String packageGuid;
|
||||
|
||||
private String packageVersion;
|
||||
|
||||
public PackageItem(){
|
||||
|
||||
}
|
||||
|
||||
public void execute() throws BuildException {
|
||||
|
||||
}
|
||||
|
||||
public String toString(){
|
||||
return "[" + packageName + packageGuid + "]";
|
||||
}
|
||||
public String getPackageGuid() {
|
||||
return packageGuid;
|
||||
}
|
||||
|
||||
public void setPackageGuid(String packageGuid) {
|
||||
this.packageGuid = packageGuid;
|
||||
}
|
||||
|
||||
public String getPackageName() {
|
||||
return packageName;
|
||||
}
|
||||
|
||||
public void setPackageName(String packageName) {
|
||||
this.packageName = packageName;
|
||||
}
|
||||
|
||||
public String getPackageVersion() {
|
||||
return packageVersion;
|
||||
}
|
||||
|
||||
public void setPackageVersion(String packageVersion) {
|
||||
this.packageVersion = packageVersion;
|
||||
}
|
||||
}
|
Loading…
Reference in New Issue