## @file\r
# This file is used to define common string related functions used in parsing process\r
#\r
-# Copyright (c) 2007 - 2008, Intel Corporation. All rights reserved.<BR>\r
+# Copyright (c) 2007 - 2015, 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
#\r
import re\r
import DataType\r
-import os.path\r
+import Common.LongFilePathOs as os\r
import string\r
import EdkLogger as EdkLogger\r
\r
import GlobalData\r
from BuildToolError import *\r
from CommonDataClass.Exceptions import *\r
+from Common.LongFilePathSupport import OpenLongFilePath as open\r
+from Common.MultipleWorkspace import MultipleWorkspace as mws\r
\r
gHexVerPatt = re.compile('0x[a-f0-9]{4}[a-f0-9]{4}$', re.IGNORECASE)\r
gHumanReadableVerPatt = re.compile(r'([1-9][0-9]*|0)\.[0-9]{1,2}$')\r
if SelfReplacement:\r
String = String.replace("$(%s)" % Macro, '')\r
continue\r
- String = String.replace("$(%s)" % Macro, MacroDefinitions[Macro])\r
+ if "$(%s)" % Macro not in MacroDefinitions[Macro]:\r
+ String = String.replace("$(%s)" % Macro, MacroDefinitions[Macro])\r
# in case there's macro not defined\r
if String == LastString:\r
break\r
# To local path format\r
#\r
Path = os.path.normpath(Path)\r
+ if Path.startswith(GlobalData.gWorkspace) and not os.path.exists(Path):\r
+ Path = Path[len (GlobalData.gWorkspace):]\r
+ if Path[0] == os.path.sep:\r
+ Path = Path[1:]\r
+ Path = mws.join(GlobalData.gWorkspace, Path)\r
\r
if IsRelativePath and Path[0] != '.':\r
Path = os.path.join('.', Path)\r
# @retval string A full path\r
#\r
def WorkspaceFile(WorkspaceDir, Filename):\r
- return os.path.join(NormPath(WorkspaceDir), NormPath(Filename))\r
+ return mws.join(NormPath(WorkspaceDir), NormPath(Filename))\r
\r
## Split string\r
#\r