#!/bin/ash -efu
#
# mki-run-make
#
# This file is part of mkimage
# Copyright (C) 2007-2009  Alexey Gladkov <gladkov.alexey@gmail.com>
#
# This file is covered by the GNU General Public License,
# which should be included with mkimage as the file COPYING.
#

. shell-quote

include_without_workdir_check=1
. "${0%/*}"/mki-sh-functions

server=
workdir=

read_config() {
	local n v l lineno=0
	while read -r l; do
		lineno=$(($lineno+1))

		[ -n "$l" -o -n "${l##\#*}" ] ||
			continue

		n="${l%%=*}"
		v="${l#$n=}"

		[ "$n" != "$l" ] ||
			fatal "$1[$lineno]: $l: syntax error"

		n="$(printf %s "$n" |tr '[:upper:]' '[:lower:]')"

		case "$n" in
			server)  server="$v"  ;;
			workdir) workdir="$v" ;;
		esac
	done < "$1"
}

showenv() {
	local n v

	printenv |
		sed -ne 's/^\(GLOBAL_[^=]\+\)=/\1\t/p' |
	while read n v; do
		printf '%s="%s"\n' "$n" "$(quote_shell "$v")"
	done

	for n in MAKEFLAGS MAKELEVEL MFLAGS \
		PATH PWD SHELL TERM TMP TMPDIR USER;
	do
		eval v="\${$n:-}"

		[ -n "$v" ] || continue
		printf '%s="%s"\n' "${1:+$1 }$n" "$(quote_shell "$v")"
	done
}

dir="$1"; shift

if [ -z "$NO_REMOTES" -a -z "${dir##*=*}" ]; then
	conf="${dir#*=}"
	dir="${dir%%=*}"

	[ -s "$conf" ] ||
		fatal "$conf: Not found or empty."

	read_config "$conf"

	[ -n "$server" ] ||
		fatal "server: build server required."

	[ -n "$workdir" ] ||
		fatal "workdir: build directory required."

	rsync -rplt "$dir" "$server:$workdir/"

	ssh "$server" "env -i sh -efu" <<-EOF
	$(showenv export)
	cd "$workdir/$dir"
	$@
	EOF

	mkdir -p -- "$dir" "$cachedir" "$outdir"
	rsync -rplt "$server:$workdir/$dir/$workdirname/$outdirname/" "$dir/$workdirname/$outdirname/"

	exit
fi

cd "$dir"
eval exec env -i $(showenv) $(quote_shell "$@")
