@@ -17,6 +17,7 @@ set(CMAKE_LIBRARY_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/lib)
1717set (CMAKE_RUNTIME_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR} /bin)
1818
1919if ("${CMAKE_CXX_COMPILER_ID} " STREQUAL "Clang" OR
20+ "${CMAKE_CXX_COMPILER_ID} " STREQUAL "AppleClang" OR
2021 "${CMAKE_CXX_COMPILER_ID} " STREQUAL "GNU"
2122)
2223 # Ensure NDEBUG is not set for release builds
@@ -38,51 +39,47 @@ if(${enable_cbmc_tests})
3839 enable_testing ()
3940endif ()
4041
41- file (STRINGS src/config.inc config_inc_v REGEX "CBMC_VERSION *= *[0-9\. ]+" )
42- string (REGEX REPLACE "^CBMC_VERSION *= *" "" CBMC_RELEASE ${config_inc_v} )
43- message (STATUS "CBMC release ${CBMC_RELEASE} " )
44-
42+ # based on https://cmake.org/pipermail/cmake/2010-July/038015.html
4543find_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 ()
4669
47- macro (git_revision target files_var)
48- if (GIT_FOUND)
49- add_custom_command (
50- OUTPUT .release_info
51- COMMAND ${CMAKE_COMMAND} -E echo_append "#define __CBMC_VERSION " > .release_info
52- COMMAND "${GIT_EXECUTABLE} " "describe" "--tags" "--always" "--long" >> .release_info
53- COMMAND ${CMAKE_COMMAND} -E echo "#define __CBMC_VERSION_str(v) \" ${CBMC_RELEASE} (\" # v \" )\" " >> .release_info
54- COMMAND ${CMAKE_COMMAND} -E echo "#define __CBMC_VERSION_xstr(v) __CBMC_VERSION_str(v)" >> .release_info
55- COMMAND ${CMAKE_COMMAND} -E echo "#define CBMC_VERSION __CBMC_VERSION_xstr(__CBMC_VERSION)" >> .release_info
56- VERBATIM
57- )
58- add_custom_command (
59- TARGET ${target}
60- POST_BUILD
61- COMMAND ${CMAKE_COMMAND} -E remove -f .release_info
62- )
63- else ()
64- add_custom_command (
65- OUTPUT .release_info
66- COMMAND ${CMAKE_COMMAND} -E echo "#define CBMC_VERSION \" ${CBMC_RELEASE} (n/a)\" " >> .release_info
67- VERBATIM
68- )
69- endif ()
70-
71- if ("${CMAKE_CXX_COMPILER_ID} " STREQUAL "Clang" OR
72- "${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
7379 )
74- set_source_files_properties (
75- ${${files_var} }
76- PROPERTIES
77- OBJECT_DEPENDS ${CMAKE_CURRENT_BINARY_DIR} /.release_info
78- COMPILE_FLAGS "-include .release_info" )
79- elseif ("${CMAKE_CXX_COMPILER_ID} " STREQUAL "MSVC" )
80- set_source_files_properties (
81- ${${files_var} }
82- PROPERTIES
83- COMPILE_FLAGS "/DCBMC_VERSION=\" ${CBMC_RELEASE} (n/a)\" " )
84- endif ()
80+ add_dependencies (${target} ${target} -version .h)
8581endmacro ()
82+ include_directories (${CMAKE_CURRENT_BINARY_DIR} )
8683
8784add_subdirectory (src)
8885add_subdirectory (regression)
0 commit comments