[R-pkg-devel] Matrix 1.7-0 to be released in March with ABI-breaking SuiteSparse update

Mikael Jagan j@g@nmn2 @end|ng |rom gm@||@com
Mon Feb 12 19:36:17 CET 2024


Dear users and binary repository maintainers,

We are preparing Matrix version 1.7-0 for CRAN submission on March 11, ahead
of the spring release of R version 4.4.0.  The only significant change from
Matrix 1.6-5 is an update of the internal SuiteSparse libraries
(5.10.1 -> 7.6.0).  Unfortunately, the old and new SuiteSparse versions are 
binary incompatible, hence so too will be the old and new Matrix versions.

A corollary is that users and binary repository maintainers switching between
Matrix < 1.7-0 and Matrix >= 1.7-0 must rebuild _from sources_ packages that
link Matrix:

 > tools::package_dependencies("Matrix", which = "LinkingTo", reverse = TRUE)[[1L]]
  [1] "ahMLE"               "bayesWatch"          "cplm"
  [4] "GeneralizedWendland" "geostatsp"           "irlba"
  [7] "lme4"                "mcmcsae"             "OpenMx"
[10] "PRIMME"              "PUlasso"             "robustlmm"
[13] "spGARCH"             "TMB"                 "bcSeq"

For users, that means doing, e.g.,

     install.packages("lme4", type = "source")

but an alternative for Windows and macOS users without the required tools is

     oo <- options(repos = "https://cran.r-project.org/")
     install.packages("Matrix")
     install.packages("lme4")
     options(oo)

where we trust CRAN to provide binaries compatible with the latest Matrix
version (because we notify CRAN upon submission about required rebuilds).
Once other repositories react with rebuilds, they can be used instead of
CRAN.

Our reverse dependency checks (and history, intuition, ...) show that most
problems (caught segfaults in this case) can be traced to a binary incompatible
lme4 and not to one of the other packages linking Matrix.  Still, we recommend
rebuilds for all 15 packages.

Maintainers of packages that link Matrix can implement an .onLoad test for
possible binary incompatibility by comparing the value of

     if (utils::packageVersion("Matrix") >= "1.6.2")
         Matrix::Matrix.Version()[["abi"]]
     else numeric_version("0")

at install time and at load time, warning the user if the values differ.
But please do look at the above and not at packageVersion("Matrix") directly,
as the ABI version is incremented less often than the package version.

Mikael {on behalf of citation("Matrix")$author}



More information about the R-package-devel mailing list