aboutsummaryrefslogtreecommitdiff
path: root/common/hooks/pre-pkg/05-generate-32bit-runtime-deps.sh
blob: 3685f762315b0cc4109f0ee47852019f9d685aef (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
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
hook() {
	local destdir32=${XBPS_DESTDIR}/${pkgname}-32bit-${version}

	# By default always enabled unless "lib32disabled" is set.
	if [ -n "$lib32disabled" ]; then
		return
	fi

	# This hook will only work when building for x86.
	if [ "$XBPS_TARGET_MACHINE" != "i686" ]; then
		return
	fi

	if [ ! -d ${destdir32} ]; then
		return
	fi

	# If the rdeps file exist (runtime deps), copy and then modify it for
	# 32bit dependencies.
	trap - ERR

	: > ${destdir32}/rdeps

	if [ -s "$PKGDESTDIR/rdeps" ]; then
		if [ -n "$lib32depends" ]; then
			_deps="${lib32depends}"
		else
			_deps="$(<${PKGDESTDIR}/rdeps)"
		fi
		for f in ${_deps}; do
			unset found pkgn pkgv _shprovides

			pkgn="$($XBPS_UHELPER_CMD getpkgdepname $f)"
			if [ -z "${pkgn}" ]; then
				pkgn="$($XBPS_UHELPER_CMD getpkgname $f)"
				if [ -z "${pkgn}" ]; then
					msg_error "$pkgver: invalid dependency $f\n"
				fi
				pkgv="-$($XBPS_UHELPER_CMD getpkgversion ${f})"
			else
				pkgv="$($XBPS_UHELPER_CMD getpkgdepversion ${f})"
			fi
			# If dependency is a development pkg switch it to 32bit.
			if [[ $pkgn == *-devel ]]; then
				echo "   RDEP: $f -> ${pkgn}-32bit${pkgv} (development)"
				printf "${pkgn}-32bit${pkgv} " >> ${destdir32}/rdeps
				continue
			fi
			# If dependency does not have "shlib-provides" do not
			# change it to 32bit.
			for x in ${subpackages}; do
				if [ "$x" = "$pkgn" ]; then
					found=1
					break
				fi
			done
			if [ -z "$found" ]; then
				# Dependency is not a subpkg, check shlib-provides
				# via binpkgs.
				_shprovides="$($XBPS_QUERY_CMD -R --property=shlib-provides "$pkgn")"
				if [ -n "${_shprovides}" ]; then
					echo "   RDEP: $f -> ${pkgn}-32bit${pkgv} (shlib-provides)"
					printf "${pkgn}-32bit${pkgv} " >> ${destdir32}/rdeps
				else
					echo "   RDEP: $f -> ${pkgn}${pkgv} (no shlib-provides)"
					printf "${pkgn}${pkgv} " >> ${destdir32}/rdeps
				fi
			else
				if [ -s ${XBPS_DESTDIR}/${pkgn}-${version}/shlib-provides ]; then
					# Dependency is a subpkg; check if it provides any shlib
					# and convert to 32bit if true.
					echo "   RDEP: $f -> ${pkgn}-32bit${pkgv} (subpkg, shlib-provides)"
					printf "${pkgn}-32bit${pkgv} " >> ${destdir32}/rdeps
				else
					echo "   RDEP: $f -> ${pkgn}${pkgv} (subpkg, no shlib-provides)"
					printf "${pkgn}${pkgv} " >> ${destdir32}/rdeps
				fi
			fi
		done
	fi
	# If it's a development pkg add a dependency to the 64bit pkg.
	if [[ $pkgn == *-devel ]]; then
		echo "   RDEP: ${pkgver}"
		printf "${pkgver} " >> ${destdir32}/rdeps
	fi
	printf "\n" >> ${destdir32}/rdeps
}