# This file is used to define each component of Target.txt file\r
#\r
# Copyright (c) 2007 - 2014, 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
-# http://opensource.org/licenses/bsd-license.php\r
-#\r
-# THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,\r
-# WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.\r
+# SPDX-License-Identifier: BSD-2-Clause-Patent\r
#\r
\r
##\r
# Import Modules\r
#\r
+from __future__ import print_function\r
+from __future__ import absolute_import\r
+\r
+import Common.GlobalData as GlobalData\r
import Common.LongFilePathOs as os\r
-import EdkLogger\r
-import DataType\r
-from BuildToolError import *\r
-import GlobalData\r
+from . import EdkLogger\r
+from . import DataType\r
+from .BuildToolError import *\r
+\r
from Common.LongFilePathSupport import OpenLongFilePath as open\r
+from Common.MultipleWorkspace import MultipleWorkspace as mws\r
\r
gDefaultTargetTxtFile = "target.txt"\r
\r
DataType.TAB_TAT_DEFINES_BUILD_RULE_CONF : '',\r
}\r
self.ConfDirectoryPath = ""\r
- if Filename != None:\r
+ if Filename is not None:\r
self.LoadTargetTxtFile(Filename)\r
\r
## LoadTargetTxtFile\r
self.ConfDirectoryPath = os.path.dirname(FileName)\r
except:\r
EdkLogger.error("build", FILE_OPEN_FAILURE, ExtraData=FileName)\r
- if F != None:\r
+ if F is not None:\r
F.close()\r
\r
for Line in F:\r
F.close()\r
return 0\r
\r
- ## Print the dictionary\r
- #\r
- # Print all items of dictionary one by one\r
- #\r
- # @param Dict: The dictionary to be printed\r
- #\r
- def printDict(Dict):\r
- if Dict != None:\r
- KeyList = Dict.keys()\r
- for Key in KeyList:\r
- if Dict[Key] != '':\r
- print Key + ' = ' + str(Dict[Key])\r
-\r
- ## Print the dictionary\r
- #\r
- # Print the items of dictionary which matched with input key\r
- #\r
- # @param list: The dictionary to be printed\r
- # @param key: The key of the item to be printed\r
- #\r
- def printList(Key, List):\r
- if type(List) == type([]):\r
- if len(List) > 0:\r
- if Key.find(TAB_SPLIT) != -1:\r
- print "\n" + Key\r
- for Item in List:\r
- print Item\r
## TargetTxtDict\r
#\r
# Load target.txt in input Conf dir\r
#\r
# @retval Target An instance of TargetTxtClassObject() with loaded target.txt\r
#\r
-def TargetTxtDict(ConfDir):\r
- Target = TargetTxtClassObject()\r
- Target.LoadTargetTxtFile(os.path.normpath(os.path.join(ConfDir, gDefaultTargetTxtFile)))\r
- return Target\r
+\r
+class TargetTxtDict():\r
+\r
+ def __new__(cls, *args, **kw):\r
+ if not hasattr(cls, '_instance'):\r
+ orig = super(TargetTxtDict, cls)\r
+ cls._instance = orig.__new__(cls, *args, **kw)\r
+ return cls._instance\r
+\r
+ def __init__(self):\r
+ if not hasattr(self, 'Target'):\r
+ self.TxtTarget = None\r
+\r
+ @property\r
+ def Target(self):\r
+ if not self.TxtTarget:\r
+ self._GetTarget()\r
+ return self.TxtTarget\r
+\r
+ def _GetTarget(self):\r
+ Target = TargetTxtClassObject()\r
+ ConfDirectory = GlobalData.gCmdConfDir\r
+ if ConfDirectory:\r
+ # Get alternate Conf location, if it is absolute, then just use the absolute directory name\r
+ ConfDirectoryPath = os.path.normpath(ConfDirectory)\r
+\r
+ if not os.path.isabs(ConfDirectoryPath):\r
+ # Since alternate directory name is not absolute, the alternate directory is located within the WORKSPACE\r
+ # This also handles someone specifying the Conf directory in the workspace. Using --conf=Conf\r
+ ConfDirectoryPath = mws.join(os.environ["WORKSPACE"], ConfDirectoryPath)\r
+ else:\r
+ if "CONF_PATH" in os.environ:\r
+ ConfDirectoryPath = os.path.normcase(os.path.normpath(os.environ["CONF_PATH"]))\r
+ else:\r
+ # Get standard WORKSPACE/Conf use the absolute path to the WORKSPACE/Conf\r
+ ConfDirectoryPath = mws.join(os.environ["WORKSPACE"], 'Conf')\r
+ GlobalData.gConfDirectory = ConfDirectoryPath\r
+ targettxt = os.path.normpath(os.path.join(ConfDirectoryPath, gDefaultTargetTxtFile))\r
+ if os.path.exists(targettxt):\r
+ Target.LoadTargetTxtFile(targettxt)\r
+ self.TxtTarget = Target\r
\r
##\r
#\r
if __name__ == '__main__':\r
pass\r
Target = TargetTxtDict(os.getenv("WORKSPACE"))\r
- print Target.TargetTxtDictionary[DataType.TAB_TAT_DEFINES_MAX_CONCURRENT_THREAD_NUMBER]\r
- print Target.TargetTxtDictionary[DataType.TAB_TAT_DEFINES_TARGET]\r
- print Target.TargetTxtDictionary\r
+ print(Target.TargetTxtDictionary[DataType.TAB_TAT_DEFINES_MAX_CONCURRENT_THREAD_NUMBER])\r
+ print(Target.TargetTxtDictionary[DataType.TAB_TAT_DEFINES_TARGET])\r
+ print(Target.TargetTxtDictionary)\r