kiss/contrib/kiss-depends-finder
Dylan Araps 6786d2ca0a
kiss: Unify usage outputs for all contrib scripts.
Seeing as how these utilities are now better integrated,
more effort should go into the overall interface between
what should be the "benchmark" or example kiss scripts.
2020-04-18 12:11:56 +03:00

47 lines
1.2 KiB
Bash
Executable File

#!/bin/sh -e
# Find missing dependencies by parsing 'ldd'.
# Ignore shellcheck as we want the warning's behavior.
# shellcheck disable=2015
[ "$1" ] && kiss l "${1:-null}" >/dev/null || {
printf 'usage: kiss-depends-finder [pkg]\n'
exit 1
}
db_dir=$KISS_ROOT/var/db/kiss/installed
grep=$(command -v ggrep) || grep='grep'
printf '=> Detected dependencies:\n'
while read -r file; do
[ -d "$KISS_ROOT/$file" ] && continue
ldd "$KISS_ROOT/$file" 2>/dev/null | while read -r dep; do
# Skip lines containing 'ldd'.
[ "${dep##*ldd*}" ] || continue
# Extract the file path from 'ldd' output.
dep=${dep#* => }
dep=${dep% *}
# Traverse symlinks to get the true path to the file.
pkg=$(readlink -f "$KISS_ROOT/${dep##$KISS_ROOT}")
# Figure out which package owns the file.
pkg=$("$grep" -lFx "${pkg##$KISS_ROOT}" "$db_dir/"*/manifest)
pkg=${pkg%/*}
pkg=${pkg##*/}
# Skip listing these packages as dependencies.
case $pkg in
musl|gcc|"$1") ;;
*) printf '%s\n' "$pkg" ;;
esac
done
done < "$db_dir/$1/manifest" | sort -u
printf '\n=> Package dependencies:\n'
[ -f "$db_dir/$1/depends" ] &&
cat "$db_dir/$1/depends"