**/\r
package org.tianocore.framework.tasks;\r
\r
+import java.io.BufferedInputStream;\r
import java.io.BufferedReader;\r
import java.io.BufferedWriter;\r
import java.io.File;\r
+import java.io.FileInputStream;\r
import java.io.FileReader;\r
import java.io.FileWriter;\r
import java.io.IOException;\r
//\r
// private members, use set/get to access them\r
//\r
+ private String targetFile = "";\r
private String depsFilePath = "";\r
private IncludePath includePathList = new IncludePath();\r
private Input inputFileList = new Input();\r
//\r
// regular expression for "#include ..." directive\r
// \r
- private static final Pattern incPattern = Pattern.compile("[\n\r \t]*#[ \t]*include[ \t\"<]+([^\n\r\"<>]+)");\r
+ private static final Pattern incPattern = Pattern.compile("[\n\r \t#]*include[ \t]+[\"<]*([^\n\r\"<>]+)[>\" \t]*");\r
\r
public MakeDeps() {\r
\r
@throws BuildException\r
**/\r
public void execute() throws BuildException {\r
+ //\r
+ // if target file is specified and it hasn't been generated, don't generate\r
+ // dep file\r
+ // \r
+ if (targetFile.length() != 0 && (new File(targetFile)).exists() == false) {\r
+ return;\r
+ }\r
//\r
// check if the dependency list file is uptodate or not\r
//\r
FileTimeStamp.update(depsFilePath, depsFile.lastModified());\r
}\r
\r
+ public void setTargetFile(String name) {\r
+ targetFile = name;\r
+ }\r
+\r
+ public String getTargetFile() {\r
+ return targetFile;\r
+ }\r
+\r
/**\r
Set method for "DepsFile" attribute\r
\r
while (!pendingFiles.empty()) {\r
String src = pendingFiles.pop();\r
File srcFile = new File(src);\r
- if (!srcFile.exists()) {\r
+ int fileLength = (int)srcFile.length();\r
+ if (!srcFile.exists() || fileLength == 0) {\r
continue;\r
}\r
-\r
//\r
// try cache first\r
// \r
Set<String> incFiles = includesCache.get(src);\r
if (incFiles == null) {\r
incFiles = new HashSet<String>();\r
- FileReader fileReader = null;\r
- BufferedReader bufReader = null;\r
+ FileInputStream fileReader = null;\r
+ BufferedInputStream bufReader = null;\r
String fileContent = "";\r
- int fileLength = (int)srcFile.length();\r
\r
try {\r
- fileReader = new FileReader(srcFile);\r
- bufReader = new BufferedReader(fileReader);\r
- char[] buf = new char[fileLength];\r
+ fileReader = new FileInputStream(srcFile);\r
+ bufReader = new BufferedInputStream(fileReader);\r
+ byte[] buf = new byte[fileLength];\r
\r
bufReader.read(buf, 0, fileLength);\r
+ //\r
+ // check if the file is utf-16 encoded\r
+ // \r
+ if (buf[0] == (byte)0xff || buf[0] == (byte)0xfe) {\r
+ fileContent = new String(buf, "UTF-16");\r
+ buf = fileContent.getBytes("UTF-8");\r
+ }\r
fileContent = new String(buf);\r
} catch (IOException e) {\r
throw new BuildException(e.getMessage());\r