2021-02-16 15:07:33 +00:00
|
|
|
#!/usr/bin/env bash
|
|
|
|
# This script simply iterates over all libs SPDK binaries link
|
|
|
|
# to and returns a list of .rpm packages SPDK may depend on. At
|
|
|
|
# the end, the list strictly relates to how the SPDK build was
|
|
|
|
# ./configure'ed.
|
|
|
|
|
|
|
|
shopt -s nullglob
|
|
|
|
|
|
|
|
rpmdir=$(readlink -f "$(dirname "$0")")
|
|
|
|
rootdir=$(readlink -f "$rpmdir/../")
|
|
|
|
rc=0
|
|
|
|
|
|
|
|
bins=("$rootdir/"build/{bin,examples}/*)
|
|
|
|
(($#)) && bins=("$@")
|
|
|
|
|
|
|
|
((${#bins[@]} > 0)) || exit 0
|
|
|
|
|
|
|
|
source /etc/os-release
|
2021-08-23 22:00:01 +00:00
|
|
|
|
|
|
|
id_ok=no
|
|
|
|
|
|
|
|
for id in $ID $ID_LIKE; do
|
|
|
|
[[ "$id" =~ ^(fedora|centos|rhel) ]] && id_ok=yes
|
|
|
|
done
|
|
|
|
|
|
|
|
if [[ "$id_ok" != "yes" ]]; then
|
|
|
|
exit 0
|
|
|
|
fi
|
2021-02-16 15:07:33 +00:00
|
|
|
|
|
|
|
declare -A deps=()
|
|
|
|
for bin in "${bins[@]}"; do
|
|
|
|
if ! type -P "$bin"; then
|
|
|
|
printf '%s is missing\n' "$bin" >&2
|
|
|
|
rc=1
|
|
|
|
continue
|
|
|
|
fi
|
|
|
|
while read -r name _ lib _; do
|
|
|
|
[[ -n $lib ]] || continue
|
|
|
|
[[ -z ${deps["$lib"]} ]] || continue
|
|
|
|
if [[ ! -e $lib ]]; then
|
|
|
|
lib=$name pkg="missing"
|
|
|
|
rc=1
|
|
|
|
elif ! pkg=$(rpm -qf "$lib"); then
|
|
|
|
pkg=${lib##*/}
|
|
|
|
fi
|
|
|
|
deps["$lib"]=$pkg
|
|
|
|
done < <(LD_TRACE_LOADED_OBJECTS=1 "$bin")
|
|
|
|
done
|
|
|
|
|
|
|
|
if [[ -n $LIST_LIBS ]]; then
|
|
|
|
for lib in "${!deps[@]}"; do
|
|
|
|
echo "$lib:${deps["$lib"]}"
|
|
|
|
done
|
|
|
|
else
|
|
|
|
printf '%s\n' "${deps[@]}"
|
|
|
|
fi | sort -u
|
|
|
|
|
|
|
|
((rc == 0))
|