Adds commit hash to the version.
[apps/app-templates.git] / cmake / cmake.d / 02-variables.cmake
index da6753a..dc1c313 100644 (file)
@@ -55,11 +55,46 @@ math(EXPR c "(${LINUX_VERSION_CODE} & 255)")
 
 set(KERNEL_VERSION "${a}.${b}.${c}")
 
 
 set(KERNEL_VERSION "${a}.${b}.${c}")
 
+# Setup project and app-templates version variables
+execute_process(COMMAND git describe --abbrev=0
+       WORKING_DIRECTORY ${CMAKE_SOURCE_DIR}
+       OUTPUT_VARIABLE GIT_PROJECT_VERSION
+       OUTPUT_STRIP_TRAILING_WHITESPACE
+)
+execute_process(COMMAND git describe --abbrev=0
+       WORKING_DIRECTORY ${BARE_PKG_TEMPLATE_PREFIX}
+       OUTPUT_VARIABLE APP_TEMPLATES_VERSION
+       OUTPUT_STRIP_TRAILING_WHITESPACE
+)
+
+# Get the git commit hash to append to the version
+execute_process(COMMAND git rev-parse --short HEAD
+       WORKING_DIRECTORY ${CMAKE_SOURCE_DIR}
+       OUTPUT_VARIABLE COMMIT_HASH
+       OUTPUT_STRIP_TRAILING_WHITESPACE
+)
+
+# Detect unstaged or untracked changes
+execute_process(COMMAND git status --short
+       WORKING_DIRECTORY ${CMAKE_SOURCE_DIR}
+       OUTPUT_VARIABLE DIRTY_FLAG
+       OUTPUT_STRIP_TRAILING_WHITESPACE
+)
+
 # Include project configuration
 # ------------------------------
 # Include project configuration
 # ------------------------------
+if(NOT DEFINED PROJECT_VERSION)
+       set(PROJECT_VERSION ${GIT_PROJECT_VERSION})
+endif()
+
+# Release additionnals informations isn't supported so setting project
+# attributes then add the dirty flag if git repo not sync'ed
 project(${PROJECT_NAME} VERSION ${PROJECT_VERSION} LANGUAGES ${PROJECT_LANGUAGES})
 project(${PROJECT_NAME} VERSION ${PROJECT_VERSION} LANGUAGES ${PROJECT_LANGUAGES})
-set(PROJECT_LIBDIR "${CMAKE_SOURCE_DIR}/libs" CACHE PATH "Subpath to libraries")
-set(PROJECT_RESOURCES "${CMAKE_SOURCE_DIR}/data" CACHE PATH "Subpath to data")
+if(NOT ${DIRTY_FLAG})
+       set(PROJECT_VERSION "${PROJECT_VERSION}-${COMMIT_HASH}-dirty")
+else()
+       set(PROJECT_VERSION "${PROJECT_VERSION}-${COMMIT_HASH}")
+endif()
 
 set(AFB_TOKEN   ""      CACHE PATH "Default AFB_TOKEN")
 set(AFB_REMPORT "1234" CACHE PATH "Default AFB_TOKEN")
 
 set(AFB_TOKEN   ""      CACHE PATH "Default AFB_TOKEN")
 set(AFB_REMPORT "1234" CACHE PATH "Default AFB_TOKEN")
@@ -105,9 +140,9 @@ else()
 endif()
 
 # Paths to templates files
 endif()
 
 # Paths to templates files
-set(TEMPLATE_DIR "${PKG_TEMPLATE_PREFIX}/template.d" CACHE PATH "Subpath to a directory where are stored needed files to launch on remote target to debuging purposes")
+set(TEMPLATE_DIR "${BARE_PKG_TEMPLATE_PREFIX}/template.d" CACHE PATH "Subpath to a directory where are stored needed files to launch on remote target to debuging purposes")
 
 
-string(REGEX REPLACE "^(.*)/.*$" "\\1" ENTRY_POINT "${PKG_TEMPLATE_PREFIX}")
+string(REGEX REPLACE "^(.*)/.*$" "\\1" ENTRY_POINT "${BARE_PKG_TEMPLATE_PREFIX}")
 set(PROJECT_PKG_ENTRY_POINT ${ENTRY_POINT}/packaging CACHE PATH "Where package build files, like rpm.spec file or config.xml, are write.")
 
 set(WIDGET_ICON "${ENTRY_POINT}/wgt/${PROJECT_ICON}" CACHE PATH "Path to the widget icon")
 set(PROJECT_PKG_ENTRY_POINT ${ENTRY_POINT}/packaging CACHE PATH "Where package build files, like rpm.spec file or config.xml, are write.")
 
 set(WIDGET_ICON "${ENTRY_POINT}/wgt/${PROJECT_ICON}" CACHE PATH "Path to the widget icon")
@@ -150,4 +185,12 @@ set(BINDIR bin CACHE PATH "User executables")
 set(ETCDIR etc CACHE PATH "Read only system configuration data")
 set(LIBDIR lib CACHE PATH "System library directory")
 set(HTTPDIR htdocs CACHE PATH "HTML5 data directory")
 set(ETCDIR etc CACHE PATH "Read only system configuration data")
 set(LIBDIR lib CACHE PATH "System library directory")
 set(HTTPDIR htdocs CACHE PATH "HTML5 data directory")
-set(DATADIR data CACHE PATH "External data resources files")
+set(DATADIR var CACHE PATH "External data resources files")
+
+# Normally CMake uses the build tree for the RPATH when building executables
+# etc on systems that use RPATH. When the software is installed the executables
+# etc are relinked by CMake to have the install RPATH. If this variable is set
+# to true then the software is always built with the install path for the RPATH
+# and does not need to be relinked when installed.
+# Rpath could be set and controlled by target property INSTALL_RPATH
+set(CMAKE_BUILD_WITH_INSTALL_RPATH true)