On 2026/05/17 22:28, Kirill A. Korinsky wrote:
> ports@,
> 
> I'd like to add check-shlib-syms which runs check_sym for port's .so against
> system isntalled .so.
> 
> Quite useful to determin does SHARED_LIBS need to be updated.
> 
> I'm using it for a bit longer than a week, and it quite usefull.
> 
> Feedback? Tests? Ok?

ok.

I wonder if it would be worth adding a mode to check_sym that skips
printing external reference / PLT changes and using that? I don't
think they're very useful for ports and (looking at bumps in some
ports@ submissions) they confuse people sometimes.


> 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 15:26:52 -0000
> @@ -172,6 +172,13 @@ Apply
>  to all subpackages of the current port.
>  .It Cm checkpatch
>  Check that patches would apply cleanly, but do not modify anything.
> +.It Cm check-shlib-syms
> +Compare exported dynamic symbols for
> +.Ev PLIST
> +shared libraries after
> +.Cm fake ,
> +against matching installed libraries.
> +Libraries with no installed counterpart are reported and skipped.
>  .It Cm checksum
>  Compute a
>  .Xr sha256 1
> 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 15:28:07 -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-shlib-syms 
> update-patches:
>  .  if !defined(IGNORE_SILENT)
>       @${ECHO_MSG} "===>  ${FULLPKGNAME${SUBPACKAGE}}${_MASTER} 
> ${IGNORE${SUBPACKAGE}} ${_EXTRA_IGNORE}."
>  .  endif
> @@ -2560,6 +2561,21 @@ port-lib-depends-check: ${WRKINST}/.save
>                       ${_CHECK_LIB_DEPENDS} -i -s ${WRKINST}/.saved_libs; \
>       done
>  
> +check-shlib-syms: ${_FAKE_COOKIE}
> +     @[ -x ${_CHECK_SYM} ] || { echo "check-shlib-syms: ${_CHECK_SYM} 
> doesn't exist"; exit 1; }; \
> +     for s in ${BUILD_PACKAGES}; do \
> +             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" ] || { echo "check-shlib-syms: no 
> installed library for $$_l"; continue; }; \
> +                     ${_CHECK_SYM} "$$old" "$$new"; \
> +             done; \
> +     done
> +
>  # 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',
> @@ -3853,7 +3869,7 @@ _all_phony = ${_recursive_depends_target
>       print-package-args _print-package-signature-lib \
>       _print-package-signature-run _print-packagename 
> _recurse-all-dir-depends \
>       _recurse-test-dir-depends _recurse-run-dir-depends \
> -     build-depends-list checkpatch clean clean-depends \
> +     build-depends-list checkpatch check-shlib-syms clean clean-depends \
>       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 \
> 
> 
> -- 
> wbr, Kirill
> 

Reply via email to