odin_create_package <- function(name, filenames, verbose = NULL) {
## Likely to be too platform dependent for safe CRAN use
testthat::skip_on_cran()
verbose <- odin_options(verbose = verbose)$verbose
pkg <- file.path(tempfile(), name)
dir.create(pkg, FALSE, TRUE)
for (f in c("DESCRIPTION", "NAMESPACE")) {
writeLines(sprintf(readLines(file.path("pkg", f)), name),
file.path(pkg, f))
}
dir.create(file.path(pkg, "inst", "odin"), FALSE, TRUE)
file.copy(filenames, file.path(pkg, "inst", "odin"))
odin_package(pkg)
build_package(pkg, verbose)
}
unload_package <- function(name) {
if (name %in% loadedNamespaces()) {
unloadNamespace(name)
}
}
build_package <- function(path, verbose = TRUE) {
name <- read.dcf(file.path(path, "DESCRIPTION"), "Package")[[1]]
unload_package(name)
if (name %in% .packages()) {
detach(paste0("package:", name), unload = TRUE, character.only = TRUE)
}
lib <- tempfile()
dir.create(lib)
args <- c("CMD", "INSTALL", "-l", lib, path)
Sys.setenv(R_TESTS = "")
system_out <- if (isTRUE(verbose)) "" else verbose
ok <- system2(file.path(R.home(), "bin", "R"), args,
stdout = system_out, stderr = system_out)
if (ok != 0L) {
stop("Error compiling package")
}
cleanup <- function() {
unload_package(name)
unlink(dirname(path), recursive = TRUE)
unlink(lib, recursive = TRUE)
}
loadns <- loadNamespace
list(name = name,
path = path,
lib = lib,
env = loadns(name, lib.loc = lib),
cleanup = cleanup)
}
Add the following code to your website.
For more information on customizing the embed code, read Embedding Snippets.