Motivation and Use of Rhtslib

Rhtslib is an R package that provides the C HTSlib library for high-throughput sequence data analysis. The library provides APIs for creating, indexing, manipulating, and analyzing data in SAM/BAM/CRAM sequence files and VCF/BCF2 variant files. See the HTSlib website for complete details and documentation.

The Rhtslib package is primarily useful to developers of other R packages who want to use the HTSlib facilities in the C code of their own packages.

HTSlib version

The version of the included HTSlib is displayed at package load time, but a user can also query the HTSlib version directly by calling Rhtslib:::htsVersion() in an R session.

Effort is made to update the included version of HTSlib with minor version releases from the HTSlib authors. If you notice the included HTSlib is older than the current minor release of HTSlib, please contact the Rhtslib maintainer.

Motivation

There are several advantages to using Rhtslib, rather than requiring an explicit user system dependency on htslib directly.

Use

There is an example package, link2Rhtslib, that demonstrates how reverse dependencies should link to Rhtslib.

Link to the library

To link successfully to the HTSlib included in Rhtslib a package must include both a src/Makevars.win and src/Makevars file. Note: the contents of src/Makevars.win and src/Makevars are almost identical, but not quite. Be careful of the differences.

Create a src/Makevars.win file with the following lines

RHTSLIB_LIBS=$(shell echo 'Rhtslib::pkgconfig("PKG_LIBS")'|\
    "${R_HOME}/bin/R" --vanilla --slave)
PKG_LIBS=$(RHTSLIB_LIBS)

and a src/Makevars file with the following lines

RHTSLIB_LIBS=`echo 'Rhtslib::pkgconfig("PKG_LIBS")'|\
    "${R_HOME}/bin/R" --vanilla --slave`
PKG_LIBS=$(RHTSLIB_LIBS)

The statement for each platfrom modifies the $PKG_LIBS variable. If your package needs to add to the $PKG_LIBS variable, do so by adding to the PKG_LIBS=$(RHTSLIB_LIBS) line, e.g.,

PKG_LIBS=$(RHTSLIB_LIBS) -L/path/to/foolib -lfoo

Find headers

In order for the C/C++ compiler to find HTSlib headers (and zlib headers on Windows) during package installation, add Rhtslib and zlibbioc to the LinkingTo field of the DESCRIPTION file of your package, e.g.,

LinkingTo: Rhtslib, zlibbioc

Note that as of R 3.0.2 LinkingTo values can include version specifications, e.g., LinkingTo: Rhtslib (>= 0.99.10).

In C or C++ code files, use standard techniques, e.g., #include "hts.h". Header files are available for perusal at (enter in an R session)

system.file(package="Rhtslib", "include")
## [1] "/tmp/Rtmp9qkKen/Rinst5c1a62fc2cd9/Rhtslib/include"

Implementation notes

Rhtslib provides both static and dynamic library versions of HTSlib on Linux and Mac OS X platforms, but only the static version on Windows. In most cases, for Linux and Mac OS X the procedure above will link to the dynamic library version of HTSlib. Please let the maintainer know if you run into issues with this strategy.