X-Git-Url: https://git.proxmox.com/?p=mirror_edk2.git;a=blobdiff_plain;f=BaseTools%2FSource%2FPython%2FEcc%2FConfiguration.py;h=29a1220761f139429eca14ef686fdbcf20542e51;hp=72bfbc709befb0a210195f0870dfa5f5fbdc3ed3;hb=f7496d717357b9af78414d19679b073403812340;hpb=1be2ed90a20618d71ddf34b8a07d038da0b36854 diff --git a/BaseTools/Source/Python/Ecc/Configuration.py b/BaseTools/Source/Python/Ecc/Configuration.py index 72bfbc709b..29a1220761 100644 --- a/BaseTools/Source/Python/Ecc/Configuration.py +++ b/BaseTools/Source/Python/Ecc/Configuration.py @@ -1,7 +1,7 @@ ## @file # This file is used to define class Configuration # -# Copyright (c) 2008 - 2014, Intel Corporation. All rights reserved.
+# Copyright (c) 2008 - 2018, 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 @@ -14,12 +14,116 @@ ## # Import Modules # +from __future__ import print_function import Common.LongFilePathOs as os import Common.EdkLogger as EdkLogger from Common.DataType import * -from Common.String import * +from Common.StringUtils import * 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 # # This class is used to define all items in configuration file @@ -53,7 +157,7 @@ class Configuration(object): # List customized Modifer here, split with ',' # Defaultly use the definition in class DataType - self.ModifierList = MODIFIER_LIST + self.ModifierSet = MODIFIER_SET ## General Checking self.GeneralCheckAll = 0 @@ -80,6 +184,8 @@ class Configuration(object): self.GeneralCheckFileExistence = 1 # Check whether file has non ACSII char self.GeneralCheckNonAcsii = 1 + # Check whether UNI file is valid + self.GeneralCheckUni = 1 ## Space Checking self.SpaceCheckAll = 1 @@ -109,7 +215,7 @@ class Configuration(object): self.HeaderCheckCFileCommentReferenceFormat = 1 # Check whether C File header Comment have the License immediately after the ""Copyright"" line self.HeaderCheckCFileCommentLicenseFormat = 1 - + ## C Function Layout Checking self.CFunctionLayoutCheckAll = 0 @@ -218,6 +324,8 @@ class Configuration(object): self.MetaDataFileCheckLibraryInstanceOrder = 1 # Check whether the unnecessary inclusion of library classes in the INF file self.MetaDataFileCheckLibraryNoUse = 1 + # Check the header file in Include\Library directory whether be defined in the package DEC file. + self.MetaDataFileCheckLibraryDefinedInDec = 1 # 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 self.MetaDataFileCheckBinaryInfInFdf = 1 # Not to report error and warning related OS include file such as "windows.h" and "stdio.h" @@ -236,6 +344,27 @@ class Configuration(object): # Check whether there are FILE_GUID duplication among different INF files self.MetaDataFileCheckModuleFileGuidDuplication = 1 + # Check Guid Format in INF files + self.MetaDataFileCheckModuleFileGuidFormat = 1 + # Check Protocol Format in INF files + self.MetaDataFileCheckModuleFileProtocolFormat = 1 + # Check Ppi Format in INF files + self.MetaDataFileCheckModuleFilePpiFormat = 1 + # Check Pcd Format in INF files + self.MetaDataFileCheckModuleFilePcdFormat = 1 + + # Check UNI file + self.UniCheckAll = 0 + # Check INF or DEC file whether defined the localized information in the associated UNI file. + self.UniCheckHelpInfo = 1 + # Check PCD whether defined the prompt, help in the DEC file and localized information in the associated UNI file. + self.UniCheckPCDInfo = 1 + + # Check SMM communication function parameter + self.SmmCommParaCheckAll = 0 + # Check if the EFI_SMM_COMMUNICATION_PROTOCOL parameter buffer type is Reserved / ACPI NVS or UEFI RT code/data + self.SmmCommParaCheckBufferType = -1 + # # The check points in this section are reserved # @@ -246,12 +375,18 @@ class Configuration(object): # The directory listed here will not be parsed, split with ',' self.SkipDirList = [] + # The file listed here will not be parsed, split with ',' + self.SkipFileList = [] + # A list for binary file ext name self.BinaryExtList = [] - + # A list for only scanned folders self.ScanOnlyDirList = [] + # A list for Copyright format + self.Copyright = [] + self.ParseConfig() def ParseConfig(self): @@ -266,20 +401,37 @@ class Configuration(object): Line = CleanString(Line) if Line != '': 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] EdkLogger.error("Ecc", EdkLogger.ECC_ERROR, ErrorMsg, File = Filepath, Line = LineNo) + assert _ConfigFileToInternalTranslation[List[0]] in self.__dict__ if List[0] == 'ModifierList': List[1] = GetSplitValueList(List[1], TAB_COMMA_SPLIT) if List[0] == 'MetaDataFileCheckPathOfGenerateFileList' and List[1] == "": continue if List[0] == 'SkipDirList': List[1] = GetSplitValueList(List[1], TAB_COMMA_SPLIT) + if List[0] == 'SkipFileList': + List[1] = GetSplitValueList(List[1], TAB_COMMA_SPLIT) if List[0] == 'BinaryExtList': List[1] = GetSplitValueList(List[1], TAB_COMMA_SPLIT) - self.__dict__[List[0]] = List[1] + if List[0] == 'Copyright': + List[1] = GetSplitValueList(List[1], TAB_COMMA_SPLIT) + self.__dict__[_ConfigFileToInternalTranslation[List[0]]] = List[1] def ShowMe(self): - print self.Filename + print(self.Filename) 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__