]> git.proxmox.com Git - mirror_edk2.git/blobdiff - BaseTools/Source/Python/Workspace/InfBuildData.py
BaseTools: AutoGen refactor WorkspaceAutoGen class
[mirror_edk2.git] / BaseTools / Source / Python / Workspace / InfBuildData.py
index cf5e1df3a523b7b70b57a4d6c28a83e913d534b7..d666c092a6de67faac6d9c1408ac07c0c8f9b6a3 100644 (file)
 # WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.\r
 #\r
 \r
-from Common.String import *\r
+from __future__ import absolute_import\r
+from Common.StringUtils import *\r
 from Common.DataType import *\r
 from Common.Misc import *\r
 from types import *\r
-from MetaFileParser import *\r
+from .MetaFileParser import *\r
 from collections import OrderedDict\r
 \r
 from Workspace.BuildClassObject import ModuleBuildClassObject, LibraryClassObject, PcdClassObject\r
@@ -172,36 +173,10 @@ class InfBuildData(ModuleBuildClassObject):
     def _GetArch(self):\r
         return self._Arch\r
 \r
-    ## Set architecture\r
-    #\r
-    #   Changing the default ARCH to another may affect all other information\r
-    # because all information in a platform may be ARCH-related. That's\r
-    # why we need to clear all internal used members, in order to cause all\r
-    # information to be re-retrieved.\r
-    #\r
-    #   @param  Value   The value of ARCH\r
-    #\r
-    def _SetArch(self, Value):\r
-        if self._Arch == Value:\r
-            return\r
-        self._Arch = Value\r
-        self._Clear()\r
-\r
     ## Return the name of platform employing this module\r
     def _GetPlatform(self):\r
         return self._Platform\r
 \r
-    ## Change the name of platform employing this module\r
-    #\r
-    #   Changing the default name of platform to another may affect some information\r
-    # because they may be PLATFORM-related. That's why we need to clear all internal\r
-    # used members, in order to cause all information to be re-retrieved.\r
-    #\r
-    def _SetPlatform(self, Value):\r
-        if self._Platform == Value:\r
-            return\r
-        self._Platform = Value\r
-        self._Clear()\r
     def _GetHeaderComments(self):\r
         if not self._HeaderComments:\r
             self._HeaderComments = []\r
@@ -277,10 +252,10 @@ class InfBuildData(ModuleBuildClassObject):
                 if self._CustomMakefile is None:\r
                     self._CustomMakefile = {}\r
                 if len(TokenList) < 2:\r
-                    self._CustomMakefile['MSFT'] = TokenList[0]\r
+                    self._CustomMakefile[TAB_COMPILER_MSFT] = TokenList[0]\r
                     self._CustomMakefile['GCC'] = TokenList[0]\r
                 else:\r
-                    if TokenList[0] not in ['MSFT', 'GCC']:\r
+                    if TokenList[0] not in [TAB_COMPILER_MSFT, 'GCC']:\r
                         EdkLogger.error("build", FORMAT_NOT_SUPPORTED,\r
                                         "No supported family [%s]" % TokenList[0],\r
                                         File=self.MetaFile, Line=Record[-1])\r
@@ -369,11 +344,7 @@ class InfBuildData(ModuleBuildClassObject):
                     self._Sources.append(File)\r
                 else:\r
                     ToolList = self._NMAKE_FLAG_PATTERN_.findall(Name)\r
-                    if len(ToolList) == 0 or len(ToolList) != 1:\r
-                        pass\r
-#                        EdkLogger.warn("build", "Don't know how to do with macro [%s]" % Name,\r
-#                                       File=self.MetaFile, Line=LineNo)\r
-                    else:\r
+                    if len(ToolList) == 1:\r
                         if self._BuildOptions is None:\r
                             self._BuildOptions = OrderedDict()\r
 \r
@@ -382,7 +353,7 @@ class InfBuildData(ModuleBuildClassObject):
                         else:\r
                             Tool = ToolList[0]\r
                         ToolChain = "*_*_*_%s_FLAGS" % Tool\r
-                        ToolChainFamily = 'MSFT'  # Edk.x only support MSFT tool chain\r
+                        # Edk.x only support MSFT tool chain\r
                         # ignore not replaced macros in value\r
                         ValueList = GetSplitList(' ' + Value, '/D')\r
                         Dummy = ValueList[0]\r
@@ -391,11 +362,11 @@ class InfBuildData(ModuleBuildClassObject):
                                 continue\r
                             Dummy = Dummy + ' /D ' + ValueList[Index]\r
                         Value = Dummy.strip()\r
-                        if (ToolChainFamily, ToolChain) not in self._BuildOptions:\r
-                            self._BuildOptions[ToolChainFamily, ToolChain] = Value\r
+                        if (TAB_COMPILER_MSFT, ToolChain) not in self._BuildOptions:\r
+                            self._BuildOptions[TAB_COMPILER_MSFT, ToolChain] = Value\r
                         else:\r
-                            OptionString = self._BuildOptions[ToolChainFamily, ToolChain]\r
-                            self._BuildOptions[ToolChainFamily, ToolChain] = OptionString + " " + Value\r
+                            OptionString = self._BuildOptions[TAB_COMPILER_MSFT, ToolChain]\r
+                            self._BuildOptions[TAB_COMPILER_MSFT, ToolChain] = OptionString + " " + Value\r
         # set _Header to non-None in order to avoid database re-querying\r
         self._Header_ = 'DUMMY'\r
 \r
@@ -607,12 +578,7 @@ class InfBuildData(ModuleBuildClassObject):
             EdkLogger.error('build', RESOURCE_NOT_AVAILABLE, ExtraData=ErrorInfo, File=self.MetaFile)\r
 \r
         return Binaries\r
-    ## Check whether it exists the binaries with current ARCH in AsBuild INF\r
-    def _IsSupportedArch(self):\r
-        if self._GetBinaries() and not self._GetSourceFiles():\r
-            return True\r
-        else:\r
-            return False\r
+\r
     ## Retrieve source files\r
     def _GetSourceFiles(self):\r
         # Ignore all source files in a binary build mode\r
@@ -698,7 +664,7 @@ class InfBuildData(ModuleBuildClassObject):
                 CName = Record[0]\r
                 Value = ProtocolValue(CName, self.Packages, self.MetaFile.Path)\r
                 if Value is None:\r
-                    PackageList = "\n\t".join([str(P) for P in self.Packages])\r
+                    PackageList = "\n\t".join(str(P) for P in self.Packages)\r
                     EdkLogger.error('build', RESOURCE_NOT_AVAILABLE,\r
                                     "Value of Protocol [%s] is not found under [Protocols] section in" % CName,\r
                                     ExtraData=PackageList, File=self.MetaFile, Line=Record[-1])\r
@@ -723,7 +689,7 @@ class InfBuildData(ModuleBuildClassObject):
                 CName = Record[0]\r
                 Value = PpiValue(CName, self.Packages, self.MetaFile.Path)\r
                 if Value is None:\r
-                    PackageList = "\n\t".join([str(P) for P in self.Packages])\r
+                    PackageList = "\n\t".join(str(P) for P in self.Packages)\r
                     EdkLogger.error('build', RESOURCE_NOT_AVAILABLE,\r
                                     "Value of PPI [%s] is not found under [Ppis] section in " % CName,\r
                                     ExtraData=PackageList, File=self.MetaFile, Line=Record[-1])\r
@@ -748,7 +714,7 @@ class InfBuildData(ModuleBuildClassObject):
                 CName = Record[0]\r
                 Value = GuidValue(CName, self.Packages, self.MetaFile.Path)\r
                 if Value is None:\r
-                    PackageList = "\n\t".join([str(P) for P in self.Packages])\r
+                    PackageList = "\n\t".join(str(P) for P in self.Packages)\r
                     EdkLogger.error('build', RESOURCE_NOT_AVAILABLE,\r
                                     "Value of Guid [%s] is not found under [Guids] section in" % CName,\r
                                     ExtraData=PackageList, File=self.MetaFile, Line=Record[-1])\r
@@ -911,14 +877,24 @@ class InfBuildData(ModuleBuildClassObject):
                                             ExtraData=Token, File=self.MetaFile, Line=Record[-1])\r
                         DepexList.append(Module.Guid)\r
                     else:\r
-                        # get the GUID value now\r
-                        Value = ProtocolValue(Token, self.Packages, self.MetaFile.Path)\r
-                        if Value is None:\r
-                            Value = PpiValue(Token, self.Packages, self.MetaFile.Path)\r
+                        # it use the Fixed PCD format\r
+                        if '.' in Token:\r
+                            if tuple(Token.split('.')[::-1]) not in self.Pcds:\r
+                                EdkLogger.error('build', RESOURCE_NOT_AVAILABLE, "PCD [{}] used in [Depex] section should be listed in module PCD section".format(Token), File=self.MetaFile, Line=Record[-1])\r
+                            else:\r
+                                if self.Pcds[tuple(Token.split('.')[::-1])].DatumType != TAB_VOID:\r
+                                    EdkLogger.error('build', FORMAT_INVALID, "PCD [{}] used in [Depex] section should be VOID* datum type".format(Token), File=self.MetaFile, Line=Record[-1])\r
+                            Value = Token\r
+                        else:\r
+                            # get the GUID value now\r
+                            Value = ProtocolValue(Token, self.Packages, self.MetaFile.Path)\r
                             if Value is None:\r
-                                Value = GuidValue(Token, self.Packages, self.MetaFile.Path)\r
+                                Value = PpiValue(Token, self.Packages, self.MetaFile.Path)\r
+                                if Value is None:\r
+                                    Value = GuidValue(Token, self.Packages, self.MetaFile.Path)\r
+\r
                         if Value is None:\r
-                            PackageList = "\n\t".join([str(P) for P in self.Packages])\r
+                            PackageList = "\n\t".join(str(P) for P in self.Packages)\r
                             EdkLogger.error('build', RESOURCE_NOT_AVAILABLE,\r
                                             "Value of [%s] is not found in" % Token,\r
                                             ExtraData=PackageList, File=self.MetaFile, Line=Record[-1])\r
@@ -961,7 +937,7 @@ class InfBuildData(ModuleBuildClassObject):
             if TokenSpaceGuid not in self.Guids:\r
                 Value = GuidValue(TokenSpaceGuid, self.Packages, self.MetaFile.Path)\r
                 if Value is None:\r
-                    PackageList = "\n\t".join([str(P) for P in self.Packages])\r
+                    PackageList = "\n\t".join(str(P) for P in self.Packages)\r
                     EdkLogger.error('build', RESOURCE_NOT_AVAILABLE,\r
                                     "Value of Guid [%s] is not found under [Guids] section in" % TokenSpaceGuid,\r
                                     ExtraData=PackageList, File=self.MetaFile, Line=LineNo)\r
@@ -1116,12 +1092,12 @@ class InfBuildData(ModuleBuildClassObject):
                     Pcd.DatumType = PcdInPackage.DatumType\r
                     Pcd.MaxDatumSize = PcdInPackage.MaxDatumSize\r
                     Pcd.InfDefaultValue = Pcd.DefaultValue\r
-                    if Pcd.DefaultValue in [None, '']:\r
+                    if not Pcd.DefaultValue:\r
                         Pcd.DefaultValue = PcdInPackage.DefaultValue\r
                     else:\r
                         try:\r
                             Pcd.DefaultValue = ValueExpressionEx(Pcd.DefaultValue, Pcd.DatumType, _GuidDict)(True)\r
-                        except BadExpression, Value:\r
+                        except BadExpression as Value:\r
                             EdkLogger.error('Parser', FORMAT_INVALID, 'PCD [%s.%s] Value "%s", %s' %(TokenSpaceGuid, PcdRealName, Pcd.DefaultValue, Value),\r
                                             File=self.MetaFile, Line=LineNo)\r
                     break\r
@@ -1131,7 +1107,7 @@ class InfBuildData(ModuleBuildClassObject):
                             FORMAT_INVALID,\r
                             "PCD [%s.%s] in [%s] is not found in dependent packages:" % (TokenSpaceGuid, PcdRealName, self.MetaFile),\r
                             File=self.MetaFile, Line=LineNo,\r
-                            ExtraData="\t%s" % '\n\t'.join([str(P) for P in self.Packages])\r
+                            ExtraData="\t%s" % '\n\t'.join(str(P) for P in self.Packages)\r
                             )\r
             Pcds[PcdCName, TokenSpaceGuid] = Pcd\r
 \r
@@ -1147,8 +1123,8 @@ class InfBuildData(ModuleBuildClassObject):
             return False\r
 \r
     _Macros = property(_GetMacros)\r
-    Arch = property(_GetArch, _SetArch)\r
-    Platform = property(_GetPlatform, _SetPlatform)\r
+    Arch = property(_GetArch)\r
+    Platform = property(_GetPlatform)\r
 \r
     HeaderComments = property(_GetHeaderComments)\r
     TailComments = property(_GetTailComments)\r
@@ -1189,4 +1165,3 @@ class InfBuildData(ModuleBuildClassObject):
     Depex                   = property(_GetDepex)\r
     DepexExpression         = property(_GetDepexExpression)\r
     IsBinaryModule          = property(_IsBinaryModule)\r
-    IsSupportedArch         = property(_IsSupportedArch)\r