From a50f6505f4989b1d96449ba7cd498f8bf2880427 Mon Sep 17 00:00:00 2001 From: bergmann Date: Thu, 11 Jul 2019 00:22:06 +0200 Subject: [PATCH] * Improved FindLocalModele and Git Helper --- find_local_module.cmake | 21 +++++++------ git_helper.cmake | 66 +++++++++++++++++++++++++++++++++++++++++ 2 files changed, 78 insertions(+), 9 deletions(-) create mode 100644 git_helper.cmake diff --git a/find_local_module.cmake b/find_local_module.cmake index 9559f64..5e66064 100644 --- a/find_local_module.cmake +++ b/find_local_module.cmake @@ -1,10 +1,13 @@ -Function ( FindLocalModule MODULE_NAME MODULE_PATH ) - - Get_Property ( IS_INCLUDED GLOBAL PROPERTY __find_local_module_${MODULE_NAME} ) - If ( NOT IS_INCLUDED ) - Add_Subdirectory ( ${MODULE_PATH}/ - ${CMAKE_BINARY_DIR}/subprojects/${MODULE_NAME}/ ) - Set_Property ( GLOBAL PROPERTY __find_local_module_${MODULE_NAME} TRUE ) +Include ( FindPackageHandleStandardArgs ) +Macro ( FindLocalModule MODULE_NAME MODULE_PATH ) + If ( EXISTS ${MODULE_PATH} ) + Get_Property ( IS_INCLUDED GLOBAL PROPERTY __find_local_module_${MODULE_NAME} ) + If ( NOT IS_INCLUDED ) + Add_Subdirectory ( ${MODULE_PATH}/ + ${CMAKE_BINARY_DIR}/subprojects/${MODULE_NAME}/ ) + Set_Property ( GLOBAL PROPERTY __find_local_module_${MODULE_NAME} TRUE ) + EndIf ( ) + Find_Package_Handle_Standard_Args ( ${MODULE_NAME} + DEFAULT_MSG ) EndIf ( ) - -EndFunction ( ) +EndMacro ( ) diff --git a/git_helper.cmake b/git_helper.cmake new file mode 100644 index 0000000..ebee675 --- /dev/null +++ b/git_helper.cmake @@ -0,0 +1,66 @@ +Function ( GitGetVersion GIT_ROOT OUT_MAJOR OUT_MINOR OUT_PATCH OUT_BUILD OUT_HASH ) + + If ( NOT EXISTS "${GIT_ROOT}/.git" ) + Return ( ) + EndIf ( ) + + Message ( "" ) + + # Execute process to get git revisions + Execute_Process ( COMMAND + bash -c "git -C ${GIT_ROOT} show-ref --tags | egrep 'refs\/tags\/v?[0-9]+\.[0-9]+(\.[0-9]+(\.[0-9]+))' | head -1" + RESULT_VARIABLE + GIT_RET + OUTPUT_VARIABLE + GIT_REV + ERROR_VARIABLE + GIT_ERR ) + If ( NOT ${GIT_RET} EQUAL 0 ) + Message ( FATAL_ERROR "Unable to get git revisions! ${GIT_RET}" ) + EndIf ( ) + If ( "${GIT_REV}" STREQUAL "" ) + Return () + EndIf () + + # Split the git revision string + String ( REPLACE " " ";" SPLIT ${GIT_REV} ) + List ( LENGTH SPLIT COUNT ) + If ( NOT ${COUNT} EQUAL 2 ) + Return ( ) + EndIf ( ) + List ( GET SPLIT 0 HASH ) + List ( GET SPLIT 1 VERSION ) + + # Split the version + String ( STRIP "${VERSION}" SPLIT ) + String ( REGEX REPLACE "refs?\/tags?\/v?" "" SPLIT ${SPLIT} ) + String ( REPLACE "." ";" SPLIT ${SPLIT} ) + List ( LENGTH SPLIT COUNT ) + If ( ${COUNT} LESS 2 ) + Message ( FATAL_ERROR "Unable to parse version string!" ) + EndIf ( ) + + # major + List ( GET SPLIT 0 TMP ) + Set ( ${OUT_MAJOR} ${TMP} PARENT_SCOPE ) + + # minor + List ( GET SPLIT 1 TMP ) + Set ( ${OUT_MINOR} ${TMP} PARENT_SCOPE ) + + # patch + If ( ${COUNT} GREATER 2 ) + List ( GET SPLIT 2 TMP ) + Set ( ${OUT_PATCH} ${TMP} PARENT_SCOPE ) + EndIf ( ) + + # build + If ( ${COUNT} GREATER 3 ) + List ( GET SPLIT 3 TMP ) + Set ( ${OUT_BUILD} ${TMP} PARENT_SCOPE ) + EndIf ( ) + + # hash + Set ( ${OUT_HASH} ${HASH} PARENT_SCOPE ) + +EndFunction ( )