## @file\r
# Common routines used by all tools\r
#\r
-# Copyright (c) 2007 - 2015, Intel Corporation. All rights reserved.<BR>\r
+# Copyright (c) 2007 - 2016, Intel Corporation. All rights reserved.<BR>\r
# This program and the accompanying materials\r
# are licensed and made available under the terms and conditions of the BSD License\r
# which accompanies this distribution. The full text of the license may be found at\r
from CommonDataClass.DataClass import *\r
from Parsing import GetSplitValueList\r
from Common.LongFilePathSupport import OpenLongFilePath as open\r
+from Common.MultipleWorkspace import MultipleWorkspace as mws\r
\r
## Regular expression used to find out place holders in string template\r
-gPlaceholderPattern = re.compile("\$\{([^$()\s]+)\}", re.MULTILINE|re.UNICODE)\r
+gPlaceholderPattern = re.compile("\$\{([^$()\s]+)\}", re.MULTILINE | re.UNICODE)\r
\r
## Dictionary used to store file time stamp for quick re-access\r
gFileTimeStampCache = {} # {file path : file time stamp}\r
def GuidStringToGuidStructureString(Guid):\r
GuidList = Guid.split('-')\r
Result = '{'\r
- for Index in range(0,3,1):\r
+ for Index in range(0, 3, 1):\r
Result = Result + '0x' + GuidList[Index] + ', '\r
Result = Result + '{0x' + GuidList[3][0:2] + ', 0x' + GuidList[3][2:4]\r
- for Index in range(0,12,2):\r
- Result = Result + ', 0x' + GuidList[4][Index:Index+2]\r
+ for Index in range(0, 12, 2):\r
+ Result = Result + ', 0x' + GuidList[4][Index:Index + 2]\r
Result += '}}'\r
return Result\r
\r
Fd.write(Content)\r
Fd.close()\r
except IOError, X:\r
- EdkLogger.error(None, FILE_CREATE_FAILURE, ExtraData='IOError %s'%X)\r
+ EdkLogger.error(None, FILE_CREATE_FAILURE, ExtraData='IOError %s' % X)\r
\r
return True\r
\r
#\r
# @retval A list of all files\r
#\r
-def GetFiles(Root, SkipList=None, FullPath = True):\r
+def GetFiles(Root, SkipList=None, FullPath=True):\r
OriPath = Root\r
FileList = []\r
for Root, Dirs, Files in os.walk(Root):\r
if OverrideDir[-1] == os.path.sep:\r
return NewFile[len(OverrideDir):], NewFile[0:len(OverrideDir)]\r
else:\r
- return NewFile[len(OverrideDir)+1:], NewFile[0:len(OverrideDir)]\r
+ return NewFile[len(OverrideDir) + 1:], NewFile[0:len(OverrideDir)]\r
if GlobalData.gAllFiles:\r
NewFile = GlobalData.gAllFiles[os.path.normpath(os.path.join(Dir, File))]\r
if not NewFile:\r
if Dir[-1] == os.path.sep:\r
return NewFile[len(Dir):], NewFile[0:len(Dir)]\r
else:\r
- return NewFile[len(Dir)+1:], NewFile[0:len(Dir)]\r
+ return NewFile[len(Dir) + 1:], NewFile[0:len(Dir)]\r
else:\r
return NewFile, ''\r
\r
# Replace the default dir to current dir\r
if Dir == '.':\r
Dir = os.getcwd()\r
- Dir = Dir[len(Workspace)+1:]\r
+ Dir = Dir[len(Workspace) + 1:]\r
\r
# First check if File has Edk definition itself\r
if File.find('$(EFI_SOURCE)') > -1 or File.find('$(EDK_SOURCE)') > -1:\r
# Dir is current module dir related to workspace\r
if Dir == '.':\r
Dir = os.getcwd()\r
- Dir = Dir[len(Workspace)+1:]\r
+ Dir = Dir[len(Workspace) + 1:]\r
\r
NewFile = File\r
RelaPath = AllFiles[os.path.normpath(Dir)]\r
#\r
# @param CName The CName of the GUID\r
# @param PackageList List of packages looking-up in\r
+# @param Inffile The driver file\r
#\r
# @retval GuidValue if the CName is found in any given package\r
# @retval None if the CName is not found in all given packages\r
#\r
-def GuidValue(CName, PackageList):\r
+def GuidValue(CName, PackageList, Inffile = None):\r
for P in PackageList:\r
- if CName in P.Guids:\r
+ GuidKeys = P.Guids.keys()\r
+ if Inffile and P._PrivateGuids:\r
+ if not Inffile.startswith(P.MetaFile.Dir):\r
+ GuidKeys = (dict.fromkeys(x for x in P.Guids if x not in P._PrivateGuids)).keys()\r
+ if CName in GuidKeys:\r
return P.Guids[CName]\r
return None\r
\r
#\r
# @param CName The CName of the GUID\r
# @param PackageList List of packages looking-up in\r
+# @param Inffile The driver file\r
#\r
# @retval GuidValue if the CName is found in any given package\r
# @retval None if the CName is not found in all given packages\r
#\r
-def ProtocolValue(CName, PackageList):\r
+def ProtocolValue(CName, PackageList, Inffile = None):\r
for P in PackageList:\r
- if CName in P.Protocols:\r
+ ProtocolKeys = P.Protocols.keys()\r
+ if Inffile and P._PrivateProtocols:\r
+ if not Inffile.startswith(P.MetaFile.Dir):\r
+ ProtocolKeys = (dict.fromkeys(x for x in P.Protocols if x not in P._PrivateProtocols)).keys()\r
+ if CName in ProtocolKeys:\r
return P.Protocols[CName]\r
return None\r
\r
#\r
# @param CName The CName of the GUID\r
# @param PackageList List of packages looking-up in\r
+# @param Inffile The driver file\r
#\r
# @retval GuidValue if the CName is found in any given package\r
# @retval None if the CName is not found in all given packages\r
#\r
-def PpiValue(CName, PackageList):\r
+def PpiValue(CName, PackageList, Inffile = None):\r
for P in PackageList:\r
- if CName in P.Ppis:\r
+ PpiKeys = P.Ppis.keys()\r
+ if Inffile and P._PrivatePpis:\r
+ if not Inffile.startswith(P.MetaFile.Dir):\r
+ PpiKeys = (dict.fromkeys(x for x in P.Ppis if x not in P._PrivatePpis)).keys()\r
+ if CName in PpiKeys:\r
return P.Ppis[CName]\r
return None\r
\r
#\r
# PlaceHolderName, PlaceHolderStartPoint, PlaceHolderEndPoint\r
#\r
- for PlaceHolder,Start,End in PlaceHolderList:\r
+ for PlaceHolder, Start, End in PlaceHolderList:\r
self._SubSectionList.append(TemplateSection[SubSectionStart:Start])\r
self._SubSectionList.append(TemplateSection[Start:End])\r
self._PlaceHolderList.append(PlaceHolder)\r
if len(key) > 1:\r
RestKeys = key[1:]\r
elif self._Level_ > 1:\r
- RestKeys = [self._Wildcard for i in range(0, self._Level_-1)]\r
+ RestKeys = [self._Wildcard for i in range(0, self._Level_ - 1)]\r
else:\r
FirstKey = key\r
if self._Level_ > 1:\r
- RestKeys = [self._Wildcard for i in range(0, self._Level_-1)]\r
+ RestKeys = [self._Wildcard for i in range(0, self._Level_ - 1)]\r
\r
if FirstKey == None or str(FirstKey).upper() in self._ValidWildcardList:\r
FirstKey = self._Wildcard\r
if len(key) > 1:\r
RestKeys = key[1:]\r
else:\r
- RestKeys = [self._Wildcard for i in range(0, self._Level_-1)]\r
+ RestKeys = [self._Wildcard for i in range(0, self._Level_ - 1)]\r
else:\r
FirstKey = key\r
if self._Level_ > 1:\r
- RestKeys = [self._Wildcard for i in range(0, self._Level_-1)]\r
+ RestKeys = [self._Wildcard for i in range(0, self._Level_ - 1)]\r
\r
if FirstKey in self._ValidWildcardList:\r
FirstKey = self._Wildcard\r
Pair += 1\r
elif ch == ')' and not InStr:\r
Pair -= 1\r
- \r
+\r
if (Pair > 0 or InStr) and ch == TAB_VALUE_SPLIT:\r
NewStr += '-'\r
else:\r
IsValid = (len(FieldList) <= 3)\r
else:\r
IsValid = (len(FieldList) <= 1)\r
- return [Value, Type, Size], IsValid, 0 \r
+ return [Value, Type, Size], IsValid, 0\r
elif PcdType in (MODEL_PCD_DYNAMIC_VPD, MODEL_PCD_DYNAMIC_EX_VPD):\r
VpdOffset = FieldList[0]\r
Value = Size = ''\r
# \r
# @retval ValueList: A List contain value, datum type and toke number. \r
#\r
-def AnalyzePcdData(Setting): \r
- ValueList = ['', '', ''] \r
- \r
- ValueRe = re.compile(r'^\s*L?\".*\|.*\"')\r
+def AnalyzePcdData(Setting):\r
+ ValueList = ['', '', '']\r
+\r
+ ValueRe = re.compile(r'^\s*L?\".*\|.*\"')\r
PtrValue = ValueRe.findall(Setting)\r
\r
ValueUpdateFlag = False\r
\r
if len(PtrValue) >= 1:\r
Setting = re.sub(ValueRe, '', Setting)\r
- ValueUpdateFlag = True \r
+ ValueUpdateFlag = True\r
\r
TokenList = Setting.split(TAB_VALUE_SPLIT)\r
ValueList[0:len(TokenList)] = TokenList\r
# \r
# @retval ValueList: A List contain VpdOffset, MaxDatumSize and InitialValue. \r
#\r
-def AnalyzeVpdPcdData(Setting): \r
- ValueList = ['', '', ''] \r
- \r
- ValueRe = re.compile(r'\s*L?\".*\|.*\"\s*$')\r
+def AnalyzeVpdPcdData(Setting):\r
+ ValueList = ['', '', '']\r
+\r
+ ValueRe = re.compile(r'\s*L?\".*\|.*\"\s*$')\r
PtrValue = ValueRe.findall(Setting)\r
\r
ValueUpdateFlag = False\r
\r
if len(PtrValue) >= 1:\r
Setting = re.sub(ValueRe, '', Setting)\r
- ValueUpdateFlag = True \r
+ ValueUpdateFlag = True\r
\r
TokenList = Setting.split(TAB_VALUE_SPLIT)\r
ValueList[0:len(TokenList)] = TokenList\r
#\r
def CheckPcdDatum(Type, Value):\r
if Type == "VOID*":\r
- ValueRe = re.compile(r'\s*L?\".*\"\s*$')\r
+ ValueRe = re.compile(r'\s*L?\".*\"\s*$')\r
if not (((Value.startswith('L"') or Value.startswith('"')) and Value.endswith('"'))\r
or (Value.startswith('{') and Value.endswith('}'))\r
):\r
return False, "Invalid value [%s] of type [%s]; must be in the form of {...} for array"\\r
- ", or \"...\" for string, or L\"...\" for unicode string" % (Value, Type) \r
+ ", or \"...\" for string, or L\"...\" for unicode string" % (Value, Type)\r
elif ValueRe.match(Value):\r
# Check the chars in UnicodeString or CString is printable\r
if Value.startswith("L"):\r
\r
if CurrentChar in ["/", "-"] and LastChar in [" ", "\t", "\r", "\n"]:\r
if Index > OptionStart:\r
- OptionList.append(OptionString[OptionStart:Index-1])\r
+ OptionList.append(OptionString[OptionStart:Index - 1])\r
OptionStart = Index\r
LastChar = CurrentChar\r
OptionList.append(OptionString[OptionStart:])\r
\r
# Remove any '.' and '..' in path\r
if self.Root:\r
+ self.Root = mws.getWs(self.Root, self.File)\r
self.Path = os.path.normpath(os.path.join(self.Root, self.File))\r
self.Root = os.path.normpath(CommonPath([self.Root, self.Path]))\r
# eliminate the side-effect of 'C:'\r
if self.Root[-1] == os.path.sep:\r
self.File = self.Path[len(self.Root):]\r
else:\r
- self.File = self.Path[len(self.Root)+1:]\r
+ self.File = self.Path[len(self.Root) + 1:]\r
else:\r
self.Path = os.path.normpath(self.File)\r
\r
RealFile = os.path.join(self.AlterRoot, self.File)\r
elif self.Root:\r
RealFile = os.path.join(self.Root, self.File)\r
- return FILE_NOT_FOUND, os.path.join(self.AlterRoot, RealFile)\r
+ if len (mws.getPkgPath()) == 0:\r
+ return FILE_NOT_FOUND, os.path.join(self.AlterRoot, RealFile)\r
+ else:\r
+ return FILE_NOT_FOUND, "%s is not found in packages path:\n\t%s" % (self.File, '\n\t'.join(mws.getPkgPath()))\r
\r
ErrorCode = 0\r
ErrorInfo = ''\r