<feed xmlns='http://www.w3.org/2005/Atom'>
<title>viewer.git/indra/newview/tests/llversioninfo_test.cpp, branch cef_147</title>
<subtitle>Megapahit's fork of the Second Life viewer.
</subtitle>
<id>https://megapahit.org/viewer.git/atom?h=cef_147</id>
<link rel='self' href='https://megapahit.org/viewer.git/atom?h=cef_147'/>
<link rel='alternate' type='text/html' href='https://megapahit.org/viewer.git/'/>
<updated>2024-04-29T04:56:09Z</updated>
<entry>
<title>#824 Process source files in bulk: replace tabs with spaces, convert CRLF to LF, and trim trailing whitespaces as needed</title>
<updated>2024-04-29T04:56:09Z</updated>
<author>
<name>Andrey Lihatskiy</name>
<email>alihatskiy@productengine.com</email>
</author>
<published>2024-04-29T04:43:28Z</published>
<link rel='alternate' type='text/html' href='https://megapahit.org/viewer.git/commit/?id=1b68f71348ecf3983b76b40d7940da8377f049b7'/>
<id>urn:sha1:1b68f71348ecf3983b76b40d7940da8377f049b7</id>
<content type='text'>
</content>
</entry>
<entry>
<title>SL-11216: Convert LLVersionInfo to an LLSingleton.</title>
<updated>2020-03-25T20:01:31Z</updated>
<author>
<name>Nat Goodspeed</name>
<email>nat@lindenlab.com</email>
</author>
<published>2019-05-30T14:39:37Z</published>
<link rel='alternate' type='text/html' href='https://megapahit.org/viewer.git/commit/?id=5a260e0cc3beec45da1d29578855524977206022'/>
<id>urn:sha1:5a260e0cc3beec45da1d29578855524977206022</id>
<content type='text'>
This changeset is meant to exemplify how to convert a "namespace" class whose
methods are static -- and whose data are module-static -- to an LLSingleton.
LLVersionInfo has no initClass() or cleanupClass() methods, but the general
idea is the same.

* Derive the class from LLSingleton&lt;T&gt;:
  class LLSomeSingleton: public LLSingleton&lt;LLSomeSingleton&gt; { ... };
* Add LLSINGLETON(LLSomeSingleton); in the private section of the class. This
  usage implies a separate LLSomeSingleton::LLSomeSingleton() definition, as
  described in indra/llcommon/llsingleton.h.
* Move module-scope data in the .cpp file to non-static class members. Change
  any sVariableName to mVariableName to avoid being outright misleading.
* Make static class methods non-static. Remove '//static' comments from method
  definitions as needed.
* For LLVersionInfo specifically, the 'const std::string&amp;' return type was
  replaced with 'std::string'. Returning a reference to a static or a member,
  const or otherwise, is an anti-pattern: the interface constrains the
  implementation, prohibiting possibly later returning a temporary (an
  expression).
* For LLVersionInfo specifically, 'const S32' return type was replaced with
  simple 'S32'. 'const' is just noise in that usage.
* Simple member initialization (e.g. the original initializer expressions for
  static variables) can be done with member{ value } initializers (no examples
  here though).
* Delete initClass() method.
* LLSingleton's forté is of course lazy initialization. It might work to
  simply delete any calls to initClass(). But if there are side effects that
  must happen at that moment, replace LLSomeSingleton::initClass() with
  (void)LLSomeSingleton::instance();
* Most initClass() initialization can be done in the constructor, as would
  normally be the case.
* Initialization that might cause a circular LLSingleton reference should be
  moved to initSingleton(). Override 'void initSingleton();' should be private.
* For LLVersionInfo specifically, certain initialization that used to be
  lazily performed was made unconditional, due to its low cost.
* For LLVersionInfo specifically, certain initialization involved calling
  methods that have become non-static. This was moved to initSingleton()
  because, in a constructor body, 'this' does not yet point to the enclosing
  class.
* Delete cleanupClass() method.
* There is already a generic LLSingletonBase::deleteAll() call in
  LLAppViewer::cleanup(). It might work to let this new LLSingleton be cleaned
  up with all the rest. But if there are side effects that must happen at that
  moment, replace LLSomeSingleton::cleanupClass() with
  LLSomeSingleton::deleteSingleton(). That said, much of the benefit of
  converting to LLSingleton is deleteAll()'s guarantee that cross-LLSingleton
  dependencies will be properly honored: we're trying to migrate the code base
  away from the present fragile manual cleanup sequence.
* Most cleanupClass() cleanup can be done in the destructor, as would normally
  be the case.
* Cleanup that might throw an exception should be moved to cleanupSingleton().
  Override 'void cleanupSingleton();' should be private.
* Within LLSomeSingleton methods, remove any existing
  LLSomeSingleton::methodName() qualification: simple methodName() is better.
* In the rest of the code base, convert most LLSomeSingleton::methodName()
  references to LLSomeSingleton::instance().methodName(). (Prefer instance() to
  getInstance() because a reference does not admit the possibility of NULL.)
* Of course, LLSomeSingleton::ENUM_VALUE can remain unchanged.

In general, for many successive references to an LLSingleton instance, it
can be useful to capture the instance() as in:

auto&amp; versionInfo{LLVersionInfo::instance()};
// ... versionInfo.getVersion() ...

We did not do that here only to simplify the code review.

The STRINGIZE(expression) macro encapsulates:
std::ostringstream out;
out &lt;&lt; expression;
return out.str();
We used that in a couple places.

For LLVersionInfo specifically, lllogininstance_test.cpp used to dummy out a
couple specific static methods. It's harder to dummy out
LLSingleton::instance() references, so we add the real class to that test.
</content>
</entry>
<entry>
<title>SL-821: Add LL_TO_WSTRING() macro to llpreprocessor.h.</title>
<updated>2018-05-17T09:33:14Z</updated>
<author>
<name>Nat Goodspeed</name>
<email>nat@lindenlab.com</email>
</author>
<published>2018-05-17T09:33:14Z</published>
<link rel='alternate' type='text/html' href='https://megapahit.org/viewer.git/commit/?id=ed891c60de4169fa8ef4cc19e953e389cc4df60e'/>
<id>urn:sha1:ed891c60de4169fa8ef4cc19e953e389cc4df60e</id>
<content type='text'>
Also use existing LL_TO_STRING() macro to stringize LL_VIEWER_CHANNEL in
llversioninfo.cpp and its tests.
</content>
</entry>
<entry>
<title>SL-321: reintegration of autobuild as package, build changes for mac integration</title>
<updated>2017-03-06T22:43:57Z</updated>
<author>
<name>Glenn Glazer</name>
<email>coyot@lindenlab.com</email>
</author>
<published>2017-03-06T22:43:57Z</published>
<link rel='alternate' type='text/html' href='https://megapahit.org/viewer.git/commit/?id=9c5332b301c0e17cd0133944670f79fd485cf7fe'/>
<id>urn:sha1:9c5332b301c0e17cd0133944670f79fd485cf7fe</id>
<content type='text'>
</content>
</entry>
<entry>
<title>DRTVWR-418: Adjust for LL_VIEWER_CHANNEL coming in unquoted.</title>
<updated>2016-12-01T01:10:28Z</updated>
<author>
<name>Nat Goodspeed</name>
<email>nat@lindenlab.com</email>
</author>
<published>2016-12-01T01:10:28Z</published>
<link rel='alternate' type='text/html' href='https://megapahit.org/viewer.git/commit/?id=222919be87386af66bba836fbb9495b64b4007f4'/>
<id>urn:sha1:222919be87386af66bba836fbb9495b64b4007f4</id>
<content type='text'>
Evidently the LL_VIEWER_CHANNEL macro (defined on the compiler command line)
used to contain enclosing double quotes. Something changed (newer CMake
version?) so that the macro now expands as Second Life Release rather than as
"Second Life Release". That leads to syntax errors when it's used.

Add C++ preprocessor trickery to stringize the value of the macro.
</content>
</entry>
<entry>
<title>remove execute permission from many files that should not have it</title>
<updated>2015-11-10T14:48:56Z</updated>
<author>
<name>Oz Linden</name>
<email>oz@lindenlab.com</email>
</author>
<published>2015-11-10T14:48:56Z</published>
<link rel='alternate' type='text/html' href='https://megapahit.org/viewer.git/commit/?id=c8726aba303bcf1207b730a344536e25491420bc'/>
<id>urn:sha1:c8726aba303bcf1207b730a344536e25491420bc</id>
<content type='text'>
</content>
</entry>
<entry>
<title>merge up to latest viewer-development for merge to 3.5.2</title>
<updated>2013-04-19T18:42:56Z</updated>
<author>
<name>Oz Linden</name>
<email>oz@lindenlab.com</email>
</author>
<published>2013-04-19T18:42:56Z</published>
<link rel='alternate' type='text/html' href='https://megapahit.org/viewer.git/commit/?id=3bb708d70636188b91a6e8476a3b899441de0468'/>
<id>urn:sha1:3bb708d70636188b91a6e8476a3b899441de0468</id>
<content type='text'>
</content>
</entry>
<entry>
<title>Update Mac and Windows breakpad builds to latest</title>
<updated>2013-03-29T14:50:08Z</updated>
<author>
<name>Graham Madarasz</name>
<email>graham@lindenlab.com</email>
</author>
<published>2013-03-29T14:50:08Z</published>
<link rel='alternate' type='text/html' href='https://megapahit.org/viewer.git/commit/?id=bf6182daa8b4d7cea79310547f71d7a3155e17b0'/>
<id>urn:sha1:bf6182daa8b4d7cea79310547f71d7a3155e17b0</id>
<content type='text'>
</content>
</entry>
<entry>
<title>derive version number from indra/VIEWER_VERSION.txt</title>
<updated>2013-02-07T16:56:57Z</updated>
<author>
<name>Oz Linden</name>
<email>oz@lindenlab.com</email>
</author>
<published>2013-02-07T16:56:57Z</published>
<link rel='alternate' type='text/html' href='https://megapahit.org/viewer.git/commit/?id=d7e90f4160aaa81e30206c80047b82833c049482'/>
<id>urn:sha1:d7e90f4160aaa81e30206c80047b82833c049482</id>
<content type='text'>
</content>
</entry>
<entry>
<title>CHOP-238 Fix to bug introduced by http://hg.secondlife.com/viewer-beta/changeset/4072bd5389b2 Reviewed by Brad</title>
<updated>2010-12-02T00:02:43Z</updated>
<author>
<name>Mark Palange (Mani)</name>
<email>palange@lindenlab.com</email>
</author>
<published>2010-12-02T00:02:43Z</published>
<link rel='alternate' type='text/html' href='https://megapahit.org/viewer.git/commit/?id=c51608633ddfdcf9a053fff37461059398ed4500'/>
<id>urn:sha1:c51608633ddfdcf9a053fff37461059398ed4500</id>
<content type='text'>
</content>
</entry>
</feed>
