BaseTools: Ecc - add dict for config file to internal translation

Commit eece4292ac changed a variable name, which was tied directly to
a config file entry. This seperates the internal variable names from
the config file entries by having the internal dict accessed through a
translation of key words.

added a test when this is run straight from command line.

Cc: Liming Gao <liming.gao@intel.com>
Cc: Yonghong Zhu <yonghong.zhu@intel.com>
Cc: Laszlo Ersek <lersek@redhat.com>
Contributed-under: TianoCore Contribution Agreement 1.1
Signed-off-by: Jaben Carsey <jaben.carsey@intel.com>
Tested-by: Laszlo Ersek <lersek@redhat.com>
Reviewed-by: Laszlo Ersek <lersek@redhat.com>
Reviewed-by: Yonghong Zhu <yonghong.zhu@intel.com>
This commit is contained in:
Carsey, Jaben 2018-05-05 04:25:16 +08:00 committed by Yonghong Zhu
parent 8252e6bf2d
commit a4c35dedd9
1 changed files with 119 additions and 3 deletions

View File

@ -1,7 +1,7 @@
## @file ## @file
# This file is used to define class Configuration # This file is used to define class Configuration
# #
# Copyright (c) 2008 - 2017, Intel Corporation. All rights reserved.<BR> # Copyright (c) 2008 - 2018, Intel Corporation. All rights reserved.<BR>
# This program and the accompanying materials # This program and the accompanying materials
# are licensed and made available under the terms and conditions of the BSD License # 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 # which accompanies this distribution. The full text of the license may be found at
@ -20,6 +20,109 @@ from Common.DataType import *
from Common.String import * from Common.String import *
from Common.LongFilePathSupport import OpenLongFilePath as open from Common.LongFilePathSupport import OpenLongFilePath as open
_ConfigFileToInternalTranslation = {
# not same
"ModifierList":"ModifierSet",
# same
# please keep this in correct alphabetical order.
"AutoCorrect":"AutoCorrect",
"BinaryExtList":"BinaryExtList",
"CFunctionLayoutCheckAll":"CFunctionLayoutCheckAll",
"CFunctionLayoutCheckDataDeclaration":"CFunctionLayoutCheckDataDeclaration",
"CFunctionLayoutCheckFunctionBody":"CFunctionLayoutCheckFunctionBody",
"CFunctionLayoutCheckFunctionName":"CFunctionLayoutCheckFunctionName",
"CFunctionLayoutCheckFunctionPrototype":"CFunctionLayoutCheckFunctionPrototype",
"CFunctionLayoutCheckNoInitOfVariable":"CFunctionLayoutCheckNoInitOfVariable",
"CFunctionLayoutCheckNoStatic":"CFunctionLayoutCheckNoStatic",
"CFunctionLayoutCheckOptionalFunctionalModifier":"CFunctionLayoutCheckOptionalFunctionalModifier",
"CFunctionLayoutCheckReturnType":"CFunctionLayoutCheckReturnType",
"CheckAll":"CheckAll",
"Copyright":"Copyright",
"DeclarationDataTypeCheckAll":"DeclarationDataTypeCheckAll",
"DeclarationDataTypeCheckEFIAPIModifier":"DeclarationDataTypeCheckEFIAPIModifier",
"DeclarationDataTypeCheckEnumeratedType":"DeclarationDataTypeCheckEnumeratedType",
"DeclarationDataTypeCheckInOutModifier":"DeclarationDataTypeCheckInOutModifier",
"DeclarationDataTypeCheckNoUseCType":"DeclarationDataTypeCheckNoUseCType",
"DeclarationDataTypeCheckSameStructure":"DeclarationDataTypeCheckSameStructure",
"DeclarationDataTypeCheckStructureDeclaration":"DeclarationDataTypeCheckStructureDeclaration",
"DeclarationDataTypeCheckUnionType":"DeclarationDataTypeCheckUnionType",
"DoxygenCheckAll":"DoxygenCheckAll",
"DoxygenCheckCommand":"DoxygenCheckCommand",
"DoxygenCheckCommentDescription":"DoxygenCheckCommentDescription",
"DoxygenCheckCommentFormat":"DoxygenCheckCommentFormat",
"DoxygenCheckFileHeader":"DoxygenCheckFileHeader",
"DoxygenCheckFunctionHeader":"DoxygenCheckFunctionHeader",
"GeneralCheckAll":"GeneralCheckAll",
"GeneralCheckCarriageReturn":"GeneralCheckCarriageReturn",
"GeneralCheckFileExistence":"GeneralCheckFileExistence",
"GeneralCheckIndentation":"GeneralCheckIndentation",
"GeneralCheckIndentationWidth":"GeneralCheckIndentationWidth",
"GeneralCheckLine":"GeneralCheckLine",
"GeneralCheckLineWidth":"GeneralCheckLineWidth",
"GeneralCheckNoProgma":"GeneralCheckNoProgma",
"GeneralCheckNoTab":"GeneralCheckNoTab",
"GeneralCheckNo_Asm":"GeneralCheckNo_Asm",
"GeneralCheckNonAcsii":"GeneralCheckNonAcsii",
"GeneralCheckTabWidth":"GeneralCheckTabWidth",
"GeneralCheckUni":"GeneralCheckUni",
"HeaderCheckAll":"HeaderCheckAll",
"HeaderCheckCFileCommentLicenseFormat":"HeaderCheckCFileCommentLicenseFormat",
"HeaderCheckCFileCommentReferenceFormat":"HeaderCheckCFileCommentReferenceFormat",
"HeaderCheckCFileCommentStartSpacesNum":"HeaderCheckCFileCommentStartSpacesNum",
"HeaderCheckFile":"HeaderCheckFile",
"HeaderCheckFileCommentEnd":"HeaderCheckFileCommentEnd",
"HeaderCheckFunction":"HeaderCheckFunction",
"IncludeFileCheckAll":"IncludeFileCheckAll",
"IncludeFileCheckData":"IncludeFileCheckData",
"IncludeFileCheckIfndefStatement":"IncludeFileCheckIfndefStatement",
"IncludeFileCheckSameName":"IncludeFileCheckSameName",
"MetaDataFileCheckAll":"MetaDataFileCheckAll",
"MetaDataFileCheckBinaryInfInFdf":"MetaDataFileCheckBinaryInfInFdf",
"MetaDataFileCheckGenerateFileList":"MetaDataFileCheckGenerateFileList",
"MetaDataFileCheckGuidDuplicate":"MetaDataFileCheckGuidDuplicate",
"MetaDataFileCheckLibraryDefinedInDec":"MetaDataFileCheckLibraryDefinedInDec",
"MetaDataFileCheckLibraryInstance":"MetaDataFileCheckLibraryInstance",
"MetaDataFileCheckLibraryInstanceDependent":"MetaDataFileCheckLibraryInstanceDependent",
"MetaDataFileCheckLibraryInstanceOrder":"MetaDataFileCheckLibraryInstanceOrder",
"MetaDataFileCheckLibraryNoUse":"MetaDataFileCheckLibraryNoUse",
"MetaDataFileCheckModuleFileGuidDuplication":"MetaDataFileCheckModuleFileGuidDuplication",
"MetaDataFileCheckModuleFileGuidFormat":"MetaDataFileCheckModuleFileGuidFormat",
"MetaDataFileCheckModuleFileNoUse":"MetaDataFileCheckModuleFileNoUse",
"MetaDataFileCheckModuleFilePcdFormat":"MetaDataFileCheckModuleFilePcdFormat",
"MetaDataFileCheckModuleFilePpiFormat":"MetaDataFileCheckModuleFilePpiFormat",
"MetaDataFileCheckModuleFileProtocolFormat":"MetaDataFileCheckModuleFileProtocolFormat",
"MetaDataFileCheckPathName":"MetaDataFileCheckPathName",
"MetaDataFileCheckPathOfGenerateFileList":"MetaDataFileCheckPathOfGenerateFileList",
"MetaDataFileCheckPcdDuplicate":"MetaDataFileCheckPcdDuplicate",
"MetaDataFileCheckPcdFlash":"MetaDataFileCheckPcdFlash",
"MetaDataFileCheckPcdNoUse":"MetaDataFileCheckPcdNoUse",
"MetaDataFileCheckPcdType":"MetaDataFileCheckPcdType",
"NamingConventionCheckAll":"NamingConventionCheckAll",
"NamingConventionCheckDefineStatement":"NamingConventionCheckDefineStatement",
"NamingConventionCheckFunctionName":"NamingConventionCheckFunctionName",
"NamingConventionCheckIfndefStatement":"NamingConventionCheckIfndefStatement",
"NamingConventionCheckPathName":"NamingConventionCheckPathName",
"NamingConventionCheckSingleCharacterVariable":"NamingConventionCheckSingleCharacterVariable",
"NamingConventionCheckTypedefStatement":"NamingConventionCheckTypedefStatement",
"NamingConventionCheckVariableName":"NamingConventionCheckVariableName",
"PredicateExpressionCheckAll":"PredicateExpressionCheckAll",
"PredicateExpressionCheckBooleanValue":"PredicateExpressionCheckBooleanValue",
"PredicateExpressionCheckComparisonNullType":"PredicateExpressionCheckComparisonNullType",
"PredicateExpressionCheckNonBooleanOperator":"PredicateExpressionCheckNonBooleanOperator",
"ScanOnlyDirList":"ScanOnlyDirList",
"SkipDirList":"SkipDirList",
"SkipFileList":"SkipFileList",
"SmmCommParaCheckAll":"SmmCommParaCheckAll",
"SmmCommParaCheckBufferType":"SmmCommParaCheckBufferType",
"SpaceCheckAll":"SpaceCheckAll",
"SpellingCheckAll":"SpellingCheckAll",
"UniCheckAll":"UniCheckAll",
"UniCheckHelpInfo":"UniCheckHelpInfo",
"UniCheckPCDInfo":"UniCheckPCDInfo",
"Version":"Version"
}
## Configuration ## Configuration
# #
# This class is used to define all items in configuration file # This class is used to define all items in configuration file
@ -297,9 +400,10 @@ class Configuration(object):
Line = CleanString(Line) Line = CleanString(Line)
if Line != '': if Line != '':
List = GetSplitValueList(Line, TAB_EQUAL_SPLIT) List = GetSplitValueList(Line, TAB_EQUAL_SPLIT)
if List[0] not in self.__dict__: if List[0] not in _ConfigFileToInternalTranslation:
ErrorMsg = "Invalid configuration option '%s' was found" % List[0] ErrorMsg = "Invalid configuration option '%s' was found" % List[0]
EdkLogger.error("Ecc", EdkLogger.ECC_ERROR, ErrorMsg, File = Filepath, Line = LineNo) EdkLogger.error("Ecc", EdkLogger.ECC_ERROR, ErrorMsg, File = Filepath, Line = LineNo)
assert _ConfigFileToInternalTranslation[List[0]] in self.__dict__
if List[0] == 'ModifierList': if List[0] == 'ModifierList':
List[1] = GetSplitValueList(List[1], TAB_COMMA_SPLIT) List[1] = GetSplitValueList(List[1], TAB_COMMA_SPLIT)
if List[0] == 'MetaDataFileCheckPathOfGenerateFileList' and List[1] == "": if List[0] == 'MetaDataFileCheckPathOfGenerateFileList' and List[1] == "":
@ -312,9 +416,21 @@ class Configuration(object):
List[1] = GetSplitValueList(List[1], TAB_COMMA_SPLIT) List[1] = GetSplitValueList(List[1], TAB_COMMA_SPLIT)
if List[0] == 'Copyright': if List[0] == 'Copyright':
List[1] = GetSplitValueList(List[1], TAB_COMMA_SPLIT) List[1] = GetSplitValueList(List[1], TAB_COMMA_SPLIT)
self.__dict__[List[0]] = List[1] self.__dict__[_ConfigFileToInternalTranslation[List[0]]] = List[1]
def ShowMe(self): def ShowMe(self):
print self.Filename print self.Filename
for Key in self.__dict__.keys(): for Key in self.__dict__.keys():
print Key, '=', self.__dict__[Key] print Key, '=', self.__dict__[Key]
#
# test that our dict and out class still match in contents.
#
if __name__ == '__main__':
myconfig = Configuration("BaseTools\Source\Python\Ecc\config.ini")
for each in myconfig.__dict__:
if each == "Filename":
continue
assert each in _ConfigFileToInternalTranslation.values()
for each in _ConfigFileToInternalTranslation.values():
assert each in myconfig.__dict__