#!/bin/sh
#
# sa-nightly  -> svn up -> rsr
#  -> sa-build $1  : configure + make + check
#  -> sa-fixup $1  : install, fix-up, tar-up
#  +  build Mac GUI
#  -> pkg $1       : package
#  +  sign

: ${BASE=/Builds/R-builds/nightly}
: ${RDIRS=`cat $BASE/builds`}

## make sure we run in C locale due to a bug in sed
export LANG=C

RBUILDS=$BASE

XCODEBLD=/Applications/Xcode.app/Contents/Developer/usr/bin/xcodebuild

. $BASE/common

## EL Capitan uses Xcode 8 with 10.12 SDK so we have to force 10.11 target
if [ "$oscode" = el-capitan ]; then
    XCODEBLD="$XCODEBLD MACOSX_DEPLOYMENT_TARGET=10.11"
fi

date > $BASE/nightly.log

if [ "$1" = cron ]; then
    $BASE/nightly.update >> $BASE/nightly.log
fi

rm -f $BASE/GUIs $BASE/R-GUI-*.tar.gz

: ${rebuild=yes}

if [ ! -e "$HOME/.subversion" -a -e $BASE/home/.subversion ]; then
    export HOME="$BASE/home"
    echo "Using custom build HOME: $HOME" >> $BASE/nightly.log
fi

for RD in $RDIRS; do
    echo "$RD"
    ok=yes
    if [ $rebuild = yes ]; then
	if [ -e $BASE/$RD/.svn ]; then
            # make sure there is no stray read-only home
	    hdiutil detach -force $HOME 2>/dev/null

	    echo "SVN update on $RD" >> $BASE/nightly.log
	    cd $BASE/$RD
	    svn cleanup ## sometimes locks get in the way
	    svn up 2>> $BASE/nightly.log
	    tools/rsync-recommended 2>> $BASE/nightly.log
	fi
	cd $BASE
	./sa-build $RD
    fi

    if [ $ok = yes ]; then
	if [ $rebuild = yes ]; then
	    cd $BASE
	    ./sa-fixup $RD
	fi

	## sync log files into "deploy"
	for file in build check conf; do
	    rm -f "$BASE/deploy/$oscode/$RD/$ARCH/$file"
	    cp -p "$BASE/$oscode-$ARCH/$RD.$file" "$BASE/deploy/$oscode/$RD/$ARCH/$file" 2> /dev/null
	done
	rm -f "$BASE/deploy/$oscode/$RD/$ARCH/FAILED" "$BASE/deploy/$oscode/$RD/$ARCH/SUCCESS"
	if [ -e "$BASE/$oscode-$ARCH/$RD.FAILED" ]; then cp -p "$BASE/$oscode-$ARCH/$RD.FAILED" "$BASE/deploy/$oscode/$RD/$ARCH/FAILED"; fi
	if [ -e "$BASE/$oscode-$ARCH/$RD.SUCCESS" ]; then cp -p "$BASE/$oscode-$ARCH/$RD.SUCCESS" "$BASE/deploy/$oscode/$RD/$ARCH/SUCCESS"; fi

	if [ -e $BASE/$oscode-sa-$ARCH/$RD.SUCCESS ]; then
	    echo "Universal framework built successfully." >> $BASE/nightly.log
	    cd $BASE/Mac-GUI
	    echo "Updating Mac-GUI" >> $BASE/nightly.log
	    svn cleanup
	    svn up $GUI_SVN_UP_FLAGS 2>> $BASE/nightly.log
	    mkdir -p "$BASE/deploy/$oscode/$RD" 2>/dev/null
	    SVNREV=`svn info | sed -n 's/Revision: //p'`
	    CURRENT_R_VER=`readlink /Library/Frameworks/R.framework/Versions/Current`
	    SHORTVER=`echo ${CURRENT_R_VER} | sed 's/^\([0-9]\{1,\}\.[0-9]\).*/\1/'`
	    BLD=$BASE/Mac-GUI/build
	    BSTYLES="Debug Release"
	    for bst in $BSTYLES; do
		cd $BASE/Mac-GUI
		rm -rf $BLD/$bst $BLD/R.build
		echo "Mac-GUI for $SHORTVER, $bst" >> $BASE/nightly.log
		LANG=en_US.UTF-8 $XCODEBLD -alltargets -configuration $bst 2>> $BASE/nightly.log
		if [ -e $BLD/$bst/R.app/Contents/MacOS/R ]; then
		    cd $BLD/$bst
		    chgrp -Rh admin R.app
		    chmod -R g+w R.app
		    find R.app -name .svn |xargs rm -rf

		    # sign the GUI
# not yet - it doesn't verify ...
#		    $BASE/unlock-sign
#		    xcrun codesign --force --sign "Developer ID Application" R.app

                    GUINAME="R-GUI-$SVNREV-$SHORTVER-$oscode-$bst"
                    tar fcz $BASE/$GUINAME.tar.gz R.app
		    mv $BASE/$GUINAME.tar.gz "$BASE/deploy/$oscode/$RD/"
                    rm -rf $GUINAME
                    mkdir $GUINAME
                    mv R.app $GUINAME/
                    rm -f $BASE/$GUINAME.dmg
                    hdiutil create -srcfolder $GUINAME $BASE/$GUINAME.dmg
                    rm -rf $GUINAME
                    echo "$GUINAME" >> $BASE/GUIs

		    mv $BASE/$GUINAME.dmg "$BASE/deploy/$oscode/$RD/"
		fi
		rm -rf $BLD/$bst $BLD/R.build
	    done

	    rm -f $BASE/deploy/$oscode/$RD/$RD-$oscode.pkg $BASE/deploy/$oscode/$RD/$RD-$oscode-signed.pkg

            # make sure there is no stray read-only home
	    hdiutil detach -force $HOME 2>/dev/null

	    ## run packaging step
	    cd $BASE
	    ./runpkg $RD

	    if [ -e "$BASE/deploy/$oscode/$RD/$RD-$oscode.pkg" ]; then
	    ## sign the package
		$BASE/unlock-sign > $BASE/deploy/$oscode/$RD/sign 2>&1

		xcrun productsign --sign 'Developer ID Installer' $BASE/deploy/$oscode/$RD/$RD-$oscode.pkg $BASE/deploy/$oscode/$RD/$RD-$oscode-signed.pkg >> $BASE/deploy/$oscode/$RD/sign 2>&1
	    fi
	fi
    fi
done

if [ "$1" = cron ]; then
    # make sure there is no stray read-only home since we'll need keys
    hdiutil detach -force $HOME 2>/dev/null

    cd $BASE
    ./old2new
    ./upindex
    ./upweb
    ./upindex

    if [ -e "$BASE/$oscode-x86_64/R-devel/doc/manual/R-admin.html" ]; then
	scp "$BASE/$oscode"-x86_64/R-devel/doc/manual/*.html r:wwwfiles/man/ >/dev/null
    fi
fi