Skip to content

Commit 24ffa4a

Browse files
committed
Add CMake linter
1 parent 3bc1461 commit 24ffa4a

File tree

6 files changed

+118
-76
lines changed

6 files changed

+118
-76
lines changed

.cmake-format.json

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,6 @@
1+
{
2+
"lint": {
3+
"disabled_codes": ["C0113"],
4+
"global_var_pattern": "^[A-Z][0-9A-Z_]+$|^gtest_force_shared_crt$"
5+
}
6+
}

.pre-commit-config.yaml

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,3 +4,8 @@ repos:
44
hooks:
55
- id: clang-format
66
types_or: [c++]
7+
- repo: https://github.com/cheshirekow/cmake-format-precommit
8+
rev: v0.6.10
9+
hooks:
10+
- id: cmake-format
11+
- id: cmake-lint

CMakeLists.txt

Lines changed: 42 additions & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -1,59 +1,77 @@
11
cmake_minimum_required(VERSION 3.24)
22

3-
project(Traits VERSION 0.0.1 LANGUAGES CXX)
3+
project(
4+
Traits
5+
VERSION 0.0.1
6+
LANGUAGES CXX)
47

58
add_library(traits INTERFACE)
69
add_library(Traits::traits ALIAS traits)
710

811
target_compile_features(traits INTERFACE cxx_std_20)
9-
target_sources(traits INTERFACE
10-
FILE_SET HEADERS
11-
BASE_DIRS "${CMAKE_CURRENT_SOURCE_DIR}/include"
12-
FILES "${CMAKE_CURRENT_SOURCE_DIR}/include/traits.h"
13-
)
12+
target_sources(
13+
traits
14+
INTERFACE FILE_SET HEADERS BASE_DIRS "${CMAKE_CURRENT_SOURCE_DIR}/include"
15+
FILES "${CMAKE_CURRENT_SOURCE_DIR}/include/traits.h")
1416

1517
# only proceed if we are building the library directly
1618

1719
if(NOT CMAKE_CURRENT_SOURCE_DIR STREQUAL CMAKE_SOURCE_DIR)
18-
return()
20+
return()
1921
endif()
2022

2123
option(TRAITS_BUILD_EXAMPLES "whether or not examples should be built" ON)
2224
option(TRAITS_BUILD_TESTS "whether or not tests should be built" ON)
23-
set(TRAITS_PACKAGE_NAME "${PROJECT_NAME}.zip" CACHE FILEPATH "name of package file")
25+
set(TRAITS_PACKAGE_NAME
26+
"${PROJECT_NAME}.zip"
27+
CACHE FILEPATH "name of package file")
2428

2529
# installation rules
2630

27-
configure_file("cmake/traits-config-version.cmake.in" "${CMAKE_CURRENT_BINARY_DIR}/traits-config-version.cmake" @ONLY)
31+
configure_file("cmake/traits-config-version.cmake.in"
32+
"${CMAKE_CURRENT_BINARY_DIR}/traits-config-version.cmake" @ONLY)
2833

29-
install(TARGETS traits EXPORT traits-targets FILE_SET HEADERS DESTINATION "include/traits-${PROJECT_VERSION}")
34+
install(
35+
TARGETS traits
36+
EXPORT traits-targets
37+
FILE_SET HEADERS
38+
DESTINATION "include/traits-${PROJECT_VERSION}")
3039

31-
install(EXPORT traits-targets NAMESPACE Traits:: FILE "traits-targets.cmake" DESTINATION "lib/cmake/traits-${PROJECT_VERSION}")
32-
install(FILES "cmake/traits-config.cmake" "${CMAKE_CURRENT_BINARY_DIR}/traits-config-version.cmake" DESTINATION "lib/cmake/traits-${PROJECT_VERSION}")
40+
install(
41+
EXPORT traits-targets
42+
NAMESPACE Traits::
43+
FILE "traits-targets.cmake"
44+
DESTINATION "lib/cmake/traits-${PROJECT_VERSION}")
45+
install(FILES "cmake/traits-config.cmake"
46+
"${CMAKE_CURRENT_BINARY_DIR}/traits-config-version.cmake"
47+
DESTINATION "lib/cmake/traits-${PROJECT_VERSION}")
3348

3449
# downloadable package for fetch content
3550

3651
add_custom_command(
37-
OUTPUT "${CMAKE_CURRENT_BINARY_DIR}/${TRAITS_PACKAGE_NAME}"
38-
COMMAND ${CMAKE_COMMAND} -E tar c "${CMAKE_CURRENT_BINARY_DIR}/${TRAITS_PACKAGE_NAME}" --format=zip --
39-
cmake/ examples/ include/ tests/ CMakeLists.txt LICENSE README.md
40-
WORKING_DIRECTORY "${CMAKE_CURRENT_SOURCE_DIR}"
41-
)
52+
OUTPUT "${CMAKE_CURRENT_BINARY_DIR}/${TRAITS_PACKAGE_NAME}"
53+
COMMAND
54+
${CMAKE_COMMAND} -E tar c
55+
"${CMAKE_CURRENT_BINARY_DIR}/${TRAITS_PACKAGE_NAME}" --format=zip -- cmake/
56+
examples/ include/ tests/ CMakeLists.txt LICENSE README.md
57+
WORKING_DIRECTORY "${CMAKE_CURRENT_SOURCE_DIR}")
4258
add_custom_command(
43-
OUTPUT "${CMAKE_CURRENT_BINARY_DIR}/package_name"
44-
COMMAND ${CMAKE_COMMAND} -E echo "name=${TRAITS_PACKAGE_NAME}" > "${CMAKE_CURRENT_BINARY_DIR}/package_name"
45-
)
46-
add_custom_target(package DEPENDS "${CMAKE_CURRENT_BINARY_DIR}/${TRAITS_PACKAGE_NAME}" "${CMAKE_CURRENT_BINARY_DIR}/package_name")
59+
OUTPUT "${CMAKE_CURRENT_BINARY_DIR}/package_name"
60+
COMMAND ${CMAKE_COMMAND} -E echo "name=${TRAITS_PACKAGE_NAME}" >
61+
"${CMAKE_CURRENT_BINARY_DIR}/package_name")
62+
add_custom_target(
63+
package DEPENDS "${CMAKE_CURRENT_BINARY_DIR}/${TRAITS_PACKAGE_NAME}"
64+
"${CMAKE_CURRENT_BINARY_DIR}/package_name")
4765

4866
# optional examples
4967

5068
if(TRAITS_BUILD_EXAMPLES)
51-
add_subdirectory(examples)
69+
add_subdirectory(examples)
5270
endif()
5371

5472
# optional tests
5573

5674
if(TRAITS_BUILD_TESTS)
57-
enable_testing()
58-
add_subdirectory(tests)
75+
enable_testing()
76+
add_subdirectory(tests)
5977
endif()

examples/CMakeLists.txt

Lines changed: 15 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -1,21 +1,27 @@
11
cmake_minimum_required(VERSION 3.24)
22

3-
project(TraitsExamples VERSION 0.0.1 LANGUAGES CXX)
3+
project(
4+
TraitsExamples
5+
VERSION 0.0.1
6+
LANGUAGES CXX)
47

58
if(CMAKE_CURRENT_SOURCE_DIR STREQUAL CMAKE_SOURCE_DIR)
6-
include(FetchContent)
9+
include(FetchContent)
710

8-
FetchContent_Declare(traits GIT_REPOSITORY https://github.com/VolumeGraphics/traits.git GIT_TAG main)
9-
FetchContent_MakeAvailable(traits)
11+
FetchContent_Declare(
12+
traits
13+
GIT_REPOSITORY https://github.com/VolumeGraphics/traits.git
14+
GIT_TAG main)
15+
FetchContent_MakeAvailable(traits)
1016
endif()
1117

1218
enable_testing()
1319

14-
set (EXAMPLES quickstart readme)
20+
list(APPEND examples quickstart readme)
1521

16-
foreach(EXAMPLE IN LISTS EXAMPLES)
17-
add_executable(${EXAMPLE} "${EXAMPLE}.cpp")
18-
target_link_libraries(${EXAMPLE} PRIVATE Traits::traits)
22+
foreach(example IN LISTS examples)
23+
add_executable(${example} "${example}.cpp")
24+
target_link_libraries(${example} PRIVATE Traits::traits)
1925

20-
add_test(NAME ${EXAMPLE} COMMAND $<TARGET_FILE:${EXAMPLE}>)
26+
add_test(NAME ${example} COMMAND $<TARGET_FILE:${example}>)
2127
endforeach()

tests/CMakeLists.txt

Lines changed: 45 additions & 41 deletions
Original file line numberDiff line numberDiff line change
@@ -2,34 +2,31 @@ include(FetchContent)
22
include(GoogleTest)
33

44
FetchContent_Declare(
5-
googletest
6-
URL https://github.com/google/googletest/archive/refs/tags/v1.15.2.zip
7-
)
5+
googletest
6+
URL https://github.com/google/googletest/archive/refs/tags/v1.15.2.zip)
87

9-
set(gtest_force_shared_crt ON CACHE BOOL "" FORCE)
8+
set(gtest_force_shared_crt
9+
ON
10+
CACHE BOOL "" FORCE)
1011
FetchContent_MakeAvailable(googletest)
1112

1213
enable_testing()
1314

14-
set (TESTS
15-
function_type
16-
)
15+
list(APPEND tests function_type)
1716

18-
foreach(TEST IN LISTS TESTS)
19-
add_executable(${TEST} ${TEST}.cpp)
20-
target_link_libraries(${TEST}
21-
PRIVATE Traits::traits
22-
PRIVATE GTest::gtest_main
23-
)
17+
foreach(test IN LISTS tests)
18+
add_executable(${test} ${test}.cpp)
19+
target_link_libraries(${test} PRIVATE Traits::traits GTest::gtest_main)
2420

25-
gtest_discover_tests(${TEST})
21+
gtest_discover_tests(${test})
2622
endforeach()
2723

2824
# Add the deployment test, which checks that we can indeed install traits and
2925
# then use `find_package` to depend on it from another CMake project.
3026
include(ExternalProject)
3127
set(FAKE_INSTALL_DIR "${PROJECT_BINARY_DIR}/fakeroot")
32-
ExternalProject_Add(test.deploy.fakeroot
28+
ExternalProject_Add(
29+
test.deploy.fakeroot
3330
SOURCE_DIR "${PROJECT_SOURCE_DIR}"
3431
EXCLUDE_FROM_ALL TRUE
3532
BUILD_ALWAYS TRUE
@@ -38,36 +35,43 @@ ExternalProject_Add(test.deploy.fakeroot
3835
-DCMAKE_CXX_COMPILER=${CMAKE_CXX_COMPILER}
3936
-DCMAKE_PREFIX_PATH=${CMAKE_PREFIX_PATH}
4037
-DCMAKE_TOOLCHAIN_FILE=${CMAKE_TOOLCHAIN_FILE}
41-
TEST_COMMAND "" # Disable test step
42-
UPDATE_COMMAND "" # Disable source work-tree update
38+
TEST_COMMAND "" # Disable test step
39+
UPDATE_COMMAND "" # Disable source work-tree update
4340
)
4441

45-
add_custom_target(test.deploy
42+
add_custom_target(
43+
test.deploy
4644
DEPENDS test.deploy.fakeroot
47-
COMMAND ${CMAKE_COMMAND} -E remove_directory "${CMAKE_CURRENT_BINARY_DIR}/deploy"
48-
COMMAND ${CMAKE_COMMAND} -E make_directory "${CMAKE_CURRENT_BINARY_DIR}/deploy"
49-
COMMAND ${CMAKE_COMMAND} -E chdir "${CMAKE_CURRENT_BINARY_DIR}/deploy"
50-
${CMAKE_COMMAND} "${CMAKE_CURRENT_SOURCE_DIR}/deploy"
51-
-DCMAKE_CXX_COMPILER="${CMAKE_CXX_COMPILER}"
52-
-DCMAKE_PREFIX_PATH="${CMAKE_PREFIX_PATH}\;${FAKE_INSTALL_DIR}"
53-
-DCMAKE_TOOLCHAIN_FILE=${CMAKE_TOOLCHAIN_FILE}
54-
COMMAND ${CMAKE_COMMAND} --build "${CMAKE_CURRENT_BINARY_DIR}/deploy"
55-
)
56-
add_test(NAME test.deploy COMMAND ${CMAKE_COMMAND} --build "${PROJECT_BINARY_DIR}" --target test.deploy)
45+
COMMAND ${CMAKE_COMMAND} -E remove_directory
46+
"${CMAKE_CURRENT_BINARY_DIR}/deploy"
47+
COMMAND ${CMAKE_COMMAND} -E make_directory
48+
"${CMAKE_CURRENT_BINARY_DIR}/deploy"
49+
COMMAND
50+
${CMAKE_COMMAND} -E chdir "${CMAKE_CURRENT_BINARY_DIR}/deploy"
51+
${CMAKE_COMMAND} "${CMAKE_CURRENT_SOURCE_DIR}/deploy"
52+
-DCMAKE_CXX_COMPILER="${CMAKE_CXX_COMPILER}"
53+
-DCMAKE_PREFIX_PATH="${CMAKE_PREFIX_PATH}\;${FAKE_INSTALL_DIR}"
54+
-DCMAKE_TOOLCHAIN_FILE=${CMAKE_TOOLCHAIN_FILE}
55+
COMMAND ${CMAKE_COMMAND} --build "${CMAKE_CURRENT_BINARY_DIR}/deploy")
56+
add_test(NAME test.deploy COMMAND ${CMAKE_COMMAND} --build
57+
"${PROJECT_BINARY_DIR}" --target test.deploy)
5758

58-
# Add the fetch test, which checks that we can indeed use fetch content
59-
# from another CMake project.
59+
# Add the fetch test, which checks that we can indeed use fetch content from
60+
# another CMake project.
6061

61-
add_custom_target(test.fetch
62+
add_custom_target(
63+
test.fetch
6264
DEPENDS package
63-
COMMAND ${CMAKE_COMMAND} -E remove_directory "${CMAKE_CURRENT_BINARY_DIR}/fetch"
65+
COMMAND ${CMAKE_COMMAND} -E remove_directory
66+
"${CMAKE_CURRENT_BINARY_DIR}/fetch"
6467
COMMAND ${CMAKE_COMMAND} -E make_directory "${CMAKE_CURRENT_BINARY_DIR}/fetch"
65-
COMMAND ${CMAKE_COMMAND} -S "${CMAKE_CURRENT_SOURCE_DIR}/fetch"
66-
-B "${CMAKE_CURRENT_BINARY_DIR}/fetch"
67-
-DPACKAGE_PATH="${CMAKE_CURRENT_BINARY_DIR}/../${TRAITS_PACKAGE_NAME}"
68-
-DCMAKE_CXX_COMPILER="${CMAKE_CXX_COMPILER}"
69-
-DCMAKE_PREFIX_PATH="${CMAKE_PREFIX_PATH}"
70-
-DCMAKE_TOOLCHAIN_FILE="${CMAKE_TOOLCHAIN_FILE}"
71-
COMMAND ${CMAKE_COMMAND} --build "${CMAKE_CURRENT_BINARY_DIR}/fetch"
72-
)
73-
add_test(NAME test.fetch COMMAND ${CMAKE_COMMAND} --build "${PROJECT_BINARY_DIR}" --target test.fetch)
68+
COMMAND
69+
${CMAKE_COMMAND} -S "${CMAKE_CURRENT_SOURCE_DIR}/fetch" -B
70+
"${CMAKE_CURRENT_BINARY_DIR}/fetch"
71+
-DPACKAGE_PATH="${CMAKE_CURRENT_BINARY_DIR}/../${TRAITS_PACKAGE_NAME}"
72+
-DCMAKE_CXX_COMPILER="${CMAKE_CXX_COMPILER}"
73+
-DCMAKE_PREFIX_PATH="${CMAKE_PREFIX_PATH}"
74+
-DCMAKE_TOOLCHAIN_FILE="${CMAKE_TOOLCHAIN_FILE}"
75+
COMMAND ${CMAKE_COMMAND} --build "${CMAKE_CURRENT_BINARY_DIR}/fetch")
76+
add_test(NAME test.fetch COMMAND ${CMAKE_COMMAND} --build
77+
"${PROJECT_BINARY_DIR}" --target test.fetch)

tests/fetch/CMakeLists.txt

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -2,11 +2,14 @@ cmake_minimum_required(VERSION 3.24)
22
project(fetch CXX)
33

44
if(NOT DEFINED PACKAGE_PATH)
5-
message(FATAL_ERROR "PACKAGE_PATH is required. Please set -DPACKAGE_PATH=/path/to/package.zip")
5+
message(
6+
FATAL_ERROR
7+
"PACKAGE_PATH is required. Please set -DPACKAGE_PATH=/path/to/package.zip"
8+
)
69
endif()
710

811
if(NOT EXISTS "${PACKAGE_PATH}")
9-
message(FATAL_ERROR "Package file not found at: ${PACKAGE_PATH}")
12+
message(FATAL_ERROR "Package file not found at: ${PACKAGE_PATH}")
1013
endif()
1114

1215
include(FetchContent)

0 commit comments

Comments
 (0)