# 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
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
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
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
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
# 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
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
# 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
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
# 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
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
# 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
def GetShadow(self):\r
return self.Shadow\r
\r
-\r
-\r
#\r
# <Family> ::= {"MSFT"} {"GCC"}\r
# <CustomMake> ::= [<Family> "|"] <Filename>\r
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
#\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
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
#\r
HasFoundInfVersionFalg = False\r
LineInfo = ['', -1, '']\r
- ArchListString = ' '.join(Arch)\r
- \r
+ ArchListString = ' '.join(Arch) \r
#\r
# Parse Define items.\r
#\r
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
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
#\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
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