Skip to content

Commit dea9d03

Browse files
authored
Merge pull request #45 from cginternals/cppcheck_scripts
Add source check targets
2 parents 6f96d29 + 50840d0 commit dea9d03

11 files changed

+218
-2
lines changed

.travis.yml

+3-2
Original file line numberDiff line numberDiff line change
@@ -24,8 +24,8 @@ matrix:
2424
compiler: gcc
2525

2626
before_install:
27-
- if [ $TRAVIS_OS_NAME == linux ]; then sudo apt-get install -qq cmake qt5-default; fi
28-
- if [ $TRAVIS_OS_NAME == osx ]; then brew update && brew install qt5; fi
27+
- if [ $TRAVIS_OS_NAME == linux ]; then sudo apt-get install -qq cmake qt5-default cppcheck clang-tidy-3.8; fi
28+
- if [ $TRAVIS_OS_NAME == osx ]; then brew update && brew install qt5 cppcheck; fi
2929

3030
before_script:
3131
- ./configure
@@ -35,3 +35,4 @@ before_script:
3535
script:
3636
- cmake --build $BUILD_DIR
3737
- cmake --build $BUILD_DIR --target test
38+
- cmake --build $BUILD_DIR --target check-all

CMakeLists.txt

+9
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,7 @@ endif()
2121

2222
include(cmake/GetGitRevisionDescription.cmake)
2323
include(cmake/Custom.cmake)
24+
include(cmake/HealthCheck.cmake)
2425

2526
# Set policies
2627
set_policy(CMP0028 NEW) # ENABLE CMP0028: Double colon in target name means ALIAS or IMPORTED target.
@@ -97,6 +98,14 @@ file(WRITE "${PROJECT_BINARY_DIR}/VERSION" "${META_NAME_VERSION}")
9798
include(cmake/CompileOptions.cmake)
9899

99100

101+
#
102+
# Project Health Check Setup
103+
#
104+
105+
enable_cppcheck(On)
106+
enable_clang_tidy(On)
107+
108+
100109
#
101110
# Deployment/installation setup
102111
#

cmake/ClangTidy.cmake

+18
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,18 @@
1+
2+
# Function to register a target for clang-tidy
3+
function(perform_clang_tidy check_target target)
4+
set(includes "$<TARGET_PROPERTY:${target},INCLUDE_DIRECTORIES>")
5+
6+
add_custom_target(
7+
${check_target}
8+
COMMAND
9+
${clang_tidy_EXECUTABLE}
10+
"$<$<BOOL:${CMAKE_EXPORT_COMPILE_COMMANDS}>:-p\t${PROJECT_BINARY_DIR}>"
11+
${ARGN}
12+
-checks=*
13+
"$<$<NOT:$<BOOL:${CMAKE_EXPORT_COMPILE_COMMANDS}>>:--\t$<$<BOOL:${includes}>:-I$<JOIN:${includes},\t-I>>>"
14+
WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}
15+
)
16+
17+
add_dependencies(${check_target} ${target})
18+
endfunction()

cmake/Cppcheck.cmake

+22
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,22 @@
1+
2+
# Function to register a target for cppcheck
3+
function(perform_cppcheck check_target target)
4+
set(includes "$<TARGET_PROPERTY:${target},INCLUDE_DIRECTORIES>")
5+
6+
add_custom_target(
7+
${check_target}
8+
COMMAND
9+
${cppcheck_EXECUTABLE}
10+
"$<$<BOOL:${includes}>:-I$<JOIN:${includes},\t-I>>"
11+
--check-config
12+
--enable=warning,performance,portability,information,missingInclude
13+
--quiet
14+
--std=c++11
15+
--verbose
16+
--suppress=missingIncludeSystem
17+
${ARGN}
18+
WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}
19+
)
20+
21+
add_dependencies(${check_target} ${target})
22+
endfunction()

cmake/Findclang_tidy.cmake

+27
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,27 @@
1+
2+
# Findclang_tidy results:
3+
# clang_tidy_FOUND
4+
# clang_tidy_EXECUTABLE
5+
6+
include(FindPackageHandleStandardArgs)
7+
8+
find_program(clang_tidy_EXECUTABLE
9+
NAMES
10+
clang-tidy-3.5
11+
clang-tidy-3.6
12+
clang-tidy-3.7
13+
clang-tidy-3.8
14+
clang-tidy-3.9
15+
clang-tidy-4.0
16+
PATHS
17+
"${CLANG_TIDY_DIR}"
18+
)
19+
20+
find_package_handle_standard_args(clang_tidy
21+
FOUND_VAR
22+
clang_tidy_FOUND
23+
REQUIRED_VARS
24+
clang_tidy_EXECUTABLE
25+
)
26+
27+
mark_as_advanced(clang_tidy_EXECUTABLE)

cmake/Findcppcheck.cmake

+22
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,22 @@
1+
2+
# Findcppcheck results:
3+
# cppcheck_FOUND
4+
# cppcheck_EXECUTABLE
5+
6+
include(FindPackageHandleStandardArgs)
7+
8+
find_program(cppcheck_EXECUTABLE
9+
NAMES
10+
cppcheck
11+
PATHS
12+
"${CPPCHECK_DIR}"
13+
)
14+
15+
find_package_handle_standard_args(cppcheck
16+
FOUND_VAR
17+
cppcheck_FOUND
18+
REQUIRED_VARS
19+
cppcheck_EXECUTABLE
20+
)
21+
22+
mark_as_advanced(cppcheck_EXECUTABLE)

cmake/HealthCheck.cmake

+75
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,75 @@
1+
2+
include(${CMAKE_CURRENT_LIST_DIR}/Cppcheck.cmake)
3+
include(${CMAKE_CURRENT_LIST_DIR}/ClangTidy.cmake)
4+
5+
set(OPTION_CPPCHECK_ENABLED Off)
6+
set(OPTION_CLANG_TIDY_ENABLED Off)
7+
8+
# Function to register a target for enabled health checks
9+
function(perform_health_checks target)
10+
if(NOT TARGET check-all)
11+
add_custom_target(check-all)
12+
endif()
13+
14+
add_custom_target(check-${target})
15+
16+
if (OPTION_CPPCHECK_ENABLED)
17+
perform_cppcheck(cppcheck-${target} ${target} ${ARGN})
18+
add_dependencies(check-${target} cppcheck-${target})
19+
endif()
20+
21+
if (OPTION_CLANG_TIDY_ENABLED)
22+
perform_clang_tidy(clang-tidy-${target} ${target} ${ARGN})
23+
add_dependencies(check-${target} clang-tidy-${target})
24+
endif()
25+
26+
add_dependencies(check-all check-${target})
27+
endfunction()
28+
29+
# Enable or disable cppcheck for health checks
30+
function(enable_cppcheck status)
31+
if(NOT ${status})
32+
set(OPTION_CPPCHECK_ENABLED ${status} PARENT_SCOPE)
33+
message(STATUS "Check cppcheck skipped: Manually disabled")
34+
35+
return()
36+
endif()
37+
38+
find_package(cppcheck)
39+
40+
if(NOT cppcheck_FOUND)
41+
set(OPTION_CPPCHECK_ENABLED Off PARENT_SCOPE)
42+
message(STATUS "Check cppcheck skipped: cppcheck not found")
43+
44+
return()
45+
endif()
46+
47+
set(OPTION_CPPCHECK_ENABLED ${status} PARENT_SCOPE)
48+
message(STATUS "Check cppcheck")
49+
endfunction()
50+
51+
# Enable or disable clang-tidy for health checks
52+
function(enable_clang_tidy status)
53+
if(NOT ${status})
54+
set(OPTION_CLANG_TIDY_ENABLED ${status} PARENT_SCOPE)
55+
message(STATUS "Check clang-tidy skipped: Manually disabled")
56+
57+
return()
58+
endif()
59+
60+
find_package(clang_tidy)
61+
62+
if(NOT clang_tidy_FOUND)
63+
set(OPTION_CLANG_TIDY_ENABLED Off PARENT_SCOPE)
64+
message(STATUS "Check clang-tidy skipped: clang-tidy not found")
65+
66+
return()
67+
endif()
68+
69+
set(OPTION_CLANG_TIDY_ENABLED ${status} PARENT_SCOPE)
70+
message(STATUS "Check clang-tidy")
71+
72+
if(${CMAKE_VERSION} VERSION_GREATER "3.5" AND NOT CMAKE_EXPORT_COMPILE_COMMANDS)
73+
message(STATUS "clang-tidy makes use of the compile commands database. Make sure to configure CMake with -DCMAKE_EXPORT_COMPILE_COMMANDS=ON")
74+
endif()
75+
endfunction()

source/baselib/CMakeLists.txt

+11
Original file line numberDiff line numberDiff line change
@@ -182,6 +182,17 @@ target_link_libraries(${target}
182182
)
183183

184184

185+
#
186+
# Target Health
187+
#
188+
189+
perform_health_checks(
190+
${target}
191+
${sources}
192+
${headers}
193+
)
194+
195+
185196
#
186197
# Deployment
187198
#

source/examples/fibcmd/CMakeLists.txt

+10
Original file line numberDiff line numberDiff line change
@@ -104,6 +104,16 @@ target_link_libraries(${target}
104104
)
105105

106106

107+
#
108+
# Target Health
109+
#
110+
111+
perform_health_checks(
112+
${target}
113+
${sources}
114+
)
115+
116+
107117
#
108118
# Deployment
109119
#

source/examples/fibgui/CMakeLists.txt

+10
Original file line numberDiff line numberDiff line change
@@ -127,6 +127,16 @@ target_link_libraries(${target}
127127
)
128128

129129

130+
#
131+
# Target Health
132+
#
133+
134+
perform_health_checks(
135+
${target}
136+
${sources}
137+
)
138+
139+
130140
#
131141
# Deployment
132142
#

source/fiblib/CMakeLists.txt

+11
Original file line numberDiff line numberDiff line change
@@ -182,6 +182,17 @@ target_link_libraries(${target}
182182
)
183183

184184

185+
#
186+
# Target Health
187+
#
188+
189+
perform_health_checks(
190+
${target}
191+
${sources}
192+
${headers}
193+
)
194+
195+
185196
#
186197
# Deployment
187198
#

0 commit comments

Comments
 (0)