summaryrefslogtreecommitdiff
path: root/indra/newview/llversioninfo.cpp
AgeCommit message (Collapse)Author
2020-03-25SL-11216: Introduce LLVersionInfo::getReleaseNotes() method.Nat Goodspeed
The default string returned by getReleaseNotes() is empty. It must be set by posting the relevant release-notes URL string to a new LLEventMailDrop instance named "relnotes". Add unique_ptr<LLEventMailDrop> and unique_ptr<LLStoreListener<std::string>> to LLVersionInfo -- using unique_ptr to leave those classes opaque to header-file consumers. Introduce an out-of-line destructor to handle the unique_ptr<opaque> idiom. Initialize the LLEventMailDrop with the desired name; initialize the LLStoreListener with that LLEventMailDrop and the data member returned by getReleaseNotes().
2020-03-25SL-11216: Convert LLVersionInfo to an LLSingleton.Nat Goodspeed
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<T>: class LLSomeSingleton: public LLSingleton<LLSomeSingleton> { ... }; * 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&' 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& 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 << 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.
2018-05-17SL-821: Add LL_TO_WSTRING() macro to llpreprocessor.h.Nat Goodspeed
Also use existing LL_TO_STRING() macro to stringize LL_VIEWER_CHANNEL in llversioninfo.cpp and its tests.
2017-03-22remove stray debug messageGlenn Glazer
2017-03-06SL-321: reintegration of autobuild as package, build changes for mac integrationGlenn Glazer
2016-11-30DRTVWR-418: Adjust for LL_VIEWER_CHANNEL coming in unquoted.Nat Goodspeed
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.
2016-02-04add build configuration to the About box if it is not ReleaseOz Linden
remove some superfluous other information from About
2015-11-10remove execute permission from many files that should not have itOz Linden
2015-04-28build fixMnikolenko ProductEngine
2015-04-28increment viewer version to 3.7.29Mnikolenko ProductEngine
2015-04-22MAINT-5147: correct menu colors for test viewersOz Linden
2014-10-20Update to build on Xcode 6.0: Large (and final) collection of fixes for ↵callum_linden
unused variables, unused const-variables, unused member variables & functions etc. Also removed flags from CMake
2013-04-19merge up to latest viewer-development for merge to 3.5.2Oz Linden
2013-03-29Update Mac and Windows breakpad builds to latestGraham Madarasz
2013-02-13put precompiled headers back in llversioninfo.cppOz Linden
2013-02-12set default viewer channel only in the cmake fileOz Linden
2013-02-07derive version number from indra/VIEWER_VERSION.txtOz Linden
2010-12-01CHOP-238 Fix to bug introduced by ↵Mark Palange (Mani)
http://hg.secondlife.com/viewer-beta/changeset/4072bd5389b2 Reviewed by Brad
2010-11-01VWR-23666 Removed setting VersionChannelName. LLVersionInfo::resetChannel() ↵Mark Palange (Mani)
and unit tests. Reviewed by brad.
2010-08-13Change license from GPL to LGPL (version 2.1)Oz Linden
2009-12-08DEV-43439: Created new LLVersionInfo API.Lynx Linden
Renamed llviewerversion to llversioninfo, to avoid confusion with llversionviewer in llcommon (llversion is already used by llwindow). Created new LLVersionInfo class with the following methods: static S32 getMajor(); static S32 getMinor(); static S32 getPatch(); static S32 getBuild(); static const std::string &getVersion(); static const std::string &getShortVersion(); static const std::string &getChannel(); All viewer code has been updated to use this API. Viewer code no longer directly includes llversionviewer.h from llcommon.