CUDA <- c("cudaBayesreg", "gpda", "gpuR", "kmcudaR", "permGPU") stoplist <- c(CUDA, 'N2R', 'sccore', 'leidenAlg', 'pagoda2', 'conos', 'modeltime.h2o', 'Rhpc', 'littler', # R as a shared library 'IRATER', # R2admb for anything useful "REBayes", #"Rmosek", "Rcplex", "ROI.plugin.cplex", "ROracle", "ora", "OpenCL", "bayesCL", "RcppMeCab", "RmecabKo", "`Rsagacmd", 'RQuantLib', "RcppAPT", "caRpools", "localsolver", "rrd", # hence "rtsVis", "karel", "ingres", "script", "rGEDI") # libgeotiff noinstall <- c(readLines('~/R/packages/noinst')) noinstall_pat <- c() #-------------------- functions --------------------- av <- function(ver = "4.1.0") { ## setRepositories(ind = 1) # CRAN options(available_packages_filters = c("R_version", "OS_type", "CRAN", "duplicates")) av <- available.packages()[, c("Package", "Version", "Repository", "NeedsCompilation")] av <- as.data.frame(av, stringsAsFactors = FALSE) path <- with(av, paste0(Repository, "/", Package, "_", Version, ".tar.gz")) av$Repository <- NULL av$Path <- sub(".*contrib/", "../contrib/", path) av$mtime <- file.info(av$Path)$mtime ans <- av[order(av$Package), ] ## Now merge in Recommended packages inst <- installed.packages(.Library) inst <- inst[inst[, "Priority"] == "recommended", c("Package", "Version", "NeedsCompilation")] inst <- as.data.frame(inst, stringsAsFactors = FALSE) dpath <- file.path("..", "contrib", ver, "Recommended") rec <- dir(dpath, patt = "[.]tar[.]gz$") rec <- sub("[.]tar[.]gz$", "", rec) inst$Version <- sub("[[:alnum:]]*_([0-9_-]*)", "\\1", rec) inst$Path <- with(inst, paste0("../contrib/", ver, "/Recommended/", Package, "_", Version, ".tar.gz")) inst$mtime <- file.info(inst$Path)$mtime rec <- ans$Package %in% inst$Package rbind(tools:::.remove_stale_dups(rbind(inst, ans[rec, ])), ans[!rec, ]) } ### NB: this assumes UTF-8 quotes get_vers <- function(nm) { ## read already-checked versions vers <- sapply(nm, function(n) { if (file.exists(f <- paste0(n, ".out"))) { ver <- grep("^[*] this is package", readLines(f, warn = FALSE), value = TRUE, useBytes = TRUE) if(length(ver)) sub(".*version ‘([^’]+)’.*", "\\1", ver) else "10000.0.0" } else "10000.0.0" }) package_version(vers) } do_it <- function(stoplist, compilation = FALSE, ...) { Ver <- R.Version() ver <- if(Ver$status == "Under development (unstable)") { paste(Ver$major, Ver$minor, sep = ".") } else if (Ver$status == "Patched") { paste0(Ver$major, ".", substr(Ver$minor, 1, 1), "-patched") } else paste(Ver$major, Ver$minor, sep = ".") tars <- av(ver) tars <- tars[!tars$Package %in% stoplist, ] if(compilation) tars <- tars[tars$NeedsCompilation %in% "yes", ] nm <- tars$Package time0 <- file.info(paste0(nm, ".in"))$mtime vers <- get_vers(nm) unpack <- is.na(time0) | (tars$mtime > time0) | (tars$Version > vers) for(i in which(unpack)) { if(nm[i] %in% stoplist) next cat(nm[i], "\n", sep = "") unlink(nm[i], recursive = TRUE) unlink(paste0(nm[i], ".out")) system(paste("tar -zxf", tars[i, "Path"])) system(paste("touch -r", tars[i, "Path"], paste0(nm[i], ".in"))) } }