function (clang_detect_tool VAR NAME OPTS) set(NAMES "") foreach(CNT RANGE 12 22) list(APPEND NAMES "${NAME}-${CNT}") endforeach() list(REVERSE NAMES) list(APPEND NAMES ${NAME}) find_program(${VAR} NAMES ${NAMES} ${OPTS} ) if (NOT ${VAR}) message(WARNING "clang tool ${NAME} (${VAR}) not detected, skipping") unset(${VAR}) return() endif() execute_process( COMMAND ${${VAR}} "--version" OUTPUT_VARIABLE _CLANG_TOOL_VERSION RESULT_VARIABLE _CLANG_TOOL_VERSION_FAILED ) if (_CLANG_TOOL_VERSION_FAILED) message(WARNING "A problem was encounterd with ${${VAR}}") message(WARNING "${_CLANG_TOOL_VERSION_FAILED}") unset(${VAR}) return() endif() string(REGEX MATCH "([7-9]|[1-9][0-9])\\.[0-9]\\.[0-9]" CLANG_TOOL_VERSION "${_CLANG_TOOL_VERSION}") if (NOT CLANG_TOOL_VERSION) message(WARNING "problem parsing ${NAME} version for ${${VAR}}") unset(${VAR}) return() endif() set(_CLANG_TOOL_MINIMUM_VERSION "12.0.0") if (${CLANG_TOOL_VERSION} VERSION_LESS ${_CLANG_TOOL_MINIMUM_VERSION}) message(WARNING "clang-format version ${CLANG_TOOL_VERSION} not supported") message(WARNING "Minimum version required: ${_CLANG_TOOL_MINIMUM_VERSION}") unset(${VAR}) return() endif() endfunction()