void-packages/common/hooks/post-install/15-qt-private-api.sh

61 lines
1.7 KiB
Bash
Raw Normal View History

# 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
}