2 This file is to define an ANT task which wraps StrGather.exe tool.
4 Copyright (c) 2006, Intel Corporation
5 All rights reserved. This program and the accompanying materials
6 are licensed and made available under the terms and conditions of the BSD License
7 which accompanies this distribution. The full text of the license may be found at
8 http://opensource.org/licenses/bsd-license.php
10 THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
11 WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
14 package org
.tianocore
.framework
.tasks
;
17 import org
.apache
.tools
.ant
.Project
;
18 import org
.apache
.tools
.ant
.Task
;
19 import org
.apache
.tools
.ant
.BuildException
;
20 import org
.apache
.tools
.ant
.taskdefs
.Execute
;
21 import org
.apache
.tools
.ant
.taskdefs
.LogStreamHandler
;
22 import org
.apache
.tools
.ant
.types
.Commandline
;
27 -commandType : command type [parse/scan/dump]
28 -baseName : base name of component
29 -verbose : level of verbose [all/read/write]
30 -outputDatabase : file name of output database file
31 -databaseList : file name list of database files
32 -inputFileList : file name list of input files
33 -newDatabase : whether to need new database [ture/false]
34 -unquotedString : whether to unquoted strings are used [ture/false]
35 -includePathList: path list of include paths
36 -ignoreNotFound : whether to ignore a given STRING_TOKEN(STR) is not found in database [ture/false]
37 -skipExtList : skip scan of files with extension name
38 -outputString : write string data to filename
39 -outputDefines : write string defines to filename
40 -outputUnicode : dump database to unicode file filename
41 -lang : only dump for the language
42 -indirectionFile: specify an indirection file
43 -outputHpk : create an HII export pack of the strings
45 public class StrGatherTask
extends Task
implements EfiDefine
{
49 private String commandType
= "";
51 private String baseName
= "";
56 private String verbose
= "";
58 private String outputDatabase
= "";
60 private List
<Object
> databaseList
= new ArrayList
<Object
>();
62 private List
<Object
> inputFileList
= new ArrayList
<Object
>();
65 /// parse options newDatabase -- "ture/false" unquoteString -- "ture/false"
67 private String newDatabase
= "";
69 private String unquotedString
= "";
71 private List
<Object
> includePathList
= new ArrayList
<Object
>();
74 /// scan options ignoreNotFound -- "ture/false"
76 private String ignoreNotFound
= "";
78 private List
<Object
> skipExtList
= new ArrayList
<Object
>();
83 private String outputString
= "";
85 private String outputDefines
= "";
87 private String outputUnicode
= "";
89 private String lang
= "";
91 private String indirectionFile
= "";
93 private String outputHpk
= "";
98 static private Project project
;
101 assemble tool command line & execute tool command line
103 @throws BuildException
105 public void execute() throws BuildException
{
107 project
= this.getOwningTarget().getProject();
109 /// absolute path of efi tools
111 String path
= project
.getProperty("env.FRAMEWORK_TOOLS_PATH");
114 command
= "StrGather";
116 command
= path
+ "/" + "StrGather";
120 /// transfer nested elements into string
122 String databases
= list2Str(databaseList
, "-db");
123 String skipExts
= list2Str(skipExtList
, "-skipext");
124 String includePaths
= list2Str(includePathList
, "-I");
125 String inputFiles
= list2Str(inputFileList
, "");
128 /// assemble argument
130 String argument
= commandType
+ verbose
+ databases
+ baseName
131 + outputDatabase
+ includePaths
+ newDatabase
+ unquotedString
132 + skipExts
+ ignoreNotFound
+ outputString
+ outputDefines
133 + outputUnicode
+ lang
+ indirectionFile
+ outputHpk
136 /// return value of fwimage execution
141 Commandline cmdline
= new Commandline();
142 cmdline
.setExecutable(command
);
143 cmdline
.createArgument().setLine(argument
);
145 LogStreamHandler streamHandler
= new LogStreamHandler(this,
146 Project
.MSG_INFO
, Project
.MSG_WARN
);
147 Execute runner
= new Execute(streamHandler
, null);
149 runner
.setAntRun(project
);
150 runner
.setCommandline(cmdline
.getCommandline());
152 log(Commandline
.toString(cmdline
.getCommandline()), Project
.MSG_VERBOSE
);
153 log(this.commandType
.substring(2));
154 revl
= runner
.execute();
155 if (EFI_SUCCESS
== revl
) {
156 log("StrGather succeeded!", Project
.MSG_VERBOSE
);
159 /// command execution fail
161 log("ERROR = " + Integer
.toHexString(revl
));
162 throw new BuildException("StrGather failed!");
164 } catch (Exception e
) {
165 throw new BuildException(e
.getMessage());
170 get class member "commandType"
172 @returns commandType parameter
174 public String
getCommandType() {
175 return this.commandType
;
181 @param commandType type of strgather command [parse/scan/dump]
183 public void setCommandType(String commandType
) {
184 this.commandType
= " -" + commandType
;
188 get class member "verbose"
190 @returns verbose parameter
192 public String
getVerbose() {
197 set class member "verbose"
199 @param verbose verbose level [all/read/write]
201 public void setVerbose(String verbose
) {
202 if (verbose
.equals("all")) {
204 /// for verbose output
206 this.verbose
= " -v ";
207 } else if (verbose
.equals("read")) {
209 /// for verbose output when reading database
211 this.verbose
= " -vdbr ";
212 } else if (verbose
.equals("write")) {
214 /// for verbose output when writing database
216 this.verbose
= " -vdbw ";
221 get class member baseName
223 @returns baseName parameter
225 public String
getBaseName() {
226 return this.baseName
;
230 set class member baseName
232 @param baseName name of the output files of .c and .h
234 public void setBaseName(String baseName
) {
235 this.baseName
= " -bn " + baseName
;
239 get class member "outputDatabase"
241 @returns outputDatabase parameter
243 public String
getOutputDatabase() {
244 return this.outputDatabase
;
248 set class member "outputDatabase"
250 @param outputDatabase filename of output database file
252 public void setOutputDatabase(String outputDatabase
) {
253 this.outputDatabase
= " -od " + outputDatabase
;
257 get class member "newDatabase"
259 @returns newDatabase parameter
261 public String
getNewDatabse() {
262 return this.newDatabase
;
266 set class member "newDatabase"
268 @param newDatabase whether to not read in existing database file
270 public void setNewDatabase(String newDatabase
) {
271 if (newDatabase
.equals("true")) {
272 this.newDatabase
= " -newdb ";
277 get class member "unquotedString"
279 @returns unquotedString parameter
281 public String
getUnquotedString() {
282 return this.unquotedString
;
286 set class member "unquotedString"
288 @param unquotedString :
289 whether to indicate that unquoted strings are used
291 public void setUnquotedString(String unquotedString
) {
292 if (unquotedString
.equals("true")) {
293 this.unquotedString
= " -uqs ";
298 get class member "ignoreNotFound"
300 @returns ignoreNotFound parameter
302 public String
getIgnoreNotFound() {
303 return this.ignoreNotFound
;
307 set class member "ignoreNotFound"
309 @param ignoreNotFound whether to ignore if a given STRING_TOKEN(STR)
310 is not found in the database
312 public void setIgnoreNotFound(String ignoreNotFound
) {
313 if (ignoreNotFound
.equals("true")) {
314 this.ignoreNotFound
= " -ignorenotfound ";
319 get class member "outputString"
321 @returns outputString parameter
323 public String
getOutputString() {
324 return this.outputString
;
328 set class member "outputString"
330 @param outputString filename of string data file
332 public void setOutputString(String outputString
) {
333 this.outputString
= " -oc " + outputString
;
337 get class member "outputDefines"
339 @returns outputDefines parameter
341 public String
getOutputDefines() {
342 return this.outputDefines
;
346 set class member "outputDefines"
348 @param outputDefines filename of string defines file
350 public void setOutputDefines(String outputDefines
) {
351 this.outputDefines
= " -oh " + outputDefines
;
355 get class member "outputUnicode"
357 @returns outputUnicode parameter
359 public String
getOutputUnicode() {
360 return this.outputUnicode
;
364 set class member "outputUnicode"
366 @param outputUnicode filename of unicode file to be dumped database
368 public void setOutputUnicode(String outputUnicode
) {
369 this.outputUnicode
= " -ou " + outputUnicode
;
373 get class member "lang"
375 @returns lang parameter
377 public String
getLang() {
382 set class member "lang"
384 @param lang language of dump
386 public void setLang(String lang
) {
387 this.lang
= " -lang " + lang
;
391 get class member "indirectionFile"
393 @returns indirectionFile parameter
395 public String
getIndirectionFile() {
396 return this.indirectionFile
;
400 set class member "indirectionFile"
402 @param indirectionFile filename of indirection file
404 public void setIndirectionFile(String indirectionFile
) {
405 this.indirectionFile
= " -if " + indirectionFile
;
409 get class member "outputHpk"
411 @returns outputHpk parameter
413 public String
getOutputHpk() {
414 return this.outputHpk
;
418 set class member "outputHpk"
420 @param outputHpk filename of output HII export pack of the strings
422 public void setOutputHpk(String outputHpk
) {
423 this.outputHpk
= " -hpk " + outputHpk
;
427 add a skipExt element into list
429 @param skipExt skipExt element
431 public void addSkipext(SkipExt skipExt
) {
432 skipExtList
.add(skipExt
);
436 add a includePath element into list
438 @param includePath includePath element
440 public void addIncludepath(IncludePath includePath
) {
441 includePathList
.add(includePath
);
445 add a inputFile element into list
447 @param inputFile inputFile element
449 public void addInputfile(InputFile inputFile
) {
450 inputFileList
.add(inputFile
);
454 add a database element into list
459 public void addDatabase(Database database
) {
460 databaseList
.add(database
);
464 transfer List to String
466 @param list nested element list
467 @param tag interval tag of parameter
469 @returns string line of parameters
471 private String
list2Str(List list
, String tag
) {
473 /// string line for return
477 /// nested element in list
481 /// iterator of nested element list
483 Iterator elementIter
= list
.iterator();
485 /// string parameter list
487 List
<Object
> strList
= new ArrayList
<Object
>();
489 while (elementIter
.hasNext()) {
490 element
= (NestElement
) elementIter
.next();
491 if (null != element
.getFile()) {
493 /// nested element include file
495 FileParser
.loadFile(project
, strList
, element
.getFile(), tag
);
498 if (element
.getName().length() > 0) {
500 /// nested element include name
502 paraStr
= paraStr
+ " " + element
.getName();
505 List
<String
> nameList
= element
.getList();
506 if (nameList
.size() > 0) {
507 Iterator nameIter
= nameList
.iterator();
508 while (nameIter
.hasNext()) {
509 paraStr
= paraStr
+ " " + tag
+ " " + (String
)nameIter
.next();
514 /// iterator of string parameter list
516 Iterator strIter
= strList
.iterator();
517 while (strIter
.hasNext()) {
518 paraStr
= paraStr
+ " " + strIter
.next();