From 1a10d185a3224274cbca53cdad489e585e0749b5 Mon Sep 17 00:00:00 2001 From: Mario Zechner Date: Sun, 20 Jul 2025 22:42:16 +0200 Subject: [PATCH] [cpp] Smoke tests --- spine-cpp/CMakeLists.txt | 38 ++++----- spine-cpp/README.md | 8 +- spine-cpp/src/{nostdcpp.cpp => no-cpprt.cpp} | 0 spine-cpp/tests/test-linux-docker.sh | 84 ++++++++++++++++++++ spine-cpp/tests/test.sh | 4 +- 5 files changed, 109 insertions(+), 25 deletions(-) rename spine-cpp/src/{nostdcpp.cpp => no-cpprt.cpp} (100%) create mode 100755 spine-cpp/tests/test-linux-docker.sh diff --git a/spine-cpp/CMakeLists.txt b/spine-cpp/CMakeLists.txt index de66726d2..7511c4a27 100644 --- a/spine-cpp/CMakeLists.txt +++ b/spine-cpp/CMakeLists.txt @@ -9,8 +9,8 @@ include_directories(include) file(GLOB INCLUDES "include/**/*.h") file(GLOB ALL_SOURCES "src/**/*.cpp") -# Exclude nostdcpp.cpp from regular build -list(FILTER ALL_SOURCES EXCLUDE REGEX "src/nostdcpp\\.cpp$") +# Exclude no-cpprt.cpp from regular build +list(FILTER ALL_SOURCES EXCLUDE REGEX "src/no-cpprt\\.cpp$") set(SOURCES ${ALL_SOURCES}) add_library(spine-cpp STATIC ${SOURCES} ${INCLUDES}) @@ -20,10 +20,10 @@ if(SPINE_NO_FILE_IO) target_compile_definitions(spine-cpp PRIVATE SPINE_NO_FILE_IO) endif() -# nostdcpp variant (no C++ standard library) -set(NOSTDCPP_SOURCES ${SOURCES} "src/nostdcpp.cpp") -add_library(spine-cpp-nostdcpp STATIC ${NOSTDCPP_SOURCES} ${INCLUDES}) -target_include_directories(spine-cpp-nostdcpp PUBLIC include) +# no-cpprt variant (no C++ runtime) +set(NO_CPPRT_SOURCES ${SOURCES} "src/no-cpprt.cpp") +add_library(spine-cpp-no-cpprt STATIC ${NO_CPPRT_SOURCES} ${INCLUDES}) +target_include_directories(spine-cpp-no-cpprt PUBLIC include) # Install target install(TARGETS spine-cpp EXPORT spine-cpp_TARGETS DESTINATION dist/lib) @@ -44,18 +44,18 @@ if(CMAKE_SOURCE_DIR STREQUAL CMAKE_CURRENT_SOURCE_DIR) target_compile_definitions(headless-test PRIVATE SPINE_NO_FILE_IO) endif() - # Configure nostdcpp linking for different platforms - add_executable(headless-test-nostdcpp ${CMAKE_CURRENT_SOURCE_DIR}/tests/HeadlessTest.cpp) - target_link_libraries(headless-test-nostdcpp spine-cpp-nostdcpp) + # Configure no-cpprt linking for different platforms + add_executable(headless-test-no-cpprt ${CMAKE_CURRENT_SOURCE_DIR}/tests/HeadlessTest.cpp) + target_link_libraries(headless-test-no-cpprt spine-cpp-no-cpprt) if(MSVC) - target_link_options(headless-test-nostdcpp PRIVATE /NODEFAULTLIB) - target_link_libraries(headless-test-nostdcpp msvcrt kernel32) + target_link_options(headless-test-no-cpprt PRIVATE /NODEFAULTLIB) + target_link_libraries(headless-test-no-cpprt msvcrt kernel32) elseif(CMAKE_CXX_COMPILER_ID MATCHES "Clang") - target_link_options(headless-test-nostdcpp PRIVATE -nostdlib++ -lc) + target_link_options(headless-test-no-cpprt PRIVATE -nostdlib++ -lc) else() - target_link_options(headless-test-nostdcpp PRIVATE -nodefaultlibs) - target_link_libraries(headless-test-nostdcpp -lm -lc -lgcc) + target_link_options(headless-test-no-cpprt PRIVATE -nodefaultlibs) + target_link_libraries(headless-test-no-cpprt -lm -lc -lgcc) endif() # Static variants (Linux only) @@ -64,14 +64,14 @@ if(CMAKE_SOURCE_DIR STREQUAL CMAKE_CURRENT_SOURCE_DIR) target_link_libraries(headless-test-static spine-cpp) target_link_options(headless-test-static PRIVATE -static) - add_executable(headless-test-nostdcpp-static ${CMAKE_CURRENT_SOURCE_DIR}/tests/HeadlessTest.cpp) - target_link_libraries(headless-test-nostdcpp-static spine-cpp-nostdcpp) - target_link_options(headless-test-nostdcpp-static PRIVATE -static -static-libgcc -Wl,--exclude-libs,libstdc++.a) - target_link_libraries(headless-test-nostdcpp-static -lm -lc) + add_executable(headless-test-no-cpprt-static ${CMAKE_CURRENT_SOURCE_DIR}/tests/HeadlessTest.cpp) + target_link_libraries(headless-test-no-cpprt-static spine-cpp-no-cpprt) + target_link_options(headless-test-no-cpprt-static PRIVATE -static -static-libgcc -Wl,--exclude-libs,libstdc++.a) + target_link_libraries(headless-test-no-cpprt-static -lm -lc) if(SPINE_NO_FILE_IO) target_compile_definitions(headless-test-static PRIVATE SPINE_NO_FILE_IO) - target_compile_definitions(headless-test-nostdcpp-static PRIVATE SPINE_NO_FILE_IO) + target_compile_definitions(headless-test-no-cpprt-static PRIVATE SPINE_NO_FILE_IO) endif() endif() endif() \ No newline at end of file diff --git a/spine-cpp/README.md b/spine-cpp/README.md index 9b2c8edcc..a9b3f3cf6 100644 --- a/spine-cpp/README.md +++ b/spine-cpp/README.md @@ -18,6 +18,10 @@ spine-cpp works with data exported from spine 4.3.xx. spine-cpp supports all spine features. +## Usage + +### [Please see the spine-cpp guide for full documentation](http://esotericsoftware.com/spine-cpp) + ## Setup ### Manual Copy @@ -42,10 +46,6 @@ add_subdirectory(${spine-runtimes_SOURCE_DIR}/spine-cpp ${spine-runtimes_BINARY_ target_link_libraries(your_target PRIVATE spine-cpp) ``` -## Usage - -### [Please see the spine-cpp guide for full documentation](http://esotericsoftware.com/spine-cpp) - ## Runtimes extending spine-cpp - [spine-glfw](../spine-glfw) - [spine-sdl](../spine-sdl) diff --git a/spine-cpp/src/nostdcpp.cpp b/spine-cpp/src/no-cpprt.cpp similarity index 100% rename from spine-cpp/src/nostdcpp.cpp rename to spine-cpp/src/no-cpprt.cpp diff --git a/spine-cpp/tests/test-linux-docker.sh b/spine-cpp/tests/test-linux-docker.sh new file mode 100755 index 000000000..45ab4e94f --- /dev/null +++ b/spine-cpp/tests/test-linux-docker.sh @@ -0,0 +1,84 @@ +#!/bin/bash +# Spine-C++ Docker Test Runner +# +# Runs the full spine-cpp test suite inside a Linux Docker container. +# This ensures consistent testing across different host environments. + +set -e + +# Change to spine-runtimes root directory (parent of spine-cpp) +cd "$(dirname "$0")/../.." + +# Source logging utilities +source formatters/logging/logging.sh + +log_title "Spine-C++ Docker Test" +log_detail "Running tests in Linux container" + +# Detect existing build type +BUILD_TYPE="" +cd spine-cpp +if [ -f "build/CMakeCache.txt" ]; then + if grep -q "CMAKE_BUILD_TYPE:STRING=Release" build/CMakeCache.txt 2>/dev/null; then + BUILD_TYPE="release" + elif grep -q "CMAKE_BUILD_TYPE:STRING=Debug" build/CMakeCache.txt 2>/dev/null; then + BUILD_TYPE="debug" + fi + log_detail "Detected existing build type: ${BUILD_TYPE:-unknown}" +fi +cd .. + +# Use a lightweight Linux image with build tools +DOCKER_IMAGE="gcc:12" + +log_action "Pulling Docker image" +if docker pull "$DOCKER_IMAGE" > /dev/null 2>&1; then + log_ok +else + log_fail "Failed to pull Docker image" + exit 1 +fi + +log_action "Running tests in container" +if DOCKER_OUTPUT=$(docker run --rm \ + -v "$(pwd)":/workspace \ + -w /workspace/spine-cpp \ + "$DOCKER_IMAGE" \ + bash -c "apt-get update -qq && apt-get install -y -qq cmake ninja-build && ./tests/test.sh" 2>&1); then + log_ok + + log_action "Analyzing executables" + if ANALYSIS_OUTPUT=$(docker run --rm \ + -v "$(pwd)":/workspace \ + -w /workspace/spine-cpp \ + "$DOCKER_IMAGE" \ + bash -c "echo '=== EXECUTABLE ANALYSIS ==='; for exe in build/headless-test*; do if [ -f \"\$exe\" ] && [ -x \"\$exe\" ]; then echo; echo \"--- \$(basename \"\$exe\") ---\"; echo \"Size: \$(du -h \"\$exe\" | cut -f1)\"; echo \"Dependencies:\"; ldd \"\$exe\" 2>/dev/null || echo 'No dynamic dependencies'; fi; done" 2>&1); then + log_ok + log_detail "$ANALYSIS_OUTPUT" + else + log_fail + log_error_output "$ANALYSIS_OUTPUT" + fi + + log_action "Restoring local build directory" + cd spine-cpp + if rm -rf build; then + if [ -n "$BUILD_TYPE" ]; then + log_detail "Rebuilding $BUILD_TYPE configuration" + if ./build.sh clean "$BUILD_TYPE" > /dev/null 2>&1; then + log_ok "Local build directory restored ($BUILD_TYPE)" + else + log_detail "Warning: Could not restore $BUILD_TYPE build" + fi + else + log_detail "No previous build detected, leaving clean" + log_ok "Build directory cleaned" + fi + else + log_detail "Warning: Could not remove build directory" + fi +else + log_fail + log_error_output "$DOCKER_OUTPUT" + exit 1 +fi \ No newline at end of file diff --git a/spine-cpp/tests/test.sh b/spine-cpp/tests/test.sh index 8a5917cf6..3518c4f7e 100755 --- a/spine-cpp/tests/test.sh +++ b/spine-cpp/tests/test.sh @@ -3,9 +3,9 @@ # # Tests all spine-cpp build variants with spineboy example data: # - headless-test (regular dynamic) -# - headless-test-nostdcpp (nostdcpp dynamic) +# - headless-test-no-cpprt (no-cpprt dynamic) # - headless-test-static (regular static, Linux only) -# - headless-test-nostdcpp-static (nostdcpp static, Linux only) +# - headless-test-no-cpprt-static (no-cpprt static, Linux only) set -e