numam-spdk/rpmbuild/rpm-deps.sh
Josh Soref b067cba8a3 spelling: rpmbuild
Part of #2256

* configured

Change-Id: Id63410c990522e74263f6612e43996237a9ce0ee
Signed-off-by: Josh Soref <jsoref@gmail.com>
Reviewed-on: https://review.spdk.io/gerrit/c/spdk/spdk/+/10407
Community-CI: Broadcom CI <spdk-ci.pdl@broadcom.com>
Tested-by: SPDK CI Jenkins <sys_sgci@intel.com>
Reviewed-by: Tomasz Zawadzki <tomasz.zawadzki@intel.com>
Reviewed-by: Jim Harris <james.r.harris@intel.com>
2021-12-01 19:41:08 +00:00

59 lines
1.1 KiB
Bash
Executable File

#!/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'd.
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
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
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))