void-packages/common/hooks/pre-pkg/06-shlib-provides.sh
Christian Neukirchen e3f0ce021e pre-pkg/06-shlib-provides.sh: revamp soname registration.
We now register all versioned sonames, and unversioned sonames only
when in libdir.  (E.g. libdb and tcl use version numbers in the
library name, and have unversioned sonames.)

Closes #2699.
2015-10-06 20:17:28 +02:00

57 lines
1.4 KiB
Bash

# This hook executes the following tasks:
# - generates shlib-provides file for xbps-create(8)
collect_sonames() {
local _destdir="$1" f _soname _fname _pattern
local _pattern="^[[:alnum:]]+(.*)+\.so(\.[0-9]+)*$"
local _versioned_pattern="^[[:alnum:]]+(.*)+\.so(\.[0-9]+)+$"
local _tmpfile="$(mktemp)"
if [ ! -d ${_destdir} ]; then
rm -f ${_tmpfile}
return 0
fi
# real pkg
find ${_destdir} -type f -name "*.so*" | while read f; do
_fname="${f##*/}"
case "$(file -bi "$f")" in
application/x-sharedlib*)
# shared library
_soname=$(${OBJDUMP} -p "$f"|grep SONAME|awk '{print $2}')
# Register all versioned sonames, and
# unversioned sonames only when in libdir.
if [[ ${_soname} =~ ${_versioned_pattern} ]] ||
[[ ${_soname} =~ ${_pattern} &&
( -e ${_destdir}/usr/lib/${_fname} ||
-e ${_destdir}/usr/lib32/${_fname} ) ]]; then
echo "${_soname}" >> ${_tmpfile}
echo " SONAME ${_soname} from ${f##${_destdir}}"
fi
;;
esac
done
for f in ${shlib_provides}; do
echo "$f" >> ${_tmpfile}
done
if [ -s "${_tmpfile}" ]; then
cat ${_tmpfile} | tr '\n' ' ' > ${_destdir}/shlib-provides
echo >> ${_destdir}/shlib-provides
fi
rm -f ${_tmpfile}
}
hook() {
local _destdir32=${XBPS_DESTDIR}/${pkgname}-32bit-${version}
if [ -z "$shlib_provides" -a -n "$noarch" -o -n "$noshlibprovides" ]; then
return 0
fi
# native pkg
collect_sonames ${PKGDESTDIR}
# 32bit pkg
collect_sonames ${_destdir32}
}