diff options
| author | Nat Goodspeed <nat@lindenlab.com> | 2018-08-24 09:56:56 -0400 | 
|---|---|---|
| committer | Nat Goodspeed <nat@lindenlab.com> | 2018-08-24 09:56:56 -0400 | 
| commit | c2178bb6ac139d47eb2bfdf9e85811a6f02810ed (patch) | |
| tree | 7e0bbb76c709e3982a5451e378becee351766cbf | |
| parent | e674f11757ab55c5ca7aab4cb1c8e059fa98f466 (diff) | |
DRTVWR-447: Introduce explicit CMake BUGSPLAT_DB variable.
Define the CMake cache variable, with empty string as its default.
Make build.sh pass the BUGSPLAT_DB environment variable as a CMake
command-line variable assignment.
Change CMake 'if (DEFINED ENV{BUGSPLAT_DB})' to plain 'if (BUGSPLAT_DB)'.
Make CMake pass new --bugsplat switch to every one of SIX different
invocations of viewer_manifest.py.
Give llmanifest.main() function an argument to allow supplementing the base
set of command-line switches with additional application-specific switches.
In viewer_manifest.py, define new --bugsplat command-line switch and pass to
llmanifest.main(). Instead of consulting os.environ['BUGSPLAT_DB'], consult
self.args['bugsplat'].
| -rwxr-xr-x | build.sh | 1 | ||||
| -rw-r--r-- | indra/cmake/Copy3rdPartyLibs.cmake | 4 | ||||
| -rw-r--r-- | indra/cmake/Variables.cmake | 1 | ||||
| -rw-r--r-- | indra/cmake/bugsplat.cmake | 9 | ||||
| -rwxr-xr-x | indra/lib/python/indra/util/llmanifest.py | 56 | ||||
| -rw-r--r-- | indra/llcommon/CMakeLists.txt | 4 | ||||
| -rw-r--r-- | indra/newview/CMakeLists.txt | 52 | ||||
| -rwxr-xr-x | indra/newview/viewer_manifest.py | 45 | 
8 files changed, 94 insertions, 78 deletions
| @@ -122,6 +122,7 @@ pre_build()       -DPACKAGE:BOOL=ON \       -DHAVOK:BOOL="$HAVOK" \       -DRELEASE_CRASH_REPORTING:BOOL="$RELEASE_CRASH_REPORTING" \ +     -DBUGSPLAT_DB:STRING="${BUGSPLAT_DB:-}" \       -DVIEWER_CHANNEL:STRING="${viewer_channel}" \       -DGRID:STRING="\"$viewer_grid\"" \       -DTEMPLATE_VERIFIER_OPTIONS:STRING="$template_verifier_options" $template_verifier_master_url \ diff --git a/indra/cmake/Copy3rdPartyLibs.cmake b/indra/cmake/Copy3rdPartyLibs.cmake index c9519b0e1d..dde53835fb 100644 --- a/indra/cmake/Copy3rdPartyLibs.cmake +++ b/indra/cmake/Copy3rdPartyLibs.cmake @@ -51,7 +51,7 @@ if(WINDOWS)      # Filenames are different for 32/64 bit BugSplat file and we don't      # have any control over them so need to branch. -    if (DEFINED ENV{BUGSPLAT_DB}) +    if (BUGSPLAT_DB)        if(ADDRESS_SIZE EQUAL 32)          set(release_files ${release_files} BugSplat.dll)          set(release_files ${release_files} BugSplatRc.dll) @@ -61,7 +61,7 @@ if(WINDOWS)          set(release_files ${release_files} BugSplatRc64.dll)          set(release_files ${release_files} BsSndRpt64.exe)        endif(ADDRESS_SIZE EQUAL 32) -    endif (DEFINED ENV{BUGSPLAT_DB}) +    endif (BUGSPLAT_DB)      if (FMODEX) diff --git a/indra/cmake/Variables.cmake b/indra/cmake/Variables.cmake index b913d6398e..e49de0a79b 100644 --- a/indra/cmake/Variables.cmake +++ b/indra/cmake/Variables.cmake @@ -33,6 +33,7 @@ set(INTEGRATION_TESTS_PREFIX)  set(LL_TESTS ON CACHE BOOL "Build and run unit and integration tests (disable for build timing runs to reduce variation")  set(INCREMENTAL_LINK OFF CACHE BOOL "Use incremental linking on win32 builds (enable for faster links on some machines)")  set(ENABLE_MEDIA_PLUGINS ON CACHE BOOL "Turn off building media plugins if they are imported by third-party library mechanism") +set(BUGSPLAT_DB "" CACHE STRING "BugSplat database name, if BugSplat crash reporting is desired")  if(LIBS_CLOSED_DIR)    file(TO_CMAKE_PATH "${LIBS_CLOSED_DIR}" LIBS_CLOSED_DIR) diff --git a/indra/cmake/bugsplat.cmake b/indra/cmake/bugsplat.cmake index eb5808b1fb..59644b73ce 100644 --- a/indra/cmake/bugsplat.cmake +++ b/indra/cmake/bugsplat.cmake @@ -1,7 +1,6 @@ -# BugSplat is engaged by setting environment variable BUGSPLAT_DB to the -# target BugSplat database name prior to running CMake (and during autobuild -# build). -if (DEFINED ENV{BUGSPLAT_DB}) +# BugSplat is engaged by setting BUGSPLAT_DB to the target BugSplat database +# name. +if (BUGSPLAT_DB)    if (USESYSTEMLIBS)      message(STATUS "Looking for system BugSplat")      set(BUGSPLAT_FIND_QUIETLY ON) @@ -23,4 +22,4 @@ if (DEFINED ENV{BUGSPLAT_DB})      endif (WINDOWS)      set(BUGSPLAT_INCLUDE_DIR ${LIBS_PREBUILT_DIR}/include/bugsplat)    endif (USESYSTEMLIBS) -endif (DEFINED ENV{BUGSPLAT_DB}) +endif (BUGSPLAT_DB) diff --git a/indra/lib/python/indra/util/llmanifest.py b/indra/lib/python/indra/util/llmanifest.py index 611f72269e..c4dcad51b7 100755 --- a/indra/lib/python/indra/util/llmanifest.py +++ b/indra/lib/python/indra/util/llmanifest.py @@ -33,13 +33,14 @@ import filecmp  import fnmatch  import getopt  import glob +import itertools +import operator  import os  import re  import shutil +import subprocess  import sys  import tarfile -import errno -import subprocess  class ManifestError(RuntimeError):      """Use an exception more specific than generic Python RuntimeError""" @@ -90,7 +91,7 @@ DEFAULT_SRCTREE = os.path.dirname(sys.argv[0])  CHANNEL_VENDOR_BASE = 'Second Life'  RELEASE_CHANNEL = CHANNEL_VENDOR_BASE + ' Release' -ARGUMENTS=[ +BASE_ARGUMENTS=[      dict(name='actions',           description="""This argument specifies the actions that are to be taken when the          script is run.  The meaningful actions are currently: @@ -108,8 +109,19 @@ ARGUMENTS=[          Example use: %(name)s --arch=i686          On Linux this would try to use Linux_i686Manifest.""",           default=""), +    dict(name='artwork', description='Artwork directory.', default=DEFAULT_SRCTREE),      dict(name='build', description='Build directory.', default=DEFAULT_SRCTREE),      dict(name='buildtype', description='Build type (i.e. Debug, Release, RelWithDebInfo).', default=None), +    dict(name='bundleid', +         description="""The Mac OS X Bundle identifier.""", +         default="com.secondlife.indra.viewer"), +    dict(name='channel', +         description="""The channel to use for updates, packaging, settings name, etc.""", +         default='CHANNEL UNSET'), +    dict(name='channel_suffix', +         description="""Addition to the channel for packaging and channel value, +         but not application name (used internally)""", +         default=None),      dict(name='configuration',           description="""The build configuration used.""",           default="Release"), @@ -117,12 +129,6 @@ ARGUMENTS=[      dict(name='grid',           description="""Which grid the client will try to connect to.""",           default=None), -    dict(name='channel', -         description="""The channel to use for updates, packaging, settings name, etc.""", -         default='CHANNEL UNSET'), -    dict(name='channel_suffix', -         description="""Addition to the channel for packaging and channel value, but not application name (used internally)""", -         default=None),      dict(name='installer_name',           description=""" The name of the file that the installer should be          packaged up into. Only used on Linux at the moment.""", @@ -134,10 +140,14 @@ ARGUMENTS=[           description="""The current platform, to be used for looking up which          manifest class to run.""",           default=get_default_platform), +    dict(name='signature', +         description="""This specifies an identity to sign the viewer with, if any. +        If no value is supplied, the default signature will be used, if any. Currently +        only used on Mac OS X.""", +         default=None),      dict(name='source',           description='Source directory.',           default=DEFAULT_SRCTREE), -    dict(name='artwork', description='Artwork directory.', default=DEFAULT_SRCTREE),      dict(name='touch',           description="""File to touch when action is finished. Touch file will          contain the name of the final package in a form suitable @@ -145,23 +155,15 @@ ARGUMENTS=[           default=None),      dict(name='versionfile',           description="""The name of a file containing the full version number."""), -    dict(name='bundleid', -         description="""The Mac OS X Bundle identifier.""", -         default="com.secondlife.indra.viewer"), -    dict(name='signature', -         description="""This specifies an identity to sign the viewer with, if any. -        If no value is supplied, the default signature will be used, if any. Currently -        only used on Mac OS X.""", -         default=None)      ] -def usage(srctree=""): +def usage(arguments, srctree=""):      nd = {'name':sys.argv[0]}      print """Usage:      %(name)s [options] [destdir]      Options:      """ % nd -    for arg in ARGUMENTS: +    for arg in arguments:          default = arg['default']          if hasattr(default, '__call__'):              default = "(computed value) \"" + str(default(srctree)) + '"' @@ -172,11 +174,15 @@ def usage(srctree=""):              default,              arg['description'] % nd) -def main(): -##  import itertools +def main(extra=[]):  ##  print ' '.join((("'%s'" % item) if ' ' in item else item)  ##                 for item in itertools.chain([sys.executable], sys.argv)) -    option_names = [arg['name'] + '=' for arg in ARGUMENTS] +    # Supplement our default command-line switches with any desired by +    # application-specific caller. +    arguments = list(itertools.chain(BASE_ARGUMENTS, extra)) +    # Alphabetize them by option name in case we display usage. +    arguments.sort(key=operator.itemgetter('name')) +    option_names = [arg['name'] + '=' for arg in arguments]      option_names.append('help')      options, remainder = getopt.getopt(sys.argv[1:], "", option_names) @@ -199,11 +205,11 @@ def main():      # early out for help      if 'help' in args:          # *TODO: it is a huge hack to pass around the srctree like this -        usage(args['source']) +        usage(arguments, srctree=args['source'])          return      # defaults -    for arg in ARGUMENTS: +    for arg in arguments:          if arg['name'] not in args:              default = arg['default']              if hasattr(default, '__call__'): diff --git a/indra/llcommon/CMakeLists.txt b/indra/llcommon/CMakeLists.txt index 8977acb873..42ad56f1b0 100644 --- a/indra/llcommon/CMakeLists.txt +++ b/indra/llcommon/CMakeLists.txt @@ -255,10 +255,10 @@ set(llcommon_HEADER_FILES  set_source_files_properties(${llcommon_HEADER_FILES}                              PROPERTIES HEADER_FILE_ONLY TRUE) -if (DEFINED ENV{BUGSPLAT_DB}) +if (BUGSPLAT_DB)    set_source_files_properties(llapp.cpp      PROPERTIES COMPILE_DEFINITIONS "LL_BUGSPLAT") -endif (DEFINED ENV{BUGSPLAT_DB}) +endif (BUGSPLAT_DB)  list(APPEND llcommon_SOURCE_FILES ${llcommon_HEADER_FILES}) diff --git a/indra/newview/CMakeLists.txt b/indra/newview/CMakeLists.txt index 31c4c02d99..64a8e15c4b 100644 --- a/indra/newview/CMakeLists.txt +++ b/indra/newview/CMakeLists.txt @@ -8,9 +8,9 @@ include(00-Common)  include(Linking)  include(Boost) -if (DEFINED ENV{BUGSPLAT_DB}) +if (BUGSPLAT_DB)    include(bugsplat) -endif (DEFINED ENV{BUGSPLAT_DB}) +endif (BUGSPLAT_DB)  include(BuildPackagesInfo)  include(BuildVersion)  include(CMakeCopyIfDifferent) @@ -99,11 +99,11 @@ include_directories(      ${CMAKE_CURRENT_SOURCE_DIR}      ) -if (DEFINED ENV{BUGSPLAT_DB}) +if (BUGSPLAT_DB)    include_directories(      ${BUGSPLAT_INCLUDE_DIR}      ) -endif (DEFINED ENV{BUGSPLAT_DB}) +endif (BUGSPLAT_DB)  include_directories(SYSTEM      ${LLCOMMON_SYSTEM_INCLUDE_DIRS} @@ -1390,11 +1390,11 @@ if (DARWIN)      ${COREAUDIO_LIBRARY}      ) -  if (DEFINED ENV{BUGSPLAT_DB}) +  if (BUGSPLAT_DB)      list(APPEND viewer_LIBRARIES        ${BUGSPLAT_LIBRARIES}        ) -  endif (DEFINED ENV{BUGSPLAT_DB}) +  endif (BUGSPLAT_DB)    # Add resource files to the project.    set(viewer_RESOURCE_FILES @@ -1729,10 +1729,10 @@ if (SDL_FOUND)      )  endif (SDL_FOUND) -if (DEFINED ENV{BUGSPLAT_DB}) +if (BUGSPLAT_DB)    set_property(TARGET ${VIEWER_BINARY_NAME}      PROPERTY COMPILE_DEFINITIONS "LL_BUGSPLAT") -endif (DEFINED ENV{BUGSPLAT_DB}) +endif (BUGSPLAT_DB)  # add package files  file(GLOB EVENT_HOST_SCRIPT_GLOB_LIST @@ -1841,15 +1841,16 @@ if (WINDOWS)          --actions=copy          --arch=${ARCH}          --artwork=${ARTWORK_DIR} +        "--bugsplat=${BUGSPLAT_DB}"          --build=${CMAKE_CURRENT_BINARY_DIR}          --buildtype=${CMAKE_BUILD_TYPE} +        "--channel=${VIEWER_CHANNEL}"          --configuration=${CMAKE_CFG_INTDIR}          --dest=${CMAKE_CURRENT_BINARY_DIR}/${CMAKE_CFG_INTDIR}          --grid=${GRID} -        "--channel=${VIEWER_CHANNEL}" -        --versionfile=${CMAKE_CURRENT_BINARY_DIR}/viewer_version.txt          --source=${CMAKE_CURRENT_SOURCE_DIR}          --touch=${CMAKE_CURRENT_BINARY_DIR}/${CMAKE_CFG_INTDIR}/copy_touched.bat +        --versionfile=${CMAKE_CURRENT_BINARY_DIR}/viewer_version.txt        DEPENDS          ${CMAKE_CURRENT_SOURCE_DIR}/viewer_manifest.py          stage_third_party_libs @@ -1892,15 +1893,16 @@ if (WINDOWS)            ${CMAKE_CURRENT_SOURCE_DIR}/viewer_manifest.py            --arch=${ARCH}            --artwork=${ARTWORK_DIR} +          "--bugsplat=${BUGSPLAT_DB}"            --build=${CMAKE_CURRENT_BINARY_DIR}            --buildtype=${CMAKE_BUILD_TYPE}            "--channel=${VIEWER_CHANNEL}" -          --versionfile=${CMAKE_CURRENT_BINARY_DIR}/viewer_version.txt            --configuration=${CMAKE_CFG_INTDIR}            --dest=${CMAKE_CURRENT_BINARY_DIR}/${CMAKE_CFG_INTDIR}            --grid=${GRID}            --source=${CMAKE_CURRENT_SOURCE_DIR}            --touch=${CMAKE_CURRENT_BINARY_DIR}/${CMAKE_CFG_INTDIR}/touched.bat +          --versionfile=${CMAKE_CURRENT_BINARY_DIR}/viewer_version.txt          DEPENDS              ${VIEWER_BINARY_NAME}              ${CMAKE_CURRENT_SOURCE_DIR}/viewer_manifest.py @@ -2007,11 +2009,11 @@ target_link_libraries(${VIEWER_BINARY_NAME}      ${LLAPPEARANCE_LIBRARIES}      ) -if (DEFINED ENV{BUGSPLAT_DB}) +if (BUGSPLAT_DB)    target_link_libraries(${VIEWER_BINARY_NAME}      ${BUGSPLAT_LIBRARIES}      ) -endif (DEFINED ENV{BUGSPLAT_DB}) +endif (BUGSPLAT_DB)  set(ARTWORK_DIR ${CMAKE_CURRENT_SOURCE_DIR} CACHE PATH      "Path to artwork files.") @@ -2036,15 +2038,16 @@ if (LINUX)          ${CMAKE_CURRENT_SOURCE_DIR}/viewer_manifest.py          --arch=${ARCH}          --artwork=${ARTWORK_DIR} +        "--bugsplat=${BUGSPLAT_DB}"          --build=${CMAKE_CURRENT_BINARY_DIR}          --buildtype=${CMAKE_BUILD_TYPE}          "--channel=${VIEWER_CHANNEL}" -        --versionfile=${CMAKE_CURRENT_BINARY_DIR}/viewer_version.txt          --configuration=${CMAKE_CFG_INTDIR}          --dest=${CMAKE_CURRENT_BINARY_DIR}/packaged          --grid=${GRID}          --source=${CMAKE_CURRENT_SOURCE_DIR}          --touch=${CMAKE_CURRENT_BINARY_DIR}/${CMAKE_CFG_INTDIR}/.${product}.touched +        --versionfile=${CMAKE_CURRENT_BINARY_DIR}/viewer_version.txt        DEPENDS          ${CMAKE_CURRENT_SOURCE_DIR}/viewer_manifest.py          ${COPY_INPUT_DEPENDENCIES} @@ -2058,17 +2061,18 @@ if (LINUX)      COMMAND ${PYTHON_EXECUTABLE}      ARGS        ${CMAKE_CURRENT_SOURCE_DIR}/viewer_manifest.py -      --arch=${ARCH}        --actions=copy +      --arch=${ARCH}        --artwork=${ARTWORK_DIR} +      "--bugsplat=${BUGSPLAT_DB}"        --build=${CMAKE_CURRENT_BINARY_DIR}        --buildtype=${CMAKE_BUILD_TYPE} +      "--channel=${VIEWER_CHANNEL}"        --configuration=${CMAKE_CFG_INTDIR}        --dest=${CMAKE_CURRENT_BINARY_DIR}/packaged        --grid=${GRID} -      "--channel=${VIEWER_CHANNEL}" -      --versionfile=${CMAKE_CURRENT_BINARY_DIR}/viewer_version.txt        --source=${CMAKE_CURRENT_SOURCE_DIR} +      --versionfile=${CMAKE_CURRENT_BINARY_DIR}/viewer_version.txt      DEPENDS        ${CMAKE_CURRENT_SOURCE_DIR}/viewer_manifest.py        ${COPY_INPUT_DEPENDENCIES} @@ -2137,15 +2141,16 @@ if (DARWIN)        --actions=copy        --arch=${ARCH}        --artwork=${ARTWORK_DIR} +      "--bugsplat=${BUGSPLAT_DB}"        --build=${CMAKE_CURRENT_BINARY_DIR}        --buildtype=${CMAKE_BUILD_TYPE} +      --bundleid=${MACOSX_BUNDLE_GUI_IDENTIFIER} +      "--channel=${VIEWER_CHANNEL}"        --configuration=${CMAKE_CFG_INTDIR}        --dest=${CMAKE_CURRENT_BINARY_DIR}/${CMAKE_CFG_INTDIR}/${product}.app        --grid=${GRID} -      "--channel=${VIEWER_CHANNEL}" -      --versionfile=${CMAKE_CURRENT_BINARY_DIR}/viewer_version.txt -      --bundleid=${MACOSX_BUNDLE_GUI_IDENTIFIER}        --source=${CMAKE_CURRENT_SOURCE_DIR} +      --versionfile=${CMAKE_CURRENT_BINARY_DIR}/viewer_version.txt      DEPENDS        ${VIEWER_BINARY_NAME}        ${CMAKE_CURRENT_SOURCE_DIR}/viewer_manifest.py @@ -2170,15 +2175,16 @@ if (DARWIN)            ${CMAKE_CURRENT_SOURCE_DIR}/viewer_manifest.py            --arch=${ARCH}            --artwork=${ARTWORK_DIR} +          "--bugsplat=${BUGSPLAT_DB}"            --build=${CMAKE_CURRENT_BINARY_DIR}            --buildtype=${CMAKE_BUILD_TYPE} +          "--channel=${VIEWER_CHANNEL}"            --configuration=${CMAKE_CFG_INTDIR}            --dest=${CMAKE_CURRENT_BINARY_DIR}/${CMAKE_CFG_INTDIR}/${product}.app            --grid=${GRID} -          "--channel=${VIEWER_CHANNEL}" -          --versionfile=${CMAKE_CURRENT_BINARY_DIR}/viewer_version.txt            --source=${CMAKE_CURRENT_SOURCE_DIR}            --touch=${CMAKE_CURRENT_BINARY_DIR}/${CMAKE_CFG_INTDIR}/.${product}.touched +          --versionfile=${CMAKE_CURRENT_BINARY_DIR}/viewer_version.txt            ${SIGNING_SETTING}          DEPENDS            ${CMAKE_CURRENT_SOURCE_DIR}/viewer_manifest.py @@ -2190,7 +2196,7 @@ if (INSTALL)    include(${CMAKE_CURRENT_SOURCE_DIR}/ViewerInstall.cmake)  endif (INSTALL) -if (PACKAGE AND (RELEASE_CRASH_REPORTING OR NON_RELEASE_CRASH_REPORTING) AND NOT DEFINED ENV{BUGSPLAT_DB}) +if (PACKAGE AND (RELEASE_CRASH_REPORTING OR NON_RELEASE_CRASH_REPORTING) AND NOT BUGSPLAT_DB)    set(SYMBOL_SEARCH_DIRS "")    # Note that the path to VIEWER_SYMBOL_FILE must match that in ../../build.sh    if (WINDOWS) diff --git a/indra/newview/viewer_manifest.py b/indra/newview/viewer_manifest.py index ea0b3625be..e5f0575e86 100755 --- a/indra/newview/viewer_manifest.py +++ b/indra/newview/viewer_manifest.py @@ -188,11 +188,10 @@ class ViewerManifest(LLManifest):                              "Address Size":self.address_size,                              "Update Service":"https://update.secondlife.com/update",                              } -            try: -                build_data_dict["BugSplat DB"] = os.environ["BUGSPLAT_DB"] -            except KeyError: -                # skip the assignment if there's no BUGSPLAT_DB variable -                pass +            # Only store this if it's both present and non-empty +            bugsplat_db = self.args.get('bugsplat') +            if bugsplat_db: +                build_data_dict["BugSplat DB"] = bugsplat_db              build_data_dict = self.finish_build_data_dict(build_data_dict)              with open(os.path.join(os.pardir,'build_data.json'), 'w') as build_data_handle:                  json.dump(build_data_dict,build_data_handle) @@ -589,14 +588,15 @@ class WindowsManifest(ViewerManifest):              self.path("libhunspell.dll")              # BugSplat -            if(self.address_size == 64): -                self.path("BsSndRpt64.exe") -                self.path("BugSplat64.dll") -                self.path("BugSplatRc64.dll") -            else: -                self.path("BsSndRpt.exe") -                self.path("BugSplat.dll") -                self.path("BugSplatRc.dll") +            if self.args.get('bugsplat'): +                if(self.address_size == 64): +                    self.path("BsSndRpt64.exe") +                    self.path("BugSplat64.dll") +                    self.path("BugSplatRc64.dll") +                else: +                    self.path("BsSndRpt.exe") +                    self.path("BugSplat.dll") +                    self.path("BugSplatRc.dll")              # For google-perftools tcmalloc allocator.              try: @@ -1038,7 +1038,7 @@ open "%s" --args "$@"                          if ("package" in self.args['actions'] or                               "unpacked" in self.args['actions']):                              # only if we're engaging BugSplat -                            if "BUGSPLAT_DB" in os.environ: +                            if self.args.get('bugsplat'):                                  # Create a symbol archive BEFORE stripping the                                  # binary.                                  self.run_command(['dsymutil', exepath]) @@ -1085,13 +1085,11 @@ open "%s" --args "$@"                      # runs the executable, instead of launching the app)                      Info["CFBundleExecutable"] = exename                      Info["CFBundleIconFile"] = viewer_icon -                    try: +                    bugsplat_db = self.args.get('bugsplat') +                    if bugsplat_db:                          # https://www.bugsplat.com/docs/platforms/os-x#configuration                          Info["BugsplatServerURL"] = \ -                            "https://{BUGSPLAT_DB}.bugsplatsoftware.com/".format(**os.environ) -                    except KeyError: -                        # skip the assignment if there's no BUGSPLAT_DB variable -                        pass +                            "https://{}.bugsplatsoftware.com/".format(bugsplat_db)                      self.put_in_file(                          plistlib.writePlistToString(Info),                          os.path.basename(Info_plist), @@ -1104,7 +1102,8 @@ open "%s" --args "$@"                          # Remember where we parked this car.                          CEF_framework = self.dst_path_of(CEF_framework) -                        self.path2basename(relpkgdir, "BugsplatMac.framework") +                        if self.args.get('bugsplat'): +                            self.path2basename(relpkgdir, "BugsplatMac.framework")                      with self.prefix(dst="Resources"):                          # defer cross-platform file copies until we're in the right @@ -1727,4 +1726,8 @@ class Linux_x86_64_Manifest(LinuxManifest):  ################################################################  if __name__ == "__main__": -    main() +    extra_arguments = [ +        dict(name='bugsplat', description="""BugSplat database to which to post crashes, +             if BugSplat crash reporting is desired""", default=''), +        ] +    main(extra=extra_arguments) | 
