#!/usr/bin/env r
#
# Another example to check one or more packages, with option parsing
#
# Copyright (C) 2015 - 2023 Dirk Eddelbuettel
#
# Released under GPL (>= 2)
## load docopt package from CRAN
library(docopt)
## configuration for docopt
doc <- "Usage: check.r [-h] [-x] [--as-cran] [--repo REPO] [--no-manvig] [--install-deps] [--install-kitchen] [--deb-pkgs PKGS...] [--use-sudo] [--library LIB] [--setwd DIR] [TARGZ ...]
-a --as-cran customization similar to CRAN's incoming [default: FALSE]
-r --repo REPO repository to use, or NULL for file [default: https://cloud.r-project.org]
-n --no-manvig set the '--no-manual --no-vignettes' options [default: FALSE]
-i --install-deps also install packages along with their dependencies [default: FALSE]
-k --install-kitchen even install packages 'kitchen sink'-style up to suggests [default: FALSE]
-l --library LIB when installing use this library [default: /usr/local/lib/R/site-library]
-s --setwd DIR change to this directory before undertaking the test [default: ]
-d --deb-pkgs PKGS also install binary .deb packages with their dependencies [default: FALSE]
-u --use-sudo use sudo when installing .deb packages [default: FALSE]
-h --help show this help text
-x --usage show help and short example usage"
## docopt parsing
opt <- docopt(doc)
if (opt$usage) {
cat(doc, "\n\n")
cat("Examples:
check.r -a -i -s /tmp myPkg_1.2-3.tar.gz # run a check --as-cran with depends in /tmp
# for package myPkg_1.2-3.tar.gz
check.r is part of littler which brings 'r' to the command-line.
See https://dirk.eddelbuettel.com/code/littler.html for more information.\n")
q("no")
}
args <- character()
if (opt$as_cran) args <- c(args, "--as-cran")
if (opt$no_manvig) args <- c(args, "--no-manual", "--no-vignettes")
if (!is.null(opt$libdir)) .libPaths(opt$libdir)
r <- getOption("repos")
r["CRAN"] <- opt$repo
options(repos = r)
hasRcmdcheck <- requireNamespace("rcmdcheck", quietly=TRUE)
if (hasRcmdcheck) suppressMessages(library("rcmdcheck"))
## helper functions
checkArg <- function(p, args) {
if (hasRcmdcheck) {
#if (length(args) == 0) args <- ""
res <- rcmdcheck(p, args=args)
} else {
tools:::.check_packages(c(p, args))
res <- NULL
}
res
}
## helper function which switches to local (ie NULL) repo if matching file is presented
installArg <- function(p, lib, rep) {
p <- gsub("_.*tar\\.gz$", "", p)
install.packages(pkgs=p,
lib=lib,
repos=rep,
dependencies=if(opt$install_kitchen)
c("Depends", "Imports", "LinkingTo", "Suggests")
else
TRUE
)
}
## if binary .deb files are to be installed first:
if (length(opt$deb_pkgs) > 1 || opt$deb_pkgs != FALSE) {
cmd <- paste0(if (opt$use_sudo) "sudo " else "",
"apt-get install -y ", paste(opt$deb_pkgs, collapse=" "))
system(cmd)
}
## if dependencies (or even suggests) are to be installed first:
if (opt$install_deps || opt$install_kitchen) sapply(opt$TARGZ, installArg, opt$lib, opt$repo)
## change directory if a target directory was given
if (!is.null(opt$setwd)) setwd(opt$setwd)
## installation given selected options and arguments
sapply(opt$TARGZ, checkArg, args)
Add the following code to your website.
For more information on customizing the embed code, read Embedding Snippets.