Fixed the issue caused by introducing INCLUDE_PATH property;

Re-designed NestElement class and all classes which implemented its interface because they have many common code; and changed all classes which use those re-designed classes.

git-svn-id: https://edk2.svn.sourceforge.net/svnroot/edk2/trunk/edk2@1380 6f19259b-4bc3-4df7-8a09-765794883524
This commit is contained in:
jwang36
2006-08-24 13:40:42 +00:00
parent cb4d97bd83
commit 82810f3b0f
13 changed files with 360 additions and 583 deletions

View File

@ -15,98 +15,16 @@
**/ **/
package org.tianocore.framework.tasks; package org.tianocore.framework.tasks;
import java.io.File;
import java.util.ArrayList;
import java.util.List;
import java.util.StringTokenizer;
/** /**
Database
Database represents an exceplicity name list of database file. Database represents an exceplicity name list of database file.
**/ **/
public class Database implements NestElement{ public class Database extends NestElement {
///
/// name of database file
///
private String name = "";
///
/// name of file including database files
///
private File file;
///
/// the database file name list
///
private List<String> nameList = new ArrayList<String>();
/** /**
getName Override NestElement.toString() to return a string with leading "-db"
This function is to get class member "name". @return String
@return class member "name".
**/
public String getName() {
return this.name;
}
/**
setName
This function is to set class member "name".
@param name : name of database file.
**/
public void setName(String name) {
this.name = " -db " + name;
}
/**
toString
This function is to call getName() function.
@return class member "name".
**/ **/
public String toString() { public String toString() {
return getName(); return super.toString(" -db ");
} }
/**
getFile
This function is to get file which include the database file list.
@return class member "file"
**/
public File getFile() {
return this.file;
}
/**
setFile
This function is to set class member "file".
@param file The file which include the database file list.
**/
public void setFile(File file) {
this.file = file;
}
public void setList(String fileNameList) {
if (fileNameList != null && fileNameList.length() > 0) {
StringTokenizer tokens = new StringTokenizer(fileNameList, " \t,;", false);
while (tokens.hasMoreTokens()) {
String fileName = tokens.nextToken().trim();
if (fileName.length() > 0) {
this.nameList.add(fileName);
}
}
}
}
public List<String> getList() {
return nameList;
}
} }

View File

@ -137,7 +137,7 @@ public class EfiRomTask extends Task implements EfiDefine {
argList.add("-b"); argList.add("-b");
Iterator binList = this.binaryFileList.iterator(); Iterator binList = this.binaryFileList.iterator();
while (binList.hasNext()){ while (binList.hasNext()){
argList.add(((Input)binList.next()).getFile()); argList.addAll(((Input)binList.next()).getNameList());
} }
} }
@ -148,7 +148,7 @@ public class EfiRomTask extends Task implements EfiDefine {
argList.add("-e"); argList.add("-e");
Iterator pe32List = this.pe32FileList.iterator(); Iterator pe32List = this.pe32FileList.iterator();
while (pe32List.hasNext()){ while (pe32List.hasNext()){
argList.add(((Input)pe32List.next()).getFile()); argList.addAll(((Input)pe32List.next()).getNameList());
} }
} }
@ -159,7 +159,7 @@ public class EfiRomTask extends Task implements EfiDefine {
argList.add("-ec"); argList.add("-ec");
Iterator pe32ComprList = this.pe32ComprFileList.iterator(); Iterator pe32ComprList = this.pe32ComprFileList.iterator();
while (pe32ComprList.hasNext()){ while (pe32ComprList.hasNext()){
argList.add(((Input)pe32ComprList.next()).getFile()); argList.addAll(((Input)pe32ComprList.next()).getNameList());
} }
} }

View File

@ -178,7 +178,7 @@ public class FlashMapTask extends Task implements EfiDefine {
argList.add("-mcmerge"); argList.add("-mcmerge");
Iterator mciList = mciFileArray.iterator(); Iterator mciList = mciFileArray.iterator();
while (mciList.hasNext()) { while (mciList.hasNext()) {
argList.add(((Input) mciList.next()).getFile()); argList.addAll(((Input) mciList.next()).getNameList());
} }
} }

View File

@ -30,7 +30,7 @@ import org.apache.tools.ant.types.Commandline;
GenCRC32SectionTask is to call GenCRC32Section.exe to generate crc32 section. GenCRC32SectionTask is to call GenCRC32Section.exe to generate crc32 section.
**/ **/
public class GenCRC32SectionTask extends Task implements EfiDefine{ public class GenCRC32SectionTask extends Task implements EfiDefine {
/// ///
/// output file /// output file
/// ///
@ -38,7 +38,7 @@ public class GenCRC32SectionTask extends Task implements EfiDefine{
/// ///
/// inputFile list /// inputFile list
/// ///
private List<Object> inputFileList = new ArrayList<Object>(); private List<NestElement> inputFileList = new ArrayList<NestElement>();
/// ///
/// Project /// Project
@ -69,7 +69,11 @@ public class GenCRC32SectionTask extends Task implements EfiDefine{
// //
// string line of input files // string line of input files
// //
String inputFiles = list2Str(inputFileList, ""); String inputFiles = " -i ";
for (int i = 0; i < inputFileList.size(); ++i) {
inputFiles += inputFileList.get(i).toString(" ");
}
// //
// assemble argument // assemble argument
// //
@ -133,47 +137,5 @@ public class GenCRC32SectionTask extends Task implements EfiDefine{
*/ */
public void setOutputFile(String outputFile) { public void setOutputFile(String outputFile) {
this.outputFile = " -o " + outputFile; this.outputFile = " -o " + outputFile;
}; }
/**
* transfer List to String
* @param list : nested element list
* @param tag : interval tag of parameter
* @return string line of parameters
*/
private String list2Str(List list, String tag) {
/*
* string line for return
*/
String paraStr = " -i";
/*
* nested element in list
*/
NestElement element;
/*
* iterator of nested element list
*/
Iterator elementIter = list.iterator();
/*
* string parameter list
*/
List<Object> strList = new ArrayList<Object>();
while (elementIter.hasNext()) {
element = (NestElement) elementIter.next();
if (null != element.getFile()) {
FileParser.loadFile(project, strList, element.getFile(), tag);
} else {
paraStr = paraStr + element.getName();
}
}
/*
* iterator of string parameter list
*/
Iterator strIter = strList.iterator();
while (strIter.hasNext()) {
paraStr = paraStr + " " + strIter.next();
}
return paraStr;
}
} }

View File

@ -14,110 +14,13 @@ WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
package org.tianocore.framework.tasks; package org.tianocore.framework.tasks;
import java.io.File; /**
import java.util.ArrayList; IncludePath class is generally used to pass arguments with "-i" before each
import java.util.List; of them.
import java.util.StringTokenizer; **/
public class IncludePath extends NestElement {
public class IncludePath implements NestElement {
/**
IncludePath nested element Class
class member
-name : name of include path
-file : name of file including include path
**/
private String path = "";
private File file;
private List<String> nameList = new ArrayList<String>();
/**
get class member "file"
@returns The File object
**/
public File getFile() {
return this.file;
}
/**
set class member "file"
@param file The name of include path
**/
public void setFile(File file) {
this.file = file;
}
/**
get class member "file"
@returns The name of include path
**/
public String getPath() {
return this.path;
}
/**
get class member "name"
@returns The name of include path
**/
public String getName() {
return this.path;
}
/**
set class member "name"
@param name The name of include path
**/
public void setName(String name){
this.path = " -I " + name;
}
/**
set class member "path"
@param name name of file including include paths
**/
public void setPath(String name) {
this.path = " -I " + name;
}
/**
override Object.toString()
@returns name of file including include paths
**/
public String toString() { public String toString() {
return getPath(); return super.toString(" -i ");
}
/**
set class member "list"
@param fileNameList name list of include paths, sperated by space, tab,
comma or semi-comma
**/
public void setList(String fileNameList) {
if (fileNameList != null && fileNameList.length() > 0) {
StringTokenizer tokens = new StringTokenizer(fileNameList, " \t,;", false);
while (tokens.hasMoreTokens()) {
String fileName = tokens.nextToken().trim();
if (fileName.length() > 0) {
this.nameList.add(fileName);
}
}
}
}
/**
get class member "list"
@returns The include paths list.
**/
public List<String> getList() {
return nameList;
} }
} }

View File

@ -15,30 +15,10 @@ package org.tianocore.framework.tasks;
/** /**
Input class is defined to be as nested elements of other elements, to specify Input class is defined to be as nested elements of other elements, to specify
the path of file(s) the path of file(s).
**/ **/
public class Input { public class Input extends NestElement {
private String filePath; public String toString() {
return super.toString(" -f ");
public Input() {
}
/**
Standard set method of ANT task, for "file" attribute
@param path The path of a file
**/
public void setFile(String path) {
filePath = path;
}
/**
Standard get method of ANT task, for "file" attribute
@returns The path of current specified file.
**/
public String getFile() {
return filePath;
} }
} }

View File

@ -13,83 +13,12 @@ WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
**/ **/
package org.tianocore.framework.tasks; package org.tianocore.framework.tasks;
import java.io.File; /**
import java.util.ArrayList; InputFile is always used to pass arguments separated by space
import java.util.List; **/
import java.util.StringTokenizer; public class InputFile extends NestElement {
public class InputFile implements NestElement {
/**
InputFile nested element Class
class member
-name : name of input file
-file : name of file including input files
**/
private String name = "";
private File file;
private List<String> nameList = new ArrayList<String>();
/**
get class member "name"
@returns name parameter
**/
public String getName() {
return this.name;
}
/**
set class member "name"
@param name name of input file
**/
public void setName(String name) {
this.name = " " + name;
}
public String toString() { public String toString() {
return getName(); return super.toString(" ");
}
/**
get class member "file"
@returns file parameter
**/
public File getFile() {
return this.file;
}
/**
set class member "file"
@param ext name of file including input files
**/
public void setFile(File file) {
this.file = file;
}
/**
set class member "list"
@param fileNameList name list of include paths, sperated by space, tab,
comma or semi-comma
**/
public void setList(String fileNameList) {
if (fileNameList != null && fileNameList.length() > 0) {
StringTokenizer tokens = new StringTokenizer(fileNameList, " \t,;", false);
while (tokens.hasMoreTokens()) {
String fileName = tokens.nextToken().trim();
if (fileName.length() > 0) {
this.nameList.add(fileName);
}
}
}
}
/**
get class member "list"
@returns The include paths list.
**/
public List<String> getList() {
return nameList;
} }
} }

View File

@ -45,7 +45,6 @@ public class MakeDeps extends Task {
// private members, use set/get to access them // private members, use set/get to access them
// //
private static final String cmdName = "MakeDeps"; private static final String cmdName = "MakeDeps";
private String includePath = null;
private String depsFile = null; private String depsFile = null;
private String subDir = null; private String subDir = null;
private boolean quietMode = true; private boolean quietMode = true;
@ -84,12 +83,12 @@ public class MakeDeps extends Task {
/// compose full tool path /// compose full tool path
/// ///
if (toolPath == null || toolPath.length() == 0) { if (toolPath == null || toolPath.length() == 0) {
toolPath = "./" + cmdName; toolPath = cmdName;
} else { } else {
if (toolPath.endsWith("/") || toolPath.endsWith("\\")) { if (toolPath.endsWith("/") || toolPath.endsWith("\\")) {
toolPath = toolPath + cmdName; toolPath = toolPath + cmdName;
} else { } else {
toolPath = toolPath + "/" + cmdName; toolPath = toolPath + File.separator + cmdName;
} }
} }
@ -98,10 +97,10 @@ public class MakeDeps extends Task {
/// ///
StringBuffer args = new StringBuffer(4096); StringBuffer args = new StringBuffer(4096);
if (ignoreError) { if (ignoreError) {
args.append(" -ignorenotfound"); args.append(" -ignorenotfound ");
} }
if (quietMode) { if (quietMode) {
args.append(" -q"); args.append(" -q ");
} }
if (subDir != null && subDir.length() > 0) { if (subDir != null && subDir.length() > 0) {
args.append(" -s "); args.append(" -s ");
@ -118,43 +117,20 @@ public class MakeDeps extends Task {
/// ///
/// compose source file arguments /// compose source file arguments
/// ///
Iterator iterator = inputFileList.iterator(); for (int i = 0, listLength = inputFileList.size(); i < listLength; ++i) {
while (iterator.hasNext()) { args.append(inputFileList.get(i).toString());
Input inputFile = (Input)iterator.next();
String inputFileString = cleanupPathName(inputFile.getFile());
args.append(" -f ");
args.append(inputFileString);
} }
/// for (int i = 0, listLength = includePathList.size(); i < listLength; ++i) {
/// compose search pathes argument args.append(includePathList.get(i).toString());
///
StringBuffer includePathArg = new StringBuffer(4096);
if (includePath != null && includePath.length() > 0) {
StringTokenizer pathTokens = new StringTokenizer(includePath, ";");
while (pathTokens.hasMoreTokens()) {
String tmpPath = pathTokens.nextToken().trim();
if (tmpPath.length() == 0) {
continue;
}
includePathArg.append(" -i ");
includePathArg.append(cleanupPathName(tmpPath));
}
} }
iterator = includePathList.iterator();
while (iterator.hasNext()) {
IncludePath path = (IncludePath)iterator.next();
includePathArg.append(cleanupPathName(path.getPath()));
}
args.append(includePathArg);
/// ///
/// We don't need a real target. So just a "dummy" is given /// We don't need a real target. So just a "dummy" is given
/// ///
args.append(" -target dummy"); args.append(" -target dummy");
args.append(" -o "); args.append(" -o ");
args.append(cleanupPathName(depsFile)); args.append(depsFile);
/// ///
/// prepare to execute the tool /// prepare to execute the tool
@ -180,7 +156,7 @@ public class MakeDeps extends Task {
if (result != 0) { if (result != 0) {
EdkLog.log(EdkLog.EDK_INFO, "MakeDeps failed!"); EdkLog.log(EdkLog.EDK_INFO, "MakeDeps failed!");
return; throw new BuildException("MakeDeps: failed to generate dependency file!");
} }
} }
@ -255,7 +231,7 @@ public class MakeDeps extends Task {
@param dir The name of sub-directory in which source files will be scanned @param dir The name of sub-directory in which source files will be scanned
**/ **/
public void setSubDir(String dir) { public void setSubDir(String dir) {
subDir = dir; subDir = cleanupPathName(dir);
} }
/** /**
@ -267,31 +243,13 @@ public class MakeDeps extends Task {
return subDir; return subDir;
} }
/**
Set method for "IncludePath" attribute
@param path The name of include path
**/
public void setIncludePath(String path) {
includePath = cleanupPathName(path);
}
/**
Get method for "IncludePath" attribute
@returns The name of include path
**/
public String getIncludePath() {
return includePath;
}
/** /**
Set method for "ExtraDeps" attribute Set method for "ExtraDeps" attribute
@param deps The name of dependency file specified separately @param deps The name of dependency file specified separately
**/ **/
public void setExtraDeps(String deps) { public void setExtraDeps(String deps) {
extraDeps = deps; extraDeps = cleanupPathName(deps);
} }
/** /**
@ -333,26 +291,29 @@ public class MakeDeps extends Task {
return false; return false;
} }
/// //
/// If the source file(s) is newer than dependency list file, we need to // If the source file(s) is newer than dependency list file, we need to
/// re-generate the dependency list file // re-generate the dependency list file
/// //
long depsFileTimeStamp = df.lastModified(); long depsFileTimeStamp = df.lastModified();
Iterator iterator = inputFileList.iterator(); Iterator<Input> iterator = (Iterator<Input>)inputFileList.iterator();
while (iterator.hasNext()) { while (iterator.hasNext()) {
Input inputFile = (Input)iterator.next(); Input inputFile = iterator.next();
File sf = new File(inputFile.getFile()); List<String> fileList = inputFile.getNameList();
if (sf.lastModified() > depsFileTimeStamp) { for (int i = 0, length = fileList.size(); i < length; ++i) {
return false; File sf = new File(fileList.get(i));
if (sf.lastModified() > depsFileTimeStamp) {
return false;
}
} }
} }
/// //
/// If the source files haven't been changed since last time the dependency // If the source files haven't been changed since last time the dependency
/// list file was generated, we need to check each file in the file list to // list file was generated, we need to check each file in the file list to
/// see if any of them is changed or not. If anyone of them is newer than // see if any of them is changed or not. If anyone of them is newer than
/// the dependency list file, MakeDeps.exe is needed to run again. // the dependency list file, MakeDeps.exe is needed to run again.
/// //
LineNumberReader lineReader = null; LineNumberReader lineReader = null;
FileReader fileReader = null; FileReader fileReader = null;
boolean ret = true; boolean ret = true;

View File

@ -15,26 +15,255 @@ package org.tianocore.framework.tasks;
import java.io.File; import java.io.File;
import java.util.List; import java.util.List;
import java.util.ArrayList;
import java.io.FileReader;
import java.io.BufferedReader;
import java.util.StringTokenizer;
import org.apache.tools.ant.types.DataType;
import org.apache.tools.ant.types.Path;
import org.apache.tools.ant.BuildException;
/** /**
Interface NestElement is just to define common interfaces for nested element Interface NestElement is to define common interfaces for nested element
**/ **/
public interface NestElement { public class NestElement extends DataType {
//
// The name list. All the name strings got from setXXX methods will be put
// in here.
//
private List<String> nameList = new ArrayList<String>();
/** /**
nested element Interface for up-casting Handle "name" attribute. No delimiter and special treatment are assumed.
@param name A single string value of "name" attribute
**/ **/
public void setName(String name) {
public String getName(); if (name.length() > 0) {
nameList.add(name);
}
}
public void setName(String name); /**
Handle "list" attribute. The value of "list" is assumed as string
separated by space, tab, comma or semmicolon.
public String toString(); @param nameList The value of "list" separated by " \t,;"
**/
public void setList(String nameList) {
if (nameList.length() == 0) {
return;
}
public File getFile(); StringTokenizer tokens = new StringTokenizer(nameList, " \t,;", false);
while (tokens.hasMoreTokens()) {
String name = tokens.nextToken().trim();
if (name.length() > 0) {
this.nameList.add(name);
}
}
}
public void setFile(File file); /**
Handle "ListFile" attribute. The value of "ListFile" should be the path of
a file which contains name strings, one name per line.
public void setList(String fileNameList); @param listFileName The file path
**/
public void setListFile(String listFileName) {
FileReader fileReader = null;
BufferedReader in = null;
String str;
public List<String> getList(); //
// Check if the file exists or not
//
File file = new File(listFileName);
if (!file.exists()) {
throw new BuildException("The file, " + file + " does not exist!");
}
try {
fileReader = new FileReader(file);
in = new BufferedReader(fileReader);
//
// Read line by line
//
while((str = in.readLine()) != null){
str = str.trim();
if (str.length() == 0){
continue;
}
//getProject().replaceProperties(str);
nameList.add(str);
}
} catch (Exception e){
throw new BuildException(e.getMessage());
} finally {
try {
//
// close the file
//
if (in != null) {
in.close();
}
if (fileReader != null) {
fileReader.close();
}
} catch (Exception e) {
throw new BuildException(e.getMessage());
}
}
}
/**
Handle "file" attribute. The value of "file" should be a path.
@param file The path name of a file
**/
public void setFile(String file) {
setPath(file);
}
/**
Handle "path" attribute. The value of "path" may contain compound path
separator (/ or \) which should be cleaned up. Because the "path" string
will always be passed to external native program which may not handle
non-native path separator, the clean-up action is a must. And the value
of "path" may contains several path separated by space, tab, comma or
semmicolon. We need to split it and put each part in nameList.
@param path String value of a file system path
**/
public void setPath(String path) {
if (path.length() == 0) {
return;
}
//
// split the value of "path" into separated single path
//
StringTokenizer tokens = new StringTokenizer(path, " \t,;", false);
while (tokens.hasMoreTokens()) {
String pathName = tokens.nextToken().trim();
if (pathName.length() > 0) {
//
// Make clean the path string before storing it
//
this.nameList.add(cleanupPath(pathName));
}
}
}
/**
Handle "FileName" attribute. The value of "FileName" should be the path
of a file which contains path strings, one path per line.
@param pathFileName
**/
public void setPathFile(String pathFileName) {
FileReader fileReader = null;
BufferedReader in = null;
String path;
//
// Check if the file exists or not
//
File file = new File(pathFileName);
if (!file.exists()) {
throw new BuildException("The file, " + file + " does not exist!");
}
try {
fileReader = new FileReader(file);
in = new BufferedReader(fileReader);
//
// Read the file line by line, skipping empty ones
//
while((path = in.readLine()) != null){
path = path.trim();
if (path.length() == 0){
continue;
}
//getProject().replaceProperties(path);
//
// Make clean the path string before storing it.
//
nameList.add(cleanupPath(path));
}
} catch (Exception e){
throw new BuildException(e.getMessage());
} finally {
try {
//
// close the file
//
if (in != null) {
in.close();
}
if (fileReader != null) {
fileReader.close();
}
} catch (Exception e) {
throw new BuildException(e.getMessage());
}
}
}
/**
Return the name list.
@return List<String> The list contains the name(path) strings
**/
public List<String> getNameList() {
return nameList;
}
/**
Compose and return the the name/path string without any delimiter. The trick
here is that it's actually used to return the value of nameList which
has just one name/string.
@return String
**/
public String toString() {
return toString("");
}
/**
Compose and return the name/path string concatenated by leading "prefix".
@param prefix The string will be put before each name/string in nameList
@return String The string concatenated with "prefix"
**/
public String toString(String prefix) {
StringBuffer string = new StringBuffer(1024);
int length = nameList.size();
for (int i = 0; i < length; ++i) {
string.append(prefix);
string.append(nameList.get(i));
}
return string.toString();
}
//
// Remove any duplicated path separator or inconsistent path separator
//
private String cleanupPath(String path) {
String separator = "\\" + File.separator;
String duplicateSeparator = separator + "{2}";
path = Path.translateFile(path);
path = path.replaceAll(duplicateSeparator, separator);
return path;
}
} }

View File

@ -13,71 +13,12 @@ WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
**/ **/
package org.tianocore.framework.tasks; package org.tianocore.framework.tasks;
import java.io.File;
import java.util.ArrayList;
import java.util.List;
import java.util.StringTokenizer;
/** /**
SkipExt nested element Class SkipExt nested element Class
class member
-name : extension name of skiped file
-file : name of file including ext
**/ **/
public class SkipExt implements NestElement { public class SkipExt extends NestElement {
private String name = "";
private File file;
private List<String> nameList = new ArrayList<String>();
/**
get class member "name"
@returns name parameter
**/
public String getName() {
return this.name;
}
/**
set class member "name"
@param name extension name of skiped file
**/
public void setName(String name) {
this.name = " -skipext " + name;
}
public String toString() { public String toString() {
return getName(); return super.toString(" -skipext ");
} }
/**
get class member "file"
@returns file parameter
**/
public File getFile() {
return this.file;
}
/**
set class member "file"
@param name of file including ext
**/
public void setFile(File file) {
this.file = file;
}
public void setList(String fileNameList) {
if (fileNameList != null && fileNameList.length() > 0) {
StringTokenizer tokens = new StringTokenizer(fileNameList, " \t,;", false);
while (tokens.hasMoreTokens()) {
String fileName = tokens.nextToken().trim();
if (fileName.length() > 0) {
this.nameList.add(fileName);
}
}
}
}
public List<String> getList() {
return nameList;
}
} }

View File

@ -13,10 +13,12 @@ WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
**/ **/
package org.tianocore.framework.tasks; package org.tianocore.framework.tasks;
import java.io.File;
import java.util.*; import java.util.*;
import org.apache.tools.ant.BuildException;
import org.apache.tools.ant.Project; import org.apache.tools.ant.Project;
import org.apache.tools.ant.Task; import org.apache.tools.ant.Task;
import org.apache.tools.ant.BuildException;
import org.apache.tools.ant.taskdefs.Execute; import org.apache.tools.ant.taskdefs.Execute;
import org.apache.tools.ant.taskdefs.LogStreamHandler; import org.apache.tools.ant.taskdefs.LogStreamHandler;
import org.apache.tools.ant.types.Commandline; import org.apache.tools.ant.types.Commandline;
@ -57,9 +59,9 @@ public class StrGatherTask extends Task implements EfiDefine {
private String outputDatabase = ""; private String outputDatabase = "";
private List<Object> databaseList = new ArrayList<Object>(); private List<Database> databaseList = new ArrayList<Database>();
private List<Object> inputFileList = new ArrayList<Object>(); private List<InputFile> inputFileList = new ArrayList<InputFile>();
/// ///
/// parse options newDatabase -- "ture/false" unquoteString -- "ture/false" /// parse options newDatabase -- "ture/false" unquoteString -- "ture/false"
@ -68,14 +70,14 @@ public class StrGatherTask extends Task implements EfiDefine {
private String unquotedString = ""; private String unquotedString = "";
private List<Object> includePathList = new ArrayList<Object>(); private List<IncludePath> includePathList = new ArrayList<IncludePath>();
/// ///
/// scan options ignoreNotFound -- "ture/false" /// scan options ignoreNotFound -- "ture/false"
/// ///
private String ignoreNotFound = ""; private String ignoreNotFound = "";
private List<Object> skipExtList = new ArrayList<Object>(); private List<SkipExt> skipExtList = new ArrayList<SkipExt>();
/// ///
/// dump options /// dump options
@ -113,16 +115,16 @@ public class StrGatherTask extends Task implements EfiDefine {
if (path == null) { if (path == null) {
command = "StrGather"; command = "StrGather";
} else { } else {
command = path + "/" + "StrGather"; command = path + File.separator + "StrGather";
} }
/// ///
/// transfer nested elements into string /// transfer nested elements into string
/// ///
String databases = list2Str(databaseList, "-db"); String databases = list2Str(databaseList);
String skipExts = list2Str(skipExtList, "-skipext"); String skipExts = list2Str(skipExtList);
String includePaths = list2Str(includePathList, "-I"); String includePaths = list2Str(includePathList);
String inputFiles = list2Str(inputFileList, ""); String inputFiles = list2Str(inputFileList);
/// ///
/// assemble argument /// assemble argument
@ -461,63 +463,20 @@ public class StrGatherTask extends Task implements EfiDefine {
} }
/** /**
transfer List to String Compose the content in each NestElement into a single string.
@param list nested element list
@param tag interval tag of parameter
@returns string line of parameters @param list The NestElement list
@return String
**/ **/
private String list2Str(List list, String tag) { private String list2Str(List list) {
/// int listLength = list.size();
/// string line for return String str = "";
/// for (int i = 0; i < listLength; ++i) {
String paraStr = ""; NestElement e = (NestElement)list.get(i);
/// str += e.toString();
/// nested element in list
///
NestElement element;
///
/// iterator of nested element list
///
Iterator elementIter = list.iterator();
///
/// string parameter list
///
List<Object> strList = new ArrayList<Object>();
while (elementIter.hasNext()) {
element = (NestElement) elementIter.next();
if (null != element.getFile()) {
///
/// nested element include file
///
FileParser.loadFile(project, strList, element.getFile(), tag);
}
if (element.getName().length() > 0) {
///
/// nested element include name
///
paraStr = paraStr + " " + element.getName();
}
List<String> nameList = element.getList();
if (nameList.size() > 0) {
Iterator nameIter = nameList.iterator();
while (nameIter.hasNext()) {
paraStr = paraStr + " " + tag + " " + (String)nameIter.next();
}
}
} }
///
/// iterator of string parameter list return str;
///
Iterator strIter = strList.iterator();
while (strIter.hasNext()) {
paraStr = paraStr + " " + strIter.next();
}
return paraStr;
} }
} }

View File

@ -31,7 +31,7 @@ public class Tool implements EfiDefine, Section {
String toolName = ""; String toolName = "";
List<Object> toolArgList = new ArrayList<Object>(); List<Object> toolArgList = new ArrayList<Object>();
String outputPath; String outputPath;
String outPutFileName ; File outputFile ;
List<Input> inputFiles = new ArrayList<Input>(); List<Input> inputFiles = new ArrayList<Input>();
/** /**
@ -40,9 +40,6 @@ public class Tool implements EfiDefine, Section {
@param buffer The buffer to put the result with alignment @param buffer The buffer to put the result with alignment
**/ **/
public void toBuffer (DataOutputStream buffer){ public void toBuffer (DataOutputStream buffer){
File OutputFile;
byte data;
/// ///
/// call extern tool /// call extern tool
/// ///
@ -55,25 +52,25 @@ public class Tool implements EfiDefine, Section {
/// ///
/// check if file exist /// check if file exist
/// ///
OutputFile = new File (this.outPutFileName); //File OutputFile = new File (this.outPutFileName);
long fileLen = OutputFile.length(); if (!outputFile.exists()) {
if (!OutputFile.exists()) { throw new BuildException("The file " + outputFile.getPath() + " does not exist!\n");
throw new BuildException("The file " + outPutFileName + " does not exist!\n");
} }
/// ///
/// Read output file and write it's cotains to buffer /// Read output file and write it's cotains to buffer
/// ///
FileInputStream fs = null;
DataInputStream in = null;
try { try {
FileInputStream fs = new FileInputStream (this.outPutFileName); fs = new FileInputStream (outputFile);
DataInputStream In = new DataInputStream (fs); in = new DataInputStream (fs);
int i = 0;
while (i < fileLen) { int fileLen = (int)outputFile.length();
data = In.readByte(); byte[] data = new byte[fileLen];
buffer.writeByte(data); in.read(data);
i ++; buffer.write(data, 0, fileLen);
}
/// ///
/// 4 byte alignment /// 4 byte alignment
@ -82,11 +79,20 @@ public class Tool implements EfiDefine, Section {
fileLen++; fileLen++;
buffer.writeByte(0); buffer.writeByte(0);
} }
In.close();
} catch (Exception e) { } catch (Exception e) {
System.out.print(e.getMessage()); System.out.print(e.getMessage());
throw new BuildException("Tool call, toBuffer failed!\n"); throw new BuildException("Tool call, toBuffer failed!\n");
} finally {
try {
if (in != null) {
in.close();
}
if (fs != null) {
fs.close();
}
} catch (Exception e) {
System.out.println("WARNING: Cannot close " + outputFile.getPath());
}
} }
} }
@ -114,16 +120,15 @@ public class Tool implements EfiDefine, Section {
/// ///
/// input files for tools /// input files for tools
/// ///
argument = argument + "-i "; argument += " -i ";
while (inputIter.hasNext()) { while (inputIter.hasNext()) {
file = (Input)inputIter.next(); file = (Input)inputIter.next();
argument = argument + file.getFile() + " "; argument += file.toString(" ");
} }
outPutFileName = outputPath + File.separatorChar + (new File(file.getFile())).getName() + ".crc";
argument = argument + " -o " + outPutFileName;
try { try {
outputFile = File.createTempFile("temp", ".crc", new File(outputPath));
argument = argument + " -o " + outputFile.getPath();
/// ///
/// execute command line /// execute command line

View File

@ -44,7 +44,7 @@ public class VfrCompilerTask extends Task implements EfiDefine {
private String vfrFile = ""; private String vfrFile = "";
private String vfrFileName = ""; private String vfrFileName = "";
private List<Object> includepathList = new ArrayList<Object>(); private List<IncludePath> includepathList = new ArrayList<IncludePath>();
/** /**
get class member of createList file get class member of createList file
@ -170,21 +170,11 @@ public class VfrCompilerTask extends Task implements EfiDefine {
List<Object> includePath = new ArrayList<Object>(); List<Object> includePath = new ArrayList<Object>();
String incPath = ""; String incPath = "";
int count = includepathList.size(); int count = includepathList.size();
IncludePath path;
for (int i = 0; i < count; i++) { for (int i = 0; i < count; i++) {
path = (IncludePath) includepathList.get(i); incPath += includepathList.get(i).toString();
if (path.getFile() != null) {
FileParser.loadFile( project,includePath,path.getFile(), "-I");
}
}
for (int i = 0; i < count; i++) {
incPath = incPath + " " + includepathList.get(i);
}
count = includePath.size();
for (int i = 0; i < count; i++) {
incPath = incPath + " " + includePath.get(i);
} }
String argument = this.createIfrBinFile + String argument = this.createIfrBinFile +
this.processerArg + this.processerArg +
incPath + incPath +