From fd70eeca02eb36ca9f9d803ac176b375e6f0fa30 Mon Sep 17 00:00:00 2001 From: Mike Frysinger Date: Tue, 2 Jan 2007 03:31:50 +0000 Subject: merge all of the QA related checks together svn path=/main/trunk/; revision=5442 --- bin/misc-functions.sh | 97 ++++++++++++++++++++++++++++++++++++++++++++++++++- bin/prepall | 90 ----------------------------------------------- 2 files changed, 96 insertions(+), 91 deletions(-) (limited to 'bin') diff --git a/bin/misc-functions.sh b/bin/misc-functions.sh index 23e17b3e4..8a42a2f77 100755 --- a/bin/misc-functions.sh +++ b/bin/misc-functions.sh @@ -165,6 +165,27 @@ 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 }') + if [[ -n ${f} ]] ; then + vecho -ne '\a\n' + vecho "QA Notice: the following shared libraries lack a SONAME" + vecho "${f}" + vecho -ne '\a\n' + sleep 1 + fi + + f=$(scanelf -ByF '%n %p' "${d}"/lib*.so* | gawk '$2 == "" { print }') + if [[ -n ${f} ]] ; then + vecho -ne '\a\n' + vecho "QA Notice: the following shared libraries lack NEEDED entries" + vecho "${f}" + vecho -ne '\a\n' + sleep 1 + fi + done + PORTAGE_QUIET=${tmp_quiet} fi @@ -182,6 +203,81 @@ install_qa_check() { unset INSTALLTOD fi + # this should help to ensure that all (most?) shared libraries are executable + # and that all libtool scripts / static libraries are not executable + for i in "${D}"opt/*/lib{,32,64} \ + "${D}"lib{,32,64} \ + "${D}"usr/lib{,32,64} \ + "${D}"usr/X11R6/lib{,32,64} ; do + [[ ! -d ${i} ]] && continue + + for j in "${i}"/*.so.* "${i}"/*.so ; do + [[ ! -e ${j} ]] && continue + if [[ -L ${j} ]] ; then + linkdest=$(readlink "${j}") + if [[ ${linkdest} == /* ]] ; then + vecho -e "\a\n" + vecho "QA Notice: Found an absolute symlink in a library directory:" + vecho " ${j#${D}} -> ${linkdest}" + vecho " It should be a relative symlink if in the same directory" + vecho " or a linker script if it crosses the /usr boundary." + fi + continue + fi + [[ -x ${j} ]] && continue + vecho "making executable: ${j#${D}}" + chmod +x "${j}" + done + + for j in "${i}"/*.a "${i}"/*.la ; do + [[ ! -e ${j} ]] && continue + [[ -L ${j} ]] && continue + [[ ! -x ${j} ]] && continue + vecho "removing executable bit: ${j#${D}}" + chmod -x "${j}" + done + done + + # When installing static libraries into /usr/lib and shared libraries into + # /lib, we have to make sure we have a linker script in /usr/lib along side + # the static library, or gcc will utilize the static lib when linking :(. + # http://bugs.gentoo.org/4411 + abort="no" + for a in "${D}"usr/lib*/*.a ; do + s=${a%.a}.so + if [[ ! -e ${s} ]] ; then + s=${s%usr/*}${s##*/usr/} + if [[ -e ${s} ]] ; then + vecho -e "\a\n" + vecho "QA Notice: missing gen_usr_ldscript for ${s##*/}\a" + abort="yes" + fi + fi + done + [[ ${abort} == "yes" ]] && die "add those ldscripts" + + # Make sure people don't store libtool files or static libs in /lib + f=$(ls "${D}"lib*/*.{a,la} 2>/dev/null) + if [[ -n ${f} ]] ; then + vecho -e "\a\n" + vecho "QA Notice: excessive files found in the / partition\a" + vecho "${f}" + vecho -e "\a\n" + die "static archives (*.a) and libtool library files (*.la) do not belong in /" + fi + + # Verify that the libtool files don't contain bogus $D entries. + abort="no" + for a in "${D}"usr/lib*/*.la ; do + s=${a##*/} + if grep -qs "${D}" "${a}" ; then + vecho -e "\a\n" + vecho "QA Notice: ${s} appears to contain PORTAGE_TMPDIR paths" + abort="yes" + fi + done + [[ ${abort} == "yes" ]] && die "soiled libtool library files found" + # Portage regenerates this on the installed system. if [ -f "${D}/usr/share/info/dir.gz" ]; then rm -f "${D}/usr/share/info/dir.gz" @@ -208,7 +304,6 @@ install_qa_check() { done [[ ${abort} == yes ]] && die "multilib-strict check failed!" fi - } diff --git a/bin/prepall b/bin/prepall index 8471892dd..3ab821573 100755 --- a/bin/prepall +++ b/bin/prepall @@ -17,96 +17,6 @@ prepallman prepallinfo prepallstrip -# this should help to ensure that all (most?) shared libraries are executable -# and that all libtool scripts / static libraries are not executable -for i in "${D}"opt/*/lib{,32,64} \ - "${D}"lib{,32,64} \ - "${D}"usr/lib{,32,64} \ - "${D}"usr/X11R6/lib{,32,64} ; do - [[ ! -d ${i} ]] && continue - - for j in "${i}"/*.so.* "${i}"/*.so ; do - [[ ! -e ${j} ]] && continue - if [[ -L ${j} ]] ; then - linkdest=$(readlink "${j}") - if [[ ${linkdest} == /* ]] ; then - vecho -e "\a" - vecho "QA Notice: Found an absolute symlink in a library directory:" - vecho " ${j#${D}} -> ${linkdest}" - vecho " It should be a relative symlink if in the same directory" - vecho " or a linker script if it crosses the /usr boundary." - fi - continue - fi - [[ -x ${j} ]] && continue - vecho "making executable: ${j#${D}}" - chmod +x "${j}" - done - - for j in "${i}"/*.a "${i}"/*.la ; do - [[ ! -e ${j} ]] && continue - [[ -L ${j} ]] && continue - [[ ! -x ${j} ]] && continue - vecho "removing executable bit: ${j#${D}}" - chmod -x "${j}" - done -done - -# When installing static libraries into /usr/lib and shared libraries into -# /lib, we have to make sure we have a linker script in /usr/lib along side -# the static library, or gcc will utilize the static lib when linking :(. -# http://bugs.gentoo.org/4411 -for a in "${D}"usr/lib*/*.a ; do - s=${a%.a}.so - if [[ ! -e ${s} ]] ; then - s=${s%usr/*}${s##*/usr/} - if [[ -e ${s} ]] ; then - vecho -e "\aQA Notice: missing gen_usr_ldscript for ${s##*/}\a" - sleep 1 - fi - fi -done - -# Make sure people don't store libtool files or static libs in /lib -f=$(ls "${D}"lib*/*.{a,la} 2>/dev/null) -if [[ -n ${f} ]] ; then - vecho -e "\n\aQA Notice: excessive files found in the / partition\a" - vecho "${f}" - sleep 1 -fi - -# Verify that the libtool files don't contain bogus $D entries. -for a in "${D}"usr/lib*/*.la ; do - s=${a##*/} - if grep -qs "${D}" "${a}" ; then - vecho -e "\n\aQA Notice: ${s} appears to contain PORTAGE_TMPDIR paths\a" - sleep 1 - fi -done - -if type -p scanelf > /dev/null ; then - -# 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 }') - if [[ -n ${f} ]] ; then - vecho -e "\n\aQA Notice: the following shared libraries lack a SONAME\a" - vecho "${f}" - vecho - sleep 1 - fi - - f=$(scanelf -ByF '%n %p' "${d}"/lib*.so* | gawk '$2 == "" { print }') - if [[ -n ${f} ]] ; then - vecho -e "\n\aQA Notice: the following shared libraries lack NEEDED entries\a" - vecho "${f}" - vecho - sleep 1 - fi -done - -fi - if type -p chflags &>/dev/null && type -p mtree &>/dev/null; then # Restore all the file flags that were saved at the beginning of prepall. mtree -U -e -p "${D}" -k flags < "${T}/bsdflags.mtree" &> /dev/null -- cgit v1.2.3-1-g7c22