From aa19b5d01e7451f1b0ee5174b6e0ed239b6d6e4f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=C4=90o=C3=A0n=20Tr=E1=BA=A7n=20C=C3=B4ng=20Danh?= Date: Tue, 25 Jun 2024 20:49:38 +0700 Subject: [PATCH] hooks/post-install: check for -private-devel if PRIVATE_API is used --- .../hooks/post-install/15-qt-private-api.sh | 60 +++++++++++++++++++ 1 file changed, 60 insertions(+) create mode 100644 common/hooks/post-install/15-qt-private-api.sh diff --git a/common/hooks/post-install/15-qt-private-api.sh b/common/hooks/post-install/15-qt-private-api.sh new file mode 100644 index 00000000000000..aa6132d2f0858e --- /dev/null +++ b/common/hooks/post-install/15-qt-private-api.sh @@ -0,0 +1,60 @@ +# vim: set ts=4 sw=4 et ft=bash : +# +# This hook execute the following tasks: +# - warn if packages uses private Qt API but makedepends doesn't have +# qt6-*-private-devel +# +# This hook only really target qt6-base-private-devel, a lot of packages +# linked with Qt6::CorePrivate and Qt6::GuiPrivate, yet don't need its +# headers. + +get_qt_private() { + local _elf _fn _lf + find ${PKGDESTDIR} -type f | + while read -r _fn; do + trap - ERR + _lf=${_fn#${PKGDESTDIR}} + if [ "${skiprdeps/${_lf}/}" != "${skiprdeps}" ]; then + continue + fi + read -n4 _elf < "$_fn" + if [ "$_elf" = $'\177ELF' ]; then + $OBJDUMP -p "$_fn" | + sed -n ' + /required from /{s/.*required from \(.*\):/\1/;h;} + /Qt_[0-9]*_PRIVATE_API/{g;p;} + ' + fi + done | + sort -u +} + + +hook() { + local _list _shlib _version _md _v _ok + + if [ -n "$noverifyrdeps" ]; then + return 0 + fi + + _list=$(get_qt_private) + for _shlib in $_list; do + msg_normal "${pkgver}: requires PRIVATE_API from $_shlib\n" + done + _version=$(printf '%s\n' $_list | sed 's/^libQt\([0-9]*\).*/\1/' | grep -v '^5$' | uniq) + for _v in $_version; do + _ok= + for _md in ${makedepends}; do + case "${_md}" in + # Anything will works, because they're updated together + qt${_v}-*-private-devel) + _ok=yes + break + ;; + esac + done + if [ -z "$_ok" ]; then + msg_warn "${pkgver}: using Qt${_v}_PRIVATE_API but doesn't use qt${_v}-*-private-devel\n" + fi + done +}