when enable Multiple workspace and there have other option(eg: -I) before
$(WORKSPACE), handleWsMacro cannot return correct which cause the
ArmVirtPkg build failure.
example:
[BuildOptions]
  *_*_AARCH64_PLATFORM_FLAGS == -I$(WORKSPACE)/ArmVirtPkg/Include

Cc: Liming Gao <liming....@intel.com>
Contributed-under: TianoCore Contribution Agreement 1.0
Signed-off-by: Yonghong Zhu <yonghong....@intel.com>
---
 BaseTools/Source/Python/Common/MultipleWorkspace.py | 19 ++++++++++++-------
 1 file changed, 12 insertions(+), 7 deletions(-)

diff --git a/BaseTools/Source/Python/Common/MultipleWorkspace.py 
b/BaseTools/Source/Python/Common/MultipleWorkspace.py
index feb1f8d..4e4c37a 100644
--- a/BaseTools/Source/Python/Common/MultipleWorkspace.py
+++ b/BaseTools/Source/Python/Common/MultipleWorkspace.py
@@ -2,11 +2,11 @@
 # manage multiple workspace file.
 #
 # This file is required to make Python interpreter treat the directory
 # as containing package.
 #
-# Copyright (c) 2015, Intel Corporation. All rights reserved.<BR>
+# Copyright (c) 2015 - 2016, Intel Corporation. All rights reserved.<BR>
 # This program and the accompanying materials
 # are licensed and made available under the terms and conditions of the BSD 
License
 # which accompanies this distribution.  The full text of the license may be 
found at
 # http://opensource.org/licenses/bsd-license.php
 #
@@ -126,16 +126,21 @@ class MultipleWorkspace(object):
     #   @retval PathStr   Path string include the $(WORKSPACE)
     #
     @classmethod
     def handleWsMacro(cls, PathStr):
         if TAB_WORKSPACE in PathStr:
-            Path = PathStr.replace(TAB_WORKSPACE, cls.WORKSPACE).strip()
-            if not os.path.exists(Path):
-                for Pkg in cls.PACKAGES_PATH:
-                    Path = PathStr.replace(TAB_WORKSPACE, Pkg).strip()
-                    if os.path.exists(Path):
-                        return Path
+            PathList = PathStr.split()
+            if PathList:
+                for i, str in enumerate(PathList):
+                    if str.find(TAB_WORKSPACE) != -1:
+                        MacroStartPos = str.find(TAB_WORKSPACE)
+                        MacroEndPos = str.find(')', MacroStartPos)
+                        Substr = str[MacroEndPos+1:]
+                        if Substr.startswith('/') or Substr.startswith('\\'):
+                            Substr = Substr[1:]
+                        PathList[i] = str[0:MacroStartPos] + 
os.path.normpath(cls.join(cls.WORKSPACE, Substr))
+            PathStr = ' '.join(PathList)
         return PathStr
     
     ## getPkgPath()
     #
     #   get all package pathes.
-- 
2.6.1.windows.1

_______________________________________________
edk2-devel mailing list
edk2-devel@lists.01.org
https://lists.01.org/mailman/listinfo/edk2-devel

Reply via email to