aboutsummaryrefslogtreecommitdiff
path: root/binary_search_tool
diff options
context:
space:
mode:
Diffstat (limited to 'binary_search_tool')
-rwxr-xr-xbinary_search_tool/compiler_wrapper.py18
1 files changed, 18 insertions, 0 deletions
diff --git a/binary_search_tool/compiler_wrapper.py b/binary_search_tool/compiler_wrapper.py
index 42723ec0..54d5d7ea 100755
--- a/binary_search_tool/compiler_wrapper.py
+++ b/binary_search_tool/compiler_wrapper.py
@@ -15,6 +15,7 @@ https://docs.google.com/document/d/1yDgaUIa2O5w6dc3sSTe1ry-1ehKajTGJGQCbyn0fcEM
from __future__ import print_function
import os
+import shlex
import sys
import bisect_driver
@@ -25,6 +26,15 @@ DEFAULT_BISECT_DIR = os.path.expanduser('~/ANDROID_BISECT')
BISECT_DIR = os.environ.get('BISECT_DIR') or DEFAULT_BISECT_DIR
+def ProcessArgFile(arg_file):
+ args = []
+ # Read in entire file at once and parse as if in shell
+ with open(arg_file, 'rb') as f:
+ args.extend(shlex.split(f.read()))
+
+ return args
+
+
def Main(_):
if not os.path.islink(sys.argv[0]):
print("Compiler wrapper can't be called directly!")
@@ -35,6 +45,14 @@ def Main(_):
if BISECT_STAGE not in bisect_driver.VALID_MODES:
os.execv(WRAPPED, [WRAPPED] + sys.argv[1:])
+ # Handle @file argument syntax with compiler
+ for idx, _ in enumerate(execargs):
+ # @file can be nested in other @file arguments, use While to re-evaluate
+ # the first argument of the embedded file.
+ while execargs[idx][0] == '@':
+ args_in_file = ProcessArgFile(execargs[idx][1:])
+ execargs = execargs[0:idx] + args_in_file + execargs[idx + 1:]
+
bisect_driver.bisect_driver(BISECT_STAGE, BISECT_DIR, execargs)