On Fri, 08 May 2026 02:39:57 +0200,
Theo Buehler <[email protected]> wrote:
>
> It's late and I haven't looked at the makefile parts. The manual
> describes exactly what I'd like to have.
>
> What I don't like about the approach of copying a version of the
> guenther magic into ports is that it reintroduces the issue of keeping
> the two in sync. I'd rather avoid that.
>
> I think it would be okay to error if ${BSDSRCDIR}/lib/check_sym doesn't
> exist (or even /usr/src/lib/check_sym if BSDSRCDIR is unavailable).
> Then it should be possible reuse a pretty dumb wrapper like the script
> sthen shared. Maybe I miss a subtlety.
>
Actually we don't need wrapper, or I need sleep.
I had tested it a bit and it works as expected.
Index: /usr/src/share/man/man5/bsd.port.mk.5
===================================================================
RCS file: /home/cvs/src/share/man/man5/bsd.port.mk.5,v
diff -u -p -r1.654 bsd.port.mk.5
--- /usr/src/share/man/man5/bsd.port.mk.5 4 Nov 2025 12:52:28 -0000
1.654
+++ /usr/src/share/man/man5/bsd.port.mk.5 8 May 2026 02:11:59 -0000
@@ -158,6 +158,14 @@ Essentially invoke
env -i ${MAKE_ENV} ${MAKE_PROGRAM} ${MAKE_FLAGS} \e
-f ${MAKE_FILE} ${ALL_TARGET}
.Ed
+.It Cm check-diffsyms
+Compare exported dynamic symbols for
+.Ev PLIST
+shared libraries after
+.Cm fake ,
+against matching installed libraries.
+Requires the package to be installed; skips libraries with no installed
+counterpart.
.It Cm check-register
Introspection target.
Verify from the ports tree, without building anything, that the current
Index: /usr/ports/infrastructure/mk/bsd.port.mk
===================================================================
RCS file: /home/cvs/ports/infrastructure/mk/bsd.port.mk,v
diff -u -p -r1.1649 bsd.port.mk
--- /usr/ports/infrastructure/mk/bsd.port.mk 1 Apr 2026 15:14:57 -0000
1.1649
+++ /usr/ports/infrastructure/mk/bsd.port.mk 8 May 2026 02:07:20 -0000
@@ -2026,6 +2026,7 @@ CHECK_LIB_DEPENDS_ARGS += -F pthread
_CHECK_LIB_DEPENDS = PORTSDIR=${PORTSDIR} ${_PERLSCRIPT}/check-lib-depends
_CHECK_LIB_DEPENDS += -d ${_PKG_REPO} -B ${WRKINST} ${CHECK_LIB_DEPENDS_ARGS}
+_CHECK_SYM = ${BSDSRCDIR}/lib/check_sym
.for _s in ${MULTI_PACKAGES}
. if ${STATIC_PLIST${_s}:L} == "no"
@@ -2536,7 +2537,7 @@ _internal-all _internal-build _internal-
_internal-subpackage _internal-subupdate _internal-uninstall \
_internal-update _internal-update-or-install _internal-generate-readmes
\
_internal-update-or-install-all _internal-update-plist \
- lib-depends-check port-lib-depends-check update-patches:
+ lib-depends-check port-lib-depends-check check-diffsyms update-patches:
. if !defined(IGNORE_SILENT)
@${ECHO_MSG} "===> ${FULLPKGNAME${SUBPACKAGE}}${_MASTER}
${IGNORE${SUBPACKAGE}} ${_EXTRA_IGNORE}."
. endif
@@ -2560,6 +2561,27 @@ port-lib-depends-check: ${WRKINST}/.save
${_CHECK_LIB_DEPENDS} -i -s ${WRKINST}/.saved_libs; \
done
+check-diffsyms: ${_FAKE_COOKIE}
+.for _S in ${BUILD_PACKAGES}
+ @b=$$(cd ${.CURDIR} && SUBPACKAGE=${_S} ${MAKE} print-plist|sed -ne
'/^@pkgpath /s,,-e ,p'); \
+ a=$$(${PKG_INFO} -e ${FULLPKGPATH${_S}} $$b 2>/dev/null |sort -u); \
+ case $$a in \
+ '') echo 1>&2 "Fatal: no installed package for
${FULLPKGPATH${_S}}"; exit 1;; \
+ *) [ -x ${_CHECK_SYM} ] || { echo 1>&2 "Fatal: ${_CHECK_SYM}
doesn't exist"; exit 1; }; \
+ cd ${.CURDIR} && SUBPACKAGE=${_S} ${MAKE} print-plist-libs |
\
+ while read _l; do \
+ case $$_l in */lib*.so.*|lib*.so.*) ;; *)
continue;; esac; \
+ case $$_l in \
+ /*) oldpat=$${_l%.so.*}.so.*;
new=${WRKINST}$$_l;; \
+ *) oldpat=${PREFIX}/$${_l%.so.*}.so.*;
new=${WRKINST}${PREFIX}/$$_l;; \
+ esac; \
+ old=$$(ls -rt $$oldpat 2>/dev/null | tail -1); \
+ [ -n "$$old" ] || continue; \
+ ${_CHECK_SYM} "$$old" "$$new" || exit 1; \
+ done;; \
+ esac
+.endfor
+
# Most standard port targets create a cookie to avoid being re-run.
#
# fetch is an exception, as it uses the files it fetches as `cookies',
@@ -3857,7 +3879,7 @@ _all_phony = ${_recursive_depends_target
delete-package distpatch do-build do-configure do-distpatch \
do-gen do-extract do-install do-test fetch-all \
install-all lib-depends lib-depends-list \
- peek-ftp port-lib-depends-check post-build post-configure \
+ peek-ftp port-lib-depends-check check-diffsyms post-build
post-configure \
post-distpatch post-extract post-install \
post-patch post-test pre-build pre-configure pre-extract pre-fake \
pre-install pre-patch pre-test prepare \
--
wbr, Kirill