@@ -17,6 +17,7 @@ set(CMAKE_LIBRARY_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/lib)
17
17
set (CMAKE_RUNTIME_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR} /bin)
18
18
19
19
if ("${CMAKE_CXX_COMPILER_ID} " STREQUAL "Clang" OR
20
+ "${CMAKE_CXX_COMPILER_ID} " STREQUAL "AppleClang" OR
20
21
"${CMAKE_CXX_COMPILER_ID} " STREQUAL "GNU"
21
22
)
22
23
# Ensure NDEBUG is not set for release builds
@@ -38,51 +39,47 @@ if(${enable_cbmc_tests})
38
39
enable_testing ()
39
40
endif ()
40
41
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
45
43
find_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 ()
46
69
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
73
79
)
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)
85
81
endmacro ()
82
+ include_directories (${CMAKE_CURRENT_BINARY_DIR} )
86
83
87
84
add_subdirectory (src)
88
85
add_subdirectory (regression)
0 commit comments