1. Update Dsc table for the library instance defined component section
authorhche10x <hche10x@7335b38e-4728-0410-8992-fb3ffe349368>
Thu, 27 Mar 2008 09:04:21 +0000 (09:04 +0000)
committerhche10x <hche10x@7335b38e-4728-0410-8992-fb3ffe349368>
Thu, 27 Mar 2008 09:04:21 +0000 (09:04 +0000)
2. Enable checkpoints of library instance of meta-data check

git-svn-id: https://buildtools.tianocore.org/svn/buildtools/trunk/BaseTools@1088 7335b38e-4728-0410-8992-fb3ffe349368

Source/Python/Common/DscClassObject.py
Source/Python/Ecc/Check.py

index dda121d..3f0535d 100755 (executable)
@@ -768,7 +768,7 @@ class Dsc(DscObject):
                     \r
                     SubLibSet = QueryDscItem(self.TblDsc, MODEL_EFI_LIBRARY_CLASS, Record[3], self.FileID)\r
                     for SubLib in SubLibSet:\r
-                        Lib.append(SubLib[0])\r
+                        Lib.append(TAB_VALUE_SPLIT.join([SubLib[0],SubLib[4]]))\r
                     \r
                     SubBoSet = QueryDscItem(self.TblDsc, MODEL_META_DATA_BUILD_OPTION, Record[3], self.FileID)\r
                     for SubBo in SubBoSet:\r
@@ -1333,7 +1333,14 @@ class Dsc(DscObject):
                     EdkLogger.debug(4, "Parsing component %s ..." %Component)\r
                     DscItmeID = self.TblDsc.Insert(MODEL_META_DATA_COMPONENT, Component[0], '', '', Arch, -1, FileID, StartLine, -1, StartLine, -1, 0)\r
                     for Item in Component[1]:\r
-                        self.TblDsc.Insert(MODEL_EFI_LIBRARY_CLASS, Item, '', '', Arch, DscItmeID, FileID, StartLine, -1, StartLine, -1, 0)\r
+                        List = GetSplitValueList(Item, MaxSplit = 2)\r
+                        LibName, LibIns = '', ''\r
+                        if len(List) == 2:\r
+                            LibName = List[0]\r
+                            LibIns = List[1]\r
+                        else:\r
+                            LibName = List[0]\r
+                        self.TblDsc.Insert(MODEL_EFI_LIBRARY_CLASS, LibName, LibIns, '', Arch, DscItmeID, FileID, StartLine, -1, StartLine, -1, 0)\r
                     for Item in Component[2]:\r
                         self.TblDsc.Insert(MODEL_META_DATA_BUILD_OPTION, Item, '', '', Arch, DscItmeID, FileID, StartLine, -1, StartLine, -1, 0)\r
                     for Item in Component[3]:\r
index 0fe5383..09dca16 100644 (file)
@@ -319,20 +319,51 @@ class Check(object):
     #\r
     def MetaDataFileCheckLibraryInstance(self):\r
         if EccGlobalData.gConfig.MetaDataFileCheckLibraryInstance == '1' or EccGlobalData.gConfig.MetaDataFileCheckAll == '1':\r
-            pass\r
-\r
+            EdkLogger.quiet("Checking for library instance type issue ...")\r
+            SqlCommand = """select ID, Value2 from Inf where Value1 = 'LIBRARY_CLASS' and Model = %s group by BelongsToFile""" % MODEL_META_DATA_HEADER\r
+            RecordSet = EccGlobalData.gDb.TblInf.Exec(SqlCommand)\r
+            LibraryClasses = {}\r
+            for Record in RecordSet:\r
+                List = Record[1].split('|', 1)\r
+                if len(List) != 2:\r
+                    EccGlobalData.gDb.TblReport.Insert(ERROR_META_DATA_FILE_CHECK_LIBRARY_INSTANCE_2, OtherMsg = "The Library Class '%s' does not specify its supported module types" % (List[0]), BelongsToTable = 'Inf', BelongsToItem = Record[0])\r
+                else:\r
+                    LibraryClasses[List[0]] = List[1]\r
+            SqlCommand = """select A.ID, A.Value1, B.Value2 from Inf as A left join Inf as B \r
+                            where A.Model = %s and B.Value1 = '%s' and B.Model = %s and B.BelongsToFile = A.BelongsToFile""" \\r
+                            % (MODEL_EFI_LIBRARY_CLASS, 'MODULE_TYPE', MODEL_META_DATA_HEADER)\r
+            RecordSet = EccGlobalData.gDb.TblInf.Exec(SqlCommand)\r
+            for Record in RecordSet:\r
+                if Record[1] in LibraryClasses and LibraryClasses[Record[1]].find(Record[2]) < 0:\r
+                    EccGlobalData.gDb.TblReport.Insert(ERROR_META_DATA_FILE_CHECK_LIBRARY_INSTANCE_1, OtherMsg = "The type of Library Class '%s' defined in Inf file does not match the type of the module" % (Record[1]), BelongsToTable = 'Inf', BelongsToItem = Record[0])\r
     #\r
     # Check whether a Library Instance has been defined for all dependent library classes\r
     #\r
     def MetaDataFileCheckLibraryInstanceDependent(self):\r
         if EccGlobalData.gConfig.MetaDataFileCheckLibraryInstanceDependent == '1' or EccGlobalData.gConfig.MetaDataFileCheckAll == '1':\r
-            pass\r
-\r
+            EdkLogger.quiet("Checking for library instance dependent issue ...")\r
+            SqlCommand = """select ID, Value1, Value2 from Dsc where Model = %s""" % MODEL_EFI_LIBRARY_CLASS\r
+            LibraryClasses = EccGlobalData.gDb.TblDsc.Exec(SqlCommand)\r
+            for LibraryClass in LibraryClasses:\r
+                if LibraryClass[1].upper() != 'NULL':\r
+                    LibraryIns = os.path.normpath(os.path.join(EccGlobalData.gWorkspace, LibraryClass[2]))\r
+                    SqlCommand = """select Value2 from Inf where BelongsToFile = \r
+                                    (select ID from File where lower(FullPath) = lower('%s'))\r
+                                    and Value1 = '%s'""" % (LibraryIns, 'LIBRARY_CLASS')\r
+                    RecordSet = EccGlobalData.gDb.TblInf.Exec(SqlCommand)\r
+                    IsFound = False\r
+                    for Record in RecordSet:\r
+                        LibName = Record[0].split('|', 1)[0]\r
+                        if LibraryClass[1] == LibName:\r
+                            IsFound = True\r
+                    if not IsFound:\r
+                        EccGlobalData.gDb.TblReport.Insert(ERROR_META_DATA_FILE_CHECK_LIBRARY_INSTANCE_DEPENDENT, OtherMsg = "The Library Class '%s' is not specified in '%s'" % (LibraryClass[1], LibraryClass[2]), BelongsToTable = 'Dsc', BelongsToItem = LibraryClass[0])\r
     #\r
     # Check whether the Library Instances specified by the LibraryClasses sections are listed in order of dependencies\r
     #\r
     def MetaDataFileCheckLibraryInstanceOrder(self):\r
         if EccGlobalData.gConfig.MetaDataFileCheckLibraryInstanceOrder == '1' or EccGlobalData.gConfig.MetaDataFileCheckAll == '1':\r
+            # This checkpoint is not necessary for Ecc check\r
             pass\r
 \r
     #\r
@@ -340,7 +371,11 @@ class Check(object):
     #\r
     def MetaDataFileCheckLibraryNoUse(self):\r
         if EccGlobalData.gConfig.MetaDataFileCheckLibraryNoUse == '1' or EccGlobalData.gConfig.MetaDataFileCheckAll == '1':\r
-            pass\r
+            EdkLogger.quiet("Checking for library instance not used ...")\r
+            SqlCommand = """select ID, Value1 from Inf as A where A.Model = %s and A.Value1 not in (select B.Value1 from Dsc as B where Model = %s)""" % (MODEL_EFI_LIBRARY_CLASS, MODEL_EFI_LIBRARY_CLASS)\r
+            RecordSet = EccGlobalData.gDb.TblInf.Exec(SqlCommand)\r
+            for Record in RecordSet:\r
+                EccGlobalData.gDb.TblReport.Insert(ERROR_META_DATA_FILE_CHECK_LIBRARY_NO_USE, OtherMsg = "The Library Class '%s' is not used in any platform" % (Record[1]), BelongsToTable = 'Inf', BelongsToItem = Record[0])\r
 \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
@@ -536,6 +571,10 @@ class Check(object):
                     Name = Record[1].strip()\r
                     if Name[0] == '(':\r
                         Name = Name[1:Name.find(')')]\r
+                    if Name.find('(') > -1:\r
+                        Name = Name[Name.find('(') + 1 : Name.find(')')]\r
+                    Name = Name.replace('WINAPI', '')\r
+                    Name = Name.replace('*', '').strip()\r
                     if Name.upper() != Name:\r
                         EccGlobalData.gDb.TblReport.Insert(ERROR_NAMING_CONVENTION_CHECK_TYPEDEF_STATEMENT, OtherMsg = "The #typedef name '%s' does not follow the rules" % (Name), BelongsToTable = IdentifierTable, BelongsToItem = Record[0])\r
     \r