configure.win
rewritten). The package now searches for a system VTK installation on
Windows before falling back to the pre-built libraries. Detection order:
VTK_DIR environment variable.pacman (queries installed packages; never
installs automatically)./x86_64-w64-mingw32.static.posix, /ucrt64,
/mingw64, …)..a) and shared (.dll.a import
libs + DLLs) system installations are accepted.configure.win, tools/winlibs.R,
R/vtk.R, R/zzz.R). Windows now fully supports
shared VTK libraries:
.dll.a import libs are accepted and used directly.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).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.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.lib_root from
tools/winlibs.R (assigned but never read).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)..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).Re-submission addressing CRAN reviewer feedback on v0.1.1.
'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 entries. LdFlagsFile()
writes to tempdir() in its example.LdFlagsFile() response-file path,
read_vtk_conf() Windows resolver) are exercised by the
existing R-hub Windows CI jobs.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:
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.
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().
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.x86_64-w64-mingw32.static.posix toolchain (Rtools45),
matching the toolchain used by R CMD INSTALL for CRAN
packages.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.LdFlagsFile(), explain the
rationale, provide a unified configure example valid on all
platforms, and correct the Windows toolchain description..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_DIR environment variable.pkg-config./usr,
/usr/local) (Linux only).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.rvtk::CppFlags() and rvtk::LdFlags().