diff options
| -rw-r--r-- | indra/newview/CMakeLists.txt | 40 | ||||
| -rw-r--r-- | indra/newview/generate_breakpad_symbols.py | 25 | ||||
| -rwxr-xr-x | indra/newview/viewer_manifest.py | 3 | 
3 files changed, 55 insertions, 13 deletions
diff --git a/indra/newview/CMakeLists.txt b/indra/newview/CMakeLists.txt index b145fbee1f..8e608327d8 100644 --- a/indra/newview/CMakeLists.txt +++ b/indra/newview/CMakeLists.txt @@ -1695,6 +1695,29 @@ if (LINUX)      add_dependencies(package linux-updater-target)      check_message_template(package)    endif (NOT INSTALL) + +  add_custom_command( +    OUTPUT  ${CMAKE_CURRENT_BINARY_DIR}/${CMAKE_CFG_INTDIR}/.${product}.copy_touched +    COMMAND ${PYTHON_EXECUTABLE} +    ARGS +      ${CMAKE_CURRENT_SOURCE_DIR}/viewer_manifest.py +      --arch=${ARCH} +      --actions=copy +      --artwork=${ARTWORK_DIR} +      --build=${CMAKE_CURRENT_BINARY_DIR} +      --buildtype=${CMAKE_BUILD_TYPE} +      --configuration=${CMAKE_CFG_INTDIR} +      --dest=${CMAKE_CURRENT_BINARY_DIR}/packaged +      --grid=${GRID} +      --source=${CMAKE_CURRENT_SOURCE_DIR} +    DEPENDS  +      ${CMAKE_CURRENT_SOURCE_DIR}/viewer_manifest.py +      ${COPY_INPUT_DEPENDENCIES} +    COMMENT "Performing viewer_manifest copy" +    ) +     +  add_custom_target(copy_l_viewer_manifest ALL DEPENDS ${CMAKE_CURRENT_BINARY_DIR}/${CMAKE_CFG_INTDIR}/.${product}.copy_touched)  +  add_dependencies(copy_l_viewer_manifest "${VIEWER_BINARY_NAME}")  endif (LINUX)  if (DARWIN) @@ -1785,21 +1808,23 @@ endif (INSTALL)  if (PACKAGE)    if (WINDOWS)      set(VIEWER_DIST_DIR "${CMAKE_CURRENT_BINARY_DIR}/${CMAKE_CFG_INTDIR}") -    set(VIEWER_SYMBOL_FILE "${CMAKE_CURRENT_BINARY_DIR}/${CMAKE_CFG_INTDIR}/secondlife-windows.breakpad.bz2") -    set(VIEWER_EXE_GLOBS "${VIEWER_BINARY_NAME} SLPlugin.exe") +    set(VIEWER_SYMBOL_FILE "${CMAKE_CURRENT_BINARY_DIR}/${CMAKE_CFG_INTDIR}/secondlife-symbols-windows.tar.bz2") +    set(VIEWER_EXE_GLOBS "${VIEWER_BINARY_NAME}${CMAKE_EXECUTABLE_SUFFIX} slplugin.exe")      set(VIEWER_LIB_GLOB "*${CMAKE_SHARED_MODULE_SUFFIX}") +    set(VIEWER_COPY_MANIFEST copy_w_viewer_manifest)    endif (WINDOWS)    if (DARWIN)      set(VIEWER_DIST_DIR "${CMAKE_CURRENT_BINARY_DIR}/${CMAKE_CFG_INTDIR}/${product}.app") -    set(VIEWER_SYMBOL_FILE "${CMAKE_CURRENT_BINARY_DIR}/${CMAKE_CFG_INTDIR}/secondlife-darwin.breakpad.bz2") -    set(VIEWER_EXE_GLOBS "${VIEWER_BINARY_NAME} SLPlugin") -    set(VIEWER_LIB_GLOB "*${CMAKE_SHARED_MODULE_SUFFIX}") +    set(VIEWER_SYMBOL_FILE "${CMAKE_CURRENT_BINARY_DIR}/${CMAKE_CFG_INTDIR}/secondlife-symbols-darwin.tar.bz2") +    set(VIEWER_EXE_GLOBS "'Second Life' SLPlugin") +    set(VIEWER_LIB_GLOB "*.dylib")    endif (DARWIN)    if (LINUX)      set(VIEWER_DIST_DIR "${CMAKE_CURRENT_BINARY_DIR}/packaged") -    set(VIEWER_SYMBOL_FILE "${CMAKE_CURRENT_BINARY_DIR}/${CMAKE_CFG_INTDIR}/secondlife-linux.breakpad.bz2") +    set(VIEWER_SYMBOL_FILE "${CMAKE_CURRENT_BINARY_DIR}/${CMAKE_CFG_INTDIR}/secondlife-symbols-linux.tar.bz2")      set(VIEWER_EXE_GLOBS "do-not-directly-run-secondlife-bin SLPlugin")      set(VIEWER_LIB_GLOB "*${CMAKE_SHARED_MODULE_SUFFIX}*") +    set(VIEWER_COPY_MANIFEST copy_l_viewer_manifest)    endif (LINUX)    add_custom_command(OUTPUT "${VIEWER_SYMBOL_FILE}" @@ -1812,9 +1837,10 @@ if (PACKAGE)        "${LIBS_PREBUILT_DIR}/${LL_ARCH_DIR}/bin/dump_syms"        "${VIEWER_SYMBOL_FILE}"      DEPENDS generate_breakpad_symbols.py +    VERBATIM    )    add_custom_target(generate_breakpad_symbols ALL DEPENDS "${VIEWER_SYMBOL_FILE}") -  add_dependencies(generate_breakpad_symbols viewer) +  add_dependencies(generate_breakpad_symbols "${VIEWER_BINARY_NAME}" "${VIEWER_COPY_MANIFEST}")    add_dependencies(package generate_breakpad_symbols)  endif (PACKAGE) diff --git a/indra/newview/generate_breakpad_symbols.py b/indra/newview/generate_breakpad_symbols.py index f281846918..3a5f34a5c3 100644 --- a/indra/newview/generate_breakpad_symbols.py +++ b/indra/newview/generate_breakpad_symbols.py @@ -38,7 +38,8 @@ import itertools  import os  import sys  import subprocess -import bz2 +import tarfile +import StringIO  def usage():      print >>sys.stderr, "usage: %s viewer_dir viewer_exes libs_suffix dump_syms_tool viewer_symbol_file" % sys.argv[0] @@ -59,12 +60,26 @@ def main(viewer_dir, viewer_exes, libs_suffix, dump_syms_tool, viewer_symbol_fil          print "dumping module '%s' with '%s'..." % (m, dump_syms_tool)          child = subprocess.Popen([dump_syms_tool, m] , stdout=subprocess.PIPE)          out, err = child.communicate() -        return out +        return (m,child.returncode, out, err) -    out = bz2.BZ2File(viewer_symbol_file, 'w') +    out = tarfile.open(viewer_symbol_file, 'w:bz2') -    for symbols in map(dump_module, list_files()): -        out.writelines(symbols) +    for (filename,status,symbols,err) in itertools.imap(dump_module, list_files()): +        if status == 0: +            module_line = symbols[:symbols.index('\n')] +            module_line = module_line.split() +            hash_id = module_line[3] +            module = ' '.join(module_line[4:]) +            if sys.platform in ['win32', 'cygwin']: +                mod_name = module[:module.rindex('.pdb')] +            else: +                mod_name = module +            symbolfile = StringIO.StringIO(symbols) +            info = tarfile.TarInfo("%(module)s/%(hash_id)s/%(mod_name)s.sym" % dict(module=module, hash_id=hash_id, mod_name=mod_name)) +            info.size = symbolfile.len +            out.addfile(info, symbolfile) +        else: +            print >>sys.stderr, "warning: failed to dump symbols for '%s': %s" % (filename, err)      out.close() diff --git a/indra/newview/viewer_manifest.py b/indra/newview/viewer_manifest.py index dac1409aee..255995aea9 100755 --- a/indra/newview/viewer_manifest.py +++ b/indra/newview/viewer_manifest.py @@ -930,7 +930,8 @@ class Linux_i686Manifest(LinuxManifest):                      self.path("libvivoxplatform.so")                      self.end_prefix("lib") -        if self.args['buildtype'].lower() == 'release': +        # *TODO switch this to use self.is_packaging_viewer() once I understand all the consequences -brad +        if self.args['buildtype'].lower() == 'release' and 'package' in self.args['actions']:              print "* Going strip-crazy on the packaged binaries, since this is a RELEASE build"              self.run_command("find %(d)r/bin %(d)r/lib -type f | xargs --no-run-if-empty strip -S" % {'d': self.get_dst_prefix()} ) # makes some small assumptions about our packaged dir structure  | 
