Installation Options for the TileDB R Package
Date: 2022-01-25

## Overview

This vignette discusses different options for installing the TileDB R package.

### CRAN

#### Binaries

The TileDB R package is released via the Comprehensive R Archive Network, or CRAN. CRAN generally provides binaries for the two most widely operating systems, Windows and macOS. So issueing the command

    install.packages("tiledb")

will, on those two operating system, default to `type="binary"` and install a ready-to-run binary package.

#### Source

On other operating systems such as Linux, or by explicitly selecting `type="source" on Windows or macOS, an installation from source is attempted when using`install.packages(“tiledb”)`.

On Linux or macOS, this invokes the standard R build process which will rely on `configure`. If `pkg-config` is found, it is used to query the system about a possible TileDB installation. If one is found, it used. Otherwise, on all three main operating systems a prebuilt archive with the TileDB Embedded library is downloaded from GitHub and unpacked. Each build of the R package will have one matching build of TileDB Embedded associated with it via file the `tools/tiledbVersion.txt` specifying a version and release commit sha1. These two values are used to find the corresponding binary artifacts from a release at GitHub.

The location of an existing installed version of TileDB Embedded can also be provided to the `configure` script which supplies an argument `--with-tiledb=PATH`. So on the command-line, one could say

    R CMD INSTALL --configure-args='--with-tiledb=/some/path' tiledb_*.tar.gz

to pass the `configure` argument on. From within R, the equivalent command is

    install.packages("tiledb", repos=NULL, configure.args="--with-tiledb=/some/path")

Lastly, one can also override the default download location (otherwise inferred via `tools/tiledbVersion.txt`. The `configure` script supports an option `--with-download=URL` so the two calls become, respectively

    R CMD INSTALL --configure-args='--with-download=https://some.where.net/file.tgz' tiledb_*.tar.gz

and

    install.packages("tiledb_0.11.0.tar.gz", repos=NULL,
                     configure.args="--with-download=https://some.where.net/file.tgz")

## Conda

Using for example the current `condaforge/mambaforge` container from the conda-forge project, we can do

    mamba install -y r-tiledb                # installs R, tiledb and deps without extra prompt
    # ...several lines of installation detail omitted
    R
    # ... several lines of R startup output omitted
    > library(tiledb)

which installs R, the tiledb package and all respective dependencies.

## Docker

Builds of the TileDB package could also be provided via Docker containers. At present, no official TileDB R containers are provided by TileDB. However, the discussion of installation from source above describes how to create such containers.

## Summary

This note described several installation options for the TileDB R package.