Skip to content

Instantly share code, notes, and snippets.

@mheistermann
Created October 27, 2016 22:21
Show Gist options
  • Save mheistermann/1849730225bf2e893e546f515cb7be6b to your computer and use it in GitHub Desktop.
Save mheistermann/1849730225bf2e893e546f515cb7be6b to your computer and use it in GitHub Desktop.
# http://stackoverflow.com/questions/3780667/use-cmake-to-get-build-time-svn-revision
find_package(Git)
if(GIT_FOUND)
execute_process(COMMAND ${GIT_EXECUTABLE} describe --tags --dirty --always RESULT_VARIABLE res_var OUTPUT_VARIABLE GIT_COM_ID )
if( NOT ${res_var} EQUAL 0 )
set( GIT_COMMIT_ID "git commit id unknown")
message( WARNING "Git failed (not a repo, or no tags). Build will not contain git revision info." )
endif()
string( REPLACE "\n" "" GIT_COMMIT_ID ${GIT_COM_ID} )
else()
set( GIT_COMMIT_ID "unknown (git not found!)")
message( WARNING "Git not found. Build will not contain git revision info." )
endif()
SET(BUILDINFO_FILENAME "buildinfo.hh")
# TODO: windows suppport
execute_process(COMMAND date RESULT_VARIABLE res_var OUTPUT_VARIABLE BUILDINFO_DATE OUTPUT_STRIP_TRAILING_WHITESPACE)
execute_process(COMMAND hostname -f RESULT_VARIABLE res_var OUTPUT_VARIABLE BUILDINFO_HOSTNAME OUTPUT_STRIP_TRAILING_WHITESPACE)
execute_process(COMMAND whoami RESULT_VARIABLE res_var OUTPUT_VARIABLE BUILDINFO_USERNAME OUTPUT_STRIP_TRAILING_WHITESPACE)
set( vstring "// ${BUILDINFO_FILENAME} - written by cmake. changes will be lost!\n"
"#ifndef FEATUREGRAPH_BUILDINFO_HH\n"
"#define FEATUREGRAPH_BUILDINFO_HH\n"
"\n"
"struct BuildInfo {\n"
" static const char * version_string = \"${GIT_COMMIT_ID}\"\;\n"
" static const char * date = \"${BUILDINFO_DATE}\"\;\n"
" static const char * hostname = \"${BUILDINFO_HOSTNAME}\"\;\n"
" static const char * username = \"${BUILDINFO_USERNAME}\"\;\n"
" static const char * type = \"${CMAKE_BUILD_TYPE}\"\;\n"
"};\n"
"#endif // FEATUREGRAPH_BUILDINFO_HH\n"
)
file(WRITE buildinfo.hh.txt ${vstring} )
# copy the file to the final header only if the version changes
# reduces needless rebuilds
execute_process(COMMAND ${CMAKE_COMMAND} -E copy_if_different
buildinfo.hh.txt ${CMAKE_CURRENT_BINARY_DIR}/buildinfo.hh)
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment