#!/bin/bash

TOPDIR=$(dirname $0)
if [ "$TOPDIR" = "." ] ; then
    TOPDIR=`pwd`
fi
export TOPDIR

. $TOPDIR/settings.sh

export PUBDIRJIG=$PUBDIR/weekly-builds
export PUBDIROSTRACE=/mnt/nfs-cdimage/.live/trace-os
export PUBDIRLIVETRACE=/mnt/nfs-cdimage/.live/trace-live
export DATE_BUILD="$DATE-$BUILDNUM"
BUILDLOCK=$HOME/.debian-cd.lock
CD_I_F="/mnt/nfs-cdimage/unofficial/non-free/cd-including-firmware"

. $TOPDIR/common.sh

# Make sure the machine isn't rebooted while we're busy
reboot_lock

# Uncomment the following to use daily d-i builds for these images
# rather than what's in the archive
USE_DAILY_DI=Y

if [ "$RELEASE_BUILD"x = ""x ] ; then
    export RSYNC_TARGET=/mnt/nfs-cdimage/weekly-builds
    export RSYNC_TARGET_FIRMWARE=${CD_I_F}/weekly-builds
else
    export RSYNC_TARGET=/mnt/nfs-cdimage/.${RELEASE_BUILD}/debian-cd
    export RSYNC_TARGET_FIRMWARE=${CD_I_F}/.${RELEASE_BUILD}/debian-cd
    export CONF=~/build.jessie/CONF.sh.${RELEASE_BUILD}
    export RELEASE_BUILD=$RELEASE_BUILD
    # If we're doing a normal set of daily/weekly builds, leave the
    # checksum filenames alone. Otherwise, make life easier for people
    # combining things later and append a suitable name as we build.
    export EXTENSION=".large"
    USE_DAILY_DI=N
fi

. images4testing_d-i

if [ "$USE_DAILY_DI"x = "Y"x ] ; then
    export DI=sid
    export DI_WWW_HOME=default
    export DI_DIR="$ARCH_DI_DIR"
else
    unset DI_WWW_HOME
fi

export DI_DIST
export DI_CODENAME

BUILDS_RUNNING=""

export NOOPENSTACK
export NOLIVE
rm -f $PUBDIRLIVETRACE $PUBDIROSTRACE
~/build.jessie/cronjob.weekly-live &

if lockfile -r0 $BUILDLOCK ; then
#    echo "NOT checking for git updates"
    echo "git update debian-cd"
    cd debian-cd && git pull ; cd ..

    # Work out the default desktop, and do *not* build a CD1 for that
    # desktop - it'll be done in the full set anyway
    TASKSEL_DEB=$(./debian-cd/tools/which_deb ${MIRROR} testing task-desktop binary)
    DEFAULT_DESKTOP=$(dpkg --info ${MIRROR}/${TASKSEL_DEB} |
	awk '/Recommends: task-.*-desktop/ {split($2,a,"-"); print toupper(a[2])}')
    echo default desktop is $DEFAULT_DESKTOP, drop CD1 for that desktop
    export NO${DEFAULT_DESKTOP}CD=1

#    echo "NOT checking for popcon updates"
    if [ "$NOPOPCON"x = ""x ] ; then
	cd debian-cd && ./tools/update_popcon tasks/jessie/popularity-contest ; cd ..
    fi

    cd $TOPDIR
    mkdir -p $PUBDIRJIG/trace
    mkdir -p $RSYNC_TARGET $RSYNC_TARGET_FIRMWARE

    for arch in $ARCHES; do
        # Reset envvars for next iteration
        arch_error=""
        arch_start=`now`

        if [ "$arch" != multi-arch ] ; then
            rm -rf $PUBDIRJIG/$arch $PUBDIRJIG-firmware/$arch
            mkdir -p $PUBDIRJIG/$arch
	    if $(arch_has_firmware $arch) ; then
		mkdir -p $PUBDIRJIG-firmware/$arch
	    fi

#            export DI_DIR="$ARCH_DI_DIR" 
	    export VARIANTS=""

            # Full CD set
            if [ "$NOCD"x = ""x ] && [ "$NOFULLCD"x = ""x ] ; then
		unset FORCE_CD_SIZE1
                export MAX_PKG_SIZE=500000000
                case $arch in
                    i386|amd64)
                        export MAXISOS=8; export MAXJIGDOS=ALL ;;
                    source)
		        # don't make CD ISOs for source, DVD will do
                        export MAXISOS=0; export MAXJIGDOS=ALL ;;
                    *)
                        export MAXISOS=3; export MAXJIGDOS=ALL ;;
                esac
		build_started CD
                ./testingcds "$arch" &
            fi

            # Full DVD set
            if [ "$NODVD"x = ""x ] ; then
		unset FORCE_CD_SIZE1
                export MAX_PKG_SIZE=999999999999
                case $arch in
                    i386|amd64)
                        export MAXISOS=3
			export MAXJIGDOS=ALL
			export VARIANTS=xen
                        # Special case: make DVD1 fit on a 4GB USB
                        # stick (#612074)
			export FORCE_CD_SIZE1=STICK4GB
			;;
                    source)
                        export MAXISOS=ALL; export MAXJIGDOS=ALL ;;
                    powerpc|arm64)
                        # Special cases: make DVD1 fit on a 4GB USB
                        # stick
			export FORCE_CD_SIZE1=STICK4GB
                        export MAXISOS=1; export MAXJIGDOS=ALL ;;
                    *)
                        export MAXISOS=1; export MAXJIGDOS=ALL ;;
                esac
                export DESKTOP=all
		build_started DVD
                INSTALLER_CD=3 TASK=Debian-all \
                    KERNEL_PARAMS='desktop=all' \
                    ./testingcds "$arch" &
            fi

            # Full BD set
            if [ "$NOBD"x = ""x ] ; then
		unset DESKTOP
		unset FORCE_CD_SIZE1
                export MAX_PKG_SIZE=999999999999
                case $arch in
                    i386|amd64|source)
                        export MAXISOS=0
                        export MAXJIGDOS=ALL
                        export DESKTOP=all
			export VARIANTS=xen
			build_started BD
                        INSTALLER_CD=9 TASK=Debian-all \
                            KERNEL_PARAMS='desktop=all' \
                            ./testingcds "$arch" &
                        ;;
                    *)
                        echo "  Not running BD build for $arch"
                        ;;
                esac
            fi

            # Full DLBD set
            if [ "$NOBD"x = ""x ] && [ "$NODLBD"x = ""x ] ; then
		unset DESKTOP
		unset FORCE_CD_SIZE1
                export MAX_PKG_SIZE=999999999999
                case $arch in
                    i386|amd64|source)
                        export MAXISOS=0
                        export MAXJIGDOS=ALL
                        export DESKTOP=all
			export VARIANTS=xen
			build_started DLBD
                        INSTALLER_CD=D TASK=Debian-all \
                            KERNEL_PARAMS='desktop=all' \
                            ./testingcds "$arch" &
                        ;;
                    *)
                        echo "  Not running DLBD build for $arch"
                        ;;
                esac
            fi

            # individual desktop cds: gnome, kde, xfce. lxde
            if [ "$arch"x != "source"x ] && [ "$NOCD"x = ""x ] ; then
		if [ "$NOGNOMECD"x = ""x ] ; then
                    export MAX_PKG_SIZE=300000000
                    export DESKTOP=gnome
                    export MAXISOS=1; export MAXJIGDOS=1
		    unset FORCE_CD_SIZE1
		    export VARIANTS=""
		    build_started GNOMECD
                    INSTALLER_CD=E TASK=Debian-gnome \
                        KERNEL_PARAMS='desktop=gnome' \
                        MAXCDS=1 MAXISOS=ALL MAXJIGDOS=ALL \
                        ./testingcds "$arch" &
		fi

		if [ "$NOKDECD"x = ""x ] ; then
                    export MAX_PKG_SIZE=300000000
                    export DESKTOP=kde
                    export MAXISOS=1; export MAXJIGDOS=1
		    unset FORCE_CD_SIZE1
		    export VARIANTS=""
		    build_started KDECD
                    INSTALLER_CD=4 TASK=Debian-kde \
                        KERNEL_PARAMS='desktop=kde' \
                        MAXCDS=1 MAXISOS=ALL MAXJIGDOS=ALL \
                        ./testingcds "$arch" &
		fi

		if [ "$NOXFCECD"x = ""x ] ; then
                    export MAX_PKG_SIZE=300000000
                    export DESKTOP=xfce
                    export MAXISOS=1; export MAXJIGDOS=1
		    unset FORCE_CD_SIZE1
		    export VARIANTS=""
		    build_started XFCECD
                    INSTALLER_CD=5 TASK=Debian-xfce \
			KERNEL_PARAMS='desktop=xfce' \
			MAXCDS=1 MAXISOS=ALL MAXJIGDOS=ALL \
			./testingcds "$arch" &
		fi

		if [ "$NOLXDECD"x = ""x ] ; then
                    export MAX_PKG_SIZE=300000000
                    export DESKTOP=lxde
                    export MAXISOS=1; export MAXJIGDOS=1
		    unset FORCE_CD_SIZE1
		    export VARIANTS=""
		    build_started LXDECD
                    INSTALLER_CD=A TASK=Debian-lxde \
			KERNEL_PARAMS='desktop=lxde' \
			MAXCDS=1 MAXISOS=ALL MAXJIGDOS=ALL \
			./testingcds "$arch" &
		fi
            fi

            # netinst CD
            if [ "$arch"x != "source"x ] && [ "$NOCD"x = ""x ] && [ "$NONI"x = ""x ] ; then
                export MAX_PKG_SIZE=300000000
                export DESKTOP=all
                export MAXISOS=1; export MAXJIGDOS=1
                unset FORCE_CD_SIZE1
                export VARIANTS=""
                export OUT_FREE_SID=$PUBDIRJIG
                export OUT_FREE_TST=$PUBDIRJIG
                export OUT_FW_SID=${PUBDIRJIG}-firmware
                export OUT_FW_TST=${PUBDIRJIG}-firmware

                build_started NI
                OMIT_RELEASE_NOTES=1 OMIT_MANUAL=1 NORECOMMENDS=1 \
                    NOSUGGESTS=1 COMPLETE=0 INSTALLER_CD=2 \
                    KERNEL_PARAMS="desktop=all" \
                    DESKTOP=all VARIANTS=xen \
                    TASK=debian-installer+kernel MAXISOS=ALL MAXJIGDOS=ALL \
                    DI=${DI} DI_DIST=${DI} \
                    ./testingcds "$arch" &		

		if $(arch_has_firmware $arch) ; then
                    build_started NIFIRMWARE
                    OMIT_RELEASE_NOTES=1 OMIT_MANUAL=1 NORECOMMENDS=1 \
                        NOSUGGESTS=1 COMPLETE=0 INSTALLER_CD=C \
                        FORCE_FIRMWARE=1 CDNAME=firmware \
                        KERNEL_PARAMS="desktop=all" \
                        DESKTOP=all VARIANTS=xen \
                        TASK=debian-installer+kernel MAXISOS=ALL MAXJIGDOS=ALL \
                        DI=${DI} DI_DIST=${DI} \
                        ./testingcds "$arch" &
                fi

                if [ "$arch" = "i386" ] ; then
                    build_started MACNI
                    OMIT_RELEASE_NOTES=1 OMIT_MANUAL=1 NORECOMMENDS=1 \
                        NOSUGGESTS=1 COMPLETE=0 INSTALLER_CD=F \
                        BOOT_METHODS=BIOS CDNAME="debian-mac" \
                        KERNEL_PARAMS="desktop=all" \
                        DESKTOP=all VARIANTS=xen \
                        TASK=debian-installer+kernel MAXISOS=ALL MAXJIGDOS=ALL \
                        DI=${DI} DI_DIST=${DI} \
                        ./testingcds "$arch" &
                fi
            fi

	    catch_parallel_builds

            for dir in $PUBDIRJIG/$arch/jigdo-*; do
                generate_checksums_for_arch $arch $dir
            done
            if [ -d $PUBDIRJIG-firmware/$arch ] ; then
                for dir in ${PUBDIRJIG}-firmware/$arch/jigdo-*; do
                    generate_checksums_for_arch $arch $dir
                done
            fi

            if [ "$NOSYNC"x = ""x ] ; then
                if [ "$arch_error"x = "none"x ] ; then
                    if [ "$RELEASE_BUILD"x = ""x ] ; then
                        echo "Signing checksums files using the automatic key"
                        ~/build.jessie/sign-images $PUBDIRJIG $arch
                    fi
                    echo "  Running ~/build.jessie/iso_run $PUBDIRJIG/ $RSYNC_TARGET/ $arch &"
                    ~/build.jessie/iso_run $PUBDIRJIG/ $RSYNC_TARGET/ $arch &
                    if [ -d $PUBDIRJIG-firmware/$arch ] ; then
                        if [ "$RELEASE_BUILD"x = ""x ] ; then
                            echo "Signing checksums files using the automatic key"
                            ~/build.jessie/sign-images $PUBDIRJIG-firmware $ARCH
                        fi
                        echo "  Running ~/build.jessie/iso_run ${PUBDIRJIG}-firmware/ $RSYNC_TARGET_FIRMWARE/ $arch &"
                        ~/build.jessie/iso_run ${PUBDIRJIG}-firmware/ $RSYNC_TARGET_FIRMWARE/ $arch &
                    fi
                else
                    ~/build.jessie/report_build_error $RSYNC_TARGET $arch "$arch_error"
                fi
            fi
        else # multi-arch
            rm -rf $PUBDIRJIG/multi-arch $PUBDIRJIG-firmware/multi-arch
            for i in iso-dvd jigdo-dvd iso-cd jigdo-cd; do
                mkdir -p $PUBDIRJIG/multi-arch/$i
                if $(arch_has_firmware multi-arch) ; then
		    mkdir -p $PUBDIRJIG-firmware/multi-arch/$i
		fi
            done

            if [ "$NODVD"x = ""x ] ; then
                export MAX_PKG_SIZE=999999999999
                export DESKTOP=all
                # Special case: make DVD1 fit on a 4GB USB
                # stick (#612074)
		build_started DVD
		export FORCE_CD_SIZE1=STICK4GB
                INSTALLER_CD=6 TASK=Debian-all \
                    KERNEL_PARAMS='desktop=all' \
                    MAXCDS=1 MAXISOS=ALL MAXJIGDOS=ALL \
		    VARIANTS=xen \
                    ./testingcds "i386 amd64 source" &
            fi

            if [ "$NOCD"x = ""x ] && [ "$NONI"x = ""x ] ; then
                export DESKTOP=all
		export OUT_FREE_SID=$PUBDIRJIG
		export OUT_FREE_TST=$PUBDIRJIG
                build_started NI
                OMIT_RELEASE_NOTES=1 OMIT_MANUAL=1 NORECOMMENDS=1 \
                    NOSUGGESTS=1 COMPLETE=0 INSTALLER_CD=2 \
                    KERNEL_PARAMS="desktop=all" \
                    DESKTOP=all VARIANTS=xen \
                    TASK=debian-installer+kernel \
                    MAXISOS=ALL MAXJIGDOS=ALL \
                    DI=${DI} DI_DIST=${DI} \
                    ./testingcds "amd64 i386" &

		if $(arch_has_firmware $arch) ; then
                    build_started NIFIRMWARE
                    OMIT_RELEASE_NOTES=1 OMIT_MANUAL=1 NORECOMMENDS=1 \
                        NOSUGGESTS=1 COMPLETE=0 INSTALLER_CD=C \
                        FORCE_FIRMWARE=1 CDNAME=firmware \
                        KERNEL_PARAMS="desktop=all" \
                        DESKTOP=all VARIANTS=xen \
                        TASK=debian-installer+kernel \
                        MAXISOS=ALL MAXJIGDOS=ALL \
                        DI=${DI} DI_DIST=${DI} \
                        ./testingcds "amd64 i386" &
                fi
            fi

	    catch_parallel_builds

            for dir in $PUBDIRJIG/multi-arch/jigdo-*; do
                generate_checksums_for_arch multi-arch $dir
            done
            if [ -d $PUBDIRJIG-firmware/multi-arch ] ; then
                for dir in ${PUBDIRJIG}-firmware/multi-arch/jigdo-*; do
                    generate_checksums_for_arch multi-arch $dir
                done
	    fi

            if [ "$NOSYNC"x = ""x ] ; then
                if [ "$arch_error"x = "none"x ] || [ "$arch_error"x = ""x ] ; then
                    if [ "$RELEASE_BUILD"x = ""x ] ; then
                        echo "Signing checksums files using the automatic key"
                        ~/build.jessie/sign-images $PUBDIRJIG multi-arch
                    fi
                    echo "  Running ~/build.jessie/iso_run $PUBDIRJIG/ $RSYNC_TARGET/ multi-arch &"
                    ~/build.jessie/iso_run $PUBDIRJIG/ $RSYNC_TARGET/ multi-arch &
                    if [ -d $PUBDIRJIG-firmware/multi-arch ] ; then
                        if [ "$RELEASE_BUILD"x = ""x ] ; then
                            echo "Signing checksums files using the automatic key"
		            ~/build.jessie/sign-images $PUBDIRJIG-firmware multi-arch
                        fi
                        echo "  Running ~/build.jessie/iso_run ${PUBDIRJIG}-firmware/ $RSYNC_TARGET_FIRMWARE/ multi-arch &"
                        ~/build.jessie/iso_run ${PUBDIRJIG}-firmware/ $RSYNC_TARGET_FIRMWARE/ multi-arch &
                    fi
                else
                    ~/build.jessie/report_build_error $RSYNC_TARGET multi-arch "$arch_error"
                fi
            fi
        fi # end of multi-arch

    done

    # Generate HEADER.html files
    ~/build.jessie/generate_headers $RSYNC_TARGET
    ~/build.jessie/generate_headers $RSYNC_TARGET_FIRMWARE

    if [ "$NOFW"x = ""x ] ; then
	~/build.jessie/generate_firmware_images jessie
	~/build.jessie/generate_firmware_images sid
    fi
    
    if [ "$NOSNAP"x = ""x ] ; then
        ~/bin/weekly-snapshots
    fi

    catch_live_builds

    date -u > $PUBDIRJIG/trace/cdimage.debian.org

    rm -f $BUILDLOCK
fi
