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