]> git.proxmox.com Git - mirror_edk2.git/blobdiff - BaseTools/Source/Python/Common/TargetTxtClassObject.py
BaseTools: remove local hex number regular expression
[mirror_edk2.git] / BaseTools / Source / Python / Common / TargetTxtClassObject.py
index fc5d589a5966bf27a7a2281a0283bb377c26f58a..387e5152309743b36c38b859e00f08c022b4eaa1 100644 (file)
@@ -1,7 +1,7 @@
 ## @file\r
 # This file is used to define each component of Target.txt file\r
 #\r
-# Copyright (c) 2007, Intel Corporation. All rights reserved.<BR>\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
 ##\r
 # Import Modules\r
 #\r
-import os\r
+import Common.LongFilePathOs as os\r
 import EdkLogger\r
 import DataType\r
 from BuildToolError import *\r
 import GlobalData\r
+from Common.LongFilePathSupport import OpenLongFilePath as open\r
 \r
-gDefaultTargetTxtFile = "Conf/target.txt"\r
+gDefaultTargetTxtFile = "target.txt"\r
 \r
 ## TargetTxtClassObject\r
 #\r
@@ -37,13 +38,13 @@ class TargetTxtClassObject(object):
             DataType.TAB_TAT_DEFINES_ACTIVE_PLATFORM                            : '',\r
             DataType.TAB_TAT_DEFINES_ACTIVE_MODULE                              : '',\r
             DataType.TAB_TAT_DEFINES_TOOL_CHAIN_CONF                            : '',\r
-            DataType.TAB_TAT_DEFINES_MULTIPLE_THREAD                            : '',\r
             DataType.TAB_TAT_DEFINES_MAX_CONCURRENT_THREAD_NUMBER               : '',\r
             DataType.TAB_TAT_DEFINES_TARGET                                     : [],\r
             DataType.TAB_TAT_DEFINES_TOOL_CHAIN_TAG                             : [],\r
             DataType.TAB_TAT_DEFINES_TARGET_ARCH                                : [],\r
             DataType.TAB_TAT_DEFINES_BUILD_RULE_CONF                            : '',\r
         }\r
+        self.ConfDirectoryPath = ""\r
         if Filename != None:\r
             self.LoadTargetTxtFile(Filename)\r
 \r
@@ -78,7 +79,8 @@ class TargetTxtClassObject(object):
     def ConvertTextFileToDict(self, FileName, CommentCharacter, KeySplitCharacter):\r
         F = None\r
         try:\r
-            F = open(FileName,'r')\r
+            F = open(FileName, 'r')\r
+            self.ConfDirectoryPath = os.path.dirname(FileName)\r
         except:\r
             EdkLogger.error("build", FILE_OPEN_FAILURE, ExtraData=FileName)\r
             if F != None:\r
@@ -99,15 +101,29 @@ class TargetTxtClassObject(object):
             if Key in [DataType.TAB_TAT_DEFINES_ACTIVE_PLATFORM, DataType.TAB_TAT_DEFINES_TOOL_CHAIN_CONF, \\r
                        DataType.TAB_TAT_DEFINES_ACTIVE_MODULE, DataType.TAB_TAT_DEFINES_BUILD_RULE_CONF]:\r
                 self.TargetTxtDictionary[Key] = Value.replace('\\', '/')\r
+                if Key == DataType.TAB_TAT_DEFINES_TOOL_CHAIN_CONF and self.TargetTxtDictionary[Key]:\r
+                    if self.TargetTxtDictionary[Key].startswith("Conf/"):\r
+                        Tools_Def = os.path.join(self.ConfDirectoryPath, self.TargetTxtDictionary[Key].strip())\r
+                        if not os.path.exists(Tools_Def) or not os.path.isfile(Tools_Def):\r
+                            # If Conf/Conf does not exist, try just the Conf/ directory\r
+                            Tools_Def = os.path.join(self.ConfDirectoryPath, self.TargetTxtDictionary[Key].replace("Conf/", "", 1).strip())\r
+                    else:\r
+                        # The File pointed to by TOOL_CHAIN_CONF is not in a Conf/ directory\r
+                        Tools_Def = os.path.join(self.ConfDirectoryPath, self.TargetTxtDictionary[Key].strip())\r
+                    self.TargetTxtDictionary[Key] = Tools_Def\r
+                if Key == DataType.TAB_TAT_DEFINES_BUILD_RULE_CONF and self.TargetTxtDictionary[Key]:\r
+                    if self.TargetTxtDictionary[Key].startswith("Conf/"):\r
+                        Build_Rule = os.path.join(self.ConfDirectoryPath, self.TargetTxtDictionary[Key].strip())\r
+                        if not os.path.exists(Build_Rule) or not os.path.isfile(Build_Rule):\r
+                            # If Conf/Conf does not exist, try just the Conf/ directory\r
+                            Build_Rule = os.path.join(self.ConfDirectoryPath, self.TargetTxtDictionary[Key].replace("Conf/", "", 1).strip())\r
+                    else:\r
+                        # The File pointed to by BUILD_RULE_CONF is not in a Conf/ directory\r
+                        Build_Rule = os.path.join(self.ConfDirectoryPath, self.TargetTxtDictionary[Key].strip())\r
+                    self.TargetTxtDictionary[Key] = Build_Rule\r
             elif Key in [DataType.TAB_TAT_DEFINES_TARGET, DataType.TAB_TAT_DEFINES_TARGET_ARCH, \\r
                          DataType.TAB_TAT_DEFINES_TOOL_CHAIN_TAG]:\r
                 self.TargetTxtDictionary[Key] = Value.split()\r
-            elif Key == DataType.TAB_TAT_DEFINES_MULTIPLE_THREAD:\r
-                if Value not in ["Enable", "Disable"]:\r
-                    EdkLogger.error("build", FORMAT_INVALID, "Invalid setting of [%s]: %s." % (Key, Value),\r
-                                    ExtraData="\tSetting must be one of [Enable, Disable]",\r
-                                    File=FileName)\r
-                self.TargetTxtDictionary[Key] = Value\r
             elif Key == DataType.TAB_TAT_DEFINES_MAX_CONCURRENT_THREAD_NUMBER:\r
                 try:\r
                     V = int(Value, 0)\r
@@ -150,15 +166,15 @@ class TargetTxtClassObject(object):
                         print Item\r
 ## TargetTxtDict\r
 #\r
-# Load target.txt in input workspace dir\r
+# Load target.txt in input Conf dir\r
 #\r
-# @param WorkSpace:  Workspace dir\r
+# @param ConfDir:  Conf dir\r
 #\r
 # @retval Target An instance of TargetTxtClassObject() with loaded target.txt\r
 #\r
-def TargetTxtDict(WorkSpace):\r
+def TargetTxtDict(ConfDir):\r
     Target = TargetTxtClassObject()\r
-    Target.LoadTargetTxtFile(os.path.normpath(os.path.join(WorkSpace, gDefaultTargetTxtFile)))\r
+    Target.LoadTargetTxtFile(os.path.normpath(os.path.join(ConfDir, gDefaultTargetTxtFile)))\r
     return Target\r
 \r
 ##\r