Spaces:
Running
Running
# | |
# Licensed under the Apache License, Version 2.0 (the "License"); | |
# you may not use this file except in compliance with the License. | |
# You may obtain a copy of the License at | |
# | |
# http://www.apache.org/licenses/LICENSE-2.0 | |
# | |
# Unless required by applicable law or agreed to in writing, software | |
# distributed under the License is distributed on an "AS IS" BASIS, | |
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. | |
# See the License for the specific language governing permissions and | |
# limitations under the License. | |
# | |
# Tries to find the clang-tidy and clang-format modules | |
# | |
# Usage of this module as follows: | |
# | |
# find_package(ClangTools) | |
# | |
# Variables used by this module which can change the default behaviour and need | |
# to be set before calling find_package: | |
# | |
# CLANG_FORMAT_VERSION - | |
# The version of clang-format to find. If this is not specified, clang-format | |
# will not be searched for. | |
# | |
# ClangTools_PATH - | |
# When set, this path is inspected in addition to standard library binary locations | |
# to find clang-tidy and clang-format | |
# | |
# This module defines | |
# CLANG_TIDY_BIN, The path to the clang tidy binary | |
# CLANG_TIDY_FOUND, Whether clang tidy was found | |
# CLANG_FORMAT_BIN, The path to the clang format binary | |
# CLANG_FORMAT_FOUND, Whether clang format was found | |
set(CLANG_TOOLS_SEARCH_PATHS | |
${ClangTools_PATH} | |
$ENV{CLANG_TOOLS_PATH} | |
/usr/local/bin | |
/usr/bin | |
"C:/Program Files/LLVM/bin" # Windows, non-conda | |
"$ENV{CONDA_PREFIX}/Library/bin" # Windows, conda | |
"$ENV{CONDA_PREFIX}/bin") # Unix, conda | |
if(APPLE) | |
find_program(BREW brew) | |
if(BREW) | |
execute_process(COMMAND ${BREW} --prefix "llvm@${ARROW_CLANG_TOOLS_VERSION_MAJOR}" | |
OUTPUT_VARIABLE CLANG_TOOLS_BREW_PREFIX | |
OUTPUT_STRIP_TRAILING_WHITESPACE) | |
if(NOT CLANG_TOOLS_BREW_PREFIX) | |
execute_process(COMMAND ${BREW} --prefix llvm | |
OUTPUT_VARIABLE CLANG_TOOLS_BREW_PREFIX | |
OUTPUT_STRIP_TRAILING_WHITESPACE) | |
endif() | |
if(CLANG_TOOLS_BREW_PREFIX) | |
list(APPEND CLANG_TOOLS_SEARCH_PATHS "${CLANG_TOOLS_BREW_PREFIX}/bin") | |
endif() | |
endif() | |
endif() | |
function(FIND_CLANG_TOOL NAME OUTPUT VERSION_CHECK_PATTERN) | |
unset(CLANG_TOOL_BIN CACHE) | |
find_program(CLANG_TOOL_BIN | |
NAMES ${NAME}-${ARROW_CLANG_TOOLS_VERSION} | |
${NAME}-${ARROW_CLANG_TOOLS_VERSION_MAJOR} | |
PATHS ${CLANG_TOOLS_SEARCH_PATHS} | |
NO_DEFAULT_PATH) | |
if(NOT CLANG_TOOL_BIN) | |
# try searching for non-versioned tool and check the version | |
find_program(CLANG_TOOL_BIN | |
NAMES ${NAME} | |
PATHS ${CLANG_TOOLS_SEARCH_PATHS} | |
NO_DEFAULT_PATH) | |
if(CLANG_TOOL_BIN) | |
unset(CLANG_TOOL_VERSION_MESSAGE) | |
execute_process(COMMAND ${CLANG_TOOL_BIN} "-version" | |
OUTPUT_VARIABLE CLANG_TOOL_VERSION_MESSAGE | |
OUTPUT_STRIP_TRAILING_WHITESPACE) | |
if(NOT (${CLANG_TOOL_VERSION_MESSAGE} MATCHES ${VERSION_CHECK_PATTERN})) | |
message(STATUS "${NAME} found, but version did not match \"${VERSION_CHECK_PATTERN}\"" | |
) | |
set(CLANG_TOOL_BIN "CLANG_TOOL_BIN-NOTFOUND") | |
endif() | |
endif() | |
endif() | |
if(CLANG_TOOL_BIN) | |
set(${OUTPUT} | |
${CLANG_TOOL_BIN} | |
PARENT_SCOPE) | |
else() | |
set(${OUTPUT} | |
"${OUTPUT}-NOTFOUND" | |
PARENT_SCOPE) | |
endif() | |
endfunction() | |
string(REGEX REPLACE "\\." "\\\\." ARROW_CLANG_TOOLS_VERSION_ESCAPED | |
"${ARROW_CLANG_TOOLS_VERSION}") | |
find_clang_tool(clang-tidy CLANG_TIDY_BIN | |
"LLVM version ${ARROW_CLANG_TOOLS_VERSION_ESCAPED}") | |
if(CLANG_TIDY_BIN) | |
set(CLANG_TIDY_FOUND 1) | |
message(STATUS "clang-tidy found at ${CLANG_TIDY_BIN}") | |
else() | |
set(CLANG_TIDY_FOUND 0) | |
message(STATUS "clang-tidy ${ARROW_CLANG_TOOLS_VERSION} not found") | |
endif() | |
find_clang_tool(clang-format CLANG_FORMAT_BIN | |
"clang-format version ${ARROW_CLANG_TOOLS_VERSION_ESCAPED}") | |
if(CLANG_FORMAT_BIN) | |
set(CLANG_FORMAT_FOUND 1) | |
message(STATUS "clang-format found at ${CLANG_FORMAT_BIN}") | |
else() | |
set(CLANG_FORMAT_FOUND 0) | |
message(STATUS "clang-format ${ARROW_CLANG_TOOLS_VERSION} not found") | |
endif() | |
find_package_handle_standard_args(ClangTools REQUIRED_VARS CLANG_FORMAT_BIN | |
CLANG_TIDY_BIN) | |