From f32e0b76d7ab2906eef22fdcd0df813e997737b6 Mon Sep 17 00:00:00 2001 From: Juan RP Date: Thu, 27 Mar 2014 13:57:17 +0100 Subject: [PATCH] hooks/post-install/99-pkglint: make the shlibs checks work correctly with vpkgs. --- common/hooks/post-install/99-pkglint.sh | 19 ++++++++++++++++++- 1 file changed, 18 insertions(+), 1 deletion(-) diff --git a/common/hooks/post-install/99-pkglint.sh b/common/hooks/post-install/99-pkglint.sh index 2d41e1cd84..a23937c4ba 100644 --- a/common/hooks/post-install/99-pkglint.sh +++ b/common/hooks/post-install/99-pkglint.sh @@ -4,6 +4,8 @@ hook() { local error=0 filename= rev= libname= conflictPkg= conflictFile= conflictRev= found= mapshlibs=$XBPS_COMMONDIR/shlibs + set +E + for f in bin sbin lib lib32; do if [ -d ${PKGDESTDIR}/${f} ]; then msg_red "${pkgver}: /${f} directory is not allowed, use /usr/${f}.\n" @@ -28,7 +30,9 @@ hook() { for filename in `cat ${PKGDESTDIR}/shlib-provides`; do rev=${filename#*.so.} libname=${filename%.so*} - grep -E "^${libname}\.so[\.0-9.]*[[:blank:]]+${pkgname}-[^-]+_[0-9]+$" $mapshlibs | { \ + _libname=$(echo "$libname"|sed -E 's|\+|\\+|g') + _pkgname=$(echo "$pkgname"|sed -E 's|\+|\\+|g') + grep -E "^${_libname}\.so[\.0-9.]*[[:blank:]]+${_pkgname}-[^-]+_[0-9]+$" $mapshlibs | { \ while read conflictFile conflictPkg; do found=1 conflictRev=${conflictFile#*.so.} @@ -45,6 +49,19 @@ hook() { done msg_error "${pkgver}: cannot continue with installation!\n" done + # Try to match provided shlibs in virtual packages. + for f in ${provides}; do + _vpkgname="$($XBPS_UHELPER_CMD getpkgname ${f} 2>/dev/null)" + _spkgname="$(grep "^${filename}" $mapshlibs | awk '{print $2}')" + _libpkgname="$($XBPS_UHELPER_CMD getpkgname ${_spkgname} 2>/dev/null)" + if [ -z "${_spkgname}" -o -z "${_libpkgname}" ]; then + continue + fi + if [ "${_vpkgname}" = "${_libpkgname}" ]; then + found=1 + break + fi + done; if [ -z "$found" ]; then msg_error "${pkgver}: ${libname}.so.${rev} not found in common/shlibs. Please add it.\n" fi;