-
Notifications
You must be signed in to change notification settings - Fork 2
/
Copy pathgetdeps.R
74 lines (64 loc) · 2.83 KB
/
getdeps.R
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
# This script can mostly be replaced by pak::pak(dependencies = "all") once pak is fixed.
cat('::group::Show build environment\n')
cat(Sys.which('gcc'), "\n")
invisible(system("gcc --version"))
print(as.list(getOption('repos')))
cat(readLines(Sys.getenv('R_ENVIRON_USER')), sep = '\n')
cat('::endgroup::\n')
# Do not try to install base packages
skiplist <- c("R", "base", "boot", "class", "cluster", "codetools",
"compiler", "datasets", "foreign", "graphics", "grDevices", "grid",
"KernSmooth", "lattice", "MASS", "Matrix", "methods", "mgcv",
"nlme", "nnet", "parallel", "rpart", "spatial", "splines", "stats",
"stats4", "survival", "tcltk", "tools", "utils")
cat('::group::Install package dependencies\n')
dir.create(Sys.getenv('R_LIBS_USER'), recursive = TRUE, showWarnings = FALSE)
sourcepkg <- commandArgs(TRUE)[1]
# Derive all dependencies
filename <- sub("_.*", "/DESCRIPTION", basename(sourcepkg))
untar(sourcepkg, filename, extras = '--strip=1')
desc <- as.data.frame(read.dcf("DESCRIPTION"))
unlink('DESCRIPTION')
deps <- c(desc$Depends, desc$Imports, desc$LinkingTo, desc$Suggests, desc$Enhances)
pkg_deps <- unique(trimws(sub("\\(.*\\)", "", unlist(strsplit(as.character(deps), ',')))))
pkg_deps <- setdiff(pkg_deps, skiplist)
# Add Additional_repositories
if(length(desc$Additional_repositories)){
addrepos <- trimws(strsplit(desc$Additional_repositories, ",", fixed=TRUE)[[1]])
addrepos <- grep('^https?://\\S+$', addrepos, value = TRUE)
addrepos <- grep(Sys.getenv("MY_UNIVERSE"), fixed = TRUE, addrepos, value = TRUE, invert = TRUE)
message("Additional_repositories: ", paste(addrepos, collapse = ', '))
options(repos = c(getOption('repos'), addrepos))
}
# Install sysdeps (Linux only)
if(grepl("linux", R.Version()$platform)) {
sysreqs <- desc[['Config/pak/sysreqs']]
if(length(sysreqs)){
cat("Installing sysreqs:", sysreqs, "\n")
system("apt-get update")
system(paste("apt-get install -y", sysreqs))
}
}
# Hack for bioc mess
#if(identical('bioc', Sys.getenv('UNIVERSE_NAME'))){
# pkg_deps <- c(pkg_deps, "zlibbioc")
#}
# Install new packages
options(install.packages.check.source = "no")
options("install.packages.compile.from.source"="never")
installed <- row.names(installed.packages())
needpkg <- setdiff(pkg_deps, installed)
install.packages(needpkg)
# Update pre-installed and outdated binary packages
options(install.packages.check.source = NULL)
options("install.packages.compile.from.source"="interactive")
update.packages(oldPkgs = pkg_deps, type = 'source', ask = FALSE)
# Test again if any are missing, try with remotes
installed <- row.names(installed.packages())
unavail <- setdiff(pkg_deps, installed)
if(length(unavail)) {
warning("Installing from remotes: ", paste(unavail, collapse = ','))
install.packages('remotes')
remotes::install_deps(sourcepkg, dependencies = TRUE, upgrade = FALSE)
}
cat('::endgroup::\n')