Skip to content

Import VolumeRover3 application from libcvc - #13

Merged
transfix merged 1 commit into
masterfrom
feat/import-volrover3-from-libcvc
Jul 16, 2026
Merged

Import VolumeRover3 application from libcvc#13
transfix merged 1 commit into
masterfrom
feat/import-volrover3-from-libcvc

Conversation

@transfix

Copy link
Copy Markdown
Owner

What this is

Executes goal G4 (near-term-goals-2026-07-15): the VolumeRover3 application moves out of transfix/libcvc into this repository (at volrover3/), which will eventually supersede VolRover 2.0. libcvc stays a lean SDK. Counterpart PR: transfix/libcvc#102

History decision (flagged for review)

Plain copy, no git-history rewrite. Sources/headers/icons/docs are imported verbatim from libcvc commit 03b4f961f834c46fcd19b9b4b633dc4c1c8bdcfc (master); the provenance is recorded in the import commit message. Their full history remains in transfix/libcvc. Object if you would rather have the history carried over via filter-repo.

VolRover 2.0 coexistence guarantee

VolRover 2.0 target unchanged and still builds; volrover3 is additive behind BUILD_VOLROVER3 (default OFF). No 2.0 sources, targets, or CMake wiring were removed, renamed, or rewired — the only top-level CMakeLists.txt change is a new gated block appended at the end. Verified: a fresh default configure (cmake -B build -G Ninja -DCMAKE_BUILD_TYPE=Release, BUILD_VOLROVER3 unset) configures and fully builds bin/VolumeRover2 (448/448 targets) on this branch.

Layout and CMake design

  • volrover3/ — app sources (verbatim), tests/, inc/volrover3/ (so #include <volrover3/...> keeps working), share/ (desktop file + icons), cmake/Info.plist.in, docs/ (GRAPHICS_SYSTEM, GRAPHICS_DATA_DRIVEN_UPDATES, APPSTATE_CALLBACKS)
  • libcvc is consumed as an external SDK: find_package(cvc CONFIG REQUIRED) → links the exported, namespaced cvc::cvc target (libcvc installs lib/cmake/cvc/cvcConfig.cmake + cvcTargets.cmake, namespace cvc::). The in-tree build already linked an alias with the same name, so the link lists are unchanged.
  • Own project(volrover3 VERSION 3.2.4) scope, C++20 (2.0 tree stays C++17); Qt6 with Qt5 fallback; find_package(VTK REQUIRED) + vtk_module_autoinit
  • Tests: installed GTest if available, else FetchContent googletest v1.14.0; VOLROVER3_BUILD_TESTS (default ON)
  • Packaging ported: Linux .desktop + hicolor icon installs, macOS bundle + macdeployqt hook, Windows icon .rc + $<TARGET_RUNTIME_DLLS> + GET_RUNTIME_DEPENDENCIES walker (now seeded with the imported cvc::cvc DLL directory) + windeployqt hook; registers a volrover3 CPack component when the top level has included CPack (cpack -D CPACK_COMPONENTS_ALL=volrover3). verify-windows-deps.ps1 carried to .github/scripts/ for future packaging CI.

Verification (Linux, this machine)

  • Default configure (volrover3 OFF): passes; VolumeRover2 builds fully (448 targets)
  • BUILD_VOLROVER3=ON configure against a real installed SDK (libcvc dist-cvcpkg 3.2.4+cvc.1 tarball extracted to /tmp/libcvc-sdk) with CMAKE_PREFIX_PATH="<sdk>;<cvcpkg deps prefix>" (Qt6 + VTK 9.5 + Boost 1.86 + CGAL 6 + HDF5 + libiimod from the deps prefix): passes
  • volrover3 app builds and links against the external cvc::cvc
  • All 14 volrover3 unit tests pass (ctest --test-dir build/volrover3, QT_QPA_PLATFORM=offscreen)
  • App was not launched interactively (headless verification only)

Two workarounds were needed for the combined (2.0 + 3) configure on this machine, both pre-existing 2.0 fragilities surfaced by adding a foreign CMAKE_PREFIX_PATH, not regressions from this PR:

  • -DDISABLE_CGAL=ON (a 2.0 option): src/cvcraw_geometry/CMakeLists.txt does include(${CGAL_USE_FILE}), which breaks when the prefix supplies CGAL 6 (UseCGAL was removed upstream). volrover3 itself gets CGAL through libcvc's config.
  • -Dlog4cplus_DIR=/usr/lib/x86_64-linux-gnu/cmake/log4cplus: the cvcpkg deps prefix ships a log4cplus config that only defines log4cplus::log4cplusS (static), shadowing the system package whose log4cplus::log4cplus target 2.0 links.

Known gaps / follow-ups

  • No CI job for volrover3 in this repo yet (the packaging pipelines — AppImage/deb/dmg/NSIS — were removed from libcvc CI and need to be recreated here against an installed SDK; verify-windows-deps.ps1 is already in place)
  • NSIS/DEB metadata for a separate volrover3 end-user installer was not merged into VolRover 2.0's existing monolithic CPack config; with BUILD_VOLROVER3=ON, plain cpack will include volrover3 in the VolumeRover package, and cpack -D CPACK_COMPONENTS_ALL=volrover3 packages it alone
  • Depends on libcvc PR #102's small SDK fix (always install the vendored xmlrpc/ headers); SDK tarballs built before that fix need inc/xmlrpc added manually to compile volrover3

VolumeRover3 (the next-generation Qt6/VTK visualization app) moves here
from transfix/libcvc so that libcvc can become a lean SDK (library +
cvc CLI) and this repository hosts the application that supersedes
VolumeRover 2.0.

Provenance: plain copy (no git-history rewrite) of src/volrover3/,
inc/volrover3/, share/ (desktop file + icons), CMake/Info.plist.in, and
docs/{GRAPHICS_SYSTEM,GRAPHICS_DATA_DRIVEN_UPDATES,APPSTATE_CALLBACKS}.md
from libcvc commit 03b4f961f834c46fcd19b9b4b633dc4c1c8bdcfc
(transfix/libcvc master). Sources and headers are imported verbatim;
only the CMake build was adapted:

- volrover3/CMakeLists.txt now consumes libcvc as an EXTERNAL SDK:
  find_package(cvc CONFIG REQUIRED) and links the exported cvc::cvc
  target (same target name the in-tree alias had, so the
  target_link_libraries lists are unchanged)
- headers live at volrover3/inc/volrover3/ so #include <volrover3/...>
  keeps working; icon/desktop/Info.plist paths now resolve inside
  volrover3/
- own project(volrover3 VERSION 3.2.4) scope with C++20 (the
  surrounding 2.0 tree stays C++17)
- tests use an installed GTest when available, else FetchContent
  googletest v1.14.0 (the version libcvc pinned); new
  VOLROVER3_BUILD_TESTS option (default ON)
- Windows runtime-DLL bundling + windeployqt and macOS macdeployqt
  install hooks ported; the GET_RUNTIME_DEPENDENCIES walker now derives
  the libcvc DLL directory from the imported cvc::cvc target;
  .github/scripts/verify-windows-deps.ps1 carried over for future
  packaging CI
- volrover3 registers a CPack component when the top-level has
  include()d CPack, enabling
  cpack -D CPACK_COMPONENTS_ALL=volrover3

Coexistence with VolumeRover 2.0: the change is strictly additive. The
2.0 targets, sources, and CMake wiring are untouched except for a new
gated block at the very end of the top-level CMakeLists.txt;
BUILD_VOLROVER3 defaults to OFF, so a plain configure/build still
produces VolumeRover 2.0 exactly as before.
@transfix
transfix merged commit f87ca2a into master Jul 16, 2026
6 checks passed
@transfix
transfix deleted the feat/import-volrover3-from-libcvc branch July 16, 2026 00:37
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant