]> git.proxmox.com Git - mirror_edk2.git/commitdiff
BaseTools: Update UPT tool to support multiple workspaces
authorHesheng Chen <hesheng.chen@intel.com>
Thu, 8 Oct 2015 09:28:15 +0000 (09:28 +0000)
committerlgao4 <lgao4@Edk2>
Thu, 8 Oct 2015 09:28:15 +0000 (09:28 +0000)
Update UPT to refer MultipleWorkspace class to convert
the file path from WORKSPACE and PACKAGES_PATH.

Contributed-under: TianoCore Contribution Agreement 1.0
Signed-off-by: Hesheng Chen <hesheng.chen@intel.com>
Reviewed-by: Liming Gao <liming.gao@intel.com>
git-svn-id: https://svn.code.sf.net/p/edk2/code/trunk/edk2@18580 6f19259b-4bc3-4df7-8a09-765794883524

BaseTools/Source/Python/UPT/Core/DistributionPackageClass.py
BaseTools/Source/Python/UPT/Core/PackageFile.py
BaseTools/Source/Python/UPT/Library/GlobalData.py
BaseTools/Source/Python/UPT/Library/Misc.py
BaseTools/Source/Python/UPT/Library/ParserValidate.py
BaseTools/Source/Python/UPT/Library/Parsing.py
BaseTools/Source/Python/UPT/MkPkg.py
BaseTools/Source/Python/UPT/PomAdapter/InfPomAlignment.py
BaseTools/Source/Python/UPT/UPT.py

index bfe6dcc70feaab74840d1a6cf55f460874ea753f..9c55e0ea88a717168dd710b342db524383bd712c 100644 (file)
@@ -32,6 +32,7 @@ from Logger.ToolError import EDK1_INF_ERROR
 from Object.POM.CommonObject import IdentificationObject\r
 from Object.POM.CommonObject import CommonHeaderObject\r
 from Object.POM.CommonObject import MiscFileObject\r
+from Common.MultipleWorkspace import MultipleWorkspace as mws\r
 \r
 ## DistributionPackageHeaderClass\r
 #\r
@@ -110,14 +111,17 @@ class DistributionPackageClass(object):
     # @param ModuleList:    A list of all modules\r
     #\r
     def GetDistributionPackage(self, WorkspaceDir, PackageList, ModuleList):\r
+        # Backup WorkspaceDir\r
+        Root = WorkspaceDir\r
+\r
         #\r
         # Get Packages\r
         #\r
         if PackageList:\r
             for PackageFile in PackageList:\r
-                PackageFileFullPath = \\r
-                os.path.normpath(os.path.join(WorkspaceDir, PackageFile))\r
-                DecObj = DecPomAlignment(PackageFileFullPath, WorkspaceDir, CheckMulDec = True)\r
+                PackageFileFullPath = mws.join(Root, PackageFile)\r
+                WorkspaceDir = mws.getWs(Root, PackageFile)\r
+                DecObj = DecPomAlignment(PackageFileFullPath, WorkspaceDir, CheckMulDec=True)\r
                 PackageObj = DecObj\r
                 #\r
                 # Parser inf file one bye one\r
@@ -140,8 +144,7 @@ class DistributionPackageClass(object):
                     # Inf class in InfPomAlignment.\r
                     #\r
                     try:\r
-                        ModuleObj = InfPomAlignment(Filename, WorkspaceDir, \\r
-                                                PackageObj.GetPackagePath())\r
+                        ModuleObj = InfPomAlignment(Filename, WorkspaceDir, PackageObj.GetPackagePath())\r
      \r
                         #\r
                         # Add module to package\r
@@ -168,11 +171,11 @@ class DistributionPackageClass(object):
         #\r
         if ModuleList:\r
             for ModuleFile in ModuleList:\r
-                ModuleFileFullPath = \\r
-                os.path.normpath(os.path.join(WorkspaceDir, ModuleFile))\r
+                ModuleFileFullPath = mws.join(Root, ModuleFile)\r
+                WorkspaceDir = mws.getWs(Root, ModuleFile)\r
+\r
                 try:\r
-                    ModuleObj = InfPomAlignment(ModuleFileFullPath, \r
-                                                WorkspaceDir)\r
+                    ModuleObj = InfPomAlignment(ModuleFileFullPath, WorkspaceDir)\r
                     ModuleKey = (ModuleObj.GetGuid(), \r
                                  ModuleObj.GetVersion(), \r
                                  ModuleObj.GetName(), \r
@@ -185,7 +188,10 @@ class DistributionPackageClass(object):
                                      ST.WRN_EDK1_INF_FOUND%ModuleFileFullPath, \r
                                      ExtraData=ST.ERR_NOT_SUPPORTED_SA_MODULE)\r
                     else:\r
-                        raise                \r
+                        raise\r
+\r
+        # Recover WorkspaceDir\r
+        WorkspaceDir = Root\r
 \r
     ## Get all files included for a distribution package, except tool/misc of \r
     # distribution level\r
index 47ea0bc0a932ef618a08f3ade08e821986b91c0f..5fafd85bffbf5107a721b5c9b1913b9d0242a45e 100644 (file)
@@ -37,6 +37,7 @@ from Logger import StringTable as ST
 from Library.Misc import CreateDirectory\r
 from Library.Misc import RemoveDirectory\r
 from Core.FileHook import __FileHookOpen__\r
+from Common.MultipleWorkspace import MultipleWorkspace as mws\r
 \r
 \r
 class PackageFile:\r
@@ -203,8 +204,11 @@ class PackageFile:
     # @param Files:  the files to pack \r
     #\r
     def PackFiles(self, Files):\r
-        for File1 in Files:\r
-            self.PackFile(File1)\r
+        for File in Files:\r
+            Cwd = os.getcwd()\r
+            os.chdir(mws.getWs(mws.WORKSPACE, File))\r
+            self.PackFile(File)\r
+            os.chdir(Cwd)\r
 \r
     ## Pack the file\r
     # \r
index d478983c23db9a5e0e28d3748ec1eccaa971e15e..8f446d48883d4611470e6f3aa99e5a9ef1260abf 100644 (file)
@@ -19,6 +19,7 @@ GlobalData
 # The workspace directory \r
 #\r
 gWORKSPACE = '.'\r
+gPACKAGE_PATH = None\r
 \r
 #\r
 # INF module directory\r
@@ -107,4 +108,4 @@ gPackageDict = {}
 # Used by Library instance parser\r
 # {FilePath: FileObj}\r
 #\r
-gLIBINSTANCEDICT = {}
\ No newline at end of file
+gLIBINSTANCEDICT = {}\r
index bc9e0e172bf748f56de2424f501859252013461f..df9db2439b03b6806426bb98f896ae526a7f25e6 100644 (file)
@@ -50,6 +50,7 @@ from Library.ParserValidate import IsValidHexVersion
 from Library.ParserValidate import IsValidPath\r
 from Object.POM.CommonObject import TextObject\r
 from Core.FileHook import __FileHookOpen__\r
+from CommonDataClass.CommonClass import MultipleWorkspace as mws\r
 \r
 ## Convert GUID string in xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx style to C \r
 # structure style\r
@@ -592,7 +593,11 @@ def GetWorkspace():
 \r
     if WorkspaceDir[-1] == ':':\r
         WorkspaceDir += os.sep\r
-    return WorkspaceDir\r
+\r
+    PackagesPath = os.environ.get("PACKAGES_PATH")\r
+    mws.setWs(WorkspaceDir, PackagesPath)\r
+\r
+    return WorkspaceDir, mws.PACKAGES_PATH\r
 \r
 ## Get relative path\r
 #\r
index e9732278981a2455a33a4f111d343f7b1980c0c4..2f4b4d19343561ae43ce8d68bf89d9929774b54d 100644 (file)
@@ -27,6 +27,7 @@ from Library.DataType import TAB_SPACE_SPLIT
 from Library.String import GetSplitValueList\r
 from Library.ExpressionValidate import IsValidBareCString\r
 from Library.ExpressionValidate import IsValidFeatureFlagExp\r
+from CommonDataClass.CommonClass import MultipleWorkspace as mws\r
 \r
 ## __HexDigit() method\r
 #\r
@@ -236,7 +237,7 @@ def IsValidPath(Path, Root):
     \r
     Path = os.path.normpath(Path).replace('\\', '/')\r
     Root = os.path.normpath(Root).replace('\\', '/')\r
-    FullPath = os.path.normpath(os.path.join(Root, Path)).replace('\\', '/')\r
+    FullPath = mws.join(Root, Path)\r
     \r
     if not os.path.exists(FullPath):\r
         return False\r
index ace3e0d11841a0e1cdaeed7d32a364e701147722..c34e7751442ab542ac14c52e1fde7e788d7d109c 100644 (file)
@@ -827,21 +827,23 @@ def GetPkgInfoFromDec(Path):
 def GetWorkspacePackage():\r
     DecFileList = []\r
     WorkspaceDir = GlobalData.gWORKSPACE\r
-    for Root, Dirs, Files in os.walk(WorkspaceDir):\r
-        if 'CVS' in Dirs:\r
-            Dirs.remove('CVS')\r
-        if '.svn' in Dirs:\r
-            Dirs.remove('.svn')\r
-        for Dir in Dirs:\r
-            if Dir.startswith('.'):\r
-                Dirs.remove(Dir)\r
-        for FileSp in Files:\r
-            if FileSp.startswith('.'):\r
-                continue\r
-            Ext = os.path.splitext(FileSp)[1]\r
-            if Ext.lower() in ['.dec']:\r
-                DecFileList.append\\r
-                (os.path.normpath(os.path.join(Root, FileSp)))\r
+    PackageDir = GlobalData.gPACKAGE_PATH\r
+    for PkgRoot in [WorkspaceDir] + PackageDir:\r
+        for Root, Dirs, Files in os.walk(PkgRoot):\r
+            if 'CVS' in Dirs:\r
+                Dirs.remove('CVS')\r
+            if '.svn' in Dirs:\r
+                Dirs.remove('.svn')\r
+            for Dir in Dirs:\r
+                if Dir.startswith('.'):\r
+                    Dirs.remove(Dir)\r
+            for FileSp in Files:\r
+                if FileSp.startswith('.'):\r
+                    continue\r
+                Ext = os.path.splitext(FileSp)[1]\r
+                if Ext.lower() in ['.dec']:\r
+                    DecFileList.append\\r
+                    (os.path.normpath(os.path.join(Root, FileSp)))\r
     #\r
     # abstract package guid, version info from DecFile List\r
     #\r
index 2eb84588bdc495521e557f4cae6cfddead6ab669..87c84f0cc25b6fb0c8edf59ab809557153b2c11b 100644 (file)
@@ -50,6 +50,7 @@ from Library.ParserValidate import IsValidPath
 \r
 from Core.DistributionPackageClass import DistributionPackageClass\r
 from Core.PackageFile import PackageFile\r
+from Common.MultipleWorkspace import MultipleWorkspace as mws\r
 \r
 ## CheckForExistingDp\r
 #\r
@@ -136,7 +137,7 @@ def Main(Options = None):
                 # write().\r
                 #\r
                 FromFile = os.path.normpath(FileObject.GetURI()).encode('utf_8')\r
-                FileFullPath = os.path.normpath(os.path.join(WorkspaceDir, FromFile))\r
+                FileFullPath = mws.join(WorkspaceDir, FromFile)\r
                 if FileFullPath in RePkgDict:\r
                     (DpGuid, DpVersion, DpName, Repackage) = RePkgDict[FileFullPath]\r
                     if not Repackage:\r
@@ -183,7 +184,7 @@ def Main(Options = None):
                     DistPkg.Header.RePackage = True\r
           \r
         Cwd = getcwd()\r
-        chdir(WorkspaceDir)        \r
+        chdir(WorkspaceDir)\r
         ContentFile.PackFiles(FileList)\r
         chdir(Cwd)\r
         \r
@@ -264,7 +265,7 @@ def CheckFileList(QualifiedExt, FileList, ErrorStringExt, ErrorStringFullPath):
                          ErrorStringExt % Item)\r
         \r
         Item = os.path.normpath(Item)\r
-        Path = os.path.normpath(os.path.join(WorkspaceDir, Item))\r
+        Path = mws.join(WorkspaceDir, Item)\r
         if not os.path.exists(Path):\r
             Logger.Error("\nMkPkg", FILE_NOT_FOUND, ST.ERR_NOT_FOUND % Item)\r
         elif Item == Path:\r
index 22e9ef5fc0a302bf5ca97db19edfc775b3f33062..a15173285345074de96700b27e7f72fae1eeb5c9 100644 (file)
@@ -51,7 +51,7 @@ from PomAdapter.InfPomAlignmentMisc import GenModuleHeaderUserExt
 from PomAdapter.InfPomAlignmentMisc import GenBinaryData\r
 from Parser import InfParser\r
 from PomAdapter.DecPomAlignment import DecPomAlignment\r
-\r
+from Common.MultipleWorkspace import MultipleWorkspace as mws\r
 \r
 ## InfPomAlignment\r
 #\r
@@ -534,8 +534,7 @@ class InfPomAlignment(ModuleObject):
             PackageDependency.SetSupArchList(ConvertArchList(PackageItemObj.GetSupArchList()))\r
             PackageDependency.SetFeatureFlag(PackageItemObj.GetFeatureFlagExp())\r
 \r
-            PkgInfo = GetPkgInfoFromDec(os.path.normpath(os.path.join(self.WorkSpace,\r
-                                                                      NormPath(PackageItemObj.GetPackageName()))))\r
+            PkgInfo = GetPkgInfoFromDec(mws.join(self.WorkSpace, NormPath(PackageItemObj.GetPackageName())))\r
             if PkgInfo[1] and PkgInfo[2]:\r
                 PackageDependency.SetGuid(PkgInfo[1])\r
                 PackageDependency.SetVersion(PkgInfo[2])\r
index e7b0a8f264b15f0e1024f0bdf6df9c1534052691..17decda5c3e6d11377be54fc1d4df734acaf3c1a 100644 (file)
@@ -39,6 +39,7 @@ from Logger.ToolError import FILE_TYPE_MISMATCH
 from Logger.ToolError import OPTION_CONFLICT\r
 from Logger.ToolError import FatalError\r
 from Logger.ToolError import UPT_ALREADY_INSTALLED_ERROR\r
+from Common.MultipleWorkspace import MultipleWorkspace as mws\r
 \r
 import MkPkg\r
 import InstallPkg\r
@@ -164,7 +165,7 @@ def Main():
         setattr(Opt, Var[0], Var[1])\r
 \r
     try:\r
-        GlobalData.gWORKSPACE = GetWorkspace()\r
+        GlobalData.gWORKSPACE, GlobalData.gPACKAGE_PATH = GetWorkspace()\r
     except FatalError, XExcept:\r
         if Logger.GetLevel() <= Logger.DEBUG_9:\r
             Logger.Quiet(ST.MSG_PYTHON_ON % (python_version(), platform) + format_exc())\r