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
.BuildException
;
18 import org
.apache
.tools
.ant
.Project
;
19 import org
.apache
.tools
.ant
.Task
;
20 import org
.apache
.tools
.ant
.taskdefs
.Execute
;
21 import org
.apache
.tools
.ant
.taskdefs
.LogStreamHandler
;
22 import org
.apache
.tools
.ant
.types
.Commandline
;
23 import org
.tianocore
.common
.logger
.EdkLog
;
28 -commandType : command type [parse/scan/dump]
29 -baseName : base name of component
30 -verbose : level of verbose [all/read/write]
31 -outputDatabase : file name of output database file
32 -databaseList : file name list of database files
33 -inputFileList : file name list of input files
34 -newDatabase : whether to need new database [ture/false]
35 -unquotedString : whether to unquoted strings are used [ture/false]
36 -includePathList: path list of include paths
37 -ignoreNotFound : whether to ignore a given STRING_TOKEN(STR) is not found in database [ture/false]
38 -skipExtList : skip scan of files with extension name
39 -outputString : write string data to filename
40 -outputDefines : write string defines to filename
41 -outputUnicode : dump database to unicode file filename
42 -lang : only dump for the language
43 -indirectionFile: specify an indirection file
44 -outputHpk : create an HII export pack of the strings
46 public class StrGatherTask
extends Task
implements EfiDefine
{
50 private ToolArg commandType
= new ToolArg();
52 private ToolArg baseName
= new ToolArg();
57 private ToolArg verbose
= new ToolArg();
59 private FileArg outputDatabase
= new FileArg();
61 private Database databaseList
= new Database();
63 private InputFile inputFileList
= new InputFile();
66 /// parse options newDatabase -- "ture/false" unquoteString -- "ture/false"
68 private ToolArg newDatabase
= new ToolArg();
70 private ToolArg unquotedString
= new ToolArg();
72 private IncludePath includePathList
= new IncludePath();
75 /// scan options ignoreNotFound -- "ture/false"
77 private ToolArg ignoreNotFound
= new ToolArg();
79 private SkipExt skipExtList
= new SkipExt();
84 private ToolArg outputString
= new ToolArg();
86 private ToolArg outputDefines
= new ToolArg();
88 private ToolArg outputUnicode
= new ToolArg();
90 private ToolArg lang
= new ToolArg();
92 private FileArg indirectionFile
= new FileArg();
94 private FileArg outputHpk
= new FileArg();
99 static private Project project
;
102 assemble tool command line & execute tool command line
104 @throws BuildException
106 public void execute() throws BuildException
{
108 project
= this.getOwningTarget().getProject();
110 /// absolute path of efi tools
112 String path
= project
.getProperty("env.FRAMEWORK_TOOLS_PATH");
115 command
= "StrGather";
117 command
= path
+ File
.separator
+ "StrGather";
121 /// assemble argument
123 String argument
= "" + commandType
+ verbose
+ databaseList
+ baseName
124 + outputDatabase
+ includePathList
+ newDatabase
+ unquotedString
125 + skipExtList
+ ignoreNotFound
+ outputString
+ outputDefines
126 + outputUnicode
+ lang
+ indirectionFile
+ outputHpk
129 /// return value of fwimage execution
134 Commandline cmdline
= new Commandline();
135 cmdline
.setExecutable(command
);
136 cmdline
.createArgument().setLine(argument
);
138 LogStreamHandler streamHandler
= new LogStreamHandler(this,
139 Project
.MSG_INFO
, Project
.MSG_WARN
);
140 Execute runner
= new Execute(streamHandler
, null);
142 runner
.setAntRun(project
);
143 runner
.setCommandline(cmdline
.getCommandline());
145 String cmdType
= getCommandType();
146 if (cmdType
.equalsIgnoreCase("parse")) {
147 EdkLog
.log(this, "(parse) " + inputFileList
.toFileList() + " => "
148 + databaseList
.toFileList());
149 } else if (cmdType
.equalsIgnoreCase("scan")) {
150 EdkLog
.log(this, "(scan) " + databaseList
.toFileList() + " => "
151 + outputDatabase
.toFileList());
153 EdkLog
.log(this, "(dump) " + databaseList
.toFileList() + " => "
154 + outputDefines
.toFileList() + outputString
.toFileList() + outputHpk
.toFileList());
156 EdkLog
.log(this, EdkLog
.EDK_VERBOSE
, Commandline
.toString(cmdline
.getCommandline()));
158 revl
= runner
.execute();
159 if (EFI_SUCCESS
== revl
) {
160 EdkLog
.log(this, EdkLog
.EDK_VERBOSE
, "StrGather succeeded!");
163 /// command execution fail
165 EdkLog
.log(this, "ERROR = " + Integer
.toHexString(revl
));
166 throw new BuildException("StrGather failed!");
168 } catch (Exception e
) {
169 throw new BuildException(e
.getMessage());
174 get class member "commandType"
176 @returns commandType parameter
178 public String
getCommandType() {
179 return this.commandType
.getValue();
185 @param commandType type of strgather command [parse/scan/dump]
187 public void setCommandType(String commandType
) {
188 this.commandType
.setArg(" -", commandType
);
192 get class member "verbose"
194 @returns verbose parameter
196 public String
getVerbose() {
197 return this.verbose
.getValue();
201 set class member "verbose"
203 @param verbose verbose level [all/read/write]
205 public void setVerbose(String verbose
) {
206 if (verbose
.equals("all")) {
208 /// for verbose output
210 this.verbose
.setArg(" -", "v");
211 } else if (verbose
.equals("read")) {
213 /// for verbose output when reading database
215 this.verbose
.setArg(" -", "vdbr");
216 } else if (verbose
.equals("write")) {
218 /// for verbose output when writing database
220 this.verbose
.setArg(" -", "vdbw");
225 get class member baseName
227 @returns baseName parameter
229 public String
getBaseName() {
230 return this.baseName
.getValue();
234 set class member baseName
236 @param baseName name of the output files of .c and .h
238 public void setBaseName(String baseName
) {
239 this.baseName
.setArg(" -bn ", baseName
);
243 get class member "outputDatabase"
245 @returns outputDatabase parameter
247 public String
getOutputDatabase() {
248 return this.outputDatabase
.getValue();
252 set class member "outputDatabase"
254 @param outputDatabase filename of output database file
256 public void setOutputDatabase(String outputDatabase
) {
257 this.outputDatabase
.setArg(" -od ", outputDatabase
);
261 get class member "newDatabase"
263 @returns newDatabase parameter
265 public boolean getNewDatabse() {
266 return this.newDatabase
.getPrefix().length() > 0;
270 set class member "newDatabase"
272 @param newDatabase whether to not read in existing database file
274 public void setNewDatabase(boolean newDatabase
) {
276 this.newDatabase
.setArg(" -", "newdb");
281 get class member "unquotedString"
283 @returns unquotedString parameter
285 public boolean getUnquotedString() {
286 return this.unquotedString
.getValue().length() > 0;
290 set class member "unquotedString"
292 @param unquotedString :
293 whether to indicate that unquoted strings are used
295 public void setUnquotedString(boolean unquotedString
) {
296 if (unquotedString
) {
297 this.unquotedString
.setArg(" -", "uqs");
302 get class member "ignoreNotFound"
304 @returns ignoreNotFound parameter
306 public boolean getIgnoreNotFound() {
307 return this.ignoreNotFound
.getValue().length() > 0;
311 set class member "ignoreNotFound"
313 @param ignoreNotFound whether to ignore if a given STRING_TOKEN(STR)
314 is not found in the database
316 public void setIgnoreNotFound(boolean ignoreNotFound
) {
317 if (ignoreNotFound
) {
318 this.ignoreNotFound
.setArg(" -", "ignorenotfound");
323 get class member "outputString"
325 @returns outputString parameter
327 public String
getOutputString() {
328 return this.outputString
.getValue();
332 set class member "outputString"
334 @param outputString filename of string data file
336 public void setOutputString(String outputString
) {
337 this.outputString
.setArg(" -oc ", outputString
);
341 get class member "outputDefines"
343 @returns outputDefines parameter
345 public String
getOutputDefines() {
346 return this.outputDefines
.getValue();
350 set class member "outputDefines"
352 @param outputDefines filename of string defines file
354 public void setOutputDefines(String outputDefines
) {
355 this.outputDefines
.setArg(" -oh ", outputDefines
);
359 get class member "outputUnicode"
361 @returns outputUnicode parameter
363 public String
getOutputUnicode() {
364 return this.outputUnicode
.getValue();
368 set class member "outputUnicode"
370 @param outputUnicode filename of unicode file to be dumped database
372 public void setOutputUnicode(String outputUnicode
) {
373 this.outputUnicode
.setArg(" -ou ", outputUnicode
);
377 get class member "lang"
379 @returns lang parameter
381 public String
getLang() {
382 return this.lang
.getValue();
386 set class member "lang"
388 @param lang language of dump
390 public void setLang(String lang
) {
391 this.lang
.setArg(" -lang ", lang
);
395 get class member "indirectionFile"
397 @returns indirectionFile parameter
399 public String
getIndirectionFile() {
400 return this.indirectionFile
.getValue();
404 set class member "indirectionFile"
406 @param indirectionFile filename of indirection file
408 public void setIndirectionFile(String indirectionFile
) {
409 this.indirectionFile
.setArg(" -if ", indirectionFile
);
413 get class member "outputHpk"
415 @returns outputHpk parameter
417 public String
getOutputHpk() {
418 return this.outputHpk
.getValue();
422 set class member "outputHpk"
424 @param outputHpk filename of output HII export pack of the strings
426 public void setOutputHpk(String outputHpk
) {
427 this.outputHpk
.setArg(" -hpk ", outputHpk
);
431 add a skipExt element into list
433 @param skipExt skipExt element
435 public void addConfiguredSkipext(SkipExt skipExt
) {
436 this.skipExtList
.insert(skipExt
);
440 add a includePath element into list
442 @param includePath includePath element
444 public void addConfiguredIncludepath(IncludePath includePath
) {
445 this.includePathList
.insert(includePath
);
449 add a inputFile element into list
451 @param inputFile inputFile element
453 public void addConfiguredInputfile(InputFile inputFile
) {
454 this.inputFileList
.insert(inputFile
);
458 add a database element into list
463 public void addConfiguredDatabase(Database database
) {
464 this.databaseList
.insert(database
);