install_gdalraster()now checks for a working Rtools toolchain up front (pkgbuild::has_build_tools()) and aborts with installation guidance when none is found, instead of failing mid-compile with a raw make/gcc error. Rtools is documented as the one prerequisite the prebuilt runtime bundle cannot eliminate — in the README, the Getting Started vignette, and theinstall_gdalraster()help page (which also gains an Upgrading section: rebuild gdalraster after every runtime bundle upgrade).
- Fixed the bundle-wide
LoadLibrary failure: A dynamic link library (DLL) initialization routine failed(Windows error 1114) that made published bundles unloadable on machines without Rtools' UCRT64 tree. Root cause: the MSYS2libpodofo.dll(PDF driver backend) fails itsDllMain-time OpenSSL initialization against the MSYS2libcrypto-3-x64.dll. The PDF driver is now disabled outright (GDAL_ENABLE_DRIVER_PDF=OFFplus the poppler/podofo/pdfium backends). - HDF5 and NetCDF drivers are enabled again; the earlier theory that their OpenBLAS/Fortran dependency chain conflicts with R's own DLLs was disproven empirically (every DLL in that chain loads cleanly inside R).
- Bundle verification now has three layers: dependency closure (
ntlddwalk plus a banned-DLL guard for PDF/NSS chains incollect_dlls.sh), loadability (every bundled DLL isLoadLibrary-tested in CI before an asset can publish), and functionality (the e2e workflow runs on every published bundle release).
install_gdal_runtime(tag = "latest")no longer trusts GitHub's single "latest release" pointer, which broke the default install path whenever an R package release (v*, no bundle asset) was marked latest. "latest" now scans the release list and selects the newest non-draft, non-prerelease release that publishes a runtime bundle asset matchingasset_pattern, decoupling the package release track from the GDAL bundle release track.- GitHub API requests are now authenticated when a token is available — resolved from the git credential store (
gitcreds), then theGITHUB_PATandGITHUB_TOKENenvironment variables — avoiding anonymous rate limits in CI and behind shared networks. Release-asset selection also tolerates assets with a missingnamefield.
- All vignettes migrated from R Markdown (
knitr::rmarkdown) to Quarto (quarto::html);VignetteBuilderis nowquarto. - New "Getting Started" vignette covering the full install → build → load → verify workflow, everyday use, install locations and overrides, and offline installation.
- "Runtime Guide" rewritten around the current API:
gdal_homeresolution order, session activation, auto-bootstrap options (gdalraster.windows.auto_bootstrap,gdalraster.windows.auto_load_gdalraster), source builds against the bundle, managed.Rprofilehooks, embedded-python algorithms, and runtime upgrades. - "Architecture" claims verified against upstream sources (GDAL 3.12.2
registration fix, Rtools45 release 6768 muparser addition, PE/COFF
export-ordinal limit); corrected the bundle layout description — no
executables ship in the bundle (
BUILD_APPS=OFF). - Extensive linking across README and vignettes: toolchain components (MinGW-w64, MSYS2, UCRT64, Rtools45), GDAL/PROJ/driver references, upstream issues, and build scripts. The README package guide now points at the pkgdown-hosted articles.
install_gdalraster()and the runtime guide document installing the source build into the regular user library via the existinglibargument (e.g.lib = .libPaths()[1]).- Troubleshooting vignette covers dependency DLLs that resolve in CI but not on user machines, and runtime deletion blocked by file locks.
- Themed site with branded colors, dark navbar, hex logo, and favicons.
- Articles navbar menu and reference section descriptions.
gdalrasterremains declared inSuggestsas a soft, conditionally-used dependency, but development tooling no longer requires it to be installed (attachment config:pkg_ignore+extra.suggests+check_if_suggests_is_installed: no). The package's own installer (install_gdalraster()) is the supported way to provision it.- Reproducible hex logo generation script (
dev/scripts/pkg_logo.R).
- The GDAL CI build no longer links
libgdalagainst the proprietary Microsoft ODBC Driver for SQL Server (msodbcsql17.dll), which GitHub runner images ship inSystem32but end-user machines typically lack — previously this made the published bundle fail to load (LoadLibrary failure) on machines without that driver (GDAL_USE_MSSQL_ODBC=OFF,GDAL_USE_MSSQL_NCLI=OFF). Bundle verification intools/collect_dlls.shnow rejects known non-OSSystem32DLLs so this class of runner-image leak fails CI instead of shipping (#13). activate_gdal_runtime()now fails loudly when preloadinglibgdal-*.dllfails, with the DLL path and a troubleshooting pointer, instead of silently swallowing the error and deferring it tolibrary(gdalraster)where Windows reports only a generic "module could not be found".install_gdal_runtime()overwrite handling is now robust to DLL file locks: the destination check happens before any download, the current session's own preloaded runtime DLLs (from the load-time auto-bootstrap) are released before deletion, reinstalling whilegdalrasteris loaded aborts up front with restart guidance, and deletion is verified so a runtime locked by another process aborts cleanly instead of leaving a half-deleted install behind.load_gdalraster()validates the gdalraster library path before activating the runtime, so a missing source build errors immediately.verify_gdalraster_runtime()returnsFALSE(with a message) when runtime activation fails, instead of erroring.
install_gdalraster()now passesrepos = NULLtoutils::install.packages()when installing from a local source tarball. Previously,reposwas set to the active CRAN mirror, which caused R to treat the tarball path as a package name to look up remotely rather than a local file to install. The symptom was a silent no-op accompanied by the warning "package '…tar.gz' is not available for this version of R", followed by the error "gdalraster source install did not produce an installed package" (#11).- When
upgrade = TRUE, R package dependencies are now installed via a separateinstall.packages("gdalraster", repos = repos)call before the source build, so CRAN-resolution still works for the upgrade case while the tarball install itself always usesrepos = NULL.
- Technical documentation promoted to published vignettes:
vignette("architecture")(toolchain, ABI, DLL loading, embedded python, bundle reproduction) andvignette("troubleshooting")(triage flow and symptom matrix). These are now the canonical docs;dev/docs/is explicitly non-normative maintainer notes.
tools/build_gdal.shdiscovers the producedlibgdal-*.dllby glob in its final verification instead of hardcoding the SONAME, and fails loudly when no DLL is produced (#2).install_gdal_runtime()now emits actionable guidance on download failure: the releases URL and thelocal_zipoffline install path (#5).
- GDAL runtime baseline bumped to 3.13.1 (upstream release 2026-06-05);
default
gdal_versionin the build workflow updated accordingly.
- The GDAL runtime bundle now ships GDAL's pure-python
osgeo_utilspackage (gdal-utils) under<gdal_home>/python, version-locked to the built GDAL tag.activate_gdal_runtime()prepends this directory toPYTHONPATH(session-scoped) so GDAL algorithms that embed a Python interpreter at runtime (e.g.gdal driver gpkg validate) can import it. activate_gdal_runtime()now returnsgdal_pythonin its invisible result alongside the other configured paths.
- New README technical section on the embedded CPython layer and why the
compiled
osgeoSWIG bindings are intentionally not bundled. - Offline / air-gapped installation documented in the README, vignette, and
install_gdal_runtime()help (local_zipworkflow). - Troubleshooting guide gains a triage entry for
ModuleNotFoundError: No module named 'osgeo_utils'. - Maintainer docs aligned with the current bundle contract
(
bin,include,lib,share,python).
- CI is now scoped to its single responsibility: build, verify, and publish
the GDAL runtime bundle. The
gdalrastersource-build verification job was removed; buildinggdalrasteragainst the bundle is package functionality (install_gdalraster()). - Every CI run now produces durable output: a 30-day workflow artifact and
the distributable zip are always created; release publication is gated on
tag pushes or the
publish_releasedispatch input (defaulttrue). - Bundle verification asserts the full runtime contract, including
python/osgeo_utils.
gdalrasterdeclared inSuggests(resolves an R CMD check warning).
- Initial development version: GDAL runtime bundle install/activation
helpers,
gdalrastersource-build integration, startup hooks, and the Windows CI build pipeline.