#!/bin/sh skip() { k=$(echo -n "$1" | tr -c [:alnum:] _) eval v=\"\$h_$k\" [ -n "$v" ] && return 0 || eval h_$k=1 && return 1 } dpath() { local l p for p do skip "$p" && continue l=$(pkg query %rn-%rv "$p") [ -z "$l" ] && continue case " $goal " in *\ $l\ *) res="$p $goal"; return 0;; esac dpath $l && res="$p $res" && return 0 done return 1 } goal="$2" dpath "$1" && echo $res && return 0 return 1 # EOF