06-shlib-provides.sh (1467B)
1# This hook executes the following tasks: 2# - generates shlib-provides file for xbps-create(8) 3 4collect_sonames() { 5 local _destdir="$1" f _soname _fname _pattern 6 local _pattern="^[[:alnum:]]+(.*)+\.so(\.[0-9]+)*$" 7 local _versioned_pattern="^[[:alnum:]]+(.*)+\.so(\.[0-9]+)+$" 8 local _tmpfile=$(mktemp) || exit 1 9 10 if [ ! -d ${_destdir} ]; then 11 rm -f ${_tmpfile} 12 return 0 13 fi 14 15 # real pkg 16 find ${_destdir} -type f -name "*.so*" | while read f; do 17 _fname="${f##*/}" 18 case "$(file -bi "$f")" in 19 application/x-sharedlib*|application/x-pie-executable*) 20 # shared library 21 _soname=$(${OBJDUMP} -p "$f"|grep SONAME|awk '{print $2}') 22 # Register all versioned sonames, and 23 # unversioned sonames only when in libdir. 24 if [[ ${_soname} =~ ${_versioned_pattern} ]] || 25 [[ ${_soname} =~ ${_pattern} && 26 ( -e ${_destdir}/usr/lib/${_fname} || 27 -e ${_destdir}/usr/lib32/${_fname} ) ]]; then 28 echo "${_soname}" >> ${_tmpfile} 29 echo " SONAME ${_soname} from ${f##${_destdir}}" 30 fi 31 ;; 32 esac 33 done 34 35 for f in ${shlib_provides}; do 36 echo "$f" >> ${_tmpfile} 37 done 38 if [ -s "${_tmpfile}" ]; then 39 tr '\n' ' ' < "${_tmpfile}" > ${_destdir}/shlib-provides 40 echo >> ${_destdir}/shlib-provides 41 fi 42 rm -f ${_tmpfile} 43} 44 45hook() { 46 local _destdir32=${XBPS_DESTDIR}/${pkgname}-32bit-${version} 47 48 if [ -n "$noshlibprovides" ]; then 49 return 0 50 fi 51 52 # native pkg 53 collect_sonames ${PKGDESTDIR} 54 # 32bit pkg 55 collect_sonames ${_destdir32} 56}