mirror of
https://github.com/SFML/CSFML.git
synced 2026-10-28 05:46: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
|
- name: Test
|
||||||
run: ctest --test-dir CSFML/build -C ${{matrix.type.name}} --output-on-failure
|
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 license.md DESTINATION ${INSTALL_MISC_DIR})
|
||||||
install(FILES readme.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
|
# 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")
|
csfml_set_option(CSFML_BUILD_EXAMPLES FALSE BOOL "TRUE to build the CSFML examples, FALSE to ignore them")
|
||||||
if(CSFML_BUILD_EXAMPLES)
|
if(CSFML_BUILD_EXAMPLES)
|
||||||
@@ -107,3 +112,8 @@ if(CSFML_BUILD_TEST_SUITE)
|
|||||||
enable_testing()
|
enable_testing()
|
||||||
add_subdirectory(test)
|
add_subdirectory(test)
|
||||||
endif()
|
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_) \
|
#define CSFML_CHECK(object_) \
|
||||||
do \
|
do \
|
||||||
{ \
|
{ \
|
||||||
if (object_ == nullptr) \
|
if ((object_) == nullptr) \
|
||||||
{ \
|
{ \
|
||||||
sf::err() << "SFML warning: trying to use a null " #object_ " object\n"; \
|
sf::err() << "SFML warning: trying to use a null " #object_ " object\n"; \
|
||||||
return; \
|
return; \
|
||||||
@@ -49,7 +49,7 @@
|
|||||||
{ \
|
{ \
|
||||||
if (object_) \
|
if (object_) \
|
||||||
{ \
|
{ \
|
||||||
(object_->This.function_); \
|
((object_)->This.function_); \
|
||||||
} \
|
} \
|
||||||
else \
|
else \
|
||||||
{ \
|
{ \
|
||||||
@@ -63,7 +63,7 @@
|
|||||||
{ \
|
{ \
|
||||||
if (object_) \
|
if (object_) \
|
||||||
{ \
|
{ \
|
||||||
(object_->This->function_); \
|
((object_)->This->function_); \
|
||||||
} \
|
} \
|
||||||
else \
|
else \
|
||||||
{ \
|
{ \
|
||||||
@@ -75,7 +75,7 @@
|
|||||||
#define CSFML_CHECK_RETURN(object_, default_) \
|
#define CSFML_CHECK_RETURN(object_, default_) \
|
||||||
do \
|
do \
|
||||||
{ \
|
{ \
|
||||||
if (object_ == nullptr) \
|
if ((object_) == nullptr) \
|
||||||
{ \
|
{ \
|
||||||
sf::err() << "SFML warning: trying to use a null " #object_ " object\n"; \
|
sf::err() << "SFML warning: trying to use a null " #object_ " object\n"; \
|
||||||
return default_; \
|
return default_; \
|
||||||
@@ -86,7 +86,7 @@
|
|||||||
#define CSFML_CALL_RETURN(object_, function_, default_) \
|
#define CSFML_CALL_RETURN(object_, function_, default_) \
|
||||||
if (object_) \
|
if (object_) \
|
||||||
{ \
|
{ \
|
||||||
return (object_->This.function_); \
|
return ((object_)->This.function_); \
|
||||||
} \
|
} \
|
||||||
else \
|
else \
|
||||||
{ \
|
{ \
|
||||||
@@ -97,7 +97,7 @@
|
|||||||
#define CSFML_CALL_PTR_RETURN(object_, function_, default_) \
|
#define CSFML_CALL_PTR_RETURN(object_, function_, default_) \
|
||||||
if (object_) \
|
if (object_) \
|
||||||
{ \
|
{ \
|
||||||
return (object_->This->function_); \
|
return ((object_)->This->function_); \
|
||||||
} \
|
} \
|
||||||
else \
|
else \
|
||||||
{ \
|
{ \
|
||||||
@@ -110,24 +110,24 @@
|
|||||||
#define CSFML_CHECK(object_)
|
#define CSFML_CHECK(object_)
|
||||||
|
|
||||||
#define CSFML_CALL(object_, function_) \
|
#define CSFML_CALL(object_, function_) \
|
||||||
(object_->This.function_)
|
((object_)->This.function_)
|
||||||
|
|
||||||
#define CSFML_CALL_PTR(object_, function_) \
|
#define CSFML_CALL_PTR(object_, function_) \
|
||||||
(object_->This->function_)
|
((object_)->This->function_)
|
||||||
|
|
||||||
#define CSFML_CHECK_RETURN(object_, default_) \
|
#define CSFML_CHECK_RETURN(object_, default_) \
|
||||||
(void)default_;
|
(void)(default_);
|
||||||
|
|
||||||
#define CSFML_CALL_RETURN(object_, function_, default_) \
|
#define CSFML_CALL_RETURN(object_, function_, default_) \
|
||||||
{ \
|
{ \
|
||||||
(void)default_; \
|
(void)(default_); \
|
||||||
return (object_->This.function_); \
|
return ((object_)->This.function_); \
|
||||||
}
|
}
|
||||||
|
|
||||||
#define CSFML_CALL_PTR_RETURN(object_, function_, default_) \
|
#define CSFML_CALL_PTR_RETURN(object_, function_, default_) \
|
||||||
{ \
|
{ \
|
||||||
(void)default_; \
|
(void)(default_); \
|
||||||
return (object_->This->function_); \
|
return ((object_)->This->function_); \
|
||||||
}
|
}
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
|||||||
Reference in new issue
Block a user