]> git.proxmox.com Git - mirror_edk2.git/blobdiff - Tools/Source/GenBuild/org/tianocore/build/ModuleBuildFileGenerator.java
Adding new Logger instead of Ant's.
[mirror_edk2.git] / Tools / Source / GenBuild / org / tianocore / build / ModuleBuildFileGenerator.java
index 34b3771a993c6a7306ea24251167c727a2ca8a25..c02bc1fce8873a467934e77e4e8b567bbfc320d4 100644 (file)
@@ -14,27 +14,32 @@ package org.tianocore.build;
 import java.io.File;\r
 import java.util.LinkedHashMap;\r
 import java.util.Map;\r
+import java.io.FileNotFoundException;\r
 import java.io.FileOutputStream;\r
 import java.io.OutputStreamWriter;\r
 \r
 import javax.xml.parsers.DocumentBuilder;\r
 import javax.xml.parsers.DocumentBuilderFactory;\r
+import javax.xml.parsers.ParserConfigurationException;\r
 import javax.xml.transform.OutputKeys;\r
 import javax.xml.transform.Result;\r
 import javax.xml.transform.Source;\r
 import javax.xml.transform.Transformer;\r
+import javax.xml.transform.TransformerConfigurationException;\r
+import javax.xml.transform.TransformerException;\r
 import javax.xml.transform.TransformerFactory;\r
 import javax.xml.transform.dom.DOMSource;\r
 import javax.xml.transform.stream.StreamResult;\r
 \r
 import org.apache.tools.ant.BuildException;\r
 import org.apache.tools.ant.Project;\r
+import org.tianocore.build.exception.GenBuildException;\r
 import org.tianocore.build.fpd.FpdParserTask;\r
 import org.tianocore.build.global.SurfaceAreaQuery;\r
-import org.tianocore.build.global.PropertyManager;\r
 import org.tianocore.build.id.FpdModuleIdentification;\r
 import org.tianocore.build.id.ModuleIdentification;\r
 import org.tianocore.build.id.PackageIdentification;\r
+import org.tianocore.common.exception.EdkException;\r
 import org.w3c.dom.Comment;\r
 import org.w3c.dom.Document;\r
 import org.w3c.dom.Element;\r
@@ -46,7 +51,7 @@ public class ModuleBuildFileGenerator {
     /// Pass: TARGET, TOOLCHAIN, ARCH\r
     /// PACKAGE, PACKAGE_GUID, PACKAGE_VERSION\r
     ///\r
-    String[] inheritProperties = {"ARCH", "MODULE_GUID", "MODULE_VERSION", "PLATFORM_FILE", "PACKAGE_GUID", "PACKAGE_VERSION"};\r
+    String[] inheritProperties = {"ARCH", "MODULE_GUID", "MODULE_VERSION", "PACKAGE_GUID", "PACKAGE_VERSION"};\r
 \r
     ///\r
     /// The information at the header of <em>build.xml</em>.\r
@@ -65,11 +70,14 @@ public class ModuleBuildFileGenerator {
     \r
     private String[] includes;\r
     \r
-    public ModuleBuildFileGenerator(Project project, String ffsKeyword, FpdModuleIdentification fpdModuleId, String[] includes) {\r
+    private SurfaceAreaQuery saq = null;\r
+    \r
+    public ModuleBuildFileGenerator(Project project, String ffsKeyword, FpdModuleIdentification fpdModuleId, String[] includes, SurfaceAreaQuery saq) {\r
         this.project = project;\r
         this.fpdModuleId = fpdModuleId;\r
         this.ffsKeyword = ffsKeyword;\r
         this.includes = includes;\r
+        this.saq = saq;\r
     }\r
     \r
     /**\r
@@ -87,7 +95,7 @@ public class ModuleBuildFileGenerator {
       @throws BuildException\r
               Error throws during BaseName_build.xml generating. \r
     **/\r
-    public void genBuildFile(String buildFilename) throws BuildException {\r
+    public void genBuildFile(String buildFilename) throws GenBuildException, EdkException {\r
         FfsProcess fp = new FfsProcess();\r
         DocumentBuilderFactory domfac = DocumentBuilderFactory.newInstance();\r
         try {\r
@@ -140,7 +148,9 @@ public class ModuleBuildFileGenerator {
             //\r
             // Parse all sourfiles but files specified in sections\r
             //\r
-            applyLibraryInstance(document, ele);\r
+            if (!FrameworkBuildTask.multithread) {\r
+                applyLibraryInstance(document, ele);\r
+            }\r
             root.appendChild(ele);\r
 \r
             //\r
@@ -224,8 +234,22 @@ public class ModuleBuildFileGenerator {
             xformer.setOutputProperty("{http://xml.apache.org/xslt}indent-amount", "2");\r
             xformer.setOutputProperty(OutputKeys.INDENT, "yes");\r
             xformer.transform(source, result);\r
-        } catch (Exception ex) {\r
-            throw new BuildException("Generating the module [" + fpdModuleId.getModule().getName() + "] build.xml file failed!.\n" + ex.getMessage());\r
+        } catch (ParserConfigurationException ex) {\r
+            GenBuildException e = new GenBuildException("Generating the module [" + fpdModuleId.getModule().getName() + "] build.xml file failed!.\n" + ex.getMessage());\r
+            e.setStackTrace(ex.getStackTrace());\r
+            throw e;\r
+        } catch (FileNotFoundException ex) {\r
+            GenBuildException e = new GenBuildException("Generating the module [" + fpdModuleId.getModule().getName() + "] build.xml file failed!.\n" + ex.getMessage());\r
+            e.setStackTrace(ex.getStackTrace());\r
+            throw e;\r
+        } catch (TransformerConfigurationException ex) {\r
+            GenBuildException e = new GenBuildException("Generating the module [" + fpdModuleId.getModule().getName() + "] build.xml file failed!.\n" + ex.getMessage());\r
+            e.setStackTrace(ex.getStackTrace());\r
+            throw e;\r
+        } catch (TransformerException ex) {\r
+            GenBuildException e = new GenBuildException("Generating the module [" + fpdModuleId.getModule().getName() + "] build.xml file failed!.\n" + ex.getMessage());\r
+            e.setStackTrace(ex.getStackTrace());\r
+            throw e;\r
         }\r
     }\r
 \r
@@ -292,8 +316,8 @@ public class ModuleBuildFileGenerator {
       @param document current BaseName_build.xml XML document\r
       @param root Root element for current\r
     **/\r
-    private void applyLibraryInstance(Document document, Node root) {\r
-        ModuleIdentification[] libinstances = SurfaceAreaQuery.getLibraryInstance(fpdModuleId.getArch());\r
+    private void applyLibraryInstance(Document document, Node root) throws EdkException {\r
+        ModuleIdentification[] libinstances = saq.getLibraryInstance(fpdModuleId.getArch());\r
         for (int i = 0; i < libinstances.length; i++) {\r
             //\r
             // Put package file path to module identification\r
@@ -341,7 +365,7 @@ public class ModuleBuildFileGenerator {
         //\r
         // sourceFiles[][0] is FileType, [][1] is File name relative to Module_Dir\r
         //\r
-        String[][] sourceFiles = SurfaceAreaQuery.getSourceFiles(fpdModuleId.getArch());\r
+        String[][] sourceFiles = saq.getSourceFiles(fpdModuleId.getArch());\r
 \r
         FileProcess fileProcess = new FileProcess();\r
         fileProcess.init(project, includes, document);\r
@@ -413,7 +437,7 @@ public class ModuleBuildFileGenerator {
         for (int i = 0; i < sourceFiles.length; i++) {\r
             str += " " + sourceFiles[i][1];\r
         }\r
-        PropertyManager.setProperty(project, "SOURCE_FILES", str.replaceAll("(\\\\)", "/"));\r
+        project.setProperty("SOURCE_FILES", str.replaceAll("(\\\\)", "/"));\r
     }\r
 \r
     /**\r