[R-pkg-devel] Optional library dependencies for compiled code
Complex system dependencies are not cleanly handled by the R packaging system, but Suggesting other packages is. You could create or re-use an existing package for each external dependency and possibly even let the user specify which one they want to your dependent package the way DBI handles database drivers. This gives you a clean isolated system dependency for each "compression driver" that you can handle with configure to be slick or force the user to address the system dependency with a simple external call.
On January 29, 2020 7:30:25 AM PST, Dirk Eddelbuettel <edd at debian.org> wrote:
Guido,
On 29 January 2020 at 15:11, Guido Kraemer wrote:
| I am developing an R package that can make (optional, but strongly
| recommended) use of a number of external compression algorithms. What
is
| the best strategy if I want to distribute this as an R package?
Because
It's actually a fairly difficult issue.
I have packages on GitHub but not on CRAN for that very reason (of
difficult
to bundle external libraries).
| the package is for reading large external data sets, the package will
| probably not be very useful without compression.
|
| - Make a hard dependency on all external libraries and make user
| manually disable it if they cannot install a library for some reason?
Could do, but probably means the package cannot get onto CRAN as the
build
will fail "as shipped" ?
Also forces users to set up build options etc. Hard. May reduce use.
| - Make no dependency on external libraries and have the user compile
it
| manually if they want compression?
Same, no? Too much user dependency.
| - Look for installed libraries and use only these? (If so: How would
I
| do this during the installation of an R package?)
I once added the ability to use a system / existing 'nlopt' library to
the
'nloptr' package. The package still defaults to downloading a tar.gz
and
building during its build, but can use the system library for a
speedup. You
could look at that. All done via configure.
There are other "tricks". At least one package I know cheats (at least
on
Linux), comes empty and tells you to install what is needed and
reinstall.
That passes the letter of the law ("hey, the package builds on CRAN")
but
hardly the spirit of the law.
| - How does this work on Windows?
Even less easily.
| The possible compressions are: blosc, zlib, bzip2, lz4, xz
Some of these are a given with R.
For my Debian builds I enable at least zlib, bzip2, lzma -- but I have
to
"pretty soon" look into a similar list for another project. My plan
there is
bundle the sources of the missing compressors (and other libraries I
need)
and trigger a static library build (for each, or maybe all) from
configure.
Dirk
Sent from my phone. Please excuse my brevity.