]> git.proxmox.com Git - mirror_edk2.git/blame - Tools/Source/FrameworkTasks/org/tianocore/framework/tasks/StrGatherTask.java
1) Changed ToolArg class to abstract generic arguments of a tool
[mirror_edk2.git] / Tools / Source / FrameworkTasks / org / tianocore / framework / tasks / StrGatherTask.java
CommitLineData
878ddf1f 1/** @file\r
2This file is to define an ANT task which wraps StrGather.exe tool.\r
3\r
4Copyright (c) 2006, Intel Corporation\r
5All rights reserved. This program and the accompanying materials\r
6are licensed and made available under the terms and conditions of the BSD License\r
7which accompanies this distribution. The full text of the license may be found at\r
8http://opensource.org/licenses/bsd-license.php\r
9\r
10THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,\r
11WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.\r
12\r
13**/\r
14package org.tianocore.framework.tasks;\r
15\r
82810f3b 16import java.io.File;\r
878ddf1f 17import java.util.*;\r
82810f3b 18\r
19import org.apache.tools.ant.BuildException;\r
878ddf1f 20import org.apache.tools.ant.Project;\r
21import org.apache.tools.ant.Task;\r
878ddf1f 22import org.apache.tools.ant.taskdefs.Execute;\r
23import org.apache.tools.ant.taskdefs.LogStreamHandler;\r
24import org.apache.tools.ant.types.Commandline;\r
93f5dd0a 25import org.tianocore.common.logger.EdkLog;\r
878ddf1f 26\r
27/**\r
28 StrGather Task Class\r
29 class memberg\r
30 -commandType : command type [parse/scan/dump] \r
31 -baseName : base name of component \r
32 -verbose : level of verbose [all/read/write]\r
33 -outputDatabase : file name of output database file\r
34 -databaseList : file name list of database files\r
35 -inputFileList : file name list of input files\r
36 -newDatabase : whether to need new database [ture/false]\r
37 -unquotedString : whether to unquoted strings are used [ture/false]\r
38 -includePathList: path list of include paths\r
39 -ignoreNotFound : whether to ignore a given STRING_TOKEN(STR) is not found in database [ture/false]\r
40 -skipExtList : skip scan of files with extension name\r
41 -outputString : write string data to filename \r
42 -outputDefines : write string defines to filename \r
43 -outputUnicode : dump database to unicode file filename\r
44 -lang : only dump for the language \r
45 -indirectionFile: specify an indirection file\r
46 -outputHpk : create an HII export pack of the strings\r
47 **/\r
48public class StrGatherTask extends Task implements EfiDefine {\r
49 ///\r
50 /// common options\r
51 ///\r
93f5dd0a 52 private ToolArg commandType = new ToolArg();\r
878ddf1f 53\r
93f5dd0a 54 private ToolArg baseName = new ToolArg();\r
878ddf1f 55\r
56 ///\r
57 /// "all/read/write"\r
58 ///\r
93f5dd0a 59 private ToolArg verbose = new ToolArg();\r
878ddf1f 60\r
93f5dd0a 61 private FileArg outputDatabase = new FileArg();\r
878ddf1f 62\r
93f5dd0a 63 private Database databaseList = new Database();\r
878ddf1f 64\r
93f5dd0a 65 private InputFile inputFileList = new InputFile();\r
878ddf1f 66\r
67 ///\r
68 /// parse options newDatabase -- "ture/false" unquoteString -- "ture/false"\r
69 ///\r
93f5dd0a 70 private ToolArg newDatabase = new ToolArg();\r
878ddf1f 71\r
93f5dd0a 72 private ToolArg unquotedString = new ToolArg();\r
878ddf1f 73\r
93f5dd0a 74 private IncludePath includePathList = new IncludePath();\r
878ddf1f 75\r
76 ///\r
77 /// scan options ignoreNotFound -- "ture/false"\r
78 ///\r
93f5dd0a 79 private ToolArg ignoreNotFound = new ToolArg();\r
878ddf1f 80\r
93f5dd0a 81 private SkipExt skipExtList = new SkipExt();\r
878ddf1f 82\r
83 ///\r
84 /// dump options\r
85 ///\r
93f5dd0a 86 private ToolArg outputString = new ToolArg();\r
878ddf1f 87\r
93f5dd0a 88 private ToolArg outputDefines = new ToolArg();\r
878ddf1f 89\r
93f5dd0a 90 private ToolArg outputUnicode = new ToolArg();\r
878ddf1f 91\r
93f5dd0a 92 private ToolArg lang = new ToolArg();\r
878ddf1f 93\r
93f5dd0a 94 private FileArg indirectionFile = new FileArg();\r
878ddf1f 95\r
93f5dd0a 96 private FileArg outputHpk = new FileArg();\r
878ddf1f 97\r
98 ///\r
99 /// global variable\r
100 ///\r
101 static private Project project;\r
102\r
103 /**\r
104 assemble tool command line & execute tool command line\r
105 \r
106 @throws BuildException\r
107 **/\r
108 public void execute() throws BuildException {\r
109\r
110 project = this.getOwningTarget().getProject();\r
111 ///\r
112 /// absolute path of efi tools\r
113 ///\r
2da8968b 114 String path = project.getProperty("env.FRAMEWORK_TOOLS_PATH"); \r
878ddf1f 115 String command;\r
116 if (path == null) {\r
fad77353 117 command = "StrGather";\r
878ddf1f 118 } else {\r
82810f3b 119 command = path + File.separator + "StrGather";\r
878ddf1f 120 }\r
121\r
878ddf1f 122 ///\r
123 /// assemble argument\r
124 ///\r
93f5dd0a 125 String argument = "" + commandType + verbose + databaseList + baseName\r
126 + outputDatabase + includePathList + newDatabase + unquotedString\r
127 + skipExtList + ignoreNotFound + outputString + outputDefines\r
878ddf1f 128 + outputUnicode + lang + indirectionFile + outputHpk\r
93f5dd0a 129 + inputFileList;\r
878ddf1f 130 ///\r
131 /// return value of fwimage execution\r
132 ///\r
133 int revl = -1;\r
134\r
135 try {\r
136 Commandline cmdline = new Commandline();\r
137 cmdline.setExecutable(command);\r
138 cmdline.createArgument().setLine(argument);\r
139\r
140 LogStreamHandler streamHandler = new LogStreamHandler(this,\r
141 Project.MSG_INFO, Project.MSG_WARN);\r
142 Execute runner = new Execute(streamHandler, null);\r
143\r
144 runner.setAntRun(project);\r
145 runner.setCommandline(cmdline.getCommandline());\r
878ddf1f 146\r
93f5dd0a 147 String cmdType = getCommandType();\r
148 if (cmdType.equalsIgnoreCase("parse")) {\r
149 EdkLog.log(this, "(parse) " + inputFileList.toFileList() + " => " \r
150 + databaseList.toFileList());\r
151 } else if (cmdType.equalsIgnoreCase("scan")) {\r
152 EdkLog.log(this, "(scan) " + databaseList.toFileList() + " => " \r
153 + outputDatabase.toFileList());\r
154 } else {\r
155 EdkLog.log(this, "(dump) " + databaseList.toFileList() + " => " \r
156 + outputDefines.toFileList() + outputString.toFileList() + outputHpk.toFileList());\r
157 }\r
158 EdkLog.log(this, EdkLog.EDK_VERBOSE, Commandline.toString(cmdline.getCommandline()));\r
159\r
878ddf1f 160 revl = runner.execute();\r
161 if (EFI_SUCCESS == revl) {\r
93f5dd0a 162 EdkLog.log(this, EdkLog.EDK_VERBOSE, "StrGather succeeded!");\r
878ddf1f 163 } else {\r
164 ///\r
165 /// command execution fail\r
166 ///\r
93f5dd0a 167 EdkLog.log(this, "ERROR = " + Integer.toHexString(revl));\r
3f7b510e 168 throw new BuildException("StrGather failed!");\r
878ddf1f 169 }\r
170 } catch (Exception e) {\r
171 throw new BuildException(e.getMessage());\r
172 }\r
173 }\r
174\r
175 /**\r
176 get class member "commandType"\r
177 \r
178 @returns commandType parameter\r
179 **/\r
180 public String getCommandType() {\r
93f5dd0a 181 return this.commandType.getValue();\r
878ddf1f 182 }\r
183\r
184 /**\r
185 set class member ""\r
186 \r
187 @param commandType type of strgather command [parse/scan/dump]\r
188 **/\r
189 public void setCommandType(String commandType) {\r
93f5dd0a 190 this.commandType.setArg(" -", commandType);\r
878ddf1f 191 }\r
192\r
193 /**\r
194 get class member "verbose"\r
195 \r
196 @returns verbose parameter\r
197 **/\r
198 public String getVerbose() {\r
93f5dd0a 199 return this.verbose.getValue();\r
878ddf1f 200 }\r
201\r
202 /**\r
203 set class member "verbose"\r
204 \r
205 @param verbose verbose level [all/read/write]\r
206 **/\r
207 public void setVerbose(String verbose) {\r
208 if (verbose.equals("all")) {\r
209 ///\r
210 /// for verbose output\r
211 ///\r
93f5dd0a 212 this.verbose.setArg(" -", "v");\r
878ddf1f 213 } else if (verbose.equals("read")) {\r
214 ///\r
215 /// for verbose output when reading database\r
216 ///\r
93f5dd0a 217 this.verbose.setArg(" -", "vdbr");\r
878ddf1f 218 } else if (verbose.equals("write")) {\r
219 ///\r
220 /// for verbose output when writing database\r
221 ///\r
93f5dd0a 222 this.verbose.setArg(" -", "vdbw");\r
878ddf1f 223 }\r
224 }\r
225\r
226 /**\r
227 get class member baseName\r
228 \r
229 @returns baseName parameter\r
230 **/\r
231 public String getBaseName() {\r
93f5dd0a 232 return this.baseName.getValue();\r
878ddf1f 233 }\r
234\r
235 /**\r
236 set class member baseName\r
237 \r
238 @param baseName name of the output files of .c and .h\r
239 **/\r
240 public void setBaseName(String baseName) {\r
93f5dd0a 241 this.baseName.setArg(" -bn ", baseName);\r
878ddf1f 242 }\r
243\r
244 /**\r
245 get class member "outputDatabase"\r
246 \r
247 @returns outputDatabase parameter\r
248 **/\r
249 public String getOutputDatabase() {\r
93f5dd0a 250 return this.outputDatabase.getValue();\r
878ddf1f 251 }\r
252\r
253 /**\r
254 set class member "outputDatabase"\r
255 \r
256 @param outputDatabase filename of output database file\r
257 **/\r
258 public void setOutputDatabase(String outputDatabase) {\r
93f5dd0a 259 this.outputDatabase.setArg(" -od ", outputDatabase);\r
878ddf1f 260 }\r
261\r
262 /**\r
263 get class member "newDatabase"\r
264 \r
265 @returns newDatabase parameter\r
266 **/\r
93f5dd0a 267 public boolean getNewDatabse() {\r
268 return this.newDatabase.getPrefix().length() > 0;\r
878ddf1f 269 }\r
270\r
271 /**\r
272 set class member "newDatabase"\r
273 \r
274 @param newDatabase whether to not read in existing database file\r
275 **/\r
93f5dd0a 276 public void setNewDatabase(boolean newDatabase) {\r
277 if (newDatabase) {\r
278 this.newDatabase.setArg(" -", "newdb");\r
878ddf1f 279 }\r
280 }\r
281\r
282 /**\r
283 get class member "unquotedString"\r
284 \r
285 @returns unquotedString parameter\r
286 **/\r
93f5dd0a 287 public boolean getUnquotedString() {\r
288 return this.unquotedString.getValue().length() > 0;\r
878ddf1f 289 }\r
290\r
291 /**\r
292 set class member "unquotedString"\r
293 \r
294 @param unquotedString :\r
295 whether to indicate that unquoted strings are used\r
296 **/\r
93f5dd0a 297 public void setUnquotedString(boolean unquotedString) {\r
298 if (unquotedString) {\r
299 this.unquotedString.setArg(" -", "uqs");\r
878ddf1f 300 }\r
301 }\r
302\r
303 /**\r
304 get class member "ignoreNotFound"\r
305 \r
306 @returns ignoreNotFound parameter\r
307 **/\r
93f5dd0a 308 public boolean getIgnoreNotFound() {\r
309 return this.ignoreNotFound.getValue().length() > 0;\r
878ddf1f 310 }\r
311\r
312 /**\r
313 set class member "ignoreNotFound"\r
314 \r
315 @param ignoreNotFound whether to ignore if a given STRING_TOKEN(STR) \r
316 is not found in the database\r
317 **/\r
93f5dd0a 318 public void setIgnoreNotFound(boolean ignoreNotFound) {\r
319 if (ignoreNotFound) {\r
320 this.ignoreNotFound.setArg(" -", "ignorenotfound");\r
878ddf1f 321 }\r
322 }\r
323\r
324 /**\r
325 get class member "outputString"\r
326 \r
327 @returns outputString parameter\r
328 **/\r
329 public String getOutputString() {\r
93f5dd0a 330 return this.outputString.getValue();\r
878ddf1f 331 }\r
332\r
333 /**\r
334 set class member "outputString"\r
335 \r
336 @param outputString filename of string data file\r
337 **/\r
338 public void setOutputString(String outputString) {\r
93f5dd0a 339 this.outputString.setArg(" -oc ", outputString);\r
878ddf1f 340 }\r
341\r
342 /**\r
343 get class member "outputDefines"\r
344 \r
345 @returns outputDefines parameter\r
346 **/\r
347 public String getOutputDefines() {\r
93f5dd0a 348 return this.outputDefines.getValue();\r
878ddf1f 349 }\r
350\r
351 /**\r
352 set class member "outputDefines"\r
353 \r
354 @param outputDefines filename of string defines file\r
355 **/\r
356 public void setOutputDefines(String outputDefines) {\r
93f5dd0a 357 this.outputDefines.setArg(" -oh ", outputDefines);\r
878ddf1f 358 }\r
359\r
360 /**\r
361 get class member "outputUnicode"\r
362 \r
363 @returns outputUnicode parameter\r
364 **/\r
365 public String getOutputUnicode() {\r
93f5dd0a 366 return this.outputUnicode.getValue();\r
878ddf1f 367 }\r
368\r
369 /**\r
370 set class member "outputUnicode"\r
371 \r
372 @param outputUnicode filename of unicode file to be dumped database\r
373 **/\r
374 public void setOutputUnicode(String outputUnicode) {\r
93f5dd0a 375 this.outputUnicode.setArg(" -ou ", outputUnicode);\r
878ddf1f 376 }\r
377\r
378 /**\r
379 get class member "lang"\r
380 \r
381 @returns lang parameter\r
382 **/\r
383 public String getLang() {\r
93f5dd0a 384 return this.lang.getValue();\r
878ddf1f 385 }\r
386\r
387 /**\r
388 set class member "lang"\r
389 \r
390 @param lang language of dump\r
391 **/\r
392 public void setLang(String lang) {\r
93f5dd0a 393 this.lang.setArg(" -lang ", lang);\r
878ddf1f 394 }\r
395\r
396 /**\r
397 get class member "indirectionFile"\r
398 \r
399 @returns indirectionFile parameter\r
400 **/\r
401 public String getIndirectionFile() {\r
93f5dd0a 402 return this.indirectionFile.getValue();\r
878ddf1f 403 }\r
404\r
405 /**\r
406 set class member "indirectionFile"\r
407 \r
408 @param indirectionFile filename of indirection file\r
409 **/\r
410 public void setIndirectionFile(String indirectionFile) {\r
93f5dd0a 411 this.indirectionFile.setArg(" -if ", indirectionFile);\r
878ddf1f 412 }\r
413\r
414 /**\r
415 get class member "outputHpk"\r
416 \r
417 @returns outputHpk parameter\r
418 **/\r
419 public String getOutputHpk() {\r
93f5dd0a 420 return this.outputHpk.getValue();\r
878ddf1f 421 }\r
422\r
423 /**\r
424 set class member "outputHpk"\r
425 \r
426 @param outputHpk filename of output HII export pack of the strings\r
427 **/\r
428 public void setOutputHpk(String outputHpk) {\r
93f5dd0a 429 this.outputHpk.setArg(" -hpk ", outputHpk);\r
878ddf1f 430 }\r
431\r
432 /**\r
433 add a skipExt element into list\r
434 \r
435 @param skipExt skipExt element\r
436 **/\r
93f5dd0a 437 public void addConfiguredSkipext(SkipExt skipExt) {\r
438 this.skipExtList.insert(skipExt);\r
878ddf1f 439 };\r
440\r
441 /**\r
442 add a includePath element into list\r
443 \r
444 @param includePath includePath element\r
445 **/\r
93f5dd0a 446 public void addConfiguredIncludepath(IncludePath includePath) {\r
447 this.includePathList.insert(includePath);\r
878ddf1f 448 };\r
449\r
450 /**\r
451 add a inputFile element into list\r
452 \r
453 @param inputFile inputFile element\r
454 **/\r
93f5dd0a 455 public void addConfiguredInputfile(InputFile inputFile) {\r
456 this.inputFileList.insert(inputFile);\r
878ddf1f 457 };\r
458\r
459 /**\r
460 add a database element into list\r
461 \r
462 @param database :\r
463 database element\r
464 **/\r
93f5dd0a 465 public void addConfiguredDatabase(Database database) {\r
466 this.databaseList.insert(database);\r
82810f3b 467 }\r
878ddf1f 468}\r