summaryrefslogtreecommitdiffstats
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
parent4509eb3cd38a44c296e97bbf8174fcd2620fa9a8 (diff)
downloadportage-062dd812598bee4a66f39bf1b41e83afe3be3e21.tar.gz
portage-062dd812598bee4a66f39bf1b41e83afe3be3e21.tar.bz2
portage-062dd812598bee4a66f39bf1b41e83afe3be3e21.zip
Add support for QA_SONAME variable (bug #281964). Add support for QA_NEEDED variable.
svn path=/main/trunk/; revision=14115
-rwxr-xr-xbin/misc-functions.sh55
-rw-r--r--man/ebuild.510
2 files changed, 60 insertions, 5 deletions
diff --git a/bin/misc-functions.sh b/bin/misc-functions.sh
index 473bde00f..69c0ff1ce 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
diff --git a/man/ebuild.5 b/man/ebuild.5
index fba66f57a..4a2d29601 100644
--- a/man/ebuild.5
+++ b/man/ebuild.5
@@ -494,6 +494,16 @@ LDFLAGS variable.
This should contain a list of file paths, relative to the image directory, of
files that contain pre-stripped binaries. The paths may contain regular
expressions with escape\-quoted special characters.
+.TP
+\fBQA_SONAME\fR
+This should contain a list of file paths, relative to the image directory, of
+shared libraries that lack SONAMEs. The paths may contain regular expressions
+with escape\-quoted special characters.
+.TP
+\fBQA_NEEDED\fR
+This should contain a list of file paths, relative to the image directory, of
+shared libraries that lack NEEDED entries. The paths may contain regular
+expressions with escape\-quoted special characters.
.SH "PORTAGE DECLARATIONS"
.TP
.B inherit