## @file\r
# This file is used to define class Configuration\r
#\r
-# Copyright (c) 2008 - 2014, Intel Corporation. All rights reserved.<BR>\r
+# Copyright (c) 2008 - 2018, Intel Corporation. All rights reserved.<BR>\r
# This program and the accompanying materials\r
# are licensed and made available under the terms and conditions of the BSD License\r
# which accompanies this distribution. The full text of the license may be found at\r
##\r
# Import Modules\r
#\r
+from __future__ import print_function\r
import Common.LongFilePathOs as os\r
import Common.EdkLogger as EdkLogger\r
from Common.DataType import *\r
-from Common.String import *\r
+from Common.StringUtils import *\r
from Common.LongFilePathSupport import OpenLongFilePath as open\r
\r
+_ConfigFileToInternalTranslation = {\r
+ # not same\r
+ "ModifierList":"ModifierSet",\r
+\r
+ # same\r
+ # please keep this in correct alphabetical order.\r
+ "AutoCorrect":"AutoCorrect",\r
+ "BinaryExtList":"BinaryExtList",\r
+ "CFunctionLayoutCheckAll":"CFunctionLayoutCheckAll",\r
+ "CFunctionLayoutCheckDataDeclaration":"CFunctionLayoutCheckDataDeclaration",\r
+ "CFunctionLayoutCheckFunctionBody":"CFunctionLayoutCheckFunctionBody",\r
+ "CFunctionLayoutCheckFunctionName":"CFunctionLayoutCheckFunctionName",\r
+ "CFunctionLayoutCheckFunctionPrototype":"CFunctionLayoutCheckFunctionPrototype",\r
+ "CFunctionLayoutCheckNoInitOfVariable":"CFunctionLayoutCheckNoInitOfVariable",\r
+ "CFunctionLayoutCheckNoStatic":"CFunctionLayoutCheckNoStatic",\r
+ "CFunctionLayoutCheckOptionalFunctionalModifier":"CFunctionLayoutCheckOptionalFunctionalModifier",\r
+ "CFunctionLayoutCheckReturnType":"CFunctionLayoutCheckReturnType",\r
+ "CheckAll":"CheckAll",\r
+ "Copyright":"Copyright",\r
+ "DeclarationDataTypeCheckAll":"DeclarationDataTypeCheckAll",\r
+ "DeclarationDataTypeCheckEFIAPIModifier":"DeclarationDataTypeCheckEFIAPIModifier",\r
+ "DeclarationDataTypeCheckEnumeratedType":"DeclarationDataTypeCheckEnumeratedType",\r
+ "DeclarationDataTypeCheckInOutModifier":"DeclarationDataTypeCheckInOutModifier",\r
+ "DeclarationDataTypeCheckNoUseCType":"DeclarationDataTypeCheckNoUseCType",\r
+ "DeclarationDataTypeCheckSameStructure":"DeclarationDataTypeCheckSameStructure",\r
+ "DeclarationDataTypeCheckStructureDeclaration":"DeclarationDataTypeCheckStructureDeclaration",\r
+ "DeclarationDataTypeCheckUnionType":"DeclarationDataTypeCheckUnionType",\r
+ "DoxygenCheckAll":"DoxygenCheckAll",\r
+ "DoxygenCheckCommand":"DoxygenCheckCommand",\r
+ "DoxygenCheckCommentDescription":"DoxygenCheckCommentDescription",\r
+ "DoxygenCheckCommentFormat":"DoxygenCheckCommentFormat",\r
+ "DoxygenCheckFileHeader":"DoxygenCheckFileHeader",\r
+ "DoxygenCheckFunctionHeader":"DoxygenCheckFunctionHeader",\r
+ "GeneralCheckAll":"GeneralCheckAll",\r
+ "GeneralCheckCarriageReturn":"GeneralCheckCarriageReturn",\r
+ "GeneralCheckFileExistence":"GeneralCheckFileExistence",\r
+ "GeneralCheckIndentation":"GeneralCheckIndentation",\r
+ "GeneralCheckIndentationWidth":"GeneralCheckIndentationWidth",\r
+ "GeneralCheckLine":"GeneralCheckLine",\r
+ "GeneralCheckLineWidth":"GeneralCheckLineWidth",\r
+ "GeneralCheckNoProgma":"GeneralCheckNoProgma",\r
+ "GeneralCheckNoTab":"GeneralCheckNoTab",\r
+ "GeneralCheckNo_Asm":"GeneralCheckNo_Asm",\r
+ "GeneralCheckNonAcsii":"GeneralCheckNonAcsii",\r
+ "GeneralCheckTabWidth":"GeneralCheckTabWidth",\r
+ "GeneralCheckUni":"GeneralCheckUni",\r
+ "HeaderCheckAll":"HeaderCheckAll",\r
+ "HeaderCheckCFileCommentLicenseFormat":"HeaderCheckCFileCommentLicenseFormat",\r
+ "HeaderCheckCFileCommentReferenceFormat":"HeaderCheckCFileCommentReferenceFormat",\r
+ "HeaderCheckCFileCommentStartSpacesNum":"HeaderCheckCFileCommentStartSpacesNum",\r
+ "HeaderCheckFile":"HeaderCheckFile",\r
+ "HeaderCheckFileCommentEnd":"HeaderCheckFileCommentEnd",\r
+ "HeaderCheckFunction":"HeaderCheckFunction",\r
+ "IncludeFileCheckAll":"IncludeFileCheckAll",\r
+ "IncludeFileCheckData":"IncludeFileCheckData",\r
+ "IncludeFileCheckIfndefStatement":"IncludeFileCheckIfndefStatement",\r
+ "IncludeFileCheckSameName":"IncludeFileCheckSameName",\r
+ "MetaDataFileCheckAll":"MetaDataFileCheckAll",\r
+ "MetaDataFileCheckBinaryInfInFdf":"MetaDataFileCheckBinaryInfInFdf",\r
+ "MetaDataFileCheckGenerateFileList":"MetaDataFileCheckGenerateFileList",\r
+ "MetaDataFileCheckGuidDuplicate":"MetaDataFileCheckGuidDuplicate",\r
+ "MetaDataFileCheckLibraryDefinedInDec":"MetaDataFileCheckLibraryDefinedInDec",\r
+ "MetaDataFileCheckLibraryInstance":"MetaDataFileCheckLibraryInstance",\r
+ "MetaDataFileCheckLibraryInstanceDependent":"MetaDataFileCheckLibraryInstanceDependent",\r
+ "MetaDataFileCheckLibraryInstanceOrder":"MetaDataFileCheckLibraryInstanceOrder",\r
+ "MetaDataFileCheckLibraryNoUse":"MetaDataFileCheckLibraryNoUse",\r
+ "MetaDataFileCheckModuleFileGuidDuplication":"MetaDataFileCheckModuleFileGuidDuplication",\r
+ "MetaDataFileCheckModuleFileGuidFormat":"MetaDataFileCheckModuleFileGuidFormat",\r
+ "MetaDataFileCheckModuleFileNoUse":"MetaDataFileCheckModuleFileNoUse",\r
+ "MetaDataFileCheckModuleFilePcdFormat":"MetaDataFileCheckModuleFilePcdFormat",\r
+ "MetaDataFileCheckModuleFilePpiFormat":"MetaDataFileCheckModuleFilePpiFormat",\r
+ "MetaDataFileCheckModuleFileProtocolFormat":"MetaDataFileCheckModuleFileProtocolFormat",\r
+ "MetaDataFileCheckPathName":"MetaDataFileCheckPathName",\r
+ "MetaDataFileCheckPathOfGenerateFileList":"MetaDataFileCheckPathOfGenerateFileList",\r
+ "MetaDataFileCheckPcdDuplicate":"MetaDataFileCheckPcdDuplicate",\r
+ "MetaDataFileCheckPcdFlash":"MetaDataFileCheckPcdFlash",\r
+ "MetaDataFileCheckPcdNoUse":"MetaDataFileCheckPcdNoUse",\r
+ "MetaDataFileCheckPcdType":"MetaDataFileCheckPcdType",\r
+ "NamingConventionCheckAll":"NamingConventionCheckAll",\r
+ "NamingConventionCheckDefineStatement":"NamingConventionCheckDefineStatement",\r
+ "NamingConventionCheckFunctionName":"NamingConventionCheckFunctionName",\r
+ "NamingConventionCheckIfndefStatement":"NamingConventionCheckIfndefStatement",\r
+ "NamingConventionCheckPathName":"NamingConventionCheckPathName",\r
+ "NamingConventionCheckSingleCharacterVariable":"NamingConventionCheckSingleCharacterVariable",\r
+ "NamingConventionCheckTypedefStatement":"NamingConventionCheckTypedefStatement",\r
+ "NamingConventionCheckVariableName":"NamingConventionCheckVariableName",\r
+ "PredicateExpressionCheckAll":"PredicateExpressionCheckAll",\r
+ "PredicateExpressionCheckBooleanValue":"PredicateExpressionCheckBooleanValue",\r
+ "PredicateExpressionCheckComparisonNullType":"PredicateExpressionCheckComparisonNullType",\r
+ "PredicateExpressionCheckNonBooleanOperator":"PredicateExpressionCheckNonBooleanOperator",\r
+ "ScanOnlyDirList":"ScanOnlyDirList",\r
+ "SkipDirList":"SkipDirList",\r
+ "SkipFileList":"SkipFileList",\r
+ "SmmCommParaCheckAll":"SmmCommParaCheckAll",\r
+ "SmmCommParaCheckBufferType":"SmmCommParaCheckBufferType",\r
+ "SpaceCheckAll":"SpaceCheckAll",\r
+ "SpellingCheckAll":"SpellingCheckAll",\r
+ "UniCheckAll":"UniCheckAll",\r
+ "UniCheckHelpInfo":"UniCheckHelpInfo",\r
+ "UniCheckPCDInfo":"UniCheckPCDInfo",\r
+ "Version":"Version"\r
+ }\r
+\r
## Configuration\r
#\r
# This class is used to define all items in configuration file\r
\r
# List customized Modifer here, split with ','\r
# Defaultly use the definition in class DataType\r
- self.ModifierList = MODIFIER_LIST\r
+ self.ModifierSet = MODIFIER_SET\r
\r
## General Checking\r
self.GeneralCheckAll = 0\r
self.GeneralCheckFileExistence = 1\r
# Check whether file has non ACSII char\r
self.GeneralCheckNonAcsii = 1\r
+ # Check whether UNI file is valid\r
+ self.GeneralCheckUni = 1\r
\r
## Space Checking\r
self.SpaceCheckAll = 1\r
self.HeaderCheckCFileCommentReferenceFormat = 1\r
# Check whether C File header Comment have the License immediately after the ""Copyright"" line\r
self.HeaderCheckCFileCommentLicenseFormat = 1\r
- \r
+\r
## C Function Layout Checking\r
self.CFunctionLayoutCheckAll = 0\r
\r
self.MetaDataFileCheckLibraryInstanceOrder = 1\r
# Check whether the unnecessary inclusion of library classes in the INF file\r
self.MetaDataFileCheckLibraryNoUse = 1\r
+ # Check the header file in Include\Library directory whether be defined in the package DEC file.\r
+ self.MetaDataFileCheckLibraryDefinedInDec = 1\r
# Check whether an INF file is specified in the FDF file, but not in the DSC file, then the INF file must be for a Binary module only\r
self.MetaDataFileCheckBinaryInfInFdf = 1\r
# Not to report error and warning related OS include file such as "windows.h" and "stdio.h"\r
# Check whether there are FILE_GUID duplication among different INF files\r
self.MetaDataFileCheckModuleFileGuidDuplication = 1\r
\r
+ # Check Guid Format in INF files\r
+ self.MetaDataFileCheckModuleFileGuidFormat = 1\r
+ # Check Protocol Format in INF files\r
+ self.MetaDataFileCheckModuleFileProtocolFormat = 1\r
+ # Check Ppi Format in INF files\r
+ self.MetaDataFileCheckModuleFilePpiFormat = 1\r
+ # Check Pcd Format in INF files\r
+ self.MetaDataFileCheckModuleFilePcdFormat = 1\r
+\r
+ # Check UNI file\r
+ self.UniCheckAll = 0\r
+ # Check INF or DEC file whether defined the localized information in the associated UNI file.\r
+ self.UniCheckHelpInfo = 1\r
+ # Check PCD whether defined the prompt, help in the DEC file and localized information in the associated UNI file.\r
+ self.UniCheckPCDInfo = 1\r
+\r
+ # Check SMM communication function parameter\r
+ self.SmmCommParaCheckAll = 0\r
+ # Check if the EFI_SMM_COMMUNICATION_PROTOCOL parameter buffer type is Reserved / ACPI NVS or UEFI RT code/data\r
+ self.SmmCommParaCheckBufferType = -1\r
+\r
#\r
# The check points in this section are reserved\r
#\r
# The directory listed here will not be parsed, split with ','\r
self.SkipDirList = []\r
\r
+ # The file listed here will not be parsed, split with ','\r
+ self.SkipFileList = []\r
+\r
# A list for binary file ext name\r
self.BinaryExtList = []\r
- \r
+\r
# A list for only scanned folders\r
self.ScanOnlyDirList = []\r
\r
+ # A list for Copyright format\r
+ self.Copyright = []\r
+\r
self.ParseConfig()\r
\r
def ParseConfig(self):\r
Line = CleanString(Line)\r
if Line != '':\r
List = GetSplitValueList(Line, TAB_EQUAL_SPLIT)\r
- if List[0] not in self.__dict__:\r
+ if List[0] not in _ConfigFileToInternalTranslation:\r
ErrorMsg = "Invalid configuration option '%s' was found" % List[0]\r
EdkLogger.error("Ecc", EdkLogger.ECC_ERROR, ErrorMsg, File = Filepath, Line = LineNo)\r
+ assert _ConfigFileToInternalTranslation[List[0]] in self.__dict__\r
if List[0] == 'ModifierList':\r
List[1] = GetSplitValueList(List[1], TAB_COMMA_SPLIT)\r
if List[0] == 'MetaDataFileCheckPathOfGenerateFileList' and List[1] == "":\r
continue\r
if List[0] == 'SkipDirList':\r
List[1] = GetSplitValueList(List[1], TAB_COMMA_SPLIT)\r
+ if List[0] == 'SkipFileList':\r
+ List[1] = GetSplitValueList(List[1], TAB_COMMA_SPLIT)\r
if List[0] == 'BinaryExtList':\r
List[1] = GetSplitValueList(List[1], TAB_COMMA_SPLIT)\r
- self.__dict__[List[0]] = List[1]\r
+ if List[0] == 'Copyright':\r
+ List[1] = GetSplitValueList(List[1], TAB_COMMA_SPLIT)\r
+ self.__dict__[_ConfigFileToInternalTranslation[List[0]]] = List[1]\r
\r
def ShowMe(self):\r
- print self.Filename\r
+ print(self.Filename)\r
for Key in self.__dict__.keys():\r
- print Key, '=', self.__dict__[Key]\r
+ print(Key, '=', self.__dict__[Key])\r
+\r
+#\r
+# test that our dict and out class still match in contents.\r
+#\r
+if __name__ == '__main__':\r
+ myconfig = Configuration("BaseTools\Source\Python\Ecc\config.ini")\r
+ for each in myconfig.__dict__:\r
+ if each == "Filename":\r
+ continue\r
+ assert each in _ConfigFileToInternalTranslation.values()\r
+ for each in _ConfigFileToInternalTranslation.values():\r
+ assert each in myconfig.__dict__\r