cygpath() { /bin/cygpath "$@"; }

fetchenv() {
	local IFS
	IFS=
	local batch=$1
	shift

	if ! [ -f "$batch" ]; then
		echo "$batch not found"
		return 1
	fi

	sd=$(/bin/cygpath --sysdir)

	local d=$(mktemp -d /tmp/fetchenv.XXXXXXXXXX)
	$sd/cmd /c set >$d/srcenv 2>/dev/null || true
	$sd/cmd /c call $(/bin/cygpath -w $batch) "$@" \>$(/bin/cygpath -w $d/log) 2\>\&1 \& set >$d/dstenv 2>/dev/null || true

	! [ -f $d/log ] || cat $d/log

	while [ -f $d/log ]; do
		/bin/rm $d/log || sleep 2
	done

	cat <<EOF >$d/envdiff
/^+++/d;
/^[^+]/d;
s/^+//;
/^PATH=/ {
	s/\\\\/\\//g;
	s#\\([=;]\\)\\([a-zA-Z]\\):#\\1/cygdrive/\\2#g;
	s/;/:/g;
}
s/;/\\\\;/g;
s/^/export /;
s/=/='/;
s/\\\\r//g;
s/\r$/'/;
EOF
	/bin/diff -u $d/srcenv $d/dstenv | /bin/sed -f $d/envdiff >$d/diffenv
	. $d/diffenv
	PATH=/bin:/usr/bin:/usr/local/bin:$PATH:$(cygpath --sysdir):$(cygpath --windir)
	/bin/rm -fr $d
}

fetchenv $(cygpath -a "$(</etc/osgeo4w-root)")/bin/o4w_env.bat >/dev/null
