**/\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
\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
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
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
}\r
\r
if (result != 0) {\r
- log ("MakeDeps failed");\r
+ EdkLog.log(EdkLog.EDK_INFO, "MakeDeps failed!");\r
return;\r
}\r
\r
String duplicateSeparator = separator + "{2}";\r
path = Path.translateFile(path);\r
path = path.replaceAll(duplicateSeparator, separator);\r
-\r
return path;\r
}\r
\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
/// 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
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
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