#!/bin/bash

_gui_build(){

#init
	oc_size=${#_oscamconfdir_custom};
	[ "$oc_size" -gt "4" ] && _oscamconfdir_default="$_oscamconfdir_custom";

	if [ "$_toolchainname" == "native" ];then
		log_name="$(date +%F).$(date +%X).$(hostname).log";
	else
		log_name="$(date +%F).$(date +%X).$_toolchainname.log";
	fi;

	ologo >"$ldir/$log_name";
	[ -f "$configdir/max_cpus" ] && cpus="$(cat "$configdir/max_cpus")" || cpus="$(CPUS)";
	CROSS="$tcdir/$_toolchainname/bin/$_compiler";
	[ "$_stagingdir" == "1" ] && export STAGING_DIR="$tcdir/$_toolchainname";
	[ -f "$configdir/compiler_option" ] && co=$(cat "$configdir/compiler_option") || co="-O2";

#make clean
	cd "$svndir";
	make distclean > /dev/null 2>&1;
	USESTRING_='';

#do use_vars
	for e2 in $USESTRING;do
		[ "USE_$e2" == "USE_PATCH" ] && _apply_menupatch;is_blocked=0;
		for e1 in $_block;do
			if [ "$e1" == "USE_$e2" ];then
				is_blocked=1;
				[ "USE_$e2" == "USE_LIBUSB" ] && silent=$(./config.sh -D CARDREADER_SMARGO);
			fi;
		done;
		[ "$is_blocked" == "0" ] && _us="USE_$e2 $_us";
	done;

	for e in $_us;do
		if [ ! "$e" == "USE_TARGZ" ] && [ ! "$e" == "USE_COMPRESS" ] && [ ! "$e" == "USE_PATCH" ];then
			USESTRING_="$e=1 $USESTRING_";
		fi;
	done;

	if [ "${USE_vars[USE_PCSC]}"   == "USE_PCSC=1"   ];then
		_pcsc="-pcsc"  ;
	else
		_pcsc=;
	fi;
	if [ "${USE_vars[USE_LIBUSB]}" == "USE_LIBUSB=1" ];then
		_usb="-libusb";
	else
		_usb=;
	fi;
	USESTRING_=${USE_vars[@]};

#todo add switch for verbose
	_generate_oscam_name "$_toolchainname";
	targztmp="$(mktemp)";
	if [ ! "${USE_vars[USE_TARGZ]}" == "USE_TARGZ=1" ];then
		s3cfg_vars[USE_TARGZ]=0;
	fi;
	check_smargo;

#build
	_sz;
	(ologo; _nl;
	timer_start;
	make -j"$cpus" \
		"CONF_DIR=$_oscamconfdir_default" "OSCAM_BIN=$bdir/$oscam_name" "CC_OPTS=$co $cc_opts" "CC_WARN=$cc_warn" "CROSS=$CROSS" $stapivar $USESTRING_ 2>&1 \
		|tee "$ldir/$log_name" \
		|grep --line-buffered -v 'BFD\|^/' \
		|grep --line-buffered '^CC\|^GEN\|UseFlags\|  CONF_DIR =\|Binary\|LINK\|STRIP\|BUILD\|Addons\|Protocols\|Readers\|CardRdrs\|^/' \
		|sed -u "s/^|/ |/g;s/^LINK/ LINK  >/g;s/^STRIP/ STRIP >/g;s/^CC\|^BUILD/ BUILD >/g;s/^GEN/ GEN   >/g;s/WEBIF_//g;s/WITH_//g;s/MODULE_//g;s/CS_//g;s/HAVE_//g;s/_CHARSETS//g;s/CW_CYCLE_CHECK/CWCC/g;s/SUPPORT//g;"
	timer_stop;
	timer_calc;

#save list_smargo
	cd "$svndir/Distribution";
	lsmn="$(ls list_smargo* 2> /dev/null)";
	if [ "${s3cfg_vars[SAVE_LISTSMARGO]}" == "1" ] && [ -f "$svndir/Distribution/$lsmn" ];then
		if [ "$_toolchainname" == "native" ];then
			echo -e "SAVE\t$lsmn $txt_as oscam-svn$(REVISION)-$(hostname)-list_smargo"| tee -a "$ldir/$log_name";
			mv -f "$lsmn" "$bdir/oscam-svn$(REVISION)-$(hostname)-list_smargo";
			echo "oscam-svn$(REVISION)-$(hostname)-list_smargo" >"$targztmp";
		else
			echo -e "SAVE\t$lsmn $txt_as oscam-svn$(REVISION)-$_toolchainname-list_smargo"|tee -a "$ldir/$log_name";
			mv -f "$lsmn" "$bdir/oscam-svn$(REVISION)-$_toolchainname-list_smargo";
			echo "oscam-svn$(REVISION)-$_toolchainname-list_smargo" >"$targztmp";
		fi;
	fi;

#show buildtime
	echo -e "\n TIME\t[ $txt_buildtime $((Tcalc / 60)) min(s) $((Tcalc % 60)) secs ]"| tee -a "$ldir/$log_name";sleep 1;

#remove debug binary
	if [ "${s3cfg_vars[delete_oscamdebugbinary]}" == "1" ] && [ -f "$bdir/$oscam_name.debug" ];then
		rm "$bdir/$oscam_name.debug";
		echo -e "\n $txt_delete $oscam_name.debug\n"|tee -a "$ldir/$log_name";
	fi;) | "$gui" "$st_" --colors --title " -[ Build ]- " "$pb_" "$_lines" "$_cols";sleep 2;

#COMPRESS
	if [ ! "$stapi_allowed" == "1" ];then
		if [ "${s3cfg_vars[COMPRESS]}" == "1" ] || [ "${USE_vars[USE_COMPRESS]}" == "USE_COMPRESS=1" ];then
			(compress_cam_gui "$oscam_name") |tee -a "$ldir/$log_name"| "$gui" "$st_" --title " -[ COMPRESS ]- " "$pb_" 7 50;
			sleep 2;
		fi;
	fi;

#tar
	if [ "${USE_vars[USE_TARGZ]}" == "USE_TARGZ=1" ];then
		(tar_cam_gui "$oscam_name" "$(cat "$targztmp")") |tee -a "$ldir/$log_name"| "$gui" "$st_" --title " -[ TAR Binary ]- " "$pb_" 10 70;
		sleep 2;
	fi;

#link log
	ln -sf "$ldir/$log_name" "$workdir/lastbuild.log";
	[ -f "$targztmp" ] && rm -rf "$targztmp";
};