[R-pkg-devel] Optional library dependencies for compiled code

Jeff Newmiller jdnewm|| @end|ng |rom dcn@d@v|@@c@@u@
Wed Jan 29 16:49:21 CET 2020


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 using 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.



More information about the R-package-devel mailing list