aboutsummaryrefslogtreecommitdiffstats
path: root/Mk
diff options
context:
space:
mode:
authormat <mat@FreeBSD.org>2016-08-29 23:23:52 +0800
committermat <mat@FreeBSD.org>2016-08-29 23:23:52 +0800
commitf0d5bf5df0dfea5b003fe7a8b81d6062db13b48e (patch)
tree32666c11de37c49f07b90c553659ef781d1b370f /Mk
parentce4a5d5a7192d99b57644698685026849da96059 (diff)
downloadfreebsd-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.sh38
-rw-r--r--Mk/bsd.port.mk1
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,}' \