[Simplified 2023-07-13, $Revision: 5711 $]
Packages wishing to use Rust code should either
In either case, the authorship and copyright information for the Rust
code must be included in the
DESCRIPTION file. That includes any
Rust sources included as dependencies (see the CRAN policy).
The package should declare
SystemRequirements: Cargo (Rust's package manager), rustc
as they can be packaged separately, and can have different versions. So state carefully any version requirement. (For example, in July 2023 the current Debian distributions included cargo 0.66.0 whereas some had rustc 1.63.0 and some 1.66.0.)
The configure/configure.win script should check for the
presence of commands
rustc, and check
their versions if required. This includes checking for system versions
on the path and personal versions in ~/.cargo/bin (which are
often not on the path). The Linux servers on the CRAN check farm use
system versions, and Linux distributions are often slow to update these
so version requirements need to be conservative.
rustc are not found, ask the user
to install them, either on their Linux system by something like
dnf install cargo apt-get install cargo rustc
or by using
rustup from https://rustup.rs/ . The
package should not attempt to install these for itself.
cargo build -j N defaults to the number of ‘logical CPUs’. This
usually exceeds the maximum allowed in the CRAN policy, so needs to be
set explicitly to N=1 or 2.
Please report the version of
rustc used (as R does for C, C++
and Fortran compilers) in the installation log.
Downloading should be avoided if at all possible. The package would
become uninstallable if the Internet resources are temporarily or
permanently unavailable, and CRAN packages are kept available for many
years. CRAN does not regard
github.com (which used to host the
crates.io and still hosts most of the crates it indexes)
as sufficiently reliable.
In most cases all the Rust software can be bundled into the package
cargo vendor. (Thanks to Hiroaki Yutani for
providing an example of doing that in his
version 0.1.5 at the time of writing.) Please
included Rust sources using
xz compression. If the bundle is too
large to be included in the package sources, it could be hosted at a
long-term secure site under the maintainer’s control.