From 6780eef1f9ed0af24795708c3be7adafd7113691 Mon Sep 17 00:00:00 2001 From: lgao4 Date: Mon, 15 Nov 2010 02:51:34 +0000 Subject: Sync EDKII BaseTools to BaseTools project r2093. git-svn-id: https://edk2.svn.sourceforge.net/svnroot/edk2/trunk/edk2@11057 6f19259b-4bc3-4df7-8a09-765794883524 --- BaseTools/Source/Python/Common/DataType.py | 3 + BaseTools/Source/Python/Common/Misc.py | 91 ++++++++++++++++++++++++++- BaseTools/Source/Python/Common/Parsing.py | 66 +------------------ BaseTools/Source/Python/Common/VpdInfoFile.py | 4 +- 4 files changed, 96 insertions(+), 68 deletions(-) (limited to 'BaseTools/Source/Python/Common') diff --git a/BaseTools/Source/Python/Common/DataType.py b/BaseTools/Source/Python/Common/DataType.py index d9d1774e27..151f7bb1f3 100644 --- a/BaseTools/Source/Python/Common/DataType.py +++ b/BaseTools/Source/Python/Common/DataType.py @@ -22,6 +22,7 @@ TAB_EQUAL_SPLIT = '=' TAB_VALUE_SPLIT = '|' TAB_COMMA_SPLIT = ',' TAB_SPACE_SPLIT = ' ' +TAB_SEMI_COLON_SPLIT = ';' TAB_SECTION_START = '[' TAB_SECTION_END = ']' TAB_OPTION_START = '<' @@ -353,6 +354,8 @@ TAB_DSC_DEFINES_BUILD_NUMBER = 'BUILD_NUMBER' TAB_DSC_DEFINES_MAKEFILE_NAME = 'MAKEFILE_NAME' TAB_DSC_DEFINES_BS_BASE_ADDRESS = 'BsBaseAddress' TAB_DSC_DEFINES_RT_BASE_ADDRESS = 'RtBaseAddress' +TAB_DSC_DEFINES_RFC_LANGUAGES = 'RFC_LANGUAGES' +TAB_DSC_DEFINES_ISO_LANGUAGES = 'ISO_LANGUAGES' TAB_DSC_DEFINES_DEFINE = 'DEFINE' TAB_DSC_DEFINES_VPD_TOOL_GUID = 'VPD_TOOL_GUID' TAB_FIX_LOAD_TOP_MEMORY_ADDRESS = 'FIX_LOAD_TOP_MEMORY_ADDRESS' diff --git a/BaseTools/Source/Python/Common/Misc.py b/BaseTools/Source/Python/Common/Misc.py index e2dc5a5e52..7498d9e1ee 100644 --- a/BaseTools/Source/Python/Common/Misc.py +++ b/BaseTools/Source/Python/Common/Misc.py @@ -1,7 +1,7 @@ ## @file # Common routines used by all tools # -# Copyright (c) 2007, Intel Corporation. All rights reserved.
+# Copyright (c) 2007 - 2010, 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 @@ -28,7 +28,7 @@ from UserList import UserList from Common import EdkLogger as EdkLogger from Common import GlobalData as GlobalData - +from DataType import * from BuildToolError import * ## Regular expression used to find out place holders in string template @@ -1166,6 +1166,93 @@ def ParseConsoleLog(Filename): Opr.close() Opw.close() +## AnalyzePcdData +# +# Analyze the pcd Value, Datum type and TokenNumber. +# Used to avoid split issue while the value string contain "|" character +# +# @param[in] Setting: A String contain value/datum type/token number information; +# +# @retval ValueList: A List contain value, datum type and toke number. +# +def AnalyzePcdData(Setting): + ValueList = ['', '', ''] + + ValueRe = re.compile(r'^\s*L?\".*\|.*\"') + PtrValue = ValueRe.findall(Setting) + + ValueUpdateFlag = False + + if len(PtrValue) >= 1: + Setting = re.sub(ValueRe, '', Setting) + ValueUpdateFlag = True + + TokenList = Setting.split(TAB_VALUE_SPLIT) + ValueList[0:len(TokenList)] = TokenList + + if ValueUpdateFlag: + ValueList[0] = PtrValue[0] + + return ValueList + +## AnalyzeHiiPcdData +# +# Analyze the pcd Value, variable name, variable Guid and variable offset. +# Used to avoid split issue while the value string contain "|" character +# +# @param[in] Setting: A String contain VariableName, VariableGuid, VariableOffset, DefaultValue information; +# +# @retval ValueList: A List contaian VariableName, VariableGuid, VariableOffset, DefaultValue. +# +def AnalyzeHiiPcdData(Setting): + ValueList = ['', '', '', ''] + + ValueRe = re.compile(r'^\s*L?\".*\|.*\"') + PtrValue = ValueRe.findall(Setting) + + ValueUpdateFlag = False + + if len(PtrValue) >= 1: + Setting = re.sub(ValueRe, '', Setting) + ValueUpdateFlag = True + + TokenList = Setting.split(TAB_VALUE_SPLIT) + ValueList[0:len(TokenList)] = TokenList + + if ValueUpdateFlag: + ValueList[0] = PtrValue[0] + + return ValueList + +## AnalyzeVpdPcdData +# +# Analyze the vpd pcd Value, Datum type and TokenNumber. +# Used to avoid split issue while the value string contain "|" character +# +# @param[in] Setting: A String contain value/datum type/token number information; +# +# @retval ValueList: A List contain value, datum type and toke number. +# +def AnalyzeVpdPcdData(Setting): + ValueList = ['', '', ''] + + ValueRe = re.compile(r'\s*L?\".*\|.*\"\s*$') + PtrValue = ValueRe.findall(Setting) + + ValueUpdateFlag = False + + if len(PtrValue) >= 1: + Setting = re.sub(ValueRe, '', Setting) + ValueUpdateFlag = True + + TokenList = Setting.split(TAB_VALUE_SPLIT) + ValueList[0:len(TokenList)] = TokenList + + if ValueUpdateFlag: + ValueList[2] = PtrValue[0] + + return ValueList + ## check format of PCD value against its the datum type # # For PCD value setting diff --git a/BaseTools/Source/Python/Common/Parsing.py b/BaseTools/Source/Python/Common/Parsing.py index ce1e60338e..5bea6941fd 100644 --- a/BaseTools/Source/Python/Common/Parsing.py +++ b/BaseTools/Source/Python/Common/Parsing.py @@ -18,70 +18,6 @@ from String import * from CommonDataClass.DataClass import * from DataType import * -## ParseContent -# -# Parse content of a DSC/INF/DEC file -# -def ParseContent(Lines, ): - for Line in Lines: - LineNo = LineNo + 1 - # - # Remove comments at tail and remove spaces again - # - Line = CleanString(Line) - if Line == '': - continue - - # - # Find a new section tab - # First insert previous section items - # And then parse the content of the new section - # - if Line.startswith(TAB_SECTION_START) and Line.endswith(TAB_SECTION_END): - # - # Insert items data of previous section - # - self.InsertSectionItemsIntoDatabase(FileID, Filename, CurrentSection, SectionItemList, ArchList, ThirdList, IfDefList) - # - # Parse the new section - # - SectionItemList = [] - ArchList = [] - ThirdList = [] - - LineList = GetSplitValueList(Line[len(TAB_SECTION_START):len(Line) - len(TAB_SECTION_END)], TAB_COMMA_SPLIT) - for Item in LineList: - ItemList = GetSplitValueList(Item, TAB_SPLIT) - CurrentSection = ItemList[0] - if CurrentSection.upper() not in self.KeyList: - RaiseParserError(Line, CurrentSection, Filename, '', LineNo) - ItemList.append('') - ItemList.append('') - if len(ItemList) > 5: - RaiseParserError(Line, CurrentSection, Filename, '', LineNo) - else: - if ItemList[1] != '' and ItemList[1].upper() not in ARCH_LIST_FULL: - EdkLogger.error("Parser", PARSER_ERROR, "Invalid Arch definition '%s' found" % ItemList[1], File=Filename, Line=LineNo) - ArchList.append(ItemList[1].upper()) - ThirdList.append(ItemList[2]) - - continue - - # - # Not in any defined section - # - if CurrentSection == TAB_UNKNOWN: - ErrorMsg = "%s is not in any defined section" % Line - EdkLogger.error("Parser", PARSER_ERROR, ErrorMsg, File=Filename, Line=LineNo) - - # - # Add a section item - # - SectionItemList.append([Line, LineNo]) - # End of parse - #End of For - - ## ParseDefineMacro # # Search whole table to find all defined Macro and replaced them with the real values @@ -940,4 +876,4 @@ def GenMetaDatSectionItem(Key, Value, List): if Key not in List: List[Key] = [Value] else: - List[Key].append(Value) \ No newline at end of file + List[Key].append(Value) diff --git a/BaseTools/Source/Python/Common/VpdInfoFile.py b/BaseTools/Source/Python/Common/VpdInfoFile.py index 5f92fa5cdd..207cc8735b 100644 --- a/BaseTools/Source/Python/Common/VpdInfoFile.py +++ b/BaseTools/Source/Python/Common/VpdInfoFile.py @@ -135,7 +135,9 @@ class VpdInfoFile: fd.write(FILE_COMMENT_TEMPLATE) # write each of PCD in VPD type - for Pcd in self._VpdArray.keys(): + Pcds = self._VpdArray.keys() + Pcds.sort() + for Pcd in Pcds: for Offset in self._VpdArray[Pcd]: PcdValue = str(Pcd.SkuInfoList[Pcd.SkuInfoList.keys()[0]].DefaultValue).strip() if PcdValue == "" : -- cgit v1.2.3