]> git.proxmox.com Git - mirror_edk2.git/blobdiff - BaseTools/Source/Python/Workspace/DscBuildData.py
BaseTools: Latter full value should overwrite the former field value.
[mirror_edk2.git] / BaseTools / Source / Python / Workspace / DscBuildData.py
index 506ec0688f877d79cea1d3c16956ad2186fe1c5c..ac0f0bee47a9058e4fcdcc6e9a838eee6f98236f 100644 (file)
@@ -1067,6 +1067,23 @@ class DscBuildData(PlatformBuildClassObject):
                         PcdItem = BuildData.Pcds[key]\r
                         if (TokenSpaceGuidCName, TokenCName) == (PcdItem.TokenSpaceGuidCName, PcdItem.TokenCName) and FieldName =="":\r
                             PcdItem.DefaultValue = pcdvalue\r
+        #In command line, the latter full assign value in commandLine should override the former field assign value.\r
+        #For example, --pcd Token.pcd.field="" --pcd Token.pcd=H"{}"\r
+        delete_assign = []\r
+        field_assign = {}\r
+        if GlobalData.BuildOptionPcd:\r
+            for pcdTuple in GlobalData.BuildOptionPcd:\r
+                TokenSpaceGuid, Token, Field = pcdTuple[0], pcdTuple[1], pcdTuple[2]\r
+                if Field:\r
+                    if (TokenSpaceGuid, Token) not in field_assign:\r
+                        field_assign[TokenSpaceGuid, Token] = []\r
+                    field_assign[TokenSpaceGuid, Token].append(pcdTuple)\r
+                else:\r
+                    if (TokenSpaceGuid, Token) in field_assign:\r
+                        delete_assign.extend(field_assign[TokenSpaceGuid, Token])\r
+                        field_assign[TokenSpaceGuid, Token] = []\r
+            for item in delete_assign:\r
+                GlobalData.BuildOptionPcd.remove(item)\r
 \r
     @staticmethod\r
     def HandleFlexiblePcd(TokenSpaceGuidCName, TokenCName, PcdValue, PcdDatumType, GuidDict, FieldName=''):\r