Skip to content

Commit 2f2d8c6

Browse files
committedMar 2, 2017
add mv_setup.h and git versioning
1 parent 04d11c5 commit 2f2d8c6

5 files changed

+191
-2
lines changed
 

‎CMakeLists.txt

+10-2
Original file line numberDiff line numberDiff line change
@@ -8,13 +8,21 @@ set(SRCDir "${CMAKE_SOURCE_DIR}/code")
88
set(QVMDir "${CMAKE_BINARY_DIR}/out/qvm")
99

1010
# Custom CMake Modules
11-
#list(INSERT CMAKE_MODULE_PATH 0 "${CMAKE_SOURCE_DIR}/tools")
11+
list(INSERT CMAKE_MODULE_PATH 0 "${CMAKE_SOURCE_DIR}/cmake")
1212

1313
# Project name & version
1414
set(CMAKE_CONFIGURATION_TYPES Debug Release CACHE TYPE INTERNAL FORCE)
1515
set(ProjectName "JK2MV SDK" CACHE STRING "Project Name")
16-
project(${ProjectName})
1716
set(ProjectURL "https://jk2mv.org")
17+
project(${ProjectName})
18+
19+
include(GetGitRevisionDescription)
20+
git_describe(MVSDK_VERSION --tags)
21+
if(NOT MVSDK_VERSION)
22+
set(MVSDK_VERSION "unknown")
23+
endif()
24+
25+
message(STATUS "${ProjectName} Version: ${MVSDK_VERSION}")
1826

1927
# Languages
2028
enable_language(C)

‎cmake/GetGitRevisionDescription.cmake

+130
Original file line numberDiff line numberDiff line change
@@ -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()
+41
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,41 @@
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+
else()
27+
configure_file("@GIT_DIR@/packed-refs" "@GIT_DATA@/packed-refs" COPYONLY)
28+
file(READ "@GIT_DATA@/packed-refs" PACKED_REFS)
29+
if(${PACKED_REFS} MATCHES "([0-9a-z]*) ${HEAD_REF}")
30+
set(HEAD_HASH "${CMAKE_MATCH_1}")
31+
endif()
32+
endif()
33+
else()
34+
# detached HEAD
35+
configure_file("@GIT_DIR@/HEAD" "@GIT_DATA@/head-ref" COPYONLY)
36+
endif()
37+
38+
if(NOT HEAD_HASH)
39+
file(READ "@GIT_DATA@/head-ref" HEAD_HASH LIMIT 1024)
40+
string(STRIP "${HEAD_HASH}" HEAD_HASH)
41+
endif()

‎code/CMakeLists.txt

+4
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,10 @@ if(NOT InMV)
33
message(FATAL_ERROR "Use the top-level cmake script!")
44
endif(NOT InMV)
55

6+
# mv_setup.h preparation
7+
set(MVGLOBALIncludeDirs ${MVGLOBALIncludeDirs} ${CMAKE_BINARY_DIR})
8+
configure_file("mv_setup.h.in" "${CMAKE_BINARY_DIR}/mv_setup.h" @ONLY)
9+
610
add_subdirectory("${SRCDir}/game")
711
add_subdirectory("${SRCDir}/cgame")
812
add_subdirectory("${SRCDir}/ui")

‎code/mv_setup.h.in

+6
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,6 @@
1+
#ifndef MV_SETUP_H
2+
#define MV_SETUP_H
3+
4+
#define MVSDK_VERSION "@MVSDK_VERSION@"
5+
6+
#endif /* MV_SETUP_H */

0 commit comments

Comments
 (0)
Please sign in to comment.