#\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
from . import EdkLogger\r
from . import DataType\r
from .BuildToolError import *\r
-from . import GlobalData\r
+\r
from Common.LongFilePathSupport import OpenLongFilePath as open\r
+from Common.MultipleWorkspace import MultipleWorkspace as mws\r
\r
gDefaultTargetTxtFile = "target.txt"\r
\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
-TargetTxt = TargetTxtDict(os.path.join(os.getenv("WORKSPACE"),"Conf"))\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