Hi, I am looking for a way to show a package's dependencies. The output might look similar to how -R looks in pkg_info(1), e.g.:
Information for inst:python-3.7.4 Directly depends on: bzip2-1.0.8 gettext-runtime-0.20.1p0 libffi-3.2.1p5 sqlite3-3.29.0 xz-5.2.4 Transitively depends on: libiconv-1.16p0 Does such a command such as this already exist? I guessed that the pkg_* tools would have this covered but I was not able to find it in the manpages. In making the above example, I created a proof of concept shell script that demonstrates the desired behaviour. It has limitations on what package names it can accept, it only works locally and probably has numerous other problems :). It is inlined below. -- Chris Rawnsley #!/bin/sh bin=$(basename "$0") usage() { cat <<EOF usage: ${bin} pkg-name EOF } PKG_DBDIR=${PKG_DBDIR:-/var/db/pkg} direct_deps=$(mktemp -t "${bin}.direct_deps.XXXXXX") temp_deps=$(mktemp -t "${bin}.temp_deps.XXXXXX") all_deps=$(mktemp -t "${bin}.all_deps.XXXXXX") cleanup() { rm -f "${direct_deps}" "${temp_deps}" "${all_deps}" } trap cleanup INT TERM QUIT if ! touch "${direct_deps}" "${temp_deps}" "${all_deps}" 2>/dev/null; then printf '%s\n' "${bin}: Unable to make temporary files:" cleanup; exit 1 fi # Does not account for categories, variants or versions... pkg_unresolved=$1 pkg_dir=$(find "${PKG_DBDIR}" -type d -iname "${pkg_unresolved}-*" -print | head -1) if [ -z "${pkg_dir}" ]; then printf '%s\n' "${bin}: unable to find package" cleanup; exit 1 fi pkg=$(basename "${pkg_dir}") pkg_requiring="${pkg_dir}/+REQUIRING" if [ -s "${pkg_requiring}" ]; then sort "${pkg_requiring}" | tee "${temp_deps}" >"${direct_deps}" fi while deps=$(comm -23 "${temp_deps}" "${all_deps}" | grep .); do printf '%s\n' ${deps} >>"${all_deps}" for d in ${deps}; do cat "${PKG_DBDIR}/$d/+REQUIRING" >>"${temp_deps}" 2>/dev/null done sort -uo "${all_deps}" "${all_deps}" sort -uo "${temp_deps}" "${temp_deps}" done printf 'Information for inst:%s\n\n' "${pkg}" printf 'Directly depends on:\n' printf '%s\n' $(cat ${direct_deps}) printf '\n' printf 'Transitively depends on:\n' printf '%s\n' $(comm -23 "${all_deps}" "${direct_deps}") cleanup