@@ -39,52 +39,47 @@ if(${enable_cbmc_tests})
3939 enable_testing ()
4040endif ()
4141
42- file (STRINGS src/config.inc config_inc_v REGEX "CBMC_VERSION *= *[0-9\. ]+" )
43- string (REGEX REPLACE "^CBMC_VERSION *= *" "" CBMC_RELEASE ${config_inc_v} )
44- message (STATUS "CBMC release ${CBMC_RELEASE} " )
45-
42+ # based on https://cmake.org/pipermail/cmake/2010-July/038015.html
4643find_package (Git)
44+ if (GIT_FOUND)
45+ file (WRITE ${CMAKE_BINARY_DIR} /version .cmake
46+ "
47+ file(STRINGS \$ {CBMC_SOURCE_DIR}/config.inc
48+ config_inc_v REGEX \" CBMC_VERSION *= *[0-9\. ]+\" )
49+ string(REGEX REPLACE \" ^CBMC_VERSION *= *\" \"\" CBMC_RELEASE \$ {config_inc_v})
50+ execute_process(
51+ COMMAND \" ${GIT_EXECUTABLE} \" \" describe\" \" --tags\" \" --always\" \" --dirty\"
52+ OUTPUT_VARIABLE GIT_INFO
53+ OUTPUT_STRIP_TRAILING_WHITESPACE
54+ )
55+ configure_file(\$ {CUR}/version.h.in version.h)
56+ "
57+ )
58+ else ()
59+ file (WRITE ${CMAKE_BINARY_DIR} /version .cmake
60+ "
61+ file(STRINGS \$ {CBMC_SOURCE_DIR}/config.inc
62+ config_inc_v REGEX \" CBMC_VERSION *= *[0-9\. ]+\" )
63+ string(REGEX REPLACE \" ^CBMC_VERSION *= *\" \"\" CBMC_RELEASE \$ {config_inc_v})
64+ set(GIT_INFO \" n/a\" )
65+ configure_file(\$ {CUR}/version.h.in version.h)
66+ "
67+ )
68+ endif ()
4769
48- macro (git_revision target files_var)
49- if (GIT_FOUND)
50- add_custom_command (
51- OUTPUT .release_info
52- COMMAND ${CMAKE_COMMAND} -E echo_append "#define __CBMC_VERSION " > .release_info
53- COMMAND "${GIT_EXECUTABLE} " "describe" "--tags" "--always" "--long" >> .release_info
54- COMMAND ${CMAKE_COMMAND} -E echo "#define __CBMC_VERSION_str(v) \" ${CBMC_RELEASE} (\" # v \" )\" " >> .release_info
55- COMMAND ${CMAKE_COMMAND} -E echo "#define __CBMC_VERSION_xstr(v) __CBMC_VERSION_str(v)" >> .release_info
56- COMMAND ${CMAKE_COMMAND} -E echo "#define CBMC_VERSION __CBMC_VERSION_xstr(__CBMC_VERSION)" >> .release_info
57- VERBATIM
58- )
59- add_custom_command (
60- TARGET ${target}
61- POST_BUILD
62- COMMAND ${CMAKE_COMMAND} -E remove -f .release_info
63- )
64- else ()
65- add_custom_command (
66- OUTPUT .release_info
67- COMMAND ${CMAKE_COMMAND} -E echo "#define CBMC_VERSION \" ${CBMC_RELEASE} (n/a)\" " >> .release_info
68- VERBATIM
69- )
70- endif ()
71-
72- if ("${CMAKE_CXX_COMPILER_ID} " STREQUAL "Clang" OR
73- "${CMAKE_CXX_COMPILER_ID} " STREQUAL "AppleClang" OR
74- "${CMAKE_CXX_COMPILER_ID} " STREQUAL "GNU"
70+ macro (git_revision target )
71+ file (WRITE ${CMAKE_CURRENT_BINARY_DIR} /version .h.in
72+ "\# define CBMC_VERSION \" @CBMC_RELEASE@ (@GIT_INFO@)\"\n " )
73+ add_custom_target (
74+ ${target} -version .h
75+ COMMAND ${CMAKE_COMMAND}
76+ -D CBMC_SOURCE_DIR=${CBMC_SOURCE_DIR}
77+ -D CUR=${CMAKE_CURRENT_BINARY_DIR}
78+ -P ${CMAKE_BINARY_DIR} /version .cmake
7579 )
76- set_source_files_properties (
77- ${${files_var} }
78- PROPERTIES
79- OBJECT_DEPENDS ${CMAKE_CURRENT_BINARY_DIR} /.release_info
80- COMPILE_FLAGS "-include .release_info" )
81- elseif ("${CMAKE_CXX_COMPILER_ID} " STREQUAL "MSVC" )
82- set_source_files_properties (
83- ${${files_var} }
84- PROPERTIES
85- COMPILE_FLAGS "/DCBMC_VERSION=\" ${CBMC_RELEASE} (n/a)\" " )
86- endif ()
80+ add_dependencies (${target} ${target} -version .h)
8781endmacro ()
82+ include_directories (${CMAKE_CURRENT_BINARY_DIR} )
8883
8984add_subdirectory (src)
9085add_subdirectory (regression)
0 commit comments