releasetools: Set the search path based on the current executable.
We used to mimic the behavior of build system, to find the default search path based on OUT_DIR_COMMON_BASE or OUT_DIR. These variables should be internal to build system. Since we've switched releasetools script to hermetic Python executables (e.g. `m -j ota_from_target_files`, then run the binary at `out/host/linux-x86/bin/ota_from_target_files`), we can set the search path in relative to the path of the current executable. Bug: 133126366 Test: TreeHugger Test: 1. Build aosp_x86, by "lunch aosp_x86; m -j" 2. Inject errors to the executables under out/host/linux-x86/bin, e.g. to `lpmake`. 3. Set up OUT_DIR (e.g., to /tmp/out) and build the same product again by "export OUT_DIR=/tmp/out; lunch aosp_x86; m -j". Check that the second run finishes successfully (with the binaries at /tmp/out as opposed to out/; otherwise it would fail the build due to the invalid binaries from step 2). Test: lunch a target; `atest --host releasetools_test releasetools_py3_test` Change-Id: I366099c3dfd5fa4282745ef258a8cf35338e1e42
This commit is contained in:
@@ -47,22 +47,23 @@ logger = logging.getLogger(__name__)
|
||||
|
||||
|
||||
class Options(object):
|
||||
|
||||
def __init__(self):
|
||||
base_out_path = os.getenv('OUT_DIR_COMMON_BASE')
|
||||
if base_out_path is None:
|
||||
base_search_path = "out"
|
||||
else:
|
||||
base_search_path = os.path.join(base_out_path,
|
||||
os.path.basename(os.getcwd()))
|
||||
# Set up search path, in order to find framework/ and lib64/. At the time of
|
||||
# running this function, user-supplied search path (`--path`) hasn't been
|
||||
# available. So the value set here is the default, which might be overridden
|
||||
# by commandline flag later.
|
||||
exec_path = sys.argv[0]
|
||||
if exec_path.endswith('.py'):
|
||||
script_name = os.path.basename(exec_path)
|
||||
# logger hasn't been initialized yet at this point. Use print to output
|
||||
# warnings.
|
||||
print(
|
||||
'Warning: releasetools script should be invoked as hermetic Python '
|
||||
'executable -- build and run `{}` directly.'.format(script_name[:-3]),
|
||||
file=sys.stderr)
|
||||
self.search_path = os.path.realpath(os.path.join(exec_path, '..'))
|
||||
|
||||
# Python >= 3.3 returns 'linux', whereas Python 2.7 gives 'linux2'.
|
||||
platform_search_path = {
|
||||
"linux": os.path.join(base_search_path, "host/linux-x86"),
|
||||
"linux2": os.path.join(base_search_path, "host/linux-x86"),
|
||||
"darwin": os.path.join(base_search_path, "host/darwin-x86"),
|
||||
}
|
||||
|
||||
self.search_path = platform_search_path.get(sys.platform)
|
||||
self.signapk_path = "framework/signapk.jar" # Relative to search_path
|
||||
self.signapk_shared_library_path = "lib64" # Relative to search_path
|
||||
self.extra_signapk_args = []
|
||||
|
Reference in New Issue
Block a user