1. Add check point for invalid library instance, package, component file name
authorhche10x <hche10x@7335b38e-4728-0410-8992-fb3ffe349368>
Mon, 13 Aug 2007 05:59:30 +0000 (05:59 +0000)
committerhche10x <hche10x@7335b38e-4728-0410-8992-fb3ffe349368>
Mon, 13 Aug 2007 05:59:30 +0000 (05:59 +0000)
2. Update for function FindSupModuleListOfLibraryClass

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

Source/Python/Common/DecClassObject.py
Source/Python/Common/DscClassObject.py
Source/Python/Common/EdkIIWorkspaceBuild.py
Source/Python/Common/InfClassObject.py
Source/Python/Common/String.py

index 91f8864..a22ce66 100644 (file)
@@ -198,6 +198,9 @@ class Dec(DecObject):
                     ErrorMsg = "Wrong statement '%s' found in section LibraryClasses in file '%s', correct format is '<CName>=<GuidValue>'" % (Item, self.Package.Header.FullPath) \r
                     raise ParserError(PARSER_ERROR, msg = ErrorMsg)\r
                 else:\r
+#                    if List[1] != '' and CheckFileType(List[1], '.Inf') == False:\r
+#                        ErrorMsg = "Wrong library instance '%s' found for LibraryClasses '%s' in file '%s', it is NOT a valid INF file" % (List[1], List[0], self.Package.Header.FullPath) \r
+#                        raise ParserError(PARSER_ERROR, msg = ErrorMsg)\r
                     if Item[1] == ['']:\r
                             Item[1] = DataType.SUP_MODULE_LIST\r
                     MergeArches(LibraryClasses, (List[0], List[1]) + tuple(Item[1]), Arch)\r
index 5007e73..ef342ec 100644 (file)
@@ -63,15 +63,15 @@ class DscContents(DscObject):
         self.BuildOptions = []\r
 \r
 class Dsc(DscObject):\r
-    def __init__(self, filename = None, isMergeAllArches = False, isToPlatform = False):\r
+    def __init__(self, Filename = None, IsMergeAllArches = False, IsToPlatform = False):\r
         self.Identification = Identification()\r
         self.Defines = DscDefines()\r
         self.Contents = {}\r
         self.UserExtensions = ''\r
         self.Platform = PlatformClass()\r
 \r
-        for key in DataType.ARCH_LIST_FULL:\r
-            self.Contents[key] = DscContents()\r
+        for Arch in DataType.ARCH_LIST_FULL:\r
+            self.Contents[Arch] = DscContents()\r
         \r
         self.KeyList = [\r
             TAB_SKUIDS, TAB_LIBRARIES, TAB_LIBRARY_CLASSES, TAB_BUILD_OPTIONS, TAB_PCDS_FIXED_AT_BUILD_NULL, \\r
@@ -81,13 +81,13 @@ class Dsc(DscObject):
             TAB_COMPONENTS\r
         ]\r
         \r
-        if filename != None:\r
-            self.LoadDscFile(filename)\r
+        if Filename != None:\r
+            self.LoadDscFile(Filename)\r
             \r
-        if isMergeAllArches:\r
+        if IsMergeAllArches:\r
             self.MergeAllArches()\r
         \r
-        if isToPlatform:\r
+        if IsToPlatform:\r
             self.DscToPlatform()\r
         \r
     def ParseDsc(self, Lines, Key, KeyField):\r
@@ -232,6 +232,9 @@ class Dsc(DscObject):
                         ErrorMsg = "Wrong statement '%s' found in section LibraryClasses in file '%s', correct format is '<LibraryClassKeyWord>|<LibraryInstance>'" % (Item, self.Platform.Header.FullPath) \r
                         raise ParserError(PARSER_ERROR, msg = ErrorMsg)\r
                     else:\r
+                        if List[1] != '' and CheckFileType(List[1], '.Inf') == False:\r
+                            ErrorMsg = "Wrong library instance '%s' found for LibraryClasses '%s' in file '%s', it is NOT a valid INF file" % (List[1], List[0], self.Platform.Header.FullPath) \r
+                            raise ParserError(PARSER_ERROR, msg = ErrorMsg)\r
                         if Item[1] == ['']:\r
                             Item[1] = DataType.SUP_MODULE_LIST\r
                         MergeArches(LibraryClasses, (List[0], List[1]) + tuple(Item[1]), Arch)\r
@@ -263,6 +266,9 @@ class Dsc(DscObject):
         for Arch in DataType.ARCH_LIST:\r
             for Item in self.Contents[Arch].Components:\r
                 (InfFilename, ExecFilename) = GetExec(Item[0])\r
+                if InfFilename != '' and CheckFileType(InfFilename, '.Inf') == False:\r
+                    ErrorMsg = "Wrong component name '%s' found in file '%s', it is NOT a valid INF file" % (InfFilename, self.Platform.Header.FullPath)\r
+                    raise ParserError(PARSER_ERROR, msg = ErrorMsg)\r
                 LibraryClasses = Item[1]\r
                 BuildOptions = Item[2]\r
                 Pcds = Item[3]\r
@@ -274,6 +280,9 @@ class Dsc(DscObject):
                     if len(List) != 2:\r
                         ErrorMsg = "Wrong LibraryClass statement '%s' found in section Components in file '%s', correct format is '<ClassName>|<InfFilename>'" % (Lib, self.Platform.Header.FullPath) \r
                         raise ParserError(PARSER_ERROR, msg = ErrorMsg)\r
+                    if List[1] != '' and CheckFileType(List[1], '.Inf') == False:\r
+                        ErrorMsg = "Wrong library instance '%s' found for LibraryClasses '%s' in section components of file '%s', it is NOT a valid INF file" % (List[1], List[0], self.Platform.Header.FullPath) \r
+                        raise ParserError(PARSER_ERROR, msg = ErrorMsg)\r
                     Component.LibraryClasses.LibraryList.append(PlatformLibraryClass(List[0], List[1]))\r
                 for BuildOption in BuildOptions:\r
                     Key = GetBuildOption(BuildOption)\r
index 669a0f4..f9a684c 100644 (file)
@@ -876,7 +876,8 @@ class WorkspaceBuild(object):
                         continue\r
                     for ModuleType in Item.ModuleType:\r
                         EdkLogger.debug(EdkLogger.DEBUG_3, "\tLibraryClass %s has specific defined module types" % Name)\r
-                        SupModuleList.remove(ModuleType)\r
+                        if ModuleType in SupModuleList:\r
+                            SupModuleList.remove(ModuleType)\r
 \r
         return SupModuleList\r
     \r
index 3b86342..dcae952 100644 (file)
@@ -80,15 +80,15 @@ class InfContents(InfObject):
         self.Nmake = []\r
         \r
 class Inf(InfObject):\r
-    def __init__(self, filename = None, isMergeAllArches = False, isToModule = False):\r
+    def __init__(self, Filename = None, IsMergeAllArches = False, IsToModule = False):\r
         self.Identification = Identification()\r
         self.Defines = InfDefines()\r
         self.Contents = {}\r
         self.UserExtensions = ''\r
         self.Module = ModuleClass()\r
         \r
-        for key in DataType.ARCH_LIST_FULL:\r
-            self.Contents[key] = InfContents()\r
+        for Arch in DataType.ARCH_LIST_FULL:\r
+            self.Contents[Arch] = InfContents()\r
 \r
         self.KeyList = [\r
             TAB_SOURCES, TAB_BUILD_OPTIONS, TAB_BINARIES, TAB_INCLUDES, TAB_GUIDS, TAB_PROTOCOLS, TAB_PPIS, TAB_LIBRARY_CLASSES, TAB_PACKAGES, TAB_LIBRARIES, \\r
@@ -96,13 +96,13 @@ class Inf(InfObject):
             TAB_PCDS_DYNAMIC_NULL, TAB_PCDS_DYNAMIC_EX_NULL, TAB_DEPEX, TAB_NMAKE\r
         ]\r
                 \r
-        if filename != None:\r
-            self.LoadInfFile(filename)\r
+        if Filename != None:\r
+            self.LoadInfFile(Filename)\r
         \r
-        if isMergeAllArches:\r
+        if IsMergeAllArches:\r
             self.MergeAllArches()\r
         \r
-        if isToModule:\r
+        if IsToModule:\r
             self.InfToModule()\r
     \r
     def MergeAllArches(self):\r
@@ -256,6 +256,9 @@ class Inf(InfObject):
                 elif Status == 1:     # Not find DEFINE statement\r
                     #{ (LibraryClass, Instance, PcdFeatureFlag, ModuleType1|ModuleType2|ModuleType3) : [Arch1, Arch2, ...] }\r
                     ItemList = GetSplitValueList((Item[0] + DataType.TAB_VALUE_SPLIT * 2))\r
+                    if ItemList[1] != '' and CheckFileType(ItemList[1], '.Inf') == False:\r
+                        ErrorMsg = "Wrong library instance '%s' found for LibraryClasses '%s' in file '%s', it is NOT a valid INF file" % (ItemList[1], ItemList[0], self.Module.Header.FullPath) \r
+                        raise ParserError(PARSER_ERROR, msg = ErrorMsg)\r
                     MergeArches(LibraryClasses, (ItemList[0], ItemList[1], ItemList[2], DataType.TAB_VALUE_SPLIT.join(Item[1])), Arch)\r
         for Key in LibraryClasses.keys():\r
             KeyList = Key[0].split(DataType.TAB_VALUE_SPLIT)\r
@@ -283,6 +286,9 @@ class Inf(InfObject):
                     ErrorMsg = "Wrong DEFINE statement '%s' found in section Packages in file '%s', correct format is 'DEFINE <VarName> = <PATH>'" % (Item, self.Module.Header.FullPath) \r
                     raise ParserError(PARSER_ERROR, msg = ErrorMsg)\r
                 elif Status == 1:     # Not find DEFINE statement\r
+                    if Item != '' and CheckFileType(Item, '.Dec') == False:\r
+                        ErrorMsg = "Wrong package definition '%s' found in file '%s', it is NOT a valid DEC file" % (Item, self.Module.Header.FullPath) \r
+                        raise ParserError(PARSER_ERROR, msg = ErrorMsg)\r
                     MergeArches(Packages, Item, Arch)\r
         for Key in Packages.keys():\r
             Package = ModulePackageDependencyClass()\r
index bfa6d2a..aaa14f6 100644 (file)
@@ -350,6 +350,18 @@ def PreCheck(FileName, FileContent, SupSectionTag):
     if IsFailed:\r
        raise ParserError(FORMAT_INVALID, lineno = LineNo, name = FileName)\r
 \r
+#\r
+# Check if the Filename is including ExtName\r
+# Return True if is\r
+# Retrun False if not\r
+#\r
+def CheckFileType(Filename, ExtName):\r
+    (Root, Ext) = os.path.splitext(Filename)\r
+    if Ext.upper() == ExtName.upper():\r
+        return True\r
+    \r
+    return False\r
+\r
 if __name__ == '__main__':\r
     print SplitModuleType('LibraryClasses.common.DXE_RUNTIME_DRIVER')\r
     print SplitModuleType('Library.common')\r