From ddfdc8e69df8065dd0c6ff9e29b9c2f0e4b0656d Mon Sep 17 00:00:00 2001 From: lhauch Date: Tue, 17 Oct 2006 22:17:18 +0000 Subject: [PATCH] Adding Java Tool: ckt.bat for CheckTools. git-svn-id: https://edk2.svn.sourceforge.net/svnroot/edk2/trunk/edk2@1779 6f19259b-4bc3-4df7-8a09-765794883524 --- Tools/Java/Source/CheckTools/build.xml | 42 ++++ .../org/tianocore/CheckTools/CheckTools.java | 222 ++++++++++++++++++ .../org/tianocore/CheckTools/ToolChecks.java | 159 +++++++++++++ Tools/bin/ckt.bat | 73 ++++++ 4 files changed, 496 insertions(+) create mode 100644 Tools/Java/Source/CheckTools/build.xml create mode 100644 Tools/Java/Source/CheckTools/src/org/tianocore/CheckTools/CheckTools.java create mode 100644 Tools/Java/Source/CheckTools/src/org/tianocore/CheckTools/ToolChecks.java create mode 100644 Tools/bin/ckt.bat diff --git a/Tools/Java/Source/CheckTools/build.xml b/Tools/Java/Source/CheckTools/build.xml new file mode 100644 index 0000000000..b1a592b116 --- /dev/null +++ b/Tools/Java/Source/CheckTools/build.xml @@ -0,0 +1,42 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/Tools/Java/Source/CheckTools/src/org/tianocore/CheckTools/CheckTools.java b/Tools/Java/Source/CheckTools/src/org/tianocore/CheckTools/CheckTools.java new file mode 100644 index 0000000000..4f61cc6b88 --- /dev/null +++ b/Tools/Java/Source/CheckTools/src/org/tianocore/CheckTools/CheckTools.java @@ -0,0 +1,222 @@ +/** @file + Verify the tool configuration file for location of the correct tools. + + Copyright (c) 2006, Intel Corporation + All rights reserved. This program and the accompanying materials + are licensed and made available under the terms and conditions of the BSD License + which accompanies this distribution. The full text of the license may be found at + http://opensource.org/licenses/bsd-license.php + + THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS, + WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED. + + **/ + +/** + * This tool checks to see if specified tool chain paths exist. + * It will check all specified paths, as indicated by the last field of the + * tool property line equal to _PATH + * + * no option = check 1) the file specified in target.txt or 2) tools_def.txt + * if neither is found, we check the tools_def.template file. + * -i = INTERACTIVE checks the "active" tools_def.txt file and lets the + * user modify invalid entries. + * + * -s = SCAN will check all standard locations for tool chains + * C:\Program Files\Microsoft Visual Studio * + * C:\WINDDK + * C:\Bin + * C:\ASL + * C:\MASM* + * /opt/tiano + * + * -f = FILE check the tools in this file instead of tools_def.txt, or + * a file that was specified in target.txt + * + * -t = TEST can be used with -f or -s, not with -i. + * + */ +package org.tianocore.CheckTools; + +import java.io.*; + +public class CheckTools { + private static int DEBUG = 0; + + private static final String copyright = "Copyright (c) 2006, Intel Corporation All rights reserved."; + + private static final String version = "Version 0.1"; + + private int VERBOSE = 0; + + // private String argv[]; + + private final int DEFAULT = 1; + + private final int TEST = 2; + + private final int SCAN = 4; + + private final int INTERACTIVE = 8; + + private boolean USERFILE = false; + + private String inFile = ""; + + private final int PASS = 0; + + private final int FAIL = 1; + + public static void main(String[] argv) { + int exitCode = new CheckTools().checkTool(argv); + if (exitCode == -1) { + new CheckTools().usage(); + System.exit(1); + } + System.exit(exitCode); + } + + private int checkTool(String[] arguments) { + String WORKSPACE = System.getenv("WORKSPACE"); + if ((DEBUG > 0) || (VERBOSE > 0)) + System.out.println("Verifying Tool Chains for WORKSPACE: " + WORKSPACE); + String SEP = System.getProperty("file.separator"); + int returnCode = 0; + + if (WORKSPACE == null) { + System.out.println("Please set the environment variable, WORKSPACE and run again."); + System.exit(1); + } + String targetTxt = WORKSPACE + SEP + "Tools" + SEP + "Conf" + SEP + "target.txt"; + + if ((DEBUG > 1) && (arguments.length > 0)) + System.out.println("Arguments: "); + int cmdCode = DEFAULT; + if (arguments.length > 0) { + cmdCode = DEFAULT; + for (int i = 0; i < arguments.length; i++) { + String arg = arguments[i]; + if (DEBUG > 1) + System.out.println(" [" + i + "] " + arg); + if (!(arg.toLowerCase().startsWith("-t") || arg.toLowerCase().startsWith("-s") + || arg.toLowerCase().startsWith("-i") || arg.toLowerCase().startsWith("-v") || arg + .toLowerCase() + .startsWith( + "-f"))) { + // Only allow valid option flags + System.out.println("Invalid argument: " + arg); + usage(); + System.exit(FAIL); + } + if (arg.toLowerCase().startsWith("-t")) { + if (cmdCode == DEFAULT) { + cmdCode = TEST; + } else { + System.out.println("Invalid Options"); + usage(); + System.exit(FAIL); + } + } + if (arg.toLowerCase().startsWith("-s")) { + if (cmdCode == DEFAULT) { + cmdCode = SCAN; + } else { + System.out.println("Invalid Options"); + usage(); + System.exit(FAIL); + } + } + if (arg.toLowerCase().startsWith("-i")) { + // Interactive can be specified with any + // other option - it turns on the query + // on fail mode. + cmdCode = cmdCode | INTERACTIVE; + } + if (arg.toLowerCase().startsWith("-f")) { + i++; + inFile = arguments[i]; + USERFILE = true; + } + if (arg.startsWith("-v")) { + // Verbose level can be increased to print + // more INFO messages. + VERBOSE += 1; + } + if (arg.startsWith("-V")) { + System.out.println(copyright); + System.out.println("CheckTools, " + version); + System.exit(PASS); + } + } + } + + if (inFile.length() < 1) { + // + // Check the target.txt file for a Tool Configuration File. + // If not set, we use tools_def.txt, unless we are running with the + // INTERACTIVE flag - where we check the template file before copying over to the + // tools_def.txt file. + // + inFile = "tools_def.txt"; + File target = new File(targetTxt); + String readLine = null; + String fileLine[] = new String[2]; + if (target.exists()) { + try { + FileReader fileReader = new FileReader(targetTxt); + BufferedReader bufReader = new BufferedReader(fileReader); + while ((readLine = bufReader.readLine()) != null) { + if (readLine.startsWith("TOOL_CHAIN_CONF")) { + fileLine = readLine.trim().split("="); + if (fileLine[1].trim().length() > 0) { + if (fileLine[1].trim().contains("Tools/Conf/")) + inFile = fileLine[1].replace("Tools/Conf/", "").trim(); + else + inFile = fileLine[1].trim(); + } + } + } + bufReader.close(); + } catch (IOException e) { + System.out.println(" [target.txt] Read Error: " + e); + System.exit(FAIL); + } + } + } + + // OK, now check the infile of we had one. + String toolsDef = WORKSPACE + SEP + "Tools" + SEP + "Conf" + SEP + inFile; + File toolsFile = new File(toolsDef); + if (!toolsFile.exists()) { + // use the template file + if (USERFILE) { + System.out.println("Could not locate the specified file: " + inFile); + System.out.println(" It must be located in the WORKSPACE" + SEP + "Tools" + SEP + "Conf directory"); + System.exit(FAIL); + } + toolsDef = WORKSPACE + SEP + "Tools" + SEP + "Conf" + SEP + "tools_def.template"; + File toolsTemplate = new File(toolsDef); + if (!toolsTemplate.exists()) { + System.out.println("Your WORKSPACE is not properly configured!"); + System.exit(FAIL); + } else { + System.out.println("**** WARNING: No Tool Configuration File was found, using the template file, " + + toolsDef); + } + } + + // + // at this point the file, toolsDef points to a tool configuration file of some sort. + // + // check tool configuration file + if (DEBUG > 2) + System.out.println("Calling checkTools(" + toolsDef + ", " + cmdCode + ", " + VERBOSE + ")"); + returnCode = new ToolChecks().checkTools(toolsDef, cmdCode, VERBOSE); + + return returnCode; + } + + private void usage() { + System.out.println("Usage: checkTools [-i] [-s | -scan] [-t | -test] [[-f | -filename] filename.txt]"); + } +} diff --git a/Tools/Java/Source/CheckTools/src/org/tianocore/CheckTools/ToolChecks.java b/Tools/Java/Source/CheckTools/src/org/tianocore/CheckTools/ToolChecks.java new file mode 100644 index 0000000000..0c0c936595 --- /dev/null +++ b/Tools/Java/Source/CheckTools/src/org/tianocore/CheckTools/ToolChecks.java @@ -0,0 +1,159 @@ +/** @file + Verify the tool configuration file for location of the correct tools. + + Copyright (c) 2006, Intel Corporation + All rights reserved. This program and the accompanying materials + are licensed and made available under the terms and conditions of the BSD License + which accompanies this distribution. The full text of the license may be found at + http://opensource.org/licenses/bsd-license.php + + THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS, + WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED. + + **/ + +/** + * This tool checks to see if specified tool chain paths exist. + * It will check all specified paths, as indicated by the last field of the + * tool property line equal to _PATH + * + * no option = check 1) the file specified in target.txt or 2) tools_def.txt + * if neither is found, we check the tools_def.template file. + * -i = INIT checks the tools_def.template file + * + * -s = SCAN will check all standard locations for tool chains + * C:\Program Files\Microsoft Visual Studio * + * C:\WINDDK + * C:\Bin + * C:\ASL + * C:\MASM* + * /opt/tiano + * + * -f = FILE check the tools in this file instead of tools_def.txt, or + * a file that was specified in target.txt + */ +package org.tianocore.CheckTools; + +import java.io.*; +import java.util.*; + +public class ToolChecks { + private static int DEBUG = 0; + + private final int DEFAULT = 1; + + private final int TEST = 2; + + private final int SCAN = 4; + + private final int INTERACTIVE = 8; + + private final int PASS = 0; + + private final int FAIL = 1; + + private ArrayList errLog = new ArrayList(); + + private ArrayList goodLog = new ArrayList(); + + public int checkTools(String toolConfFile, int cmdCode, int VERBOSE) { + + int returnCode = FAIL; + boolean interActive = false; + + if ((DEBUG > 0) || (VERBOSE > 0)) { + System.out.println("Using Tool Configuration File: " + toolConfFile); + } + + if (DEBUG > 2) + System.out.println("The cmdCode: " + cmdCode); + + if ((cmdCode & INTERACTIVE) == INTERACTIVE) { + interActive = true; + System.out.println("***** WARNING ***** The Interactive function has not been implemented yet!"); + } + + if ((cmdCode & SCAN) == SCAN) { + returnCode = scanFile(toolConfFile, interActive, VERBOSE); + } + + if (((cmdCode & TEST) == TEST) || ((cmdCode & DEFAULT) == DEFAULT)) + returnCode = testFile(toolConfFile, interActive, VERBOSE); + + if (!errLog.isEmpty()) { + System.out.println("Tool Configuration File: " + toolConfFile); + for (int i = 0; i < goodLog.size(); i++) + System.out.println("Tool Chain Tag Name: " + goodLog.get(i) + " is valid!"); + for (int i = 0; i < errLog.size(); i++) + System.out.println(errLog.get(i)); + } + + return returnCode; + } + + private int scanFile(String testFile, boolean interActive, int VERBOSE) { + if ((DEBUG > 0) || (VERBOSE > 0)) + System.out.println("Scanning the Normal Installation Locations ..."); + System.out.println("The Scan function has not been implemented yet!"); + return FAIL; + } + private int testFile(String testFile, boolean interActive, int VERBOSE) { + + int retCode = PASS; + String readLine = ""; + String fileLine[] = new String[2]; + try { + FileReader toolConfFile = new FileReader(testFile); + BufferedReader reader = new BufferedReader(toolConfFile); + String path = ""; + String props[] = new String[5]; + String lastErrTag = "barf"; + String lastTag = "barf"; + while ((readLine = reader.readLine()) != null) { + if ((!readLine.startsWith("#")) && (readLine.contains("_PATH"))) { + if (DEBUG > 2) { + System.out.println(" PATH LINE: " + readLine); + } + readLine = readLine.trim(); + fileLine = readLine.split("="); + path = fileLine[1].trim(); + props = fileLine[0].split("_"); + File testPath = new File(path); + if (!testPath.exists()) { + if (!props[1].trim().contentEquals(lastErrTag)) + errLog.add(" -- ERROR: Tool Chain Tag Name: " + props[1].trim() + " is invalid!"); + // System.out.println(" +++++ ERROR: Tool Chain: " + props[1].trim() + " is invalid!"); + errLog.add(" Tool Code: [" + props[3].trim() + "] Path: " + path + " does not exist!"); + // System.out.println(" Tool: " + props[3].trim() + " Path: " + path + " does not exist!"); + retCode = 1; + lastErrTag = props[1].trim(); + } else { + if ((DEBUG > 0) || (VERBOSE > 0)) { + if ((!props[1].trim().contentEquals(lastTag)) + && (!props[1].trim().contentEquals(lastErrTag))) + System.out.println("Tool Chain: " + props[1].trim() + " is valid"); + } + if (!props[1].trim().contentEquals(lastTag)) + goodLog.add(props[1].trim()); + lastTag = props[1].trim(); + } + } + } + } catch (IOException e) { + System.out.println(" [" + testFile + "] " + e); + System.exit(1); + } + if (errLog.size() > 0) + for (int i = 0; i < goodLog.size(); i++) { + for (int j = 0; j < errLog.size(); j++) { + if (errLog.get(j).contains(goodLog.get(i).trim())) { + goodLog.remove(i); + break; + } + } + } + return retCode; + + } + +} diff --git a/Tools/bin/ckt.bat b/Tools/bin/ckt.bat new file mode 100644 index 0000000000..2379dd3b46 --- /dev/null +++ b/Tools/bin/ckt.bat @@ -0,0 +1,73 @@ +@REM +@REM Copyright (c) 2006, Intel Corporation +@REM All rights reserved. This program and the accompanying materials +@REM are licensed and made available under the terms and conditions of the BSD License +@REM which accompanies this distribution. The full text of the license may be found at +@REM http://opensource.org/licenses/bsd-license.php +@REM +@REM THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS, +@REM WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED. +@REM + +@echo off + +:check_java +if "%JAVA_HOME%"=="" goto no_jdk +:check_wks +if "%WORKSPACE%"=="" goto no_wks +:check_ant +if "%ANT_HOME%"=="" goto no_ant +:check_xmlbeans +if "%XMLBEANS_HOME%"=="" goto no_xmlbeans +:check_surfacearea +if not exist %WORKSPACE%\Tools\Jars\SurfaceArea.jar ( + goto no_surfacearea +) +:check_CheckTools +if not exist %WORKSPACE%\Tools\bin\CheckTools.jar ( + goto no_CheckTools +) + +@REM Run Framework Wizard +call "java" -cp %WORKSPACE%\Tools\bin\CheckTools.jar org.tianocore.CheckTools.CheckTools %* + +goto end + +:no_jdk +@echo. +@echo !!! Please set JAVA_HOME !!! +@echo. +goto check_wks + +:no_wks +@echo. +@echo !!! Please set WORKSPACE !!! +@echo. +goto check_ant + +:no_ant +@echo. +@echo !!! Please set ANT_HOME !!! +@echo. +goto check_xmlbeans + +:no_xmlbeans +@echo. +@echo !!! Please set XMLBEANS_HOME !!! +@echo. +goto end + +:no_surfacearea +@echo. +@echo !!! Please run edksetup.bat to build SurfaceArea.jar !!! +@echo. +goto end + +:no_CheckTools +@echo. +@echo !!! Please run edksetup.bat to build CheckTools.jar !!! +@echo. +goto end + +:end +@echo on