Skip to content
Snippets Groups Projects
  1. Sep 05, 2018
    • Nat Goodspeed's avatar
    • Nat Goodspeed's avatar
      SL-957: Don't move viewer executable until final viewer_manifest run. · 42931d67
      Nat Goodspeed authored
      viewer_manifest is run twice by CMakeLists.txt: once with --actions=copy and
      once with the default actions copy and package. The fact that we (try to) move
      the Mac viewer executable both times has confused things on a number of
      occasions. Currently it's bollixing our attempt to run dsymutil on the
      executable so we can package up the Mac symbols for both codeticket and
      BugSplat.
      
      Introduce DarwinManifest.is_rearranging() that tests whether either "package"
      or "unpacked" is in self.args["actions"], echoing an earlier test. Make
      several things conditional on that, notably moving the executable.
      42931d67
  2. Aug 30, 2018
    • Nat Goodspeed's avatar
      SL-957: Generate the expected symbols tarball even with BugSplat. · 5ff160f7
      Nat Goodspeed authored
      This is a separate step from generating and posting BugSplat symbols, since
      BugSplat needs the executable along with the symbols, and we don't need to
      consume that space in a symbols tarball.
      
      Move Mac BugSplat symbol generation logic to CMake land, the same general area
      where Breakpad symbols are generated. Add stanzas to pack up the usual tarball
      for Windows and Mac.
      
      Remove the build.sh test that suppressed uploading the symbols tarball for
      BugSplat builds.
      5ff160f7
  3. Aug 24, 2018
    • Nat Goodspeed's avatar
      DRTVWR-447: Introduce explicit CMake BUGSPLAT_DB variable. · c2178bb6
      Nat Goodspeed authored
      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'].
      c2178bb6
  4. Aug 15, 2018
  5. Jul 10, 2018
    • Nat Goodspeed's avatar
      DRTVWR-447: Use absolute path prefixes for CEF components. · 07d7e48f
      Nat Goodspeed authored
      viewer_manifest.py had LLManifest.prefix() calls starting with '..' (or
      os.pardir, same thing) which failed with new prefix() calling conventions.
      Explicitly starting with os.path.join(self.args['build'], os.pardir, etc.)
      where applicable works much better.
      07d7e48f
  6. Jun 30, 2018
    • Nat Goodspeed's avatar
      MAINT-8822: Revert viewer_manifest to using src= instead of build=. · 3e66dc9f
      Nat Goodspeed authored
      Turns out that having multiple (source, build, artwork) prefix stacks isn't
      such a good idea after all. Many of our LLManifest.path() directives use
      wildcards -- and if _any files_ match the specified wildcard from a prefix
      stack other than what you had in mind, viewer_manifest will silently,
      cheerfully do the Wrong Thing.
      
      There is a good reason why all existing LLManifest.prefix() calls exclusively
      used src= and/or dst= instead of build=.
      3e66dc9f
  7. Jun 29, 2018
    • Nat Goodspeed's avatar
      MAINT-8822: Revamp the LLManifest.prefix() calling convention. · 93ea0d70
      Nat Goodspeed authored
      The way prefix("path_fragment") or prefix(src="path_fragment") has always
      worked is that unless you explicitly specify dst="", it adds "path_fragment"
      to the source AND dest prefix stacks!
      
      The most recent refactoring of viewer_manifest.py failed to copy CEF because
      it involved prefix(src="../some lengthy path fragment") -- forgetting to
      specify dst="" -- which added "../some lengthy path fragment" to the dest
      prefix stack -- which put it outside the viewer install staging area
      altogether.
      
      Having been bitten too many times by forgetting to add prefix(dst=""), we
      remove the necessity. The prefix() src=, build= and dst= prefix stacks are now
      completely independent. Add src_dst= keyword argument for when you DO want to
      add the same path fragment to both the source and dest prefix stacks.
      ("Explicit is better than implicit.")
      
      Change all existing calls accordingly.
      
      Now that the build prefix stack no longer tracks the src prefix stack, we were
      failing to pick up some things from the build area because NOBODY ever used
      build=, relying entirely on src= to point both to stuff in the source tree and
      stuff in the build tree. Try to use build= appropriately.
      
      If that proves too confusing, we might eliminate the separate build and
      artwork (!) prefix stacks entirely, requiring callers to reset the src stack
      explicitly when switching back and forth.
      93ea0d70
  8. Jun 14, 2018
    • Nat Goodspeed's avatar
      SL-821: Continue changing macOS executable to match channel name. · 67f6625c
      Nat Goodspeed authored
      Set our CMake 'product' variable to VIEWER_CHANNEL. This probably has far-
      reaching implications, but it seems the expedient way to keep everything self-
      consistent. Use ${product} in the DARWIN VIEWER_EXE_GLOBS used for Breakpad
      symbol dumping instead of hardcoding 'Second Life'.
      
      The Breakpad symbol dumping stanza was enclosed in nested (but not indented)
      conditions. To these we add another condition: don't bother if we're using
      BugSplat. Unify all three into a single horrendous outermost expression.
      
      Fix the MACOSX_BUNDLE_INFO_STRING, and hence CFBundleGetInfoString, to
      VIEWER_CHANNEL as well.
      
      Our CMake MACOSX_BUNDLE_SHORT_VERSION_STRING was never used before -- we were
      erroneously using MACOSX_BUNDLE_LONG_VERSION_STRING in the Info-SecondLife.plist
      template even for CFBundleShortVersionString. Looks like a classic copy/paste
      error. Fix that; also use four-part version number instead of three-part.
      
      With those two changes, we shouldn't need to patch the top-level Info.plist in
      viewer_manifest.py any more.
      
      viewer_manifest.py still needs to move the viewer executable(s) to the
      embedded viewer app bundle, but it no longer needs to rename the real
      executable to the channel name since we've already dealt with that in CMake
      land. This lets us unify the code that picks the biggest of those executables
      in the first and second viewer_manifest.py runs.
      67f6625c
    • Nat Goodspeed's avatar
    • Nat Goodspeed's avatar
      SL-821: Rename macOS Second Life executable to match the channel name. · 6cda0ecc
      Nat Goodspeed authored
      This requires fixing CFBundleExecutable as well.
      6cda0ecc
    • Nat Goodspeed's avatar
  9. May 25, 2018
    • Nat Goodspeed's avatar
      SL-821, SL-826: Use BUGSPLAT_DB from environment on Windows and Mac. · 63fe7d80
      Nat Goodspeed authored
      On TeamCity, set BUGSPLAT_DB from build-secrets.
      
      Use the presence of $BUGSPLAT_DB, rather than a new CMake BUGSPLAT option, to
      control whether CMake searches for BugSplat -- and passes LL_BUGSPLAT into C++.
      
      When BUGSPLAT_DB is present, make viewer_manifest.py set "BugSplat DB" in
      build_data.json, and "BugsplatServerURL" in Mac Info.plist.
      
      Make llappviewerwin32.cpp read "BugSplat DB" from build_data.json.
      
      Add placeholders for Mac hooks to suppress BugSplat prompt and send
      SecondLife.log.
      63fe7d80
  10. May 22, 2018
  11. May 11, 2018
  12. Feb 21, 2018
  13. Feb 15, 2018
  14. Jan 18, 2018
  15. Jan 17, 2018
  16. Dec 21, 2017
  17. Dec 07, 2017
  18. Dec 06, 2017
  19. Dec 04, 2017
    • Nat Goodspeed's avatar
      MAINT-7751: Rework DarwinManifest to produce new app bundle structure. · 488d1658
      Nat Goodspeed authored
      Specifically, Second Life.app is now mostly just a wrapper. Its Contents/
      Resources contains nested Launcher.app (the VMP) and Viewer.app (the viewer
      itself). Most of what used to be in the top-level Second Life.app has been
      relocated to the embedded Viewer.app. VMP stuff has of course been extracted
      to Launcher.app. The top-level Second Life.app executable is now a tiny script
      that runs Launcher.app. This structure permits different icons and different
      Dock flyover text for the launcher and the viewer, hopefully ameliorating a
      certain amount of user confusion about the dual icons.
      
      This requires a corresponding VMP change: on macOS, the VMP must now find both
      its resources and the viewer executable by walking up from Launcher.app and
      down again into its sibling Viewer.app.
      
      Since Dock flyover text is determined by the embedded app names, allow Product
      to change these at will. That means we should be able to tweak exactly one
      variable assignment to change either of those embedded app names, without
      having to chase down other references scattered throughout the source repo.
      
      For that reason, create top-level trampoline SL_Launcher script dynamically:
      it must reference the launcher app by name. That means we must also perform
      (the equivalent of) chmod +x on that generated script.
      
      The one mystery surrounding this restructuring is that without a top-level
      Frameworks symlink pointing to the embedded Viewer.app's Frameworks directory
      (where CEF lives), CEF refuses to start: no splash screen, no MoP. Perhaps we
      can fix that someday.
      
      Use Python's bundled plistlib to generate Info.plist files for the embedded
      applications.
      
      Reorganize stray code stanzas to try to help the structure of the code more or
      less resemble the structure of the desired result.
      
      Add ViewerManifest.relpath() method to determine the relative path from a
      specified base to the target path. If base omitted, assumes get_dst_prefix()
      -- handy for creating symlinks. Determining exactly the right number of
      os.pardir instances to concatenate into the relative pathname for a symlink
      (or an install_name_tool stamp) was tedious, fragile and unobvious, difficult
      to desk-check. Using relpath() should make all that more robust.
      
      Migrate symlinkf() from free function to ViewerManifest method, refactoring
      into _symlinkf_prep_dst() and _symlinkf(), adding relsymlinkf(). This lets us
      add convenience features such as prepending get_dst_prefix() to the dest (the
      place where we want to create the symlink), defaulting dest to the basename of
      target and ensuring that the parent of that dest already exists -- as with
      LLManifest.path(). Moreover, since it makes no sense whatsoever to create an
      absolute symlink to some path on the build machine, relsymlinkf() creates
      every symlink relative to dirname(dest). That, in turn, lets us eliminate a
      certain amount of boilerplate around existing calls. (Also, since we now
      ensure the parent directory exists, scrap the logic to diagnose "nonexistent
      parent directory.")
      
      Make llmanifest.LLManifest.run_command() not pass shell=True to subprocess,
      thereby permitting (requiring) the list form rather than the string form.
      Change all existing calls to list form. This makes calls more readable, for
      two reasons. First, many of the arguments are taken from script variables;
      these can simply be dropped into the list instead of indirecting through
      string interpolation. Second, it eliminates the need to manually escape
      individual arguments, since subprocess promises to honor the distinction
      between list elements.
      
      Also fix LLManifest.put_in_file() to ensure the containing directory exists.
      
      Consolidate some viewer_manifest.py redundancy, e.g. copying the same set of
      ten DLLs from either of two directories depending on Release vs. Debug.
      488d1658
  20. Nov 29, 2017
  21. Nov 28, 2017
  22. Nov 21, 2017
  23. Oct 25, 2017
  24. Oct 19, 2017
  25. Oct 18, 2017
  26. Oct 09, 2017
  27. Oct 06, 2017
  28. Oct 05, 2017
  29. Sep 29, 2017
  30. Sep 28, 2017
  31. Sep 27, 2017
  32. Sep 21, 2017
Loading