#! /usr/bin/bash

function add_dir() {
	local dir
	local dir_re

	dir="$1"
	dir_re="$(echo "${dir}" | sed -r 's@(/|\\|\.|\[|\])@\\&@g')"

	find "${dir}" -type d | sed "s/^${dir_re}/./" | xargs -n 1 mkdir >/dev/null 2>/dev/null
	find "${dir}" '!' -type d | awk '{
		src = $0;

		dest = $0;
		gsub(/^'"${dir_re}"'/, ".", dest);

		srcadd = dest;
		gsub(/[^\/]/, "", srcadd);
		srcadd_cnt = length(srcadd) - 1;

		for (i = 0; i < srcadd_cnt; i++) {
			src = "../" src
		}

		print "ln -s", src, dest
	}'  | sh
}

platform='linux-x86_64'

for pkg in ../../../*; do
	case "${pkg}" in
		*/applications)
			continue
			;;
	esac

	for try_platform in ${platform} noarch-noarch __fail__; do
		if [ -d "${pkg}/${try_platform}" ]; then
			pkg="${pkg}/${try_platform}"
			break
		fi
	done

	if [ "${try_platform}" = '__fail__' ]; then
		continue
	fi

	version="$(ls "${pkg}" | sort --sort=version | tail -n 1)"

	pkg="${pkg}/${version}"

	if [ ! -d "${pkg}" ]; then
		continue
	fi

	add_dir "${pkg}"
done
