diff --git a/indra/cmake/BuildVersion.cmake b/indra/cmake/BuildVersion.cmake index a291023577098eaa17b98db350d82a2253d369df..f44318ef5ad926b0be742f39cc8ae0c887cfc8c8 100644 --- a/indra/cmake/BuildVersion.cmake +++ b/indra/cmake/BuildVersion.cmake @@ -1,122 +1,139 @@ # -*- cmake -*- -#Construct the viewer channel from environment variables or defaults -if (DEFINED ENV{VIEWER_CHANNEL_BASE}) - set(VIEWER_CHANNEL_BASE $ENV{VIEWER_CHANNEL_BASE} CACHE STRING "Viewer Channel Base Name" FORCE) -else() - set(VIEWER_CHANNEL_BASE "Alchemy" CACHE STRING "Viewer Channel Base Name") -endif() -if (DEFINED ENV{VIEWER_CHANNEL_TYPE}) - set(VIEWER_CHANNEL_TYPE $ENV{VIEWER_CHANNEL_TYPE} CACHE STRING "Viewer Channel Type Name" FORCE) -else() - set(VIEWER_CHANNEL_TYPE "Test" CACHE STRING "Viewer Channel Type Name") -endif() +option(REVISION_FROM_VCS "Get current revision from vcs" ON) +find_package(Git) -if("${VIEWER_CHANNEL_TYPE}" STREQUAL "Project") - if (DEFINED ENV{VIEWER_CHANNEL_CODENAME}) - set(VIEWER_CHANNEL_CODENAME $ENV{VIEWER_CHANNEL_CODENAME} CACHE STRING "Viewer Channel Code Name for Project type" FORCE) - else() - set(VIEWER_VERSION_CODENAME_FILE "${CMAKE_CURRENT_SOURCE_DIR}/newview/VIEWER_PROJECT_CODENAME.txt") +# Construct the viewer channel from environment variables or defaults +if(NOT DEFINED VIEWER_CHANNEL) + if(DEFINED ENV{VIEWER_CHANNEL_BASE}) + set(VIEWER_CHANNEL_BASE + $ENV{VIEWER_CHANNEL_BASE} + CACHE STRING "Viewer Channel Base Name" FORCE) + else() + set(VIEWER_CHANNEL_BASE + "Alchemy" + CACHE STRING "Viewer Channel Base Name") + endif() - if ( EXISTS ${VIEWER_VERSION_CODENAME_FILE} ) - file(STRINGS ${VIEWER_VERSION_CODENAME_FILE} VIEWER_CHANNEL_CODENAME) + if(DEFINED ENV{VIEWER_CHANNEL_TYPE}) + set(VIEWER_CHANNEL_TYPE + $ENV{VIEWER_CHANNEL_TYPE} + CACHE STRING "Viewer Channel Type Name" FORCE) else() - set(VIEWER_CHANNEL_CODENAME "Default" CACHE STRING "Viewer Channel Code Name for Project type") + set(VIEWER_CHANNEL_TYPE + "Test" + CACHE STRING "Viewer Channel Type Name") + endif() + + if(DEFINED ENV{VIEWER_CHANNEL_CODENAME}) + set(VIEWER_CHANNEL_CODENAME_INTERNAL $ENV{VIEWER_CHANNEL_CODENAME}) + elseif(DEFINED VIEWER_CHANNEL_CODENAME) + set(VIEWER_CHANNEL_CODENAME_INTERNAL ${VIEWER_CHANNEL_CODENAME}) + else() + set(VIEWER_CHANNEL_CODENAME_FILE "${CMAKE_SOURCE_DIR}/newview/VIEWER_PROJECT_CODENAME.txt") + + if(EXISTS ${VIEWER_CHANNEL_CODENAME_FILE}) + file(STRINGS ${VIEWER_CHANNEL_CODENAME_FILE} VIEWER_CHANNEL_CODENAME_INTERNAL) + else() + set(VIEWER_CHANNEL_CODENAME_INTERNAL "Default") + endif() + endif() + if("${VIEWER_CHANNEL_TYPE}" STREQUAL "Project") + set(VIEWER_CHANNEL "${VIEWER_CHANNEL_BASE} ${VIEWER_CHANNEL_TYPE} ${VIEWER_CHANNEL_CODENAME_INTERNAL}") + else() + set(VIEWER_CHANNEL "${VIEWER_CHANNEL_BASE} ${VIEWER_CHANNEL_TYPE}") endif() - endif() - set(VIEWER_CHANNEL "${VIEWER_CHANNEL_BASE} ${VIEWER_CHANNEL_TYPE} ${VIEWER_CHANNEL_CODENAME}") -else() - set(VIEWER_CHANNEL "${VIEWER_CHANNEL_BASE} ${VIEWER_CHANNEL_TYPE}") endif() +if(NOT DEFINED VIEWER_COMMIT_LONG_SHA) + if(DEFINED ENV{VIEWER_CHANNEL_TYPE}) + set(VIEWER_COMMIT_SHORT_SHA $ENV{VIEWER_COMMIT_SHORT_SHA}) + elseif(Git_FOUND) + execute_process( + COMMAND ${GIT_EXECUTABLE} rev-parse HEAD + OUTPUT_VARIABLE GIT_COMMIT_SHA + WORKING_DIRECTORY ${CMAKE_SOURCE_DIR} + OUTPUT_STRIP_TRAILING_WHITESPACE) -# Construct the viewer version number based on the indra/VIEWER_VERSION file -option(REVISION_FROM_VCS "Get current revision from vcs" ON) -find_package(Git) + if(GIT_COMMIT_SHA) + set(VIEWER_COMMIT_LONG_SHA ${GIT_COMMIT_SHA}) + else() + set(VIEWER_COMMIT_LONG_SHA 0) + endif() + else() + set(VIEWER_COMMIT_LONG_SHA 0) + endif() +endif(NOT DEFINED VIEWER_COMMIT_LONG_SHA) + +if(NOT DEFINED VIEWER_COMMIT_SHORT_SHA) + if(DEFINED ENV{VIEWER_COMMIT_SHORT_SHA}) + set(VIEWER_COMMIT_SHORT_SHA $ENV{VIEWER_COMMIT_SHORT_SHA}) + elseif(Git_FOUND) + execute_process( + COMMAND ${GIT_EXECUTABLE} rev-parse --short HEAD + OUTPUT_VARIABLE GIT_COMMIT_SHORT_SHA + WORKING_DIRECTORY ${CMAKE_SOURCE_DIR} + OUTPUT_STRIP_TRAILING_WHITESPACE) + + if(GIT_COMMIT_SHORT_SHA) + set(VIEWER_COMMIT_SHORT_SHA ${GIT_COMMIT_SHORT_SHA}) + else() + set(VIEWER_COMMIT_SHORT_SHA 0) + endif() + else() + set(VIEWER_COMMIT_SHORT_SHA 0) + endif() +endif(NOT DEFINED VIEWER_COMMIT_SHORT_SHA) -if (NOT DEFINED VIEWER_SHORT_VERSION) # will be true in indra/, false in indra/newview/ - set(VIEWER_VERSION_BASE_FILE "${CMAKE_CURRENT_SOURCE_DIR}/newview/VIEWER_VERSION.txt") +# Construct the viewer version number based on the indra/VIEWER_VERSION file +if(NOT DEFINED VIEWER_SHORT_VERSION) # will be true in indra/, false in indra/newview/ + set(VIEWER_VERSION_BASE_FILE "${CMAKE_SOURCE_DIR}/newview/VIEWER_VERSION.txt") - if ( EXISTS ${VIEWER_VERSION_BASE_FILE} ) + if(EXISTS ${VIEWER_VERSION_BASE_FILE}) file(STRINGS ${VIEWER_VERSION_BASE_FILE} VIEWER_SHORT_VERSION REGEX "^[0-9]+\\.[0-9]+\\.[0-9]+") string(REGEX REPLACE "^([0-9]+)\\.[0-9]+\\.[0-9]+" "\\1" VIEWER_VERSION_MAJOR ${VIEWER_SHORT_VERSION}) string(REGEX REPLACE "^[0-9]+\\.([0-9]+)\\.[0-9]+" "\\1" VIEWER_VERSION_MINOR ${VIEWER_SHORT_VERSION}) string(REGEX REPLACE "^[0-9]+\\.[0-9]+\\.([0-9]+)" "\\1" VIEWER_VERSION_PATCH ${VIEWER_SHORT_VERSION}) - if ((NOT REVISION_FROM_VCS) AND DEFINED ENV{revision}) - set(VIEWER_VERSION_REVISION $ENV{revision}) - message(STATUS "Revision (from environment): ${VIEWER_VERSION_REVISION}") - elseif ((NOT REVISION_FROM_VCS) AND DEFINED ENV{AUTOBUILD_BUILD_ID}) - set(VIEWER_VERSION_REVISION $ENV{AUTOBUILD_BUILD_ID}) - message(STATUS "Revision (from autobuild environment): ${VIEWER_VERSION_REVISION}") - elseif (Git_FOUND) - execute_process( - COMMAND ${GIT_EXECUTABLE} rev-list HEAD --count - OUTPUT_VARIABLE GIT_REV_LIST_COUNT - WORKING_DIRECTORY ${CMAKE_SOURCE_DIR} - OUTPUT_STRIP_TRAILING_WHITESPACE - ) + if((NOT REVISION_FROM_VCS) AND DEFINED ENV{revision}) + set(VIEWER_VERSION_REVISION $ENV{revision}) + message(STATUS "Revision (from environment): ${VIEWER_VERSION_REVISION}") + elseif((NOT REVISION_FROM_VCS) AND DEFINED ENV{AUTOBUILD_BUILD_ID}) + set(VIEWER_VERSION_REVISION $ENV{AUTOBUILD_BUILD_ID}) + message(STATUS "Revision (from autobuild environment): ${VIEWER_VERSION_REVISION}") + elseif(Git_FOUND) + execute_process( + COMMAND ${GIT_EXECUTABLE} rev-list HEAD --count + OUTPUT_VARIABLE GIT_REV_LIST_COUNT + WORKING_DIRECTORY ${CMAKE_SOURCE_DIR} + OUTPUT_STRIP_TRAILING_WHITESPACE) if(GIT_REV_LIST_COUNT) - set(VIEWER_VERSION_REVISION ${GIT_REV_LIST_COUNT}) + set(VIEWER_VERSION_REVISION ${GIT_REV_LIST_COUNT}) else(GIT_REV_LIST_COUNT) - set(VIEWER_VERSION_REVISION 0) + set(VIEWER_VERSION_REVISION 0) endif(GIT_REV_LIST_COUNT) - else () - set(VIEWER_VERSION_REVISION 0) - endif () - message("Building '${VIEWER_CHANNEL}' Version ${VIEWER_SHORT_VERSION}.${VIEWER_VERSION_REVISION}") - else ( EXISTS ${VIEWER_VERSION_BASE_FILE} ) - message(SEND_ERROR "Cannot get viewer version from '${VIEWER_VERSION_BASE_FILE}'") - endif ( EXISTS ${VIEWER_VERSION_BASE_FILE} ) + else() + set(VIEWER_VERSION_REVISION 0) + endif() + message("Building '${VIEWER_CHANNEL}' Version ${VIEWER_SHORT_VERSION}.${VIEWER_VERSION_REVISION} from commit '${VIEWER_COMMIT_SHORT_SHA}'") + else(EXISTS ${VIEWER_VERSION_BASE_FILE}) + message(SEND_ERROR "Cannot get viewer version from '${VIEWER_VERSION_BASE_FILE}'") + endif(EXISTS ${VIEWER_VERSION_BASE_FILE}) - if ("${VIEWER_VERSION_REVISION}" STREQUAL "") - message(STATUS "Ultimate fallback, revision was blank or not set: will use 0") - set(VIEWER_VERSION_REVISION 0) - endif ("${VIEWER_VERSION_REVISION}" STREQUAL "") + if("${VIEWER_VERSION_REVISION}" STREQUAL "") + message(STATUS "Ultimate fallback, revision was blank or not set: will use 0") + set(VIEWER_VERSION_REVISION 0) + endif("${VIEWER_VERSION_REVISION}" STREQUAL "") set(VIEWER_CHANNEL_VERSION_DEFINES "LL_VIEWER_CHANNEL=${VIEWER_CHANNEL}" - "LL_VIEWER_VERSION_MAJOR=${VIEWER_VERSION_MAJOR}" + "LL_VIEWER_CHANNEL_CODENAME=${VIEWER_CHANNEL_CODENAME_INTERNAL}" + "LL_VIEWER_COMMIT_SHA=${VIEWER_COMMIT_LONG_SHA}" + "LL_VIEWER_COMMIT_SHORT_SHA=${VIEWER_COMMIT_SHORT_SHA}" + "LL_VIEWER_VERSION_MAJOR=${VIEWER_VERSION_MAJOR}" "LL_VIEWER_VERSION_MINOR=${VIEWER_VERSION_MINOR}" - "LL_VIEWER_VERSION_PATCH=${VIEWER_VERSION_PATCH}" - "LL_VIEWER_VERSION_BUILD=${VIEWER_VERSION_REVISION}" - "LLBUILD_CONFIG=\"${CMAKE_BUILD_TYPE}\"" - ) -endif (NOT DEFINED VIEWER_SHORT_VERSION) - -if (NOT DEFINED VIEWER_COMMIT_LONG_SHA) - if(Git_FOUND) - execute_process(COMMAND ${GIT_EXECUTABLE} rev-parse HEAD - OUTPUT_VARIABLE GIT_COMMIT_SHA - WORKING_DIRECTORY ${CMAKE_SOURCE_DIR} - OUTPUT_STRIP_TRAILING_WHITESPACE - ) - - if(GIT_COMMIT_SHA) - set(VIEWER_COMMIT_LONG_SHA ${GIT_COMMIT_SHA}) - else() - set(VIEWER_COMMIT_LONG_SHA 0) - endif() - else() - set(VIEWER_COMMIT_LONG_SHA 0) - endif() -endif (NOT DEFINED VIEWER_COMMIT_LONG_SHA) - -if (NOT DEFINED VIEWER_COMMIT_SHORT_SHA) - if(Git_FOUND) - execute_process(COMMAND ${GIT_EXECUTABLE} rev-parse --short HEAD - OUTPUT_VARIABLE GIT_COMMIT_SHORT_SHA - WORKING_DIRECTORY ${CMAKE_SOURCE_DIR} - OUTPUT_STRIP_TRAILING_WHITESPACE - ) - - if(GIT_COMMIT_SHORT_SHA) - set(VIEWER_COMMIT_SHORT_SHA ${GIT_COMMIT_SHORT_SHA}) - else() - set(VIEWER_COMMIT_SHORT_SHA 0) - endif() - else() - set(VIEWER_COMMIT_SHORT_SHA 0) - endif() -endif (NOT DEFINED VIEWER_COMMIT_SHORT_SHA) + "LL_VIEWER_VERSION_PATCH=${VIEWER_VERSION_PATCH}" + "LL_VIEWER_VERSION_BUILD=${VIEWER_VERSION_REVISION}" + "LLBUILD_CONFIG=\"${CMAKE_BUILD_TYPE}\"") +endif(NOT DEFINED VIEWER_SHORT_VERSION) diff --git a/indra/newview/llversioninfo.cpp b/indra/newview/llversioninfo.cpp index 4720a989b0d4ddb741a7be344644a9b9673359aa..ee49c4bbdf11202536ebaa98b30e5c9164d18a0f 100644 --- a/indra/newview/llversioninfo.cpp +++ b/indra/newview/llversioninfo.cpp @@ -53,6 +53,9 @@ LLVersionInfo::LLVersionInfo(): // need to turn it into a quoted string. LL_TO_STRING() does that. mWorkingChannelName(LL_TO_STRING(LL_VIEWER_CHANNEL)), build_configuration(LLBUILD_CONFIG), // set in indra/cmake/BuildVersion.cmake + commit_sha(LL_TO_STRING(LL_VIEWER_COMMIT_SHA)), + commit_sha_short(LL_TO_STRING(LL_VIEWER_COMMIT_SHORT_SHA)), + codename(LL_TO_STRING(LL_VIEWER_CHANNEL_CODENAME)), // instantiate an LLEventMailDrop with canonical name to listen for news // from SLVersionChecker mPump{new LLEventMailDrop("relnotes")}, @@ -96,17 +99,17 @@ S32 LLVersionInfo::getBuild() return LL_VIEWER_VERSION_BUILD; } -std::string LLVersionInfo::getVersion() +const std::string& LLVersionInfo::getVersion() { return version; } -std::string LLVersionInfo::getShortVersion() +const std::string& LLVersionInfo::getShortVersion() { return short_version; } -std::string LLVersionInfo::getChannelAndVersion() +const std::string& LLVersionInfo::getChannelAndVersion() { if (mVersionChannel.empty()) { @@ -117,7 +120,7 @@ std::string LLVersionInfo::getChannelAndVersion() return mVersionChannel; } -std::string LLVersionInfo::getChannel() +const std::string& LLVersionInfo::getChannel() { return mWorkingChannelName; } @@ -132,7 +135,7 @@ LLVersionInfo::ViewerMaturity LLVersionInfo::getViewerMaturity() { ViewerMaturity maturity; - std::string channel = getChannel(); + const std::string& channel = mWorkingChannelName; static const boost::regex is_test_channel("\\bTest\\b"); static const boost::regex is_beta_channel("\\bBeta\\b"); @@ -165,8 +168,22 @@ LLVersionInfo::ViewerMaturity LLVersionInfo::getViewerMaturity() return maturity; } +const std::string& LLVersionInfo::getCodename() +{ + return codename; +} + +const std::string& LLVersionInfo::getCommitSHA() +{ + return commit_sha; +} + +const std::string& LLVersionInfo::getShortCommitSHA() +{ + return commit_sha_short; +} -std::string LLVersionInfo::getBuildConfig() +const std::string& LLVersionInfo::getBuildConfig() { return build_configuration; } diff --git a/indra/newview/llversioninfo.h b/indra/newview/llversioninfo.h index b543ba7d146d5d220f68a6666f80541d5ccf0193..f4a2faefe681f8c73439883c93b044eda66f42f4 100644 --- a/indra/newview/llversioninfo.h +++ b/indra/newview/llversioninfo.h @@ -76,6 +76,15 @@ class LLVersionInfo final : public LLSingleton<LLVersionInfo> /// return the channel name, e.g. "Second Life" std::string getChannel(); + /// return the release codename e.g. "FeralFox" + std::string getCodename(); + + /// return the full commit sha + std::string getCommitSHA(); + + /// return the short commit sha; + std::string getShortCommitSHA(); + /// return the CMake build type std::string getBuildConfig(); @@ -110,6 +119,11 @@ class LLVersionInfo final : public LLSingleton<LLVersionInfo> std::string mVersionChannel; std::string build_configuration; std::string mReleaseNotes; + // Storage for the commit sha. + std::string commit_sha; + std::string commit_sha_short; + // Storage for the build codename. + std::string codename; // Store unique_ptrs to the next couple things so we don't have to explain // to every consumer of this header file all the details of each. // mPump is the LLEventMailDrop on which we listen for SLVersionChecker to