-
Notifications
You must be signed in to change notification settings - Fork 1
Expand file tree
/
Copy pathversion.cmake
More file actions
94 lines (82 loc) · 3.35 KB
/
version.cmake
File metadata and controls
94 lines (82 loc) · 3.35 KB
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
84
85
86
87
88
89
90
91
92
93
94
message(STATUS "Create version")
if(NOT NAMESPACE)
message(FATAL_ERROR "Namespace not set")
endif()
message(STATUS "Namespace ${NAMESPACE}")
execute_process(COMMAND git -C ${CMAKE_CURRENT_LIST_DIR} log --pretty=format:'%h' -n 1 OUTPUT_VARIABLE kGitRev ERROR_QUIET)
execute_process(COMMAND git -C ${CMAKE_CURRENT_LIST_DIR} log --pretty=format:'%ai' -n 1 OUTPUT_VARIABLE GIT_TIME ERROR_QUIET)
# Check whether we got any revision (which isn't
# always the case, e.g. when someone downloaded a zip
# file from Github instead of a checkout)
if ("${kGitRev}" STREQUAL "")
set(kGitRev "N/A")
set(kGitDiff "")
set(kGitTag "N/A")
set(kGitBranch "N/A")
set(kGitDate "N/A")
else()
execute_process(COMMAND bash -c "git -C ${CMAKE_CURRENT_LIST_DIR} diff --quiet --exit-code || echo .x" OUTPUT_VARIABLE kGitDiff ERROR_QUIET)
execute_process(COMMAND git -C ${CMAKE_CURRENT_LIST_DIR} describe --exact-match --tags OUTPUT_VARIABLE kGitTag ERROR_QUIET)
execute_process(COMMAND git -C ${CMAKE_CURRENT_LIST_DIR} rev-parse --abbrev-ref HEAD OUTPUT_VARIABLE kGitBranch)
string(STRIP "${kGitRev}" kGitRev)
string(SUBSTRING "${kGitRev}" 1 7 kGitRev)
string(STRIP "${kGitDiff}" kGitDiff)
string(STRIP "${kGitTag}" kGitTag)
string(STRIP "${kGitBranch}" kGitBranch)
string(SUBSTRING "${GIT_TIME}" 1 10 kGitDate)
endif()
set(VERSION "#include \"${NAMESPACE}_version.h\"
const std::string pml::${NAMESPACE}::kGitRev=\"${kGitRev}${kGitDiff}\";
const std::string pml::${NAMESPACE}::kGitTag=\"${kGitTag}\";
const std::string pml::${NAMESPACE}::kGitBranch=\"${kGitBranch}\";
const std::string pml::${NAMESPACE}::kGitDate=\"${kGitDate}\";
unsigned int pml::${NAMESPACE}::kVersionMajor=${MAJOR};
unsigned int pml::${NAMESPACE}::kVersionMinor=${MINOR};
unsigned int pml::${NAMESPACE}::kVersionPatch=${PATCH};
const std::string pml::${NAMESPACE}::kVersionString=\"${MAJOR}.${MINOR}.${PATCH}-${kGitRev}${kGitDiff}\";
const std::string pml::${NAMESPACE}::kCMakeDate = \"${BUILD_DATE}\";
const std::string pml::${NAMESPACE}::kBuildTime = std::string(__DATE__)+\" \"+std::string(__TIME__);
")
set(SRC_FILE ${OUTPUT}/src/${NAMESPACE}_version.cpp)
if(EXISTS ${SRC_FILE})
file(READ ${SRC_FILE} VERSION_)
else()
set(VERSION_ "")
endif()
if (NOT "${VERSION}" STREQUAL "${VERSION_}")
message(STATUS "Write to ${SRC_FILE}")
file(WRITE ${SRC_FILE} "${VERSION}")
endif()
#now do the include file
set(INCLUDE "#ifndef __${NAMESPACE}_VERSION_H__
#define __${NAMESPACE}_VERSION_H__
#include <string>
// These variables are autogenerated and compiled
// into the library by the version.cmake script
namespace pml
{
namespace ${NAMESPACE}
{
extern const std::string kGitTag;
extern const std::string kGitRev;
extern const std::string kGitBranch;
extern const std::string kGitDate;
extern unsigned int kVersionMajor;
extern unsigned int kVersionMinor;
extern unsigned int kVersionPatch;
extern const std::string kVersionString;
extern const std::string kCMakeDate;
extern const std::string kBuildTime;
}
}
#endif")
set(INC_FILE ${OUTPUT}/include/${NAMESPACE}_version.h)
if(EXISTS ${INC_FILE})
file(READ ${INC_FILE} INCLUDE_)
else()
set(INCLUDE_ "")
endif()
if (NOT "${INCLUDE}" STREQUAL "${INCLUDE_}")
message(STATUS "Write to ${INC_FILE}")
file(WRITE ${INC_FILE} "${INCLUDE}")
endif()