Skip to contents

rvtk (development version)

rvtk 0.1.3

CRAN release: 2026-05-11

New features

  • Windows VTK discovery (configure.win rewritten). The package now searches for a system VTK installation on Windows before falling back to the pre-built libraries. Detection order:
    1. VTK_DIR environment variable.
    2. Rtools45 pacman (queries installed packages; never installs automatically).
    3. Common Rtools45 / MSYS2 prefixes (/x86_64-w64-mingw32.static.posix, /ucrt64, /mingw64, …).
    4. Automatic download of pre-built libraries (fallback — see below). Both static (.a) and shared (.dll.a import libs + DLLs) system installations are accepted.
  • Windows shared-DLL support (configure.win, tools/winlibs.R, R/vtk.R, R/zzz.R). Windows now fully supports shared VTK libraries:
    • System or pacman/MSYS2 installations that provide .dll.a import libs are accepted and used directly.
    • A pre-built shared-DLL build (vtk-X.Y.Z-shared-posix-x64.zip) is available as an alternative to the existing static build. Select it by setting VTK_LINK_TYPE=shared before installing rvtk (default is static).
    • VTK DLLs are staged in rvtk’s own inst/vtk-dlls/. An .onLoad hook prepends that directory to PATH via Sys.setenv() when rvtk is loaded, making the DLLs visible to all downstream packages that declare Imports: rvtk without any manual PATH manipulation. The original PATH is restored in .onUnload(). Downstream packages do not receive a copy of the DLLs — they piggyback on rvtk’s staged directory at run time.
  • build-vtk-libs.yml: new build-windows-shared CI job produces vtk-X.Y.Z-shared-posix-x64.zip alongside the existing static archive.

Bug fixes

  • Unix pre-built static libraries survive R CMD build (configure, R/vtk.R, cleanup). The pre-built archive is now extracted to inst/prebuilt/ so that headers and static libraries ship inside the installed package. read_vtk_conf() resolves the actual paths at run time via system.file("prebuilt", package = "rvtk"), mirroring the Windows approach and surviving R CMD build temp-dir cycles.

Internal

  • Removed dead variable lib_root from tools/winlibs.R (assigned but never read).
  • Removed dead variable all_libs_full from the Windows static branch of read_vtk_conf() in R/vtk.R (assigned but never read; lib_flags is built entirely from -l short names).
  • New CI workflow (.github/workflows/downstream-check.yaml) builds and checks a minimal downstream package against rvtk across all supported platform × VTK-strategy combinations (system, pre-built static, pre-built shared).

rvtk 0.1.2

Re-submission addressing CRAN reviewer feedback on v0.1.1.

Changes

  • DESCRIPTION: Software names ('VTK', 'Homebrew', 'pkg-config', 'Rtools45') are now consistently quoted with single quotes in the Title, Description, and SystemRequirements fields, per CRAN policy. Function calls such as rvtk::CppFlags() are no longer wrapped in single quotes.
  • CppFlags(), LdFlags(), LdFlagsFile(): Replaced cat() with writeLines() and added invisible() returns so functions behave in a more idiomatic R style while still allowing shell command-substitution capture.
  • tools/winlibs.R: The Windows VTK zip is now extracted to a temporary directory (tempfile()) before being copied into inst/windows/. This avoids writing intermediate files to the package source tree (home filespace) during installation.
  • Examples: All exported functions now have small, executable @examples entries. LdFlagsFile() writes to tempdir() in its example.
  • Tests: Test suite expanded to 100% line coverage of the non-platform- specific code paths on all platforms; Windows-specific branches (LdFlagsFile() response-file path, read_vtk_conf() Windows resolver) are exercised by the existing R-hub Windows CI jobs.

rvtk 0.1.1

The planned CRAN submission of v0.1.0 was cancelled after downstream package developers reported linker errors when building against the pre-built Windows VTK libraries. Two root causes were identified and fixed:

  1. Wrong toolchain. The Windows VTK zip was compiled with the Rtools45 UCRT64 toolchain (/ucrt64/bin/gcc), which uses a dynamic C runtime and emits DLL-import symbols (__imp_fseeko64, __imp_ftello64, …). However, R CMD INSTALL links R packages with the x86_64-w64-mingw32.static.posix toolchain, which is fully static. The mismatch caused undefined references to nanosleep64, ftime64, __imp_fseeko64, and __imp_ftello64. The GitHub Actions workflow now builds the Windows VTK zip with the x86_64-w64-mingw32.static.posix compiler, matching the toolchain that downstream packages use.

  2. Command-line length overflow. The full set of VTK -l linker flags exceeds the 8 191-character Windows command-line limit, causing the linker to silently drop flags at the end of the list. A new function LdFlagsFile(path) writes all flags to a response file and returns the short @path token that both GNU ld and LLVM lld support. Downstream packages should call LdFlagsFile('src/vtk_libs.rsp') from their configure / configure.win script instead of LdFlags().

Changes

  • New function LdFlagsFile(path): writes VTK linker flags to a response file and returns @path for use in Makevars. Preferred over LdFlags() on all platforms to avoid the Windows command-line length limit.
  • Windows pre-built VTK libraries are now compiled with the x86_64-w64-mingw32.static.posix toolchain (Rtools45), matching the toolchain used by R CMD INSTALL for CRAN packages.
  • Windows system libraries appended to PKG_LIBS reduced to -lgdi32 only; the UCRT64-specific -lwinpthread -lmingwex -lucrtbase flags are no longer needed because the static.posix sysroot resolves POSIX symbols internally.
  • README updated to document LdFlagsFile(), explain the rationale, provide a unified configure example valid on all platforms, and correct the Windows toolchain description.

rvtk 0.1.0

  • Initial CRAN submission.
  • Bundles VTK 9.5.2 pre-built static libraries (.a) for Windows (Rtools45 UCRT x64), macOS arm64, macOS x86_64, and Linux x86_64, distributed via GitHub Releases and built with GitHub Actions.
  • VTK discovery strategy on macOS and Linux (in priority order):
    1. User-supplied VTK_DIR environment variable.
    2. Homebrew (macOS only).
    3. pkg-config.
    4. Well-known system prefixes (/usr, /usr/local) (Linux only).
    5. Automatic download of pre-built static libraries from https://github.com/astamm/rvtk/releases as a fallback.
  • On Windows, pre-built UCRT64 static libraries are always downloaded automatically from https://github.com/astamm/rvtk/releases.
  • Windows limitation: netcdf and libproj are not available in the Rtools45 UCRT64 environment. The following VTK modules are therefore disabled in the Windows pre-built libraries: VTK_IONetCDF, VTK_IOHDF, VTK_GeovisCore, VTK_RenderingCore. Downstream packages requiring these modules cannot be built on Windows with rvtk’s pre-built libraries.
  • Downstream packages can retrieve compiler and linker flags via rvtk::CppFlags() and rvtk::LdFlags().