diff options
author | Arfrever Frehtes Taifersar Arahesis <arfrever@gentoo.org> | 2009-08-21 17:13:53 +0000 |
---|---|---|
committer | Arfrever Frehtes Taifersar Arahesis <arfrever@gentoo.org> | 2009-08-21 17:13:53 +0000 |
commit | 062dd812598bee4a66f39bf1b41e83afe3be3e21 (patch) | |
tree | 3c99a6904bd1eabe7ac0835975742b5666234e1e | |
parent | 4509eb3cd38a44c296e97bbf8174fcd2620fa9a8 (diff) | |
download | portage-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-x | bin/misc-functions.sh | 55 | ||||
-rw-r--r-- | man/ebuild.5 | 10 |
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 |