#!/bin/bash set -e export CRAN=${CRAN-"https://cran.rstudio.com"} export S3_BUCKET_PREFIX=${S3_BUCKET_PREFIX-""} export OS_IDENTIFIER=${OS_IDENTIFIER-"unknown"} export TARBALL_NAME="R-${R_VERSION}-${OS_IDENTIFIER}.tar.gz" # Some Dockerfiles may copy a `/env.sh` to set up environment variables # that require command substitution. If this file exists, source it. if [[ -f /env.sh ]]; then echo "Sourcing environment variables" source /env.sh fi # upload_r() upload_r() { baseName="r/${OS_IDENTIFIER}" if [ -n "$S3_BUCKET" ] && [ "$S3_BUCKET" != "" ]; then echo "Storing artifact on s3: ${S3_BUCKET}, tarball: ${TARBALL_NAME}" aws s3 cp /tmp/${TARBALL_NAME} s3://${S3_BUCKET}/${S3_BUCKET_PREFIX}${baseName}/${TARBALL_NAME} fi if [ -n "$LOCAL_STORE" ] && [ "$LOCAL_STORE" != '' ]; then echo "Storing artifact locally: ${LOCAL_STORE}, tarball: ${TARBALL_NAME}" mkdir -p ${LOCAL_STORE}/${baseName} cp /tmp/${TARBALL_NAME} ${LOCAL_STORE}/${baseName}/${TARBALL_NAME} fi } # archive_r() - $1 as r version archive_r() { tar czf /tmp/${TARBALL_NAME} --directory=/opt/R ${1} --owner=0 --group=0 } fetch_r_source() { echo "Downloading R-${1}" wget -q ${CRAN}/src/base/R-3/R-${1}.tar.gz -O /tmp/R-${1}.tar.gz echo "Extracting R-${1}" tar xf /tmp/R-${1}.tar.gz -C /tmp rm /tmp/R-${1}.tar.gz } # On CentOS 6, we need to clean up references to the static library and header paths. clean_r() { if [[ -f /clean.sh ]]; then echo "Cleaning R build on CentOS 6" source /clean.sh fi } # compile_r() - $1 as r version compile_r() { cd /tmp/R-${1} # tools/config.guess in R versions older than 3.2.2 guess 'unknown' instead of 'pc' # test the version and properly set the flag. build_flag='--build=x86_64-pc-linux-gnu' if _version_is_greater_than ${R_VERSION} 3.2.2; then build_flag='' fi # Default configure options. Some Dockerfiles override this with an ENV directive. default_configure_options="\ --enable-R-shlib \ --with-tcltk \ --enable-memory-profiling \ --with-x \ --with-blas \ --with-lapack" CONFIGURE_OPTIONS=${CONFIGURE_OPTIONS:-$default_configure_options} # set some common environment variables for the configure step AWK=/usr/bin/awk \ LIBnn=lib \ PERL=/usr/bin/perl \ R_PDFVIEWER=xdg-open \ R_BROWSER=xdg-open \ R_PAPERSIZE=letter \ R_PRINTCMD=/usr/bin/lpr \ R_UNZIPCMD=/usr/bin/unzip \ R_ZIPCMD=/usr/bin/zip \ ./configure \ --prefix=/opt/R/${1} \ ${CONFIGURE_OPTIONS} \ ${build_flag} make clean make make install } set_up_environment() { mkdir -p /opt/R } _version_is_greater_than() { test "$(printf '%s\n' "$@" | sort -V | head -n 1)" != "$1" } ###### RUN R COMPILE PROCEDURE ###### set_up_environment fetch_r_source $R_VERSION compile_r $R_VERSION clean_r archive_r $R_VERSION upload_r $R_VERSION