]> git.proxmox.com Git - mirror_edk2.git/blobdiff - BaseTools/Source/Python/Workspace/WorkspaceDatabase.py
BaseTools: report error for same Guid's Private definition conflict
[mirror_edk2.git] / BaseTools / Source / Python / Workspace / WorkspaceDatabase.py
index ceaa4b8e0aa36ae16adeb306c2132b2b8a19abc6..46179a39e9b5a6427eab28b4aa93ba58e843f0fc 100644 (file)
@@ -1410,6 +1410,7 @@ class DecBuildData(PackageBuildClassObject):
             PrivateProtocolDict = tdict(True)\r
             NameList = []\r
             PrivateNameList = []\r
+            PublicNameList = []\r
             # find out all protocol definitions for specific and 'common' arch\r
             RecordList = self._RawData[MODEL_EFI_PROTOCOL, self._Arch]\r
             for Name, Guid, Dummy, Arch, PrivateFlag, ID, LineNo in RecordList:\r
@@ -1417,6 +1418,13 @@ class DecBuildData(PackageBuildClassObject):
                     if Name not in PrivateNameList:\r
                         PrivateNameList.append(Name)\r
                         PrivateProtocolDict[Arch, Name] = Guid\r
+                    if Name in PublicNameList:\r
+                        EdkLogger.error('build', OPTION_CONFLICT, "Can't determine %s's attribute, it is both defined as Private and non-Private attribute in DEC file." % Name, File=self.MetaFile, Line=LineNo)\r
+                else:\r
+                    if Name not in PublicNameList:\r
+                        PublicNameList.append(Name)\r
+                    if Name in PrivateNameList:\r
+                        EdkLogger.error('build', OPTION_CONFLICT, "Can't determine %s's attribute, it is both defined as Private and non-Private attribute in DEC file." % Name, File=self.MetaFile, Line=LineNo)\r
                 if Name not in NameList:\r
                     NameList.append(Name)\r
                 ProtocolDict[Arch, Name] = Guid\r
@@ -1444,6 +1452,7 @@ class DecBuildData(PackageBuildClassObject):
             PrivatePpiDict = tdict(True)\r
             NameList = []\r
             PrivateNameList = []\r
+            PublicNameList = []\r
             # find out all PPI definitions for specific arch and 'common' arch\r
             RecordList = self._RawData[MODEL_EFI_PPI, self._Arch]\r
             for Name, Guid, Dummy, Arch, PrivateFlag, ID, LineNo in RecordList:\r
@@ -1451,6 +1460,13 @@ class DecBuildData(PackageBuildClassObject):
                     if Name not in PrivateNameList:\r
                         PrivateNameList.append(Name)\r
                         PrivatePpiDict[Arch, Name] = Guid\r
+                    if Name in PublicNameList:\r
+                        EdkLogger.error('build', OPTION_CONFLICT, "Can't determine %s's attribute, it is both defined as Private and non-Private attribute in DEC file." % Name, File=self.MetaFile, Line=LineNo)\r
+                else:\r
+                    if Name not in PublicNameList:\r
+                        PublicNameList.append(Name)\r
+                    if Name in PrivateNameList:\r
+                        EdkLogger.error('build', OPTION_CONFLICT, "Can't determine %s's attribute, it is both defined as Private and non-Private attribute in DEC file." % Name, File=self.MetaFile, Line=LineNo)\r
                 if Name not in NameList:\r
                     NameList.append(Name)\r
                 PpiDict[Arch, Name] = Guid\r
@@ -1478,6 +1494,7 @@ class DecBuildData(PackageBuildClassObject):
             PrivateGuidDict = tdict(True)\r
             NameList = []\r
             PrivateNameList = []\r
+            PublicNameList = []\r
             # find out all protocol definitions for specific and 'common' arch\r
             RecordList = self._RawData[MODEL_EFI_GUID, self._Arch]\r
             for Name, Guid, Dummy, Arch, PrivateFlag, ID, LineNo in RecordList:\r
@@ -1485,6 +1502,13 @@ class DecBuildData(PackageBuildClassObject):
                     if Name not in PrivateNameList:\r
                         PrivateNameList.append(Name)\r
                         PrivateGuidDict[Arch, Name] = Guid\r
+                    if Name in PublicNameList:\r
+                        EdkLogger.error('build', OPTION_CONFLICT, "Can't determine %s's attribute, it is both defined as Private and non-Private attribute in DEC file." % Name, File=self.MetaFile, Line=LineNo)\r
+                else:\r
+                    if Name not in PublicNameList:\r
+                        PublicNameList.append(Name)\r
+                    if Name in PrivateNameList:\r
+                        EdkLogger.error('build', OPTION_CONFLICT, "Can't determine %s's attribute, it is both defined as Private and non-Private attribute in DEC file." % Name, File=self.MetaFile, Line=LineNo)\r
                 if Name not in NameList:\r
                     NameList.append(Name)\r
                 GuidDict[Arch, Name] = Guid\r
@@ -1506,6 +1530,7 @@ class DecBuildData(PackageBuildClassObject):
         if self._Includes == None:\r
             self._Includes = []\r
             self._PrivateIncludes = []\r
+            PublicInclues = []\r
             RecordList = self._RawData[MODEL_EFI_INCLUDE, self._Arch]\r
             Macros = self._Macros\r
             Macros["EDK_SOURCE"] = GlobalData.gEcpSource\r
@@ -1523,6 +1548,14 @@ class DecBuildData(PackageBuildClassObject):
                 if Record[4] == 'PRIVATE':\r
                     if File not in self._PrivateIncludes:\r
                         self._PrivateIncludes.append(File)\r
+                    if File in PublicInclues:\r
+                        EdkLogger.error('build', OPTION_CONFLICT, "Can't determine %s's attribute, it is both defined as Private and non-Private attribute in DEC file." % File, File=self.MetaFile, Line=LineNo)\r
+                else:\r
+                    if File not in PublicInclues:\r
+                        PublicInclues.append(File)\r
+                    if File in self._PrivateIncludes:\r
+                        EdkLogger.error('build', OPTION_CONFLICT, "Can't determine %s's attribute, it is both defined as Private and non-Private attribute in DEC file." % File, File=self.MetaFile, Line=LineNo)\r
+\r
         return self._Includes\r
 \r
     ## Retrieve library class declarations (not used in build at present)\r