]> git.proxmox.com Git - mirror_edk2.git/blobdiff - BaseTools/Source/Python/UPT/Object/Parser/InfBinaryObject.py
This patch is going to:
[mirror_edk2.git] / BaseTools / Source / Python / UPT / Object / Parser / InfBinaryObject.py
index 3685fedd5c19f6ba3cfdc86ce86d106358872ede..f968beee6081ee601e67ebb5084a385fb060aab6 100644 (file)
@@ -2,7 +2,7 @@
 # This file is used to define class objects of INF file [Binaries] section. \r
 # It will consumed by InfParser. \r
 #\r
-# Copyright (c) 2011, Intel Corporation. All rights reserved.<BR>\r
+# Copyright (c) 2011 - 2014, Intel Corporation. All rights reserved.<BR>\r
 #\r
 # This program and the accompanying materials are licensed and made available \r
 # under the terms and conditions of the BSD License which accompanies this \r
@@ -99,6 +99,7 @@ class InfBianryCommonItem(InfBianryItem, CurrentLine):
         self.CommonType = ''\r
         self.TagName = ''\r
         self.Family = ''\r
+        self.GuidValue = ''\r
         InfBianryItem.__init__(self)\r
         CurrentLine.__init__(self)\r
 \r
@@ -116,6 +117,11 @@ class InfBianryCommonItem(InfBianryItem, CurrentLine):
         self.Family = Family\r
     def GetFamily(self):\r
         return self.Family\r
+    \r
+    def SetGuidValue(self, GuidValue):\r
+        self.GuidValue = GuidValue\r
+    def GetGuidValue(self):\r
+        return self.GuidValue\r
 \r
 ##\r
 #\r
@@ -150,7 +156,7 @@ class InfBinariesObject(InfSectionCommonDef):
             if len(VerContent) < 2:\r
                 Logger.Error("InfParser",\r
                              ToolError.FORMAT_INVALID,\r
-                             ST.ERR_INF_PARSER_BINARY_ITEM_FORMAT_INVALID % (VerContent[0]),\r
+                             ST.ERR_INF_PARSER_BINARY_ITEM_FORMAT_INVALID % (VerContent[0], 2),\r
                              File=VerCurrentLine.GetFileName(),\r
                              Line=VerCurrentLine.GetLineNo(),\r
                              ExtraData=VerCurrentLine.GetLineString())\r
@@ -291,18 +297,29 @@ class InfBinariesObject(InfSectionCommonDef):
             CurrentLineOfItem = Item[2]\r
             GlobalData.gINF_CURRENT_LINE = CurrentLineOfItem\r
             InfBianryCommonItemObj = None\r
-            if len(ItemContent) < 2:\r
-                Logger.Error("InfParser",\r
-                             ToolError.FORMAT_INVALID,\r
-                             ST.ERR_INF_PARSER_BINARY_ITEM_FORMAT_INVALID % (ItemContent[0]),\r
-                             File=CurrentLineOfItem.GetFileName(),\r
-                             Line=CurrentLineOfItem.GetLineNo(),\r
-                             ExtraData=CurrentLineOfItem.GetLineString())\r
-                return False\r
-            if len(ItemContent) > 6:\r
+            if ItemContent[0] == 'SUBTYPE_GUID':\r
+                if len(ItemContent) < 3:\r
+                    Logger.Error("InfParser",\r
+                                 ToolError.FORMAT_INVALID,\r
+                                 ST.ERR_INF_PARSER_BINARY_ITEM_FORMAT_INVALID % (ItemContent[0], 3),\r
+                                 File=CurrentLineOfItem.GetFileName(),\r
+                                 Line=CurrentLineOfItem.GetLineNo(),\r
+                                 ExtraData=CurrentLineOfItem.GetLineString())\r
+                    return False\r
+            else:\r
+                if len(ItemContent) < 2:\r
+                    Logger.Error("InfParser",\r
+                                 ToolError.FORMAT_INVALID,\r
+                                 ST.ERR_INF_PARSER_BINARY_ITEM_FORMAT_INVALID % (ItemContent[0], 2),\r
+                                 File=CurrentLineOfItem.GetFileName(),\r
+                                 Line=CurrentLineOfItem.GetLineNo(),\r
+                                 ExtraData=CurrentLineOfItem.GetLineString())\r
+                    return False\r
+                \r
+            if len(ItemContent) > 7:\r
                 Logger.Error("InfParser",\r
                              ToolError.FORMAT_INVALID,\r
-                             ST.ERR_INF_PARSER_BINARY_ITEM_FORMAT_INVALID_MAX % (ItemContent[0], 6),\r
+                             ST.ERR_INF_PARSER_BINARY_ITEM_FORMAT_INVALID_MAX % (ItemContent[0], 7),\r
                              File=CurrentLineOfItem.GetFileName(),\r
                              Line=CurrentLineOfItem.GetLineNo(),\r
                              ExtraData=CurrentLineOfItem.GetLineString())\r
@@ -318,7 +335,7 @@ class InfBinariesObject(InfSectionCommonDef):
                 BinaryFileType = ItemContent[0].strip()\r
                 if BinaryFileType == 'RAW' or BinaryFileType == 'ACPI' or BinaryFileType == 'ASL':\r
                     BinaryFileType = 'BIN'\r
-\r
+                    \r
                 if BinaryFileType not in DT.BINARY_FILE_TYPE_LIST:\r
                     Logger.Error("InfParser",\r
                                  ToolError.FORMAT_INVALID,\r
@@ -342,44 +359,64 @@ class InfBinariesObject(InfSectionCommonDef):
 \r
                 InfBianryCommonItemObj.SetType(BinaryFileType)\r
                 InfBianryCommonItemObj.SetCommonType(ItemContent[0])\r
+                FileName = ''\r
+                if BinaryFileType == 'FREEFORM':\r
+                    InfBianryCommonItemObj.SetGuidValue(ItemContent[1])\r
+                    if len(ItemContent) >= 3:\r
+                        FileName = ItemContent[2]\r
+                    else:\r
+                        Logger.Error("InfParser",\r
+                                 ToolError.FORMAT_INVALID,\r
+                                 ST.ERR_INF_PARSER_BINARY_ITEM_FILENAME_NOT_EXIST,\r
+                                 File=CurrentLineOfItem.GetFileName(),\r
+                                 Line=CurrentLineOfItem.GetLineNo(),\r
+                                 ExtraData=CurrentLineOfItem.GetLineString())\r
+                else:\r
+                    FileName = ItemContent[1]\r
                 #\r
                 # Verify File exist or not\r
                 #\r
                 FullFileName = os.path.normpath(os.path.realpath(os.path.join(GlobalData.gINF_MODULE_DIR,\r
-                                                                              ItemContent[1])))\r
-                if not (ValidFile(FullFileName) or ValidFile(ItemContent[1])):\r
+                                                                              FileName)))\r
+                if not (ValidFile(FullFileName) or ValidFile(FileName)):\r
                     Logger.Error("InfParser",\r
                                  ToolError.FORMAT_INVALID,\r
-                                 ST.ERR_INF_PARSER_BINARY_ITEM_FILE_NOT_EXIST % (ItemContent[1]),\r
+                                 ST.ERR_INF_PARSER_BINARY_ITEM_FILE_NOT_EXIST % (FileName),\r
                                  File=CurrentLineOfItem.GetFileName(),\r
                                  Line=CurrentLineOfItem.GetLineNo(),\r
                                  ExtraData=CurrentLineOfItem.GetLineString())\r
                 #\r
                 # Validate file exist/format.\r
                 #\r
-                if IsValidPath(ItemContent[1], GlobalData.gINF_MODULE_DIR):\r
+                if IsValidPath(FileName, GlobalData.gINF_MODULE_DIR):\r
                     IsValidFileFlag = True\r
                 else:\r
                     Logger.Error("InfParser",\r
                                 ToolError.FORMAT_INVALID,\r
-                                ST.ERR_INF_PARSER_FILE_NOT_EXIST_OR_NAME_INVALID % (ItemContent[1]),\r
+                                ST.ERR_INF_PARSER_FILE_NOT_EXIST_OR_NAME_INVALID % (FileName),\r
                                 File=CurrentLineOfItem.GetFileName(),\r
                                 Line=CurrentLineOfItem.GetLineNo(),\r
                                 ExtraData=CurrentLineOfItem.GetLineString())\r
                     return False\r
                 if IsValidFileFlag:\r
                     ItemContent[0] = ConvPathFromAbsToRel(ItemContent[0], GlobalData.gINF_MODULE_DIR)\r
-                    InfBianryCommonItemObj.SetFileName(ItemContent[1])\r
+                    InfBianryCommonItemObj.SetFileName(FileName)\r
             if len(ItemContent) >= 3:\r
                 #\r
                 # Add Target information\r
                 #\r
-                InfBianryCommonItemObj.SetTarget(ItemContent[2])\r
+                if BinaryFileType != 'FREEFORM':\r
+                    InfBianryCommonItemObj.SetTarget(ItemContent[2])\r
+                    \r
             if len(ItemContent) >= 4:\r
                 #\r
                 # Add Family information\r
                 #\r
-                InfBianryCommonItemObj.SetFamily(ItemContent[3])\r
+                if BinaryFileType != 'FREEFORM':\r
+                    InfBianryCommonItemObj.SetFamily(ItemContent[3])\r
+                else:\r
+                    InfBianryCommonItemObj.SetTarget(ItemContent[3])\r
+                    \r
             if len(ItemContent) >= 5:\r
                 #\r
                 # TagName entries are build system specific. If there \r
@@ -388,28 +425,62 @@ class InfBinariesObject(InfSectionCommonDef):
                 # system specific content cannot be distributed using \r
                 # the UDP\r
                 #\r
-                if ItemContent[4].strip() != '':\r
-                    Logger.Error("InfParser",\r
-                                 ToolError.FORMAT_INVALID,\r
-                                 ST.ERR_INF_PARSER_TAGNAME_NOT_PERMITTED % (ItemContent[4]),\r
-                                 File=CurrentLineOfItem.GetFileName(),\r
-                                 Line=CurrentLineOfItem.GetLineNo(),\r
-                                 ExtraData=CurrentLineOfItem.GetLineString())\r
-            if len(ItemContent) == 6:\r
+                if BinaryFileType != 'FREEFORM':\r
+                    if ItemContent[4].strip() != '':\r
+                        Logger.Error("InfParser",\r
+                                     ToolError.FORMAT_INVALID,\r
+                                     ST.ERR_INF_PARSER_TAGNAME_NOT_PERMITTED % (ItemContent[4]),\r
+                                     File=CurrentLineOfItem.GetFileName(),\r
+                                     Line=CurrentLineOfItem.GetLineNo(),\r
+                                     ExtraData=CurrentLineOfItem.GetLineString())\r
+                else:\r
+                    InfBianryCommonItemObj.SetFamily(ItemContent[4])\r
+                    \r
+            if len(ItemContent) >= 6:\r
                 #\r
                 # Add FeatureFlagExp\r
                 #\r
-                if ItemContent[5].strip() == '':\r
+                if BinaryFileType != 'FREEFORM':\r
+                    if ItemContent[5].strip() == '':\r
+                        Logger.Error("InfParser",\r
+                                     ToolError.FORMAT_INVALID,\r
+                                     ST.ERR_INF_PARSER_FEATURE_FLAG_EXP_MISSING,\r
+                                     File=CurrentLineOfItem.GetFileName(),\r
+                                     Line=CurrentLineOfItem.GetLineNo(),\r
+                                     ExtraData=CurrentLineOfItem.GetLineString())\r
+                    #\r
+                    # Validate Feature Flag Express   \r
+                    #\r
+                    FeatureFlagRtv = IsValidFeatureFlagExp(ItemContent[5].strip())\r
+                    if not FeatureFlagRtv[0]:\r
+                        Logger.Error("InfParser",\r
+                                     ToolError.FORMAT_INVALID,\r
+                                     ST.ERR_INF_PARSER_FEATURE_FLAG_EXP_SYNTAX_INVLID % (FeatureFlagRtv[1]),\r
+                                     File=CurrentLineOfItem.GetFileName(),\r
+                                     Line=CurrentLineOfItem.GetLineNo(),\r
+                                     ExtraData=CurrentLineOfItem.GetLineString())\r
+                    InfBianryCommonItemObj.SetFeatureFlagExp(ItemContent[5])\r
+                else:\r
+                    if ItemContent[5].strip() != '':\r
+                        Logger.Error("InfParser",\r
+                                     ToolError.FORMAT_INVALID,\r
+                                     ST.ERR_INF_PARSER_TAGNAME_NOT_PERMITTED % (ItemContent[5]),\r
+                                     File=CurrentLineOfItem.GetFileName(),\r
+                                     Line=CurrentLineOfItem.GetLineNo(),\r
+                                     ExtraData=CurrentLineOfItem.GetLineString())\r
+                        \r
+            if len(ItemContent) == 7:\r
+                if ItemContent[6].strip() == '':\r
                     Logger.Error("InfParser",\r
-                                 ToolError.FORMAT_INVALID,\r
-                                 ST.ERR_INF_PARSER_FEATURE_FLAG_EXP_MISSING,\r
-                                 File=CurrentLineOfItem.GetFileName(),\r
-                                 Line=CurrentLineOfItem.GetLineNo(),\r
-                                 ExtraData=CurrentLineOfItem.GetLineString())\r
+                                     ToolError.FORMAT_INVALID,\r
+                                     ST.ERR_INF_PARSER_FEATURE_FLAG_EXP_MISSING,\r
+                                     File=CurrentLineOfItem.GetFileName(),\r
+                                     Line=CurrentLineOfItem.GetLineNo(),\r
+                                     ExtraData=CurrentLineOfItem.GetLineString())\r
                 #\r
                 # Validate Feature Flag Express   \r
                 #\r
-                FeatureFlagRtv = IsValidFeatureFlagExp(ItemContent[5].strip())\r
+                FeatureFlagRtv = IsValidFeatureFlagExp(ItemContent[6].strip())\r
                 if not FeatureFlagRtv[0]:\r
                     Logger.Error("InfParser",\r
                                  ToolError.FORMAT_INVALID,\r
@@ -417,7 +488,7 @@ class InfBinariesObject(InfSectionCommonDef):
                                  File=CurrentLineOfItem.GetFileName(),\r
                                  Line=CurrentLineOfItem.GetLineNo(),\r
                                  ExtraData=CurrentLineOfItem.GetLineString())\r
-                InfBianryCommonItemObj.SetFeatureFlagExp(ItemContent[5])\r
+                InfBianryCommonItemObj.SetFeatureFlagExp(ItemContent[6])\r
 \r
             InfBianryCommonItemObj.SetSupArchList(__SupArchList)\r
 \r
@@ -489,7 +560,7 @@ class InfBinariesObject(InfSectionCommonDef):
                     if len(UiContent) < 2:\r
                         Logger.Error("InfParser",\r
                                      ToolError.FORMAT_INVALID,\r
-                                     ST.ERR_INF_PARSER_BINARY_ITEM_FORMAT_INVALID % (UiContent[0]),\r
+                                     ST.ERR_INF_PARSER_BINARY_ITEM_FORMAT_INVALID % (UiContent[0], 2),\r
                                      File=UiCurrentLine.GetFileName(),\r
                                      Line=UiCurrentLine.GetLineNo(),\r
                                      ExtraData=UiCurrentLine.GetLineString())\r