Skip to content

Commit c5d74a9

Browse files
committed
Set the version from github
1 parent 577497d commit c5d74a9

File tree

7 files changed

+201
-4
lines changed

7 files changed

+201
-4
lines changed

CMakeLists.txt

Lines changed: 19 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -43,7 +43,25 @@ add_library(libef STATIC
4343

4444
target_link_libraries(libef ${_LIBPCAP})
4545

46-
add_executable(ef src/main.c) # todo, rename to main.c
46+
# Appends the cmake/modules path to MAKE_MODULE_PATH variable.
47+
set(CMAKE_MODULE_PATH ${CMAKE_CURRENT_SOURCE_DIR}/cmake/modules ${CMAKE_MODULE_PATH})
48+
49+
#
50+
# Make a version file containing the current version from git.
51+
#
52+
include(GetGitRevisionDescription)
53+
git_describe(VERSION --tags --dirty=-dirty)
54+
55+
#parse the version information into pieces.
56+
string(REGEX REPLACE "^v([0-9]+)\\..*" "\\1" VERSION_MAJOR "${VERSION}")
57+
string(REGEX REPLACE "^v[0-9]+\\.([0-9]+).*" "\\1" VERSION_MINOR "${VERSION}")
58+
set(VERSION_SHORT "${VERSION_MAJOR}.${VERSION_MINOR}")
59+
60+
configure_file(${CMAKE_CURRENT_SOURCE_DIR}/cmake/modules/version.cpp.in
61+
${CMAKE_CURRENT_BINARY_DIR}/version.cpp)
62+
set(version_file "${CMAKE_CURRENT_BINARY_DIR}/version.cpp")
63+
64+
add_executable(ef src/main.c ${version_file}) # todo, rename to main.c
4765
target_link_libraries(ef libef ${_LIBPCAP})
4866

4967
install(TARGETS ef DESTINATION bin)
Lines changed: 130 additions & 0 deletions
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 <[email protected]> <[email protected]>
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+
111+
${ARGN}
112+
WORKING_DIRECTORY
113+
"${CMAKE_CURRENT_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()
Lines changed: 38 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -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 <[email protected]> <[email protected]>
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()

cmake/modules/version.cpp.in

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,4 @@
1+
#include "../src/version.h"
2+
3+
const char* gGIT_VERSION = "@VERSION@";
4+
const char* gGIT_VERSION_SHORT = "@VERSION_SHORT@";

src/ef-args.c

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -78,7 +78,7 @@ void cmd_destruct(cmd_t *c) {
7878
}
7979

8080
void print_version() {
81-
po("ef version: %s\n", EF_VERSION);
81+
po("ef version: %s\n", gGIT_VERSION);
8282
}
8383

8484
void print_help() {

src/ef.h

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -5,12 +5,12 @@
55
#include <string.h>
66
#include <stdlib.h>
77

8+
#include "version.h"
9+
810
#ifdef __cplusplus
911
extern "C" {
1012
#endif
1113

12-
#define EF_VERSION "v0.1"
13-
1414
#define DIV_ROUND(a, b) (1 + ((a - 1) / b))
1515
#define BIT_TO_BYTE(x) (DIV_ROUND(x, 8))
1616

src/version.h

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,7 @@
1+
#ifndef VERSION_H
2+
#define VERSION_H
3+
4+
extern const char* gGIT_VERSION;
5+
extern const char* gGIT_VERSION_SHORT;
6+
7+
#endif //VERSION_H

0 commit comments

Comments
 (0)