numam-spdk/rpmbuild/rpm-deps.sh
John Levon f0b05dd384 scripts/pkgdep: respect $ID_LIKE
As per os-release(5), if $ID is not recognised, $ID_LIKE can be used
to identify similar systems in preference order. Modify the script to try both
variables.

Also do the same for the RPM build scripts.

Signed-off-by: John Levon <john.levon@nutanix.com>
Change-Id: I4ed924df01ec678aab232e114d8c9980463c38e0
Reviewed-on: https://review.spdk.io/gerrit/c/spdk/spdk/+/9260
Community-CI: Mellanox Build Bot
Community-CI: Broadcom CI <spdk-ci.pdl@broadcom.com>
Tested-by: SPDK CI Jenkins <sys_sgci@intel.com>
Reviewed-by: Jim Harris <james.r.harris@intel.com>
Reviewed-by: Karol Latecki <karol.latecki@intel.com>
Reviewed-by: Tomasz Zawadzki <tomasz.zawadzki@intel.com>
Reviewed-by: Dong Yi <dongx.yi@intel.com>
2021-09-06 09:56:14 +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'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
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))