aboutsummaryrefslogtreecommitdiff
path: root/common/hooks/pre-pkg/06-shlib-provides.sh
blob: fc39f6bfbe4865d4ae7869d9392af27be47b4106 (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
# 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) || exit 1

	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*|application/x-pie-executable*)
			# 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
		tr '\n' ' ' < "${_tmpfile}" > ${_destdir}/shlib-provides
		echo >> ${_destdir}/shlib-provides
	fi
	rm -f ${_tmpfile}
}

hook() {
	local _destdir32=${XBPS_DESTDIR}/${pkgname}-32bit-${version}

	if [ -n "$noshlibprovides" ]; then
		return 0
	fi

	# native pkg
	collect_sonames ${PKGDESTDIR}
	# 32bit pkg
	collect_sonames ${_destdir32}
}