]> git.proxmox.com Git - mirror_edk2.git/blobdiff - BaseTools/Source/Python/GenFds/FdfParser.py
BaseTools: Fix the problem using FILE_GUID override in .dsc
[mirror_edk2.git] / BaseTools / Source / Python / GenFds / FdfParser.py
index d954c0b40b3bc79a6bbff32b94beb6568a65e018..2fbbad114c9e7012f5c0f6dca55e5cc687ea9ec4 100644 (file)
@@ -24,7 +24,7 @@ from uuid import UUID
 \r
 from Common.BuildToolError import *\r
 from Common import EdkLogger\r
-from Common.Misc import PathClass, tdict\r
+from Common.Misc import PathClass, tdict, ProcessDuplicatedInf\r
 from Common.StringUtils import NormPath, ReplaceMacro\r
 from Common import GlobalData\r
 from Common.Expression import *\r
@@ -65,8 +65,9 @@ T_CHAR_TAB = '\t'
 T_CHAR_DOUBLE_QUOTE = '\"'\r
 T_CHAR_SINGLE_QUOTE = '\''\r
 T_CHAR_STAR = '*'\r
+T_CHAR_BRACE_R = '}'\r
 \r
-SEPARATORS = {TAB_EQUAL_SPLIT, TAB_VALUE_SPLIT, TAB_COMMA_SPLIT, '{', '}'}\r
+SEPARATORS = {TAB_EQUAL_SPLIT, TAB_VALUE_SPLIT, TAB_COMMA_SPLIT, '{', T_CHAR_BRACE_R}\r
 ALIGNMENTS = {"Auto", "8", "16", "32", "64", "128", "512", "1K", "4K", "32K", "64K", "128K",\r
                                     "256K", "512K", "1M", "2M", "4M", "8M", "16M"}\r
 ALIGNMENT_NOAUTO = ALIGNMENTS - {"Auto"}\r
@@ -2021,7 +2022,7 @@ class FdfParser:
                 DataString += self._Token\r
                 DataString += TAB_COMMA_SPLIT\r
 \r
-        if not self._IsToken("}"):\r
+        if not self._IsToken(T_CHAR_BRACE_R):\r
             raise Warning.ExpectedCurlyClose(self.FileName, self.CurrentLineNumber)\r
 \r
         DataString = DataString.rstrip(TAB_COMMA_SPLIT)\r
@@ -2061,7 +2062,7 @@ class FdfParser:
                     DataString += self._Token\r
                     DataString += TAB_COMMA_SPLIT\r
 \r
-            if not self._IsToken("}"):\r
+            if not self._IsToken(T_CHAR_BRACE_R):\r
                 raise Warning.ExpectedCurlyClose(self.FileName, self.CurrentLineNumber)\r
 \r
             DataString = DataString.rstrip(TAB_COMMA_SPLIT)\r
@@ -2330,10 +2331,10 @@ class FdfParser:
                 DataString += self._Token\r
                 DataString += TAB_COMMA_SPLIT\r
 \r
-            if not self._IsToken("}"):\r
+            if not self._IsToken(T_CHAR_BRACE_R):\r
                 raise Warning.ExpectedCurlyClose(self.FileName, self.CurrentLineNumber)\r
 \r
-            if not self._IsToken("}"):\r
+            if not self._IsToken(T_CHAR_BRACE_R):\r
                 raise Warning.ExpectedCurlyClose(self.FileName, self.CurrentLineNumber)\r
 \r
             DataString = DataString.rstrip(TAB_COMMA_SPLIT)\r
@@ -2348,7 +2349,7 @@ class FdfParser:
 \r
             FvObj.FvExtEntryData.append(self._Token)\r
 \r
-            if not self._IsToken("}"):\r
+            if not self._IsToken(T_CHAR_BRACE_R):\r
                 raise Warning.ExpectedCurlyClose(self.FileName, self.CurrentLineNumber)\r
 \r
         return True\r
@@ -2384,7 +2385,7 @@ class FdfParser:
             if not IsInf and not IsFile:\r
                 break\r
 \r
-        if not self._IsToken("}"):\r
+        if not self._IsToken(T_CHAR_BRACE_R):\r
             raise Warning.ExpectedCurlyClose(self.FileName, self.CurrentLineNumber)\r
 \r
         FvObj.AprioriSectionList.append(AprSectionObj)\r
@@ -2415,8 +2416,12 @@ class FdfParser:
             if ErrorCode != 0:\r
                 EdkLogger.error("GenFds", ErrorCode, ExtraData=ErrorInfo)\r
 \r
-        if not ffsInf.InfFileName in self.Profile.InfList:\r
-            self.Profile.InfList.append(ffsInf.InfFileName)\r
+        NewFileName = ffsInf.InfFileName\r
+        if ffsInf.OverrideGuid:\r
+            NewFileName = ProcessDuplicatedInf(PathClass(ffsInf.InfFileName,GenFdsGlobalVariable.WorkSpaceDir), ffsInf.OverrideGuid, GenFdsGlobalVariable.WorkSpaceDir).Path\r
+\r
+        if not NewFileName in self.Profile.InfList:\r
+            self.Profile.InfList.append(NewFileName)\r
             FileLineTuple = GetRealFileLine(self.FileName, self.CurrentLineNumber)\r
             self.Profile.InfFileLineList.append(FileLineTuple)\r
             if ffsInf.UseArch:\r
@@ -2659,7 +2664,7 @@ class FdfParser:
             FfsFileObj.FileName = self._Token.replace('$(SPACE)', ' ')\r
             self._VerifyFile(FfsFileObj.FileName)\r
 \r
-        if not self._IsToken("}"):\r
+        if not self._IsToken(T_CHAR_BRACE_R):\r
             raise Warning.ExpectedCurlyClose(self.FileName, self.CurrentLineNumber)\r
 \r
     ## _GetRAWData() method\r
@@ -2684,7 +2689,7 @@ class FdfParser:
                 raise Warning.Expected("Filename value", self.FileName, self.CurrentLineNumber)\r
 \r
             FileName = self._Token.replace('$(SPACE)', ' ')\r
-            if FileName == '}':\r
+            if FileName == T_CHAR_BRACE_R:\r
                 self._UndoToken()\r
                 raise Warning.Expected("Filename value", self.FileName, self.CurrentLineNumber)\r
 \r
@@ -2693,7 +2698,7 @@ class FdfParser:
             FfsFileObj.FileName.append(File.Path)\r
             FfsFileObj.SubAlignment.append(AlignValue)\r
 \r
-            if self._IsToken("}"):\r
+            if self._IsToken(T_CHAR_BRACE_R):\r
                 self._UndoToken()\r
                 break\r
 \r
@@ -2865,7 +2870,7 @@ class FdfParser:
                     if not IsInf and not IsFile:\r
                         break\r
 \r
-                if not self._IsToken("}"):\r
+                if not self._IsToken(T_CHAR_BRACE_R):\r
                     raise Warning.ExpectedCurlyClose(self.FileName, self.CurrentLineNumber)\r
 \r
             FvImageSectionObj = FvImageSection()\r
@@ -2890,10 +2895,10 @@ class FdfParser:
                 raise Warning.ExpectedEquals(self.FileName, self.CurrentLineNumber)\r
             if not self._IsToken("{"):\r
                 raise Warning.ExpectedCurlyOpen(self.FileName, self.CurrentLineNumber)\r
-            if not self._SkipToToken("}"):\r
+            if not self._SkipToToken(T_CHAR_BRACE_R):\r
                 raise Warning.Expected("Depex expression ending '}'", self.FileName, self.CurrentLineNumber)\r
 \r
-            DepexSectionObj.Expression = self._SkippedChars.rstrip('}')\r
+            DepexSectionObj.Expression = self._SkippedChars.rstrip(T_CHAR_BRACE_R)\r
             Obj.SectionList.append(DepexSectionObj)\r
 \r
         else:\r
@@ -2984,7 +2989,7 @@ class FdfParser:
                     break\r
 \r
 \r
-            if not self._IsToken("}"):\r
+            if not self._IsToken(T_CHAR_BRACE_R):\r
                 raise Warning.ExpectedCurlyClose(self.FileName, self.CurrentLineNumber)\r
             Obj.SectionList.append(CompressSectionObj)\r
             return True\r
@@ -3011,7 +3016,7 @@ class FdfParser:
                 if not IsLeafSection and not IsEncapSection:\r
                     break\r
 \r
-            if not self._IsToken("}"):\r
+            if not self._IsToken(T_CHAR_BRACE_R):\r
                 raise Warning.ExpectedCurlyClose(self.FileName, self.CurrentLineNumber)\r
             Obj.SectionList.append(GuidSectionObj)\r
 \r
@@ -3689,7 +3694,7 @@ class FdfParser:
                 if not IsEncapsulate and not IsLeaf:\r
                     break\r
 \r
-            if not self._IsToken("}"):\r
+            if not self._IsToken(T_CHAR_BRACE_R):\r
                 raise Warning.ExpectedCurlyClose(self.FileName, self.CurrentLineNumber)\r
 \r
             return NewRule\r
@@ -3789,7 +3794,7 @@ class FdfParser:
                     if not IsInf and not IsFile:\r
                         break\r
 \r
-                if not self._IsToken("}"):\r
+                if not self._IsToken(T_CHAR_BRACE_R):\r
                     raise Warning.ExpectedCurlyClose(self.FileName, self.CurrentLineNumber)\r
                 FvImageSectionObj.Fv = FvObj\r
                 FvImageSectionObj.FvName = None\r
@@ -3808,7 +3813,7 @@ class FdfParser:
                     FvImageSectionObj.FvFileExtension = self._GetFileExtension()\r
                 elif self._GetNextToken():\r
                     if self._Token not in {\r
-                            "}", "COMPAT16", BINARY_FILE_TYPE_PE32,\r
+                            T_CHAR_BRACE_R, "COMPAT16", BINARY_FILE_TYPE_PE32,\r
                             BINARY_FILE_TYPE_PIC, BINARY_FILE_TYPE_TE,\r
                             "FV_IMAGE", "RAW", BINARY_FILE_TYPE_DXE_DEPEX,\r
                             BINARY_FILE_TYPE_UI, "VERSION",\r
@@ -3894,7 +3899,7 @@ class FdfParser:
             EfiSectionObj.FileExtension = self._GetFileExtension()\r
         elif self._GetNextToken():\r
             if self._Token not in {\r
-                    "}", "COMPAT16", BINARY_FILE_TYPE_PE32,\r
+                    T_CHAR_BRACE_R, "COMPAT16", BINARY_FILE_TYPE_PE32,\r
                     BINARY_FILE_TYPE_PIC, BINARY_FILE_TYPE_TE,\r
                     "FV_IMAGE", "RAW", BINARY_FILE_TYPE_DXE_DEPEX,\r
                     BINARY_FILE_TYPE_UI, "VERSION",\r
@@ -4037,7 +4042,7 @@ class FdfParser:
                 if not IsEncapsulate and not IsLeaf:\r
                     break\r
 \r
-            if not self._IsToken("}"):\r
+            if not self._IsToken(T_CHAR_BRACE_R):\r
                 raise Warning.ExpectedCurlyClose(self.FileName, self.CurrentLineNumber)\r
             theRule.SectionList.append(CompressSectionObj)\r
 \r
@@ -4069,7 +4074,7 @@ class FdfParser:
                 if not IsEncapsulate and not IsLeaf:\r
                     break\r
 \r
-            if not self._IsToken("}"):\r
+            if not self._IsToken(T_CHAR_BRACE_R):\r
                 raise Warning.ExpectedCurlyClose(self.FileName, self.CurrentLineNumber)\r
             theRule.SectionList.append(GuidSectionObj)\r
 \r
@@ -4345,8 +4350,12 @@ class FdfParser:
             if ErrorCode != 0:\r
                 EdkLogger.error("GenFds", ErrorCode, ExtraData=ErrorInfo)\r
 \r
-        if not ffsInf.InfFileName in self.Profile.InfList:\r
-            self.Profile.InfList.append(ffsInf.InfFileName)\r
+        NewFileName = ffsInf.InfFileName\r
+        if ffsInf.OverrideGuid:\r
+            NewFileName = ProcessDuplicatedInf(PathClass(ffsInf.InfFileName,GenFdsGlobalVariable.WorkSpaceDir), ffsInf.OverrideGuid, GenFdsGlobalVariable.WorkSpaceDir).Path\r
+\r
+        if not NewFileName in self.Profile.InfList:\r
+            self.Profile.InfList.append(NewFileName)\r
             FileLineTuple = GetRealFileLine(self.FileName, self.CurrentLineNumber)\r
             self.Profile.InfFileLineList.append(FileLineTuple)\r
             if ffsInf.UseArch:\r
@@ -4393,10 +4402,12 @@ class FdfParser:
                 if self._IsKeyword("PCI_DEVICE_ID"):\r
                     if not self._IsToken(TAB_EQUAL_SPLIT):\r
                         raise Warning.ExpectedEquals(self.FileName, self.CurrentLineNumber)\r
-                    if not self._GetNextHexNumber():\r
-                        raise Warning.Expected("Hex device id", self.FileName, self.CurrentLineNumber)\r
-\r
-                    Overrides.PciDeviceId = self._Token\r
+                    # Get a list of PCI IDs\r
+                    Overrides.PciDeviceId = ""\r
+                    while (self._GetNextHexNumber()):\r
+                        Overrides.PciDeviceId = "{} {}".format(Overrides.PciDeviceId, self._Token)\r
+                    if not Overrides.PciDeviceId:\r
+                        raise Warning.Expected("one or more Hex device ids", self.FileName, self.CurrentLineNumber)\r
                     continue\r
 \r
                 if self._IsKeyword("PCI_REVISION"):\r
@@ -4415,7 +4426,7 @@ class FdfParser:
                     Overrides.NeedCompress = self._Token.upper() == 'TRUE'\r
                     continue\r
 \r
-                if self._IsToken("}"):\r
+                if self._IsToken(T_CHAR_BRACE_R):\r
                     break\r
                 else:\r
                     EdkLogger.error("FdfParser", FORMAT_INVALID, File=self.FileName, Line=self.CurrentLineNumber)\r