Skip to content

Commit 29c2faf

Browse files
authored
feat(lint): Add tasks for linting CMake scripts with gersemi; Apply gersemi to CMake scripts. (#147)
1 parent a4a8b91 commit 29c2faf

File tree

6 files changed

+169
-80
lines changed

6 files changed

+169
-80
lines changed

.gersemirc

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,9 @@
1+
# yamllint disable-line rule:line-length
2+
# yaml-language-server: $schema=https://raw.githubusercontent.com/BlankSpruce/gersemi/master/gersemi/configuration.schema.json
3+
4+
definitions:
5+
- "build/deps/Catch2-extracted/extras/Catch.cmake"
6+
- "examples/CMakeLists.txt"
7+
8+
line_length: 100
9+
list_expansion: "favour-expansion"

CMakeLists.txt

Lines changed: 79 additions & 62 deletions
Original file line numberDiff line numberDiff line change
@@ -1,13 +1,15 @@
11
cmake_minimum_required(VERSION 3.22.1)
22

3-
project(log_surgeon
3+
project(
4+
log_surgeon
45
VERSION 0.0.1
56
DESCRIPTION "log-surgeon: A performant log parsing library"
67
HOMEPAGE_URL https://github.com/y-scope/log-surgeon
7-
LANGUAGES CXX
8-
)
8+
LANGUAGES
9+
CXX
10+
)
911

10-
if (POLICY CMP0077)
12+
if(POLICY CMP0077)
1113
cmake_policy(SET CMP0077 NEW)
1214
endif()
1315

@@ -24,7 +26,7 @@ set(CMAKE_EXPORT_COMPILE_COMMANDS
2426
FORCE
2527
)
2628

27-
if (NOT CMAKE_BUILD_TYPE AND NOT CMAKE_CONFIGURATION_TYPES)
29+
if(NOT CMAKE_BUILD_TYPE AND NOT CMAKE_CONFIGURATION_TYPES)
2830
set(default_build_type "Release")
2931
message(STATUS "No build type specified. Setting to '${default_build_type}'.")
3032
set(CMAKE_BUILD_TYPE "${default_build_type}" CACHE STRING "Choose the type of build." FORCE)
@@ -112,105 +114,120 @@ set(SOURCE_FILES
112114
src/log_surgeon/Token.hpp
113115
src/log_surgeon/types.hpp
114116
src/log_surgeon/UniqueIdGenerator.hpp
115-
)
117+
)
116118

117119
set(LOG_SURGEON_INSTALL_CONFIG_DIR ${CMAKE_INSTALL_LIBDIR}/cmake/log_surgeon)
118120
set(LOG_SURGEON_INSTALL_INCLUDE_DIR ${CMAKE_INSTALL_INCLUDEDIR})
119121

120122
add_library(log_surgeon ${SOURCE_FILES})
121123
add_library(log_surgeon::log_surgeon ALIAS log_surgeon)
122124

123-
target_link_libraries(log_surgeon
125+
target_link_libraries(
126+
log_surgeon
124127
PUBLIC
125-
fmt::fmt
126-
Microsoft.GSL::GSL
127-
)
128+
fmt::fmt
129+
Microsoft.GSL::GSL
130+
)
128131

129-
target_include_directories(log_surgeon
130-
PUBLIC
132+
target_include_directories(
133+
log_surgeon
134+
PUBLIC
131135
$<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}/src>
132136
$<INSTALL_INTERFACE:${CMAKE_INSTALL_INCLUDEDIR}>
133-
PRIVATE
137+
PRIVATE
134138
${CMAKE_CURRENT_SOURCE_DIR}/src
135-
)
139+
)
136140

137-
target_compile_features(log_surgeon
138-
PRIVATE cxx_std_20
139-
)
141+
target_compile_features(log_surgeon PRIVATE cxx_std_20)
140142

141-
target_compile_options(log_surgeon PRIVATE
142-
$<$<CXX_COMPILER_ID:MSVC>:/W4 /WX>
143-
$<$<NOT:$<CXX_COMPILER_ID:MSVC>>:-Wall -Wextra -Wpedantic -Werror>
144-
)
143+
target_compile_options(
144+
log_surgeon
145+
PRIVATE
146+
$<$<CXX_COMPILER_ID:MSVC>:/W4
147+
/WX>
148+
$<$<NOT:$<CXX_COMPILER_ID:MSVC>>:-Wall
149+
-Wextra
150+
-Wpedantic
151+
-Werror>
152+
)
145153

146154
# Disable -Wstringop-overflow to avoid a false positive in the following compiler versions.
147155
# See https://gcc.gnu.org/bugzilla/show_bug.cgi?id=117983
148-
if("GNU" STREQUAL "${CMAKE_CXX_COMPILER_ID}"
149-
AND ((CMAKE_CXX_COMPILER_VERSION VERSION_GREATER_EQUAL 12
150-
AND CMAKE_CXX_COMPILER_VERSION VERSION_LESS 12.5)
151-
OR (CMAKE_CXX_COMPILER_VERSION VERSION_GREATER_EQUAL 13
152-
AND CMAKE_CXX_COMPILER_VERSION VERSION_LESS 13.4)
153-
OR (CMAKE_CXX_COMPILER_VERSION VERSION_GREATER_EQUAL 14
154-
AND CMAKE_CXX_COMPILER_VERSION VERSION_LESS 14.3)))
156+
if(
157+
"GNU"
158+
STREQUAL
159+
"${CMAKE_CXX_COMPILER_ID}"
160+
AND (
161+
(
162+
CMAKE_CXX_COMPILER_VERSION
163+
VERSION_GREATER_EQUAL
164+
12
165+
AND CMAKE_CXX_COMPILER_VERSION
166+
VERSION_LESS
167+
12.5
168+
)
169+
OR (
170+
CMAKE_CXX_COMPILER_VERSION
171+
VERSION_GREATER_EQUAL
172+
13
173+
AND CMAKE_CXX_COMPILER_VERSION
174+
VERSION_LESS
175+
13.4
176+
)
177+
OR (
178+
CMAKE_CXX_COMPILER_VERSION
179+
VERSION_GREATER_EQUAL
180+
14
181+
AND CMAKE_CXX_COMPILER_VERSION
182+
VERSION_LESS
183+
14.3
184+
)
185+
)
186+
)
155187
target_compile_options(log_surgeon PRIVATE "-Wno-stringop-overflow")
156188
endif()
157189

158190
# Make off_t 64-bit
159-
target_compile_definitions(log_surgeon
160-
PRIVATE
161-
_FILE_OFFSET_BITS=64
162-
)
191+
target_compile_definitions(log_surgeon PRIVATE _FILE_OFFSET_BITS=64)
163192

164-
install(
165-
TARGETS
166-
log_surgeon
167-
EXPORT
168-
log_surgeon-targets
169-
)
193+
install(TARGETS log_surgeon EXPORT log_surgeon-targets)
170194

171195
install(
172-
EXPORT
173-
log_surgeon-targets
174-
NAMESPACE
175-
log_surgeon::
176-
DESTINATION
177-
${LOG_SURGEON_INSTALL_CONFIG_DIR}
178-
)
196+
EXPORT log_surgeon-targets
197+
NAMESPACE log_surgeon::
198+
DESTINATION ${LOG_SURGEON_INSTALL_CONFIG_DIR}
199+
)
179200

180201
install(
181202
DIRECTORY
182-
"${PROJECT_SOURCE_DIR}/src/log_surgeon"
183-
DESTINATION
184-
"${LOG_SURGEON_INSTALL_INCLUDE_DIR}"
203+
"${PROJECT_SOURCE_DIR}/src/log_surgeon"
204+
DESTINATION "${LOG_SURGEON_INSTALL_INCLUDE_DIR}"
185205
FILES_MATCHING
186206
PATTERN "*.h"
187207
PATTERN "*.hpp"
188208
PATTERN "*.tpp"
189-
)
209+
)
190210

191211
configure_package_config_file(
192212
${CMAKE_CURRENT_LIST_DIR}/cmake/log_surgeon-config.cmake.in
193213
${CMAKE_CURRENT_BINARY_DIR}/log_surgeon-config.cmake
194-
INSTALL_DESTINATION
195-
${LOG_SURGEON_INSTALL_CONFIG_DIR}
214+
INSTALL_DESTINATION ${LOG_SURGEON_INSTALL_CONFIG_DIR}
196215
PATH_VARS
197-
LOG_SURGEON_INSTALL_INCLUDE_DIR
198-
)
216+
LOG_SURGEON_INSTALL_INCLUDE_DIR
217+
)
199218

200219
write_basic_package_version_file(
201220
${CMAKE_CURRENT_BINARY_DIR}/log_surgeon-config-version.cmake
202-
COMPATIBILITY
203-
SameMajorVersion
204-
)
221+
COMPATIBILITY SameMajorVersion
222+
)
205223

206224
install(
207225
FILES
208-
${CMAKE_CURRENT_BINARY_DIR}/log_surgeon-config.cmake
209-
${CMAKE_CURRENT_BINARY_DIR}/log_surgeon-config-version.cmake
210-
DESTINATION
211-
${LOG_SURGEON_INSTALL_CONFIG_DIR}
212-
)
226+
${CMAKE_CURRENT_BINARY_DIR}/log_surgeon-config.cmake
227+
${CMAKE_CURRENT_BINARY_DIR}/log_surgeon-config-version.cmake
228+
DESTINATION ${LOG_SURGEON_INSTALL_CONFIG_DIR}
229+
)
213230

214-
if (log_surgeon_ENABLE_TESTS)
231+
if(log_surgeon_ENABLE_TESTS)
215232
add_subdirectory(tests)
216233
endif()

examples/CMakeLists.txt

Lines changed: 23 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,7 @@ set(CMAKE_EXPORT_COMPILE_COMMANDS
88
FORCE
99
)
1010

11-
if (NOT CMAKE_BUILD_TYPE AND NOT CMAKE_CONFIGURATION_TYPES)
11+
if(NOT CMAKE_BUILD_TYPE AND NOT CMAKE_CONFIGURATION_TYPES)
1212
set(default_build_type "Release")
1313
message(STATUS "No build type specified. Setting to '${default_build_type}'.")
1414
set(CMAKE_BUILD_TYPE "${default_build_type}" CACHE STRING "Choose the type of build." FORCE)
@@ -27,16 +27,32 @@ message(STATUS "Found log_surgeon ${log_surgeon_VERSION}.")
2727
function(add_to_target target libraries)
2828
target_link_libraries(${target} ${libraries})
2929
target_compile_features(${target} PRIVATE cxx_std_20)
30-
target_compile_options(${target} PRIVATE
31-
$<$<CXX_COMPILER_ID:MSVC>:/W4 /WX>
32-
$<$<NOT:$<CXX_COMPILER_ID:MSVC>>:-Wall -Wextra -Wpedantic -Werror>
33-
)
30+
target_compile_options(
31+
${target}
32+
PRIVATE
33+
$<$<CXX_COMPILER_ID:MSVC>:/W4
34+
/WX>
35+
$<$<NOT:$<CXX_COMPILER_ID:MSVC>>:-Wall
36+
-Wextra
37+
-Wpedantic
38+
-Werror>
39+
)
3440
endfunction()
3541

36-
add_library(common OBJECT common.cpp common.hpp)
42+
add_library(
43+
common
44+
OBJECT
45+
common.cpp
46+
common.hpp
47+
)
3748
add_to_target(common log_surgeon::log_surgeon)
3849

39-
list(APPEND libraries log_surgeon::log_surgeon common)
50+
list(
51+
APPEND
52+
libraries
53+
log_surgeon::log_surgeon
54+
common
55+
)
4056

4157
add_executable(buffer-parser buffer-parser.cpp)
4258
add_to_target(buffer-parser "${libraries}")

lint-requirements.txt

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,4 @@
11
clang-format>=20.1
22
clang-tidy>=20.1
3+
gersemi>=0.16.2
34
yamllint>=1.35.1

taskfiles/lint.yaml

Lines changed: 41 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,9 @@
11
version: "3"
22

33
includes:
4+
deps:
5+
internal: true
6+
taskfile: "deps.yaml"
47
examples:
58
internal: true
69
taskfile: "examples.yaml"
@@ -14,7 +17,11 @@ includes:
1417
vars:
1518
# General linting variables
1619
G_LINT_VENV_DIR: "{{.G_BUILD_DIR}}/lint-venv"
17-
G_UTILS_CONFIGS_DIR: "{{.ROOT_DIR}}/tools/yscope-dev-utils/exports/lint-configs"
20+
21+
# Utils directories
22+
G_UTILS_EXPORTS_DIR: "{{.ROOT_DIR}}/tools/yscope-dev-utils/exports"
23+
G_UTILS_CONFIGS_DIR: "{{.G_UTILS_EXPORTS_DIR}}/lint-configs"
24+
G_UTILS_YSTDLIB_PY_DIR: "{{.G_UTILS_EXPORTS_DIR}}/ystdlib-py"
1825

1926
# Root paths for source files
2027
G_LOG_SURGEON_ROOT_PATHS:
@@ -39,9 +46,16 @@ vars:
3946
tasks:
4047
check:
4148
cmds:
49+
- task: "check-cmake"
4250
- task: "check-cpp"
4351
- task: "check-yaml"
4452

53+
check-cmake:
54+
cmds:
55+
- task: "gersemi"
56+
vars:
57+
FLAGS: "--check"
58+
4559
check-cpp:
4660
cmds:
4761
- task: "check-cpp-format-examples"
@@ -179,9 +193,16 @@ tasks:
179193
180194
fix:
181195
cmds:
196+
- task: "fix-cmake"
182197
- task: "fix-cpp"
183198
- task: "fix-yaml"
184199

200+
fix-cmake:
201+
cmds:
202+
- task: "gersemi"
203+
vars:
204+
FLAGS: "--in-place"
205+
185206
fix-cpp:
186207
cmds:
187208
- task: "fix-cpp-format-examples"
@@ -247,6 +268,25 @@ tasks:
247268
ref: ".G_LOG_SURGEON_ROOT_PATHS"
248269
VENV_DIR: "{{.G_LINT_VENV_DIR}}"
249270

271+
gersemi:
272+
internal: true
273+
label: "{{.TASK}}:{{.FLAGS}}"
274+
requires:
275+
vars:
276+
- "FLAGS"
277+
deps:
278+
- "deps:install-all"
279+
- "venv"
280+
cmd: |-
281+
. "{{.G_LINT_VENV_DIR}}/bin/activate"
282+
uv run --project "{{.G_UTILS_YSTDLIB_PY_DIR}}" pyfind \
283+
"{{.ROOT_DIR}}" \
284+
--exclude "build/**/*" \
285+
--exclude "tools/**/*" \
286+
--filename "CMakeLists.txt" \
287+
--filename "*.cmake" \
288+
| xargs gersemi {{.FLAGS}}
289+
250290
venv:
251291
internal: true
252292
vars:

tests/CMakeLists.txt

Lines changed: 16 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -1,17 +1,23 @@
11
add_executable(unit-test)
2-
target_sources(unit-test
2+
target_sources(
3+
unit-test
34
PRIVATE
4-
test-buffer-parser.cpp
5-
test-capture.cpp
6-
test-dfa.cpp
7-
test-nfa.cpp
8-
test-prefix-tree.cpp
9-
test-regex-ast.cpp
10-
test-register-handler.cpp
11-
test-schema.cpp
5+
test-buffer-parser.cpp
6+
test-capture.cpp
7+
test-dfa.cpp
8+
test-nfa.cpp
9+
test-prefix-tree.cpp
10+
test-regex-ast.cpp
11+
test-register-handler.cpp
12+
test-schema.cpp
1213
)
1314

14-
target_link_libraries(unit-test PRIVATE Catch2::Catch2WithMain log_surgeon::log_surgeon)
15+
target_link_libraries(
16+
unit-test
17+
PRIVATE
18+
Catch2::Catch2WithMain
19+
log_surgeon::log_surgeon
20+
)
1521
target_compile_features(unit-test PRIVATE cxx_std_20)
1622

1723
catch_discover_tests(unit-test)

0 commit comments

Comments
 (0)