]> git.proxmox.com Git - mirror_edk2.git/blob - Tools/Source/FrameworkTasks/org/tianocore/framework/tasks/StrGatherTask.java
Make sure that the dll is executable.
[mirror_edk2.git] / Tools / Source / FrameworkTasks / org / tianocore / framework / tasks / StrGatherTask.java
1 /** @file
2 This file is to define an ANT task which wraps StrGather.exe tool.
3
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
9
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.
12
13 **/
14 package org.tianocore.framework.tasks;
15
16 import java.util.*;
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;
23
24 /**
25 StrGather Task Class
26 class memberg
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
44 **/
45 public class StrGatherTask extends Task implements EfiDefine {
46 ///
47 /// common options
48 ///
49 private String commandType = "";
50
51 private String baseName = "";
52
53 ///
54 /// "all/read/write"
55 ///
56 private String verbose = "";
57
58 private String outputDatabase = "";
59
60 private List<Object> databaseList = new ArrayList<Object>();
61
62 private List<Object> inputFileList = new ArrayList<Object>();
63
64 ///
65 /// parse options newDatabase -- "ture/false" unquoteString -- "ture/false"
66 ///
67 private String newDatabase = "";
68
69 private String unquotedString = "";
70
71 private List<Object> includePathList = new ArrayList<Object>();
72
73 ///
74 /// scan options ignoreNotFound -- "ture/false"
75 ///
76 private String ignoreNotFound = "";
77
78 private List<Object> skipExtList = new ArrayList<Object>();
79
80 ///
81 /// dump options
82 ///
83 private String outputString = "";
84
85 private String outputDefines = "";
86
87 private String outputUnicode = "";
88
89 private String lang = "";
90
91 private String indirectionFile = "";
92
93 private String outputHpk = "";
94
95 ///
96 /// global variable
97 ///
98 static private Project project;
99
100 /**
101 assemble tool command line & execute tool command line
102
103 @throws BuildException
104 **/
105 public void execute() throws BuildException {
106
107 project = this.getOwningTarget().getProject();
108 ///
109 /// absolute path of efi tools
110 ///
111 String path = project.getProperty("env.Framework_Tools_Path");
112 String command;
113 if (path == null) {
114 command = "strgather";
115 } else {
116 command = path + "/" + "strgather";
117 }
118
119 ///
120 /// transfer nested elements into string
121 ///
122 String databases = list2Str(databaseList, "-db");
123 String skipExts = list2Str(skipExtList, "-skipext");
124 String includePaths = list2Str(includePathList, "-I");
125 String inputFiles = list2Str(inputFileList, "");
126
127 ///
128 /// assemble argument
129 ///
130 String argument = commandType + verbose + databases + baseName
131 + outputDatabase + includePaths + newDatabase + unquotedString
132 + skipExts + ignoreNotFound + outputString + outputDefines
133 + outputUnicode + lang + indirectionFile + outputHpk
134 + inputFiles;
135 ///
136 /// return value of fwimage execution
137 ///
138 int revl = -1;
139
140 try {
141 Commandline cmdline = new Commandline();
142 cmdline.setExecutable(command);
143 cmdline.createArgument().setLine(argument);
144
145 LogStreamHandler streamHandler = new LogStreamHandler(this,
146 Project.MSG_INFO, Project.MSG_WARN);
147 Execute runner = new Execute(streamHandler, null);
148
149 runner.setAntRun(project);
150 runner.setCommandline(cmdline.getCommandline());
151 System.out.println(Commandline.toString(cmdline.getCommandline()));
152
153 revl = runner.execute();
154 if (EFI_SUCCESS == revl) {
155 ///
156 /// command execution success
157 ///
158 System.out.println("strgather succeeded!");
159 } else {
160 ///
161 /// command execution fail
162 ///
163 System.out.println("strgather failed. (error="
164 + Integer.toHexString(revl) + ")");
165 throw new BuildException("strgather failed. (error="
166 + Integer.toHexString(revl) + ")");
167 }
168 } catch (Exception e) {
169 throw new BuildException(e.getMessage());
170 }
171 }
172
173 /**
174 get class member "commandType"
175
176 @returns commandType parameter
177 **/
178 public String getCommandType() {
179 return this.commandType;
180 }
181
182 /**
183 set class member ""
184
185 @param commandType type of strgather command [parse/scan/dump]
186 **/
187 public void setCommandType(String commandType) {
188 this.commandType = " -" + commandType;
189 }
190
191 /**
192 get class member "verbose"
193
194 @returns verbose parameter
195 **/
196 public String getVerbose() {
197 return this.verbose;
198 }
199
200 /**
201 set class member "verbose"
202
203 @param verbose verbose level [all/read/write]
204 **/
205 public void setVerbose(String verbose) {
206 if (verbose.equals("all")) {
207 ///
208 /// for verbose output
209 ///
210 this.verbose = " -v ";
211 } else if (verbose.equals("read")) {
212 ///
213 /// for verbose output when reading database
214 ///
215 this.verbose = " -vdbr ";
216 } else if (verbose.equals("write")) {
217 ///
218 /// for verbose output when writing database
219 ///
220 this.verbose = " -vdbw ";
221 }
222 }
223
224 /**
225 get class member baseName
226
227 @returns baseName parameter
228 **/
229 public String getBaseName() {
230 return this.baseName;
231 }
232
233 /**
234 set class member baseName
235
236 @param baseName name of the output files of .c and .h
237 **/
238 public void setBaseName(String baseName) {
239 this.baseName = " -bn " + baseName;
240 }
241
242 /**
243 get class member "outputDatabase"
244
245 @returns outputDatabase parameter
246 **/
247 public String getOutputDatabase() {
248 return this.outputDatabase;
249 }
250
251 /**
252 set class member "outputDatabase"
253
254 @param outputDatabase filename of output database file
255 **/
256 public void setOutputDatabase(String outputDatabase) {
257 this.outputDatabase = " -od " + outputDatabase;
258 }
259
260 /**
261 get class member "newDatabase"
262
263 @returns newDatabase parameter
264 **/
265 public String getNewDatabse() {
266 return this.newDatabase;
267 }
268
269 /**
270 set class member "newDatabase"
271
272 @param newDatabase whether to not read in existing database file
273 **/
274 public void setNewDatabase(String newDatabase) {
275 if (newDatabase.equals("true")) {
276 this.newDatabase = " -newdb ";
277 }
278 }
279
280 /**
281 get class member "unquotedString"
282
283 @returns unquotedString parameter
284 **/
285 public String getUnquotedString() {
286 return this.unquotedString;
287 }
288
289 /**
290 set class member "unquotedString"
291
292 @param unquotedString :
293 whether to indicate that unquoted strings are used
294 **/
295 public void setUnquotedString(String unquotedString) {
296 if (unquotedString.equals("true")) {
297 this.unquotedString = " -uqs ";
298 }
299 }
300
301 /**
302 get class member "ignoreNotFound"
303
304 @returns ignoreNotFound parameter
305 **/
306 public String getIgnoreNotFound() {
307 return this.ignoreNotFound;
308 }
309
310 /**
311 set class member "ignoreNotFound"
312
313 @param ignoreNotFound whether to ignore if a given STRING_TOKEN(STR)
314 is not found in the database
315 **/
316 public void setIgnoreNotFound(String ignoreNotFound) {
317 if (ignoreNotFound.equals("true")) {
318 this.ignoreNotFound = " -ignorenotfound ";
319 }
320 }
321
322 /**
323 get class member "outputString"
324
325 @returns outputString parameter
326 **/
327 public String getOutputString() {
328 return this.outputString;
329 }
330
331 /**
332 set class member "outputString"
333
334 @param outputString filename of string data file
335 **/
336 public void setOutputString(String outputString) {
337 this.outputString = " -oc " + outputString;
338 }
339
340 /**
341 get class member "outputDefines"
342
343 @returns outputDefines parameter
344 **/
345 public String getOutputDefines() {
346 return this.outputDefines;
347 }
348
349 /**
350 set class member "outputDefines"
351
352 @param outputDefines filename of string defines file
353 **/
354 public void setOutputDefines(String outputDefines) {
355 this.outputDefines = " -oh " + outputDefines;
356 }
357
358 /**
359 get class member "outputUnicode"
360
361 @returns outputUnicode parameter
362 **/
363 public String getOutputUnicode() {
364 return this.outputUnicode;
365 }
366
367 /**
368 set class member "outputUnicode"
369
370 @param outputUnicode filename of unicode file to be dumped database
371 **/
372 public void setOutputUnicode(String outputUnicode) {
373 this.outputUnicode = " -ou " + outputUnicode;
374 }
375
376 /**
377 get class member "lang"
378
379 @returns lang parameter
380 **/
381 public String getLang() {
382 return this.lang;
383 }
384
385 /**
386 set class member "lang"
387
388 @param lang language of dump
389 **/
390 public void setLang(String lang) {
391 this.lang = " -lang " + lang;
392 }
393
394 /**
395 get class member "indirectionFile"
396
397 @returns indirectionFile parameter
398 **/
399 public String getIndirectionFile() {
400 return this.indirectionFile;
401 }
402
403 /**
404 set class member "indirectionFile"
405
406 @param indirectionFile filename of indirection file
407 **/
408 public void setIndirectionFile(String indirectionFile) {
409 this.indirectionFile = " -if " + indirectionFile;
410 }
411
412 /**
413 get class member "outputHpk"
414
415 @returns outputHpk parameter
416 **/
417 public String getOutputHpk() {
418 return this.outputHpk;
419 }
420
421 /**
422 set class member "outputHpk"
423
424 @param outputHpk filename of output HII export pack of the strings
425 **/
426 public void setOutputHpk(String outputHpk) {
427 this.outputHpk = " -hpk " + outputHpk;
428 }
429
430 /**
431 add a skipExt element into list
432
433 @param skipExt skipExt element
434 **/
435 public void addSkipext(SkipExt skipExt) {
436 skipExtList.add(skipExt);
437 };
438
439 /**
440 add a includePath element into list
441
442 @param includePath includePath element
443 **/
444 public void addIncludepath(IncludePath includePath) {
445 includePathList.add(includePath);
446 };
447
448 /**
449 add a inputFile element into list
450
451 @param inputFile inputFile element
452 **/
453 public void addInputfile(InputFile inputFile) {
454 inputFileList.add(inputFile);
455 };
456
457 /**
458 add a database element into list
459
460 @param database :
461 database element
462 **/
463 public void addDatabase(Database database) {
464 databaseList.add(database);
465 }
466
467 /**
468 transfer List to String
469
470 @param list nested element list
471 @param tag interval tag of parameter
472
473 @returns string line of parameters
474 **/
475 private String list2Str(List list, String tag) {
476 ///
477 /// string line for return
478 ///
479 String paraStr = "";
480 ///
481 /// nested element in list
482 ///
483 NestElement element;
484 ///
485 /// iterator of nested element list
486 ///
487 Iterator elementIter = list.iterator();
488 ///
489 /// string parameter list
490 ///
491 List<Object> strList = new ArrayList<Object>();
492
493 while (elementIter.hasNext()) {
494 element = (NestElement) elementIter.next();
495 if (null != element.getFile()) {
496 ///
497 /// nested element include file
498 ///
499 FileParser.loadFile(project, strList, element.getFile(), tag);
500 }
501
502 if (element.getName().length() > 0) {
503 ///
504 /// nested element include name
505 ///
506 paraStr = paraStr + " " + element.getName();
507 }
508
509 List<String> nameList = element.getList();
510 if (nameList.size() > 0) {
511 Iterator nameIter = nameList.iterator();
512 while (nameIter.hasNext()) {
513 paraStr = paraStr + " " + tag + " " + (String)nameIter.next();
514 }
515 }
516 }
517 ///
518 /// iterator of string parameter list
519 ///
520 Iterator strIter = strList.iterator();
521 while (strIter.hasNext()) {
522 paraStr = paraStr + " " + strIter.next();
523 }
524 return paraStr;
525 }
526
527 }