#! /bin/bash

echo '*** WARNING *** WARNING *** WARNING *** WARNING *** WARNING ***' >&2
echo '*** WARNING *** WARNING *** WARNING *** WARNING *** WARNING ***' >&2
echo '*** WARNING *** WARNING *** WARNING *** WARNING *** WARNING ***' >&2
echo '' >&2
echo 'Current versions of Tclkit contain a bug that allows arbitrary ' >&2
echo 'TCL scripts to be executed if a Starpack is used as a CGI with ' >&2
echo 'Apache unless a wrapper script is used. Example wrapper script:' >&2
echo ''
echo '  #! /bin/sh' >&2
echo '  exec /path/to/starpack' >&2
echo '  exit 1' >&2
echo ''
echo '*** WARNING *** WARNING *** WARNING *** WARNING *** WARNING ***' >&2
echo '*** WARNING *** WARNING *** WARNING *** WARNING *** WARNING ***' >&2
echo '*** WARNING *** WARNING *** WARNING *** WARNING *** WARNING ***' >&2


TCLPACK="$1"
OUTPUT="$2"
OURSCP=$0
if echo "${OURSCP}" | grep '/' >/dev/null; then
	OURSCP="$(readlink -f "${OURSCP}")"
else
	OURSCP="$(which "${OURSCP}" 2>/dev/null)"
	if [ -z "${OURSCP}" ]; then
		echo 'Unable to find ourselves, aborting.' >&2
		exit 1
	fi
fi
OURDIR="$(dirname "${OURSCP}")"

SDXKIT="$(readlink -f "${OURDIR}/../rivet-starkit/sdx.kit")"

if [ -z "${TCLPACK}" -o -z "${OUTPUT}" -o -z "$3" ]; then
	echo 'Usage: rivet2starkit <tclkit> <outputkit> <dirname:destdir> ...' >&2
	exit 1
fi

TMPRIVETDIR="${TMPDIR:-/tmp}/rivet2starkit-$$${RANDOM}${RANDOM}${RANDOM}"
mkdir "${TMPRIVETDIR}" || exit 1

TMPVFSDIR="${TMPRIVETDIR}/rivet.vfs"
rm -rf "${TMPVFSDIR}"

# Copy each source directory into the VFS area
shift
for srcdir in $*; do
	if echo "${srcdir}" | grep ':' >/dev/null; then
		dstdir=$(echo "${srcdir}" | cut -f 2 -d ':')
		srcdir=$(echo "${srcdir}" | cut -f 1 -d ':')
	else
		dstdir=""
	fi

	SRCDIR="$(readlink -f "${srcdir}")"
	if [ -z "${SRCDIR}" -o ! -e "${SRCDIR}" ]; then
		echo "File not found: ${SRCDIR}" >&2
		continue
	fi

	mkdir -p "${TMPVFSDIR}/$dstdir" >/dev/null 2>/dev/null
	cp -rp "${SRCDIR}"/* "${TMPVFSDIR}/$dstdir"
done

# Install main script
cp "${OURDIR}/../rivet-starkit/main.tcl" "${TMPVFSDIR}"

# Install requiste packages
mkdir "${TMPVFSDIR}/lib" >/dev/null 2>/dev/null
rm -rf "${TMPVFSDIR}/rivet-tcl"
cp -rp "${OURDIR}/../packages"/tclrivet "${TMPVFSDIR}/lib/"
cp -rp "${OURDIR}/../rivet-tcl" "${TMPVFSDIR}/"

# Add "Deny from all" .htaccess files where needed
echo "Deny from all" > "${TMPVFSDIR}/lib/.htaccess"
echo "Deny from all" > "${TMPVFSDIR}/rivet-tcl/.htaccess"

# Wrap VFS dir into kit
echo "${TCLPACK}" "${SDXKIT}" wrap "${TMPRIVETDIR}/rivet.kit"
(
	cd "${TMPRIVETDIR}"
	"${TCLPACK}" "${SDXKIT}" wrap rivet.kit
)

# Copy output kit to target
cp "${TMPRIVETDIR}/rivet.kit" "${OUTPUT}"

# Cleanup
rm -rf "${TMPRIVETDIR}"
