diff --git a/CMakeLists.txt b/CMakeLists.txt index 457c4b1..5210901 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -46,14 +46,23 @@ target_compile_features(pp_project_options INTERFACE cxx_std_23) add_library(pp_project_warnings INTERFACE) pp_configure_project_warnings(pp_project_warnings) -add_library(pp_vendor_tinyxml2 STATIC - libs/tinyxml2/tinyxml2.cpp) -target_include_directories(pp_vendor_tinyxml2 - SYSTEM PUBLIC - "${CMAKE_CURRENT_SOURCE_DIR}/libs/tinyxml2") -target_link_libraries(pp_vendor_tinyxml2 - PUBLIC - pp_project_options) +if(PP_USE_VCPKG_TINYXML2) + find_package(tinyxml2 CONFIG REQUIRED) + add_library(pp_xml_tinyxml2 INTERFACE) + target_link_libraries(pp_xml_tinyxml2 + INTERFACE + tinyxml2::tinyxml2) +else() + add_library(pp_vendor_tinyxml2 STATIC + libs/tinyxml2/tinyxml2.cpp) + target_include_directories(pp_vendor_tinyxml2 + SYSTEM PUBLIC + "${CMAKE_CURRENT_SOURCE_DIR}/libs/tinyxml2") + target_link_libraries(pp_vendor_tinyxml2 + PUBLIC + pp_project_options) + add_library(pp_xml_tinyxml2 ALIAS pp_vendor_tinyxml2) +endif() add_custom_target(panopainter_modernization_status COMMAND "${CMAKE_COMMAND}" -E echo "PanoPainter modernization scaffold configured." @@ -162,7 +171,7 @@ target_link_libraries(pp_ui_core pp_foundation pp_project_options PRIVATE - pp_vendor_tinyxml2 + pp_xml_tinyxml2 pp_project_warnings) if(PP_BUILD_TOOLS) diff --git a/CMakePresets.json b/CMakePresets.json index bb7dedc..ffd13d5 100644 --- a/CMakePresets.json +++ b/CMakePresets.json @@ -50,7 +50,10 @@ "inherits": "platform-headless-base", "displayName": "Windows MSVC vcpkg headless", "architecture": "x64", - "toolchainFile": "$env{VCPKG_ROOT}/scripts/buildsystems/vcpkg.cmake" + "toolchainFile": "$env{VCPKG_ROOT}/scripts/buildsystems/vcpkg.cmake", + "cacheVariables": { + "PP_USE_VCPKG_TINYXML2": "ON" + } }, { "name": "windows-clangcl-asan", diff --git a/cmake/PanoPainterOptions.cmake b/cmake/PanoPainterOptions.cmake index ca6c0bd..954d2fb 100644 --- a/cmake/PanoPainterOptions.cmake +++ b/cmake/PanoPainterOptions.cmake @@ -14,6 +14,7 @@ option(PP_ENABLE_TSAN "Enable ThreadSanitizer for headless targets where support option(PP_ENABLE_MSVC_ANALYZE "Enable MSVC static analysis." OFF) option(PP_ENABLE_CLANG_TIDY "Enable clang-tidy integration." OFF) option(PP_ENABLE_CPPCHECK "Enable cppcheck integration." OFF) +option(PP_USE_VCPKG_TINYXML2 "Use the vcpkg tinyxml2 package for component targets." OFF) set(PP_ANDROID_FLAVOR "standard" CACHE STRING "Android package flavor: standard, quest, or focus.") set_property(CACHE PP_ANDROID_FLAVOR PROPERTY STRINGS standard quest focus) diff --git a/docs/modernization/build-inventory.md b/docs/modernization/build-inventory.md index 9ff688f..53d9773 100644 --- a/docs/modernization/build-inventory.md +++ b/docs/modernization/build-inventory.md @@ -95,6 +95,9 @@ Known local toolchain state: - `windows-msvc-vcpkg-headless` validates manifest install/configure/build/test for the current headless component matrix; see DEBT-0007 for remaining app and platform triplet migration. +- `pp_ui_core` consumes vcpkg tinyxml2 only when `PP_USE_VCPKG_TINYXML2=ON` + through the vcpkg preset; default and Android validation still use the + retained vendored fallback tracked by DEBT-0012. Known warnings after the current CMake app build: diff --git a/docs/modernization/debt.md b/docs/modernization/debt.md index 2f42b3c..b152cd5 100644 --- a/docs/modernization/debt.md +++ b/docs/modernization/debt.md @@ -30,7 +30,7 @@ agent or engineer to remove them without reconstructing context from chat. | DEBT-0009 | Open | Modernization | Android root CMake validation currently builds headless targets only, not APK/package variants | Platform app entrypoints still live in legacy Gradle/CMake projects and need Phase 6 alignment | `powershell -ExecutionPolicy Bypass -File scripts\automation\platform-build.ps1 -Presets android-arm64` | Android standard, Quest, and Focus/Wave package targets consume shared component targets and have package smoke commands | | DEBT-0010 | Open | Modernization | `pp_document` is a pure layer/frame/document/undo-history model but is not yet wired to legacy `Canvas`, PPI load/save, selection masks, or legacy action commands | Keep extraction incremental while preserving app behavior | `ctest --preset desktop-fast --build-config Debug`; `pano_cli create-document --width 64 --height 32 --layers 2` | Legacy document behavior is represented by `pp_document` tests and the app consumes it through a boundary/facade | | DEBT-0011 | Open | Modernization | `package-smoke` validates the Windows CMake app artifact only, not AppX/APK/Apple/WebGL package outputs | Platform package targets are not migrated to root CMake yet | `powershell -ExecutionPolicy Bypass -File scripts\automation\package-smoke.ps1 -Preset windows-msvc-default -Configuration Debug` | Package-smoke covers Windows AppX, Android APK variants, Apple bundles, and WebGL output where local toolchains are present | -| DEBT-0012 | Open | Modernization | `pp_vendor_tinyxml2` compiles the retained vendored tinyxml2 copy for `pp_ui_core` layout parsing | vcpkg is not validated yet, but layout parsing needs a structured XML parser now | `ctest --preset desktop-fast --build-config Debug`; `powershell -ExecutionPolicy Bypass -File scripts\automation\platform-build.ps1 -Presets android-arm64` | Replace with vcpkg tinyxml2 target once desktop and mobile triplets are validated | +| DEBT-0012 | Open | Modernization | `pp_ui_core` uses vcpkg tinyxml2 on `windows-msvc-vcpkg-headless`, but retains `pp_vendor_tinyxml2` for default and unproven platform presets | Mobile/AppX/Apple triplets and app packaging still need validation before removing the vendored fallback | `ctest --preset desktop-fast-vcpkg --build-config Debug`; `ctest --preset desktop-fast --build-config Debug`; `powershell -ExecutionPolicy Bypass -File scripts\automation\platform-build.ps1 -Presets android-arm64` | All supported presets consume vcpkg tinyxml2 or document a permanent vendored exception | | DEBT-0013 | Open | Modernization | `pp_assets` and `pano_cli inspect-project` recognize only the fixed PPI header, not thumbnail bytes or the project body | Full PPI parsing requires staged extraction of legacy `Canvas` serialization and image/layer payload handling | `ctest --preset desktop-fast --build-config Debug`; `pp_assets_ppi_header_tests` | Full PPI load/save fixtures cover thumbnail, layers, frames, metadata, corrupt payloads, and round-trip compatibility | ## Closed Debt diff --git a/docs/modernization/roadmap.md b/docs/modernization/roadmap.md index 5e42889..d0b4281 100644 --- a/docs/modernization/roadmap.md +++ b/docs/modernization/roadmap.md @@ -189,10 +189,10 @@ Gate: Goal: turn the build into an error-finding system before deep refactors. Status: in progress. Initial warning/sanitizer option targets, `vcpkg.json`, -a validated Windows headless vcpkg preset, and a headless -`panopainter_validate_shaders` target exist. Dependency migration is not -complete until component targets consume vcpkg packages and mobile/Apple -triplets are validated. +a validated Windows headless vcpkg preset, `pp_ui_core` support for vcpkg +tinyxml2 on that preset, and a headless `panopainter_validate_shaders` target +exist. Dependency migration is not complete until remaining component +dependencies and mobile/Apple triplets are validated. Implementation tasks: @@ -574,6 +574,9 @@ Results: - `windows-msvc-vcpkg-headless` configured through the Visual Studio bundled vcpkg root, installed the manifest dependencies, built the headless component matrix, and passed `desktop-fast-vcpkg`. +- `pp_ui_core` built and tested against vcpkg tinyxml2 on + `windows-msvc-vcpkg-headless` and against the vendored fallback on + `windows-msvc-default` and `android-arm64`. - `PanoPainter.exe` built through CMake at `out/build/windows-msvc-default/Debug/PanoPainter.exe`. - PowerShell build/test automation wrappers return JSON summaries and passed