]> git.proxmox.com Git - mirror_edk2.git/blobdiff - Tools/Source/FrameworkTasks/org/tianocore/framework/tasks/MakeDeps.java
Fixed EDKT102;
[mirror_edk2.git] / Tools / Source / FrameworkTasks / org / tianocore / framework / tasks / MakeDeps.java
index c538403b36ce167ab1e4d08214d7f221e5162411..c72b1f66728dc0e84db5e766f7320dc9abe1413b 100644 (file)
@@ -14,26 +14,28 @@ WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
 **/\r
 package org.tianocore.framework.tasks;\r
 \r
 **/\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.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.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 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
+\r
 /**\r
  Class MakeDeps is used to wrap MakeDeps.exe as an ANT task.\r
  **/\r
 /**\r
  Class MakeDeps is used to wrap MakeDeps.exe as an ANT task.\r
  **/\r
@@ -185,10 +187,15 @@ public class MakeDeps extends Task {
     /// Remove any duplicated path separator or inconsistent path separator\r
     ///\r
     private String cleanupPathName(String path) {\r
     /// Remove any duplicated path separator or inconsistent path separator\r
     ///\r
     private String cleanupPathName(String path) {\r
-        String separator = "\\" + File.separator;\r
-        String duplicateSeparator = separator + "{2}";\r
-        path = Path.translateFile(path);\r
-        path = path.replaceAll(duplicateSeparator, separator);\r
+        try {\r
+            path = (new File(path)).getCanonicalPath();\r
+        } catch (IOException e) {\r
+            String separator = "\\" + File.separator;\r
+            String duplicateSeparator = separator + "{2}";\r
+            path = Path.translateFile(path);\r
+            path = path.replaceAll(duplicateSeparator, separator);\r
+            return path;\r
+        }\r
 \r
         return path;\r
     }\r
 \r
         return path;\r
     }\r
@@ -335,6 +342,7 @@ public class MakeDeps extends Task {
 \r
         LineNumberReader    lineReader = null;\r
         FileReader          fileReader = null;\r
 \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
         try {\r
             fileReader = new FileReader(df);\r
             lineReader = new LineNumberReader(fileReader);\r
@@ -343,7 +351,6 @@ public class MakeDeps extends Task {
             /// clean-up each line in deps file\r
             //\r
             String line = null;\r
             /// 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
             while ((line = lineReader.readLine()) != null) {\r
                 Pattern pattern = Pattern.compile(target + "[ ]*:[ ]*(.+)");\r
                 Matcher matcher = pattern.matcher(line);\r
@@ -354,8 +361,7 @@ public class MakeDeps extends Task {
                     ///\r
                     String filePath = line.substring(matcher.start(1), matcher.end(1));\r
                     filePath = cleanupPathName(filePath);\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(filePath);\r
                 }\r
             }\r
             lineReader.close();\r
                 }\r
             }\r
             lineReader.close();\r
@@ -366,10 +372,19 @@ public class MakeDeps extends Task {
             ///\r
             StringTokenizer fileTokens = new StringTokenizer(extraDeps, ";");\r
             while (fileTokens.hasMoreTokens()) {\r
             ///\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
 \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
             ///\r
             /// overwrite old dep file with new content\r
             ///\r