Skip to content

Commit

Permalink
CMakeLists: git: show version string and source origin
Browse files Browse the repository at this point in the history
  • Loading branch information
LebedevRI committed Jul 28, 2016
1 parent 2975c47 commit b90ca4d
Show file tree
Hide file tree
Showing 2 changed files with 10 additions and 4 deletions.
12 changes: 8 additions & 4 deletions CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -143,35 +143,38 @@ file(MAKE_DIRECTORY "${CMAKE_CURRENT_BINARY_DIR}/src/") # the src/ subdirectory
# adds custom command to generate header containing version info.
# takes 1 optional parameter - version override.
function(generate_version_gen_h)
if(ARGC EQUAL 1)
if(ARGC EQUAL 2)
# if a version override was specified, use it
set(_VERSION "${ARGV0}")
set(_TYPE "${ARGV1}")
else()
# else, the tool will autodetect the version
set(_VERSION "")
set(_TYPE "git checkout")
endif()

add_custom_target(
create_version_gen ALL
COMMAND ${CMAKE_SOURCE_DIR}/tools/create_version_h.sh ${CMAKE_CURRENT_BINARY_DIR}/src/version_gen.h ${_VERSION}
DEPENDS ${CMAKE_SOURCE_DIR}/tools/create_version_h.sh
WORKING_DIRECTORY ${CMAKE_SOURCE_DIR}
COMMENT "Updating version string"
COMMENT "Updating version string (${_TYPE})"
VERBATIM # else might break when export-subst was needed but did not happen
)
endfunction(generate_version_gen_h)

if(DEFINED PROJECT_VERSION)
#project version is defined by -D on the cmake command line
# only use that value, do not update it at make time
generate_version_gen_h(${PROJECT_VERSION})
generate_version_gen_h(${PROJECT_VERSION} "version override")
else(DEFINED PROJECT_VERSION)
if(NOT SOURCE_PACKAGE) # i.e., a git checkout
# this part is setting the corresponding CMake variable which gets used for example when creating a source package
execute_process(
COMMAND ${CMAKE_SOURCE_DIR}/tools/get_git_version_string.sh OUTPUT_STRIP_TRAILING_WHITESPACE
OUTPUT_VARIABLE PROJECT_VERSION
WORKING_DIRECTORY ${CMAKE_SOURCE_DIR})
# FIXME: PROJECT_VERSION will not be updated automatically, until you rerun cmake
generate_version_gen_h()
else(NOT SOURCE_PACKAGE)
if(NOT EXISTS ${CMAKE_CURRENT_SOURCE_DIR}/src/version_gen.h)
Expand All @@ -181,14 +184,15 @@ else(DEFINED PROJECT_VERSION)
if(PROJECT_VERSION MATCHES Format)
set(PROJECT_VERSION "unknown-version")
endif(PROJECT_VERSION MATCHES Format)
generate_version_gen_h(${PROJECT_VERSION})
generate_version_gen_h(${PROJECT_VERSION} "source package")
else(NOT EXISTS ${CMAKE_CURRENT_SOURCE_DIR}/src/version_gen.h)
# no need to create version_gen.h if it's already shipped. that is for example the case with our release tarballs
execute_process(
COMMAND ${CMAKE_SOURCE_DIR}/tools/parse_version_h.sh ${CMAKE_CURRENT_SOURCE_DIR}/src/version_gen.h OUTPUT_STRIP_TRAILING_WHITESPACE
OUTPUT_VARIABLE PROJECT_VERSION
WORKING_DIRECTORY ${CMAKE_SOURCE_DIR}
)
# FIXME: (irrelevant) PROJECT_VERSION will not be updated automatically, until you rerun cmake
# but generate_version target expects it to be in build dir, so we need to copy it
add_custom_target(
create_version_gen ALL
Expand Down
2 changes: 2 additions & 0 deletions tools/create_version_h.sh
Original file line number Diff line number Diff line change
Expand Up @@ -25,3 +25,5 @@ fi
if [ $VERSION_H_NEEDS_UPDATE -eq 1 ]; then
echo "#define PACKAGE_VERSION \"${NEW_VERSION}\"" > "$H_FILE"
fi

echo "Version string: ${NEW_VERSION}"

0 comments on commit b90ca4d

Please sign in to comment.