]> git.proxmox.com Git - mirror_edk2.git/blobdiff - Tools/Source/FrameworkTasks/org/tianocore/framework/tasks/MakeDeps.java
Tried to fix EDKT149. Since the issue happened randomly, only long time test can...
[mirror_edk2.git] / Tools / Source / FrameworkTasks / org / tianocore / framework / tasks / MakeDeps.java
index c538403b36ce167ab1e4d08214d7f221e5162411..5c049773b29e0e161cb8319e4100f86424aa4d64 100644 (file)
@@ -14,26 +14,29 @@ WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
 **/\r
 package org.tianocore.framework.tasks;\r
 \r
-import org.apache.tools.ant.BuildException;\r
-import org.apache.tools.ant.Project;\r
-import org.apache.tools.ant.Task;\r
-import org.apache.tools.ant.taskdefs.Execute;\r
-import org.apache.tools.ant.taskdefs.LogStreamHandler;\r
-import org.apache.tools.ant.types.Commandline;\r
-import org.apache.tools.ant.types.Path;\r
-\r
 import java.io.File;\r
 import java.io.FileReader;\r
 import java.io.FileWriter;\r
 import java.io.IOException;\r
 import java.io.LineNumberReader;\r
 import java.util.ArrayList;\r
+import java.util.HashSet;\r
 import java.util.Iterator;\r
 import java.util.List;\r
+import java.util.Set;\r
 import java.util.StringTokenizer;\r
 import java.util.regex.Matcher;\r
 import java.util.regex.Pattern;\r
 \r
+import org.apache.tools.ant.BuildException;\r
+import org.apache.tools.ant.Project;\r
+import org.apache.tools.ant.Task;\r
+import org.apache.tools.ant.taskdefs.Execute;\r
+import org.apache.tools.ant.taskdefs.LogStreamHandler;\r
+import org.apache.tools.ant.types.Commandline;\r
+import org.apache.tools.ant.types.Path;\r
+import org.tianocore.logger.EdkLog;\r
+\r
 /**\r
  Class MakeDeps is used to wrap MakeDeps.exe as an ANT task.\r
  **/\r
@@ -75,6 +78,10 @@ public class MakeDeps extends Task {
 \r
         Project prj  = this.getOwningTarget().getProject();\r
         String  toolPath = prj.getProperty("env.FRAMEWORK_TOOLS_PATH");\r
+        FrameworkLogger logger = new FrameworkLogger(prj, "makedeps");\r
+        EdkLog.setLogLevel(prj.getProperty("env.LOGLEVEL"));\r
+        EdkLog.setLogger(logger);\r
+\r
         ///\r
         /// compose full tool path\r
         ///\r
@@ -116,8 +123,9 @@ public class MakeDeps extends Task {
         Iterator iterator = inputFileList.iterator();\r
         while (iterator.hasNext()) {\r
             Input inputFile = (Input)iterator.next();\r
+            String inputFileString = cleanupPathName(inputFile.getFile());\r
             args.append(" -f ");\r
-            args.append(cleanupPathName(inputFile.getFile()));\r
+            args.append(inputFileString);\r
         }\r
 \r
         ///\r
@@ -163,6 +171,8 @@ public class MakeDeps extends Task {
         runner.setAntRun(prj);\r
         runner.setCommandline(cmd.getCommandline());\r
 \r
+        EdkLog.log(EdkLog.EDK_VERBOSE, Commandline.toString(cmd.getCommandline()));\r
+\r
         int result = 0;\r
         try {\r
             result = runner.execute();\r
@@ -171,7 +181,7 @@ public class MakeDeps extends Task {
         }\r
 \r
         if (result != 0) {\r
-            log ("MakeDeps failed");\r
+            EdkLog.log(EdkLog.EDK_INFO, "MakeDeps failed!");\r
             return;\r
         }\r
 \r
@@ -189,7 +199,6 @@ public class MakeDeps extends Task {
         String duplicateSeparator = separator + "{2}";\r
         path = Path.translateFile(path);\r
         path = path.replaceAll(duplicateSeparator, separator);\r
-\r
         return path;\r
     }\r
 \r
@@ -335,6 +344,7 @@ public class MakeDeps extends Task {
 \r
         LineNumberReader    lineReader = null;\r
         FileReader          fileReader = null;\r
+        Set<String>         lineSet = new HashSet<String>(100); // used to remove duplicated lines\r
         try {\r
             fileReader = new FileReader(df);\r
             lineReader = new LineNumberReader(fileReader);\r
@@ -343,19 +353,13 @@ public class MakeDeps extends Task {
             /// clean-up each line in deps file\r
             //\r
             String line = null;\r
-            StringBuffer cleanedLines = new StringBuffer(4096);\r
             while ((line = lineReader.readLine()) != null) {\r
-                Pattern pattern = Pattern.compile(target + "[ ]*:[ ]*(.+)");\r
-                Matcher matcher = pattern.matcher(line);\r
-\r
-                while (matcher.find()) {\r
+                String[] filePath = line.split(" : ");\r
+                if (filePath.length == 2) {\r
                     ///\r
                     /// keep the file name after ":"\r
                     ///\r
-                    String filePath = line.substring(matcher.start(1), matcher.end(1));\r
-                    filePath = cleanupPathName(filePath);\r
-                    cleanedLines.append(filePath);\r
-                    cleanedLines.append("\n");\r
+                    lineSet.add(cleanupPathName(filePath[1]));\r
                 }\r
             }\r
             lineReader.close();\r
@@ -366,10 +370,19 @@ public class MakeDeps extends Task {
             ///\r
             StringTokenizer fileTokens = new StringTokenizer(extraDeps, ";");\r
             while (fileTokens.hasMoreTokens()) {\r
-                cleanedLines.append(cleanupPathName(fileTokens.nextToken()));\r
-                cleanedLines.append("\n");\r
+                lineSet.add(cleanupPathName(fileTokens.nextToken()));\r
             }\r
 \r
+            ///\r
+            /// compose the final file content\r
+            /// \r
+            StringBuffer cleanedLines = new StringBuffer(40960);\r
+            Iterator<String> it = lineSet.iterator();\r
+            while (it.hasNext()) {\r
+                String filePath = it.next();\r
+                cleanedLines.append(filePath);\r
+                cleanedLines.append("\n");\r
+            }\r
             ///\r
             /// overwrite old dep file with new content\r
             ///\r