diff --git a/indra/cmake/Copy3rdPartyLibs.cmake b/indra/cmake/Copy3rdPartyLibs.cmake index 63416c229e..ffc810f6b0 100644 --- a/indra/cmake/Copy3rdPartyLibs.cmake +++ b/indra/cmake/Copy3rdPartyLibs.cmake @@ -150,6 +150,7 @@ if(WINDOWS) msvcp${MSVC_VER}.dll #msvcr${MSVC_VER}.dll # Can't build with older VS versions anyway - no need trying to copy this file vcruntime${MSVC_VER}.dll + vcruntime${MSVC_VER}_1.dll ) # Try using the VC runtime redistributables that came with the VS installation first if(redist_path AND EXISTS "${redist_path}/${release_msvc_file}") diff --git a/indra/lib/python/indra/util/llmanifest.py b/indra/lib/python/indra/util/llmanifest.py index 5f60c4c7fd..512c7c8482 100755 --- a/indra/lib/python/indra/util/llmanifest.py +++ b/indra/lib/python/indra/util/llmanifest.py @@ -901,6 +901,49 @@ class LLManifest(object, metaclass=LLManifestRegistry): # particular, let caller notice 0. return count + def path_optional(self, src, dst=None): + sys.stdout.flush() + if src == None: + raise ManifestError("No source file, dst is " + dst) + if dst == None: + dst = src + dst = os.path.join(self.get_dst_prefix(), dst) + sys.stdout.write("Processing %s => %s ... " % (src, self._relative_dst_path(dst))) + + def try_path(src): + # expand globs + count = 0 + if self.wildcard_pattern.search(src): + for s,d in self.expand_globs(src, dst): + assert(s != d) + count += self.process_file(s, d) + else: + # if we're specifying a single path (not a glob), + # we should error out if it doesn't exist + self.check_file_exists(src) + count += self.process_either(src, dst) + return count + + try_prefixes = [self.get_src_prefix(), self.get_artwork_prefix(), self.get_build_prefix()] + for pfx in try_prefixes: + try: + count = try_path(os.path.join(pfx, src)) + except MissingError: + # if we produce MissingError, just try the next prefix + continue + # If we actually found nonzero files, stop looking + if count: + break + else: + sys.stdout.write("Skipping %s\n" % (src)) + return 0 + + print("%d files" % count) + + # Let caller check whether we processed as many files as expected. In + # particular, let caller notice 0. + return count + def do(self, *actions): self.actions = actions self.construct() diff --git a/indra/llmath/lloctree.h b/indra/llmath/lloctree.h index b2eb750e64..55d6cc9348 100644 --- a/indra/llmath/lloctree.h +++ b/indra/llmath/lloctree.h @@ -75,7 +75,7 @@ template class LLOctreeTravelerDepthFirst : public LLOctreeTraveler { public: - virtual void traverse(const LLOctreeNode* node); + virtual void traverse(const LLOctreeNode* node) override; }; template @@ -733,7 +733,7 @@ public: { } - bool balance() + bool balance() override { //LL_PROFILE_ZONE_NAMED_COLOR("Octree::balance()",OCTREE_DEBUG_COLOR_BALANCE); @@ -769,7 +769,7 @@ public: } // LLOctreeRoot::insert - bool insert(T* data) + bool insert(T* data) override { if (data == NULL) { @@ -874,6 +874,12 @@ public: return false; } + + bool isLeaf() const override + { + // root can't be a leaf + return false; + } }; //======================== diff --git a/indra/llmath/llvolume.cpp b/indra/llmath/llvolume.cpp index 650fc25e85..2b3fd05d87 100644 --- a/indra/llmath/llvolume.cpp +++ b/indra/llmath/llvolume.cpp @@ -431,7 +431,7 @@ public: max.setMax(max, *tri->mV[2]); } } - else if (!branch->isLeaf()) + else if (branch->getChildCount() > 0) { //no data, but child nodes exist LLVolumeOctreeListener* child = (LLVolumeOctreeListener*) branch->getChild(0)->getListener(0); @@ -441,11 +441,7 @@ public: } else { - // [Megaprim crash fix] - //LL_ERRS() << "Empty leaf" << LL_ENDL; - LL_WARNS() << "Empty leaf" << LL_ENDL; - return; - // [Megaprim crash fix] + llassert(!branch->isLeaf()); // Empty leaf } for (S32 i = 0; i < branch->getChildCount(); ++i) diff --git a/indra/newview/llface.cpp b/indra/newview/llface.cpp index 8028393114..198926511f 100644 --- a/indra/newview/llface.cpp +++ b/indra/newview/llface.cpp @@ -2489,7 +2489,7 @@ BOOL LLFace::calcPixelArea(F32& cos_angle_to_view_dir, F32& radius) { //override with avatar bounding box LLVOAvatar* avatar = mVObjp->getAvatar(); - if (avatar) + if (avatar && avatar->mDrawable) { center.load3(avatar->getPositionAgent().mV); const LLVector4a* exts = avatar->mDrawable->getSpatialExtents(); diff --git a/indra/newview/llvieweroctree.cpp b/indra/newview/llvieweroctree.cpp index af65a80d3e..4dbca4dac4 100644 --- a/indra/newview/llvieweroctree.cpp +++ b/indra/newview/llvieweroctree.cpp @@ -564,7 +564,7 @@ void LLViewerOctreeGroup::rebound() group->setState(SKIP_FRUSTUM_CHECK); } - else if (mOctreeNode->isLeaf()) + else if (mOctreeNode->getChildCount() == 0) { //copy object bounding box if this is a leaf boundObjects(TRUE, mExtents[0], mExtents[1]); mBounds[0] = mObjectBounds[0]; diff --git a/indra/newview/viewer_manifest.py b/indra/newview/viewer_manifest.py index 2081ba9538..09dd3e5ef4 100755 --- a/indra/newview/viewer_manifest.py +++ b/indra/newview/viewer_manifest.py @@ -622,6 +622,7 @@ class WindowsManifest(ViewerManifest): # See http://msdn.microsoft.com/en-us/library/ms235291(VS.80).aspx self.path("msvcp140.dll") self.path("vcruntime140.dll") + self.path_optional("vcruntime140_1.dll") # SLVoice executable with self.prefix(src=os.path.join(pkgdir, 'bin', 'release')): @@ -714,6 +715,7 @@ class WindowsManifest(ViewerManifest): 'sharedlibs', 'Release')): self.path("msvcp140.dll") self.path("vcruntime140.dll") + self.path_optional("vcruntime140_1.dll") # CEF files common to all configurations with self.prefix(src=os.path.join(pkgdir, 'resources')):