## Utility CMake functions. # ---------------------------------------------------------------------------- ## Convert boolean value to 0 or 1 macro (bool_to_int VAR) if (${VAR}) set (${VAR} 1) else () set (${VAR} 0) endif () endmacro () # ---------------------------------------------------------------------------- ## Extract version numbers from version string. function (version_numbers version major minor patch) if (version MATCHES "([0-9]+)(\\.[0-9]+)?(\\.[0-9]+)?(rc[1-9][0-9]*|[a-z]+)?") if (CMAKE_MATCH_1) set (_major ${CMAKE_MATCH_1}) else () set (_major 0) endif () if (CMAKE_MATCH_2) set (_minor ${CMAKE_MATCH_2}) string (REGEX REPLACE "^\\." "" _minor "${_minor}") else () set (_minor 0) endif () if (CMAKE_MATCH_3) set (_patch ${CMAKE_MATCH_3}) string (REGEX REPLACE "^\\." "" _patch "${_patch}") else () set (_patch 0) endif () else () set (_major 0) set (_minor 0) set (_patch 0) endif () set ("${major}" "${_major}" PARENT_SCOPE) set ("${minor}" "${_minor}" PARENT_SCOPE) set ("${patch}" "${_patch}" PARENT_SCOPE) endfunction () # ---------------------------------------------------------------------------- ## Configure public header files function (configure_headers out) set (tmp) foreach (src IN LISTS ARGN) if (IS_ABSOLUTE "${src}") list (APPEND tmp "${src}") elseif (EXISTS "${PROJECT_SOURCE_DIR}/src/${src}.in") configure_file ("${PROJECT_SOURCE_DIR}/src/${src}.in" "${PROJECT_BINARY_DIR}/include/${GFLAGS_INCLUDE_DIR}/${src}" @ONLY) list (APPEND tmp "${PROJECT_BINARY_DIR}/include/${GFLAGS_INCLUDE_DIR}/${src}") else () configure_file ("${PROJECT_SOURCE_DIR}/src/${src}" "${PROJECT_BINARY_DIR}/include/${GFLAGS_INCLUDE_DIR}/${src}" COPYONLY) list (APPEND tmp "${PROJECT_BINARY_DIR}/include/${GFLAGS_INCLUDE_DIR}/${src}") endif () endforeach () set (${out} "${tmp}" PARENT_SCOPE) endfunction () # ---------------------------------------------------------------------------- ## Configure source files with .in suffix function (configure_sources out) set (tmp) foreach (src IN LISTS ARGN) if (src MATCHES ".h$" AND EXISTS "${PROJECT_SOURCE_DIR}/src/${src}.in") configure_file ("${PROJECT_SOURCE_DIR}/src/${src}.in" "${PROJECT_BINARY_DIR}/include/${GFLAGS_INCLUDE_DIR}/${src}" @ONLY) list (APPEND tmp "${PROJECT_BINARY_DIR}/include/${GFLAGS_INCLUDE_DIR}/${src}") else () list (APPEND tmp "${PROJECT_SOURCE_DIR}/src/${src}") endif () endforeach () set (${out} "${tmp}" PARENT_SCOPE) endfunction () # ---------------------------------------------------------------------------- ## Add usage test # # Using PASS_REGULAR_EXPRESSION and FAIL_REGULAR_EXPRESSION would # do as well, but CMake/CTest does not allow us to specify an # expected exit status. Moreover, the execute_test.cmake script # sets environment variables needed by the --fromenv/--tryfromenv tests. macro (add_gflags_test name expected_rc expected_output unexpected_output cmd) set (args "--test_tmpdir=${PROJECT_BINARY_DIR}/Testing/Temporary" "--srcdir=${PROJECT_SOURCE_DIR}/test") add_test ( NAME ${name} COMMAND "${CMAKE_COMMAND}" "-DCOMMAND:STRING=$;${args};${ARGN}" "-DEXPECTED_RC:STRING=${expected_rc}" "-DEXPECTED_OUTPUT:STRING=${expected_output}" "-DUNEXPECTED_OUTPUT:STRING=${unexpected_output}" -P "${PROJECT_SOURCE_DIR}/cmake/execute_test.cmake" WORKING_DIRECTORY "${GFLAGS_FLAGFILES_DIR}" ) endmacro ()