mirror of
https://gitlab.winehq.org/wine/wine-gecko.git
synced 2024-09-13 09:24:08 -07:00
bug 528092 - Supply binaries from the symbol server. r=gps
This commit is contained in:
parent
a80849b594
commit
c12254e470
@ -14,7 +14,8 @@
|
||||
#
|
||||
# Parameters accepted:
|
||||
# -c : Copy debug info files to the same directory structure
|
||||
# as sym files
|
||||
# as sym files. On Windows, this will also copy
|
||||
# binaries into the symbol store.
|
||||
# -a "<archs>" : Run dump_syms -a <arch> for each space separated
|
||||
# cpu architecture in <archs> (only on OS X)
|
||||
# -s <srcdir> : Use <srcdir> as the top source directory to
|
||||
@ -535,7 +536,7 @@ class Dumper:
|
||||
return ""
|
||||
|
||||
# subclasses override this if they want to support this
|
||||
def CopyDebug(self, file, debug_file, guid):
|
||||
def CopyDebug(self, file, debug_file, guid, code_file, code_id):
|
||||
pass
|
||||
|
||||
def Finish(self, stop_pool=True):
|
||||
@ -609,6 +610,7 @@ class Dumper:
|
||||
result = { 'status' : False, 'after' : after, 'after_arg' : after_arg, 'files' : files }
|
||||
|
||||
sourceFileStream = ''
|
||||
code_id, code_file = None, None
|
||||
for file in files:
|
||||
# files is a tuple of files, containing fallbacks in case the first file doesn't process successfully
|
||||
try:
|
||||
@ -653,6 +655,14 @@ class Dumper:
|
||||
(ver, checkout, source_file, revision) = filename.split(":", 3)
|
||||
sourceFileStream += sourcepath + "*" + source_file + '*' + revision + "\r\n"
|
||||
f.write("FILE %s %s\n" % (index, filename))
|
||||
elif line.startswith("INFO CODE_ID "):
|
||||
# INFO CODE_ID code_id code_file
|
||||
# This gives some info we can use to
|
||||
# store binaries in the symbol store.
|
||||
bits = line.rstrip().split(None, 3)
|
||||
if len(bits) == 4:
|
||||
code_id, code_file = bits[2:]
|
||||
f.write(line)
|
||||
else:
|
||||
# pass through all other lines unchanged
|
||||
f.write(line)
|
||||
@ -668,7 +678,8 @@ class Dumper:
|
||||
self.SourceServerIndexing(file, guid, sourceFileStream, vcs_root)
|
||||
# only copy debug the first time if we have multiple architectures
|
||||
if self.copy_debug and arch_num == 0:
|
||||
self.CopyDebug(file, debug_file, guid)
|
||||
self.CopyDebug(file, debug_file, guid,
|
||||
code_file, code_id)
|
||||
except StopIteration:
|
||||
pass
|
||||
except Exception as e:
|
||||
@ -720,23 +731,50 @@ class Dumper_Win32(Dumper):
|
||||
self.fixedFilenameCaseCache[file] = result
|
||||
return result
|
||||
|
||||
def CopyDebug(self, file, debug_file, guid):
|
||||
def CopyDebug(self, file, debug_file, guid, code_file, code_id):
|
||||
def compress(path):
|
||||
compressed_file = path[:-1] + '_'
|
||||
# ignore makecab's output
|
||||
success = subprocess.call(["makecab.exe", "/D",
|
||||
"CompressionType=LZX", "/D",
|
||||
"CompressionMemory=21",
|
||||
path, compressed_file],
|
||||
stdout=open("NUL:","w"),
|
||||
stderr=subprocess.STDOUT)
|
||||
if success == 0 and os.path.exists(compressed_file):
|
||||
os.unlink(path)
|
||||
return True
|
||||
return False
|
||||
|
||||
rel_path = os.path.join(debug_file,
|
||||
guid,
|
||||
debug_file).replace("\\", "/")
|
||||
full_path = os.path.normpath(os.path.join(self.symbol_path,
|
||||
rel_path))
|
||||
shutil.copyfile(file, full_path)
|
||||
# try compressing it
|
||||
compressed_file = os.path.splitext(full_path)[0] + ".pd_"
|
||||
# ignore makecab's output
|
||||
success = subprocess.call(["makecab.exe", "/D", "CompressionType=LZX", "/D",
|
||||
"CompressionMemory=21",
|
||||
full_path, compressed_file],
|
||||
stdout=open("NUL:","w"), stderr=subprocess.STDOUT)
|
||||
if success == 0 and os.path.exists(compressed_file):
|
||||
os.unlink(full_path)
|
||||
self.output(sys.stdout, os.path.splitext(rel_path)[0] + ".pd_")
|
||||
if compress(full_path):
|
||||
self.output(sys.stdout, rel_path[:-1] + '_')
|
||||
else:
|
||||
self.output(sys.stdout, rel_path)
|
||||
|
||||
# Copy the binary file as well
|
||||
if code_file and code_id:
|
||||
full_code_path = os.path.join(os.path.dirname(file),
|
||||
code_file)
|
||||
if os.path.exists(full_code_path):
|
||||
rel_path = os.path.join(code_file,
|
||||
code_id,
|
||||
code_file).replace("\\", "/")
|
||||
full_path = os.path.normpath(os.path.join(self.symbol_path,
|
||||
rel_path))
|
||||
try:
|
||||
os.makedirs(os.path.dirname(full_path))
|
||||
except OSError as e:
|
||||
if e.errno != errno.EEXIST:
|
||||
raise
|
||||
shutil.copyfile(full_code_path, full_path)
|
||||
if compress(full_path):
|
||||
self.output(sys.stdout, rel_path[:-1] + '_')
|
||||
else:
|
||||
self.output(sys.stdout, rel_path)
|
||||
|
||||
@ -770,7 +808,7 @@ class Dumper_Linux(Dumper):
|
||||
return self.RunFileCommand(file).startswith("ELF")
|
||||
return False
|
||||
|
||||
def CopyDebug(self, file, debug_file, guid):
|
||||
def CopyDebug(self, file, debug_file, guid, code_file, code_id):
|
||||
# We want to strip out the debug info, and add a
|
||||
# .gnu_debuglink section to the object, so the debugger can
|
||||
# actually load our debug info later.
|
||||
@ -881,7 +919,7 @@ class Dumper_Mac(Dumper):
|
||||
result['files'] = (dsymbundle, file)
|
||||
return result
|
||||
|
||||
def CopyDebug(self, file, debug_file, guid):
|
||||
def CopyDebug(self, file, debug_file, guid, code_file, code_id):
|
||||
"""ProcessFiles has already produced a dSYM bundle, so we should just
|
||||
copy that to the destination directory. However, we'll package it
|
||||
into a .tar.bz2 because the debug symbols are pretty huge, and
|
||||
|
Loading…
Reference in New Issue
Block a user