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