From f5a7909eb8593e899f116ec9ba9d0872a5db9c79 Mon Sep 17 00:00:00 2001 From: david Date: Tue, 1 Nov 2022 16:29:54 +0100 Subject: [PATCH] R: Update to 4.2.2 set R_LD_LIBRARY_PATH for etc/ldpaths, so R get the correct env if it is start without sourcing of the profile --- R-4.2.2-0.build.sh | 282 +++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 282 insertions(+) create mode 100755 R-4.2.2-0.build.sh diff --git a/R-4.2.2-0.build.sh b/R-4.2.2-0.build.sh new file mode 100755 index 0000000..aba6eae --- /dev/null +++ b/R-4.2.2-0.build.sh @@ -0,0 +1,282 @@ +#! /bin/bash + +# COOKIE=$(mcookie|cut -c-8); grep -v V_GREP_ME $0 > /dev/shm/runme-$COOKIE.sh ; sleep 0.3; exec bash /dev/shm/runme-$COOKIE.sh +# TESTING=1 + +# Use this when R is build & installed and the package list 'work in progress' +# PKGDEBUG=1 + +PKG=R +VERSION=4.2.2 +BUILD=0 + +# https://www.r-project.org/ +# https://cran.r-project.org/mirrors.html + +# A caching proxy under /project/retarded/rproxy +CRANMIRROR=http://platsch:8010/cran/$PKG-$VERSION-$BUILD/cran +BIOCMIRROR=http://platsch:8010/bioconductor/$PKG-$VERSION-$BUILD/bioc + +PREFIX=/pkg/$PKG-$VERSION-$BUILD +if [ -n "$TESTING" ]; then PREFIX=/scratch/local2/$PKG-$VERSION-$BUILD ; fi + +echo "# Ready player one." +date + +set -xe +umask 022 + +BUILD_TMPDIR=/scratch/local2/$PKG-$VERSION-$BUILD-$USER.build.tmp +test -d $BUILD_TMPDIR && rm -fr $BUILD_TMPDIR/build/velocyto_fixup +test -d $BUILD_TMPDIR && rm -r $BUILD_TMPDIR +mkdir -p $BUILD_TMPDIR/home +export TMPDIR=$BUILD_TMPDIR +export HOME=$BUILD_TMPDIR/home + +exec $PREFIX/profile <<-EOF + PATH=$PREFIX/bin:\$PATH + PKG_CONFIG_PATH=$PREFIX/lib/pkgconfig\${PKG_CONFIG_PATH:+:\$PKG_CONFIG_PATH} + LD_LIBRARY_PATH=$PREFIX/lib\${LD_LIBRARY_PATH:+:\$LD_LIBRARY_PATH} + if [ -d $PREFIX/.compatlibs ]; then export LD_LIBRARY_PATH=$PREFIX/.compatlibs\${LD_LIBRARY_PATH:+:\$LD_LIBRARY_PATH} ; fi + export PKG_CONFIG_PATH LD_LIBRARY_PATH +EOF +. $PREFIX/profile + + +NPROC=$(( $(nproc) * 4 / 5 + 1 )) +export MAKEFLAGS="-j $NPROC" + +BUILDDIR=$BUILD_TMPDIR/build +mkdir -p $BUILDDIR +cd $BUILDDIR + +if [ -z "$PKGDEBUG" ]; then + +( # seurat likes to have this one. Sigh, meaning some GIS-stuff remains in the bio-R ... + GEOSVER=3.10.3 + # ORIG: https://download.osgeo.org/geos/geos-3.10.3.tar.bz2 + BEEHIVE=https://beehive.molgen.mpg.de/a5a6959a8a294d9dab778a9ef03ccced/geos-3.10.3.tar.bz2 + test -e geos-$GEOSVER.tar.bz2 || wget -nv $BEEHIVE + test -d geos-$GEOSVER || tar -xf geos-$GEOSVER.tar.bz2 + cd geos-$GEOSVER + + mkdir -p build; cd build + + cmake \ + -DCMAKE_INSTALL_PREFIX=$PREFIX \ + -DBUILD_TESTING=OFF \ + .. + + make + make install +) + +# ########### +# Now Build R + +# test -e R-$VERSION.tar.gz || wget --no-verbose https://cran.r-project.org/src/base/R-4/R-4.2.1.tar.gz +BEEHIVE=https://beehive.molgen.mpg.de/b154500667b5ebb480f1086dd817f017/R-4.2.2.tar.gz +test -e R-$VERSION.tar.gz || wget -nv $BEEHIVE +test -d R-$VERSION || tar -xf R-$VERSION.tar.gz +cd R-$VERSION + +sed -i 's/en_GB/en_US/g' tests/reg-tests-3.R tests/reg-tests-3.Rout.save + +# set LD_LIBRARY_PATH for etc/ldpaths, so R get the correct env +# if it is start without sourcing of the profile +R_LD_LIBRARY_PATH=${PREFIX}/lib:${PREFIX}/.compatlibs \ +./configure \ + --prefix=$PREFIX \ + --libdir=$PREFIX/lib \ + --with-pic \ + --with-recommended-packages \ + --enable-shared \ + --with-x \ + --enable-R-shlib \ + LDFLAGS=-Wl,-rpath,$PREFIX/lib/R/lib + +export TZ=CEST # some tests need timezone +make +make check +make install + +cd $BUILDDIR + +cat <<- RCODEXXX | Rscript - + options(repos=structure(c(CRAN='$CRANMIRROR'))) + options(BioC_mirror = '$BIOCMIRROR') + install.packages('BiocManager') + install.packages('remotes') # or installs from github will fail. + BiocManager::install(update = TRUE, ask = FALSE) # update the 'base' packages +RCODEXXX + +# java stuff seems to be a troublemaker, install first +cat <<- RCODEXXX | Rscript - + options(repos=structure(c(CRAN='$CRANMIRROR'))) + options(BioC_mirror = '$BIOCMIRROR') + BiocManager::install(c('rJava', 'RWeka', 'RWekajars'), update = FALSE) +RCODEXXX + +echo "# State of lib/R/library after initial setup:" +ls -la $PREFIX/lib/R/library + +fi ### -z "$PKGDEBUG" + +unset DISPLAY # avoid warnings about 'RGL: unable to open X11 display' + +# List of packages +# Package names containing a '/' are treated as GitHub repositories +# SingleCellExperiment must come before aertslab/SCENIC, so just do all github stuff at the end + +# Format hint: +# cat package_list | sed -e 's/\s\s*/\n/g' | sort -f | uniq | tr '\n' ' ' | fmt -w 120 + +# ends with 805 dirs in /dev/shm/R-4.2.1-0/lib/R/library + +cat <<- RCODEXXX > package_list + abind acepack ACME ade4 AdequacyModel affy affyio affyPLM akima ALL annotate AnnotationDbi AnnotationForge aod + ape apeglm arrayQualityMetrics ash assertthat AUCell bamsignals base64 base64enc batchelor BatchJobs BayesDA + BBmisc bdsmatrix beadarray BeadDataPackR beanplot beeswarm bgmm BH bigmemory bigmemory.sri Biobase BiocGenerics + BiocParallel biomaRt BioNet Biostrings biovizBase bit bitops boot bootstrap Boruta bpca BradleyTerry2 brew brglm + BSgenome BSgenome.Ecoli.NCBI.20080805 bumphunter c060 C50 Cairo car caret Category caTools CellNOptR checkmate + ChIPpeakAnno ChIPseeker chipseq chron circlize CircStats Ckmeans.1d.dp class clue cluster clusterProfiler CNEr coda + codetools coin colorspace combinat corpcor corrgram corrplot cowplot crayon cummeRbund curl cvTools data.table DBI + DelayedArray DelayedMatrixStats deldir DEoptimR DESeq2 devtools DEXSeq dichromat digest DirichletMultinomial DNAcopy + doMC doParallel doRNG doSNOW dostats dplyr dtw dynamicTreeCut e1071 earth edgeR elasticnet energy entropy evaluate + evd exactRankTests exomeCopy ExomeDepth fail fANCOVA fastcluster fastICA fastmatch FDb.InfiniumMethylation.hg19 + fdrtool fields filehash flashClust foreach foreign formatR Formula futile.logger futile.options gbm gclus gcrma gdata + genefilter GeneNet geneplotter genetics GenomeInfoDb genomeIntervals GenomicAlignments GenomicFeatures GenomicRanges + GEOquery getopt GGally ggbio ggm ggplot2 ggpubr git2r glasso Glimma glmnet GlobalAncova GlobalOptions globaltest + gmp gnm GO.db GOstats GOTHiC gplots graph gRbase gridBase gridExtra gridSVG GSEABase GSEAlm gsl gsubfn gtable + gtools Gviz h2o haplo.stats HardyWeinberg hash hdf5r hdi hdrcde hexbin hflights hgu95av2 hgu95av2.db hgu95av2cdf + HiCcompare highr HiveR Hmisc HMM Homo.sapiens htmltools HTqPCR httpuv httr hwriter igraph illuminaio impute infotheo + inline intervals ipred IRanges IRkernel iterators itertools jsonlite kernlab KernSmooth knitr ks kSamples labeling + Lahman lambda.r lars lattice latticeExtra lava lazyeval LEAP leaps LearnBayes lhs limma linprog lintr lme4 lmtest + locfit longitudinal lpSolve lpSolveAPI LSD lumi magrittr manipulate mapproj maps maptools maptree markdown MASS + MAST Matrix MatrixEQTL matrixStats mclust mda MEDIPS memoise meta MethylSeekR methylumi mgcv mice microbenchmark + mime minfi minqa misc3d mitools mixtools mlegp modeltools multcomp multicool multiHiCcompare multtest munsell + muscle mvtnorm nleqslv nlme nloptr NMF nnet nor1mix numDeriv OmicCircos optparse org.Hs.eg.db OrganismDbi pamr + party partykit pbapply pbkrtest pcalg pcaMethods penalizedSVM peperr pheatmap pkgmaker plotmo plotrix pls plyr + ppcor pracma preprocessCore pROC prodlim profileModel proto proxy pwr qsea qtl quadprog quantreg QuasR qvalue + qvcalc R.cache R.matlab R.methodsS3 R.oo R.utils R2HTML R6 randomForest randomGLM rbenchmark RBGL rbokeh RCircos + RcisTarget RColorBrewer Rcpp RcppArmadillo RcppEigen RCurl registry relaimpo relimp remotes reshape reshape2 + reticulate rex rFerns rgl Rgraphviz rhandsontable rhdf5 RhpcBLASctl Rhtslib rJava rjson RJSONIO rlecuyer RMariaDB + rmarkdown rmeta RMySQL RNAseq123 rnaseqGene rngtools robustbase ROC ROCR roxygen2 rpart RPostgres RPostgreSQL RRF + Rsamtools RSQLite rstudioapi rtracklayer RUnit rversions S4Vectors sandwich scales scalreg scatterplot3d SCnorm + scone SCORPIUS sda segmented sendmailR seqinr seqLogo seriation setRNG Seurat shape shiny shinythemes ShortRead + siggenes SingleCellExperiment sm snow snowfall snpStats som sp spam SparseM spatial splancs spls statmod stepPlr + stringdist stringi stringr strucchange SummarizedExperiment SuppDists survey svMisc svTools tables TeachingDemos + testthat TFBSTools TFMPvalue tgp TH.data tidyr tidyverse topGO tradeSeq TSP TxDb.Hsapiens.UCSC.hg19.knownGene + VariantAnnotation vcd VennDiagram venneuler verification VGAM vsn waveslim WGCNA whisker xlsx xlsxjars XML xml2 + xtable XVector yaml yeastCC zinbwave zipfR zlibbioc zoo + nghiavtr/BPSC weililab/scMAGeCK +RCODEXXX + +cat <<- RCODEXXX | Rscript - + XSAVE_PATH <- Sys.getenv('PATH') + options(repos=structure(c(CRAN='$CRANMIRROR'))) + options(BioC_mirror = '$BIOCMIRROR') + pkgs <- scan('package_list', what = character()) + for (pk in pkgs) { + pa <- unlist(strsplit(pk, '/')); p <- pa[1]; if (! is.na(pa[2])) p <- pa[2] + # there is no simple way to get rid of the error message, so avoid mimimi... + cat('* if there is no package, install it - errors here are part of the test!\n') + chk <- NULL; try(chk <- find.package(p)) + if (is.null(chk)) { + cat( sprintf('* About to install: %s\n', pk), file='work_monitor_list', append = TRUE) + BiocManager::install(pk, Ncpus = $NPROC, update = FALSE) + ret <- library(p, character.only = TRUE, logical.return = TRUE) + if (! ret) q(save = "no", status = 2) + # the logic fails for 'cole-trapnell-lab/cicero-release', fixed below + detach( paste("package", p, sep = ":"), unload = TRUE, character.only=TRUE) + if (Sys.getenv('PATH') != XSAVE_PATH) { + cat( sprintf('*** PATH SCREWUP OCCURED (package %s)\n', pk)) + cat( sprintf('*** expected: %s\n', XSAVE_PATH)) + cat( sprintf('*** now: %s\n', Sys.getenv('PATH'))) + } + Sys.setenv(PATH = XSAVE_PATH) + cat( sprintf('* REALY_DONE with: %s\n', pk)) + } else { + cat( sprintf('* ALREADY_DONE with: %s\n', pk)) + } + } +RCODEXXX + +# simple test: can everything be found? +cat <<- RCODEXXX | Rscript - + pkgs <- scan('package_list', what = character()) + for (pk in pkgs) { + pa <- unlist(strsplit(pk, '/')); p <- pa[1]; if (! is.na(pa[2])) p <- pa[2] + chk <- NULL; try(chk <- find.package(p)) + if (is.null(chk)) { + cat( sprintf('* ERROR: Missing package: %s\n', pk)) + q(save = "no", status = 3) + } + } +RCODEXXX + +# stress test: load all packages (uses 4G, claims 16G) +cat <<- RCODEXXX | Rscript - + pkgs <- scan('package_list', what = character()) + for (pk in pkgs) { + pa <- unlist(strsplit(pk, '/')); p <- pa[1]; if (! is.na(pa[2])) p <- pa[2] + ret <- library(p, character.only = TRUE, logical.return = TRUE) + if (! ret) { + cat( sprintf('* ERROR: Failed to load package/library: %s\n', pk)) + q(save = "no", status = 4) + } + } +RCODEXXX + +# The major work is done, the remains are rather nice gifts. (maybe remove them in the next cycle) + +# do 'cole-trapnell-lab/cicero-release' seperately +echo "BiocManager::install('cole-trapnell-lab/cicero-release', update = FALSE)" | Rscript - + +# same with 'GreenleafLab/ArchR', https://www.archrproject.com/index.html +cat <<- RCODEXXX | Rscript - + options(repos=structure(c(CRAN='$CRANMIRROR'))) + options(BioC_mirror = '$BIOCMIRROR') + devtools::install_github("GreenleafLab/ArchR", ref="master", repos = BiocManager::repositories()) + library(ArchR) + ArchR::installExtraPackages() +RCODEXXX + +# finally a source build, this is/was intended to provide a clean velocyto.R package. +# velocyto.R uses an inappropriate makefile and has a silly multitreading issue + +cd $BUILDDIR +mkdir -p velocyto_fixup +cd velocyto_fixup + +git clone https://github.com/velocyto-team/velocyto.R +cd velocyto.R +git checkout 0.6 --force +git clean -dffx + +mv src/Makevars src/Makevars.weird +# yields just -fopenmp, which won't work on macs with clang +echo 'PKG_CXXFLAGS=-Wall $(SHLIB_OPENMP_CXXFLAGS)' > src/Makevars + +# intercept the inane 'grab all cores' policy +# defaultNCores <- function() { parallel::detectCores(logical=F) } + +cp -p R/momentum_routines.R R/momentum_routines.R.orig +sed -e '/^defaultNCores/ d' -i R/momentum_routines.R +cat <<__NCores_HACK >> R/momentum_routines.R +defaultNCores <- function() { + env <- Sys.getenv('VELOCYTO_CORES') + if (env != "") { return(as.integer(env)) } + parallel::detectCores(logical=F) +} +__NCores_HACK + +R CMD INSTALL . + +echo "# Game over ..." +date + +exit