#!/bin/zsh

set -e
setopt errreturn

bindir=$(cd $0:h; print $PWD)

if ((ARGC)); then
    if [[ $1 = /* ]]; then
	destdir=$1
    else
	destdir=$PWD/$1
    fi
    shift
elif [[ -d cgi-bin ]]; then
    destdir=$PWD/t
else
    destdir=$PWD
fi

if ! [[ -d $destdir ]]; then
    mkdir -vp $destdir
    echo deny from all > $destdir/.htaccess
fi

# To make symlink relative...
function relative_link {
    local x y i j link
    x=(${(s,/,)1})
    y=(${(s,/,)2})
    for ((i = 1; i < $#x && i < $#y; i++)); do
	[[ $x[$i] = $y[$i] ]] && continue;

	# found
	link=()
	for ((j = i; j <= $#y; j++)); do
	    link+=(..)
	done
	link+=(${x[$i,$#x]})
	print ${(j,/,)link}
	return
    done

    echo 1>&2 "Can't detect relative_link for: $1 $2"
    return 1
}

link=$(relative_link $bindir $destdir)

for fn in $bindir/*.t(*); do
    if [[ -e $destdir/$fn:t ]]; then
	echo exists: $fn:t
    else
	ln -sv $link/$fn:t $destdir/$fn:t
    fi
done