From 4234283c3acb8c35014acc1546621fbc2621b095 Mon Sep 17 00:00:00 2001 From: lgao4 Date: Fri, 26 Aug 2011 07:46:26 +0000 Subject: Sync BaseTools Branch (version r2271) to EDKII main trunk. BaseTool Branch: https://edk2-buildtools.svn.sourceforge.net/svnroot/edk2-buildtools/branches/Releases/BaseTools_r2100 Signed-off-by: lgao4 Reviewed-by: hchen30 git-svn-id: https://edk2.svn.sourceforge.net/svnroot/edk2/trunk/edk2@12214 6f19259b-4bc3-4df7-8a09-765794883524 --- .../UPT/Object/Parser/InfUserExtensionObject.py | 133 +++++++++++++++++++++ 1 file changed, 133 insertions(+) create mode 100644 BaseTools/Source/Python/UPT/Object/Parser/InfUserExtensionObject.py (limited to 'BaseTools/Source/Python/UPT/Object/Parser/InfUserExtensionObject.py') diff --git a/BaseTools/Source/Python/UPT/Object/Parser/InfUserExtensionObject.py b/BaseTools/Source/Python/UPT/Object/Parser/InfUserExtensionObject.py new file mode 100644 index 0000000000..d576cffbd0 --- /dev/null +++ b/BaseTools/Source/Python/UPT/Object/Parser/InfUserExtensionObject.py @@ -0,0 +1,133 @@ +## @file +# This file is used to define class objects of INF file [UserExtension] section. +# It will consumed by InfParser. +# +# Copyright (c) 2011, 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. + +''' +InfUserExtensionsObject +''' + +from Logger import StringTable as ST +from Logger import ToolError +import Logger.Log as Logger +from Library import GlobalData + +from Library.Misc import Sdict + +class InfUserExtensionItem(): + def __init__(self, + Content = '', + UserId = '', + IdString = ''): + self.Content = Content + self.UserId = UserId + self.IdString = IdString + self.SupArchList = [] + + def SetContent(self, Content): + self.Content = Content + def GetContent(self): + return self.Content + + def SetUserId(self, UserId): + self.UserId = UserId + def GetUserId(self): + return self.UserId + + def SetIdString(self, IdString): + self.IdString = IdString + def GetIdString(self): + return self.IdString + + def SetSupArchList(self, SupArchList): + self.SupArchList = SupArchList + def GetSupArchList(self): + return self.SupArchList + +## +# +# +# +class InfUserExtensionObject(): + def __init__(self): + self.UserExtension = Sdict() + + def SetUserExtension(self, UserExtensionCont, IdContent=None, LineNo=None): + if not UserExtensionCont or UserExtensionCont == '': + return True + # + # IdContent is a list contain UserId and IdString + # For this call the general section header parser, if no definition of + # IdString/UserId, it will return 'COMMON' + # + for IdContentItem in IdContent: + InfUserExtensionItemObj = InfUserExtensionItem() + if IdContentItem[0] == 'COMMON': + UserId = '' + else: + UserId = IdContentItem[0] + + if IdContentItem[1] == 'COMMON': + IdString = '' + else: + IdString = IdContentItem[1] + + # + # Fill UserExtensionObj members. + # + InfUserExtensionItemObj.SetUserId(UserId) + InfUserExtensionItemObj.SetIdString(IdString) + InfUserExtensionItemObj.SetContent(UserExtensionCont) + InfUserExtensionItemObj.SetSupArchList(IdContentItem[2]) + + for CheckItem in self.UserExtension: + if IdContentItem[0] == CheckItem[0] and IdContentItem[1] == CheckItem[1]: + if IdContentItem[2].upper() == 'COMMON' or CheckItem[2].upper() == 'COMMON': + # + # For COMMON ARCH type, do special check. + # + Logger.Error('InfParser', + ToolError.FORMAT_INVALID, + ST.ERR_INF_PARSER_UE_SECTION_DUPLICATE_ERROR%\ + (IdContentItem[0] + '.' + IdContentItem[1] + '.' + IdContentItem[2]), + File=GlobalData.gINF_MODULE_NAME, + Line=LineNo, + ExtraData=None) + + if self.UserExtension.has_key(IdContentItem): + # + # Each UserExtensions section header must have a unique set + # of UserId, IdString and Arch values. + # This means that the same UserId can be used in more than one + # section header, provided the IdString or Arch values are + # different. The same IdString values can be used in more than + # one section header if the UserId or Arch values are + # different. The same UserId and the same IdString can be used + # in a section header if the Arch values are different in each + # of the section headers. + # + Logger.Error('InfParser', + ToolError.FORMAT_INVALID, + ST.ERR_INF_PARSER_UE_SECTION_DUPLICATE_ERROR%\ + (IdContentItem[0] + '.' + IdContentItem[1] + '.' + IdContentItem[2]), + File=GlobalData.gINF_MODULE_NAME, + Line=LineNo, + ExtraData=None) + else: + UserExtensionList = [] + UserExtensionList.append(InfUserExtensionItemObj) + self.UserExtension[IdContentItem] = UserExtensionList + + return True + + def GetUserExtension(self): + return self.UserExtension \ No newline at end of file -- cgit v1.2.3