]> git.proxmox.com Git - mirror_edk2.git/blobdiff - BaseTools/Source/Python/UPT/GenMetaFile/GenMetaFileMisc.py
BaseTools/UPT: Support Multiple Installation
[mirror_edk2.git] / BaseTools / Source / Python / UPT / GenMetaFile / GenMetaFileMisc.py
index 3c6c9ee2907e7dc0cd7244fc2595daf146b0b78c..ae8dc85e3e64576127d06b040f8b28068e6b9779 100644 (file)
@@ -79,6 +79,10 @@ def AddExternToDefineSec(SectionDict, Arch, ExternList):
 # Using TokenSpaceGuidValue and Token to obtain PcdName from DEC file\r
 #\r
 def ObtainPcdName(Packages, TokenSpaceGuidValue, Token):\r
+    TokenSpaceGuidName = ''\r
+    PcdCName = ''\r
+    TokenSpaceGuidNameFound = False\r
+\r
     for PackageDependency in Packages:\r
         #\r
         # Generate generic comment\r
@@ -86,6 +90,7 @@ def ObtainPcdName(Packages, TokenSpaceGuidValue, Token):
         Guid = PackageDependency.GetGuid()\r
         Version = PackageDependency.GetVersion()\r
 \r
+        Path = None\r
         #\r
         # find package path/name\r
         # \r
@@ -95,41 +100,58 @@ def ObtainPcdName(Packages, TokenSpaceGuidValue, Token):
                     Path = PkgInfo[3]\r
                     break\r
 \r
-        DecFile = None\r
-        if Path not in GlobalData.gPackageDict:\r
-            DecFile = Dec(Path)\r
-            GlobalData.gPackageDict[Path] = DecFile\r
-        else:\r
-            DecFile = GlobalData.gPackageDict[Path]\r
-\r
-        DecGuidsDict = DecFile.GetGuidSectionObject().ValueDict\r
-        DecPcdsDict = DecFile.GetPcdSectionObject().ValueDict\r
-\r
-        TokenSpaceGuidName = ''\r
-        PcdCName = ''\r
-        TokenSpaceGuidNameFound = False\r
-\r
-        #\r
-        # Get TokenSpaceGuidCName from Guids section \r
-        #\r
-        for GuidKey in DecGuidsDict:\r
-            GuidList = DecGuidsDict[GuidKey]\r
-            for GuidItem in GuidList:\r
-                if TokenSpaceGuidValue.upper() == GuidItem.GuidString.upper():\r
-                    TokenSpaceGuidName = GuidItem.GuidCName\r
-                    TokenSpaceGuidNameFound = True\r
+        # The dependency package in workspace\r
+        if Path:\r
+            DecFile = None\r
+            if Path not in GlobalData.gPackageDict:\r
+                DecFile = Dec(Path)\r
+                GlobalData.gPackageDict[Path] = DecFile\r
+            else:\r
+                DecFile = GlobalData.gPackageDict[Path]\r
+\r
+            DecGuidsDict = DecFile.GetGuidSectionObject().ValueDict\r
+            DecPcdsDict = DecFile.GetPcdSectionObject().ValueDict\r
+\r
+            TokenSpaceGuidName = ''\r
+            PcdCName = ''\r
+            TokenSpaceGuidNameFound = False\r
+\r
+            #\r
+            # Get TokenSpaceGuidCName from Guids section\r
+            #\r
+            for GuidKey in DecGuidsDict:\r
+                GuidList = DecGuidsDict[GuidKey]\r
+                for GuidItem in GuidList:\r
+                    if TokenSpaceGuidValue.upper() == GuidItem.GuidString.upper():\r
+                        TokenSpaceGuidName = GuidItem.GuidCName\r
+                        TokenSpaceGuidNameFound = True\r
+                        break\r
+                if TokenSpaceGuidNameFound:\r
                     break\r
-            if TokenSpaceGuidNameFound:\r
-                break\r
-        #\r
-        # Retrieve PcdCName from Pcds Section\r
-        #\r
-        for PcdKey in DecPcdsDict:\r
-            PcdList = DecPcdsDict[PcdKey]\r
-            for PcdItem in PcdList:\r
-                if TokenSpaceGuidName == PcdItem.TokenSpaceGuidCName and Token == PcdItem.TokenValue:\r
-                    PcdCName = PcdItem.TokenCName\r
-                    return TokenSpaceGuidName, PcdCName\r
+            #\r
+            # Retrieve PcdCName from Pcds Section\r
+            #\r
+            for PcdKey in DecPcdsDict:\r
+                PcdList = DecPcdsDict[PcdKey]\r
+                for PcdItem in PcdList:\r
+                    if TokenSpaceGuidName == PcdItem.TokenSpaceGuidCName and Token == PcdItem.TokenValue:\r
+                        PcdCName = PcdItem.TokenCName\r
+                        return TokenSpaceGuidName, PcdCName\r
+\r
+        # The dependency package in ToBeInstalledDist\r
+        else:\r
+            for Dist in GlobalData.gTO_BE_INSTALLED_DIST_LIST:\r
+                for Package in Dist.PackageSurfaceArea.values():\r
+                    if Guid == Package.Guid:\r
+                        for GuidItem in Package.GuidList:\r
+                            if TokenSpaceGuidValue.upper() == GuidItem.Guid.upper():\r
+                                TokenSpaceGuidName = GuidItem.CName\r
+                                TokenSpaceGuidNameFound = True\r
+                                break\r
+                        for PcdItem in Package.PcdList:\r
+                            if TokenSpaceGuidName == PcdItem.TokenSpaceGuidCName and Token == PcdItem.Token:\r
+                                PcdCName = PcdItem.CName\r
+                                return TokenSpaceGuidName, PcdCName\r
 \r
     return TokenSpaceGuidName, PcdCName\r
 \r