diff options
author | mat <mat@FreeBSD.org> | 2016-08-29 23:23:52 +0800 |
---|---|---|
committer | mat <mat@FreeBSD.org> | 2016-08-29 23:23:52 +0800 |
commit | f0d5bf5df0dfea5b003fe7a8b81d6062db13b48e (patch) | |
tree | 32666c11de37c49f07b90c553659ef781d1b370f /Mk | |
parent | ce4a5d5a7192d99b57644698685026849da96059 (diff) | |
download | freebsd-ports-gnome-f0d5bf5df0dfea5b003fe7a8b81d6062db13b48e.tar.gz freebsd-ports-gnome-f0d5bf5df0dfea5b003fe7a8b81d6062db13b48e.tar.zst freebsd-ports-gnome-f0d5bf5df0dfea5b003fe7a8b81d6062db13b48e.zip |
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
Diffstat (limited to 'Mk')
-rw-r--r-- | Mk/Scripts/qa.sh | 38 | ||||
-rw-r--r-- | Mk/bsd.port.mk | 1 |
2 files changed, 38 insertions, 1 deletions
diff --git a/Mk/Scripts/qa.sh b/Mk/Scripts/qa.sh index da6383a2cf9c..f6cb2fc548e3 100644 --- a/Mk/Scripts/qa.sh +++ b/Mk/Scripts/qa.sh @@ -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} diff --git a/Mk/bsd.port.mk b/Mk/bsd.port.mk index 5cf8d1a89141..047ae5d11c04 100644 --- a/Mk/bsd.port.mk +++ b/Mk/bsd.port.mk @@ -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,}' \ |