Index: components/breakpad/tools/generate_breakpad_symbols.py |
diff --git a/components/breakpad/tools/generate_breakpad_symbols.py b/components/breakpad/tools/generate_breakpad_symbols.py |
index 176665d41a4328f1c96b376583d031741584afcb..e7ec3a9ad834487bfb29a615ffcecf989711994f 100755 |
--- a/components/breakpad/tools/generate_breakpad_symbols.py |
+++ b/components/breakpad/tools/generate_breakpad_symbols.py |
@@ -38,21 +38,11 @@ def GetCommandOutput(command): |
return output |
-def GetDumpSymsBinary(dump_syms_dir=None): |
+def GetDumpSymsBinary(build_dir=None): |
"""Returns the path to the dump_syms binary.""" |
DUMP_SYMS = 'dump_syms' |
- dump_syms_bin = None |
- if dump_syms_dir: |
- bin = os.path.join(os.path.expanduser(dump_syms_dir), DUMP_SYMS) |
- if os.access(bin, os.X_OK): |
- dump_syms_bin = bin |
- else: |
- for path in os.environ['PATH'].split(':'): |
- bin = os.path.join(path, DUMP_SYMS) |
- if os.access(bin, os.X_OK): |
- dump_syms_bin = bin |
- break |
- if not dump_syms_bin: |
+ dump_syms_bin = os.path.join(os.path.expanduser(build_dir), DUMP_SYMS) |
+ if not os.access(dump_syms_bin, os.X_OK): |
print 'Cannot find %s.' % DUMP_SYMS |
sys.exit(1) |
@@ -67,8 +57,8 @@ def Resolve(path, exe_path, loader_path, rpaths): |
@rpath is replaced with the first path in |rpaths| where the referenced file |
is found |
""" |
- path.replace('@loader_path', loader_path) |
- path.replace('@executable_path', exe_path) |
+ path = path.replace('@loader_path', loader_path) |
+ path = path.replace('@executable_path', exe_path) |
if path.find('@rpath') != -1: |
for rpath in rpaths: |
new_path = Resolve(path.replace('@rpath', rpath), exe_path, loader_path, |
@@ -112,21 +102,29 @@ def GetSharedLibraryDependenciesMac(binary, exe_path): |
m = lib_re.match(line) |
if m: |
dep = Resolve(m.group(1), exe_path, loader_path, rpaths) |
- if dep and os.access(dep, os.X_OK): |
+ if dep: |
deps.append(os.path.normpath(dep)) |
return deps |
-def GetSharedLibraryDependencies(binary, exe_path): |
+def GetSharedLibraryDependencies(options, binary, exe_path): |
"""Return absolute paths to all shared library dependecies of the binary.""" |
+ deps = [] |
if sys.platform.startswith('linux'): |
- return GetSharedLibraryDependenciesLinux(binary) |
- |
- if sys.platform == 'darwin': |
- return GetSharedLibraryDependenciesMac(binary, exe_path) |
+ deps = GetSharedLibraryDependenciesLinux(binary) |
+ elif sys.platform == 'darwin': |
+ deps = GetSharedLibraryDependenciesMac(binary, exe_path) |
+ else: |
+ print "Platform not supported." |
+ sys.exit(1) |
- print "Platform not supported." |
- sys.exit(1) |
+ result = [] |
+ build_dir = os.path.abspath(options.build_dir) |
+ for dep in deps: |
+ if (os.access(dep, os.X_OK) and |
+ os.path.abspath(os.path.dirname(dep)).startswith(build_dir)): |
+ result.append(dep) |
+ return result |
def mkdir_p(path): |
@@ -148,7 +146,7 @@ def GenerateSymbols(options, binaries): |
while True: |
binary = queue.get() |
- syms = GetCommandOutput([GetDumpSymsBinary(options.dump_syms_dir), |
+ syms = GetCommandOutput([GetDumpSymsBinary(options.build_dir), |
binary]) |
module_line = re.match("MODULE [^ ]+ [^ ]+ ([0-9A-F]+) (.*)\n", syms) |
output_path = os.path.join(options.symbols_dir, module_line.group(2), |
@@ -174,9 +172,8 @@ def GenerateSymbols(options, binaries): |
def main(): |
parser = optparse.OptionParser() |
- parser.add_option('', '--dump-syms-dir', default='', |
- help='The directory where dump_syms is installed. ' |
- 'Searches $PATH by default') |
+ parser.add_option('', '--build-dir', default='', |
+ help='The build output directory.') |
parser.add_option('', '--symbols-dir', default='', |
help='The directory where to write the symbols file.') |
parser.add_option('', '--binary', default='', |
@@ -193,6 +190,10 @@ def main(): |
print "Required option --symbols-dir missing." |
return 1 |
+ if not options.build_dir: |
+ print "Required option --build-dir missing." |
+ return 1 |
+ |
if not options.binary: |
print "Required option --binary missing." |
return 1 |
@@ -212,7 +213,7 @@ def main(): |
queue = [options.binary] |
exe_path = os.path.dirname(options.binary) |
while queue: |
- deps = GetSharedLibraryDependencies(queue.pop(0), exe_path) |
+ deps = GetSharedLibraryDependencies(options, queue.pop(0), exe_path) |
new_deps = set(deps) - binaries |
binaries |= new_deps |
queue.extend(list(new_deps)) |