BaseTool/Upt: Add support for Private

Support new syntax in package DEC file as below:
[Includes.Common.Private]
[Ppis.Common.Private]
[Guids.Common.Private]
[Protocols.Common.Private]

Contributed-under: TianoCore Contribution Agreement 1.0
Signed-off-by: Hess Chen <hesheng.chen@intel.com>
Reviewed-by: Yonghong Zhu <yonghong.zhu@intel.com>
This commit is contained in:
Hess Chen
2016-07-29 10:30:56 +08:00
committed by Yonghong Zhu
parent 6cf9903481
commit 645a51287e
5 changed files with 52 additions and 13 deletions

View File

@ -2,7 +2,7 @@
# #
# This file contained the logical of transfer package object to DEC files. # This file contained the logical of transfer package object to DEC files.
# #
# Copyright (c) 2011 - 2014, Intel Corporation. All rights reserved.<BR> # Copyright (c) 2011 - 2016, Intel Corporation. All rights reserved.<BR>
# #
# This program and the accompanying materials are licensed and made available # This program and the accompanying materials are licensed and made available
# under the terms and conditions of the BSD License which accompanies this # under the terms and conditions of the BSD License which accompanies this
@ -63,6 +63,7 @@ from Library.DataType import TAB_PCD_ERROR
from Library.DataType import TAB_SECTION_START from Library.DataType import TAB_SECTION_START
from Library.DataType import TAB_SECTION_END from Library.DataType import TAB_SECTION_END
from Library.DataType import TAB_SPLIT from Library.DataType import TAB_SPLIT
import Library.DataType as DT
from Library.UniClassObject import FormatUniEntry from Library.UniClassObject import FormatUniEntry
def GenPcd(Package, Content): def GenPcd(Package, Content):
@ -487,6 +488,12 @@ def PackageToDec(Package, DistHeader = None):
if UserExtension.GetUserID() == TAB_BINARY_HEADER_USERID and \ if UserExtension.GetUserID() == TAB_BINARY_HEADER_USERID and \
UserExtension.GetIdentifier() == TAB_BINARY_HEADER_IDENTIFIER: UserExtension.GetIdentifier() == TAB_BINARY_HEADER_IDENTIFIER:
continue continue
# Generate Private Section first
if UserExtension.GetUserID() == DT.TAB_INTEL and UserExtension.GetIdentifier() == DT.TAB_PRIVATE:
Content += '\n' + UserExtension.GetStatement()
continue
Statement = UserExtension.GetStatement() Statement = UserExtension.GetStatement()
if not Statement: if not Statement:
continue continue

View File

@ -1,7 +1,7 @@
## @file ## @file
# This file is used to define class for data type structure # This file is used to define class for data type structure
# #
# Copyright (c) 2011 - 2014, Intel Corporation. All rights reserved.<BR> # Copyright (c) 2011 - 2016, Intel Corporation. All rights reserved.<BR>
# #
# This program and the accompanying materials are licensed and made available # This program and the accompanying materials are licensed and made available
# under the terms and conditions of the BSD License which accompanies this # under the terms and conditions of the BSD License which accompanies this
@ -680,6 +680,8 @@ TAB_DEFINE = 'DEFINE'
TAB_NMAKE = 'Nmake' TAB_NMAKE = 'Nmake'
TAB_USER_EXTENSIONS = 'UserExtensions' TAB_USER_EXTENSIONS = 'UserExtensions'
TAB_INCLUDE = '!include' TAB_INCLUDE = '!include'
TAB_PRIVATE = 'Private'
TAB_INTEL = 'Intel'
# #
# Common Define # Common Define

View File

@ -328,11 +328,11 @@ class UniFileClassObject(object):
Lang = distutils.util.split_quoted((Line.split(u"//")[0])) Lang = distutils.util.split_quoted((Line.split(u"//")[0]))
if len(Lang) != 3: if len(Lang) != 3:
try: try:
FileIn = codecs.open(File.Path, mode='rb', encoding='utf_8').read() FileIn = codecs.open(File.Path, mode='rb', encoding='utf_8').readlines()
except UnicodeError, Xstr: except UnicodeError, Xstr:
FileIn = codecs.open(File.Path, mode='rb', encoding='utf_16').read() FileIn = codecs.open(File.Path, mode='rb', encoding='utf_16').readlines()
except UnicodeError, Xstr: except UnicodeError, Xstr:
FileIn = codecs.open(File.Path, mode='rb', encoding='utf_16_le').read() FileIn = codecs.open(File.Path, mode='rb', encoding='utf_16_le').readlines()
except: except:
EdkLogger.Error("Unicode File Parser", EdkLogger.Error("Unicode File Parser",
ToolError.FILE_OPEN_FAILURE, ToolError.FILE_OPEN_FAILURE,
@ -437,7 +437,7 @@ class UniFileClassObject(object):
# ExtraData='The file %s is either invalid UTF-16LE or it is missing the BOM.' % File.Path) # ExtraData='The file %s is either invalid UTF-16LE or it is missing the BOM.' % File.Path)
try: try:
FileIn = codecs.open(File.Path, mode='rb', encoding='utf_8').read() FileIn = codecs.open(File.Path, mode='rb', encoding='utf_8').readlines()
except UnicodeError, Xstr: except UnicodeError, Xstr:
FileIn = codecs.open(File.Path, mode='rb', encoding='utf_16').readlines() FileIn = codecs.open(File.Path, mode='rb', encoding='utf_16').readlines()
except UnicodeError: except UnicodeError:
@ -579,9 +579,9 @@ class UniFileClassObject(object):
# #
if Line.startswith(u'"'): if Line.startswith(u'"'):
if StringEntryExistsFlag == 2: if StringEntryExistsFlag == 2:
EdkLogger.Error("Unicode File Parser", ToolError.FORMAT_INVALID, EdkLogger.Error("Unicode File Parser", ToolError.FORMAT_INVALID,
Message=ST.ERR_UNIPARSE_LINEFEED_UP_EXIST % Line, ExtraData=File.Path) Message=ST.ERR_UNIPARSE_LINEFEED_UP_EXIST % Line, ExtraData=File.Path)
StringEntryExistsFlag = 1 StringEntryExistsFlag = 1
if not Line.endswith('"'): if not Line.endswith('"'):
EdkLogger.Error("Unicode File Parser", ToolError.FORMAT_INVALID, EdkLogger.Error("Unicode File Parser", ToolError.FORMAT_INVALID,
@ -589,7 +589,7 @@ class UniFileClassObject(object):
% (LineCount, File.Path)) % (LineCount, File.Path))
elif Line.startswith(u'#language'): elif Line.startswith(u'#language'):
if StringEntryExistsFlag == 2: if StringEntryExistsFlag == 2:
EdkLogger.Error("Unicode File Parser", ToolError.FORMAT_INVALID, EdkLogger.Error("Unicode File Parser", ToolError.FORMAT_INVALID,
Message=ST.ERR_UNI_MISS_STRING_ENTRY % Line, ExtraData=File.Path) Message=ST.ERR_UNI_MISS_STRING_ENTRY % Line, ExtraData=File.Path)
StringEntryExistsFlag = 0 StringEntryExistsFlag = 0
else: else:
@ -1050,7 +1050,7 @@ class UniFileClassObject(object):
ToolError.FILE_NOT_FOUND, ToolError.FILE_NOT_FOUND,
ExtraData=FilaPath) ExtraData=FilaPath)
try: try:
FileIn = codecs.open(FilaPath, mode='rb', encoding='utf_8').read() FileIn = codecs.open(FilaPath, mode='rb', encoding='utf_8').readlines()
except UnicodeError, Xstr: except UnicodeError, Xstr:
FileIn = codecs.open(FilaPath, mode='rb', encoding='utf_16').readlines() FileIn = codecs.open(FilaPath, mode='rb', encoding='utf_16').readlines()
except UnicodeError: except UnicodeError:

View File

@ -1,7 +1,7 @@
## @file ## @file
# This file is used to parse DEC file. It will consumed by DecParser # This file is used to parse DEC file. It will consumed by DecParser
# #
# Copyright (c) 2011 - 2014, Intel Corporation. All rights reserved.<BR> # Copyright (c) 2011 - 2016, Intel Corporation. All rights reserved.<BR>
# #
# This program and the accompanying materials are licensed and made available # This program and the accompanying materials are licensed and made available
# under the terms and conditions of the BSD License which accompanies this # under the terms and conditions of the BSD License which accompanies this
@ -742,7 +742,26 @@ class Dec(_DecBase, _DecComments):
except BaseException: except BaseException:
Logger.Error(TOOL_NAME, FILE_OPEN_FAILURE, File=DecFile, Logger.Error(TOOL_NAME, FILE_OPEN_FAILURE, File=DecFile,
ExtraData=ST.ERR_DECPARSE_FILEOPEN % DecFile) ExtraData=ST.ERR_DECPARSE_FILEOPEN % DecFile)
RawData = FileContent(DecFile, Content)
#
# Pre-parser for Private section
#
self._Private = ''
__IsFoundPrivate = False
NewContent = []
for Line in Content:
Line = Line.strip()
if Line.startswith(DT.TAB_SECTION_START) and Line.endswith(DT.TAB_PRIVATE + DT.TAB_SECTION_END):
__IsFoundPrivate = True
if Line.startswith(DT.TAB_SECTION_START) and Line.endswith(DT.TAB_SECTION_END)\
and not Line.endswith(DT.TAB_PRIVATE + DT.TAB_SECTION_END):
__IsFoundPrivate = False
if __IsFoundPrivate:
self._Private += Line + '\r'
if not __IsFoundPrivate:
NewContent.append(Line + '\r')
RawData = FileContent(DecFile, NewContent)
_DecComments.__init__(self) _DecComments.__init__(self)
_DecBase.__init__(self, RawData) _DecBase.__init__(self, RawData)
@ -1060,3 +1079,5 @@ class Dec(_DecBase, _DecComments):
return self._Define.GetDataObject().GetPackageVersion() return self._Define.GetDataObject().GetPackageVersion()
def GetPackageUniFile(self): def GetPackageUniFile(self):
return self._Define.GetDataObject().GetPackageUniFile() return self._Define.GetDataObject().GetPackageUniFile()
def GetPrivateSections(self):
return self._Private

View File

@ -1,7 +1,7 @@
## @file DecPomAlignment.py ## @file DecPomAlignment.py
# This file contained the adapter for convert INF parser object to POM Object # This file contained the adapter for convert INF parser object to POM Object
# #
# Copyright (c) 2011 - 2014, Intel Corporation. All rights reserved.<BR> # Copyright (c) 2011 - 2016, Intel Corporation. All rights reserved.<BR>
# #
# This program and the accompanying materials are licensed and made available # This program and the accompanying materials are licensed and made available
# under the terms and conditions of the BSD License which accompanies this # under the terms and conditions of the BSD License which accompanies this
@ -63,6 +63,7 @@ from Library.DataType import TAB_STR_TOKENHELP
from Library.DataType import TAB_STR_TOKENERR from Library.DataType import TAB_STR_TOKENERR
from Library.DataType import TAB_HEX_START from Library.DataType import TAB_HEX_START
from Library.DataType import TAB_SPLIT from Library.DataType import TAB_SPLIT
import Library.DataType as DT
from Library.CommentParsing import ParseHeaderCommentSection from Library.CommentParsing import ParseHeaderCommentSection
from Library.CommentParsing import ParseGenericComment from Library.CommentParsing import ParseGenericComment
from Library.CommentParsing import ParseDecPcdGenericComment from Library.CommentParsing import ParseDecPcdGenericComment
@ -221,6 +222,14 @@ class DecPomAlignment(PackageObject):
self.SetUserExtensionList( self.SetUserExtensionList(
self.GetUserExtensionList() + [UserExtension] self.GetUserExtensionList() + [UserExtension]
) )
# Add Private sections to UserExtension
if self.DecParser.GetPrivateSections():
PrivateUserExtension = UserExtensionObject()
PrivateUserExtension.SetStatement(self.DecParser.GetPrivateSections())
PrivateUserExtension.SetIdentifier(DT.TAB_PRIVATE)
PrivateUserExtension.SetUserID(DT.TAB_INTEL)
self.SetUserExtensionList(self.GetUserExtensionList() + [PrivateUserExtension])
## Generate miscellaneous files on DEC file ## Generate miscellaneous files on DEC file
# #