Browse Source

git hash in version string

Thomas Buck 10 years ago
parent
commit
e186676da7

+ 8
- 0
CMakeLists.txt View File

@@ -66,6 +66,14 @@ set (OpenRaider_CXX_FLAGS_RELEASE "${OpenRaider_CXX_FLAGS_RELEASE} -DNDEBUG")
66 66
 
67 67
 #################################################################
68 68
 
69
+include (GetGitRevisionDescription)
70
+get_git_head_revision (GIT_REFSPEC GIT_SHA1)
71
+if (NOT ${GIT_SHA1} STREQUAL "GITDIR-NOTFOUND")
72
+    string (SUBSTRING "-${GIT_SHA1}" 0 8 OpenRaider_VERSION_RELEASE)
73
+endif (NOT ${GIT_SHA1} STREQUAL "GITDIR-NOTFOUND")
74
+
75
+#################################################################
76
+
69 77
 # Add subdirectories
70 78
 add_subdirectory (src)
71 79
 

+ 2
- 0
README.md View File

@@ -162,6 +162,8 @@ There are some included cmake scripts:
162 162
 * [FindSDL2](https://github.com/dhewm/dhewm3/blob/master/neo/sys/cmake/FindSDL2.cmake)
163 163
 * [FindSDL2TTF](https://github.com/Deraen/ohj2710/blob/master/cmake_modules/FindSDL2TTF.cmake)
164 164
 * [FindSSE](https://gitorious.org/vc/vc/source/a1d8b9fc31060d870386613cc72319546c850b87:cmake/FindSSE.cmake)
165
+* [GetGitRevisionDescription.cmake](https://github.com/rpavlik/cmake-modules/blob/master/GetGitRevisionDescription.cmake)
166
+* [GetGitRevisionDescription.cmake.in](https://github.com/rpavlik/cmake-modules/blob/master/GetGitRevisionDescription.cmake.in)
165 167
 
166 168
 See the respective files in `cmake` for their licensing.
167 169
 

+ 130
- 0
cmake/GetGitRevisionDescription.cmake View File

@@ -0,0 +1,130 @@
1
+# - Returns a version string from Git
2
+#
3
+# These functions force a re-configure on each git commit so that you can
4
+# trust the values of the variables in your build system.
5
+#
6
+#  get_git_head_revision(<refspecvar> <hashvar> [<additional arguments to git describe> ...])
7
+#
8
+# Returns the refspec and sha hash of the current head revision
9
+#
10
+#  git_describe(<var> [<additional arguments to git describe> ...])
11
+#
12
+# Returns the results of git describe on the source tree, and adjusting
13
+# the output so that it tests false if an error occurs.
14
+#
15
+#  git_get_exact_tag(<var> [<additional arguments to git describe> ...])
16
+#
17
+# Returns the results of git describe --exact-match on the source tree,
18
+# and adjusting the output so that it tests false if there was no exact
19
+# matching tag.
20
+#
21
+# Requires CMake 2.6 or newer (uses the 'function' command)
22
+#
23
+# Original Author:
24
+# 2009-2010 Ryan Pavlik <rpavlik@iastate.edu> <abiryan@ryand.net>
25
+# http://academic.cleardefinition.com
26
+# Iowa State University HCI Graduate Program/VRAC
27
+#
28
+# Copyright Iowa State University 2009-2010.
29
+# Distributed under the Boost Software License, Version 1.0.
30
+# (See accompanying file LICENSE_1_0.txt or copy at
31
+# http://www.boost.org/LICENSE_1_0.txt)
32
+
33
+if(__get_git_revision_description)
34
+	return()
35
+endif()
36
+set(__get_git_revision_description YES)
37
+
38
+# We must run the following at "include" time, not at function call time,
39
+# to find the path to this module rather than the path to a calling list file
40
+get_filename_component(_gitdescmoddir ${CMAKE_CURRENT_LIST_FILE} PATH)
41
+
42
+function(get_git_head_revision _refspecvar _hashvar)
43
+	set(GIT_PARENT_DIR "${CMAKE_CURRENT_SOURCE_DIR}")
44
+	set(GIT_DIR "${GIT_PARENT_DIR}/.git")
45
+	while(NOT EXISTS "${GIT_DIR}")	# .git dir not found, search parent directories
46
+		set(GIT_PREVIOUS_PARENT "${GIT_PARENT_DIR}")
47
+		get_filename_component(GIT_PARENT_DIR ${GIT_PARENT_DIR} PATH)
48
+		if(GIT_PARENT_DIR STREQUAL GIT_PREVIOUS_PARENT)
49
+			# We have reached the root directory, we are not in git
50
+			set(${_refspecvar} "GITDIR-NOTFOUND" PARENT_SCOPE)
51
+			set(${_hashvar} "GITDIR-NOTFOUND" PARENT_SCOPE)
52
+			return()
53
+		endif()
54
+		set(GIT_DIR "${GIT_PARENT_DIR}/.git")
55
+	endwhile()
56
+	# check if this is a submodule
57
+	if(NOT IS_DIRECTORY ${GIT_DIR})
58
+		file(READ ${GIT_DIR} submodule)
59
+		string(REGEX REPLACE "gitdir: (.*)\n$" "\\1" GIT_DIR_RELATIVE ${submodule})
60
+		get_filename_component(SUBMODULE_DIR ${GIT_DIR} PATH)
61
+		get_filename_component(GIT_DIR ${SUBMODULE_DIR}/${GIT_DIR_RELATIVE} ABSOLUTE)
62
+	endif()
63
+	set(GIT_DATA "${CMAKE_CURRENT_BINARY_DIR}/CMakeFiles/git-data")
64
+	if(NOT EXISTS "${GIT_DATA}")
65
+		file(MAKE_DIRECTORY "${GIT_DATA}")
66
+	endif()
67
+
68
+	if(NOT EXISTS "${GIT_DIR}/HEAD")
69
+		return()
70
+	endif()
71
+	set(HEAD_FILE "${GIT_DATA}/HEAD")
72
+	configure_file("${GIT_DIR}/HEAD" "${HEAD_FILE}" COPYONLY)
73
+
74
+	configure_file("${_gitdescmoddir}/GetGitRevisionDescription.cmake.in"
75
+		"${GIT_DATA}/grabRef.cmake"
76
+		@ONLY)
77
+	include("${GIT_DATA}/grabRef.cmake")
78
+
79
+	set(${_refspecvar} "${HEAD_REF}" PARENT_SCOPE)
80
+	set(${_hashvar} "${HEAD_HASH}" PARENT_SCOPE)
81
+endfunction()
82
+
83
+function(git_describe _var)
84
+	if(NOT GIT_FOUND)
85
+		find_package(Git QUIET)
86
+	endif()
87
+	get_git_head_revision(refspec hash)
88
+	if(NOT GIT_FOUND)
89
+		set(${_var} "GIT-NOTFOUND" PARENT_SCOPE)
90
+		return()
91
+	endif()
92
+	if(NOT hash)
93
+		set(${_var} "HEAD-HASH-NOTFOUND" PARENT_SCOPE)
94
+		return()
95
+	endif()
96
+
97
+	# TODO sanitize
98
+	#if((${ARGN}" MATCHES "&&") OR
99
+	#	(ARGN MATCHES "||") OR
100
+	#	(ARGN MATCHES "\\;"))
101
+	#	message("Please report the following error to the project!")
102
+	#	message(FATAL_ERROR "Looks like someone's doing something nefarious with git_describe! Passed arguments ${ARGN}")
103
+	#endif()
104
+
105
+	#message(STATUS "Arguments to execute_process: ${ARGN}")
106
+
107
+	execute_process(COMMAND
108
+		"${GIT_EXECUTABLE}"
109
+		describe
110
+		${hash}
111
+		${ARGN}
112
+		WORKING_DIRECTORY
113
+		"${CMAKE_SOURCE_DIR}"
114
+		RESULT_VARIABLE
115
+		res
116
+		OUTPUT_VARIABLE
117
+		out
118
+		ERROR_QUIET
119
+		OUTPUT_STRIP_TRAILING_WHITESPACE)
120
+	if(NOT res EQUAL 0)
121
+		set(out "${out}-${res}-NOTFOUND")
122
+	endif()
123
+
124
+	set(${_var} "${out}" PARENT_SCOPE)
125
+endfunction()
126
+
127
+function(git_get_exact_tag _var)
128
+	git_describe(out --exact-match ${ARGN})
129
+	set(${_var} "${out}" PARENT_SCOPE)
130
+endfunction()

+ 38
- 0
cmake/GetGitRevisionDescription.cmake.in View File

@@ -0,0 +1,38 @@
1
+# 
2
+# Internal file for GetGitRevisionDescription.cmake
3
+#
4
+# Requires CMake 2.6 or newer (uses the 'function' command)
5
+#
6
+# Original Author:
7
+# 2009-2010 Ryan Pavlik <rpavlik@iastate.edu> <abiryan@ryand.net>
8
+# http://academic.cleardefinition.com
9
+# Iowa State University HCI Graduate Program/VRAC
10
+#
11
+# Copyright Iowa State University 2009-2010.
12
+# Distributed under the Boost Software License, Version 1.0.
13
+# (See accompanying file LICENSE_1_0.txt or copy at
14
+# http://www.boost.org/LICENSE_1_0.txt)
15
+
16
+set(HEAD_HASH)
17
+
18
+file(READ "@HEAD_FILE@" HEAD_CONTENTS LIMIT 1024)
19
+
20
+string(STRIP "${HEAD_CONTENTS}" HEAD_CONTENTS)
21
+if(HEAD_CONTENTS MATCHES "ref")
22
+	# named branch
23
+	string(REPLACE "ref: " "" HEAD_REF "${HEAD_CONTENTS}")
24
+	if(EXISTS "@GIT_DIR@/${HEAD_REF}")
25
+		configure_file("@GIT_DIR@/${HEAD_REF}" "@GIT_DATA@/head-ref" COPYONLY)
26
+	elseif(EXISTS "@GIT_DIR@/logs/${HEAD_REF}")
27
+		configure_file("@GIT_DIR@/logs/${HEAD_REF}" "@GIT_DATA@/head-ref" COPYONLY)
28
+		set(HEAD_HASH "${HEAD_REF}")
29
+	endif()
30
+else()
31
+	# detached HEAD
32
+	configure_file("@GIT_DIR@/HEAD" "@GIT_DATA@/head-ref" COPYONLY)
33
+endif()
34
+
35
+if(NOT HEAD_HASH)
36
+	file(READ "@GIT_DATA@/head-ref" HEAD_HASH LIMIT 1024)
37
+	string(STRIP "${HEAD_HASH}" HEAD_HASH)
38
+endif()

+ 2
- 2
include/config.h.in View File

@@ -8,8 +8,8 @@
8 8
 #ifndef _CONFIG_H_
9 9
 #define _CONFIG_H_
10 10
 
11
-#define VERSION "OpenRaider-@OpenRaider_VERSION_MAJOR@.@OpenRaider_VERSION_MINOR@.@OpenRaider_VERSION_MICRO@@OpenRaider_VERSION_RELEASE@ (@CMAKE_BUILD_TYPE@)"
12
-#define BUILD_HOST "@OpenRaider_BUILD_HOST@ @OpenRaider_HOSTNAME@"
11
+extern const char *VERSION;
12
+extern const char *BUILD_HOST;
13 13
 
14 14
 #cmakedefine USING_AL
15 15
 #cmakedefine USING_PNG

+ 7
- 0
src/CMakeLists.txt View File

@@ -132,6 +132,13 @@ configure_file (
132 132
     "${PROJECT_BINARY_DIR}/config.h"
133 133
 )
134 134
 
135
+# Configuration Source file
136
+configure_file (
137
+    "${PROJECT_SOURCE_DIR}/src/config.cpp.in"   
138
+    "${PROJECT_BINARY_DIR}/config.cpp"
139
+)
140
+set (SRCS ${SRCS} "${PROJECT_BINARY_DIR}/config.cpp")
141
+
135 142
 #################################################################
136 143
 
137 144
 # Apple specific bundling

+ 13
- 0
src/config.cpp.in View File

@@ -0,0 +1,13 @@
1
+/*!
2
+ * \file src/config.cpp.in
3
+ * \brief Global config file template
4
+ *
5
+ * \author xythobuz
6
+ */
7
+
8
+#include "global.h"
9
+
10
+const char *VERSION = "OpenRaider-@OpenRaider_VERSION_MAJOR@.@OpenRaider_VERSION_MINOR@.@OpenRaider_VERSION_MICRO@@OpenRaider_VERSION_RELEASE@ (@CMAKE_BUILD_TYPE@)";
11
+
12
+const char *BUILD_HOST = "@OpenRaider_BUILD_HOST@ @OpenRaider_HOSTNAME@";
13
+

Loading…
Cancel
Save