gnome: print client version and git ref in log

Refs #75395

Change-Id: I8b53f19f4c3015a7e2497f6904bd1c4ce76d145f
diff --git a/CMakeLists.txt b/CMakeLists.txt
index a876fa6..ec86520 100644
--- a/CMakeLists.txt
+++ b/CMakeLists.txt
@@ -142,6 +142,24 @@
 
 ENDIF()
 
+# get git version on every build
+SET(GIT_REVISION_INPUT_FILE ${PROJECT_SOURCE_DIR}/src/revision.h.in)
+SET(GIT_REVISION_OUTPUT_FILE ${PROJECT_BINARY_DIR}/revision.h)
+
+ADD_CUSTOM_TARGET(
+   git_revision ALL
+   COMMAND ${CMAKE_COMMAND}
+      -DGIT_REVISION_INPUT_FILE=${GIT_REVISION_INPUT_FILE}
+      -DGIT_REVISION_OUTPUT_FILE=${GIT_REVISION_OUTPUT_FILE}
+      -P ${CMAKE_SOURCE_DIR}/cmake/GitRevision.cmake
+   COMMENT "generating ${GIT_REVISION_OUTPUT_FILE}"
+)
+
+ADD_CUSTOM_COMMAND(
+   OUTPUT ${GIT_REVISION_OUTPUT_FILE}
+   DEPENDS git_revision
+)
+
 # source files to compile
 SET( SRC_FILES
    src/main.cpp
@@ -210,6 +228,7 @@
    src/video/videowindow.cpp
    src/utils/files.h
    src/utils/files.cpp
+   ${GIT_REVISION_OUTPUT_FILE}
 )
 
 # compile glib resource files to c code
diff --git a/cmake/GitRevision.cmake b/cmake/GitRevision.cmake
new file mode 100644
index 0000000..fe0474b
--- /dev/null
+++ b/cmake/GitRevision.cmake
@@ -0,0 +1,51 @@
+#  Copyright (C) 2015 Savoir-faire Linux Inc.
+#  Author: Stepan Salenikovich <stepan.salenikovich@savoirfairelinux.com>
+#
+#  This program is free software; you can redistribute it and/or modify
+#  it under the terms of the GNU General Public License as published by
+#  the Free Software Foundation; either version 3 of the License, or
+#  (at your option) any later version.
+#
+#  This program is distributed in the hope that it will be useful,
+#  but WITHOUT ANY WARRANTY; without even the implied warranty of
+#  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+#  GNU General Public License for more details.
+#
+#  You should have received a copy of the GNU General Public License
+#  along with this program; if not, write to the Free Software
+#  Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301 USA.
+#
+#  Additional permission under GNU GPL version 3 section 7:
+#
+#  If you modify this program, or any covered work, by linking or
+#  combining it with the OpenSSL project's OpenSSL library (or a
+#  modified version of that library), containing parts covered by the
+#  terms of the OpenSSL or SSLeay licenses, Savoir-faire Linux Inc.
+#  grants you additional permission to convey the resulting work.
+#  Corresponding Source for a non-source form of such a combination
+#  shall include the source code for the parts of OpenSSL used as well
+#  as that of the covered work.
+#
+
+FIND_PACKAGE(Git)
+
+IF(GIT_FOUND)
+   EXECUTE_PROCESS(
+      COMMAND ${GIT_EXECUTABLE} rev-parse --verify HEAD
+      OUTPUT_VARIABLE RING_CLIENT_REVISION
+      OUTPUT_STRIP_TRAILING_WHITESPACE
+   )
+ENDIF()
+
+IF( "${RING_CLIENT_REVISION}" STREQUAL "")
+   SET(RING_CLIENT_REVISION "unknown")
+ENDIF()
+
+MESSAGE( STATUS "GIT_REVISION_INPUT_FILE: " ${GIT_REVISION_INPUT_FILE} )
+MESSAGE( STATUS "GIT_REVISION_OUTPUT_FILE: " ${GIT_REVISION_OUTPUT_FILE} )
+
+# generate revision.h file
+CONFIGURE_FILE (
+   ${GIT_REVISION_INPUT_FILE}
+   ${GIT_REVISION_OUTPUT_FILE}
+)
diff --git a/src/revision.h.in b/src/revision.h.in
new file mode 100644
index 0000000..071578e
--- /dev/null
+++ b/src/revision.h.in
@@ -0,0 +1,3 @@
+/* cmake will generate revision.h with a define containing the git revision (if found) */
+
+#define RING_CLIENT_REVISION "@RING_CLIENT_REVISION@"
diff --git a/src/ring_client.cpp b/src/ring_client.cpp
index 1ee4711..6b28752 100644
--- a/src/ring_client.cpp
+++ b/src/ring_client.cpp
@@ -54,6 +54,7 @@
 #include "ringnotify.h"
 #include "config.h"
 #include "utils/files.h"
+#include "revision.h"
 
 struct _RingClientClass
 {
@@ -188,6 +189,9 @@
     RingClient *client = RING_CLIENT(app);
     RingClientPrivate *priv = RING_CLIENT_GET_PRIVATE(client);
 
+    g_message("Ring GNOME client version: %d.%d.%d", VERSION_MAJOR, VERSION_MINOR, VERSION_PATCH);
+    g_message("git ref: %s", RING_CLIENT_REVISION);
+
     /* make sure that the system corresponds to the autostart setting */
     autostart_symlink(g_settings_get_boolean(priv->settings, "start-on-login"));
     g_signal_connect(priv->settings, "changed::start-on-login", G_CALLBACK(autostart_toggled), NULL);