mirror of
https://github.com/SFML/CSFML.git
synced 2026-10-26 05:06:12 +01:00
Add tidy target for running clang-tidy
This commit is contained in:
1 parent
fe8d8a972c
commit
3316223629
5 files changed
+102
-13
No files matched your search
+10
@@ -0,0 +1,10 @@
|
||||
Checks: >
|
||||
bugprone-*,
|
||||
clang-analyzer-*,
|
||||
-bugprone-easily-swappable-parameters,
|
||||
-bugprone-narrowing-conversions,
|
||||
-clang-analyzer-core.NonNullParamChecker,
|
||||
-clang-analyzer-security.insecureAPI.strcpy,
|
||||
HeaderFilterRegex: '.*'
|
||||
WarningsAsErrors: '*'
|
||||
UseColor: true
|
||||
@@ -68,3 +68,38 @@ jobs:
|
||||
|
||||
- name: Test
|
||||
run: ctest --test-dir CSFML/build -C ${{matrix.type.name}} --output-on-failure
|
||||
|
||||
tidy:
|
||||
name: Analyze
|
||||
runs-on: macos-14
|
||||
|
||||
steps:
|
||||
- name: Install Dependencies
|
||||
run: |
|
||||
brew update
|
||||
brew install llvm ninja
|
||||
echo /opt/homebrew/opt/llvm/bin >> $GITHUB_PATH
|
||||
|
||||
- name: Checkout SFML
|
||||
uses: actions/checkout@v4
|
||||
with:
|
||||
repository: SFML/SFML
|
||||
ref: master
|
||||
path: SFML
|
||||
|
||||
- name: Configure SFML CMake
|
||||
run: cmake -S SFML -B SFML/build -GNinja -DCMAKE_INSTALL_PREFIX=SFML/install -DBUILD_SHARED_LIBS=TRUE -DCMAKE_BUILD_TYPE=Debug
|
||||
|
||||
- name: Build SFML
|
||||
run: cmake --build SFML/build --target install
|
||||
|
||||
- name: Checkout CSFML
|
||||
uses: actions/checkout@v4
|
||||
with:
|
||||
path: CSFML
|
||||
|
||||
- name: Configure CSFML CMake
|
||||
run: cmake -S CSFML -B CSFML/build -DBUILD_SHARED_LIBS=TRUE -DCSFML_BUILD_EXAMPLES=TRUE -DCSFML_BUILD_TEST_SUITE=TRUE -DSFML_DIR=$GITHUB_WORKSPACE/SFML/install/lib/cmake/SFML -DCMAKE_BUILD_TYPE=Debug -DCMAKE_EXPORT_COMPILE_COMMANDS=TRUE
|
||||
|
||||
- name: Tidy
|
||||
run: cmake --build CSFML/build --target tidy
|
||||
@@ -95,6 +95,11 @@ install(DIRECTORY include/
|
||||
install(FILES license.md DESTINATION ${INSTALL_MISC_DIR})
|
||||
install(FILES readme.md DESTINATION ${INSTALL_MISC_DIR})
|
||||
|
||||
# stop configuration if consuming CSFML as a subdirectory
|
||||
if(NOT PROJECT_IS_TOP_LEVEL)
|
||||
return()
|
||||
endif()
|
||||
|
||||
# add an option for building the examples
|
||||
csfml_set_option(CSFML_BUILD_EXAMPLES FALSE BOOL "TRUE to build the CSFML examples, FALSE to ignore them")
|
||||
if(CSFML_BUILD_EXAMPLES)
|
||||
@@ -107,3 +112,8 @@ if(CSFML_BUILD_TEST_SUITE)
|
||||
enable_testing()
|
||||
add_subdirectory(test)
|
||||
endif()
|
||||
|
||||
csfml_set_option(CLANG_TIDY_EXECUTABLE clang-tidy STRING "Override clang-tidy executable, requires minimum version 14")
|
||||
add_custom_target(tidy
|
||||
COMMAND ${CMAKE_COMMAND} -DCLANG_TIDY_EXECUTABLE=${CLANG_TIDY_EXECUTABLE} -DPROJECT_BINARY_DIR=${PROJECT_BINARY_DIR} -P ./cmake/Tidy.cmake
|
||||
WORKING_DIRECTORY ${PROJECT_SOURCE_DIR} VERBATIM)
|
||||
@@ -0,0 +1,34 @@
|
||||
# Check executable exists
|
||||
if(NOT EXISTS ${CLANG_TIDY_EXECUTABLE})
|
||||
find_program(CLANG_TIDY_EXEC_TEMP ${CLANG_TIDY_EXECUTABLE})
|
||||
if(CLANG_TIDY_EXEC_TEMP)
|
||||
set(CLANG_TIDY_EXECUTABLE ${CLANG_TIDY_EXEC_TEMP})
|
||||
unset(CLANG_TIDY_EXEC_TEMP)
|
||||
else()
|
||||
message(FATAL_ERROR "Unable to find clang-tidy executable: \"${CLANG_TIDY_EXECUTABLE}\"")
|
||||
endif()
|
||||
endif()
|
||||
|
||||
# Check executable version
|
||||
execute_process(COMMAND ${CLANG_TIDY_EXECUTABLE} --version OUTPUT_VARIABLE CLANG_TIDY_VERSION)
|
||||
string(REGEX MATCH "version ([0-9]+)" CLANG_TIDY_VERSION ${CLANG_TIDY_VERSION})
|
||||
unset(CLANG_TIDY_VERSION)
|
||||
if(CMAKE_MATCH_1 GREATER_EQUAL 14)
|
||||
message(STATUS "Using clang-tidy version ${CMAKE_MATCH_1}")
|
||||
else()
|
||||
message(FATAL_ERROR "clang-tidy version ${CMAKE_MATCH_1} is too low")
|
||||
endif()
|
||||
|
||||
# Find Python and run-clang-tidy script
|
||||
find_package(Python 3 REQUIRED)
|
||||
|
||||
find_program(RUN_CLANG_TIDY run-clang-tidy)
|
||||
if(NOT RUN_CLANG_TIDY)
|
||||
message(FATAL_ERROR "Failed to find run-clang-tidy script")
|
||||
endif()
|
||||
|
||||
# Run
|
||||
execute_process(COMMAND ${Python_EXECUTABLE} ${RUN_CLANG_TIDY} -clang-tidy-binary ${CLANG_TIDY_EXECUTABLE} -quiet -p ${PROJECT_BINARY_DIR} RESULTS_VARIABLE EXIT_CODE)
|
||||
if(NOT EXIT_CODE STREQUAL 0)
|
||||
message(FATAL_ERROR "Analysis failed")
|
||||
endif()
|
||||
+13
-13
@@ -36,7 +36,7 @@
|
||||
#define CSFML_CHECK(object_) \
|
||||
do \
|
||||
{ \
|
||||
if (object_ == nullptr) \
|
||||
if ((object_) == nullptr) \
|
||||
{ \
|
||||
sf::err() << "SFML warning: trying to use a null " #object_ " object\n"; \
|
||||
return; \
|
||||
@@ -49,7 +49,7 @@
|
||||
{ \
|
||||
if (object_) \
|
||||
{ \
|
||||
(object_->This.function_); \
|
||||
((object_)->This.function_); \
|
||||
} \
|
||||
else \
|
||||
{ \
|
||||
@@ -63,7 +63,7 @@
|
||||
{ \
|
||||
if (object_) \
|
||||
{ \
|
||||
(object_->This->function_); \
|
||||
((object_)->This->function_); \
|
||||
} \
|
||||
else \
|
||||
{ \
|
||||
@@ -75,7 +75,7 @@
|
||||
#define CSFML_CHECK_RETURN(object_, default_) \
|
||||
do \
|
||||
{ \
|
||||
if (object_ == nullptr) \
|
||||
if ((object_) == nullptr) \
|
||||
{ \
|
||||
sf::err() << "SFML warning: trying to use a null " #object_ " object\n"; \
|
||||
return default_; \
|
||||
@@ -86,7 +86,7 @@
|
||||
#define CSFML_CALL_RETURN(object_, function_, default_) \
|
||||
if (object_) \
|
||||
{ \
|
||||
return (object_->This.function_); \
|
||||
return ((object_)->This.function_); \
|
||||
} \
|
||||
else \
|
||||
{ \
|
||||
@@ -97,7 +97,7 @@
|
||||
#define CSFML_CALL_PTR_RETURN(object_, function_, default_) \
|
||||
if (object_) \
|
||||
{ \
|
||||
return (object_->This->function_); \
|
||||
return ((object_)->This->function_); \
|
||||
} \
|
||||
else \
|
||||
{ \
|
||||
@@ -110,24 +110,24 @@
|
||||
#define CSFML_CHECK(object_)
|
||||
|
||||
#define CSFML_CALL(object_, function_) \
|
||||
(object_->This.function_)
|
||||
((object_)->This.function_)
|
||||
|
||||
#define CSFML_CALL_PTR(object_, function_) \
|
||||
(object_->This->function_)
|
||||
((object_)->This->function_)
|
||||
|
||||
#define CSFML_CHECK_RETURN(object_, default_) \
|
||||
(void)default_;
|
||||
(void)(default_);
|
||||
|
||||
#define CSFML_CALL_RETURN(object_, function_, default_) \
|
||||
{ \
|
||||
(void)default_; \
|
||||
return (object_->This.function_); \
|
||||
(void)(default_); \
|
||||
return ((object_)->This.function_); \
|
||||
}
|
||||
|
||||
#define CSFML_CALL_PTR_RETURN(object_, function_, default_) \
|
||||
{ \
|
||||
(void)default_; \
|
||||
return (object_->This->function_); \
|
||||
(void)(default_); \
|
||||
return ((object_)->This->function_); \
|
||||
}
|
||||
|
||||
#endif
|
||||
|
||||
Reference in new issue
Block a user