]> git.proxmox.com Git - mirror_edk2.git/blobdiff - BaseTools/Source/Python/Ecc/Check.py
BaseTools/Ecc: Add a checkpoint for invalid DEC file.
[mirror_edk2.git] / BaseTools / Source / Python / Ecc / Check.py
index da3b0fb9ac344573d03072be62703f6dd533374c..6c4c90ca782115fdcefc14cbee1728fe15778b3e 100644 (file)
@@ -564,6 +564,7 @@ class Check(object):
         self.MetaDataFileCheckLibraryInstanceDependent()\r
         self.MetaDataFileCheckLibraryInstanceOrder()\r
         self.MetaDataFileCheckLibraryNoUse()\r
+        self.MetaDataFileCheckLibraryDefinedInDec()\r
         self.MetaDataFileCheckBinaryInfInFdf()\r
         self.MetaDataFileCheckPcdDuplicate()\r
         self.MetaDataFileCheckPcdFlash()\r
@@ -695,7 +696,24 @@ class Check(object):
                     for FilePath in FilePathList:\r
                         if not EccGlobalData.gException.IsException(ERROR_META_DATA_FILE_CHECK_LIBRARY_NAME_DUPLICATE, Record[1]):\r
                             EccGlobalData.gDb.TblReport.Insert(ERROR_META_DATA_FILE_CHECK_LIBRARY_NAME_DUPLICATE, OtherMsg="The Library Class [%s] is duplicated in '%s' line %s and line %s." % (Record[1], FilePath, Record[3], Record[4]), BelongsToTable='Dsc', BelongsToItem=Record[0])\r
-                                                \r
+    \r
+    # Check the header file in Include\Library directory whether be defined in the package DEC file.\r
+    def MetaDataFileCheckLibraryDefinedInDec(self):\r
+        if EccGlobalData.gConfig.MetaDataFileCheckLibraryDefinedInDec == '1' or EccGlobalData.gConfig.MetaDataFileCheckAll == '1' or EccGlobalData.gConfig.CheckAll == '1':\r
+            EdkLogger.quiet("Checking for library instance whether be defined in the package dec file ...")\r
+            SqlCommand = """\r
+                    select A.Value1, A.StartLine, A.ID, B.Value1 from Inf as A left join Dec as B\r
+                    on A.Model = B.Model and A.Value1 = B.Value1 where A.Model=%s\r
+                    """ % MODEL_EFI_LIBRARY_CLASS\r
+            RecordSet = EccGlobalData.gDb.TblDsc.Exec(SqlCommand)\r
+            for Record in RecordSet:\r
+                LibraryInInf, Line, ID, LibraryDec = Record\r
+                if not LibraryDec:\r
+                    if not EccGlobalData.gException.IsException(ERROR_META_DATA_FILE_CHECK_LIBRARY_NOT_DEFINED, LibraryInInf):\r
+                        EccGlobalData.gDb.TblReport.Insert(ERROR_META_DATA_FILE_CHECK_LIBRARY_NOT_DEFINED, \\r
+                                            OtherMsg="The Library Class [%s] in %s line is not defined in the associated package file." % (LibraryInInf, Line), \r
+                                            BelongsToTable='Inf', BelongsToItem=ID)\r
+    \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
     def MetaDataFileCheckBinaryInfInFdf(self):\r
         if EccGlobalData.gConfig.MetaDataFileCheckBinaryInfInFdf == '1' or EccGlobalData.gConfig.MetaDataFileCheckAll == '1' or EccGlobalData.gConfig.CheckAll == '1':\r