//\r
// private members, use set/get to access them\r
//\r
- private static final String cmdName = "MakeDeps";\r
- private String depsFile = null;\r
- private String subDir = null;\r
- private boolean quietMode = true;\r
- private boolean ignoreError = true;\r
- private String extraDeps = "";\r
- private List<IncludePath> includePathList = new ArrayList<IncludePath>();\r
- private List<Input> inputFileList = new ArrayList<Input>();\r
+ private static final String toolName = "MakeDeps";\r
+ private FileArg depsFile = new FileArg();\r
+ private ToolArg subDir = new ToolArg();\r
+ private ToolArg quietMode = new ToolArg(" -", "q");\r
+ private ToolArg ignoreError = new ToolArg(" -", "ignorenotfound");\r
+ private IncludePath includePathList = new IncludePath();\r
+ private Input inputFileList = new Input();\r
+ private ToolArg target = new FileArg(" -target ", "dummy");\r
\r
public MakeDeps() {\r
\r
/// compose full tool path\r
///\r
if (toolPath == null || toolPath.length() == 0) {\r
- toolPath = cmdName;\r
+ toolPath = toolName;\r
} else {\r
if (toolPath.endsWith("/") || toolPath.endsWith("\\")) {\r
- toolPath = toolPath + cmdName;\r
+ toolPath = toolPath + toolName;\r
} else {\r
- toolPath = toolPath + File.separator + cmdName;\r
+ toolPath = toolPath + File.separator + toolName;\r
}\r
}\r
\r
///\r
/// compose tool arguments\r
///\r
- StringBuffer args = new StringBuffer(4096);\r
- if (ignoreError) {\r
- args.append(" -ignorenotfound ");\r
- }\r
- if (quietMode) {\r
- args.append(" -q ");\r
- }\r
- if (subDir != null && subDir.length() > 0) {\r
- args.append(" -s ");\r
- args.append(subDir);\r
- }\r
-\r
- ///\r
- /// if there's no source files, we can do nothing about dependency\r
- ///\r
- if (inputFileList.size() == 0) {\r
- throw new BuildException("No source files specified to scan");\r
- }\r
-\r
- ///\r
- /// compose source file arguments\r
- ///\r
- for (int i = 0, listLength = inputFileList.size(); i < listLength; ++i) {\r
- args.append(inputFileList.get(i).toString());\r
- }\r
-\r
- for (int i = 0, listLength = includePathList.size(); i < listLength; ++i) {\r
- args.append(includePathList.get(i).toString());\r
- }\r
-\r
- ///\r
- /// We don't need a real target. So just a "dummy" is given\r
- ///\r
- args.append(" -target dummy");\r
- args.append(" -o ");\r
- args.append(depsFile);\r
+ String argument = "" + inputFileList + includePathList + subDir\r
+ + quietMode + ignoreError + target + depsFile;\r
\r
///\r
/// prepare to execute the tool\r
///\r
Commandline cmd = new Commandline();\r
cmd.setExecutable(toolPath);\r
- cmd.createArgument().setLine(args.toString());\r
+ cmd.createArgument().setLine(argument);\r
\r
LogStreamHandler streamHandler = new LogStreamHandler(this, Project.MSG_INFO, Project.MSG_WARN);\r
Execute runner = new Execute(streamHandler, null);\r
}\r
\r
if (result != 0) {\r
- EdkLog.log(this, EdkLog.EDK_INFO, "MakeDeps failed!");\r
- throw new BuildException("MakeDeps: failed to generate dependency file!");\r
+ EdkLog.log(this, EdkLog.EDK_INFO, toolName + " failed!");\r
+ throw new BuildException(toolName + ": failed to generate dependency file!");\r
+ } else {\r
+ EdkLog.log(this, EdkLog.EDK_VERBOSE, toolName + " succeeded!");\r
}\r
}\r
\r
- ///\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
- return path;\r
- }\r
-\r
/**\r
Set method for "DepsFile" attribute\r
\r
@param name The name of dependency list file\r
**/\r
public void setDepsFile(String name) {\r
- depsFile = cleanupPathName(name);\r
+ depsFile.setArg(" -o ", name);\r
}\r
\r
/**\r
@returns The name of dependency list file\r
**/\r
public String getDepsFile() {\r
- return depsFile;\r
+ return depsFile.getValue();\r
}\r
\r
/**\r
@param ignore flag to control error handling (true/false)\r
**/\r
public void setIgnoreError(boolean ignore) {\r
- ignoreError = ignore;\r
+ if (!ignore) {\r
+ ignoreError.setArg(" ", " ");\r
+ }\r
}\r
\r
/**\r
@returns The value of current IgnoreError flag\r
**/\r
public boolean getIgnoreError() {\r
- return ignoreError;\r
+ return ignoreError.getValue().length() > 0;\r
}\r
\r
/**\r
@param quiet flag to control the output information (true/false)\r
**/\r
public void setQuietMode(boolean quiet) {\r
- quietMode = quiet;\r
+ if (!quiet) {\r
+ quietMode.setArg(" ", " ");\r
+ }\r
}\r
\r
/**\r
@returns value of current QuietMode flag\r
**/\r
public boolean getQuietMode() {\r
- return quietMode;\r
+ return quietMode.getValue().length() > 0;\r
}\r
\r
/**\r
@param dir The name of sub-directory in which source files will be scanned\r
**/\r
public void setSubDir(String dir) {\r
- subDir = cleanupPathName(dir);\r
+ subDir.setArg(" -s ", dir);\r
}\r
\r
/**\r
@returns The name of sub-directory\r
**/\r
public String getSubDir() {\r
- return subDir;\r
- }\r
-\r
- /**\r
- Set method for "ExtraDeps" attribute\r
-\r
- @param deps The name of dependency file specified separately\r
- **/\r
- public void setExtraDeps(String deps) {\r
- extraDeps = cleanupPathName(deps);\r
- }\r
-\r
- /**\r
- Get method for "ExtraDeps" attribute\r
-\r
- @returns The name of dependency file specified separately\r
- **/\r
- public String getExtraDeps () {\r
- return extraDeps;\r
+ return subDir.getValue();\r
}\r
\r
/**\r
\r
@param path The IncludePath object from nested IncludePath type of element\r
**/\r
- public void addIncludepath(IncludePath path) {\r
- includePathList.add(path);\r
+ public void addConfiguredIncludepath(IncludePath path) {\r
+ includePathList.insert(path);\r
}\r
\r
/**\r
\r
@param input The Input object from nested Input type of element\r
**/\r
- public void addInput(Input inputFile) {\r
- inputFileList.add(inputFile);\r
+ public void addConfiguredInput(Input inputFile) {\r
+ inputFileList.insert(inputFile);\r
}\r
\r
/**\r
@returns false The dependency list file is outofdate. Re-generation is needed.\r
**/\r
private boolean isUptodate() {\r
- File df = new File(depsFile);\r
+ String dfName = depsFile.getValue();\r
+ File df = new File(dfName);\r
if (!df.exists()) {\r
- EdkLog.log(this, EdkLog.EDK_VERBOSE, depsFile + " doesn't exist!");\r
+ EdkLog.log(this, EdkLog.EDK_VERBOSE, dfName + " doesn't exist!");\r
return false;\r
}\r
\r
// re-generate the dependency list file\r
//\r
long depsFileTimeStamp = df.lastModified();\r
- Iterator<Input> iterator = (Iterator<Input>)inputFileList.iterator();\r
- while (iterator.hasNext()) {\r
- Input inputFile = iterator.next();\r
- List<String> fileList = inputFile.getNameList();\r
- for (int i = 0, length = fileList.size(); i < length; ++i) {\r
- File sf = new File(fileList.get(i));\r
- if (sf.lastModified() > depsFileTimeStamp) {\r
- EdkLog.log(this, EdkLog.EDK_VERBOSE, sf.getPath() + " has been changed since last build!");\r
- return false;\r
- }\r
+ List<String> fileList = inputFileList.getNameList();\r
+ for (int i = 0, length = fileList.size(); i < length; ++i) {\r
+ File sf = new File(fileList.get(i));\r
+ if (sf.lastModified() > depsFileTimeStamp) {\r
+ EdkLog.log(this, EdkLog.EDK_VERBOSE, sf.getPath() + " has been changed since last build!");\r
+ return false;\r
}\r
}\r
\r
// check if the .dep file is empty\r
// \r
if (lines == 0) {\r
- EdkLog.log(this, EdkLog.EDK_VERBOSE, depsFile + " is empty!");\r
+ EdkLog.log(this, EdkLog.EDK_VERBOSE, dfName + " is empty!");\r
ret = false;\r
}\r
\r