#!/bin/sh if [ x$1 == x-h -o x$1 == x--help ]; then echo "" echo " universal []" echo "" echo " settings:" echo " RDIRS - directories to build R from (if R-dir is not specified)" echo " defaults to the contents of \$BASE/builds" echo "" exit 0; fi if [ -n "$1" ]; then RDIRS=$1 fi : ${BASE=/Builds/R-builds/nightly} : ${RDIRS=`cat $BASE/builds`} RBUILDS=$BASE . $BASE/common tarch="$ARCH" TNAME="$oscode-sa-$tarch" if [ -e /Library/TeX/texbin ]; then PATH=$PATH:/Library/TeX/texbin fi export PATH mkdir -p $BASE/$TNAME TS=`date +%s:%Y%m%d:%H%M%S` for RD in $RDIRS; do rm -f $BASE/$TNAME/$RD.SUCCESS $BASE/$TNAME/$RD.FAILED ## check available disk space before proceeding - we require at least 1GB to make sure DSKF=`df -g "$BASE/$TNAME" | awk '{print $4}' | tail -n 1` if [ "$DSFK" = 0 ]; then echo "***FATAL ERROR: out of disk space!" echo "***FATAL ERROR: out of disk space!" > $BASE/$TNAME/$RD.FAILED exit 1 fi miss=no failed=no if [ -e "$BASE/$oscode-$tarch/$RD-$oscode-$tarch-bld.tar.gz" -a -e "$BASE/$oscode-$tarch/$RD.SUCCESS" ]; then echo "$TS:$RD:common:collect:0:$oscode-$tarch" >> $BASE/$TNAME/build.log else echo "Missing build result for $RD-$oscode-$tarch" >&2 echo "Missing build result for $RD-$oscode-$tarch" >> $BASE/$TNAME/$RD.FAILED echo "$TS:$RD:common:collect:1:$oscode-$tarch" >> $BASE/$TNAME/build.log miss=yes fi if [ $miss = no ]; then failed=no echo "Remove previous framework ..." $BASE/rmfw ## this is the setuid version to make sure ... rm -rf /Library/Frameworks/R.framework RFWH=/Library/Frameworks/R.framework/Resources ATNAME="$oscode-$tarch" echo "$RD:$ATNAME" cd $BASE/$ATNAME/$RD TS=`date +%s:%Y%m%d:%H%M%S` echo "$TS:$RD:$tarch:install" >> $BASE/$TNAME/build.log make install > $BASE/$TNAME/$RD.$tarch.inst 2> $BASE/$TNAME/$RD.$tarch.inst.err ## additional parts make install-tests >> $BASE/$TNAME/$RD.$tarch.inst 2>&1 make install-pdf >> $BASE/$TNAME/$RD.$tarch.inst 2>&1 fi CR=$? if [ $CR != 0 ]; then failed=yes echo "make install failed for $tarch" echo "make install failed for $tarch" >> $BASE/$TNAME/$RD.FAILED fi TS=`date +%s:%Y%m%d:%H%M%S` echo "$TS:$RD:$tarch:install:$CR" >> $BASE/$TNAME/build.log if [ $failed = no ]; then # fixup permissions (first run to make sure it's writable) $BASE/fixup # determine full path to lib (via id entry in libR) LIBDIR=`otool -L /Library/Frameworks/R.framework/R | sed -n '/\/libR/s/.*\(\/Library.*\)\/libR.dylib.*/\1/p'` # fix libRblas entry in bin/exec//R (I still don't know why it's screwed...) install_name_tool -change libRblas.dylib "${LIBDIR}/libRblas.dylib" /Library/Frameworks/R.framework/Resources/bin/exec/R # make CRAN changes to the shell script - setting R_ARCH default according to `arch` #patch /Library/Frameworks/R.framework/Resources/bin/R < $BASE/R.sh.diff # move readline into R and fixup the ld path rllib=`ls /usr/local/lib/libreadline.?.?.dylib|tail -n 1` rllib=`basename ${rllib}` cp /usr/local/lib/${rllib} "$LIBDIR/" chmod +w "$LIBDIR/"* 2> /dev/null install_name_tool -change /usr/local/lib/${rllib} "$LIBDIR/${rllib}" "$LIBDIR/libR.dylib" ln -s ${rllib} "$LIBDIR/libreadline.dylib" # generate dSYMs for l in "$LIBDIR/"libR*.dylib; do dsymutil "$l" done # copy qpdf (if present) and set R_QPDF accordingly if [ -e "$BASE/qpdf" ]; then cp "$BASE/qpdf" /Library/Frameworks/R.framework/Resources/bin/qpdf renv="/Library/Frameworks/R.framework/Resources/etc/Renviron" if [ -e "$renv" ]; then echo '## CRAN R ships with qpdf inside so use it unless directed otherwise' >> "$renv" echo 'R_QPDF=${R_QPDF-'"'/Library/Frameworks/R.framework/Resources/bin/qpdf'"'}' >> "$renv" fi fi # copy vecLib version of BLAS # cp $BASE/libRblas.vecLib.dylib "${LIBDIR}/libRblas.vecLib.dylib" # chmod 0775 "${LIBDIR}/libRblas.vecLib.dylib" install_name_tool -id "${LIBDIR}/libRblas.dylib" "${LIBDIR}/libRblas.dylib" if [ `uname -r | sed 's:\..*::'` = 13 ]; then # Mavericks libraries for lname in gfortran.3 quadmath.0 libgcc_s.1 gcc_s_x86_64.1; do if [ -e "/usr/local/lib/lib${lname}.dylib" ]; then cp -p "/usr/local/lib/lib${lname}.dylib" "${LIBDIR}/lib${lname}.dylib" install_name_tool -id "${LIBDIR}/lib${lname}.dylib" "${LIBDIR}/lib${lname}.dylib" # install_name_tool -change "${LIBDIR}/lib${lname}.dylib" "${LIBDIR}/lib${lname}.dylib" fi done else # for comatibility with old Tiger builds copy libgfortran+libgcc_s if it's not there if [ ! -e "${LIBDIR}/libgfortran.2.dylib" ]; then cp "$BASE/libgfortran.2.dylib" "${LIBDIR}/libgfortran.2.dylib" fi if [ ! -e "${LIBDIR}/libgcc_s.1.dylib" ]; then cp "$BASE/libgcc_s.1.dylib" "${LIBDIR}/libgcc_s.1.dylib" fi fi if [ -L "${LIBDIR}/libRblas.dylib" ]; then rm -f "${LIBDIR}/libRblas.dylib" fi if [ -e "${LIBDIR}/libRblas.dylib" ]; then mv "${LIBDIR}/libRblas.dylib" "${LIBDIR}/libRblas.0.dylib" fi ## since 2.12.1 we use R BLAS as default due to speed issues with vecLib ## ln -s libRblas.vecLib.dylib "${LIBDIR}/libRblas.dylib" ln -s libRblas.0.dylib "${LIBDIR}/libRblas.dylib" # unpack fontconfig config files and include fc-cache if [ -e $BASE/fontconfig-add.tar.gz ]; then tar fxz $BASE/fontconfig-add.tar.gz -C "$RFWH"; fi if [ -e /usr/local/bin/fc-cache ]; then cp /usr/local/bin/fc-cache $RFWH/bin/fc-cache; fi # remove any existing cache rm -rf $RFWH/fontconfig/cache/* # remove optimization flags, -4.2 compiler suffix and full tex paths # for arch in $tarchs; do # sed 's:/usr/texbin/::' $RFWH/etc/$arch/Renviron > $RFWH/etc/$arch/Renviron.tmp && mv $RFWH/etc/$arch/Renviron.tmp $RFWH/etc/$arch/Renviron # sed -e 's:-mtune=core2 ::' -e's:-4\.2::' $RFWH/etc/$arch/Makeconf > $RFWH/etc/$arch/Makeconf.tmp && mv $RFWH/etc/$arch/Makeconf.tmp $RFWH/etc/$arch/Makeconf # done ARHOME=`dirname "$LIBDIR"` $BASE/fixpathR "$ARHOME" # fixup permissions $BASE/fixup install_name_tool -id "${LIBDIR}/libRblas.dylib" "${LIBDIR}/libRblas.dylib" $BASE/fixup cd / tar fcz $BASE/$RD-$TNAME.tar.gz /Library/Frameworks/R.framework mkdir -p "$BASE/deploy/$oscode/$RD" 2>/dev/null cp $BASE/$RD-$TNAME.tar.gz "$BASE/deploy/$oscode/$RD/" ## NOTE: this should really be done by sa-build - it's copying the arch-specific logs to deploy mkdir -p "$BASE/deploy/$oscode/$RD/$tarch" 2>/dev/null for f in SUCCESS FAILED check.err conf.err build.err check conf build build.log; do rm -f "$BASE/deploy/$oscode/$RD/$tarch/$f" if [ -e "$BASE/$TNAME/$f" ]; then cp -p "$BASE/$TNAME/$f" "$BASE/deploy/$oscode/$RD/$tarch/$f"; fi done cd $BASE echo "SUCCESS" touch $BASE/$TNAME/$RD.SUCCESS fi done