#!/bin/bash
#title           :gluon-ffrgwest-0.10.2.sh
#description     :Build gluon version 2018.2.4 for Freifunk Region Ruhrgebiet West
#author          :Daniel Jäger
#date            :20250610
#version         :0.1
#usage           :wget http://scripts.djaeger.info/gluon-ffrgwest-0.10.2.sh -O - -q | bash
#===============================================================================

GLUON_TAG=v2018.2.4
#GLUON_RELEASE=0.10.2
GLUON_RELEASE=master
GLUON_BRANCH=stable
#GLUON_BROKEN=1
GLUON_BROKEN=0


# Set up the shell variables for colors
# http://stackoverflow.com/questions/5947742/how-to-change-the-output-color-of-echo-in-linux
red=`tput setaf 1`;
green=`tput setaf 2`;
yellow=`tput setaf 3`;
bold=`tput bold`;
clear=`tput sgr0`;


# logs start and enddate
LOGFILE=/tmp/gluon-build-log-$GLUON_RELEASE
rm -f $LOGFILE
touch $LOGFILE


# Gluon targets to build
#GLUON_TARGETS="ar71xx-generic            ar71xx-nand brcm2708-bcm2708 brcm2708-bcm2709 mpc85xx-generic                                            x86-generic x86-geode x86-64"
GLUON_TARGETS="ar71xx-generic ar71xx-tiny ar71xx-nand brcm2708-bcm2708 brcm2708-bcm2709 mpc85xx-generic mpc85xx-p1020 ramips-mt7621 sunxi-cortexa7 x86-generic x86-geode x86-64 ipq40xx ramips-mt7620 ramips-mt76x8 ramips-rt305x"
if [[ $BROKEN -eq 1 ]]; then
    GLUON_TARGETS="$GLUON_TARGETS ar71xx-mikrotik brcm2708-bcm2710 ipq806x mvebu-cortexa9"
fi


# Options for make
OPTIONS="BROKEN=$GLUON_BROKEN GLUON_RELEASE=$GLUON_RELEASE GLUON_BRANCH=$GLUON_BRANCH V=s --output-sync=recurse"


# detect amount of CPU cores
CORES=$(lscpu|grep -e '^CPU(s):'|xargs|cut -d" " -f2)


DEBIAN_FRONTEND=noninteractive
DEBIAN_PRIORITY=critical
DEBCONF_NOWARNINGS=yes


banner() {
    echo "" |& tee -a $LOGFILE
    echo "+------------------------------------------+" |& tee -a $LOGFILE
    printf "| %-40s |\n" "$@" >> $LOGFILE
    printf "|${bold} %-40s ${clear}|\n" "$@"
    printf "| %-40s |\n" "`date`" |& tee -a $LOGFILE
    echo "+------------------------------------------+" |& tee -a $LOGFILE
    echo "" |& tee -a $LOGFILE
}


if [[ $EUID -eq 0 ]]; then
    echo "cannot be run as root" |& tee -a $LOGFILE
    exit
fi


banner "Install dependencies"
sudo apt-get install -y curl git make gcc g++ unzip libncurses5-dev zlib1g-dev subversion gawk bzip2 libssl-dev


banner "Clean release dir"
rm -rf gluon-$GLUON_RELEASE


banner "Clone gluon"
git clone -b $GLUON_TAG https://github.com/freifunk-gluon/gluon.git gluon-$GLUON_RELEASE


banner "Clone site config"
cd gluon-$GLUON_RELEASE
git clone -q -b $GLUON_RELEASE https://github.com/ffrgw/site-ffrgw.git site


banner "Make update"
make update


banner "Fix board-2.bin source"
sed -i 's/board-2\.bin?id=/board-2.bin./g' openwrt/package/firmware/ath10k-firmware/Makefile


banner "Fix github legacy protocol"
git config --global url."https://github.com/".insteadOf git://github.com/


banner "Build targets"
start_timestamp=$(date +%s)
i=0
for TARGET in $GLUON_TARGETS; do
	start=$(date +%s)
	echo "########## $(date) start building target $TARGET ##########" |& tee -a $LOGFILE
	make -j$CORES GLUON_TARGET=$TARGET $OPTIONS || exit 1
	echo "########## $(date) finished building target $TARGET ##########"  |& tee -a $LOGFILE
	echo "Zeit seit Start: "$((($(date +%s)-$start_timestamp)/60))":"$((($(date +%s)-$start_timestamp)%60))" Minuten" |& tee -a $LOGFILE
	M="Zeit $TARGET: "$((($(date +%s)-$start)/60))":"$((($(date +%s)-$start)%60))" Minuten"
	MESSAGE=$(echo -e "$MESSAGE\n$M")
	let i++
done && : "all targets created in folder output/images/"


cd ..
banner "Build finished"


echo "########## $(date) finished script ##########" |& tee -a $LOGFILE
clear
echo -e "$MESSAGE" >> $LOGFILE
cat $LOGFILE
