]>
Commit | Line | Data |
---|---|---|
ddfdc8e6 | 1 | /** @file |
2 | Verify the tool configuration file for location of the correct tools. | |
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 | ||
15 | /** | |
16 | * This tool checks to see if specified tool chain paths exist. | |
17 | * It will check all specified paths, as indicated by the last field of the | |
18 | * tool property line equal to _PATH | |
19 | * | |
20 | * no option = check 1) the file specified in target.txt or 2) tools_def.txt | |
21 | * if neither is found, we check the tools_def.template file. | |
22 | * -i = INTERACTIVE checks the "active" tools_def.txt file and lets the | |
23 | * user modify invalid entries. | |
24 | * | |
25 | * -s = SCAN will check all standard locations for tool chains | |
26 | * C:\Program Files\Microsoft Visual Studio * | |
27 | * C:\WINDDK | |
28 | * C:\Bin | |
29 | * C:\ASL | |
30 | * C:\MASM* | |
31 | * /opt/tiano | |
32 | * | |
33 | * -f = FILE check the tools in this file instead of tools_def.txt, or | |
34 | * a file that was specified in target.txt | |
35 | * | |
36 | * -t = TEST can be used with -f or -s, not with -i. | |
4de92764 | 37 | * |
38 | * -d = DUMP can be used with -f, not with -i | |
39 | * | |
40 | * -q = QUIET - turns off all System.out.print statements, the return code | |
41 | * is the only thing that will determine PASS or FAIL | |
ddfdc8e6 | 42 | * |
43 | */ | |
44 | package org.tianocore.CheckTools; | |
45 | ||
46 | import java.io.*; | |
47 | ||
48 | public class CheckTools { | |
49 | private static int DEBUG = 0; | |
50 | ||
51 | private static final String copyright = "Copyright (c) 2006, Intel Corporation All rights reserved."; | |
52 | ||
53 | private static final String version = "Version 0.1"; | |
54 | ||
55 | private int VERBOSE = 0; | |
56 | ||
4de92764 | 57 | private boolean QUIET = false; |
58 | ||
ddfdc8e6 | 59 | // private String argv[]; |
4de92764 | 60 | |
ddfdc8e6 | 61 | private final int DEFAULT = 1; |
62 | ||
63 | private final int TEST = 2; | |
64 | ||
65 | private final int SCAN = 4; | |
66 | ||
4de92764 | 67 | private final int DUMP = 8; |
68 | ||
69 | private final int INTERACTIVE = 16; | |
ddfdc8e6 | 70 | |
71 | private boolean USERFILE = false; | |
72 | ||
73 | private String inFile = ""; | |
4de92764 | 74 | |
ddfdc8e6 | 75 | private final int PASS = 0; |
4de92764 | 76 | |
ddfdc8e6 | 77 | private final int FAIL = 1; |
78 | ||
641cd03c | 79 | private String SEP = System.getProperty("file.separator"); |
80 | ||
ddfdc8e6 | 81 | public static void main(String[] argv) { |
4de92764 | 82 | CheckTools cts = new CheckTools(); |
83 | int exitCode = cts.checkTool(argv); | |
84 | if (DEBUG > 10) | |
85 | System.out.println("Exit Code: " + exitCode); | |
ddfdc8e6 | 86 | if (exitCode == -1) { |
87 | new CheckTools().usage(); | |
88 | System.exit(1); | |
89 | } | |
90 | System.exit(exitCode); | |
91 | } | |
92 | ||
93 | private int checkTool(String[] arguments) { | |
ddfdc8e6 | 94 | if ((DEBUG > 1) && (arguments.length > 0)) |
95 | System.out.println("Arguments: "); | |
96 | int cmdCode = DEFAULT; | |
97 | if (arguments.length > 0) { | |
98 | cmdCode = DEFAULT; | |
4de92764 | 99 | for (int i = 0; i < arguments.length; i++) |
100 | if (arguments[i].toLowerCase().startsWith("-q")) | |
101 | QUIET = true; | |
ddfdc8e6 | 102 | for (int i = 0; i < arguments.length; i++) { |
103 | String arg = arguments[i]; | |
104 | if (DEBUG > 1) | |
105 | System.out.println(" [" + i + "] " + arg); | |
106 | if (!(arg.toLowerCase().startsWith("-t") || arg.toLowerCase().startsWith("-s") | |
4de92764 | 107 | || arg.toLowerCase().startsWith("-d") || arg.toLowerCase().startsWith("-i") |
108 | || arg.toLowerCase().startsWith("-v") || arg.toLowerCase().startsWith("-q") | |
641cd03c | 109 | || arg.toLowerCase().startsWith("-h") || arg.toLowerCase().startsWith("-f"))) { |
ddfdc8e6 | 110 | // Only allow valid option flags |
4de92764 | 111 | if (QUIET == false) { |
112 | System.out.println("Invalid argument: " + arg); | |
113 | usage(); | |
114 | } | |
ddfdc8e6 | 115 | System.exit(FAIL); |
116 | } | |
641cd03c | 117 | |
4de92764 | 118 | if (arg.toLowerCase().startsWith("-d")) { |
ddfdc8e6 | 119 | if (cmdCode == DEFAULT) { |
4de92764 | 120 | cmdCode = DUMP; |
ddfdc8e6 | 121 | } else { |
4de92764 | 122 | if (QUIET == false) |
123 | System.out.println("Invalid Options"); | |
ddfdc8e6 | 124 | usage(); |
125 | System.exit(FAIL); | |
126 | } | |
127 | } | |
4de92764 | 128 | if (arg.toLowerCase().startsWith("-f")) { |
129 | i++; | |
130 | inFile = arguments[i]; | |
131 | USERFILE = true; | |
132 | } | |
133 | if (arg.toLowerCase().startsWith("-h")) { | |
134 | usage(); | |
135 | System.exit(PASS); | |
ddfdc8e6 | 136 | } |
137 | if (arg.toLowerCase().startsWith("-i")) { | |
138 | // Interactive can be specified with any | |
139 | // other option - it turns on the query | |
140 | // on fail mode. | |
141 | cmdCode = cmdCode | INTERACTIVE; | |
142 | } | |
4de92764 | 143 | if (arg.toLowerCase().startsWith("-q")) { |
144 | QUIET = true; | |
145 | } | |
146 | if (arg.toLowerCase().startsWith("-s")) { | |
147 | if (cmdCode == DEFAULT) { | |
148 | cmdCode = SCAN; | |
149 | } else { | |
150 | if (!QUIET) { | |
151 | System.out.println("Invalid Options"); | |
152 | usage(); | |
153 | } | |
154 | System.exit(FAIL); | |
155 | } | |
156 | } | |
157 | if (arg.toLowerCase().startsWith("-t")) { | |
158 | if (cmdCode == DEFAULT) { | |
159 | cmdCode = TEST; | |
160 | } else { | |
161 | if (!QUIET) { | |
162 | System.out.println("Invalid Options"); | |
163 | usage(); | |
164 | } | |
165 | System.exit(FAIL); | |
166 | } | |
ddfdc8e6 | 167 | } |
168 | if (arg.startsWith("-v")) { | |
169 | // Verbose level can be increased to print | |
170 | // more INFO messages. | |
171 | VERBOSE += 1; | |
172 | } | |
173 | if (arg.startsWith("-V")) { | |
4de92764 | 174 | if (!QUIET) { |
175 | System.out.println(copyright); | |
176 | System.out.println("CheckTools, " + version); | |
177 | } | |
ddfdc8e6 | 178 | System.exit(PASS); |
179 | } | |
180 | } | |
181 | } | |
4de92764 | 182 | if (QUIET) |
183 | VERBOSE = 0; | |
184 | ||
185 | String WORKSPACE = System.getenv("WORKSPACE"); | |
186 | if ((DEBUG > 0) || (VERBOSE > 0)) | |
187 | System.out.println("Verifying Tool Chains for WORKSPACE: " + WORKSPACE); | |
188 | int returnCode = 0; | |
189 | ||
190 | if (WORKSPACE == null) { | |
191 | if (QUIET == false) | |
192 | System.out.println("Please set the environment variable, WORKSPACE and run again."); | |
193 | System.exit(FAIL); | |
194 | } | |
195 | String targetTxt = WORKSPACE + SEP + "Tools" + SEP + "Conf" + SEP + "target.txt"; | |
196 | ||
197 | ||
ddfdc8e6 | 198 | if (inFile.length() < 1) { |
199 | // | |
200 | // Check the target.txt file for a Tool Configuration File. | |
201 | // If not set, we use tools_def.txt, unless we are running with the | |
202 | // INTERACTIVE flag - where we check the template file before copying over to the | |
203 | // tools_def.txt file. | |
204 | // | |
205 | inFile = "tools_def.txt"; | |
206 | File target = new File(targetTxt); | |
207 | String readLine = null; | |
208 | String fileLine[] = new String[2]; | |
209 | if (target.exists()) { | |
210 | try { | |
211 | FileReader fileReader = new FileReader(targetTxt); | |
212 | BufferedReader bufReader = new BufferedReader(fileReader); | |
213 | while ((readLine = bufReader.readLine()) != null) { | |
214 | if (readLine.startsWith("TOOL_CHAIN_CONF")) { | |
215 | fileLine = readLine.trim().split("="); | |
216 | if (fileLine[1].trim().length() > 0) { | |
217 | if (fileLine[1].trim().contains("Tools/Conf/")) | |
218 | inFile = fileLine[1].replace("Tools/Conf/", "").trim(); | |
219 | else | |
220 | inFile = fileLine[1].trim(); | |
221 | } | |
222 | } | |
223 | } | |
224 | bufReader.close(); | |
225 | } catch (IOException e) { | |
4de92764 | 226 | if (QUIET == false) |
227 | System.out.println(" [target.txt] Read Error: " + e); | |
ddfdc8e6 | 228 | System.exit(FAIL); |
229 | } | |
230 | } | |
231 | } | |
232 | ||
233 | // OK, now check the infile of we had one. | |
234 | String toolsDef = WORKSPACE + SEP + "Tools" + SEP + "Conf" + SEP + inFile; | |
235 | File toolsFile = new File(toolsDef); | |
236 | if (!toolsFile.exists()) { | |
237 | // use the template file | |
238 | if (USERFILE) { | |
4de92764 | 239 | if (QUIET == false) { |
240 | System.out.println("Could not locate the specified file: " + inFile); | |
241 | System.out.println(" It must be located in the WORKSPACE" + SEP + "Tools" + SEP + "Conf directory"); | |
242 | } | |
ddfdc8e6 | 243 | System.exit(FAIL); |
244 | } | |
245 | toolsDef = WORKSPACE + SEP + "Tools" + SEP + "Conf" + SEP + "tools_def.template"; | |
246 | File toolsTemplate = new File(toolsDef); | |
247 | if (!toolsTemplate.exists()) { | |
4de92764 | 248 | if (QUIET == false) |
249 | System.out.println("Your WORKSPACE is not properly configured!"); | |
ddfdc8e6 | 250 | System.exit(FAIL); |
251 | } else { | |
4de92764 | 252 | if (QUIET == false) |
253 | System.out.println("**** WARNING: No Tool Configuration File was found, using the template file, " | |
254 | + toolsDef); | |
ddfdc8e6 | 255 | } |
256 | } | |
257 | ||
258 | // | |
259 | // at this point the file, toolsDef points to a tool configuration file of some sort. | |
260 | // | |
261 | // check tool configuration file | |
262 | if (DEBUG > 2) | |
263 | System.out.println("Calling checkTools(" + toolsDef + ", " + cmdCode + ", " + VERBOSE + ")"); | |
4de92764 | 264 | ToolChecks tc = new ToolChecks(); |
265 | returnCode = tc.checkTools(toolsDef, cmdCode, VERBOSE, QUIET); | |
ddfdc8e6 | 266 | |
4de92764 | 267 | if (VERBOSE > 10) |
268 | System.out.println(" checkTools returned: " + returnCode); | |
ddfdc8e6 | 269 | return returnCode; |
270 | } | |
271 | ||
272 | private void usage() { | |
4de92764 | 273 | if (QUIET) |
274 | return; | |
275 | System.out | |
276 | .println("Usage: checkTools [-h] [-d] [-i] [-v] [-s | -scan] [-t | -test] [-q | -quiet] [[-f | -filename] filename.txt]"); | |
641cd03c | 277 | System.out.println(" Where"); |
278 | System.out.println(" -h Help - display this screen."); | |
4de92764 | 279 | System.out.println(" -d Dump - display the tool defintion file in user readable format"); |
641cd03c | 280 | System.out.println(" -i Interactive query - not yet implemented!"); |
281 | System.out.println(" -v Verbose - add up to 3 -v options to increase info messages."); | |
282 | System.out.println(" -s Scan - search the usual places on your system for tools."); | |
283 | System.out.println(" The Scan feature not yet implemented!."); | |
284 | System.out.println(" -t Test - checks that PATH entries in the tool configuration file exist."); | |
4de92764 | 285 | System.out |
286 | .println(" -q Quiet - no messages get printed, the return value determines pass or fail."); | |
641cd03c | 287 | System.out.println(" -f filename Use filename instead of the file specified in target.txt or"); |
288 | System.out.println(" tools_def.txt or tools_def.template."); | |
289 | System.out.println(" By Rule, all tool configuration files must reside in the"); | |
290 | System.out.println(" WORKSPACE" + SEP + "Tools" + SEP + "Conf directory."); | |
ddfdc8e6 | 291 | } |
292 | } |