1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83
|
# Version Suite
# Author: Brian Panneton
# Descrition: This small suite allows you to add support
# for versioning in your projects
# This allows you to turn on and off the auto
# update of the (project name)Version.hpp file
SET(VERSION_CONTROL_AUTOUPDATE OFF CACHE BOOL "Automaticaly Update The Version")
MARK_AS_ADVANCED(VERSION_CONTROL_AUTOUPDATE)
# We need to make sure we have the header file
INCLUDE_DIRECTORIES(${CMAKE_SOURCE_DIR}/CMake/VersionSuite)
# Default incase CalculateVerison is not called
SET(vMajor "0")
SET(vMinor "0")
SET(vPatch "0")
# This Macro allows you to set up the Version in a one liner
MACRO(VersionCreate versionName versionMajor versionMinor versionPatch export_name)
VersionMajorSet(${versionMajor})
VersionMinorSet(${versionMinor})
VersionPatchSet(${versionPatch})
# Manually generating minor version
# VersionCalculate()
VersionWrite(${versionName} ${export_name} "${ARGN}")
ENDMACRO()
# This Macro allows you to set the rewrite number
MACRO(VersionMajorSet versionMajor)
SET(vMajor ${versionMajor})
ENDMACRO()
MACRO(VersionMinorSet versionMinor)
SET(vMinor ${versionMinor})
ENDMACRO(VersionMinorSet)
MACRO(VersionPatchSet versionPatch)
SET(vPatch ${versionPatch})
ENDMACRO(VersionPatchSet)
# This Macro calculates the number of tags from your git repo
MACRO(VersionCalculate)
FIND_PACKAGE(Git)
IF(GIT_FOUND)
EXEC_PROGRAM(${GIT_EXECUTABLE} ${CMAKE_SOURCE_DIR} ARGS tag OUTPUT_VARIABLE return)
STRING(REGEX REPLACE "\n" ";" return "${return}")
SET(count 0)
FOREACH(r ${return})
MATH(EXPR count "${count} + 1")
ENDFOREACH()
SET(vMinor ${count})
ELSE()
SET(vMinor "X")
ENDIF()
ENDMACRO()
# This Macro writes your hpp/cpp files
MACRO(VersionWrite vProjectName export_name)
SET(include_list "${ARGN}")
FOREACH(il ${include_list})
SET(includes "${includes}\n\#include \"${il}\"")
ENDFOREACH()
FILE(WRITE ${CMAKE_CURRENT_BINARY_DIR}/${vProjectName}Version.hpp
"/* Current Version of ${vProjectName}
* Major is: ${vMajor}
* Minor is: ${vMinor}
* Patch is: ${vPatch}
*/
${includes}
\#include \"ProjectVersion.hpp\"
extern ${export_name} ProjectVersion ${vProjectName}Version;\n"
)
FILE(WRITE ${CMAKE_CURRENT_BINARY_DIR}/${vProjectName}Version.cpp
"/* Current Version of ${vProjectName}
* Make sure to include this file in your built sources
*/
\#include \"${vProjectName}Version.hpp\"
ProjectVersion ${vProjectName}Version = ProjectVersion(\"${vProjectName}\", \"${vMajor}\", \"${vMinor}\", \"${vPatch}\");\n"
)
ENDMACRO()
|