diff --git a/ChangeLog b/ChangeLog index 119a6af..c038ad2 100644 --- a/ChangeLog +++ b/ChangeLog @@ -33,6 +33,10 @@ Changes in version 1.12.0 + bugfix * templates/{library,standard,standard-daemon} - Davide Madrisan: Missing requirement: "Requires(preun): %{__install_info}" + ++ improvement + * tests/test01_pkgquality - Davide Madrisan: + New test: check for libraries with undefined symbols after relocation. ------------------------------------------------------------------------------- diff --git a/po/it/test01_pkgquality.po b/po/it/test01_pkgquality.po index be96a3b..ef09a91 100644 --- a/po/it/test01_pkgquality.po +++ b/po/it/test01_pkgquality.po @@ -22,6 +22,9 @@ msgstr "questo script richiede bash versione 2 o superiore" msgid "library not found" msgstr "libreria non trovata" +msgid "utility not found" +msgstr "programma non trovato" + msgid "performing quality checks" msgstr "esecuzione dei test di qualità" @@ -73,6 +76,9 @@ msgstr "file sospetto" msgid "Hint" msgstr "Suggerimento" +msgid "checking for libraries with undefined symbols after relocation" +msgstr "ricerca di librerie con simboli indefiniti dopo rilocazione" + msgid "checking for binary files installed in /etc (see FHS)" msgstr "ricerca di file binari installati in /etc (vedi FHS)" diff --git a/tests/test01_pkgquality.in b/tests/test01_pkgquality.in index 3c78c97..0fe2abd 100644 --- a/tests/test01_pkgquality.in +++ b/tests/test01_pkgquality.in @@ -17,6 +17,13 @@ if [[ -z "$LANG" && -r /etc/sysconfig/i18n ]]; then fi TEXTDOMAIN="test01_pkgquality"; export TEXTDOMAIN +# check if all the needed tools are available +for tool in cat chmod cpio date file find fold ftp getopt grep \ + mktemp ldd objdump; do + [ "$(type -p $tool)" ] || + notify.error $"utility not found"": \`$tool'" +done + function alltests() { # FIXME: add to 'po' file notify.note " * ${NOTE}"$"performing quality checks""${NORM}""..." @@ -217,6 +224,36 @@ ${NOTE}"$"Hint"":${NORM} %attr(0755,root,root) %{_bindir}/ -----------------------------" + # check for libraries with undefined symbols + notify.note " * ${NOTE}"$"\ +checking for libraries with undefined symbols after relocation""${NORM}..." + + let "i = 0" + local undefsyms + for pck in ${rpmpkg_name[@]}; do + # skip debug packages + [[ "${pck##*/}" =~ -debug- ]] && { let "i += 1"; continue; } + + pushd $tmpextractdir/$i >/dev/null + # find *.so.* files that are not symlinks to dynamic libraries + for f in `find -mindepth 1 -type f \ + \( -name *\.so\.* -not -name *.debug \) -exec file {} \; | \ + grep 'shared object' | sed -n 's/.\([^:]*\):.*/\1/p'`; do + undefsyms="\ +$(LC_ALL=C ldd -d -r "$f" 2>/dev/null |& grep "undefined symbol")" + if [ "$undefsyms" ]; then + notify.warning "${NOTE}${pck##*/}${NORM}" + echo -n "${CRIT}" + LC_ALL=C ldd -d -r "$f" 2>/dev/null |& \ + grep "undefined symbol" | sed "s,.*, - &," + echo -n "${NORM}" + let "total_issues += 1" + fi + done + popd >/dev/null + let "i += 1" + done + # check for binary files in etc (see FHS-2.2) notify.note " * ${NOTE}"$"\ checking for binary files installed in /etc (see FHS)""${NORM}..."