#!/bin/sh

# load common functions, compatible with local and installed script
. `dirname $0`/../share/eterbuild/functions/common

if [ "$1" = "-h" ] || [ "$1" = "--help" ] ; then
	echo "dmake [-t] [-p] - make with distcc using (distributed build)"
	echo " -p  run in plain mode (without pump)"
	echo " -t  run test compiler via ssh for build hosts"
	exit 0
fi

if [ "$1" = "-p" ] ; then
	shift
	PLAIN_DISTCC=distcc
fi

get_quoted_list()
{
    local LIST=
    for i in $@ ; do
        LIST="$LIST$i,"
    done
    echo "$LIST"
}


if [ "$1" = "-t" ] ; then
	shift
	PDSH=$(which pdsh 2>/dev/null)
	[ -n "$PDSH" ] || fatal "Install pdsh package for test build cloud"
	docmd $PDSH -w$(get_quoted_list $DISTCC_64_HOSTS $DISTCC_32_HOSTS) "echo -n \"\$(g++ -v 2>&1 | tail -n1) ;  \$(distccd --version | head -n1 ) \$(ps ax | grep -v grep | grep -q distccd || echo "DISABLED")\" "
	exit
fi

extra_to_pump_mode()
{
    local LIST=
    if [ -n "$PLAIN_DISTCC" ] ; then
        echo "$@"
        return
    fi

    for i in $@ ; do
        LIST="$LIST $i,cpp,lzo"
    done
    echo "$LIST"
}

DISTCC=$(which distcc 2>/dev/null)
[ -n "$DISTCC" ] || fatal "Install distcc package for run distributed make via dmake"

if [ -n "$PLAIN_DISTCC" ] ; then
    PUMP=
else
    PUMP=$(which pump 2>/dev/null)
    [ -n "$PUMP" ] || fatal "Install distcc-pump package for run distributed make via dmake"
fi

COLORIFER=$(which colorifer 2>/dev/null)
if false && [ -n "$COLORIFER" ] ; then
    export COLORIFER_NAME=g++
    export COLORIFER_REDIRECT=$DISTCC
    DISTCC=$COLORIFER
fi

DISTCXX="$DISTCC"

if [ "$BUILDARCH" = "x86_64" ] ; then
    export DISTCC_HOSTS="$(extra_to_pump_mode $DISTCC_64_HOSTS)"
    DISTCC_THREADS=$DISTCC_64_THREADS
else
    export DISTCC_HOSTS="$(extra_to_pump_mode $DISTCC_64_HOSTS $DISTCC_32_HOSTS)"
    DISTCC_THREADS=$(($DISTCC_32_THREADS + $DISTCC_64_THREADS))
    DISTCC="$DISTCC gcc -m32"
    DISTCXX="$DISTCXX g++ -m32"
fi

echo "Build on '$DISTCC_HOSTS' hosts ($BUILDARCH arch)"

if [ -z "$DISTCC_HOSTS" ] || [ -z "$DISTCC_THREADS" ] ; then
    fatal "Set DISTCC_??_HOSTS and DISTCC_??_THREADS var in config"
fi

# Do not use all threads in plain mode
if [ -n "$PLAIN_DISTCC" ] ; then
    DISTCC_THREADS=$(($DISTCC_THREADS/2))
# FIXME: see lsdistcc also
#else
#    export DISTCC_POTENTIAL_HOSTS="$DISTCC_HOSTS"
#    unset DISTCC_HOSTS
fi

cd_to_realcwd
docmd $NICE time -p $PUMP make -j$DISTCC_THREADS CC="$DISTCC" CXX="$DISTCXX" "$@"