void-packages

Void Source Packages
git clone git://ezup.dev/void-packages.git
Log | Files | Refs | README | LICENSE

05-prepare-32bit.sh (5136B)


      1# This hook creates a new PKGDESTDIR with 32bit files for x86_64.
      2#
      3# Variables that can be used in templates:
      4#	- lib32depends: if set, 32bit pkg will use this rather than "depends".
      5#	- lib32disabled: if set, no 32bit pkg will be created.
      6#	- lib32files: additional files to add to the 32bit pkg (abs paths, separated by blanks).
      7#	- lib32symlinks: makes a symlink from lib32 to lib of the specified file (basename).
      8#	- lib32mode:
      9#		* if unset only files for libraries will be copied.
     10#		* if set to "full" all files will be copied.
     11
     12hook() {
     13	local destdir32=${XBPS_DESTDIR}/${pkgname}-32bit-${version}
     14
     15	# By default always enabled unless "lib32disabled" is set.
     16	if [ -n "$lib32disabled" ]; then
     17		return
     18	fi
     19	# This hook will only work when building for x86.
     20	if [ "$XBPS_TARGET_MACHINE" != "i686" ]; then
     21		return
     22	fi
     23	if [ -z "$lib32mode" ]; then
     24		# Library mode, copy only relevant files to new destdir.
     25		#
     26		# If /usr/lib does not exist don't continue...
     27		if [ ! -d ${PKGDESTDIR}/usr/lib ]; then
     28			return
     29		fi
     30		mkdir -p ${destdir32}/usr/lib32
     31		cp -a ${PKGDESTDIR}/usr/lib/* ${destdir32}/usr/lib32
     32
     33		# Only keep shared libs, static libs, and pkg-config files.
     34		find "${destdir32}" -not \( \
     35			-name '*.pc' -or \
     36			-name '*.so' -or \
     37			-name '*.so.*' -or \
     38			-name '*.a' -or \
     39			-name '*.la' -or \
     40			-name '*.o' -or \
     41			-type d \
     42		\) -delete
     43
     44		# Remove empty dirs.
     45		while IFS= read -r -d '' f; do
     46			_dir="${f##${destdir32}}"
     47			[ -z "${_dir}" ] && continue
     48			rmdir --ignore-fail-on-non-empty -p "$f" &>/dev/null
     49		done < <(find ${destdir32} -type d -empty -print0 | sort -uz)
     50
     51		# Switch pkg-config files to lib32.
     52		if [ -d ${destdir32}/usr/lib32/pkgconfig ]; then
     53			sed -e 's,/usr/lib$,/usr/lib32,g' \
     54			    -e 's,${exec_prefix}/lib$,${exec_prefix}/lib32,g' \
     55			    -i ${destdir32}/usr/lib32/pkgconfig/*.pc
     56		fi
     57	elif [ "$lib32mode" = "full" ]; then
     58		# Full 32bit mode; copy everything to new destdir.
     59		mkdir -p ${destdir32}
     60		cp -a ${PKGDESTDIR}/* ${destdir32}/
     61		# remove symlink
     62		if [ -h ${destdir32}/usr/lib32 ]; then
     63			rm ${destdir32}/usr/lib32
     64		fi
     65		# if /usr/lib dir exists move it to lib32.
     66		if [ -d ${destdir32}/usr/lib ]; then
     67			mv ${destdir32}/usr/lib ${destdir32}/usr/lib32
     68		fi
     69	fi
     70	if [ ! -d ${destdir32} ]; then
     71		return
     72	fi
     73
     74	# If the rdeps file exist (runtime deps), copy and then modify it for
     75	# 32bit dependencies.
     76	trap - ERR
     77
     78	: > ${destdir32}/rdeps
     79
     80	if [ -s "$PKGDESTDIR/rdeps" ]; then
     81		if [ -n "$lib32depends" ]; then
     82			_deps="${lib32depends}"
     83		else
     84			_deps="$(<${PKGDESTDIR}/rdeps)"
     85		fi
     86		for f in ${_deps}; do
     87			unset found pkgn pkgv _shprovides
     88
     89			pkgn="$($XBPS_UHELPER_CMD getpkgdepname $f)"
     90			if [ -z "${pkgn}" ]; then
     91				pkgn="$($XBPS_UHELPER_CMD getpkgname $f)"
     92				if [ -z "${pkgn}" ]; then
     93					msg_error "$pkgver: invalid dependency $f\n"
     94				fi
     95				pkgv="-$($XBPS_UHELPER_CMD getpkgversion ${f})"
     96			else
     97				pkgv="$($XBPS_UHELPER_CMD getpkgdepversion ${f})"
     98			fi
     99			# If dependency is a development pkg switch it to 32bit.
    100			if [[ $pkgn =~ '-devel' ]]; then
    101				echo "   RDEP: $f -> ${pkgn}-32bit${pkgv} (development)"
    102				printf "${pkgn}-32bit${pkgv} " >> ${destdir32}/rdeps
    103				continue
    104			fi
    105			# If dependency does not have "shlib-provides" do not
    106			# change it to 32bit.
    107			for x in ${subpackages}; do
    108				if [ "$x" = "$pkgn" ]; then
    109					found=1
    110					break
    111				fi
    112			done
    113			if [ -z "$found" ]; then
    114				# Dependency is not a subpkg, check shlib-provides
    115				# via binpkgs.
    116				_shprovides="$($XBPS_QUERY_CMD -R --property=shlib-provides "$pkgn")"
    117				if [ -n "${_shprovides}" ]; then
    118					echo "   RDEP: $f -> ${pkgn}-32bit${pkgv} (shlib-provides)"
    119					printf "${pkgn}-32bit${pkgv} " >> ${destdir32}/rdeps
    120				else
    121					echo "   RDEP: $f -> ${pkgn}${pkgv} (no shlib-provides)"
    122					printf "${pkgn}${pkgv} " >> ${destdir32}/rdeps
    123				fi
    124			else
    125				if [ -s ${XBPS_DESTDIR}/${pkgn}-${version}/shlib-provides ]; then
    126					# Dependency is a subpkg; check if it provides any shlib
    127					# and convert to 32bit if true.
    128					echo "   RDEP: $f -> ${pkgn}-32bit${pkgv} (subpkg, shlib-provides)"
    129					printf "${pkgn}-32bit${pkgv} " >> ${destdir32}/rdeps
    130				else
    131					echo "   RDEP: $f -> ${pkgn}${pkgv} (subpkg, no shlib-provides)"
    132					printf "${pkgn}${pkgv} " >> ${destdir32}/rdeps
    133				fi
    134			fi
    135		done
    136	fi
    137
    138	# Also install additional files set via "lib32files".
    139	for f in ${lib32files}; do
    140		echo "$pkgver: installing additional files: $f ..."
    141		_targetdir=${destdir32}/${f%/*}/
    142		mkdir -p ${_targetdir/\/usr\/lib/\/usr\/lib32}
    143		cp -a ${PKGDESTDIR}/${f} ${_targetdir/\/usr\/lib/\/usr\/lib32}
    144	done
    145	# Additional symlinks to the native libdir.
    146	for f in ${lib32symlinks}; do
    147		echo "$pkgver: symlinking $f to the native libdir..."
    148		if [ "${f%/*}" != "${f}" ]; then
    149			mkdir -p ${destdir32}/usr/lib{,32}/${f%/*}/
    150		else
    151			mkdir -p ${destdir32}/usr/lib{,32}/
    152		fi
    153		ln -sfr ${destdir32}/usr/lib32/$f ${destdir32}/usr/lib/$f
    154	done
    155	# If it's a development pkg add a dependency to the 64bit pkg.
    156	if [[ $pkgname =~ '-devel' ]]; then
    157		echo "   RDEP: ${pkgver}"
    158		printf "${pkgver} " >> ${destdir32}/rdeps
    159	fi
    160	printf "\n" >> ${destdir32}/rdeps
    161}