]> git.proxmox.com Git - mirror_edk2.git/blobdiff - BaseTools/Source/Python/UPT/Object/Parser/InfDefineObject.py
This patch is going to:
[mirror_edk2.git] / BaseTools / Source / Python / UPT / Object / Parser / InfDefineObject.py
index c7883e6980451c95c624d8649e647526c5f40ac6..be9a0e196e39e7f861eb46e15c204c5577399800 100644 (file)
@@ -2,7 +2,7 @@
 # This file is used to define class objects of [Defines] section for INF file. \r
 # It will consumed by InfParser\r
 #\r
-# Copyright (c) 2011, Intel Corporation. All rights reserved.<BR>\r
+# Copyright (c) 2011 - 2014, Intel Corporation. All rights reserved.<BR>\r
 #\r
 # This program and the accompanying materials are licensed and made available \r
 # under the terms and conditions of the BSD License which accompanies this \r
@@ -27,6 +27,7 @@ from Library.String import GetSplitValueList
 from Library.Misc import CheckGuidRegFormat\r
 from Library.Misc import Sdict\r
 from Library.Misc import ConvPathFromAbsToRel\r
+from Library.Misc import ValidateUNIFilePath\r
 from Library.ExpressionValidate import IsValidFeatureFlagExp \r
 from Library.ParserValidate import IsValidWord\r
 from Library.ParserValidate import IsValidInfMoudleType  \r
@@ -185,6 +186,7 @@ class InfDefSection(InfDefSectionOptionRomInfo):
         self.BaseName                   = None\r
         self.FileGuid                   = None\r
         self.ModuleType                 = None\r
+        self.ModuleUniFileName          = None\r
         self.InfVersion                 = None\r
         self.EdkReleaseVersion          = None\r
         self.UefiSpecificationVersion   = None\r
@@ -216,8 +218,7 @@ class InfDefSection(InfDefSectionOptionRomInfo):
         if self.BaseName != None:    \r
             ErrorInInf(ST.ERR_INF_PARSER_DEFINE_ITEM_MORE_THAN_ONE_FOUND%(DT.TAB_INF_DEFINES_BASE_NAME),\r
                        LineInfo=self.CurrentLine)\r
-            return False   \r
-                \r
+            return False     \r
         if not (BaseName == '' or BaseName == None):\r
             if IsValidWord(BaseName) and not BaseName.startswith("_"):\r
                 self.BaseName = InfDefMember()\r
@@ -301,6 +302,23 @@ class InfDefSection(InfDefSectionOptionRomInfo):
     def GetModuleType(self):\r
         return self.ModuleType\r
     \r
+    ## SetModuleUniFileName\r
+    #\r
+    # @param ModuleUniFileName: ModuleUniFileName\r
+    #     \r
+    def SetModuleUniFileName(self, ModuleUniFileName, Comments):\r
+        if Comments:\r
+            pass\r
+        if self.ModuleUniFileName != None:\r
+            ErrorInInf(ST.ERR_INF_PARSER_DEFINE_ITEM_MORE_THAN_ONE_FOUND%(DT.TAB_INF_DEFINES_MODULE_UNI_FILE),\r
+                       LineInfo=self.CurrentLine)\r
+        self.ModuleUniFileName = ModuleUniFileName\r
+\r
+    ## GetModuleType\r
+    #                       \r
+    def GetModuleUniFileName(self):\r
+        return self.ModuleUniFileName\r
+    \r
     ## SetInfVersion\r
     #\r
     # @param InfVersion: InfVersion\r
@@ -520,10 +538,8 @@ class InfDefSection(InfDefSectionOptionRomInfo):
         # It can be a list\r
         #\r
         ValueList = []\r
-        \r
         TokenList = GetSplitValueList(EntryPoint, DT.TAB_VALUE_SPLIT)\r
         ValueList[0:len(TokenList)] = TokenList        \r
-        \r
         InfDefineEntryPointItemObj = InfDefineEntryPointItem()\r
         if not IsValidCVariableName(ValueList[0]):\r
             ErrorInInf(ST.ERR_INF_PARSER_DEFINE_FROMAT_INVALID%\\r
@@ -542,13 +558,11 @@ class InfDefSection(InfDefSectionOptionRomInfo):
             if not FeatureFlagRtv[0]:\r
                 ErrorInInf(ST.ERR_INF_PARSER_FEATURE_FLAG_EXP_SYNTAX_INVLID%\\r
                            (FeatureFlagRtv[1]),\r
-                           LineInfo=self.CurrentLine)\r
-                              \r
+                           LineInfo=self.CurrentLine)       \r
             InfDefineEntryPointItemObj.SetFeatureFlagExp(ValueList[1])     \r
         if len(ValueList) > 2:\r
             ErrorInInf(ST.ERR_INF_PARSER_DEFINE_FROMAT_INVALID%(EntryPoint),\r
                        LineInfo=self.CurrentLine)\r
-            \r
         InfDefineEntryPointItemObj.Comments = Comments             \r
         self.EntryPoint.append(InfDefineEntryPointItemObj)       \r
         \r
@@ -563,10 +577,8 @@ class InfDefSection(InfDefSectionOptionRomInfo):
         # It can be a list\r
         #\r
         ValueList = []\r
-        \r
         TokenList = GetSplitValueList(UnloadImages, DT.TAB_VALUE_SPLIT)\r
         ValueList[0:len(TokenList)] = TokenList        \r
-        \r
         InfDefineUnloadImageItemObj = InfDefineUnloadImageItem()\r
         if not IsValidCVariableName(ValueList[0]):\r
             ErrorInInf(ST.ERR_INF_PARSER_DEFINE_FROMAT_INVALID%(ValueList[0]),\r
@@ -588,7 +600,6 @@ class InfDefSection(InfDefSectionOptionRomInfo):
         if len(ValueList) > 2:\r
             ErrorInInf(ST.ERR_INF_PARSER_DEFINE_FROMAT_INVALID%(UnloadImages),\r
                        LineInfo=self.CurrentLine)\r
-            \r
         InfDefineUnloadImageItemObj.Comments = Comments\r
         self.UnloadImages.append(InfDefineUnloadImageItemObj)\r
         \r
@@ -603,10 +614,8 @@ class InfDefSection(InfDefSectionOptionRomInfo):
         # It can be a list\r
         #\r
         ValueList = []\r
-        \r
         TokenList = GetSplitValueList(Constructor, DT.TAB_VALUE_SPLIT)\r
         ValueList[0:len(TokenList)] = TokenList        \r
-        \r
         InfDefineConstructorItemObj = InfDefineConstructorItem()\r
         if not IsValidCVariableName(ValueList[0]):\r
             ErrorInInf(ST.ERR_INF_PARSER_DEFINE_FROMAT_INVALID%(ValueList[0]),\r
@@ -638,7 +647,6 @@ class InfDefSection(InfDefSectionOptionRomInfo):
         if len(ValueList) > 3:\r
             ErrorInInf(ST.ERR_INF_PARSER_DEFINE_FROMAT_INVALID%(Constructor),\r
                        LineInfo=self.CurrentLine)\r
-            \r
         InfDefineConstructorItemObj.Comments = Comments    \r
         self.Constructor.append(InfDefineConstructorItemObj)     \r
            \r
@@ -653,10 +661,8 @@ class InfDefSection(InfDefSectionOptionRomInfo):
         # It can be a list and only 1 set to TRUE\r
         #        \r
         ValueList = []\r
-        \r
         TokenList = GetSplitValueList(Destructor, DT.TAB_VALUE_SPLIT)\r
         ValueList[0:len(TokenList)] = TokenList        \r
-        \r
         InfDefineDestructorItemObj = InfDefineDestructorItem()\r
         if not IsValidCVariableName(ValueList[0]):\r
             ErrorInInf(ST.ERR_INF_PARSER_DEFINE_FROMAT_INVALID%(ValueList[0]),\r
@@ -715,8 +721,6 @@ class InfDefSection(InfDefSectionOptionRomInfo):
     def GetShadow(self):\r
         return self.Shadow\r
 \r
-\r
-\r
     #\r
     # <Family>               ::=  {"MSFT"} {"GCC"}\r
     # <CustomMake>           ::=  [<Family> "|"] <Filename>\r
@@ -788,8 +792,7 @@ class InfDefSection(InfDefSectionOptionRomInfo):
         else:                  \r
             ErrorInInf(ST.ERR_INF_PARSER_DEFINE_FROMAT_INVALID%(Name),\r
                        LineInfo=self.CurrentLine)\r
-            return False\r
-                  \r
+            return False    \r
         return True\r
 \r
     def GetSpecification(self):\r
@@ -860,6 +863,7 @@ gFUNCTION_MAPPING_FOR_DEFINE_SECTION = {
     #\r
     # Optional Fields\r
     #        \r
+    DT.TAB_INF_DEFINES_MODULE_UNI_FILE             : InfDefSection.SetModuleUniFileName,\r
     DT.TAB_INF_DEFINES_EDK_RELEASE_VERSION         : InfDefSection.SetEdkReleaseVersion,\r
     DT.TAB_INF_DEFINES_UEFI_SPECIFICATION_VERSION  : InfDefSection.SetUefiSpecificationVersion,\r
     DT.TAB_INF_DEFINES_PI_SPECIFICATION_VERSION    : InfDefSection.SetPiSpecificationVersion,\r
@@ -891,7 +895,6 @@ class InfDefMember():
         self.Name  = Name\r
         self.Value = Value\r
         self.CurrentLine = CurrentLine()\r
-        \r
     def GetName(self):\r
         return self.Name\r
     def SetName(self, Name):\r
@@ -914,8 +917,7 @@ class InfDefObject(InfSectionCommonDef):
         #\r
         HasFoundInfVersionFalg = False\r
         LineInfo = ['', -1, '']\r
-        ArchListString = ' '.join(Arch)\r
-     \r
+        ArchListString = ' '.join(Arch)  \r
         #\r
         # Parse Define items.\r
         #\r
@@ -923,6 +925,15 @@ class InfDefObject(InfSectionCommonDef):
             ProcessFunc = None\r
             Name = InfDefMemberObj.GetName()\r
             Value = InfDefMemberObj.GetValue()\r
+            if Name == DT.TAB_INF_DEFINES_MODULE_UNI_FILE:\r
+                ValidateUNIFilePath(Value)\r
+                Value = os.path.join(os.path.dirname(InfDefMemberObj.CurrentLine.FileName), Value)\r
+                if not os.path.isfile(Value) or not os.path.exists(Value):\r
+                    LineInfo[0] = InfDefMemberObj.CurrentLine.GetFileName()\r
+                    LineInfo[1] = InfDefMemberObj.CurrentLine.GetLineNo()\r
+                    LineInfo[2] = InfDefMemberObj.CurrentLine.GetLineString()\r
+                    ErrorInInf(ST.ERR_INF_PARSER_FILE_NOT_EXIST_OR_NAME_INVALID%(Name),\r
+                                   LineInfo=LineInfo)\r
             InfLineCommentObj = InfLineCommentObject()\r
             InfLineCommentObj.SetHeaderComments(InfDefMemberObj.Comments.GetHeaderComments())\r
             InfLineCommentObj.SetTailComments(InfDefMemberObj.Comments.GetTailComments())\r
@@ -932,7 +943,6 @@ class InfDefObject(InfSectionCommonDef):
                            RaiseError=True)\r
             if Name == DT.TAB_INF_DEFINES_INF_VERSION:\r
                 HasFoundInfVersionFalg = True  \r
-            \r
             if not (Name == '' or Name == None):\r
                 #\r
                 # Process "SPEC" Keyword definition.\r
@@ -953,8 +963,7 @@ class InfDefObject(InfSectionCommonDef):
                     #\r
                     if Name not in gFUNCTION_MAPPING_FOR_DEFINE_SECTION.keys():\r
                         ErrorInInf(ST.ERR_INF_PARSER_DEFINE_SECTION_KEYWORD_INVALID%(Name),\r
-                                   LineInfo=LineInfo)   \r
-                                                 \r
+                                   LineInfo=LineInfo)                           \r
                     else:\r
                         ProcessFunc = gFUNCTION_MAPPING_FOR_DEFINE_SECTION[Name]\r
                     if (ProcessFunc != None):\r
@@ -980,7 +989,6 @@ class InfDefObject(InfSectionCommonDef):
                     if (ProcessFunc != None):\r
                         ProcessFunc(DefineList, Value, InfLineCommentObj)\r
                     self.Defines[ArchListString] = DefineList\r
-        \r
         #\r
         # After set, check whether INF_VERSION defined.\r
         #\r