Date: Mon, 29 Aug 2016 15:23:53 +0000 (UTC) From: Mathieu Arnold <mat@FreeBSD.org> To: ports-committers@freebsd.org, svn-ports-all@freebsd.org, svn-ports-head@freebsd.org Subject: svn commit: r421068 - in head/Mk: . Scripts Message-ID: <201608291523.u7TFNra5079490@repo.freebsd.org>
next in thread | raw e-mail | index | archive | help
Author: mat Date: Mon Aug 29 15:23:52 2016 New Revision: 421068 URL: https://svnweb.freebsd.org/changeset/ports/421068 Log: Add a stage-qa check to check for the existence of SONAME in .so's. If a port provides .so.X files, they have to have a SONAME for them to work correctly. While there, incorporate a reverse soname checks in proxydeps. A port that needs a .so.X from another port which does not have a SONAME. Reviewed by: bapt Sponsored by: Absolight Differential Revision: https://reviews.freebsd.org/D7454 Modified: head/Mk/Scripts/qa.sh (contents, props changed) head/Mk/bsd.port.mk (contents, props changed) Modified: head/Mk/Scripts/qa.sh ============================================================================== --- head/Mk/Scripts/qa.sh Mon Aug 29 15:07:48 2016 (r421067) +++ head/Mk/Scripts/qa.sh Mon Aug 29 15:23:52 2016 (r421068) @@ -627,11 +627,21 @@ proxydeps() { # No results presents a blank line from heredoc. [ -z "${dep_file}" ] && continue dep_file=$(subst_dep_file ${dep_file}) + # Skip files we already checked. if listcontains ${dep_file} "${already}"; then continue fi if $(pkg which -q ${dep_file} > /dev/null 2>&1); then dep_file_pkg=$(pkg which -qo ${dep_file}) + + # Check that the .so we need has a SONAME + if [ "${dep_file_pkg}" != "${PKGORIGIN}" ]; then + if ! readelf -d "${dep_file}" | grep -q SONAME; then + err "${file} is linked to ${dep_file} which does not have a SONAME. ${dep_file_pkg} needs to be fixed." + fi + fi + + # If we don't already depend on it, and we don't provide it if ! listcontains ${dep_file_pkg} "${LIB_RUN_DEPENDS} ${PKGORIGIN}"; then err "${file} is linked to ${dep_file} from ${dep_file_pkg} but it is not declared as a dependency" proxydeps_suggest_uses ${dep_file_pkg} ${dep_file} @@ -662,9 +672,35 @@ proxydeps() { return ${rc} } +sonames() { + [ -n "${BUNDLE_LIBS}" ] && return 0 + while read f; do + # No results presents a blank line from heredoc. + [ -z "${f}" ] && continue + # Ignore symlinks + [ -f "${f}" -a ! -L "${f}" ] || continue + if ! readelf -d ${f} | grep -q SONAME; then + warn "${f} doesn't have a SONAME." + warn "pkg(8) will not register it as being provided by the port." + warn "If another port depend on it, pkg will not be able to know where it comes from." + case "${f}" in + ${STAGEDIR}${PREFIX}/lib/*/*) + warn "It is in a subdirectory, it may not be used in another port." + ;; + *) + warn "It is directly in ${PREFIX}/lib, it is probably used by other ports." + ;; + esac + fi + # Use heredoc to avoid losing rc from find|while subshell + done <<-EOT + $(find ${STAGEDIR}${PREFIX}/lib -name '*.so.*') + EOT +} + checks="shebang symlinks paths stripped desktopfileutils sharedmimeinfo" checks="$checks suidfiles libtool libperl prefixvar baselibs terminfo" -checks="$checks proxydeps" +checks="$checks proxydeps sonames" ret=0 cd ${STAGEDIR} Modified: head/Mk/bsd.port.mk ============================================================================== --- head/Mk/bsd.port.mk Mon Aug 29 15:07:48 2016 (r421067) +++ head/Mk/bsd.port.mk Mon Aug 29 15:23:52 2016 (r421068) @@ -1509,6 +1509,7 @@ QA_ENV+= STAGEDIR=${STAGEDIR} \ LOCALBASE=${LOCALBASE} \ "STRIP=${STRIP}" \ TMPPLIST=${TMPPLIST} \ + BUNDLE_LIBS=${BUNDLE_LIBS} \ LDCONFIG_DIR="${LDCONFIG_DIR}" \ PKGORIGIN=${PKGORIGIN} \ LIB_RUN_DEPENDS='${_LIB_RUN_DEPENDS:C,[^:]*:([^:]*):?.*,\1,}' \
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?201608291523.u7TFNra5079490>