#!/bin/sh

if [ x$1 == x-h -o x$1 == x--help ]; then
    echo ""
    echo " universal [<R-dir>]"
    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/<arch>/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