Spaces:
Paused
Paused
| # | |
| # 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) | |