spine-runtimes/formatters/format-cpp.sh

107 lines
2.8 KiB
Bash
Executable File

#!/bin/bash
set -e
# Format C/C++ files with clang-format
echo "Formatting C/C++ files..."
dir="$( cd "$( dirname "${BASH_SOURCE[0]}" )" >/dev/null && pwd )"
# Store original directory
pushd "$dir" > /dev/null
if [ ! -f ".clang-format" ]; then
echo "Error: .clang-format not found in formatters directory"
popd > /dev/null
exit 1
fi
# Define C/C++ source directories - be specific to avoid engine sources
cpp_dirs=(
# spine-cpp
"../spine-cpp/include/spine"
"../spine-cpp/src/spine"
"../spine-cpp/spine-cpp-lite"
"../spine-cpp/tests"
# spine-c
"../spine-c/include"
"../spine-c/src"
"../spine-c/src/generated"
"../spine-c/tests"
# spine-godot
"../spine-godot/spine_godot"
# spine-ue
"../spine-ue/Source/SpineUE"
"../spine-ue/Plugins/SpinePlugin/Source/SpinePlugin/Public"
"../spine-ue/Plugins/SpinePlugin/Source/SpinePlugin/Private"
"../spine-ue/Plugins/SpinePlugin/Source/SpineEditorPlugin/Public"
"../spine-ue/Plugins/SpinePlugin/Source/SpineEditorPlugin/Private"
# spine-glfw
"../spine-glfw/src"
"../spine-glfw/example"
# spine-sdl
"../spine-sdl/src"
"../spine-sdl/example"
# spine-sfml
"../spine-sfml/c/src/spine"
"../spine-sfml/c/example"
"../spine-sfml/cpp/src/spine"
"../spine-sfml/cpp/example"
# spine-cocos2dx
"../spine-cocos2dx/spine-cocos2dx/src/spine"
"../spine-cocos2dx/example/Classes"
# spine-ios
"../spine-ios/Sources/SpineCppLite"
"../spine-ios/Sources/SpineCppLite/include"
"../spine-ios/Sources/SpineShadersStructs"
"../spine-ios/Example/Spine iOS Example"
# spine-flutter
"../spine-flutter/ios/Classes"
"../spine-flutter/macos/Classes"
"../spine-flutter/src"
)
# Collect all C/C++ files from specified directories
files=()
for cpp_dir in "${cpp_dirs[@]}"; do
if [ -d "$cpp_dir" ]; then
while IFS= read -r -d '' file; do
files+=("$file")
done < <(find "$cpp_dir" \( -name "*.c" -o -name "*.cpp" -o -name "*.h" \) \
-not -path "*/.*" \
-not -path "*/build/*" \
-not -path "*/cmake-build-*/*" \
-not -path "*/third_party/*" \
-not -path "*/external/*" \
-not -type l \
-print0)
fi
done
echo "Found ${#files[@]} C/C++ files to format"
# Format all files in one call - works for both Docker and native
echo "Formatting ${#files[@]} files..."
if ! clang-format -i -style=file:".clang-format" "${files[@]}" 2>&1; then
echo "Error: clang-format failed"
errors=1
else
errors=0
fi
if [ $errors -gt 0 ]; then
echo "Completed with $errors errors"
fi
echo "C/C++ formatting complete"
# Return to original directory
popd > /dev/null