summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorArfrever Frehtes Taifersar Arahesis <arfrever@gentoo.org>2009-08-21 17:13:53 +0000
committerArfrever Frehtes Taifersar Arahesis <arfrever@gentoo.org>2009-08-21 17:13:53 +0000
commit062dd812598bee4a66f39bf1b41e83afe3be3e21 (patch)
tree3c99a6904bd1eabe7ac0835975742b5666234e1e /bin/misc-functions.sh
parentSupport QA_DT_HASH_${ARCH} and QA_PRESTRIPPED_${ARCH} (bug #271416). (diff)
downloadportage-idfetch-062dd812598bee4a66f39bf1b41e83afe3be3e21.tar.gz
portage-idfetch-062dd812598bee4a66f39bf1b41e83afe3be3e21.tar.bz2
portage-idfetch-062dd812598bee4a66f39bf1b41e83afe3be3e21.zip
Add support for QA_SONAME variable (bug #281964). Add support for QA_NEEDED variable.
svn path=/main/trunk/; revision=14115
Diffstat (limited to 'bin/misc-functions.sh')
-rwxr-xr-xbin/misc-functions.sh55
1 files changed, 50 insertions, 5 deletions
diff --git a/bin/misc-functions.sh b/bin/misc-functions.sh
index 473bde00..69c0ff1c 100755
--- a/bin/misc-functions.sh
+++ b/bin/misc-functions.sh
@@ -243,26 +243,71 @@ install_qa_check() {
die "Aborting due to QA concerns: ${die_msg}"
fi
- # Run some sanity checks on shared libraries
- for d in "${D}"lib* "${D}"usr/lib* ; do
- f=$(scanelf -ByF '%S %p' "${d}"/lib*.so* | gawk '$2 == "" { print }')
+ # Check for shared libraries lacking SONAMEs
+ qa_var="QA_SONAME_${ARCH/-/_}"
+ eval "[[ -n \${!qa_var} ]] && QA_SONAME=(\"\${${qa_var}[@]}\")"
+ f=$(scanelf -ByF '%S %p' "${D}"{,usr/}lib*/lib*.so* | gawk '$2 == "" { print }' | sed -e "s:^[[:space:]]${D}:/:")
+ if [[ -n ${f} ]] ; then
+ echo "${f}" > "${T}"/scanelf-missing-SONAME.log
+ if [[ "${QA_STRICT_SONAME-unset}" == unset ]] ; then
+ if [[ ${#QA_SONAME[@]} -gt 1 ]] ; then
+ for x in "${QA_SONAME[@]}" ; do
+ sed -e "s#^/${x#/}\$##" -i "${T}"/scanelf-missing-SONAME.log
+ done
+ else
+ local shopts=$-
+ set -o noglob
+ for x in ${QA_SONAME} ; do
+ sed -e "s#^/${x#/}\$##" -i "${T}"/scanelf-missing-SONAME.log
+ done
+ set +o noglob
+ set -${shopts}
+ fi
+ fi
+ f=$(<"${T}"/scanelf-missing-SONAME.log)
if [[ -n ${f} ]] ; then
vecho -ne '\a\n'
eqawarn "QA Notice: The following shared libraries lack a SONAME"
eqawarn "${f}"
vecho -ne '\a\n'
sleep 1
+ else
+ rm -f "${T}"/scanelf-missing-SONAME.log
fi
+ fi
- f=$(scanelf -ByF '%n %p' "${d}"/lib*.so* | gawk '$2 == "" { print }')
+ # Check for shared libraries lacking NEEDED entries
+ qa_var="QA_NEEDED_${ARCH/-/_}"
+ eval "[[ -n \${!qa_var} ]] && QA_NEEDED=(\"\${${qa_var}[@]}\")"
+ f=$(scanelf -ByF '%n %p' "${D}"{,usr/}lib*.so* | gawk '$2 == "" { print }' | sed -e "s:^[[:space:]]${D}:/:")
+ if [[ -n ${f} ]] ; then
+ echo "${f}" > "${T}"/scanelf-missing-NEEDED.log
+ if [[ "${QA_STRICT_NEEDED-unset}" == unset ]] ; then
+ if [[ ${#QA_NEEDED[@]} -gt 1 ]] ; then
+ for x in "${QA_NEEDED[@]}" ; do
+ sed -e "s#^/${x#/}\$##" -i "${T}"/scanelf-missing-NEEDED.log
+ done
+ else
+ local shopts=$-
+ set -o noglob
+ for x in ${QA_NEEDED} ; do
+ sed -e "s#^/${x#/}\$##" -i "${T}"/scanelf-missing-NEEDED.log
+ done
+ set +o noglob
+ set -${shopts}
+ fi
+ fi
+ f=$(<"${T}"/scanelf-missing-NEEDED.log)
if [[ -n ${f} ]] ; then
vecho -ne '\a\n'
eqawarn "QA Notice: The following shared libraries lack NEEDED entries"
eqawarn "${f}"
vecho -ne '\a\n'
sleep 1
+ else
+ rm -f "${T}"/scanelf-missing-NEEDED.log
fi
- done
+ fi
PORTAGE_QUIET=${tmp_quiet}
fi