forked from kiss-community/kiss
6786d2ca0a
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.
47 lines
1.2 KiB
Bash
Executable File
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"
|