From 4fd57774dd8491ffc760114b6d89fd0ab1989bbd Mon Sep 17 00:00:00 2001
From: Oz Linden <oz@lindenlab.com>
Date: Sun, 7 Feb 2016 14:58:47 -0800
Subject: [PATCH] OPEN-297 simplify build number generation

---
 doc/contributions.txt          |  1 +
 indra/cmake/BuildVersion.cmake | 46 +++++++++++++++++++---------------
 2 files changed, 27 insertions(+), 20 deletions(-)

diff --git a/doc/contributions.txt b/doc/contributions.txt
index 1608b65033e..f086ed2716e 100755
--- a/doc/contributions.txt
+++ b/doc/contributions.txt
@@ -319,6 +319,7 @@ Cinder Roxley
     OPEN-185
     OPEN-282
     OPEN-292
+    OPEN-297
     STORM-1703
     STORM-1948
     STORM-1831
diff --git a/indra/cmake/BuildVersion.cmake b/indra/cmake/BuildVersion.cmake
index 389ded1d984..195d6e705e0 100644
--- a/indra/cmake/BuildVersion.cmake
+++ b/indra/cmake/BuildVersion.cmake
@@ -15,27 +15,33 @@ if (NOT DEFINED VIEWER_SHORT_VERSION) # will be true in indra/, false in indra/n
            message("Revision (from environment): ${VIEWER_VERSION_REVISION}")
 
         else (DEFINED ENV{revision})
-           find_program(MERCURIAL hg)
-           find_program(WORDCOUNT wc)
-           find_program(SED sed)
-           if (DEFINED MERCURIAL AND DEFINED WORDCOUNT AND DEFINED SED)
-              execute_process(
-                 COMMAND ${MERCURIAL} log -r tip:0 --template '\\n'
-                 COMMAND ${WORDCOUNT} -l
-                 COMMAND ${SED} "s/ //g"
-                 OUTPUT_VARIABLE VIEWER_VERSION_REVISION
-                 OUTPUT_STRIP_TRAILING_WHITESPACE
-                 )
-              if ("${VIEWER_VERSION_REVISION}" MATCHES "^[0-9]+$")
-                 message("Revision (from hg) ${VIEWER_VERSION_REVISION}")
-              else ("${VIEWER_VERSION_REVISION}" MATCHES "^[0-9]+$")
-                 message("Revision not set (repository not found?); using 0")
-                 set(VIEWER_VERSION_REVISION 0 )
-              endif ("${VIEWER_VERSION_REVISION}" MATCHES "^[0-9]+$")
-           else (DEFINED MERCURIAL AND DEFINED WORDCOUNT AND DEFINED SED)
-              message("Revision not set: 'hg', 'wc' or 'sed' not found; using 0")
+          find_program(MERCURIAL
+                       NAMES hg
+                       PATHS [HKEY_LOCAL_MACHINE\\Software\\TortoiseHG]
+                       PATH_SUFFIXES Mercurial)
+          mark_as_advanced(MERCURIAL)
+          if (MERCURIAL)
+            execute_process(COMMAND ${MERCURIAL} identify --num --rev tip
+                            WORKING_DIRECTORY ${CMAKE_SOURCE_DIR}
+                            RESULT_VARIABLE hg_id_result
+                            ERROR_VARIABLE hg_id_error
+                            OUTPUT_VARIABLE VIEWER_VERSION_REVISION
+                            OUTPUT_STRIP_TRAILING_WHITESPACE)
+            if (NOT ${hg_id_result} EQUAL 0)
+              message(SEND_ERROR "Revision number generation failed with output:\n${hg_id_error}")
+            else (NOT ${hg_id_result} EQUAL 0)
+              string(REGEX REPLACE "[^0-9a-f]" "" VIEWER_VERSION_REVISION ${VIEWER_VERSION_REVISION})
+            endif (NOT ${hg_id_result} EQUAL 0)
+            if ("${VIEWER_VERSION_REVISION}" MATCHES "^[0-9]+$")
+              message("Revision (from hg) ${VIEWER_VERSION_REVISION}")
+            else ("${VIEWER_VERSION_REVISION}" MATCHES "^[0-9]+$")
+              message("Revision not set (repository not found?); using 0")
+              set(VIEWER_VERSION_REVISION 0 )
+            endif ("${VIEWER_VERSION_REVISION}" MATCHES "^[0-9]+$")
+           else (MERCURIAL)
+              message("Revision not set: mercurial not found; using 0")
               set(VIEWER_VERSION_REVISION 0)
-           endif (DEFINED MERCURIAL AND DEFINED WORDCOUNT AND DEFINED SED)
+           endif (MERCURIAL)
         endif (DEFINED ENV{revision})
         message("Building '${VIEWER_CHANNEL}' Version ${VIEWER_SHORT_VERSION}.${VIEWER_VERSION_REVISION}")
     else ( EXISTS ${VIEWER_VERSION_BASE_FILE} )
-- 
GitLab