package org.tianocore.build.global;\r
\r
import java.io.File;\r
+import java.io.IOException;\r
import java.util.HashMap;\r
import java.util.HashSet;\r
import java.util.Iterator;\r
import java.util.Map;\r
import java.util.Set;\r
\r
-import org.apache.tools.ant.BuildException;\r
+import org.apache.xmlbeans.XmlException;\r
import org.apache.xmlbeans.XmlObject;\r
\r
import org.tianocore.common.exception.EdkException;\r
@throws BuildException\r
Framework Dababase or SPD or MSA file is not valid\r
**/\r
- public synchronized static void initInfo(String workspaceDatabaseFile, String workspaceDir, String toolsDefFilename ) throws BuildException {\r
+ public synchronized static void initInfo(String workspaceDatabaseFile, String workspaceDir, String toolsDefFilename ) throws EdkException {\r
//\r
// ensure this method will be revoked only once\r
//\r
// CONF dir + tools definition file name\r
//\r
File toolsDefFile = new File(workspaceDir + File.separatorChar + toolsDefFilename);\r
- EdkLog.log("Init", "Using tool definiton file [" + toolsDefFile.getPath() + "].");\r
- try {\r
- toolsDef = new ToolChainConfig(toolsDefFile);\r
- } catch (Exception e) {\r
- throw new BuildException(e.getMessage());\r
- }\r
+ EdkLog.log("Init", "Using tool definition file [" + toolsDefFile.getPath() + "].");\r
+ toolsDef = new ToolChainConfig(toolsDefFile);\r
+\r
\r
//\r
// Parse Framework Database\r
// validate FrameworkDatabaseFile\r
//\r
if (!db.validate()) {\r
- throw new BuildException("Framework Database file [" + dbFile.getPath() + "] format is invalid!");\r
+ throw new EdkException("Framework Database file [" + dbFile.getPath() + "] format is invalid!");\r
}\r
//\r
// Get package list\r
String fileName = iter.next().getStringValue().trim();\r
Spd spd = new Spd(new File(workspaceDir + File.separatorChar + fileName));\r
packageList.add(spd.getPackageId());\r
+ //\r
+ // Report warning if existing two packages with same GUID and Version\r
+ //\r
+ if (spdTable.containsKey(spd.getPackageId())) {\r
+ //\r
+ // BUGBUG\r
+ //\r
+ EdkLog.log("Init", EdkLog.EDK_WARNING, "Warning: Existing two packages with same GUID and Version. They are ... " + spd.getPackageId().getSpdFile().getPath());\r
+ }\r
spdTable.put(spd.getPackageId(), spd);\r
}\r
}\r
String fileName = iter.next().getStringValue().trim();\r
File fpdFile = new File(workspaceDir + File.separatorChar + fileName);\r
if ( !fpdFile.exists() ) {\r
- throw new BuildException("Platform file [" + fpdFile.getPath() + "] not exists. ");\r
+ throw new EdkException("Platform file [" + fpdFile.getPath() + "] not exists. ");\r
}\r
XmlObject fpdDoc = XmlObject.Factory.parse(fpdFile);\r
//\r
// Verify FPD file, if is invalid, throw Exception\r
//\r
if (!fpdDoc.validate()) {\r
- throw new BuildException("Framework Platform Surface Area file [" + fpdFile.getPath() + "] format is invalid!");\r
+ throw new EdkException("Framework Platform Surface Area file [" + fpdFile.getPath() + "] format is invalid!");\r
}\r
//\r
// We can change Map to XmlObject\r
//\r
- //\r
- // TBD check SPD or FPD is existed in FS\r
- //\r
Map<String, XmlObject> fpdDocMap = new HashMap<String, XmlObject>();\r
fpdDocMap.put("PlatformSurfaceArea", fpdDoc);\r
SurfaceAreaQuery saq = new SurfaceAreaQuery(fpdDocMap);\r
PlatformIdentification platformId = saq.getFpdHeader();\r
platformId.setFpdFile(fpdFile);\r
+ //\r
+ // Report warning if existing two platfrom with same GUID and Version\r
+ //\r
+ if (platformList.contains(platformId)) {\r
+ //\r
+ // BUGBUG\r
+ //\r
+ EdkLog.log("Init", EdkLog.EDK_WARNING, "Warning: Existing two platforms with same GUID and Version. They are ... " + fpdFile.getPath());\r
+ }\r
platformList.add(platformId);\r
}\r
}\r
- } catch (Exception e) {\r
- throw new BuildException("Parse WORKSPACE Database file [" + dbFile.getPath() + "] Error.\n" + e.getMessage());\r
+ } catch(IOException ex) {\r
+ EdkException edkException = new EdkException("Parse WORKSPACE Database file [" + dbFile.getPath() + "] Error.\n" + ex.getMessage());\r
+ edkException.setStackTrace(ex.getStackTrace());\r
+ throw edkException;\r
+ } catch(XmlException ex) {\r
+ EdkException edkException = new EdkException("Parse WORKSPACE Database file [" + dbFile.getPath() + "] Error.\n" + ex.getMessage());\r
+ edkException.setStackTrace(ex.getStackTrace());\r
+ throw edkException;\r
}\r
}\r
\r
/**\r
Get the MSA file name with absolute path\r
*/\r
- public synchronized static File getMsaFile(ModuleIdentification moduleId) throws BuildException {\r
+ public synchronized static File getMsaFile(ModuleIdentification moduleId) throws EdkException {\r
File msaFile = null;\r
//\r
// TBD. Do only when package is null.\r
}\r
}\r
if (msaFile == null){\r
- throw new BuildException("Can't find Module [" + moduleId.getName() + "] in any SPD package!");\r
+ throw new EdkException("Can't find Module [" + moduleId.getName() + "] in any SPD package!");\r
} else {\r
return msaFile;\r
}\r
}\r
\r
- public synchronized static PackageIdentification getPackageForModule(ModuleIdentification moduleId) {\r
+ public synchronized static PackageIdentification getPackageForModule(ModuleIdentification moduleId) throws EdkException {\r
//\r
// If package already defined in module\r
//\r
}\r
}\r
if (packageId == null){\r
- throw new BuildException("Can't find Module [" + moduleId.getName() + "] in any SPD package!");\r
+ throw new EdkException("Can't find Module [" + moduleId.getName() + "] in any SPD package!");\r
} else {\r
return packageId;\r
}\r
}\r
\r
\r
- public synchronized static void registerFpdModuleSA(FpdModuleIdentification fpdModuleId, Map<String, XmlObject> doc) {\r
+ public synchronized static void registerFpdModuleSA(FpdModuleIdentification fpdModuleId, Map<String, XmlObject> doc) throws EdkException{\r
Map<String, XmlObject> result = new HashMap<String, XmlObject>();\r
Set keySet = doc.keySet();\r
Iterator iter = keySet.iterator();\r
@return ModuleSA info and MSA info for fpdModuleId\r
@throws BuildException Can't find MSA\r
**/\r
- public synchronized static Map<String, XmlObject> getDoc(FpdModuleIdentification fpdModuleId) throws BuildException {\r
+ public synchronized static Map<String, XmlObject> getDoc(FpdModuleIdentification fpdModuleId) throws EdkException{\r
if (parsedModules.containsKey(fpdModuleId)) {\r
return parsedModules.get(fpdModuleId);\r
}\r
return doc;\r
}\r
\r
- public synchronized static Map<String, XmlObject> getDoc(ModuleIdentification moduleId, String arch) throws BuildException {\r
+ public synchronized static Map<String, XmlObject> getDoc(ModuleIdentification moduleId, String arch) throws EdkException{\r
FpdModuleIdentification fpdModuleId = new FpdModuleIdentification(moduleId, arch);\r
return getDoc(fpdModuleId);\r
}\r
+ \r
/**\r
Query the native MSA information with module base name.\r
\r
@throws BuildException\r
MSA file is not valid\r
**/\r
- public synchronized static Map<String, XmlObject> getNativeMsa(ModuleIdentification moduleId) throws BuildException {\r
+ public synchronized static Map<String, XmlObject> getNativeMsa(ModuleIdentification moduleId) throws EdkException {\r
if (nativeMsa.containsKey(moduleId)) {\r
return nativeMsa.get(moduleId);\r
}\r
return msaMap;\r
}\r
\r
- public synchronized static Map<String, XmlObject> getNativeMsa(File msaFile) throws BuildException {\r
+ public synchronized static Map<String, XmlObject> getNativeMsa(File msaFile) throws EdkException {\r
if (!msaFile.exists()) {\r
- throw new BuildException("Module Surface Area file [" + msaFile.getPath() + "] can't be found!");\r
+ throw new EdkException("Module Surface Area file [" + msaFile.getPath() + "] can't be found!");\r
}\r
try {\r
ModuleSurfaceAreaDocument doc = (ModuleSurfaceAreaDocument)XmlObject.Factory.parse(msaFile);\r
// Validate File if they accord with XML Schema\r
//\r
if ( !doc.validate()){\r
- throw new BuildException("Module Surface Area file [" + msaFile.getPath() + "] format is invalid!");\r
+ throw new EdkException("Module Surface Area file [" + msaFile.getPath() + "] format is invalid!");\r
}\r
//\r
// parse MSA file\r
msaMap.put("Externs", cloneXmlObject(msa.getExterns(), true));\r
msaMap.put("PcdCoded", cloneXmlObject(msa.getPcdCoded(), true));\r
return msaMap;\r
- }\r
- catch (Exception ex){\r
- throw new BuildException("Parsing MSA file [" + msaFile.getPath() + "] error. \n" + ex.getMessage() );\r
+ } catch(IOException ex) {\r
+ EdkException edkException = new EdkException("Parsing MSA file [" + msaFile.getPath() + "] error. \n" + ex.getMessage());\r
+ edkException.setStackTrace(ex.getStackTrace());\r
+ throw edkException;\r
+ } catch(XmlException ex) {\r
+ EdkException edkException = new EdkException("Parsing MSA file [" + msaFile.getPath() + "] error. \n" + ex.getMessage());\r
+ edkException.setStackTrace(ex.getStackTrace());\r
+ throw edkException;\r
}\r
}\r
\r
return fpdBuildOptionsMap;\r
}\r
\r
- public static void setFpdBuildOptions(XmlObject fpdBuildOptions) {\r
+ public static void setFpdBuildOptions(XmlObject fpdBuildOptions) throws EdkException {\r
GlobalData.fpdBuildOptions = cloneXmlObject(fpdBuildOptions, true);\r
fpdBuildOptionsMap.put("BuildOptions", GlobalData.fpdBuildOptions);\r
}\r
* The header file path is relative to workspace dir\r
*/\r
public static String[] getLibraryClassHeaderFiles(\r
- PackageIdentification[] packages, String name)\r
- throws BuildException {\r
+ PackageIdentification[] packages, String name) throws EdkException{\r
if (packages == null) {\r
// throw Exception or not????\r
return new String[0];\r
//\r
// If can't find library class declaration in every package\r
//\r
- throw new BuildException("Can not find library class [" + name\r
+ throw new EdkException("Can not find library class [" + name\r
+ "] declaration in any SPD package!");\r
}\r
\r
* The header file path is relative to workspace dir\r
*/\r
public static String getPackageHeaderFiles(PackageIdentification packages,\r
- String moduleType) throws BuildException {\r
+ String moduleType) {\r
if (packages == null) {\r
return new String("");\r
}\r
/**\r
* return two values: {cName, GuidValue}\r
*/\r
- public static String[] getGuid(List<PackageIdentification> packages, String name)\r
- throws BuildException {\r
+ public static String[] getGuid(List<PackageIdentification> packages, String name) {\r
if (packages == null) {\r
// throw Exception or not????\r
return new String[0];\r
* return two values: {cName, GuidValue}\r
*/\r
public static String[] getPpiGuid(List<PackageIdentification> packages,\r
- String name) throws BuildException {\r
+ String name) {\r
if (packages == null) {\r
return new String[0];\r
}\r
* return two values: {cName, GuidValue}\r
*/\r
public static String[] getProtocolGuid(List<PackageIdentification> packages,\r
- String name) throws BuildException {\r
+ String name) {\r
if (packages == null) {\r
return new String[0];\r
}\r
\r
}\r
\r
- public synchronized static PlatformIdentification getPlatformByName(String name) throws BuildException {\r
+ public synchronized static PlatformIdentification getPlatformByName(String name) throws EdkException {\r
Iterator iter = platformList.iterator();\r
while(iter.hasNext()){\r
PlatformIdentification platformId = (PlatformIdentification)iter.next();\r
return platformId;\r
}\r
}\r
- throw new BuildException("Can't find platform [" + name + "] in the current WORKSPACE database!");\r
+ throw new EdkException("Can't find platform [" + name + "] in the current WORKSPACE database!");\r
}\r
\r
- public synchronized static PlatformIdentification getPlatform(String filename) throws BuildException {\r
+ public synchronized static PlatformIdentification getPlatform(String filename) throws EdkException {\r
File file = new File(workspaceDir + File.separatorChar + filename);\r
Iterator iter = platformList.iterator();\r
while(iter.hasNext()){\r
return platformId;\r
}\r
}\r
- throw new BuildException("Can't find platform file [" + filename + "] in the current WORKSPACE database!");\r
+ throw new EdkException("Can't find platform file [" + filename + "] in the current WORKSPACE database!");\r
}\r
\r
- public synchronized static PackageIdentification refreshPackageIdentification(PackageIdentification packageId) throws BuildException {\r
+ public synchronized static PackageIdentification refreshPackageIdentification(PackageIdentification packageId) throws EdkException {\r
Iterator iter = packageList.iterator();\r
while(iter.hasNext()){\r
PackageIdentification packageItem = (PackageIdentification)iter.next();\r
return packageId;\r
}\r
}\r
- throw new BuildException("Can't find package GUID value " + packageId.toGuidString() + " in the current workspace!");\r
+ throw new EdkException("Can't find package GUID value " + packageId.toGuidString() + " in the current workspace!");\r
}\r
\r
- public synchronized static ModuleIdentification refreshModuleIdentification(ModuleIdentification moduleId) throws BuildException {\r
+ public synchronized static ModuleIdentification refreshModuleIdentification(ModuleIdentification moduleId) throws EdkException {\r
PackageIdentification packageId = getPackageForModule(moduleId);\r
moduleId.setPackage(packageId);\r
Spd spd = spdTable.get(packageId);\r
if (spd == null) {\r
- throw new BuildException("Can't find package GUID value " + packageId.toGuidString() + " in the current workspace!");\r
+ throw new EdkException("Can't find package GUID value " + packageId.toGuidString() + " in the current workspace!");\r
}\r
Set<ModuleIdentification> modules = spd.getModules();\r
Iterator<ModuleIdentification> iter = modules.iterator();\r
return moduleId;\r
}\r
}\r
- throw new BuildException("Can't find module GUID value " + moduleId.toGuidString() + " in " + packageId + " under the current workspace!");\r
+ throw new EdkException("Can't find module GUID value " + moduleId.toGuidString() + " in " + packageId + " under the current workspace!");\r
}\r
\r
public synchronized static Set<PackageIdentification> getPackageList(){\r
@return XmlObject after clone\r
@throws BuildException parse original XmlObject error. \r
**/\r
- private static XmlObject cloneXmlObject(XmlObject object, boolean deep) throws BuildException {\r
+ private static XmlObject cloneXmlObject(XmlObject object, boolean deep) throws EdkException {\r
if ( object == null) {\r
return null;\r
}\r
try {\r
result = XmlObject.Factory.parse(object.getDomNode()\r
.cloneNode(deep));\r
- } catch (Exception ex) {\r
- throw new BuildException(ex.getMessage());\r
+ } catch (XmlException ex) {\r
+ EdkException edkException = new EdkException(ex.getMessage());\r
+ edkException.setStackTrace(ex.getStackTrace());\r
+ throw edkException;\r
}\r
return result;\r
}\r