File: FindClangFormat.cmake

package info (click to toggle)
pcl 1.13.0%2Bdfsg-3
  • links: PTS, VCS
  • area: main
  • in suites: bookworm
  • size: 143,524 kB
  • sloc: cpp: 518,578; xml: 28,792; ansic: 13,676; python: 334; lisp: 93; sh: 49; makefile: 30
file content (79 lines) | stat: -rw-r--r-- 2,574 bytes parent folder | download | duplicates (4)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
#
# .rst: FindClangFormat
# ---------------
#
# The module defines the following variables
#
# ``ClangFormat_EXECUTABLE`` Path to clang-format executable
# ``ClangFormat_FOUND`` True if the clang-format executable was found.
# ``ClangFormat_VERSION`` The version of clang-format found
#
# Example usage:
#
# .. code-block:: cmake
#
# find_package(ClangFormat)
# if(ClangFormat_FOUND)
# message("clang-format executable found: ${ClangFormat_EXECUTABLE}\n"
#         "version: ${ClangFormat_VERSION}")
# endif()

find_program(ClangFormat_EXECUTABLE
             NAMES
             # unreleased versions
                   clang-format-14
                   clang-format-13
                   clang-format-12
                   clang-format-11
             # current latest
                   clang-format-10
                   clang-format-9
             # since clang-format-8, only major version is prefixed
                   clang-format-8
                   clang-format-8.0
                   clang-format-7
                   clang-format-7.0
                   clang-format-6.0
                   clang-format-5.0
                   clang-format-4.0
                   clang-format-3.9
                   clang-format-3.8
                   clang-format-3.7
                   clang-format-3.6
                   clang-format-3.5
                   clang-format-3.4
                   clang-format-3.3
                   clang-format  # least priority
             DOC "clang-format executable")
mark_as_advanced(ClangFormat_EXECUTABLE)

# Extract version from command "clang-format -version"
if(ClangFormat_EXECUTABLE)
  execute_process(COMMAND ${ClangFormat_EXECUTABLE} -version
                  OUTPUT_VARIABLE clang_format_version
                  ERROR_QUIET OUTPUT_STRIP_TRAILING_WHITESPACE)
endif()
set(version_regex "^.*clang-format version ([.0-9]+).*")
if(clang_format_version MATCHES ${version_regex})
  # clang_format_version samples:
  # * clang-format version 3.9.1-4ubuntu3~16.04.1 (tags/RELEASE_391/rc2)
  # * Alpine clang-format version 8.0.0 (tags/RELEASE_800/final) (based on LLVM 8.0.0)
  string(REGEX
          REPLACE ${version_regex}
                  "\\1"
                  ClangFormat_VERSION
                  "${clang_format_version}")
  # ClangFormat_VERSION sample: "3.9.1", "8.0.0"
endif()
unset(clang_format_version)
unset(version_regex)

include(FindPackageHandleStandardArgs)
find_package_handle_standard_args(
  ClangFormat
  REQUIRED_VARS
    ClangFormat_EXECUTABLE
    ClangFormat_VERSION
  VERSION_VAR
    ClangFormat_VERSION
)