| #!/usr/bin/python2.4 | 
 | # | 
 | # | 
 | # Copyright 2008, The Android Open Source Project | 
 | # | 
 | # Licensed under the Apache License, Version 2.0 (the "License"); | 
 | # you may not use this file except in compliance with the License. | 
 | # You may obtain a copy of the License at | 
 | # | 
 | #     http://www.apache.org/licenses/LICENSE-2.0 | 
 | # | 
 | # Unless required by applicable law or agreed to in writing, software | 
 | # distributed under the License is distributed on an "AS IS" BASIS, | 
 | # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. | 
 | # See the License for the specific language governing permissions and | 
 | # limitations under the License. | 
 |  | 
 | """Contains utility functions for interacting with the Android build system.""" | 
 |  | 
 | # Python imports | 
 | import os | 
 | import re | 
 | import subprocess | 
 |  | 
 | # local imports | 
 | import errors | 
 | import logger | 
 |  | 
 |  | 
 | def GetTop(): | 
 |   """Returns the full pathname of the "top" of the Android development tree. | 
 |  | 
 |   Assumes build environment has been properly configured by envsetup & | 
 |   lunch/choosecombo. | 
 |  | 
 |   Returns: | 
 |     the absolute file path of the Android build root. | 
 |  | 
 |   Raises: | 
 |     AbortError: if Android build root could not be found. | 
 |   """ | 
 |   # TODO: does this need to be reimplemented to be like gettop() in envsetup.sh | 
 |   root_path = os.getenv("ANDROID_BUILD_TOP") | 
 |   if root_path is None: | 
 |     logger.Log("Error: ANDROID_BUILD_TOP not defined. Please run " | 
 |                "envsetup.sh and lunch/choosecombo") | 
 |     raise errors.AbortError | 
 |   return root_path | 
 |  | 
 |  | 
 | def GetHostOutDir(): | 
 |   """Returns the full pathname of out/host/arch of the Android development tree. | 
 |  | 
 |   Assumes build environment has been properly configured by envsetup & | 
 |   lunch/choosecombo. | 
 |  | 
 |   Returns: | 
 |     the absolute file path of the Android host output directory. | 
 |   Raises: | 
 |     AbortError: if Android host output directory could not be found. | 
 |   """ | 
 |   host_out_path = os.getenv("ANDROID_HOST_OUT") | 
 |   if host_out_path is None: | 
 |     logger.Log("Error: ANDROID_HOST_OUT not defined. Please run " | 
 |                "envsetup.sh and lunch/choosecombo") | 
 |     raise errors.AbortError | 
 |   return host_out_path | 
 |  | 
 |  | 
 | def GetOutDir(): | 
 |   """Returns the full pathname of the "out" of the Android development tree. | 
 |  | 
 |   Assumes build environment has been properly configured by envsetup & | 
 |   lunch/choosecombo. | 
 |  | 
 |   Returns: | 
 |     the absolute file path of the Android build output directory. | 
 |   """ | 
 |   root_path = os.getenv("OUT_DIR") | 
 |   if root_path is None: | 
 |     root_path = os.path.join(GetTop(), "out") | 
 |   return root_path | 
 |  | 
 |  | 
 | def GetHostBin(): | 
 |   """Compute the full pathname to the host binary directory. | 
 |  | 
 |   Typically $ANDROID_HOST_OUT/bin. | 
 |  | 
 |   Assumes build environment has been properly configured by envsetup & | 
 |   lunch/choosecombo. | 
 |  | 
 |   Returns: | 
 |     The absolute file path of the Android host binary directory. | 
 |  | 
 |   Raises: | 
 |     AbortError: if Android host binary directory could not be found. | 
 |   """ | 
 |   path = os.path.join(GetHostOutDir(), "bin") | 
 |   if not os.path.exists(path): | 
 |     logger.Log("Error: Host bin path could not be found %s" % path) | 
 |     raise errors.AbortError | 
 |   return path | 
 |  | 
 |  | 
 | def GetProductOut(): | 
 |   """Returns the full pathname to the target/product directory. | 
 |  | 
 |   Typically the value of the env variable $ANDROID_PRODUCT_OUT. | 
 |  | 
 |   Assumes build environment has been properly configured by envsetup & | 
 |   lunch/choosecombo. | 
 |  | 
 |   Returns: | 
 |     The absolute file path of the Android product directory. | 
 |  | 
 |   Raises: | 
 |     AbortError: if Android product directory could not be found. | 
 |   """ | 
 |   path = os.getenv("ANDROID_PRODUCT_OUT") | 
 |   if path is None: | 
 |     logger.Log("Error: ANDROID_PRODUCT_OUT not defined. Please run " | 
 |                "envsetup.sh and lunch/choosecombo") | 
 |     raise errors.AbortError | 
 |   return path | 
 |  | 
 |  | 
 | def GetTargetNativeTestPath(): | 
 |   """Returns the full pathname to target/product data/nativetest/ directory. | 
 |  | 
 |   Assumes build environment has been properly configured by envsetup & | 
 |   lunch/choosecombo. | 
 |  | 
 |   Returns: | 
 |     The absolute file path of the Android target native test directory. | 
 |  | 
 |   Raises: | 
 |     AbortError: if Android target native test directory could not be found. | 
 |   """ | 
 |   path = os.path.join(GetProductOut(), "data", "nativetest") | 
 |   if not os.path.exists(path): | 
 |     logger.Log("Error: Target native test path could not be found") | 
 |     raise errors.AbortError | 
 |   return path | 
 |  | 
 |  | 
 | def GetTargetSystemBin(): | 
 |   """Returns the full pathname to the target/product system/bin directory. | 
 |  | 
 |   Typically the value of the env variable $ANDROID_PRODUCT_OUT/system/bin | 
 |  | 
 |   Assumes build environment has been properly configured by envsetup & | 
 |   lunch/choosecombo. | 
 |  | 
 |   Returns: | 
 |     The absolute file path of the Android target system bin directory. | 
 |  | 
 |   Raises: | 
 |     AbortError: if Android target system bin directory could not be found. | 
 |   """ | 
 |   path = os.path.join(GetProductOut(), "system", "bin") | 
 |   if not os.path.exists(path): | 
 |     logger.Log("Error: Target system bin path could not be found") | 
 |     raise errors.AbortError | 
 |   return path | 
 |  | 
 | def GetHostLibraryPath(): | 
 |   """Returns the full pathname to the host java library output directory. | 
 |  | 
 |   Typically $ANDROID_HOST_OUT/framework. | 
 |  | 
 |   Assumes build environment has been properly configured by envsetup & | 
 |   lunch/choosecombo. | 
 |  | 
 |   Returns: | 
 |     The absolute file path of the Android host java library directory. | 
 |  | 
 |   Raises: | 
 |     AbortError: if Android host java library directory could not be found. | 
 |   """ | 
 |   path = os.path.join(GetHostOutDir(), "framework") | 
 |   if not os.path.exists(path): | 
 |     logger.Log("Error: Host library path could not be found %s" % path) | 
 |     raise errors.AbortError | 
 |   return path | 
 |  | 
 | def GetTestAppPath(): | 
 |   """Returns the full pathname to the test app build output directory. | 
 |  | 
 |   Typically $ANDROID_PRODUCT_OUT/data/app | 
 |  | 
 |   Assumes build environment has been properly configured by envsetup & | 
 |   lunch/choosecombo. | 
 |  | 
 |   Returns: | 
 |     The absolute file path of the Android test app build directory. | 
 |   """ | 
 |   return os.path.join(GetProductOut(), "data", "app") |